Procházet zdrojové kódy

1、删除屏蔽报警按钮
2、远程重启屏幕
3、密码修改
4、上传版本信息
5、报警消除
6、远程休眠

ccc před 2 týdny
rodič
revize
0589b4246e
71 změnil soubory, kde provedl 709 přidání a 293 odebrání
  1. 2 2
      buildSrc/src/main/kotlin/com/quyunshuo/sbm10/buildsrc/ProjectBuildConfig.kt
  2. 2 2
      lib_base/src/main/java/com/quyunshuo/sbm10/base/addressenum/PlcAlarmAddressEnum.kt
  3. 0 1
      lib_base/src/main/java/com/quyunshuo/sbm10/base/bean/Global.kt
  4. 1 0
      lib_base/src/main/java/com/quyunshuo/sbm10/base/bean/HeartbeatBean.kt
  5. 1 1
      lib_base/src/main/res/values-aa/strings.xml
  6. 1 2
      lib_base/src/main/res/values-ab/strings.xml
  7. 1 1
      lib_base/src/main/res/values-am/strings.xml
  8. 1 1
      lib_base/src/main/res/values-ar/strings.xml
  9. 1 1
      lib_base/src/main/res/values-bg/strings.xml
  10. 1 1
      lib_base/src/main/res/values-cs/strings.xml
  11. 1 1
      lib_base/src/main/res/values-da/strings.xml
  12. 1 1
      lib_base/src/main/res/values-de/strings.xml
  13. 1 1
      lib_base/src/main/res/values-en/strings.xml
  14. 1 1
      lib_base/src/main/res/values-es/strings.xml
  15. 1 1
      lib_base/src/main/res/values-et/strings.xml
  16. 1 1
      lib_base/src/main/res/values-fr/strings.xml
  17. 1 1
      lib_base/src/main/res/values-hr/strings.xml
  18. 1 1
      lib_base/src/main/res/values-hu/strings.xml
  19. 1 1
      lib_base/src/main/res/values-hy/strings.xml
  20. 1 1
      lib_base/src/main/res/values-it/strings.xml
  21. 1 1
      lib_base/src/main/res/values-ja/strings.xml
  22. 1 1
      lib_base/src/main/res/values-ko/strings.xml
  23. 1 1
      lib_base/src/main/res/values-lv/strings.xml
  24. 1 1
      lib_base/src/main/res/values-mn/strings.xml
  25. 1 1
      lib_base/src/main/res/values-nl/strings.xml
  26. 1 1
      lib_base/src/main/res/values-no/strings.xml
  27. 1 1
      lib_base/src/main/res/values-pl/strings.xml
  28. 1 1
      lib_base/src/main/res/values-pt/strings.xml
  29. 1 1
      lib_base/src/main/res/values-ro/strings.xml
  30. 1 1
      lib_base/src/main/res/values-ru/strings.xml
  31. 1 1
      lib_base/src/main/res/values-sk/strings.xml
  32. 1 1
      lib_base/src/main/res/values-sl/strings.xml
  33. 1 1
      lib_base/src/main/res/values-sq/strings.xml
  34. 1 1
      lib_base/src/main/res/values-sv/strings.xml
  35. 1 1
      lib_base/src/main/res/values-th/strings.xml
  36. 1 1
      lib_base/src/main/res/values-tn/strings.xml
  37. 1 1
      lib_base/src/main/res/values-tr/strings.xml
  38. 1 1
      lib_base/src/main/res/values-uk/strings.xml
  39. 2 1
      lib_base/src/main/res/values/strings.xml
  40. 11 3
      lib_common/src/main/java/com/quyunshuo/sbm10/common/constant/MMKVName.kt
  41. 5 1
      lib_common/src/main/java/com/quyunshuo/sbm10/common/constant/MqName.kt
  42. 55 27
      module_backstage/src/main/java/com/module/backstage/activity/setting/SettingActivity.kt
  43. 2 1
      module_backstage/src/main/java/com/module/backstage/activity/setting/SettingViewModel.kt
  44. 51 3
      module_backstage/src/main/java/com/module/backstage/fragment/ResetPwdFragment.kt
  45. 6 6
      module_backstage/src/main/java/com/module/backstage/fragment/param/DebugAlarmFragment.kt
  46. 2 5
      module_backstage/src/main/java/com/module/backstage/fragment/param/DebugParamFragment.kt
  47. 32 6
      module_backstage/src/main/java/com/module/backstage/fragment/product/DebugProductFragment.kt
  48. 2 2
      module_backstage/src/main/java/com/module/backstage/repo/DebugAlarmFragmentRepo.kt
  49. 2 2
      module_backstage/src/main/java/com/module/backstage/vm/DebugParamFragmentVM.kt
  50. 1 1
      module_backstage/src/main/res/drawable/backstage_shape_general_param_et.xml
  51. 1 1
      module_backstage/src/main/res/drawable/backstage_shape_other_rg_bg.xml
  52. 23 19
      module_backstage/src/main/res/layout/backstage_fragment_reset_pwd.xml
  53. 2 2
      module_backstage/src/main/res/layout/backstage_fragment_show_product.xml
  54. 27 25
      module_home/src/main/java/com/quyunshuo/module/home/activity/main/MainActivity.kt
  55. 14 8
      module_home/src/main/java/com/quyunshuo/module/home/adapter/HomeProductAdapter.kt
  56. 22 10
      module_home/src/main/java/com/quyunshuo/module/home/fragment/fragment/HomeFragment.kt
  57. 24 31
      module_home/src/main/java/com/quyunshuo/module/home/fragment/fragment/MakeFragment.kt
  58. 8 0
      module_home/src/main/java/com/quyunshuo/module/home/fragment/vm/HomeFragmentVM.kt
  59. 11 12
      module_home/src/main/java/com/quyunshuo/module/home/fragment/vm/MakeFragmentVM.kt
  60. 8 4
      module_home/src/main/java/com/quyunshuo/module/home/fragment/vm/UserLoginFragmentVM.kt
  61. 2 2
      module_home/src/main/java/com/quyunshuo/module/home/receiver/TimedCleaningTaskAlarmReceiver.java
  62. 55 29
      module_home/src/main/java/com/quyunshuo/module/home/service/GlobalService.kt
  63. 1 1
      module_home/src/main/java/com/quyunshuo/module/home/service/GlobalServiceViewModel.kt
  64. 26 10
      module_home/src/main/java/com/quyunshuo/module/home/service/MqService.kt
  65. 41 10
      module_home/src/main/java/com/quyunshuo/module/home/utils/RemotePushUtil.kt
  66. 10 0
      module_home/src/main/res/drawable/home_shape_hide.xml
  67. binární
      module_home/src/main/res/drawable/icon_sold_out.png
  68. 21 2
      module_home/src/main/res/layout/home_item_home_product.xml
  69. 16 28
      serialport-api/src/main/java/com/hboxs/serialport/plc/thread/ThreadHomeParam.kt
  70. 186 0
      serialport-api/src/main/java/com/hboxs/serialport/plc/thread/ThreadMakeParam.kt
  71. 1 1
      serialport-api/src/main/java/com/hboxs/serialport/sbc/thread/ThreadGlobalParam.kt

+ 2 - 2
buildSrc/src/main/kotlin/com/quyunshuo/sbm10/buildsrc/ProjectBuildConfig.kt

@@ -11,8 +11,8 @@ object ProjectBuildConfig {
     const val applicationId = "com.quyunshuo.sbm10"
     const val minSdkVersion = 21
     const val targetSdkVersion = 29
-    const val versionCode = 13
-    const val versionName = "1.0.13"
+    const val versionCode = 14
+    const val versionName = "1.0.14"
     const val isAppMode = false
     /**
      * 项目当前的版本状态

+ 2 - 2
lib_base/src/main/java/com/quyunshuo/sbm10/base/addressenum/PlcAlarmAddressEnum.kt

@@ -6,8 +6,8 @@ import com.quyunshuo.sbm10.base.R
 enum class PlcAlarmAddressEnum(val address: String, val aName: String, val aNameId:Int) {
     Alarm01("0100", "玉米不爆开", R.string.base_plc_alarm_1),
     Alarm02("0200", "缺杯",R.string.base_plc_alarm_2),
-    Alarm03("0300", "缺咸玉米",R.string.base_plc_alarm_3),
-    Alarm04("0400", "缺甜玉米",R.string.base_plc_alarm_4),
+//    Alarm03("0300", "缺咸玉米",R.string.base_plc_alarm_3),
+//    Alarm04("0400", "缺甜玉米",R.string.base_plc_alarm_4),
     Alarm05("0500", "不升温",R.string.base_plc_alarm_5),
     Alarm06("0600", "温度过高",R.string.base_plc_alarm_6),
     Alarm07("0700", "挡片复位失败",R.string.base_plc_alarm_7),

+ 0 - 1
lib_base/src/main/java/com/quyunshuo/sbm10/base/bean/Global.kt

@@ -4,5 +4,4 @@ object Global {
     //全局变量
     var isNetWork: Boolean = false //自主检测里面来测试是否有网络
 
-    var isPreheatOpen:Boolean=false//是否需要开启预热
 }

+ 1 - 0
lib_base/src/main/java/com/quyunshuo/sbm10/base/bean/HeartbeatBean.kt

@@ -28,4 +28,5 @@ data class HeartbeatBean(
     var whiteSugar : String,
     var yellowSugar : String,
     var furnaceTm:String,
+    var apkVersion:String,
 )

+ 1 - 1
lib_base/src/main/res/values-aa/strings.xml

@@ -167,7 +167,6 @@
     <string name="home_choosepay_title">გადახდის მეთოდის არჩევა.</string>
     <string name="home_tips_dialog_6">გამოყენებამდე გთხოვთ, დაუკავშირდეთ სერვერს</string>
     <string name="home_shopping_cart_null">სავაჭრო კალათაში ნივთები არ არის\nგთხოვთ, ჯერ ნივთები აირჩიოთ</string>
-    <string name="alarm_message_01">სიმინდი არ ფეთქდება</string>
     <string name="alarm_message_02">ფინჯანი აკლია</string>
     <string name="alarm_message_03">მარილიანი სიმინდი აკლია</string>
     <string name="alarm_message_04">ტკბილი სიმინდი აკლია</string>
@@ -306,6 +305,7 @@
     <string name="salty_corn_remain">დარჩენილი მარილიანი სიმინდი</string>
     <string name="box_remain">დარჩენილი ყუთი</string>
     <string name="box_not_enough">ყუთები არ არის საკმარისი, ყიდვას ვერ გავაგრძელებ. </string>
+    <string name="alarm_message_01">სიმინდის ნაკლებობა/სიმინდი არ აფეთქდება</string>
 
 </resources>
 <!--格鲁吉亚-->

+ 1 - 2
lib_base/src/main/res/values-ab/strings.xml

@@ -167,7 +167,6 @@
     <string name="home_choosepay_title">選擇付款方式</string>
     <string name="home_tips_dialog_6">請先連接伺服器後再進行使用</string>
     <string name="home_shopping_cart_null">購物車裡沒有商品\n請先選擇商品</string>
-    <string name="alarm_message_01">玉米不爆開</string>
     <string name="alarm_message_02">缺杯</string>
     <string name="alarm_message_03">缺少鹹玉米</string>
     <string name="alarm_message_04">缺甜玉米</string>
@@ -306,6 +305,6 @@
     <string name="salty_corn_remain">鹹玉米剩餘</string>
     <string name="box_remain">紙匣剩餘</string>
     <string name="box_not_enough">盒子不足,無法繼續購買。 </string>
-
+    <string name="alarm_message_01">缺玉米/玉米不爆開</string>
 </resources>
 <!--繁体-->

+ 1 - 1
lib_base/src/main/res/values-am/strings.xml

@@ -167,7 +167,6 @@
     <string name="home_choosepay_title">انتخاب پرداخت روش</string>
     <string name="home_tips_dialog_6">لطفاً قبل از استفاده به سرور متصل شوید</string>
     <string name="home_shopping_cart_null">هیچ کالایی در سبد خرید وجود ندارد\nلطفاً ابتدا کالاها را انتخاب کنید</string>
-    <string name="alarm_message_01">ذرت باز نمی‌شود</string>
     <string name="alarm_message_02">لیوان کم است</string>
     <string name="alarm_message_03">ذرت شور کم است</string>
     <string name="alarm_message_04">ذرت شیرین کم است</string>
@@ -306,6 +305,7 @@
     <string name="salty_corn_remain">ذرت شور باقی مانده</string>
     <string name="box_remain">جعبه باقی مانده</string>
     <string name="box_not_enough">جعبه کافی نیست، نمی‌توانم به خرید ادامه دهم.</string>
+    <string name="alarm_message_01">کمبود ذرت/ذرت نمی‌ترکد</string>
 
 </resources>
 <!--波斯语-->

+ 1 - 1
lib_base/src/main/res/values-ar/strings.xml

@@ -176,7 +176,6 @@
     <string name="home_choosepay_title">اختر طريقة الدفع الطريقة</string>
     <string name="home_tips_dialog_6">يرجى الاتصال بالخادم قبل الاستخدام</string>
     <string name="home_shopping_cart_null">لا توجد منتجات في سلة التسوق\nيرجى تحديد المنتجات أولاً</string>
-    <string name="alarm_message_01">الذرة لا تُفرقع</string>
     <string name="alarm_message_02">الكوب مفقود</string>
     <string name="alarm_message_03">ذرة مملحة مفقودة</string>
     <string name="alarm_message_04">ذرة حلوة مفقودة</string>
@@ -308,6 +307,7 @@
     <string name="salty_corn_remain">الذرة المملحة المتبقية</string>
     <string name="box_remain">العلبة المتبقية</string>
     <string name="box_not_enough">العلب غير كافية، لا يمكنني الاستمرار في الشراء. </string>
+    <string name="alarm_message_01">نقص الذرة/الذرة لن تنفجر</string>
 
 </resources>
 <!--阿拉伯语-->

+ 1 - 1
lib_base/src/main/res/values-bg/strings.xml

@@ -167,7 +167,6 @@
     <string name="home_choosepay_title">Изберете метод на плащане</string>
     <string name="home_tips_dialog_6">Моля Свържете се със сървъра преди употреба</string>
     <string name="home_shopping_cart_null">Няма артикули в пазарската количка\nМоля, първо изберете артикули</string>
-    <string name="alarm_message_01">Царевицата не пука</string>
     <string name="alarm_message_02">Липсва чаша</string>
     <string name="alarm_message_03">Липсва солена царевица</string>
     <string name="alarm_message_04">Липсва сладка царевица</string>
@@ -306,6 +305,7 @@
     <string name="salty_corn_remain">Оставаща солена царевица</string>
     <string name="box_remain">Оставаща кутия</string>
     <string name="box_not_enough">Няма достатъчно кутии, не мога да продължа да купувам. </string>
+    <string name="alarm_message_01">Липса на царевица/Царевицата не пука</string>
 
 </resources>
 <!--保加利亚-->

+ 1 - 1
lib_base/src/main/res/values-cs/strings.xml

@@ -167,7 +167,6 @@
     <string name="home_choosepay_title">Vyberte způsob platby</string>
     <string name="home_tips_dialog_6">Prosím Před použitím se připojte k serveru</string>
     <string name="home_shopping_cart_null">V nákupním košíku nejsou žádné položky\nNejprve vyberte položky</string>
-    <string name="alarm_message_01">Kukuřice nepraská</string>
     <string name="alarm_message_02">Chybí kelímek</string>
     <string name="alarm_message_03">Chybí slaná kukuřice</string>
     <string name="alarm_message_04">Chybí sladká kukuřice</string>
@@ -306,6 +305,7 @@
     <string name="salty_corn_remain">Zbývá slaná kukuřice</string>
     <string name="box_remain">Zbývá krabice</string>
     <string name="box_not_enough">Nedostatek krabic, nelze pokračovat v nákupu. </string>
+    <string name="alarm_message_01">Nedostatek kukuřice/Kukuřice nepraská</string>
 
 </resources>
 <!--捷克语-->

+ 1 - 1
lib_base/src/main/res/values-da/strings.xml

@@ -167,7 +167,6 @@
     <string name="home_choosepay_title">Vælg betalingsmetode</string>
     <string name="home_tips_dialog_6">Opret forbindelse til serveren før brug</string>
     <string name="home_shopping_cart_null">Der er ingen varer i indkøbskurven\nVælg venligst varer først</string>
-    <string name="alarm_message_01">Majsen popper ikke</string>
     <string name="alarm_message_02">Kop mangler</string>
     <string name="alarm_message_03">Saltet majs mangler</string>
     <string name="alarm_message_04">Sukkermajs mangler</string>
@@ -306,6 +305,7 @@
     <string name="salty_corn_remain">Saltet majs tilbage</string>
     <string name="box_remain">Kasse tilbage</string>
     <string name="box_not_enough">Ikke nok kasser, kan ikke fortsætte med at købe. </string>
+    <string name="alarm_message_01">Mangel på majs/Majsen popper ikke</string>
 
 </resources>
 <!--丹麦-->

+ 1 - 1
lib_base/src/main/res/values-de/strings.xml

@@ -175,7 +175,6 @@
     <string name="home_choosepay_title">Zahlungsmethode auswählen</string>
     <string name="home_tips_dialog_6">Bitte verbinden Sie sich vor der Verwendung mit dem Server</string>
     <string name="home_shopping_cart_null">Es befinden sich keine Artikel im Warenkorb. Bitte wählen Sie zuerst Artikel aus</string>
-    <string name="alarm_message_01">Mais poppt nicht</string>
     <string name="alarm_message_02">Becher fehlt</string>
     <string name="alarm_message_03">Gesalzener Mais fehlt</string>
     <string name="alarm_message_04">Zuckermais fehlt</string>
@@ -307,5 +306,6 @@
     <string name="salty_corn_remain">Verbleibender Salzmais</string>
     <string name="box_remain">Verbleibende Kiste</string>
     <string name="box_not_enough">Nicht genügend Kisten vorhanden. Kauf kann nicht fortgesetzt werden.</string>
+    <string name="alarm_message_01">Maismangel/Mais poppt nicht</string>
 
 </resources><!--德语-->

+ 1 - 1
lib_base/src/main/res/values-en/strings.xml

@@ -175,7 +175,6 @@
     <string name="home_choosepay_title">Select payment method</string>
     <string name="home_tips_dialog_6">Please connect to the server before using</string>
     <string name="home_shopping_cart_null">There are no items in the shopping cart\nPlease select items first</string>
-    <string name="alarm_message_01">Corn does not pop</string>
     <string name="alarm_message_02">Missing cup</string>
     <string name="alarm_message_03">Missing salty corn</string>
     <string name="alarm_message_04">Missing sweet corn</string>
@@ -307,6 +306,7 @@
     <string name="salty_corn_remain">Salty corn remaining</string>
     <string name="box_remain">Box remaining</string>
     <string name="box_not_enough">Not enough boxes, can`t continue to buy. </string>
+    <string name="alarm_message_01">Lack of corn/Corn won`t pop</string>
 
 </resources>
     <!--英语-->

+ 1 - 1
lib_base/src/main/res/values-es/strings.xml

@@ -168,7 +168,6 @@
     <string name="home_choosepay_title">Seleccionar método de pago.</string>
     <string name="home_tips_dialog_6">Conéctese al servidor antes de usar</string>
     <string name="home_shopping_cart_null">No hay artículos en el carrito de compras. Seleccione los artículos primero.</string>
-    <string name="alarm_message_01">El maíz no revienta</string>
     <string name="alarm_message_02">Falta el vaso</string>
     <string name="alarm_message_03">Falta maíz salado</string>
     <string name="alarm_message_04">Falta maíz dulce</string>
@@ -307,5 +306,6 @@
     <string name="salty_corn_remain">Maíz salado restante</string>
     <string name="box_remain">Caja restante</string>
     <string name="box_not_enough">No hay suficientes cajas, no puedo seguir comprando. </string>
+    <string name="alarm_message_01">Falta de maíz/El maíz no revienta</string>
 
 </resources><!--西班牙语-->

+ 1 - 1
lib_base/src/main/res/values-et/strings.xml

@@ -167,7 +167,6 @@
     <string name="home_choosepay_title">Valige makseviis</string>
     <string name="home_tips_dialog_6">Palun Looge enne kasutamist ühendus serveriga</string>
     <string name="home_shopping_cart_null">Ostukorvis pole ühtegi toodet\nPalun valige esmalt tooted</string>
-    <string name="alarm_message_01">Mais ei praksu</string>
     <string name="alarm_message_02">Puudub tass</string>
     <string name="alarm_message_03">Puudub soolane mais</string>
     <string name="alarm_message_04">Puudub magus mais</string>
@@ -306,6 +305,7 @@
     <string name="salty_corn_remain">Järeljäänud soolane mais</string>
     <string name="box_remain">Järeljäänud kast</string>
     <string name="box_not_enough">Pole piisavalt kaste, ostmist ei saa jätkata. </string>
+    <string name="alarm_message_01">Maisi pole/Mais ei praksu</string>
 
 </resources>
 <!--爱沙尼亚语-->

+ 1 - 1
lib_base/src/main/res/values-fr/strings.xml

@@ -174,7 +174,6 @@
     <string name="home_choosepay_title">Sélectionner le mode de paiement</string>
     <string name="home_tips_dialog_6">Veuillez vous connecter au serveur avant d`utiliser</string>
     <string name="home_shopping_cart_null">Aucun article dans le panier\nVeuillez d`abord sélectionner les articles</string>
-    <string name="alarm_message_01">Le maïs n`éclate pas</string>
     <string name="alarm_message_02">Gobelet manquant</string>
     <string name="alarm_message_03">Manque de maïs salé</string>
     <string name="alarm_message_04">Manque de maïs sucré</string>
@@ -306,5 +305,6 @@
     <string name="salty_corn_remain">Maïs salé restant</string>
     <string name="box_remain">Boîtes restantes</string>
     <string name="box_not_enough">Pas assez de boîtes, impossible de continuer à acheter.</string>
+    <string name="alarm_message_01">Manque de maïs/Le maïs n`éclate pas</string>
 
 </resources><!--法语-->

+ 1 - 1
lib_base/src/main/res/values-hr/strings.xml

@@ -167,7 +167,6 @@
     <string name="home_choosepay_title">Odaberite način plaćanja.</string>
     <string name="home_tips_dialog_6">Molimo Spojite se s poslužiteljem prije korištenja</string>
     <string name="home_shopping_cart_null">U košarici nema artikala\nPrvo odaberite artikle</string>
-    <string name="alarm_message_01">Kukuruz ne pucketa</string>
     <string name="alarm_message_02">Nedostaje šalica</string>
     <string name="alarm_message_03">Nedostaje slani kukuruz</string>
     <string name="alarm_message_04">Nedostaje slatki kukuruz</string>
@@ -306,6 +305,7 @@
     <string name="salty_corn_remain">Preostali slani kukuruz</string>
     <string name="box_remain">Preostala kutija</string>
     <string name="box_not_enough">Nema dovoljno kutija, ne mogu nastaviti kupovati. </string>
+    <string name="alarm_message_01">Nedostatak kukuruza/Kukuruz neće puknuti</string>
 
 </resources>
 <!--克罗地亚语-->

+ 1 - 1
lib_base/src/main/res/values-hu/strings.xml

@@ -167,7 +167,6 @@
     <string name="home_choosepay_title">Válasszon fizetési módot</string>
     <string name="home_tips_dialog_6">Kérjük csatlakozzon a szerverhez használat előtt</string>
     <string name="home_shopping_cart_null">Nincsenek tételek a bevásárlókosárban\nKérjük, először válasszon ki tételeket</string>
-    <string name="alarm_message_01">A kukorica nem pattog ki</string>
     <string name="alarm_message_02">Hiányzik a csésze</string>
     <string name="alarm_message_03">Hiányzik a sós kukorica</string>
     <string name="alarm_message_04">Hiányzik az édes kukorica</string>
@@ -306,6 +305,7 @@
     <string name="salty_corn_remain">Maradt sós kukorica</string>
     <string name="box_remain">Maradt doboz</string>
     <string name="box_not_enough">Nincs elég doboz, nem tudom folytatni a vásárlást. </string>
+    <string name="alarm_message_01">Kevés a kukorica/A kukorica nem pattog ki</string>
 
 </resources>
 <!--匈牙利语-->

+ 1 - 1
lib_base/src/main/res/values-hy/strings.xml

@@ -167,7 +167,6 @@
     <string name="home_choosepay_title">Ընտրեք վճարման եղանակը</string>
     <string name="home_tips_dialog_6">Խնդրում ենք միանալ սերվերին օգտագործելուց առաջ</string>
     <string name="home_shopping_cart_null">Գնումների զամբյուղում ապրանքներ չկան\nԽնդրում ենք նախ ընտրել ապրանքները</string>
-    <string name="alarm_message_01">Եգիպտացորենը չի պայթում</string>
     <string name="alarm_message_02">Բաժակը բացակայում է</string>
     <string name="alarm_message_03">Աղի եգիպտացորենը բացակայում է</string>
     <string name="alarm_message_04">Քաղցր եգիպտացորենը բացակայում է</string>
@@ -306,6 +305,7 @@
     <string name="salty_corn_remain">Մնացած աղի եգիպտացորեն</string>
     <string name="box_remain">Մնացած տուփ</string>
     <string name="box_not_enough">Տուփերը բավարար չեն, հնարավոր չէ շարունակել գնել։ </string>
+    <string name="alarm_message_01">Եգիպտացորենի պակաս/Եգիպտացորենը չի պայթում</string>
 
 </resources>
 <!--亚美尼亚语-->

+ 1 - 1
lib_base/src/main/res/values-it/strings.xml

@@ -167,7 +167,6 @@
     <string name="home_choosepay_title">Seleziona il metodo di pagamento.</string>
     <string name="home_tips_dialog_6">Connettersi al server prima dell`uso</string>
     <string name="home_shopping_cart_null">Non ci sono articoli nel carrello.\nSelezionare prima gli articoli</string>
-    <string name="alarm_message_01">Il mais non scoppietta</string>
     <string name="alarm_message_02">Tazza mancante</string>
     <string name="alarm_message_03">Manca il mais salato</string>
     <string name="alarm_message_04">Manca il mais dolce</string>
@@ -306,6 +305,7 @@
     <string name="salty_corn_remain">Mais salato rimanente</string>
     <string name="box_remain">Scatola rimanente</string>
     <string name="box_not_enough">Scatole insufficienti, impossibile continuare ad acquistare. </string>
+    <string name="alarm_message_01">Mancanza di mais/Il mais non scoppietta</string>
 
 </resources>
 <!--意大利-->

+ 1 - 1
lib_base/src/main/res/values-ja/strings.xml

@@ -167,7 +167,6 @@
     <string name="home_choosepay_title">支払い方法を選択してください</string>
     <string name="home_tips_dialog_6">ご使用前にサーバーに接続してください</string>
     <string name="home_shopping_cart_null">ショッピングカートに商品がありません\nまず商品を選択してください</string>
-    <string name="alarm_message_01">コーンが弾けません</string>
     <string name="alarm_message_02">カップがありません</string>
     <string name="alarm_message_03">ソルティコーンがありません</string>
     <string name="alarm_message_04">スイートコーンがありません</string>
@@ -306,6 +305,7 @@
     <string name="salty_corn_remain">ソルティコーンの残り</string>
     <string name="box_remain">箱の残り</string>
     <string name="box_not_enough">箱が足りないため、購入を続行できません。</string>
+    <string name="alarm_message_01">トウモロコシ不足/トウモロコシがはじけない</string>
 
 </resources>
 <!--日语-->

+ 1 - 1
lib_base/src/main/res/values-ko/strings.xml

@@ -167,7 +167,6 @@
     <string name="home_choosepay_title">결제 수단을 선택하세요.</string>
     <string name="home_tips_dialog_6">사용 전에 서버에 연결하세요.</string>
     <string name="home_shopping_cart_null">장바구니에 상품이 없습니다.\n먼저 상품을 선택하세요.</string>
-    <string name="alarm_message_01">옥수수가 튀지 않습니다.</string>
     <string name="alarm_message_02">컵이 없습니다.</string>
     <string name="alarm_message_03">짭짤한 옥수수가 없습니다.</string>
     <string name="alarm_message_04">단옥수수가 없습니다.</string>
@@ -306,6 +305,7 @@
     <string name="salty_corn_remain">솔티콘 잔량</string>
     <string name="box_remain">박스 잔량</string>
     <string name="box_not_enough">박스가 부족하여 더 이상 구매할 수 없습니다.</string>
+    <string name="alarm_message_01">옥수수가 부족합니다/옥수수가 터지지 않습니다</string>
 
 </resources>
 <!--韩语-->

+ 1 - 1
lib_base/src/main/res/values-lv/strings.xml

@@ -167,7 +167,6 @@
     <string name="home_choosepay_title">Atlasiet maksājuma veidu</string>
     <string name="home_tips_dialog_6">Lūdzu izveidot savienojumu ar serveri pirms lietošanas</string>
     <string name="home_shopping_cart_null">Iepirkumu grozā nav preču\nLūdzu, vispirms atlasiet preces</string>
-    <string name="alarm_message_01">Kukurūza neuzsprāgst</string>
     <string name="alarm_message_02">Trūkst krūzītes</string>
     <string name="alarm_message_03">Trūkst sāļās kukurūzas</string>
     <string name="alarm_message_04">Trūkst saldās kukurūzas</string>
@@ -306,6 +305,7 @@
     <string name="salty_corn_remain">Atlikusi sāļā kukurūza</string>
     <string name="box_remain">Atlikusi kaste</string>
     <string name="box_not_enough">Nav pietiekami daudz kastu, nevaru turpināt iepirkties. </string>
+    <string name="alarm_message_01">Trūkst kukurūzas/Kukurūza neuzsprāgst</string>
 
 </resources>
 <!--拉脱维亚语-->

+ 1 - 1
lib_base/src/main/res/values-mn/strings.xml

@@ -167,7 +167,6 @@
     <string name="home_choosepay_title">Төлбөрийн аргыг сонгоно уу</string>
     <string name="home_tips_dialog_6">Ашиглахаасаа өмнө серверт холбогдоно уу</string>
     <string name="home_shopping_cart_null">Сагсанд бараа байхгүй байна\nЭхлээд бараагаа сонгоно уу</string>
-    <string name="alarm_message_01">Эрдэнэ шиш гарч ирэхгүй</string>
     <string name="alarm_message_02">Алга болсон аяга</string>
     <string name="alarm_message_03">Давстай эрдэнэ шиш алга</string>
     <string name="alarm_message_04">Дутуу эрдэнэ шиш</string>
@@ -306,5 +305,6 @@
     <string name="salty_corn_remain">Давстай эрдэнэ шиш үлдсэн</string>
     <string name="box_remain">Үлдсэн хайрцаг</string>
     <string name="box_not_enough">Хайрцаг хангалтгүй, цаашид худалдан авах боломжгүй. </string>
+    <string name = "alarm_message_01">Эрдэнэ шиш дутмаг/эрдэнэ шиш гарч ирэхгүй</string>
 
 </resources><!--蒙古语-->

+ 1 - 1
lib_base/src/main/res/values-nl/strings.xml

@@ -167,7 +167,6 @@
     <string name="home_choosepay_title">Betaalmethode selecteren</string>
     <string name="home_tips_dialog_6">Maak verbinding met de server voordat u deze gebruikt</string>
     <string name="home_shopping_cart_null">Er zijn geen artikelen in de winkelwagen\nSelecteer eerst artikelen</string>
-    <string name="alarm_message_01">Maïs poft niet</string>
     <string name="alarm_message_02">Beker ontbreekt</string>
     <string name="alarm_message_03">Zoutige maïs ontbreekt</string>
     <string name="alarm_message_04">Zoete maïs ontbreekt</string>
@@ -306,6 +305,7 @@
     <string name="salty_corn_remain">Resterende zoute maïs</string>
     <string name="box_remain">Resterende doos</string>
     <string name="box_not_enough">Niet genoeg dozen, kan niet meer kopen. </string>
+    <string name="alarm_message_01">Gebrek aan maïs/Maïs wil niet poppen</string>
 
 </resources>
 <!--荷兰语-->

+ 1 - 1
lib_base/src/main/res/values-no/strings.xml

@@ -167,7 +167,6 @@
     <string name="home_choosepay_title">Velg betalingsmåte</string>
     <string name="home_tips_dialog_6">Koble til serveren før bruk</string>
     <string name="home_shopping_cart_null">Det er ingen varer i handlekurven\nVennligst velg varer først</string>
-    <string name="alarm_message_01">Maisen popper ikke</string>
     <string name="alarm_message_02">Mangler kopp</string>
     <string name="alarm_message_03">Mangler salt mais</string>
     <string name="alarm_message_04">Mangler søt mais</string>
@@ -306,6 +305,7 @@
     <string name="salty_corn_remain">Gjenværende saltmais</string>
     <string name="box_remain">Gjenværende eske</string>
     <string name="box_not_enough">Ikke nok esker, kan ikke fortsette å kjøpe. </string>
+    <string name="alarm_message_01">Mangel på mais/Maisen popper ikke</string>
 
 
 </resources>

+ 1 - 1
lib_base/src/main/res/values-pl/strings.xml

@@ -167,7 +167,6 @@
     <string name="home_choosepay_title">Wybierz metodę płatności</string>
     <string name="home_tips_dialog_6">Połącz się z serwerem przed użyciem</string>
     <string name="home_shopping_cart_null">W koszyku nie ma żadnych produktów\nNajpierw wybierz produkty</string>
-    <string name="alarm_message_01">Kukurydza nie pęka</string>
     <string name="alarm_message_02">Brak kubka</string>
     <string name="alarm_message_03">Brak słonej kukurydzy</string>
     <string name="alarm_message_04">Brak słodkiej kukurydzy</string>
@@ -306,6 +305,7 @@
     <string name="salty_corn_remain">Pozostała słona kukurydza</string>
     <string name="box_remain">Pozostało pudełko</string>
     <string name="box_not_enough">Za mało pudełek, nie można kontynuować zakupów.</string>
+    <string name="alarm_message_01">Brak kukurydzy/Kukurydza nie chce wystrzelić</string>
 
 </resources>
 <!--波兰语-->

+ 1 - 1
lib_base/src/main/res/values-pt/strings.xml

@@ -167,7 +167,6 @@
     <string name="home_choosepay_title">Selecione a forma de pagamento</string>
     <string name="home_tips_dialog_6">Conecte-se ao servidor antes de usar</string>
     <string name="home_shopping_cart_null">Não há itens no carrinho de compras\nSelecione os itens primeiro</string>
-    <string name="alarm_message_01">O milho não estoura</string>
     <string name="alarm_message_02">Copo faltando</string>
     <string name="alarm_message_03">Milho salgado faltando</string>
     <string name="alarm_message_04">Milho doce faltando</string>
@@ -306,6 +305,7 @@
     <string name="salty_corn_remain">Milho salgado restante</string>
     <string name="box_remain">Caixa restante</string>
     <string name="box_not_enough">Não há caixas suficientes, não é possível continuar comprando. </string>
+    <string name="alarm_message_01">Falta de milho/O milho não estoura</string>
 
 </resources>
 <!--葡萄牙语-->

+ 1 - 1
lib_base/src/main/res/values-ro/strings.xml

@@ -167,7 +167,6 @@
     <string name="home_choosepay_title">Selectați metoda de plată</string>
     <string name="home_tips_dialog_6">Vă rugăm Conectați-vă la server înainte de utilizare</string>
     <string name="home_shopping_cart_null">Nu există articole în coșul de cumpărături\nVă rugăm să selectați articolele mai întâi</string>
-    <string name="alarm_message_01">Porumbul nu se sparge</string>
     <string name="alarm_message_02">Lăsește cana</string>
     <string name="alarm_message_03">Lăsește porumbul sărat</string>
     <string name="alarm_message_04">Lăsește porumbul dulce</string>
@@ -306,6 +305,7 @@
     <string name="salty_corn_remain">Porumb sărat rămas</string>
     <string name="box_remain">Cutie rămasă</string>
     <string name="box_not_enough">Nu sunt suficiente cutii, nu se poate continua cumpărarea.</string>
+    <string name="alarm_message_01">Lipsă de porumb/Porumbul nu se sparge</string>
 
 </resources>
 <!--罗马尼亚语-->

+ 1 - 1
lib_base/src/main/res/values-ru/strings.xml

@@ -167,7 +167,6 @@
     <string name="home_choosepay_title">Выберите способ оплаты</string>
     <string name="home_tips_dialog_6">Перед использованием подключитесь к серверу</string>
     <string name="home_shopping_cart_null">В корзине нет товаров\nСначала выберите товары</string>
-    <string name="alarm_message_01">Кукуруза не взрывается</string>
     <string name="alarm_message_02">Отсутствует чашка</string>
     <string name="alarm_message_03">Отсутствует соленая кукуруза</string>
     <string name="alarm_message_04">Отсутствует сладкая кукуруза</string>
@@ -306,6 +305,7 @@
     <string name="salty_corn_remain">Осталось солёной кукурузы</string>
     <string name="box_remain">Осталось коробок</string>
     <string name="box_not_enough">Недостаточно коробок, не могу продолжить закупку.</string>
+    <string name="alarm_message_01">Отсутствие кукурузы/Кукуруза не лопается</string>
 
 </resources>
 <!--俄语-->

+ 1 - 1
lib_base/src/main/res/values-sk/strings.xml

@@ -167,7 +167,6 @@
     <string name="home_choosepay_title">Vyberte spôsob platby</string>
     <string name="home_tips_dialog_6">Prosím Pred použitím sa pripojte k serveru</string>
     <string name="home_shopping_cart_null">V nákupnom košíku nie sú žiadne položky\nNajprv vyberte položky</string>
-    <string name="alarm_message_01">Kukurica nepuká</string>
     <string name="alarm_message_02">Chýba pohár</string>
     <string name="alarm_message_03">Chýba slaná kukurica</string>
     <string name="alarm_message_04">Chýba sladká kukurica</string>
@@ -306,6 +305,7 @@
     <string name="salty_corn_remain">Zostávajúca slaná kukurica</string>
     <string name="box_remain">Zostávajúca krabica</string>
     <string name="box_not_enough">Nedostatok krabíc, nemôžem pokračovať v nákupe. </string>
+    <string name="alarm_message_01">Nedostatok kukurice/Kukurica nepuká</string>
 
 </resources>
 <!--斯洛伐克语-->

+ 1 - 1
lib_base/src/main/res/values-sl/strings.xml

@@ -167,7 +167,6 @@
     <string name="home_choosepay_title">Izberite način plačila.</string>
     <string name="home_tips_dialog_6">Prosimo. Pred uporabo se povežite s strežnikom</string>
     <string name="home_shopping_cart_null">V nakupovalni košarici ni artiklov\nNajprej izberite artikle</string>
-    <string name="alarm_message_01">Koruza ne poka</string>
     <string name="alarm_message_02">Manjka skodelica</string>
     <string name="alarm_message_03">Manjka slana koruza</string>
     <string name="alarm_message_04">Manjka sladka koruza</string>
@@ -306,6 +305,7 @@
     <string name="salty_corn_remain">Preostala slana koruza</string>
     <string name="box_remain">Preostala škatla</string>
     <string name="box_not_enough">Ni dovolj škatel, nakupa ni mogoče nadaljevati. </string>
+    <string name="alarm_message_01">Pomanjkanje koruze/Koruza ne poči</string>
 
 </resources>
 <!--斯洛文尼亚语-->

+ 1 - 1
lib_base/src/main/res/values-sq/strings.xml

@@ -167,7 +167,6 @@
     <string name="home_choosepay_title">בחרו אמצעי תשלום</string>
     <string name="home_tips_dialog_6">אנא התחברו אל השרת לפני השימוש</string>
     <string name="home_shopping_cart_null">אין פריטים בעגלת הקניות\nאנא בחר תחילה פריטים</string>
-    <string name="alarm_message_01">התירס לא קופץ</string>
     <string name="alarm_message_02">כוס חסרה</string>
     <string name="alarm_message_03">תירס מלוח חסר</string>
     <string name="alarm_message_04">תירס מתוק חסר</string>
@@ -306,5 +305,6 @@
     <string name="salty_corn_remain">נותר תירס מלוח</string>
     <string name="box_remain">נותר קופסה</string>
     <string name="box_not_enough">אין מספיק קופסאות, לא ניתן להמשיך לקנות.</string>
+    <string name="alarm_message_01">חוסר תירס/התירס לא מתבשל</string>
 
     </resources><!--希伯来语 以色列-->

+ 1 - 1
lib_base/src/main/res/values-sv/strings.xml

@@ -167,7 +167,6 @@
     <string name="home_choosepay_title">Välj betalningsmetod</string>
     <string name="home_tips_dialog_6">Anslut till servern innan du använder</string>
     <string name="home_shopping_cart_null">Det finns inga varor i kundvagnen\nVar god välj varor först</string>
-    <string name="alarm_message_01">Majsen poppar inte</string>
     <string name="alarm_message_02">Kopp saknas</string>
     <string name="alarm_message_03">Saltmajs saknas</string>
     <string name="alarm_message_04">Sötmajs saknas</string>
@@ -306,6 +305,7 @@
     <string name="salty_corn_remain">Salt majs kvar</string>
     <string name="box_remain">Låda kvar</string>
     <string name="box_not_enough">Inte tillräckligt med lådor, kan inte fortsätta köpa. </string>
+    <string name="alarm_message_01">Brist på majs/Majsen poppar inte</string>
 
 </resources>
 <!--瑞典语-->

+ 1 - 1
lib_base/src/main/res/values-th/strings.xml

@@ -167,7 +167,6 @@
     <string name="home_choosepay_title">เลือกวิธีการชำระเงิน</string>
     <string name="home_tips_dialog_6">กรุณาเชื่อมต่อกับเซิร์ฟเวอร์ก่อนใช้งาน</string>
     <string name="home_shopping_cart_null">ไม่มีสินค้าในตะกร้าสินค้า\nกรุณาเลือกสินค้าก่อน</string>
-    <string name="alarm_message_01">ข้าวโพดไม่แตก</string>
     <string name="alarm_message_02">ไม่มีถ้วย</string>
     <string name="alarm_message_03">ไม่มีข้าวโพดรสเค็ม</string>
     <string name="alarm_message_04">ไม่มีข้าวโพดหวาน</string>
@@ -306,6 +305,7 @@
     <string name="salty_corn_remain">ข้าวโพดเค็มคงเหลือ</string>
     <string name="box_remain">กล่องคงเหลือ</string>
     <string name="box_not_enough">กล่องไม่เพียงพอ ไม่สามารถซื้อต่อได้</string>
+    <string name="alarm_message_01">ข้าวโพดขาด/ข้าวโพดไม่แตก</string>
 
 </resources>
 <!--泰语-->

+ 1 - 1
lib_base/src/main/res/values-tn/strings.xml

@@ -167,7 +167,6 @@
     <string name="home_choosepay_title">Odaberite način plaćanja.</string>
     <string name="home_tips_dialog_6">Molimo vas Povežite se sa serverom prije korištenja</string>
     <string name="home_shopping_cart_null">Nema artikala u korpi za kupovinu\nMolimo prvo odaberite artikle</string>
-    <string name="alarm_message_01">Kukuruz ne pucketa</string>
     <string name="alarm_message_02">Nedostaje čaša</string>
     <string name="alarm_message_03">Nedostaje slani kukuruz</string>
     <string name="alarm_message_04">Nedostaje slatki kukuruz</string>
@@ -306,6 +305,7 @@
     <string name="salty_corn_remain">Preostali kukuruz slani</string>
     <string name="box_remain">Preostala kutija</string>
     <string name="box_not_enough">Nema dovoljno kutija, ne mogu nastaviti s kupovinom. </string>
+    <string name="alarm_message_01">Nedostatak kukuruza/Kukuruz neće pucketati</string>
 
 </resources>
 <!--波斯尼亚语-->

+ 1 - 1
lib_base/src/main/res/values-tr/strings.xml

@@ -167,7 +167,6 @@
     <string name="home_choosepay_title">Ödeme yöntemini seçin</string>
     <string name="home_tips_dialog_6">Kullanmadan önce lütfen sunucuya bağlanın</string>
     <string name="home_shopping_cart_null">Alışveriş sepetinde ürün yok\nLütfen önce ürün seçin</string>
-    <string name="alarm_message_01">Mısır patlamıyor</string>
     <string name="alarm_message_02">Kase eksik</string>
     <string name="alarm_message_03">Tuzlu mısır eksik</string>
     <string name="alarm_message_04">Tatlı mısır eksik</string>
@@ -306,6 +305,7 @@
     <string name="salty_corn_remain">Kalan tuzlu mısır</string>
     <string name="box_remain">Kalan kutu</string>
     <string name="box_not_enough">Yeterli kutu yok, satın almaya devam edemiyorum.</string>
+    <string name="alarm_message_01">Mısır eksikliği/Mısır patlamayacak</string>
 
 </resources>
 <!--土耳其语-->

+ 1 - 1
lib_base/src/main/res/values-uk/strings.xml

@@ -167,7 +167,6 @@
     <string name="home_choosepay_title">Виберіть спосіб оплати</string>
     <string name="home_tips_dialog_6">Будь ласка Підключіться до сервера перед використанням</string>
     <string name="home_shopping_cart_null">У кошику немає товарів\nСпочатку виберіть товари</string>
-    <string name="alarm_message_01">Кукурудза не лопається</string>
     <string name="alarm_message_02">Відсутня чашка</string>
     <string name="alarm_message_03">Відсутня солона кукурудза</string>
     <string name="alarm_message_04">Відсутня солодка кукурудза</string>
@@ -306,6 +305,7 @@
     <string name="salty_corn_remain">Залишилася солона кукурудза</string>
     <string name="box_remain">Залишилася коробка</string>
     <string name="box_not_enough">Недостатньо коробок, не можу продовжити покупку. </string>
+    <string name="alarm_message_01">Не вистачає кукурудзи/Кукурудза не тріскається</string>
 
 </resources>
 <!--乌克兰语-->

+ 2 - 1
lib_base/src/main/res/values/strings.xml

@@ -167,7 +167,6 @@
     <string name="home_choosepay_title">选择支付方式</string>
     <string name="home_tips_dialog_6">请先连接服务器后进行使用</string>
     <string name="home_shopping_cart_null">购物车里没有商品\n请先选择商品</string>
-    <string name="alarm_message_01">玉米不爆开</string>
     <string name="alarm_message_02">缺杯</string>
     <string name="alarm_message_03">缺咸玉米</string>
     <string name="alarm_message_04">缺甜玉米</string>
@@ -306,6 +305,8 @@
     <string name="salty_corn_remain">咸玉米剩余</string>
     <string name="box_remain">纸盒剩余</string>
     <string name="box_not_enough">纸盒不足,无法继续购买。</string>
+    <string name="alarm_message_01">缺玉米/玉米不爆开</string>
+    <string name="sold_out">已售罄</string>
 
 </resources>
 <!--中文-->

+ 11 - 3
lib_common/src/main/java/com/quyunshuo/sbm10/common/constant/MMKVName.kt

@@ -190,6 +190,7 @@ abstract class MMKVName {
             get() = "IS_SHOW_CHANGLOGE"
 
         val PLC_PATH:String
+            //单板机通讯地址默认值
             get() {
                 val path: String
                 if (Build.MODEL.equals("rk3566_r")){
@@ -202,6 +203,7 @@ abstract class MMKVName {
                 return  path
             }
         val MDB_PATH:String
+            //MDB通讯地址默认值
             get() {
                 val path: String
                 if (Build.MODEL.equals("rk3566_r")){
@@ -224,7 +226,7 @@ abstract class MMKVName {
             get() = "MATERIAL_DEFVALUE"
 
         val MATERIAL_HASHMAP: String
-            //默认值
+            //物料默认值
             get() {
                 val myHashMap = hashMapOf(
                     "sweet" to "3000",
@@ -237,10 +239,16 @@ abstract class MMKVName {
             }
 
         val CLEAR_ELIMINATE_REMOTE: String
-            get() = "CLEAR_ELIMINATE_REMOTE"//远程清空报警标记
+            //远程清空报警标记
+            get() = "CLEAR_ELIMINATE_REMOTE"
 
         val CLEAR_ELIMINATE: String
-            get() = "CLEAR_ELIMINATE"//上传 报警被手动关闭
+            //上传 报警被手动关闭
+            get() = "CLEAR_ELIMINATE"
+
+        val PASSWORD: String
+            //上传 密码
+            get() = "PASSWORD"
 
     }
     // 这里可以继续添加其他常量

+ 5 - 1
lib_common/src/main/java/com/quyunshuo/sbm10/common/constant/MqName.kt

@@ -10,7 +10,7 @@ object MqName {
     val VOLUME ="volume"//音量调节
     var UPDATE_PRODUCTS_SHOW = "updateProductsShow"//显示花型
     var PAY_SUCCESS = "pay_success"//收到支付成功
-    var IS_SLEEP= "is_sleep"//开关休眠
+    var SLEEP= "sleep"//开关休眠
     var BLOCK = "block"//开关锁机
     var STATUS_TYPE = "statusType"//连接服务器的状态
     var GUEST_PWD = "guestPwd"
@@ -37,4 +37,8 @@ object MqName {
 
     var MATERIAL = "material"//远程物料监控
 
+    var RESTARTANDROID= "restartAndroid"//重启屏幕
+
+    var PASSWORD= "password"//修改密码
+
 }

+ 55 - 27
module_backstage/src/main/java/com/module/backstage/activity/setting/SettingActivity.kt

@@ -20,7 +20,6 @@ import android.view.inputmethod.InputMethodManager
 import android.widget.EditText
 import android.widget.ImageView
 import android.widget.TextView
-import android.widget.Toast
 import androidx.activity.viewModels
 import androidx.annotation.RequiresApi
 import androidx.core.content.ContextCompat
@@ -98,6 +97,9 @@ class SettingActivity : BaseActivity<BackstageActivitySettingBinding, SettingVie
     private var selectedMenuItemView: View? = null // 存储当前选中的MenuItem
     private var selectedMenuItemTextView: TextView? = null // 存储当前选中的MenuItem
 
+    private var autoTime = SpUtils.getString(MMKVName.AUTO_RETURN_HOME,"10")
+    private var backTime = (autoTime?.toIntOrNull()?:10)*60
+
     /**
      * 通过 viewModels() + Hilt 获取 ViewModel 实例
      */
@@ -108,6 +110,7 @@ class SettingActivity : BaseActivity<BackstageActivitySettingBinding, SettingVie
     @RequiresApi(Build.VERSION_CODES.O)
     @SuppressLint("ResourceType")
     override fun BackstageActivitySettingBinding.initView() {
+        startTime()
         window.decorView.layoutDirection = View.LAYOUT_DIRECTION_LTR
         LanguageUtil.setLanguage();
         // 设置布局延伸到状态栏和导航栏下方
@@ -190,7 +193,7 @@ class SettingActivity : BaseActivity<BackstageActivitySettingBinding, SettingVie
         val deviceId = XLogUtil.getDeviceId()
         if (deviceId.isNotEmpty()) {
             mBinding.tvDevDogtag.text =
-                "Equipment No:" + deviceId.substring(deviceId.length - 6)
+                "No:" + deviceId.substring(deviceId.length - 6)
         }
         mViewModel.getParamData();//读取参数
     }
@@ -309,19 +312,19 @@ class SettingActivity : BaseActivity<BackstageActivitySettingBinding, SettingVie
     }
 
     override fun onBackPressed() {
-        // 获取当前时间戳
-        val currentTime = System.currentTimeMillis()
-        // 判断与上一次点击返回键的时间间隔是否小于1秒
-        if (currentTime - backPressedTime < 1000) {
-            super.onBackPressed() // 执行默认的返回键操作(退出Activity)
-        } else {
-            Toast.makeText(
-                this,
-                UiUtil.getStringRes(R.string.backstage_quit_app),
-                Toast.LENGTH_SHORT
-            ).show()
-            backPressedTime = currentTime // 更新上一次点击返回键的时间戳
-        }
+//        // 获取当前时间戳
+//        val currentTime = System.currentTimeMillis()
+//        // 判断与上一次点击返回键的时间间隔是否小于1秒
+//        if (currentTime - backPressedTime < 1000) {
+//            super.onBackPressed() // 执行默认的返回键操作(退出Activity)
+//        } else {
+//            Toast.makeText(
+//                this,
+//                UiUtil.getStringRes(R.string.backstage_quit_app),
+//                Toast.LENGTH_SHORT
+//            ).show()
+//            backPressedTime = currentTime // 更新上一次点击返回键的时间戳
+//        }
     }
 
     override fun onClick(view: View?) {
@@ -664,6 +667,7 @@ class SettingActivity : BaseActivity<BackstageActivitySettingBinding, SettingVie
         super.onDestroy()
         Log.d(TAG, "onDestroy: ")
         mViewModel.stopAllParam()
+        stopTime()
         loadingJob?.cancel()
         dialog?.dismiss()
     }
@@ -713,25 +717,49 @@ class SettingActivity : BaseActivity<BackstageActivitySettingBinding, SettingVie
     }
 
     override fun dispatchTouchEvent(ev: MotionEvent): Boolean {
-        if (ev.action == MotionEvent.ACTION_DOWN) {
-            val v = currentFocus
-            if (v is EditText) {
-                val l = IntArray(2)
-                v.getLocationOnScreen(l)
-                val x = ev.rawX + v.left - l[0]
-                val y = ev.rawY + v.top - l[1]
-                if (x < v.width && y < v.height) {
-                    return super.dispatchTouchEvent(ev)
-                } else {
-                    hideKeyboard(v)
+        when (ev.action) {
+            MotionEvent.ACTION_DOWN-> {
+                val v = currentFocus
+                if (v is EditText) {
+                    val l = IntArray(2)
+                    v.getLocationOnScreen(l)
+                    val x = ev.rawX + v.left - l[0]
+                    val y = ev.rawY + v.top - l[1]
+                    if (x < v.width && y < v.height) {
+                        return super.dispatchTouchEvent(ev)
+                    } else {
+                        hideKeyboard(v)
+                    }
                 }
             }
+            MotionEvent.ACTION_UP -> {
+                backTime=(autoTime?.toIntOrNull()?:10)*60
+            }
         }
+
         return super.dispatchTouchEvent(ev)
     }
-
+    var jobTime: Job? = null
+        get() = field
+    private fun startTime(){
+        stopTime()
+        jobTime=CoroutineScope(Dispatchers.Main).launch {
+            while (true){
+                backTime-=1
+                if (backTime<=0){
+                    back()
+                }
+                Log.d(TAG, "startTimebacktime: "+backTime)
+                delay(1000)
+            }
+        }
+    }
+    private fun stopTime(){
+        jobTime?.cancel()
+    }
     private fun hideKeyboard(view: View) {
         val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
         imm.hideSoftInputFromWindow(view.windowToken, 0)
     }
+
 }

+ 2 - 1
module_backstage/src/main/java/com/module/backstage/activity/setting/SettingViewModel.kt

@@ -279,7 +279,7 @@ class SettingViewModel @Inject constructor(private val mRepo: SettingRepository)
             "05" -> {//下玉米完毕
             }
 
-            "07" -> {//玉米爆开
+            "06" -> {//玉米爆开
             }
 
             "10" -> {//制作完成
@@ -310,6 +310,7 @@ class SettingViewModel @Inject constructor(private val mRepo: SettingRepository)
             "01", "02" -> {
                 threadSettingParam.stopUp()
                 threadSettingParam.isActiveM3 = false
+                SpUtils.putString(MMKVName.OPEN_DEV,"1")
                 _isM3Success.value = true
                 Heartbeat.isAlarm=true
             }

+ 51 - 3
module_backstage/src/main/java/com/module/backstage/fragment/ResetPwdFragment.kt

@@ -1,11 +1,22 @@
 package com.module.backstage.fragment
 
 
+import android.util.Log
+import android.view.View
 import androidx.fragment.app.viewModels
+import com.module.backstage.R
 import com.module.backstage.databinding.BackstageFragmentResetPwdBinding
 import com.module.backstage.vm.ResetPwdFragmentVM
+import com.quyunshuo.sbm10.base.utils.SpUtils
+import com.quyunshuo.sbm10.common.constant.Heartbeat
+import com.quyunshuo.sbm10.common.constant.MMKVName
+import com.quyunshuo.sbm10.common.constant.MqName
+import com.quyunshuo.sbm10.common.constant.event.ApiMessageEvent
 import com.quyunshuo.sbm10.common.ui.BaseFragment
+import com.quyunshuo.sbm10.common.util.ToastUtil
+import com.quyunshuo.sbm10.common.util.UiUtil
 import dagger.hilt.android.AndroidEntryPoint
+import org.greenrobot.eventbus.EventBus
 
 /**
  * 重置密码Fragment
@@ -14,16 +25,18 @@ import dagger.hilt.android.AndroidEntryPoint
  * @since 2021/8/1 11:46 下午
  */
 @AndroidEntryPoint
-class ResetPwdFragment : BaseFragment<BackstageFragmentResetPwdBinding, ResetPwdFragmentVM>() {
+class ResetPwdFragment : BaseFragment<BackstageFragmentResetPwdBinding, ResetPwdFragmentVM>(),
+    View.OnClickListener {
 
 
     override val mViewModel: ResetPwdFragmentVM by viewModels()
     override fun createVB() = BackstageFragmentResetPwdBinding.inflate(layoutInflater)
-
+    private val TAG = "ResetPwdFragment"
 
     override fun BackstageFragmentResetPwdBinding.initView() {
         addAllKeyboardView(mBinding.root)
-
+        homeReturnToUpperLevel1.setOnClickListener(this@ResetPwdFragment)
+        homeReturnToUpperLevel.setOnClickListener(this@ResetPwdFragment)
     }
 
     override fun initObserve() {
@@ -34,4 +47,39 @@ class ResetPwdFragment : BaseFragment<BackstageFragmentResetPwdBinding, ResetPwd
         mViewModel.getArticleData()
     }
 
+    override fun onClick(v: View?) {
+        when (v!!.id) {
+            mBinding.homeReturnToUpperLevel1.id -> {
+                val passWord = SpUtils.getString(MqName.ADMIN_PWD, "123456").toString()
+                if (mBinding.backstageEdittext3.text.toString().trim()==passWord) {
+                    if (mBinding.backstageEdittext.text.toString().trim() == mBinding.backstageEdittext2.text.toString().trim()) {
+                        val responseContent = hashMapOf(
+                            "type" to 0,
+                             "password" to mBinding.backstageEdittext.text.toString().trim()
+                        )
+                        EventBus.getDefault().post(ApiMessageEvent(MMKVName.PASSWORD,responseContent))
+                        SpUtils.putString(MqName.ADMIN_PWD,mBinding.backstageEdittext.text.toString().trim())
+                        ToastUtil.switchToastStyleToSuccess(UiUtil.getStringRes(R.string.modific_success))
+                    } else {
+                        mBinding.backstageEdittext.setText("")
+                        mBinding.backstageEdittext2.setText("")
+                        mBinding.backstageEdittext3.setText("")
+                        ToastUtil.switchToastStyleToError(UiUtil.getStringRes(R.string.init_fail))
+                    }
+                } else {
+                    mBinding.backstageEdittext.setText("")
+                    mBinding.backstageEdittext2.setText("")
+                    mBinding.backstageEdittext3.setText("")
+                    ToastUtil.switchToastStyleToSuccess(UiUtil.getStringRes(R.string.init_fail))
+                }
+            }
+            mBinding.homeReturnToUpperLevel.id -> {
+                mBinding.backstageEdittext.setText("")
+                mBinding.backstageEdittext2.setText("")
+                mBinding.backstageEdittext3.setText("")
+            }
+
+        }
+    }
+
 }

+ 6 - 6
module_backstage/src/main/java/com/module/backstage/fragment/param/DebugAlarmFragment.kt

@@ -110,12 +110,12 @@ class DebugAlarmFragment :
             when (i) {
                 0->getValue(string,i,0)
                 2->getValue(string,i,1)
-                4->getValue(string,i,2)
-                6->getValue(string,i,3)
-                8->getValue(string,i,4)
-                10->getValue(string,i,5)
-                12->getValue(string,i,6)
-                14->getValue(string,i,7)
+//                4->getValue(string,i,2)
+//                6->getValue(string,i,3)
+                8->getValue(string,i,2)
+                10->getValue(string,i,3)
+                12->getValue(string,i,4)
+                14->getValue(string,i,5)
             }
             i++
         }

+ 2 - 5
module_backstage/src/main/java/com/module/backstage/fragment/param/DebugParamFragment.kt

@@ -96,7 +96,6 @@ class DebugParamFragment :
         mViewModel.disposeData(messageEvent)
     }
 
-
     override fun initObserve() {
         lifecycle.addObserver(mViewModel.getThreadDebugParamParam())
         observeLiveData(mViewModel.lowSpeedChecked, ::setWindLow)
@@ -111,6 +110,7 @@ class DebugParamFragment :
         observeLiveData(mViewModel.loading, ::setLoading)
         lifecycle.addObserver(this)
     }
+
     private fun mainCoreDataList(string: String) {
         mBinding.tvLutou.text = SBCHeartbeat.cabinetTm + "°C"
         Log.d(TAG, "mainCoreDataList: "+string)
@@ -151,8 +151,8 @@ class DebugParamFragment :
                 viewHolder.mBinding.ivState.setImageDrawable(UiUtil.getDrawableRes(R.drawable.shape_circle))
             }
         }
-
     }
+
     private fun setLoading(b: Boolean?) {
         debugParamAdapter?.setState(mViewModel._paramDataMap)
         if (b == false) {
@@ -165,7 +165,6 @@ class DebugParamFragment :
         Log.d(TAG, "refreshPage: 控件刷新")
     }
 
-
     override fun initRequestData() {
         mViewModel.getArticleData()
     }
@@ -319,7 +318,6 @@ class DebugParamFragment :
         getValue1(b, 2)
     }
 
-
     private fun getValue1(b: Boolean, position: Int) {
         val view: View = mBinding.debugRvProduct.getChildAt(position)
         if (null != mBinding.debugRvProduct.getChildViewHolder(view)) {
@@ -342,7 +340,6 @@ class DebugParamFragment :
         }
     }
 
-
     private fun showOnOffDialog(isChecked: Boolean, position: Int) {
         if (okCancelDialog == null) {
             okCancelDialog = this@DebugParamFragment.context?.let { OKCancelDialog(it) }

+ 32 - 6
module_backstage/src/main/java/com/module/backstage/fragment/product/DebugProductFragment.kt

@@ -22,6 +22,7 @@ import com.module.backstage.vm.DebugProductFragmentVM
 import com.quyunshuo.sbm10.base.dialog.TipsDialog
 import com.quyunshuo.sbm10.base.utils.RegisterEventBus
 import com.quyunshuo.sbm10.base.utils.SpUtils
+import com.quyunshuo.sbm10.common.bean.ProductDataBean
 import com.quyunshuo.sbm10.common.constant.Heartbeat
 import com.quyunshuo.sbm10.common.constant.MMKVName
 import com.quyunshuo.sbm10.common.listener.AdapterClickListener
@@ -56,6 +57,8 @@ class DebugProductFragment :
     var okCancelDialog: OKCancelDialog? = null
     private val TAG = "DebugProductFragment"
     private lateinit var materialHashMap: HashMap<String, String>
+    private var material = SpUtils.getBoolean(MMKVName.MATERIAL,true)
+    private var productList = ArrayList<ProductDataBean>()//传递给make的制作商品list
 
     override fun BackstageFragmentDebugProductBinding.initView() {
         setMaterialValue()
@@ -70,12 +73,32 @@ class DebugProductFragment :
                 )
             layoutManager = gridLayoutManager
             productAdapter = DebugProductAdapter(mViewModel.getPriceData())
+            productList=mViewModel.getPriceData()
             productAdapter!!.setItemListener(object : AdapterClickListener {
                 override fun onClickListener(view: View?, position: Int, data: String?) {
                     XLogUtil.d("DebugProductFragment position:$position")
                     Log.d(TAG, "onClickListener: " + data)
                     Log.d(TAG, "onClickListener: "+deviceState)
+                    Log.d(TAG, "onClickListener:1 "+productList[position].productNo)
                     if (checkToBuy()) return//是否开机
+                    if (material == true){
+                        val sweet = materialHashMap["sweet"].toString().toInt()
+                        val salty = materialHashMap["salty"].toString().toInt()
+                        val boxValue = materialHashMap["box"].toString().toInt()
+                        val productNo= productList[position].productNo
+                        if (productNo=="E01"&&sweet<=0){
+                            showTipsDialog(UiUtil.getStringRes(R.string.alarm_message_04))
+                            return
+                        }
+                        if (productNo=="E02"&&salty<=0){
+                            showTipsDialog(UiUtil.getStringRes(R.string.alarm_message_03))
+                            return
+                        }
+                        if (boxValue<=0){
+                            showTipsDialog(UiUtil.getStringRes(R.string.box_not_enough))
+                            return
+                        }
+                    }
                     when(deviceState){
                         "02"->showOkCancelDialog(position)
                         else->{
@@ -204,11 +227,6 @@ class DebugProductFragment :
             showTipsDialog(state)
             return true
         }
-        val boxValue = materialHashMap["box"].toString().toInt()
-        if (boxValue<=0){
-            showTipsDialog(UiUtil.getStringRes(R.string.box_not_enough))
-            return true
-        }
         return false
     }
 
@@ -242,12 +260,20 @@ class DebugProductFragment :
             //机器制作中
             return UiUtil.getStringRes(R.string.home_tips_dialog_5)
         }
+        if (deviceState == "05") {
+            //下玉米完毕
+            return UiUtil.getStringRes(R.string.home_tips_dialog_5)
+        }
+        if (deviceState == "06") {
+            //玉米爆开
+            return UiUtil.getStringRes(R.string.home_tips_dialog_5)
+        }
         if (deviceState == "10") {
             //未取出
             return UiUtil.getStringRes(R.string.home_make_success_tips)
         }
 
-        return ""
+        return deviceState
     }
 
     private fun showTipsDialog(content: String) {

+ 2 - 2
module_backstage/src/main/java/com/module/backstage/repo/DebugAlarmFragmentRepo.kt

@@ -20,8 +20,8 @@ class DebugAlarmFragmentRepo @Inject constructor() : BaseRepository() {
     var arrayList: MutableList<PlcAlarmAddressEnum> = Arrays.asList(
         PlcAlarmAddressEnum.Alarm01,
         PlcAlarmAddressEnum.Alarm02,
-        PlcAlarmAddressEnum.Alarm03,
-        PlcAlarmAddressEnum.Alarm04,
+//        PlcAlarmAddressEnum.Alarm03,
+//        PlcAlarmAddressEnum.Alarm04,
         PlcAlarmAddressEnum.Alarm05,
         PlcAlarmAddressEnum.Alarm06,
         PlcAlarmAddressEnum.Alarm07,

+ 2 - 2
module_backstage/src/main/java/com/module/backstage/vm/DebugParamFragmentVM.kt

@@ -327,8 +327,8 @@ class DebugParamFragmentVM @Inject constructor(private val mRepo: DebugParamFrag
                 val hexStr2BinStr = HexUtils.hexStr2BinStr(data)
                 val split = hexStr2BinStr.split("")
                 updateOtherState(split)
-        val data1 =messageEvent.data.substring(52,58)
-        val data2 =messageEvent.data.substring(20,22)
+//        val data1 =messageEvent.data.substring(52,58)
+                val data2 =messageEvent.data.substring(20,22)
                 Log.d(TAG, "调试页 cmdHeartbeat1: "+data2)
                 val hexStr2BinStr1 = HexUtils.hexStr2BinStr(data2)
                 val split1 = hexStr2BinStr1.split("")

+ 1 - 1
module_backstage/src/main/res/drawable/backstage_shape_general_param_et.xml

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
 <shape xmlns:android="http://schemas.android.com/apk/res/android">
-    <solid android:color="#F4F9FF" />
+    <solid android:color="#faf8dd" />
     <corners android:radius="8dp" />
 </shape>

+ 1 - 1
module_backstage/src/main/res/drawable/backstage_shape_other_rg_bg.xml

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
 <shape xmlns:android="http://schemas.android.com/apk/res/android">
-    <solid android:color="#F4F9FF" />
+    <solid android:color="#faf8dd" />
     <corners android:radius="100dp" />
 </shape>

+ 23 - 19
module_backstage/src/main/res/layout/backstage_fragment_reset_pwd.xml

@@ -46,7 +46,8 @@
             android:layout_width="444dp"
             android:layout_height="wrap_content"
             android:minHeight="80dp"
-            android:background="#F4F9FF"
+            android:background="@drawable/backstage_shape_general_param_yellow_et"
+            android:inputType="textPassword"
             android:hint="@string/backstage_old_password_input"
             android:paddingLeft="20dp"
             android:textColor="#576478"
@@ -72,8 +73,9 @@
             android:layout_width="444dp"
             android:layout_height="wrap_content"
             android:minHeight="80dp"
-            android:background="#F4F9FF"
+            android:background="@drawable/backstage_shape_general_param_yellow_et"
             android:hint="@string/backstage_new_password_input"
+            android:inputType="textPassword"
             android:paddingLeft="20dp"
             app:layout_constraintStart_toEndOf="@id/backstage_textview3"
             android:textColor="#576478"
@@ -100,7 +102,8 @@
             android:layout_width="444dp"
             android:layout_height="wrap_content"
             android:minHeight="80dp"
-            android:background="#F4F9FF"
+            android:background="@drawable/backstage_shape_general_param_yellow_et"
+            android:inputType="textPassword"
             android:hint="@string/backstage_confirm_password_input"
             android:paddingLeft="20dp"
             android:textColor="#576478"
@@ -110,22 +113,6 @@
             app:layout_constraintEnd_toEndOf="parent" />
 
         <TextView
-            android:id="@+id/home_return_to_upper_level"
-            android:layout_width="260dp"
-            android:layout_height="100dp"
-            android:layout_marginTop="65dp"
-            android:gravity="center"
-            android:background="@color/white"
-            android:minWidth="260dp"
-            android:textColor="#569DF6"
-            android:text="@string/rewrite"
-            android:textSize="42sp"
-            app:layout_constraintStart_toEndOf="@id/home_return_to_upper_level1"
-            app:layout_constraintBottom_toBottomOf="parent"
-            app:layout_constraintEnd_toEndOf="parent"
-            app:layout_constraintTop_toBottomOf="@+id/backstage_edittext2" />
-
-        <TextView
             android:id="@+id/home_return_to_upper_level1"
             android:layout_width="260dp"
             android:layout_height="100dp"
@@ -143,5 +130,22 @@
             app:layout_constraintTop_toBottomOf="@+id/backstage_edittext2"
             app:layout_constraintVertical_bias="0.533" />
 
+
+        <TextView
+            android:id="@+id/home_return_to_upper_level"
+            android:layout_width="260dp"
+            android:layout_height="100dp"
+            android:layout_marginTop="65dp"
+            android:gravity="center"
+            android:background="@drawable/backstage_shape_general_param_yellow_et"
+            android:minWidth="260dp"
+            android:textColor="@color/black"
+            android:text="@string/rewrite"
+            android:textStyle="bold"
+            android:textSize="42sp"
+            app:layout_constraintStart_toEndOf="@id/home_return_to_upper_level1"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintTop_toBottomOf="@+id/backstage_edittext2" />
     </androidx.constraintlayout.widget.ConstraintLayout>
 </androidx.constraintlayout.widget.ConstraintLayout>

+ 2 - 2
module_backstage/src/main/res/layout/backstage_fragment_show_product.xml

@@ -20,7 +20,7 @@
         android:gravity="center"
         android:layout_width="380dp"
         android:layout_height="120dp"
-        android:layout_marginBottom="360dp"
+        android:layout_marginBottom="860dp"
         android:minWidth="380dp"
         android:minHeight="100dp"
         android:background="@drawable/update_btn_background"
@@ -38,7 +38,7 @@
         android:gravity="center"
         android:layout_width="380dp"
         android:layout_height="120dp"
-        android:layout_marginBottom="360dp"
+        android:layout_marginBottom="860dp"
         android:minWidth="380dp"
         android:minHeight="100dp"
         android:background="@drawable/update_btn_background"

+ 27 - 25
module_home/src/main/java/com/quyunshuo/module/home/activity/main/MainActivity.kt

@@ -2,11 +2,13 @@ package com.quyunshuo.module.home.activity.main
 
 import android.util.Log
 import android.view.View
-import android.widget.Toast
 import androidx.activity.viewModels
 import androidx.lifecycle.LifecycleObserver
 import androidx.navigation.findNavController
 import com.alibaba.android.arouter.facade.annotation.Route
+import com.google.gson.Gson
+import com.google.gson.JsonObject
+import com.google.gson.reflect.TypeToken
 import com.quyunshuo.module.home.R
 import com.quyunshuo.module.home.databinding.HomeActivityMainBinding
 import com.quyunshuo.module.home.utils.GeTuiUtil
@@ -19,7 +21,6 @@ import com.quyunshuo.sbm10.common.constant.MqName
 import com.quyunshuo.sbm10.common.constant.RouteUrl
 import com.quyunshuo.sbm10.common.constant.event.ApiMessageEvent
 import com.quyunshuo.sbm10.common.ui.BaseActivity
-import com.quyunshuo.sbm10.common.util.UiUtil
 import dagger.hilt.android.AndroidEntryPoint
 import org.greenrobot.eventbus.Subscribe
 import org.greenrobot.eventbus.ThreadMode
@@ -88,29 +89,28 @@ class MainActivity : BaseActivity<HomeActivityMainBinding, MainViewModel>(),Life
     }
 
     override fun onBackPressed() {
-        val navController = findNavController(mBinding.homeFragmentcontainerview.id)
-        val fragmentPopped = navController.popBackStack()
-        Log.d("fragmentPopped", "onBackPressed: " + fragmentPopped)
-
+//        val navController = findNavController(mBinding.homeFragmentcontainerview.id)
+//        val fragmentPopped = navController.popBackStack()
+//        Log.d("fragmentPopped", "onBackPressed: " + fragmentPopped)
         // 如果popBackStack()返回false,意味着没有Fragment可以返回了
         // 这里你可以假设已经回到了最开始的Fragment,或者根本就没有Fragment在栈中
-        if (!fragmentPopped) {
-            // 没有任何Fragment可以返回了,结束Activity
-            // 获取当前时间戳
-            val currentTime = System.currentTimeMillis()
-
-            // 判断与上一次点击返回键的时间间隔是否小于1秒
-            if (currentTime - backPressedTime < 1000) {
-                super.onBackPressed() // 执行默认的返回键操作(退出Activity)
-            } else {
-                Toast.makeText(
-                    this,
-                    UiUtil.getStringRes(R.string.home_quit_app),
-                    Toast.LENGTH_SHORT
-                ).show()
-                backPressedTime = currentTime // 更新上一次点击返回键的时间戳
-            }
-        }
+//        if (!fragmentPopped) {
+//            // 没有任何Fragment可以返回了,结束Activity
+//            // 获取当前时间戳
+//            val currentTime = System.currentTimeMillis()
+//
+//            // 判断与上一次点击返回键的时间间隔是否小于1秒
+//            if (currentTime - backPressedTime < 1000) {
+//                super.onBackPressed() // 执行默认的返回键操作(退出Activity)
+//            } else {
+//                Toast.makeText(
+//                    this,
+//                    UiUtil.getStringRes(R.string.home_quit_app),
+//                    Toast.LENGTH_SHORT
+//                ).show()
+//                backPressedTime = currentTime // 更新上一次点击返回键的时间戳
+//            }
+//        }
     }
     override fun onDestroy() {
         super.onDestroy()
@@ -125,9 +125,11 @@ class MainActivity : BaseActivity<HomeActivityMainBinding, MainViewModel>(),Life
     @Subscribe(threadMode = ThreadMode.MAIN)
     fun event(message: ApiMessageEvent) {
         when (message.name) {
-            MqName.IS_SLEEP -> {
+            MqName.SLEEP -> {
                 Log.d(TAG, "1event: IS_SLEEP:" + message.data)
-                if (message.data == "0") {
+                val map = Gson().fromJson(message.data.toString(), JsonObject::class.java)
+                val response=map["responseContent"].toString()
+                if (response == "0") {
                     Log.d(TAG, "11event: IS_SLEEP:" + message.data)
                     //关掉休眠
                     SpUtils.putBoolean(MMKVName.SLEEP, false)

+ 14 - 8
module_home/src/main/java/com/quyunshuo/module/home/adapter/HomeProductAdapter.kt

@@ -1,24 +1,22 @@
 package com.quyunshuo.module.home.adapter
 
-import android.graphics.Typeface
-import android.util.Log
 import android.view.LayoutInflater
+import android.view.View
 import android.view.ViewGroup
-import androidx.lifecycle.LiveData
-import androidx.lifecycle.MutableLiveData
 import androidx.recyclerview.widget.RecyclerView
 import com.bumptech.glide.Glide
-import com.quyunshuo.sbm10.base.BaseApplication
 import com.quyunshuo.sbm10.common.bean.ProductDataBean
 import com.quyunshuo.sbm10.common.constant.MMKVName
 import com.quyunshuo.sbm10.common.listener.AdapterClickListener
 import com.quyunshuo.sbm10.common.util.UiUtil
 import com.quyunshuo.module.home.R
 import com.quyunshuo.module.home.databinding.HomeItemHomeProductBinding
+import com.quyunshuo.sbm10.base.utils.SpUtils
 
-class HomeProductAdapter(var productList:ArrayList<ProductDataBean>): RecyclerView.Adapter<HomeProductAdapter.MyViewHolder>() {
+class HomeProductAdapter(var productList:ArrayList<ProductDataBean>,val materialHashMap: HashMap<String, String>): RecyclerView.Adapter<HomeProductAdapter.MyViewHolder>() {
     private val TAG = "HomeProductAdapter"
     var listener:AdapterClickListener? = null
+    private var material = SpUtils.getBoolean(MMKVName.MATERIAL,true)
 
     inner class MyViewHolder(binding: HomeItemHomeProductBinding): RecyclerView.ViewHolder(binding.root){
         private val mBinding = binding
@@ -49,6 +47,16 @@ class HomeProductAdapter(var productList:ArrayList<ProductDataBean>): RecyclerVi
                 clProduct.setOnClickListener {
                     listener?.onClickListener(it,layoutPosition,"")
                 }
+                if (material==true){
+                    val sweet = materialHashMap["sweet"].toString().toInt()
+                    val salty = materialHashMap["salty"].toString().toInt()
+                    if (productDataBean.productNo=="E01"&&sweet<=0){
+                        rlProductHide.visibility= View.VISIBLE
+                    }
+                    if (productDataBean.productNo=="E02"&&salty<=0){
+                        rlProductHide.visibility= View.VISIBLE
+                    }
+                }
             }
         }
 
@@ -68,8 +76,6 @@ class HomeProductAdapter(var productList:ArrayList<ProductDataBean>): RecyclerVi
 
     override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
         holder.bind(productList[position])
-
-
     }
 
     fun setOnclickListener(adapter: AdapterClickListener){

+ 22 - 10
module_home/src/main/java/com/quyunshuo/module/home/fragment/fragment/HomeFragment.kt

@@ -118,12 +118,14 @@ class HomeFragment : BaseFragment<HomeFragmentHomeBinding, HomeFragmentVM>(), Vi
     private var languageSelectorDialog: LanguageSelectorDialog? = null
     lateinit var materialHashMap: HashMap<String, String>
     private var materialValue=""
-
+    private var material = SpUtils.getBoolean(MMKVName.MATERIAL,true)
 
     @RequiresApi(Build.VERSION_CODES.P)
     override fun HomeFragmentHomeBinding.initView() {
-        materialValue = SpUtils.getString(MMKVName.MATERIAL_VALUE, MMKVName.MATERIAL_HASHMAP)!!
-        materialHashMap= Gson().fromJson(materialValue, object : TypeToken<HashMap<String, String>>() {}.type)
+        if (material == true){
+            materialValue = SpUtils.getString(MMKVName.MATERIAL_VALUE, MMKVName.MATERIAL_HASHMAP)!!
+            materialHashMap= Gson().fromJson(materialValue, object : TypeToken<HashMap<String, String>>() {}.type)
+        }
 
         startRefreshime()
         with(homeRvProduct) {
@@ -131,7 +133,7 @@ class HomeFragment : BaseFragment<HomeFragmentHomeBinding, HomeFragmentVM>(), Vi
             productList = mViewModel.getPriceData()
             //设置布局排列方式,默认垂直排列
             layoutManager = createGridLayoutManager(productList.size)
-            homeProductAdapter = HomeProductAdapter(productList)
+            homeProductAdapter = HomeProductAdapter(productList,materialHashMap)
             homeProductAdapter?.setOnclickListener { view, position, data ->
                 clickProduct(
                     position,
@@ -276,8 +278,23 @@ class HomeFragment : BaseFragment<HomeFragmentHomeBinding, HomeFragmentVM>(), Vi
         product = productList[position]
         Log.d(TAG, "clickProduct: " + product)
         //点击前校验 有没有开机、有没有选择支付方式等。
+        if (material == true){
+            val sweet = materialHashMap["sweet"].toString().toInt()
+            val salty = materialHashMap["salty"].toString().toInt()
+            val boxValue = materialHashMap["box"].toString().toInt()
+            if (boxValue<=0){
+                showTipsDialog(UiUtil.getStringRes(R.string.box_not_enough))
+                return
+            }
+            val productNo= product!!.productNo
+            if (productNo=="E01"&&sweet<=0){
+                return
+            }
+            if (productNo=="E02"&&salty<=0){
+                return
+            }
+        }
         if (checkToBuy()) return//是否开机
-
 //        selectProductDataBean = ProTypeEnum.getEnumByValue(product!!.nameChinese)
         //todo 测试做糖 传递价格等信息过去。
 //        gotoMake(product.nameChinese)
@@ -311,11 +328,6 @@ class HomeFragment : BaseFragment<HomeFragmentHomeBinding, HomeFragmentVM>(), Vi
             showTipsDialog("价格低于0元,不能购买")
             return true
         }
-        val boxValue = materialHashMap["box"].toString().toInt()
-        if (boxValue<=0){
-            showTipsDialog(UiUtil.getStringRes(R.string.box_not_enough))
-            return true
-        }
         return false
     }
 

+ 24 - 31
module_home/src/main/java/com/quyunshuo/module/home/fragment/fragment/MakeFragment.kt

@@ -19,7 +19,13 @@ import com.hboxs.serialport.sbc.VBoxMessage
 import com.hboxs.serialport.sbc.VboxSerialPortSendQueue
 import com.hboxs.serialport.sbc.frame.VboxCommand
 import com.hboxs.serialport.sbc.frame.VboxWriteCommand
-import com.module.database.room.entity.LocalOrderBean
+import com.quyunshuo.module.home.R
+import com.quyunshuo.module.home.databinding.HomeFragmentMakeBinding
+import com.quyunshuo.module.home.dialog.AgainBuyDialog
+import com.quyunshuo.module.home.enums.LogoEnum
+import com.quyunshuo.module.home.fragment.vm.MakeFragmentVM
+import com.quyunshuo.module.home.utils.SimplePlayerUtil
+import com.quyunshuo.module.home.weight.ProgressView
 import com.quyunshuo.sbm10.base.DialogClickListener
 import com.quyunshuo.sbm10.base.addressenum.PlcD2StatusEnum
 import com.quyunshuo.sbm10.base.ktx.observeLiveData
@@ -30,17 +36,9 @@ import com.quyunshuo.sbm10.common.constant.Heartbeat
 import com.quyunshuo.sbm10.common.constant.MMKVName
 import com.quyunshuo.sbm10.common.constant.event.ApiMessageEvent
 import com.quyunshuo.sbm10.common.ui.BaseFragment
-import com.quyunshuo.sbm10.common.util.ByteUtils
 import com.quyunshuo.sbm10.common.util.LongClickUtils
-import com.quyunshuo.sbm10.common.util.XLogUtil
-import com.quyunshuo.module.home.R
-import com.quyunshuo.module.home.databinding.HomeFragmentMakeBinding
-import com.quyunshuo.module.home.dialog.AgainBuyDialog
-import com.quyunshuo.module.home.enums.LogoEnum
-import com.quyunshuo.module.home.fragment.vm.MakeFragmentVM
-import com.quyunshuo.module.home.utils.SimplePlayerUtil
-import com.quyunshuo.module.home.weight.ProgressView
 import com.quyunshuo.sbm10.common.util.UiUtil
+import com.quyunshuo.sbm10.common.util.XLogUtil
 import dagger.hilt.android.AndroidEntryPoint
 import kotlinx.coroutines.CoroutineScope
 import kotlinx.coroutines.Dispatchers
@@ -51,7 +49,6 @@ import org.greenrobot.eventbus.Subscribe
 import org.greenrobot.eventbus.ThreadMode
 import java.lang.ref.WeakReference
 import java.math.BigDecimal
-import java.util.UUID
 
 /**
  * 首页Fragment
@@ -77,6 +74,7 @@ class MakeFragment : BaseFragment<HomeFragmentMakeBinding, MakeFragmentVM>(), Li
     private var isMakePoc = false
     private var firstItem: ShoppingCartBean? = null
     private var productCount = 1
+    private var additionalText =0
 //    lateinit var materialHashMap: HashMap<String, String>
 //    val gson = Gson()
 //    val type = object : TypeToken<HashMap<String, String>>() {}.type
@@ -111,8 +109,11 @@ class MakeFragment : BaseFragment<HomeFragmentMakeBinding, MakeFragmentVM>(), Li
         if (selectPro != null) {
             shoppingCartItems = parseShoppingCartData(selectPro).toMutableList()
             saveShoppingCartItems = parseShoppingCartData(selectPro).toMutableList()//保存购物车的清单
-
+            for (i in shoppingCartItems) {
+                additionalText+=i.count
+            }
             Log.d(TAG, "制作列表: " + shoppingCartItems)
+            Log.d(TAG, "additionalText: "+additionalText)
 //            if (shoppingCartItems.isNotEmpty()) {
 //                mViewModel.startSendMake(shoppingCartItems[0].nameChinese)
 //                val item = shoppingCartItems[0]
@@ -160,7 +161,7 @@ class MakeFragment : BaseFragment<HomeFragmentMakeBinding, MakeFragmentVM>(), Li
     override fun initObserve() {
         observeLiveData(mViewModel.D2Value, ::getD2Value)
         observeLiveData(mViewModel.D170Value, ::dataChange)
-        lifecycle.addObserver(mViewModel.threadHomeParam)
+        lifecycle.addObserver(mViewModel.threadMakeParam)
         lifecycle.addObserver(myHandler)
         lifecycle.addObserver(this)
     }
@@ -227,12 +228,13 @@ class MakeFragment : BaseFragment<HomeFragmentMakeBinding, MakeFragmentVM>(), Li
     internal class MyHandler(fragment: Fragment) : Handler(), LifecycleObserver {
         var mWeakReference: WeakReference<Fragment> = WeakReference(fragment)
         var fragment: MakeFragment = mWeakReference.get() as MakeFragment
+        private val TAG = "MakeFragment"
         override fun handleMessage(msg: android.os.Message) {
             when (msg.what) {
                 1 -> {
                     if (fragment.mBinding != null) {
                         if (fragment.isMakePoc) {
-                            Log.d("makefragment", "进度条: " + fragment.plannedSpeed)
+                            Log.d(TAG, "initProgress: 进度条1 "+ fragment.plannedSpeed)
                             fragment.plannedSpeed++
                             fragment.mBinding.progressView.setCurrentProgress(fragment.plannedSpeed)
                             val sysTime = System.currentTimeMillis() //获取系统时间
@@ -247,20 +249,23 @@ class MakeFragment : BaseFragment<HomeFragmentMakeBinding, MakeFragmentVM>(), Li
                             }
                             if (percentage >= 99) {
                                 fragment.mBinding.tvProgressDescribe.setText(99.toString() + "%")
+                                Log.d(TAG, "initProgress: 进度条2 "+ fragment.plannedSpeed)
                             } else {
+                                Log.d(TAG, "initProgress: 进度条4 "+ fragment.plannedSpeed)
                                 fragment.mBinding.tvProgressDescribe.setText(
                                     percentage.toInt().toString() + "%"
                                 )
 //                            }
                             }
                         } else {
-                            Log.d("makefragment", "initProgress: 进度条")
+                            Log.d(TAG, "initProgress: 进度条3 "+ fragment.plannedSpeed)
                             fragment.plannedSpeed = 1
                             fragment.mBinding.progressView.setCurrentProgress(fragment.plannedSpeed)
                             fragment.mBinding.tvProgressDescribe.text =
                                 UiUtil.getStringRes(R.string.make_loading)
                         }
                         if (fragment.plannedSpeed >= fragment.mBinding.progressView.maxProgress) {
+                            Log.d(TAG, "initProgress: 进度条5 "+ fragment.plannedSpeed)
                             fragment.jobHandler?.cancel()
                         }
                     }
@@ -351,27 +356,15 @@ class MakeFragment : BaseFragment<HomeFragmentMakeBinding, MakeFragmentVM>(), Li
                 Log.d(TAG, "initProgress: 进度条: true")
                 if (isProcessing) {
                     val nameId = UiUtil.getResId(shoppingCartItems[0].nameId, R.string::class.java)
-//                    if (SpUtils.getBoolean(MMKVName.MATERIAL,true)==true) {
                     if (shoppingCartItems[0].productNo.equals("E01")) {
                         Heartbeat.productMaking = "E01"
-//                            sweet -= 40
                     } else if (shoppingCartItems[0].productNo.equals("E02")) {
                         Heartbeat.productMaking = "E02"
-//                            salty -= 40
                     }
-//                        box -= 1
-//                        val map = hashMapOf(
-//                            "sweet" to sweet.toString(),
-//                            "salty" to salty.toString(),
-//                            "box" to box.toString(),
-//                        )
-//                        SpUtils.putString(MMKVName.MATERIAL_VALUE, gson.toJson(map))
-//                        Log.d(TAG, "cmdHeartbeat: MATERIAL_VALUE2 " + map)
-//                    }
-                    val additionalText = saveShoppingCartItems.size // 要添加的字符串
+//                    val additionalText = saveShoppingCartItems.size // 要添加的字符串
                     mBinding.tvMakingProduct.text =
                         getString(nameId) + productCount + "/" + additionalText
-                    mViewModel.threadHomeParam.stopSendMake()
+                    mViewModel.threadMakeParam.stopSendMake()
                     Log.d(TAG, "startMake:stopMake ")
                     initProgress()
                     if (againBuyDialog != null) {
@@ -395,13 +388,13 @@ class MakeFragment : BaseFragment<HomeFragmentMakeBinding, MakeFragmentVM>(), Li
                 mBinding.tvProgressDescribe.setText(100.toString() + "%")
                 if (isShowAgainBuyDialog) {
                     isShowAgainBuyDialog = false
+                    jobHandler?.cancel()
                     if (shoppingCartItems.isNotEmpty()) {
                         showAgainBuyDialog(1)
-                        isMakePoc = false
                     } else {
                         showAgainBuyDialog(2)
-                        isMakePoc = false
                     }
+                    isMakePoc = false
                 }
             }
 

+ 8 - 0
module_home/src/main/java/com/quyunshuo/module/home/fragment/vm/HomeFragmentVM.kt

@@ -243,6 +243,14 @@ class HomeFragmentVM @Inject constructor(private val mRepo: HomeFragmentRepo) :
             //机器制作中
             return UiUtil.getStringRes(R.string.home_tips_dialog_5)
         }
+        if (D2Value.value == "05") {
+            //下玉米完毕
+            return UiUtil.getStringRes(R.string.home_tips_dialog_5)
+        }
+        if (D2Value.value == "07") {
+            //玉米爆开
+            return UiUtil.getStringRes(R.string.home_tips_dialog_5)
+        }
         if (D2Value.value == "10") {
             //未取出
             return UiUtil.getStringRes(R.string.home_make_success_tips)

+ 11 - 12
module_home/src/main/java/com/quyunshuo/module/home/fragment/vm/MakeFragmentVM.kt

@@ -6,13 +6,12 @@ import androidx.lifecycle.MutableLiveData
 import androidx.lifecycle.viewModelScope
 import com.hboxs.serialport.plc.frame.ResponseFrame
 import com.hboxs.serialport.plc.message.Message
-import com.hboxs.serialport.plc.thread.ThreadHomeParam
+import com.hboxs.serialport.plc.thread.ThreadMakeParam
 import com.hboxs.serialport.plc.util.AdvacedUtil
 import com.hboxs.serialport.plc.util.AsciiUtils
 import com.hboxs.serialport.plc.util.HexUtils
 import com.hboxs.serialport.plc.util.HexadecimalUtil
 import com.hboxs.serialport.sbc.frame.VboxCommand
-import com.module.database.room.entity.LocalOrderBean
 import com.quyunshuo.sbm10.base.addressenum.PlcHomeAddressEnum
 import com.quyunshuo.sbm10.base.addressenum.ProTypeEnum
 import com.quyunshuo.sbm10.base.mvvm.vm.BaseViewModel
@@ -33,7 +32,7 @@ import javax.inject.Inject
  */
 @HiltViewModel
 class MakeFragmentVM @Inject constructor(private val mRepo: MakeFragmentRepo) : BaseViewModel() {
-    val threadHomeParam: ThreadHomeParam = ThreadHomeParam()
+    val threadMakeParam: ThreadMakeParam = ThreadMakeParam()
     private val _D2Value = MutableLiveData<String>()
     val D2Value: LiveData<String> get() = _D2Value
     private val TAG = "MakeFragmentVM"
@@ -98,13 +97,13 @@ class MakeFragmentVM @Inject constructor(private val mRepo: MakeFragmentRepo) :
         val decimal2fitHex = ByteUtils.decimal2fitHex(selectPro.toLong(), 4)
         Log.d(TAG, "startSendD91: " + decimal2fitHex)
         val hexStr2BinStr = HexUtils.hexStr2BinStr(decimal2fitHex)
-        threadHomeParam.startSetD91(hexStr2BinStr)
+        threadMakeParam.startSetD91(hexStr2BinStr)
     }
     fun startSendMake(selectPro: String) {
        val data= ProTypeEnum.getEnumByValue(selectPro)
         //我想将 AA+01+
         val hexStr = VboxCommand.MAKE_ID+ data +"00"
-        threadHomeParam.startMake(hexStr)
+        threadMakeParam.startMake(hexStr)
     }
 
     fun ack(messageEvent: Message) {
@@ -112,24 +111,24 @@ class MakeFragmentVM @Inject constructor(private val mRepo: MakeFragmentRepo) :
 
             PlcHomeAddressEnum.D91.address -> {
                 Log.d(TAG, "stopSetD91 ack: ")
-                threadHomeParam.stopSetD91()
+                threadMakeParam.stopSetD91()
                 //开始置位M1
-                threadHomeParam.stopSetM1()
-                threadHomeParam.startSetM1()
+                threadMakeParam.stopSetM1()
+                threadMakeParam.startSetM1()
                 viewModelScope.launch {
                     delay(1000)
-                    threadHomeParam.stopRstM1()
-                    threadHomeParam.startRstM1()
+                    threadMakeParam.stopRstM1()
+                    threadMakeParam.startRstM1()
                 }
             }
 
             PlcHomeAddressEnum.M1.address -> {
-                threadHomeParam.stopSetM1()
+                threadMakeParam.stopSetM1()
                 Log.d(TAG, "结束 set M1")
             }
 
             PlcHomeAddressEnum.RM1.address -> {
-                threadHomeParam.stopRstM1()
+                threadMakeParam.stopRstM1()
                 Log.d(TAG, "结束 set rstM1")
             }
         }

+ 8 - 4
module_home/src/main/java/com/quyunshuo/module/home/fragment/vm/UserLoginFragmentVM.kt

@@ -61,22 +61,26 @@ class UserLoginFragmentVM @Inject constructor(private val mRepo: HomeFragmentRep
     fun checkUser(userName: String, userPassword: String) {
         val adminUser = SpUtils.getString(MqName.ADMIN_PWD, "123456")
         val guestUser = SpUtils.getString(MqName.GUEST_PWD, "123456")
-        if ("Admin".equals(adminUser)) {
+        Log.d(TAG, "checkUserPassword: "+userName+" adminUser:"+adminUser+" guestUser:"+guestUser)
+        if ("Admin".equals(userName)) {
+            Log.d(TAG, "checkUserPassword: 1")
             if (!adminUser.equals(userPassword)) {
+                Log.d(TAG, "checkUserPassword: 2")
                 //提示用户
                 _checkResult.value = LiveDataBean<String>(UiUtil.getStringRes(R.string.home_login_tips_1),0,"")
                 return
             }
-        }else{
+        }else if ("Staff".equals(userName)) {
+            Log.d(TAG, "checkUserPassword: 3")
             if (!guestUser.equals(userPassword)) {
+                Log.d(TAG, "checkUserPassword: 4")
                 //提示用户
                 _checkResult.value = LiveDataBean<String>(UiUtil.getStringRes(R.string.home_login_tips_1),0,"")
                 return
             }
         }
+        Log.d(TAG, "checkUserPassword: 5")
         //成功了 切换页面
         _checkResult.value = LiveDataBean<String>(UiUtil.getStringRes(R.string.home_login_tips_2),1,"")
-
-
     }
 }

+ 2 - 2
module_home/src/main/java/com/quyunshuo/module/home/receiver/TimedCleaningTaskAlarmReceiver.java

@@ -39,11 +39,11 @@ public class TimedCleaningTaskAlarmReceiver extends BroadcastReceiver {
         } else if ("2".equals(msg)) {
             //LogUtils.logWrite("休眠2?:"+msg);
             //睡眠
-            EventBus.getDefault().post(new ApiMessageEvent(MqName.INSTANCE.getIS_SLEEP(), "1"));
+            EventBus.getDefault().post(new ApiMessageEvent(MqName.INSTANCE.getSLEEP(), "1"));
         } else if ("3".equals(msg)) {
             //LogUtils.logWrite("休眠3?:"+msg);
             //唤醒。
-            EventBus.getDefault().post(new ApiMessageEvent(MqName.INSTANCE.getIS_SLEEP(), "0"));
+            EventBus.getDefault().post(new ApiMessageEvent(MqName.INSTANCE.getSLEEP(), "0"));
         }
     }
 }

+ 55 - 29
module_home/src/main/java/com/quyunshuo/module/home/service/GlobalService.kt

@@ -10,6 +10,7 @@ import android.os.IBinder
 import android.util.Log
 import android.view.WindowManager
 import com.google.gson.Gson
+import com.google.gson.JsonObject
 import com.google.gson.reflect.TypeToken
 import com.hboxs.serialport.sbc.VBoxMessage
 import com.hjq.http.lifecycle.LifecycleService
@@ -223,9 +224,9 @@ class GlobalService : LifecycleService() {
         getMeaterialValue()
     }
 
-    private var sweetType = false
-    private var saltyType = false
-    private var boxType = false
+    private var sweetType = -1  //-1代表还没查询过,0为正常,1为少于默认值时提醒,2为没有物料了
+    private var saltyType = -1  //-1代表还没查询过,0为正常,1为少于默认值时提醒,2为没有物料了
+    private var boxType = -1    //-1代表还没查询过,0为正常,1为少于默认值时提醒,2为没有物料了
 
     private fun getMeaterialValue() {
         if (SpUtils.getBoolean(MMKVName.MATERIAL, true) == true) {
@@ -249,10 +250,18 @@ class GlobalService : LifecycleService() {
             if (sweet < 400) {
                 if (sweet <= 0) {
                     //这里是缺甜玉米,那么将隐藏甜玉米这个商品
-                    list[0].isSelected = false
+//                    list[0].isSelected = false
+                    sweetType=2
+                    warnBean = WarningBean(
+                        "No.4" + UiUtil.getStringRes( R.string.alarm_message_04),
+                        Heartbeat.clientId.toString(),
+                        TimeUtil.getStrCurTime(),
+                        1,
+                        ""
+                    )
                 } else {
-                    if (!sweetType) {
-                        sweetType = true
+                    if (sweetType==0) {
+                        sweetType = 1
                         warnBean = WarningBean(
                             "No.4" + UiUtil.getStringRes(R.string.sweet_corn_remain) + ": " + sweet + "g",
                             Heartbeat.clientId.toString(),
@@ -263,15 +272,23 @@ class GlobalService : LifecycleService() {
                     }
                 }
             } else {
-                sweetType = false
+                sweetType = 0
             }
             if (salty < 400) {
                 if (salty <= 0) {
                     //这里是缺咸玉米,那么将隐藏咸玉米这个商品
-                    list[1].isSelected = false
+                    saltyType=2
+                    warnBean = WarningBean(
+                        "No.3" + UiUtil.getStringRes( R.string.alarm_message_03),
+                        Heartbeat.clientId.toString(),
+                        TimeUtil.getStrCurTime(),
+                        1,
+                        ""
+                    )
+//                    list[1].isSelected = false
                 } else {
-                    if (!saltyType) {
-                        saltyType = true
+                    if (saltyType==0) {
+                        saltyType = 1
                         warnBean = WarningBean(
                             "No.3" + UiUtil.getStringRes(R.string.salty_corn_remain) + ": " + salty + "g",
                             Heartbeat.clientId.toString(),
@@ -282,14 +299,14 @@ class GlobalService : LifecycleService() {
                     }
                 }
             } else {
-                saltyType = false
+                saltyType = 0
             }
             if (box < 10) {
                 if (box <= 0) {
                     showWarringDialog("No.2", R.string.alarm_message_02)
                 } else {
-                    if (!boxType) {
-                        boxType = true
+                    if (boxType==0) {
+                        boxType = 1
                         warnBean = WarningBean(
                             "No.2" + UiUtil.getStringRes(R.string.box_remain) + ": " + box,
                             Heartbeat.deviceId!!,
@@ -300,7 +317,7 @@ class GlobalService : LifecycleService() {
                     }
                 }
             } else {
-                boxType = false
+                boxType = 0
             }
             SpUtils.putString(MMKVName.PRODUCT_DATA, Gson().toJson(list))
             val map = hashMapOf(
@@ -360,24 +377,18 @@ class GlobalService : LifecycleService() {
 
             MMKVName.CLEAR_ELIMINATE_REMOTE -> {
                 lastTypeNo = ""
-                sweetType = false
-                saltyType = false
-                boxType = false
-                val map = hashMapOf(
-                    "clientId" to Heartbeat.deviceId,
-                    "responseContent" to "1",
-                    "msgId" to messageEvent.data,
-                    "statusCode" to 200,
-                )
-                mqttHelper.sendData("response", Gson().toJson(map))
+                sweetType = -1
+                saltyType = -1
+                boxType = -1
+                mqttHelper.sendData("response", Gson().toJson(messageEvent.data))
                 XLogUtil.d("远程消除报警")
             }
 
             MMKVName.CLEAR_ELIMINATE -> {
                 lastTypeNo = ""
-                sweetType = false
-                saltyType = false
-                boxType = false
+                sweetType = -1
+                saltyType = -1
+                boxType = -1
                 val map = hashMapOf(
                     "clientId" to Heartbeat.deviceId,
                     "responseContent" to "1",
@@ -389,10 +400,25 @@ class GlobalService : LifecycleService() {
                 mqttHelper.sendData("response", Gson().toJson(map))
                 XLogUtil.d("本地主动消除报警")
             }
-
             MqName.MATERIAL -> {
                 mqttHelper.sendData("response", Gson().toJson(messageEvent.data))
-                Log.d(TAG, "event:MATERIAL ")
+                Log.d(TAG, "event:MATERIAL "+Gson().toJson(messageEvent.data))
+            }
+            MqName.SLEEP ->{
+                mqttHelper.sendData("response", Gson().toJson(messageEvent.data))
+            }
+            MqName.PASSWORD->{
+                val map = Gson().fromJson(messageEvent.data.toString(), JsonObject::class.java)
+                val response= map.getAsJsonObject("responseContent")
+                val password = response["password"].toString()
+                val type = response["type"].toString()
+                Log.d(TAG, "event:PASSWORD "+password+":"+type)
+                if (type=="0"){
+                    SpUtils.putString(MqName.ADMIN_PWD, password)
+                }else{
+                    SpUtils.putString(MqName.GUEST_PWD, password)
+                }
+                mqttHelper.sendData("response", Gson().toJson(messageEvent.data))
             }
         }
     }

+ 1 - 1
module_home/src/main/java/com/quyunshuo/module/home/service/GlobalServiceViewModel.kt

@@ -440,7 +440,7 @@ class GlobalServiceViewModel @Inject constructor(
         if (data.equals("05")) {
             threadGlobalParam.isActivePreheatOff=false
             threadGlobalParam.stopPreheatOff()
-            Log.d(TAG, "stop:startPreheatOff")
+            Log.d(TAG, "startPreheat: 发送停止预热关闭")
         }
     }
 

+ 26 - 10
module_home/src/main/java/com/quyunshuo/module/home/service/MqService.kt

@@ -202,21 +202,36 @@ class MqService : Service() {
             }
 
             MMKVName.MATERIAL -> {
-                val map = mapOf(
-                    "responseContent" to data.toString(),
-                    "statusCode" to 200,
-                    "clientId" to Heartbeat.deviceId,
-                    "timestamp" to System.currentTimeMillis(),
-                    "operation" to "material",
-                    "direction" to 2
-                )
+//                val map = mapOf(
+//                    "responseContent" to data.toString(),
+//                    "statusCode" to 200,
+//                    "clientId" to Heartbeat.deviceId,
+//                    "timestamp" to System.currentTimeMillis(),
+//                    "operation" to "material",
+//                    "direction" to 2
+//                )
+                val map = setMap(data.toString(), "material")
                 mqttHelper.sendData("response", Gson().toJson(map))
-
             }
 
+            MMKVName.PASSWORD -> {
+                val map = setMap(data.toString(), "password")
+                mqttHelper.sendData("response", Gson().toJson(map))
+            }
         }
     }
 
+    private fun setMap(responseContent: String, operation: String): HashMap<String, *> {
+        val map = hashMapOf(
+            "responseContent" to responseContent,
+            "statusCode" to 200,
+            "clientId" to System.currentTimeMillis(),
+            "operation" to operation,
+            "direction" to 2
+        )
+        return map
+    }
+
     private var mqConnected = 0
     private var networkModel = "no"
 
@@ -233,8 +248,8 @@ class MqService : Service() {
         val box = materialHashMap["box"].toString()
         val heartbeatBean = HeartbeatBean(
             "0",
-            SBCHeartbeat.cabinetTm,
             "0",
+            SBCHeartbeat.cabinetTm,
             "0",
             Heartbeat.clientId.toString(),
             "0",
@@ -257,6 +272,7 @@ class MqService : Service() {
             salty,
             "0",
             box,
+            packageManager.getPackageInfo(packageName, 0).versionName,
         )
         val map = hashMapOf(
             "responseContent" to heartbeatBean,

+ 41 - 10
module_home/src/main/java/com/quyunshuo/module/home/utils/RemotePushUtil.kt

@@ -19,7 +19,6 @@ import com.quyunshuo.module.home.bean.AlarmClockBean
 import com.quyunshuo.module.home.bean.PaySuccessBean
 import com.quyunshuo.module.home.getui.BaseBean
 import com.quyunshuo.module.home.getui.MqttBaseBean
-import com.quyunshuo.module.home.receiver.MqttHelper
 import com.quyunshuo.sbm10.base.BaseApplication
 import com.quyunshuo.sbm10.base.BaseApplication.Companion.context
 import com.quyunshuo.sbm10.base.addressenum.PlcSettingAddressEnum
@@ -35,6 +34,7 @@ import com.quyunshuo.sbm10.common.enums.ConnectStateEnum
 import com.quyunshuo.sbm10.common.util.AlarmManagerUtil
 import com.quyunshuo.sbm10.common.util.ToastUtil
 import com.quyunshuo.sbm10.common.util.UiUtil
+import com.quyunshuo.sbm10.common.util.XLogUtil
 import kotlinx.coroutines.CoroutineScope
 import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.delay
@@ -139,8 +139,8 @@ class RemotePushUtil @Inject constructor() {
                 devBlock(kind, baseBean.kind_data)
             }
 
-            MqName.IS_SLEEP -> {
-                devSleep(kind, baseBean.kind_data)
+            MqName.SLEEP -> {
+//                devSleep(kind, baseBean.kind_data)
             }
 
             MqName.ADMIN_PWD -> {
@@ -216,16 +216,12 @@ class RemotePushUtil @Inject constructor() {
             }
 
             MqName.ELIMINATE -> {
-                EventBus.getDefault().post(ApiMessageEvent(MMKVName.CLEAR_ELIMINATE_REMOTE, msgId))
+                val map =setMap(msgId,"1")
+                EventBus.getDefault().post(ApiMessageEvent(MMKVName.CLEAR_ELIMINATE_REMOTE, map))
             }
 
             MqName.MATERIAL -> {
-                val map = mapOf(
-                    "clientId" to Heartbeat.deviceId,
-                    "responseContent" to DataBean.kind_data,
-                    "msgId" to msgId,
-                    "statusCode" to 200
-                )
+                val map =setMap(msgId,DataBean.kind_data)
                 if (DataBean.kind_data=="1"){
                     SpUtils.putBoolean(MMKVName.MATERIAL,true)
                 }else{
@@ -233,9 +229,44 @@ class RemotePushUtil @Inject constructor() {
                 }
                 EventBus.getDefault().post(ApiMessageEvent(MqName.MATERIAL, map))
             }
+            MqName.SLEEP ->{
+                val map =setMap(msgId,DataBean.kind_data)
+                EventBus.getDefault().post(ApiMessageEvent(MqName.SLEEP, map))
+            }
+            MqName.RESTARTANDROID ->{
+                if (Build.MODEL.equals("rk3566_r")){
+                    val mManager: XzjhSystemManager =
+                        context.getSystemService("xzjh_server") as XzjhSystemManager
+                    mManager.xzjhRebootSys(false)
+                    XLogUtil.d("重启屏幕成功")
+                }else if (Build.MODEL.equals("rk3288")){
+                    try {
+                        val proc = Runtime.getRuntime().exec(arrayOf("su", "-c", "reboot"))
+                        proc.waitFor()
+                        XLogUtil.d("重启屏幕成功")
+                    } catch (ex: Exception) {
+                        ex.printStackTrace()
+                    }
+                }
+            }
+
+            MqName.PASSWORD->{
+                val map =setMap(msgId,DataBean.kind_data)
+                EventBus.getDefault().post(ApiMessageEvent(MqName.PASSWORD, map))
+            }
         }
     }
 
+    private fun setMap(msgId:String,response:String): HashMap<String, *> {
+        val map = hashMapOf(
+            "clientId" to Heartbeat.deviceId,
+            "responseContent" to response,
+            "msgId" to msgId,
+            "statusCode" to 200,
+        )
+        return map
+    }
+
     fun uploadLog(mqtt: MqttBaseBean) {
         try {
             var filePath = "/storage/emulated/0/logdata/${mqtt.kind_data}.txt"

+ 10 - 0
module_home/src/main/res/drawable/home_shape_hide.xml

@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+    <solid android:color="#AA9E8787" />
+    <corners
+        android:bottomLeftRadius="70dp"
+        android:bottomRightRadius="70dp"
+        android:topLeftRadius="70dp"
+        android:topRightRadius="70dp" />
+</shape>

binární
module_home/src/main/res/drawable/icon_sold_out.png


+ 21 - 2
module_home/src/main/res/layout/home_item_home_product.xml

@@ -9,7 +9,6 @@
     android:layout_marginBottom="20dp"
     android:background="@drawable/item_userhome_product_adapter_background">
 
-
     <ImageView
         android:id="@+id/iv_sugar"
         android:layout_width="480dp"
@@ -77,6 +76,26 @@
             android:layout_marginEnd="40dp"/>
     </LinearLayout>
 
-
+    <RelativeLayout
+        android:id="@+id/rl_product_hide"
+        android:visibility="gone"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:background="@drawable/home_shape_hide">
+        <TextView
+            android:id="@+id/tv_product_hide"
+            android:background="@drawable/icon_sold_out"
+            android:layout_width="wrap_content"
+            android:maxWidth="560dp"
+            android:text="@string/sold_out"
+            android:textColor="@color/white"
+            android:textStyle="bold"
+            android:paddingEnd="130dp"
+            android:paddingStart="20dp"
+            android:paddingTop="10dp"
+            android:paddingBottom="10dp"
+            android:textSize="80sp"
+            android:layout_height="wrap_content"/>
+    </RelativeLayout>
 
 </androidx.constraintlayout.widget.ConstraintLayout>

+ 16 - 28
serialport-api/src/main/java/com/hboxs/serialport/plc/thread/ThreadHomeParam.kt

@@ -16,6 +16,8 @@ import com.hboxs.serialport.sbc.frame.VboxCommand
 import com.hboxs.serialport.sbc.frame.VboxWriteCommand
 import com.quyunshuo.sbm10.base.addressenum.PlcHomeAddressEnum
 import com.quyunshuo.sbm10.base.bean.Global
+import com.quyunshuo.sbm10.base.utils.SpUtils
+import com.quyunshuo.sbm10.common.constant.MMKVName
 import kotlinx.coroutines.CoroutineScope
 import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.Job
@@ -70,14 +72,20 @@ class ThreadHomeParam : LifecycleObserver {
     fun startPreheat(){
         stopPreheat()
         isActivePreheatOpen=true
-        // 启动协程
-        jobPreheat = CoroutineScope(Dispatchers.Main).launch {
-            while (isActivePreheatOpen) {
-                    Log.d(TAG, "startPreheat: isActivePreheatOpen=true")
+        if (SpUtils.getString(MMKVName.OPEN_DEV,"0")=="1") {
+            // 启动协程
+            jobPreheat = CoroutineScope(Dispatchers.Main).launch {
+                while (isActivePreheatOpen) {
                     VboxSerialPortSendQueue.getInstance()
-                        .sendCommand(VboxWriteCommand(VboxCommand.CMD_IO,
-                            VboxCommand.DEBUG_ID+"0502"))
-                delay(5000) // 每隔5秒重复执行
+                        .sendCommand(
+                            VboxWriteCommand(
+                                VboxCommand.CMD_IO,
+                                VboxCommand.DEBUG_ID + "0502"
+                            )
+                        )
+                    Log.d(TAG, "startPreheat: 发送预热开启")
+                    delay(5000) // 每隔5秒重复执行
+                }
             }
         }
     }
@@ -90,26 +98,6 @@ class ThreadHomeParam : LifecycleObserver {
         EventBus.getDefault().post(VBoxMessage(VboxCommand.CMD_IO,"PreheatOff"))
     }
 
-    fun startSetD170() {
-        stopSetD170()
-        // 启动协程
-        jobD170 = CoroutineScope(Dispatchers.Main).launch {
-            while (isActiveD170) {
-                SerialPortSendQueue.sendCommand(
-                    ReadCommandFrame(
-                        PlcHomeAddressEnum.D170.address,
-                        2
-                    ), 2, PlcHomeAddressEnum.D170.address
-                )
-                // 执行定时任务的操作
-                delay(500) // 每隔2秒重复执行
-            }
-        }
-    }
-
-    fun stopSetD170() {
-        jobD170?.cancel()
-    }
 
 
     fun startSetD91(value: String) {
@@ -198,9 +186,9 @@ class ThreadHomeParam : LifecycleObserver {
     @OnLifecycleEvent(Lifecycle.Event.ON_STOP)
     fun destroy() {
         stopSetD91()
-        stopSetD170()
         stopSetM1()
         stopPreheat()
+        Log.d(TAG, "startPreheat: 停止发送预热开启")
         starPreheatOff()
     }
 }

+ 186 - 0
serialport-api/src/main/java/com/hboxs/serialport/plc/thread/ThreadMakeParam.kt

@@ -0,0 +1,186 @@
+package com.hboxs.serialport.plc.thread
+
+import android.util.Log
+import androidx.lifecycle.Lifecycle
+import androidx.lifecycle.LifecycleObserver
+import androidx.lifecycle.OnLifecycleEvent
+import com.hboxs.serialport.plc.SerialPortSendQueue
+import com.hboxs.serialport.plc.frame.ReadCommandFrame
+import com.hboxs.serialport.plc.frame.RstCommandFrame
+import com.hboxs.serialport.plc.frame.SetCommandFrame
+import com.hboxs.serialport.plc.frame.WriteCommandFrame
+import com.hboxs.serialport.sbc.VBoxMessage
+import com.hboxs.serialport.sbc.VboxSerialPortManager
+import com.hboxs.serialport.sbc.VboxSerialPortSendQueue
+import com.hboxs.serialport.sbc.frame.VboxCommand
+import com.hboxs.serialport.sbc.frame.VboxWriteCommand
+import com.quyunshuo.sbm10.base.addressenum.PlcHomeAddressEnum
+import com.quyunshuo.sbm10.base.bean.Global
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.Job
+import kotlinx.coroutines.delay
+import kotlinx.coroutines.launch
+import org.greenrobot.eventbus.EventBus
+
+class ThreadMakeParam : LifecycleObserver {
+
+    private val TAG = "ThreadHomeParam"
+    var jobD170: Job? = null
+        get() = field
+    var isActiveD170: Boolean = true
+        get() = field
+        set(value) {
+            field = value
+        }
+
+    var jobM1: Job? = null
+        get() = field
+    var isActiveM1: Boolean = true
+        get() = field
+        set(value) {
+            field = value
+        }
+    var jobD91: Job? = null
+        get() = field
+    var isActiveD91: Boolean = true
+        get() = field
+        set(value) {
+            field = value
+        }
+
+    var jobRM1: Job? = null
+        get() = field
+    var isActiveRM1: Boolean = true
+        get() = field
+        set(value) {
+            field = value
+        }
+    //预加热启动
+    var jobPreheat: Job? = null
+        get() = field
+    var isActivePreheatOpen: Boolean = true
+        get() = field
+        set(value) {
+            field = value
+        }
+
+
+
+    fun starPreheatOff(){
+        EventBus.getDefault().post(VBoxMessage(VboxCommand.CMD_IO,"PreheatOff"))
+    }
+
+    fun startSetD170() {
+        stopSetD170()
+        // 启动协程
+        jobD170 = CoroutineScope(Dispatchers.Main).launch {
+            while (isActiveD170) {
+                SerialPortSendQueue.sendCommand(
+                    ReadCommandFrame(
+                        PlcHomeAddressEnum.D170.address,
+                        2
+                    ), 2, PlcHomeAddressEnum.D170.address
+                )
+                // 执行定时任务的操作
+                delay(500) // 每隔2秒重复执行
+            }
+        }
+    }
+
+    fun stopSetD170() {
+        jobD170?.cancel()
+    }
+
+
+    fun startSetD91(value: String) {
+        stopSetD91()
+        // 启动协程
+        jobD91 = CoroutineScope(Dispatchers.Main).launch {
+            while (isActiveD91) {
+                SerialPortSendQueue.sendCommand(
+                    WriteCommandFrame(
+                        PlcHomeAddressEnum.D91.address,
+                        value
+                    ), 2, PlcHomeAddressEnum.D91.address
+                )
+                // 执行定时任务的操作
+                delay(200) // 每隔2秒重复执行
+            }
+        }
+    }
+
+    fun startMake(value: String) {
+        stopSendMake()
+        isActiveM1=true
+        jobM1 = CoroutineScope(Dispatchers.Main).launch {
+            while (isActiveM1) {
+                Log.d(TAG, "startMake: ")
+                VboxSerialPortSendQueue.getInstance()
+                    .sendCommand(VboxWriteCommand(VboxCommand.MAKE_ORDER,value))
+//                VboxSerialPortManager.getInstance().sendData(value)
+                Log.d(TAG, "startPreheat: 发送制作指令")
+                delay(1000) // 每隔2秒重复执行
+            }
+        }
+    }
+
+    fun stopSendMake() {
+        isActiveM1=false
+        jobM1?.cancel()
+    }
+
+    fun stopSetD91() {
+        jobD91?.cancel()
+    }
+
+    fun startSetM1() {
+        stopSetM1()
+        // 启动协程
+//        jobM1 = CoroutineScope(Dispatchers.Main).launch {
+//            while (isActiveM1) {
+//                SerialPortSendQueue.sendCommand(
+//                    SetCommandFrame(PlcHomeAddressEnum.M1.address),
+//                    2,
+//                    PlcHomeAddressEnum.M1.address
+//                )
+//                // 执行定时任务的操作
+//                delay(200) // 每隔2秒重复执行
+//            }
+//        }
+    }
+
+    fun stopSetM1() {
+        jobM1?.cancel()
+    }
+
+    fun startRstM1() {
+        stopRstM1()
+        // 启动协程
+        jobRM1 = CoroutineScope(Dispatchers.Main).launch {
+            while (isActiveRM1) {
+                SerialPortSendQueue.sendCommand(
+                    RstCommandFrame(PlcHomeAddressEnum.M1.address),
+                    2,
+                    PlcHomeAddressEnum.RM1.address
+                )
+                // 执行定时任务的操作
+                delay(200) // 每隔2秒重复执行
+            }
+        }
+    }
+
+    fun stopRstM1() {
+        jobRM1?.cancel()
+    }
+
+    /**
+     * 关掉线程池
+     */
+    @OnLifecycleEvent(Lifecycle.Event.ON_STOP)
+    fun destroy() {
+        stopSetD91()
+        stopSetD170()
+        stopSetM1()
+    }
+}

+ 1 - 1
serialport-api/src/main/java/com/hboxs/serialport/sbc/thread/ThreadGlobalParam.kt

@@ -103,7 +103,7 @@ class ThreadGlobalParam: LifecycleObserver {
                     .sendCommand(VboxWriteCommand(VboxCommand.CMD_IO,
                         VboxCommand.DEBUG_ID+"0500"))
                 // 执行定时任务的操作
-                Log.d(TAG, "start:startPreheatOff")
+                Log.d(TAG, "startPreheat: 发送预热关闭")
                 delay(1000) // 每隔1秒重复执行
             }
         }