瀏覽代碼

1、远程调节音量
2、远程开关门
3、远程开机
4、商品制作完成的GIF
5、密码修改
6、远程修改价格
7、远程修改商品名字
8、远程重启屏幕
9、上传机器开关机状态
10、新增芬兰语

ccc 1 周之前
父節點
當前提交
e60c33e9f4
共有 100 個文件被更改,包括 1771 次插入211 次删除
  1. 1 1
      app/src/main/java/com/sunzee/app/AppApplication.kt
  2. 2 2
      buildSrc/src/main/kotlin/com/quyunshuo/sbm10/buildsrc/ProjectBuildConfig.kt
  3. 12 11
      lib_base/src/main/java/com/quyunshuo/sbm10/base/addressenum/PlcParamAddressEnum.kt
  4. 1 1
      lib_common/src/main/java/com/quyunshuo/sbm10/common/constant/SavaAddress.kt
  5. 0 1
      lib_base/src/main/java/com/quyunshuo/sbm10/base/mvvm/v/BaseFrameDialogFragment.kt
  6. 42 2
      lib_base/src/main/java/com/quyunshuo/sbm10/base/mvvm/v/BaseFrameFragment.kt
  7. 4 4
      lib_common/src/main/java/com/quyunshuo/sbm10/common/util/CustomFileNameGenerator.kt
  8. 7 7
      lib_common/src/main/java/com/quyunshuo/sbm10/common/util/FileUtil.kt
  9. 144 0
      lib_base/src/main/java/com/quyunshuo/sbm10/base/utils/GlideUtil.java
  10. 517 0
      lib_base/src/main/java/com/quyunshuo/sbm10/base/utils/GsonUtil.java
  11. 2 2
      lib_common/src/main/java/com/quyunshuo/sbm10/common/util/XLogUtil.kt
  12. 8 1
      lib_base/src/main/res/values-aa/strings.xml
  13. 8 0
      lib_base/src/main/res/values-ab/strings.xml
  14. 8 1
      lib_base/src/main/res/values-am/strings.xml
  15. 7 0
      lib_base/src/main/res/values-ar/strings.xml
  16. 8 1
      lib_base/src/main/res/values-bg/strings.xml
  17. 8 1
      lib_base/src/main/res/values-cs/strings.xml
  18. 8 1
      lib_base/src/main/res/values-da/strings.xml
  19. 7 0
      lib_base/src/main/res/values-de/strings.xml
  20. 7 0
      lib_base/src/main/res/values-en/strings.xml
  21. 8 1
      lib_base/src/main/res/values-es/strings.xml
  22. 8 1
      lib_base/src/main/res/values-et/strings.xml
  23. 318 0
      lib_base/src/main/res/values-fi/strings.xml
  24. 7 0
      lib_base/src/main/res/values-fr/strings.xml
  25. 8 1
      lib_base/src/main/res/values-hr/strings.xml
  26. 8 1
      lib_base/src/main/res/values-hu/strings.xml
  27. 8 1
      lib_base/src/main/res/values-hy/strings.xml
  28. 8 1
      lib_base/src/main/res/values-it/strings.xml
  29. 8 1
      lib_base/src/main/res/values-ja/strings.xml
  30. 8 1
      lib_base/src/main/res/values-ko/strings.xml
  31. 8 1
      lib_base/src/main/res/values-lv/strings.xml
  32. 8 1
      lib_base/src/main/res/values-mn/strings.xml
  33. 8 1
      lib_base/src/main/res/values-nl/strings.xml
  34. 8 2
      lib_base/src/main/res/values-no/strings.xml
  35. 8 1
      lib_base/src/main/res/values-pl/strings.xml
  36. 8 1
      lib_base/src/main/res/values-pt/strings.xml
  37. 8 1
      lib_base/src/main/res/values-ro/strings.xml
  38. 8 1
      lib_base/src/main/res/values-ru/strings.xml
  39. 8 1
      lib_base/src/main/res/values-sk/strings.xml
  40. 8 1
      lib_base/src/main/res/values-sl/strings.xml
  41. 9 2
      lib_base/src/main/res/values-sq/strings.xml
  42. 8 1
      lib_base/src/main/res/values-sv/strings.xml
  43. 8 1
      lib_base/src/main/res/values-th/strings.xml
  44. 8 1
      lib_base/src/main/res/values-tn/strings.xml
  45. 8 1
      lib_base/src/main/res/values-tr/strings.xml
  46. 8 1
      lib_base/src/main/res/values-uk/strings.xml
  47. 6 0
      lib_base/src/main/res/values/strings.xml
  48. 13 1
      lib_common/src/main/java/com/quyunshuo/sbm10/common/constant/MqName.kt
  49. 1 0
      lib_common/src/main/java/com/quyunshuo/sbm10/common/util/AlarmSettingUtil.kt
  50. 1 0
      lib_common/src/main/java/com/quyunshuo/sbm10/common/util/AmountMoney.kt
  51. 2 0
      lib_common/src/main/java/com/quyunshuo/sbm10/common/util/LogUtils.java
  52. 1 1
      lib_common/src/main/java/com/quyunshuo/sbm10/common/work/AlarmWorker.kt
  53. 20 20
      module_backstage/src/main/java/com/module/backstage/activity/setting/SettingActivity.kt
  54. 21 21
      module_backstage/src/main/java/com/module/backstage/activity/setting/SettingViewModel.kt
  55. 1 1
      module_backstage/src/main/java/com/module/backstage/adapter/DebugAlarmAdapter.kt
  56. 1 1
      module_backstage/src/main/java/com/module/backstage/adapter/DebugParamAdapter.kt
  57. 1 1
      module_backstage/src/main/java/com/module/backstage/adapter/DebugProductAdapter.kt
  58. 0 1
      module_backstage/src/main/java/com/module/backstage/adapter/DebugSignalAdapter.kt
  59. 1 1
      module_backstage/src/main/java/com/module/backstage/adapter/TestAdapter.kt
  60. 1 1
      module_backstage/src/main/java/com/module/backstage/dialog/PayGoreSetDialog.kt
  61. 0 1
      module_backstage/src/main/java/com/module/backstage/fragment/LocalAlarmClockFragment.kt
  62. 1 1
      module_backstage/src/main/java/com/module/backstage/fragment/material/MaterialFragment.kt
  63. 1 1
      module_backstage/src/main/java/com/module/backstage/fragment/other/OtherFragment.kt
  64. 3 2
      module_backstage/src/main/java/com/module/backstage/fragment/param/DebugAlarmFragment.kt
  65. 2 2
      module_backstage/src/main/java/com/module/backstage/fragment/param/DebugParamFragment.kt
  66. 91 15
      module_backstage/src/main/java/com/module/backstage/fragment/param/GeneralParamFragment.kt
  67. 2 2
      module_backstage/src/main/java/com/module/backstage/fragment/product/DebugProductFragment.kt
  68. 3 0
      module_backstage/src/main/java/com/module/backstage/repo/GeneralParamFragmentRepo.kt
  69. 18 1
      module_backstage/src/main/java/com/module/backstage/vm/GeneralParamFragmentVM.kt
  70. 0 1
      module_backstage/src/main/java/com/module/backstage/vm/LocalAlarmClockFragmentVM.kt
  71. 1 1
      module_backstage/src/main/java/com/module/backstage/vm/OtherFragmentVM.kt
  72. 1 0
      module_home/src/main/java/com/quyunshuo/module/home/activity/main/MainActivity.kt
  73. 1 1
      module_home/src/main/java/com/quyunshuo/module/home/adapter/HomeProductAdapter.kt
  74. 11 8
      module_home/src/main/java/com/quyunshuo/module/home/dialog/AgainBuyDialog.kt
  75. 7 0
      module_home/src/main/java/com/quyunshuo/module/home/dialog/LanguageSelectorDialog.kt
  76. 1 1
      module_home/src/main/java/com/quyunshuo/module/home/fragment/fragment/BuyFragment.kt
  77. 31 10
      module_home/src/main/java/com/quyunshuo/module/home/fragment/fragment/HomeFragment.kt
  78. 5 4
      module_home/src/main/java/com/quyunshuo/module/home/fragment/fragment/MakeFragment.kt
  79. 1 1
      module_home/src/main/java/com/quyunshuo/module/home/fragment/fragment/UserLoginFragment.kt
  80. 1 1
      module_home/src/main/java/com/quyunshuo/module/home/fragment/fragment/pay/BillCoinFragment.kt
  81. 1 1
      module_home/src/main/java/com/quyunshuo/module/home/fragment/fragment/pay/FreeMakeFragment.kt
  82. 1 1
      module_home/src/main/java/com/quyunshuo/module/home/fragment/fragment/pay/MDBCardFragment.kt
  83. 0 1
      module_home/src/main/java/com/quyunshuo/module/home/fragment/fragment/pay/NayaxCardFragment.kt
  84. 0 1
      module_home/src/main/java/com/quyunshuo/module/home/fragment/fragment/pay/QrCodeFragment.kt
  85. 2 1
      module_home/src/main/java/com/quyunshuo/module/home/fragment/repo/HomeFragmentRepo.kt
  86. 1 1
      module_home/src/main/java/com/quyunshuo/module/home/fragment/vm/BuyFragmentVM.kt
  87. 2 1
      module_home/src/main/java/com/quyunshuo/module/home/fragment/vm/HomeFragmentVM.kt
  88. 0 1
      module_home/src/main/java/com/quyunshuo/module/home/fragment/vm/QrCodeFragmentVM.kt
  89. 0 1
      module_home/src/main/java/com/quyunshuo/module/home/service/ForceBackToAppService.kt
  90. 85 10
      module_home/src/main/java/com/quyunshuo/module/home/service/GlobalService.kt
  91. 17 5
      module_home/src/main/java/com/quyunshuo/module/home/service/GlobalServiceViewModel.kt
  92. 1 0
      module_home/src/main/java/com/quyunshuo/module/home/service/ManageMqtt.kt
  93. 49 15
      module_home/src/main/java/com/quyunshuo/module/home/service/MqService.kt
  94. 2 1
      module_home/src/main/java/com/quyunshuo/module/home/service/MqServiceRepository.kt
  95. 35 2
      module_home/src/main/java/com/quyunshuo/module/home/utils/RemotePushUtil.kt
  96. 二進制
      module_home/src/main/res/drawable/make_success.gif
  97. 3 3
      module_home/src/main/res/layout/home_dialog_again_buy.xml
  98. 1 1
      module_pay/src/main/java/com/module/pay/common/OtherEnum.kt
  99. 1 1
      module_pay/src/main/java/com/module/pay/nayax/CreditCardMain.java
  100. 0 0
      module_pay/src/main/java/com/module/pay/nayax/CreditCardPresenter.java

+ 1 - 1
app/src/main/java/com/sunzee/app/AppApplication.kt

@@ -19,9 +19,9 @@ import com.quyunshuo.module.home.service.ForceBackToAppService
 import com.quyunshuo.module.home.service.GlobalService
 import com.quyunshuo.module.home.service.MqService
 import com.quyunshuo.sbm10.base.BaseApplication
+import com.quyunshuo.sbm10.base.utils.XLogUtil
 import com.quyunshuo.sbm10.common.constant.Heartbeat
 import com.quyunshuo.sbm10.common.constant.MMKVName
-import com.quyunshuo.sbm10.common.util.XLogUtil
 import dagger.hilt.android.HiltAndroidApp
 import okhttp3.OkHttpClient
 import okhttp3.Response

+ 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 = 14
-    const val versionName = "1.0.14"
+    const val versionCode = 16
+    const val versionName = "1.0.16"
     const val isAppMode = false
     /**
      * 项目当前的版本状态

+ 12 - 11
lib_base/src/main/java/com/quyunshuo/sbm10/base/addressenum/PlcParamAddressEnum.kt

@@ -3,18 +3,19 @@ package com.quyunshuo.sbm10.base.addressenum
 import com.quyunshuo.sbm10.base.R
 
 
-enum class PlcParamAddressEnum(val address: String, val aName: String,val aNameId:Int) {
-    Param01("01", "气泵低速", R.string.base_plc_param_1),
-    Param02("02", "气泵中速",R.string.base_plc_param_2),
-    Param03("03", "气泵高速",R.string.base_plc_param_3),
-    Param04("04", "吹大风时间",R.string.base_plc_param_4),
-    Param05("05", "挡片关闭时间",R.string.base_plc_param_5),
-    Param06("06", "温度设定",R.string.base_plc_param_6),
-    Param07("07", "加热时间",R.string.base_plc_param_7),
-    Param08("08", "制作时风速",R.string.base_plc_param_8),
+enum class PlcParamAddressEnum(val address: String, val aName: String,val aNameId:Int,val lowerLimit:String,val upperLimit:String) {
+    Param01("01", "气泵低速", R.string.base_plc_param_1,"15","100"),
+    Param02("02", "气泵中速",R.string.base_plc_param_2,"15","100"),
+    Param03("03", "气泵高速",R.string.base_plc_param_3,"15","100"),
+    Param04("04", "吹大风时间",R.string.base_plc_param_4,"5","255"),
+    Param05("05", "挡片关闭时间",R.string.base_plc_param_5,"30","100"),
+    Param06("06", "温度设定",R.string.base_plc_param_6,"200","300"),
+    Param07("07", "加热时间",R.string.base_plc_param_7,"20","255"),
+    Param08("08", "制作时风速",R.string.base_plc_param_8,"30","60"),
+    Param09("09", "不爆开检测时间",R.string.detection_time,"50","255"),
+    Param0A("0A", "下玉米温度",R.string.corn_temperature,"0","200"),
+    Param0B("0B", "落杯报警时间",R.string.cup_drop_alarm_time,"10","255"),
 
-
-//
 //    D232("D232", "关闭制冷时间", R.string.base_plc_param_1),
 //    D231("D231", "抽口味时间",R.string.base_plc_param_2),
 //    D230("D230", "蒸发器温度到达才抽水",R.string.base_plc_param_3),

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

@@ -1,4 +1,4 @@
-package com.quyunshuo.sbm10.common.constant
+package com.quyunshuo.sbm10.base.constant
 
 import android.os.Environment
 

+ 0 - 1
lib_base/src/main/java/com/quyunshuo/sbm10/base/mvvm/v/BaseFrameDialogFragment.kt

@@ -64,7 +64,6 @@ abstract class BaseFrameDialogFragment<VB : ViewBinding, VM : BaseViewModel> : D
         val window = dialog.window
         if (window != null) {
             // 设置对话框宽高和位置
-
             val display = window.windowManager.defaultDisplay
             window.setLayout(display.width, ViewGroup.LayoutParams.MATCH_PARENT)
             Log.d(TAG, "display.width: "+display.width)

+ 42 - 2
lib_base/src/main/java/com/quyunshuo/sbm10/base/mvvm/v/BaseFrameFragment.kt

@@ -11,6 +11,7 @@ import com.alibaba.android.arouter.launcher.ARouter
 import com.quyunshuo.sbm10.base.mvvm.vm.BaseViewModel
 import com.quyunshuo.sbm10.base.utils.RegisterEventBus
 import com.quyunshuo.sbm10.base.utils.EventBusUtils
+import com.quyunshuo.sbm10.base.utils.XLogUtil
 
 /**
  * Fragment基类
@@ -48,8 +49,11 @@ abstract class BaseFrameFragment<VB : ViewBinding, VM : BaseViewModel> : Fragmen
         super.onViewCreated(view, savedInstanceState)
         // ARouter 依赖注入
         ARouter.getInstance().inject(this)
-        var className=javaClass.name
-        Log.d("backinfo","类名:"+className)//获取当前fragment
+        var className = javaClass.name
+        Log.d("backinfo", "类名:" + className)//获取当前fragment
+        var fragmentName = ""
+        fragmentName = getclassName(className, fragmentName)
+        XLogUtil.d("进入了$fragmentName")
         // 根据子类是否有 RegisterEventBus 注解決定是否进行注册 EventBus
         if (javaClass.isAnnotationPresent(RegisterEventBus::class.java)) {
             mHaveRegisterEventBus = true
@@ -73,4 +77,40 @@ abstract class BaseFrameFragment<VB : ViewBinding, VM : BaseViewModel> : Fragmen
 
         super.onDestroy()
     }
+
+    //用于判断客户进入了什么页面
+    private fun getclassName(className: String, fragmentName: String): String {
+        var fragmentName1 = fragmentName
+        when (className.substringAfterLast(".")) {
+            "BuyFragment" -> fragmentName1 = "广告页"
+            "MakeFragment" -> fragmentName1 = "制作页"
+            "SleepFragment" -> fragmentName1 = "休眠页"
+            "HomeFragment" -> fragmentName1 = "选购页"
+            "UserLoginFragment" -> fragmentName1 = "登录页"
+            //            "ProductFragment" -> fragmentName = "选购页"
+            "PriceFragment" -> fragmentName1 = "调价页"
+            "ShowProductFragment" -> fragmentName1 = "商品设置页"
+            "DebugProductFragment" -> fragmentName1 = "商品调试页"
+            //            "ParamSetFragment" -> fragmentName = "调试页"
+            "DebugParamFragment" -> fragmentName1 = "调试页"
+            "GeneralParamFragment" -> fragmentName1 = "参数调整页"
+            "DebugAlarmFragment" -> fragmentName1 = "报警屏蔽页"
+            "PayFragment" -> fragmentName1 = "支付方式选择页"
+            "DateFragment" -> fragmentName1 = "订单页"
+            //            "HistogramDataFragment" -> fragmentName = "选购页"
+            //            "OrderDataFragment" -> fragmentName = "选购页"
+            "LanguageFragment" -> fragmentName1 = "语言选择页"
+            "ErrorStatFragment" -> fragmentName1 = "报警记录页"
+            "ResetPwdFragment" -> fragmentName1 = "重置密码页"
+            "LocalAlarmClockFragment" -> fragmentName1 = "闹钟页"
+            "MaterialFragment" -> fragmentName1 = "物料查看页"
+            "SystemSettingsFragment" -> fragmentName1 = "其他设置页"
+            "BillCoinFragment" -> fragmentName1 = "纸币硬币支付"
+            "NayaxCardFragment" -> fragmentName1 = "nayax支付"
+            "QrCodeFragment" -> fragmentName1 = "二码合一支付"
+
+        }
+        return fragmentName1
+    }
+
 }

+ 4 - 4
lib_common/src/main/java/com/quyunshuo/sbm10/common/util/CustomFileNameGenerator.kt

@@ -1,9 +1,9 @@
-package com.quyunshuo.sbm10.common.util
+package com.quyunshuo.sbm10.base.utils
 
 import android.text.TextUtils
 import android.util.Log
 import com.elvishew.xlog.printer.file.naming.FileNameGenerator
-import com.quyunshuo.sbm10.common.util.FileUtil.makeFilePath
+import com.quyunshuo.sbm10.base.utils.FileUtil.makeFilePath
 
 import java.io.BufferedReader
 import java.io.File
@@ -60,7 +60,7 @@ class CustomFileNameGenerator : FileNameGenerator {
                     buffreader = BufferedReader(InputStreamReader(FileInputStream(file), "UTF-8"))
                     content += buffreader.readLine() + "\n"
                 } catch (e: FileNotFoundException) {
-                    LogUtil.d("TestFile", "The File doesn't not exist.")
+                    Log.d("TestFile", "The File doesn't not exist.")
                 } catch (e: IOException) {
                 } finally {
                     try {
@@ -100,7 +100,7 @@ class CustomFileNameGenerator : FileNameGenerator {
         try {
             val file = File(strFilePath)
             if (!file.exists()) {
-                LogUtil.d("TestFile", "Create the file:$strFilePath")
+                Log.d("TestFile", "Create the file:$strFilePath")
                 file.parentFile.mkdirs()
                 file.createNewFile()
             }

+ 7 - 7
lib_common/src/main/java/com/quyunshuo/sbm10/common/util/FileUtil.kt

@@ -1,9 +1,9 @@
-package com.quyunshuo.sbm10.common.util
+package com.quyunshuo.sbm10.base.utils
 
 import android.graphics.BitmapFactory
 import android.text.TextUtils
 import android.util.Log
-import com.quyunshuo.sbm10.common.constant.SavaAddress
+import com.quyunshuo.sbm10.base.constant.SavaAddress
 import java.io.BufferedReader
 import java.io.File
 import java.io.FileInputStream
@@ -48,8 +48,8 @@ object FileUtil {
             val _name = _file.name
             val filePath = _file.absolutePath //获取文件路径
             val fileName = _file.name.substring(0, _name.length - 4) //获取文件名
-            LogUtil.d("LOGCAT", "fileName:$fileName")
-            LogUtil.d("LOGCAT", "filePath:$filePath")
+            Log.d("LOGCAT", "fileName:$fileName")
+            Log.d("LOGCAT", "filePath:$filePath")
         }
 
         return files
@@ -167,7 +167,7 @@ object FileUtil {
         try {
             val file = File(strFilePath)
             if (!file.exists()) {
-                LogUtil.d("TestFile", "Create the file:$strFilePath")
+                Log.d("TestFile", "Create the file:$strFilePath")
                 file.parentFile.mkdirs()
                 file.createNewFile()
             }
@@ -222,7 +222,7 @@ object FileUtil {
                     buffreader = BufferedReader(InputStreamReader(FileInputStream(file), "UTF-8"))
                     content += buffreader.readLine() + "\n"
                 } catch (e: FileNotFoundException) {
-                    LogUtil.d("TestFile", "The File doesn't not exist.")
+                    Log.d("TestFile", "The File doesn't not exist.")
                 } catch (e: IOException) {
                 } finally {
                     try {
@@ -277,7 +277,7 @@ object FileUtil {
                         "-" + FileUtil.getDeviceId() + ".txt",
                         ""
                     )
-                    LogUtil.e(TAG, "pastDueLog: $replace") //有可能不是这个日期。
+                    Log.e(TAG, "pastDueLog: $replace") //有可能不是这个日期。
                     if ("out.txt" == replace) {
                         continue
                     }

+ 144 - 0
lib_base/src/main/java/com/quyunshuo/sbm10/base/utils/GlideUtil.java

@@ -0,0 +1,144 @@
+package com.quyunshuo.sbm10.base.utils;
+
+import android.content.Context;
+import android.widget.ImageView;
+
+import com.bumptech.glide.Glide;
+import com.bumptech.glide.RequestManager;
+import com.bumptech.glide.load.Transformation;
+import com.bumptech.glide.request.RequestOptions;
+
+/**
+ * Glide图片加载
+ * Created by MinKin.
+ */
+public class GlideUtil {
+
+    /**
+     * Glide请求管理器类
+     */
+    private RequestManager mRequestManager;
+    private Context mContext;
+
+    private GlideUtil() {
+
+    }
+
+    private static class GlideUtilHolder {
+        private static final GlideUtil sGlideUtil = new GlideUtil();
+    }
+
+    public static GlideUtil get() {
+        return GlideUtilHolder.sGlideUtil;
+    }
+
+    public void init(Context context) {
+        mContext = context;
+        mRequestManager = Glide.with(context);
+    }
+
+    private boolean isInit() {
+        return mContext != null && mRequestManager != null;
+    }
+
+    /**
+     * 加载网络图片 - 无占位图
+     * @param url
+     * @param imageView
+     */
+    public void loadPic(String url, ImageView imageView) {
+        loadPic(url, imageView, -1);
+    }
+
+    /**
+     * 加载网络图片 - 有占位图
+     * @param url
+     * @param imageView
+     * @param placeHolder
+     */
+    public void loadPic(String url, ImageView imageView, int placeHolder) {
+        if (!isInit()) {
+            return;
+        }
+        if (imageView == null) {
+            return;
+        }
+        RequestOptions options = new RequestOptions();
+        if (placeHolder != -1) {
+            options = options.placeholder(placeHolder);
+        }
+        mRequestManager
+                .load(url)
+                .apply(options)
+                .into(imageView);
+    }
+
+    /**
+     * 加载资源图片 - 无占位图
+     * @param resourceId
+     * @param imageView
+     */
+    public void loadPic(Integer resourceId, ImageView imageView) {
+        loadPic(resourceId, imageView, -1);
+    }
+
+    /**
+     * 加载资源图片 - 有占位图
+     * @param resourceId
+     * @param imageView
+     * @param placeHolder
+     */
+    public void loadPic(Integer resourceId, ImageView imageView, int placeHolder) {
+        if (!isInit()) {
+            return;
+        }
+        if (imageView == null) {
+            return;
+        }
+        RequestOptions options = new RequestOptions();
+        if (placeHolder != -1) {
+            options = options.placeholder(placeHolder);
+        }
+        mRequestManager
+                .load(resourceId)
+                .apply(options)
+                .into(imageView);
+    }
+
+    /**
+     * 加载网络图片 - 有占位图、图片变换
+     * @param url
+     * @param imageView
+     * @param placeHolder
+     * @param transformation BlurTransformation(高斯模糊)、RoundedCornersTransformation(圆角矩形)...
+     *                       https://github.com/wasabeef/glide-transformations
+     */
+    public void loadPic(String url, ImageView imageView, int placeHolder, Transformation transformation) {
+        if (!isInit()) {
+            return;
+        }
+        if (imageView == null) {
+            return;
+        }
+        RequestOptions options = new RequestOptions();
+        if (placeHolder != -1) {
+            options = options.placeholder(placeHolder);
+        }
+        if (transformation != null) {
+            options = options.transform(transformation);
+        }
+        mRequestManager
+                .load(url)
+                .apply(options)
+                .into(imageView);
+    }
+
+    /**
+     * 清理缓存
+     */
+    public void clear() {
+        Glide.get(mContext).clearMemory();
+        Glide.get(mContext).clearDiskCache();
+    }
+
+}

+ 517 - 0
lib_base/src/main/java/com/quyunshuo/sbm10/base/utils/GsonUtil.java

@@ -0,0 +1,517 @@
+package com.quyunshuo.sbm10.base.utils;
+
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonParseException;
+import com.google.gson.JsonParser;
+
+import com.google.gson.JsonPrimitive;
+import com.google.gson.JsonSyntaxException;
+import com.google.gson.reflect.TypeToken;
+import com.quyunshuo.sbm10.base.factory.GsonFactory;
+
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import java.lang.reflect.Type;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+
+public class GsonUtil {
+    // 默认配置的Gson实例
+    private static final Gson DEFAULT_GSON = GsonFactory.getSingletonGson();
+
+    private static final JsonParser JSON_PARSER = new JsonParser();
+
+    // 获取默认Gson实例
+    public static Gson getGson() {
+        return DEFAULT_GSON;
+    }
+
+    /**
+     * 解析JSON字符串为JsonObject
+     *
+     * @param json JSON字符串
+     * @return JsonObject对象,解析失败返回null
+     */
+    public static JsonObject parseToJsonObject(String json) {
+        try {
+            return JSON_PARSER.parse(json).getAsJsonObject();
+        } catch (Exception e) {
+            e.printStackTrace();
+            return null;
+        }
+    }
+
+    /******************** 根据Key获取值的方法 ********************/
+
+    /**
+     * String json = "{\"name\":\"John\", \"age\":30, \"height\":175.5, \"isStudent\":true}";
+     *
+     * // 获取字符串
+     * String name = GsonUtil.getAsString(json, "name", "Unknown");
+     * 获取String类型值
+     *
+     * @param json         JSON字符串
+     * @param key          键名
+     * @param defaultValue 默认值
+     * @return 键对应的值,不存在或类型不匹配返回默认值
+     */
+    public static String getAsString(String json, String key, String defaultValue) {
+        JsonObject jsonObject = parseToJsonObject(json);
+        return jsonObject == null ? defaultValue : getAsString(jsonObject, key, defaultValue);
+    }
+
+    /**
+     * 获取String类型值
+     *
+     * @param jsonObject   JsonObject对象
+     * @param key          键名
+     * @param defaultValue 默认值
+     * @return 键对应的值,不存在或类型不匹配返回默认值
+     */
+    public static String getAsString(JsonObject jsonObject, String key, String defaultValue) {
+        if (jsonObject == null || !jsonObject.has(key)) {
+            return defaultValue;
+        }
+        try {
+            JsonElement element = jsonObject.get(key);
+            if (element.isJsonNull()) return defaultValue;
+            return element.getAsString();
+        } catch (Exception e) {
+            e.printStackTrace();
+            return defaultValue;
+        }
+    }
+
+    /**
+     * 获取int类型值
+     *
+     * @param json         JSON字符串
+     * @param key          键名
+     * @param defaultValue 默认值
+     * @return 键对应的值,不存在或类型不匹配返回默认值
+     */
+    public static int getAsInt(String json, String key, int defaultValue) {
+        JsonObject jsonObject = parseToJsonObject(json);
+        return jsonObject == null ? defaultValue : getAsInt(jsonObject, key, defaultValue);
+    }
+
+    /**
+     * 获取int类型值
+     *
+     * @param jsonObject   JsonObject对象
+     * @param key          键名
+     * @param defaultValue 默认值
+     * @return 键对应的值,不存在或类型不匹配返回默认值
+     */
+    public static int getAsInt(JsonObject jsonObject, String key, int defaultValue) {
+        if (jsonObject == null || !jsonObject.has(key)) {
+            return defaultValue;
+        }
+        try {
+            return jsonObject.get(key).getAsInt();
+        } catch (Exception e) {
+            e.printStackTrace();
+            return defaultValue;
+        }
+    }
+
+    /**
+     * 获取long类型值
+     *
+     * @param json         JSON字符串
+     * @param key          键名
+     * @param defaultValue 默认值
+     * @return 键对应的值,不存在或类型不匹配返回默认值
+     */
+    public static long getAsLong(String json, String key, long defaultValue) {
+        JsonObject jsonObject = parseToJsonObject(json);
+        return jsonObject == null ? defaultValue : getAsLong(jsonObject, key, defaultValue);
+    }
+
+    /**
+     * 获取long类型值
+     *
+     * @param jsonObject   JsonObject对象
+     * @param key          键名
+     * @param defaultValue 默认值
+     * @return 键对应的值,不存在或类型不匹配返回默认值
+     */
+    public static long getAsLong(JsonObject jsonObject, String key, long defaultValue) {
+        if (jsonObject == null || !jsonObject.has(key)) {
+            return defaultValue;
+        }
+        try {
+            return jsonObject.get(key).getAsLong();
+        } catch (Exception e) {
+            e.printStackTrace();
+            return defaultValue;
+        }
+    }
+
+    /**
+     * 获取double类型值
+     *
+     * @param json         JSON字符串
+     * @param key          键名
+     * @param defaultValue 默认值
+     * @return 键对应的值,不存在或类型不匹配返回默认值
+     */
+    public static double getAsDouble(String json, String key, double defaultValue) {
+        JsonObject jsonObject = parseToJsonObject(json);
+        return jsonObject == null ? defaultValue : getAsDouble(jsonObject, key, defaultValue);
+    }
+
+    /**
+     * 获取double类型值
+     *
+     * @param jsonObject   JsonObject对象
+     * @param key          键名
+     * @param defaultValue 默认值
+     * @return 键对应的值,不存在或类型不匹配返回默认值
+     */
+    public static double getAsDouble(JsonObject jsonObject, String key, double defaultValue) {
+        if (jsonObject == null || !jsonObject.has(key)) {
+            return defaultValue;
+        }
+        try {
+            return jsonObject.get(key).getAsDouble();
+        } catch (Exception e) {
+            e.printStackTrace();
+            return defaultValue;
+        }
+    }
+
+    /**
+     * 获取boolean类型值
+     *
+     * @param json         JSON字符串
+     * @param key          键名
+     * @param defaultValue 默认值
+     * @return 键对应的值,不存在或类型不匹配返回默认值
+     */
+    public static boolean getAsBoolean(String json, String key, boolean defaultValue) {
+        JsonObject jsonObject = parseToJsonObject(json);
+        return jsonObject == null ? defaultValue : getAsBoolean(jsonObject, key, defaultValue);
+    }
+
+    /**
+     * 获取boolean类型值
+     *
+     * @param jsonObject   JsonObject对象
+     * @param key          键名
+     * @param defaultValue 默认值
+     * @return 键对应的值,不存在或类型不匹配返回默认值
+     */
+    public static boolean getAsBoolean(JsonObject jsonObject, String key, boolean defaultValue) {
+        if (jsonObject == null || !jsonObject.has(key)) {
+            return defaultValue;
+        }
+        try {
+            return jsonObject.get(key).getAsBoolean();
+        } catch (Exception e) {
+            e.printStackTrace();
+            return defaultValue;
+        }
+    }
+
+    /**
+     * String json = "{\"person\":{\"name\":\"Alice\",\"age\":25}, \"scores\":[90,85,95]}";
+     * // 获取对象
+     * User user = GsonUtil.getAsObject(json, "person", User.class);
+     * // 获取整数列表
+     * List<Integer> scores = GsonUtil.getAsList(json, "scores", Integer.class);
+     * 获取对象类型值
+     *
+     * @param json  JSON字符串
+     * @param key   键名
+     * @param clazz 对象类型
+     * @return 键对应的对象,不存在或解析失败返回null
+     */
+    public static <T> T getAsObject(String json, String key, Class<T> clazz) {
+        JsonObject jsonObject = parseToJsonObject(json);
+        return jsonObject == null ? null : getAsObject(jsonObject, key, clazz);
+    }
+
+    /**
+     * 获取对象类型值
+     *
+     * @param jsonObject JsonObject对象
+     * @param key        键名
+     * @param clazz      对象类型
+     * @return 键对应的对象,不存在或解析失败返回null
+     */
+    public static <T> T getAsObject(JsonObject jsonObject, String key, Class<T> clazz) {
+        if (jsonObject == null || !jsonObject.has(key)) {
+            return null;
+        }
+        try {
+            JsonElement element = jsonObject.get(key);
+            return DEFAULT_GSON.fromJson(element, clazz);
+        } catch (JsonSyntaxException e) {
+            e.printStackTrace();
+            return null;
+        }
+    }
+
+    /**
+     * 获取List类型值
+     *
+     * @param json         JSON字符串
+     * @param key          键名
+     * @param elementClass List元素类型
+     * @return 键对应的List,不存在或解析失败返回空List
+     */
+    public static <T> List<T> getAsList(String json, String key, Class<T> elementClass) {
+        JsonObject jsonObject = parseToJsonObject(json);
+        return jsonObject == null ? new ArrayList<>() : getAsList(jsonObject, key, elementClass);
+    }
+
+    /**
+     * 获取List类型值
+     *
+     * @param jsonObject   JsonObject对象
+     * @param key          键名
+     * @param elementClass List元素类型
+     * @return 键对应的List,不存在或解析失败返回空List
+     */
+    public static <T> List<T> getAsList(JsonObject jsonObject, String key, Class<T> elementClass) {
+        if (jsonObject == null || !jsonObject.has(key)) {
+            return new ArrayList<>();
+        }
+        try {
+            JsonElement element = jsonObject.get(key);
+            if (!element.isJsonArray()) return new ArrayList<>();
+
+            Type type = TypeToken.getParameterized(List.class, elementClass).getType();
+            return DEFAULT_GSON.fromJson(element, type);
+        } catch (JsonSyntaxException e) {
+            e.printStackTrace();
+            return new ArrayList<>();
+        }
+    }
+
+    /**
+     * String json = "{\"company\":{\"name\":\"TechCorp\",\"address\":{\"city\":\"New York\"}}}";
+     *
+     * // 获取嵌套值
+     * String city = GsonUtil.getNestedValue(json, "company.address.city", String.class);
+     * 获取嵌套对象值(多级key)
+     * 示例:getNestedValue(json, "person.address.street")
+     *
+     * @param json    JSON字符串
+     * @param keyPath 多级key路径(用.分隔)
+     * @param clazz   目标类型
+     * @return 键对应的值,不存在或类型不匹配返回null
+     */
+    public static <T> T getNestedValue(String json, String keyPath, Class<T> clazz) {
+        JsonObject root = parseToJsonObject(json);
+        return root == null ? null : getNestedValue(root, keyPath, clazz);
+    }
+
+    /**
+     * 获取嵌套对象值(多级key)
+     *
+     * @param root    根JsonObject
+     * @param keyPath 多级key路径(用.分隔)
+     * @param clazz   目标类型
+     * @return 键对应的值,不存在或类型不匹配返回null
+     */
+    public static <T> T getNestedValue(JsonObject root, String keyPath, Class<T> clazz) {
+        if (root == null || keyPath == null || keyPath.isEmpty()) {
+            return null;
+        }
+
+        String[] keys = keyPath.split("\\.");
+        JsonElement current = root;
+
+        try {
+            for (int i = 0; i < keys.length; i++) {
+                if (!current.isJsonObject()) return null;
+
+                JsonObject obj = current.getAsJsonObject();
+                if (!obj.has(keys[i])) return null;
+
+                current = obj.get(keys[i]);
+
+                // 如果是最后一级,直接转换
+                if (i == keys.length - 1) {
+                    return DEFAULT_GSON.fromJson(current, clazz);
+                }
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+    /******************** 原始方法保留 ********************/
+
+    // 保留之前的所有转换方法(toJson, fromJson, listToJson等)
+    // ... [之前的所有方法保持不变] ...
+
+    /**
+     * 对象转JSON字符串
+     *
+     * @param obj 要转换的对象
+     * @return JSON字符串,转换失败返回空字符串
+     */
+    public static String toJson(Object obj) {
+        try {
+            return obj == null ? "" : DEFAULT_GSON.toJson(obj);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return "";
+        }
+    }
+
+
+    /**
+     * JSON字符串转对象
+     *
+     * @param json     JSON字符串
+     * @param classOfT 目标对象类型
+     * @return 转换后的对象,失败返回null
+     */
+    public static <T> T fromJson(String json, Class<T> classOfT) {
+        if (json == null || json.isEmpty()) {
+            return null;
+        }
+        try {
+            return DEFAULT_GSON.fromJson(json, classOfT);
+        } catch (JsonSyntaxException e) {
+            e.printStackTrace();
+            return null;
+        }
+    }
+
+    /**
+     * String listJson = "[{\"name\":\"John\"},{\"name\":\"Alice\"}]";
+     * List<User> userList = GsonUtil.fromJson(listJson, new TypeToken<List<User>>(){}.getType());
+     *
+     * // 转Map
+     * String mapJson = "{\"key1\":\"value1\",\"key2\":\"value2\"}";
+     * Map<String, String> map = GsonUtil.fromJson(mapJson, new TypeToken<Map<String, String>>(){}.getType());
+     * JSON字符串转泛型对象
+     * User user = new User("John", 25);
+     * String json = GsonUtil.toJson(user);
+     * @param json    JSON字符串
+     * @param typeOfT 使用TypeToken定义的泛型类型
+     * @return 转换后的对象,失败返回null
+     */
+    public static <T> T fromJson(String json, Type typeOfT) {
+        if (json == null || json.isEmpty()) {
+            return null;
+        }
+        try {
+            return DEFAULT_GSON.fromJson(json, typeOfT);
+        } catch (JsonSyntaxException e) {
+            e.printStackTrace();
+            return null;
+        }
+    }
+
+    /******************** List 专门处理方法 ********************/
+
+    /**
+     * List<User> users = new ArrayList<>();
+     * users.add(new User("Alice", 25));
+     * users.add(new User("Bob", 30));
+     * String json = GsonUtil.listToJson(users);
+     * List转JSON字符串
+     *
+     * @param list 要转换的List
+     * @return JSON字符串,转换失败返回空字符串
+     */
+    public static <T> String listToJson(List<T> list) {
+        try {
+            return list == null ? "" : DEFAULT_GSON.toJson(list);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return "";
+        }
+    }
+
+    /**
+     * String json = "[{\"name\":\"Alice\",\"age\":25},{\"name\":\"Bob\",\"age\":30}]";
+     * List<User> userList = GsonUtil.jsonToList(json, User.class);
+     * JSON字符串转List
+     *
+     * @param json         JSON字符串
+     * @param elementClass List中的元素类型
+     * @return 转换后的List,失败返回空List
+     */
+    public static <T> List<T> jsonToList(String json, Class<T> elementClass) {
+        if (json == null || json.isEmpty()) {
+            return new ArrayList<>();
+        }
+        try {
+            Type type = TypeToken.getParameterized(List.class, elementClass).getType();
+            return DEFAULT_GSON.fromJson(json, type);
+        } catch (JsonSyntaxException e) {
+            e.printStackTrace();
+            return new ArrayList<>();
+        }
+    }
+
+    /**
+     * String json = "[[\"a\",\"b\"],[\"c\",\"d\"]]";
+     *
+     * // 方式1:使用TypeToken
+     * Type type = new TypeToken<List<List<String>>>(){}.getType();
+     * List<List<String>> result = GsonUtil.jsonToList(json, type);
+     *
+     * // 方式2:使用工具方法创建Type
+     * Type listType = GsonUtil.createType(List.class, List.class, String.class);
+     * List<List<String>> result2 = GsonUtil.jsonToList(json, listType);
+     * JSON字符串转List(泛型方式)
+     *
+     * @param json JSON字符串
+     * @param type 使用TypeToken定义的List类型
+     * @return 转换后的List,失败返回空List
+     */
+    public static <T> List<T> jsonToList(String json, Type type) {
+        if (json == null || json.isEmpty()) {
+            return new ArrayList<>();
+        }
+        try {
+            return DEFAULT_GSON.fromJson(json, type);
+        } catch (JsonSyntaxException e) {
+            e.printStackTrace();
+            return new ArrayList<>();
+        }
+    }
+
+    /**
+     * 美化输出的JSON(带缩进格式化)
+     *
+     * @param obj 要转换的对象
+     * @return 格式化的JSON字符串
+     */
+    public static String toPrettyJson(Object obj) {
+        if (obj == null) return "";
+        return new GsonBuilder()
+                .setPrettyPrinting()
+                .create()
+                .toJson(obj);
+    }
+
+    /**
+     * 创建带泛型的TypeToken(简化复杂类型转换)
+     * 示例:Type listType = GsonUtil.createType(List.class, User.class);
+     *
+     * @param rawType       原始类型(如List.class)
+     * @param typeArguments 类型参数(如User.class)
+     */
+    public static Type createType(Class<?> rawType, Class<?>... typeArguments) {
+        return TypeToken.getParameterized(rawType, typeArguments).getType();
+    }
+}

+ 2 - 2
lib_common/src/main/java/com/quyunshuo/sbm10/common/util/XLogUtil.kt

@@ -1,4 +1,4 @@
-package com.quyunshuo.sbm10.common.util
+package com.quyunshuo.sbm10.base.utils
 
 import android.util.Log
 import com.elvishew.xlog.LogConfiguration
@@ -14,7 +14,7 @@ import com.elvishew.xlog.printer.file.clean.FileLastModifiedCleanStrategy
 import com.elvishew.xlog.printer.file.naming.DateFileNameGenerator
 import com.elvishew.xlog.printer.file.naming.FileNameGenerator
 import com.elvishew.xlog.printer.file.writer.SimpleWriter
-import com.quyunshuo.sbm10.common.constant.SavaAddress
+import com.quyunshuo.sbm10.base.constant.SavaAddress
 import java.io.File
 
 

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

@@ -215,7 +215,7 @@
     <string name="coin_multiply">მონეტის იმპულსური გამრავლება</string>
     <string name="coin_divide">მონეტის იმპულსური გაყოფა</string>
     <string name="not_selected">არ არის არჩეული</string>
-    <string name="go_pay">გადახდაზე გადასვლა</string>
+    <string name="go_pay">გადახდა</string>
     <string name="have_banknotes">ჩასმულია ბანკნოტები:</string>
     <string name="have_coin">ჩასმულია მონეტა:</string>
     <string name="contact_message">კონტაქტის ინფორმაცია</string>
@@ -306,6 +306,13 @@
     <string name="box_remain">დარჩენილი ყუთი</string>
     <string name="box_not_enough">ყუთები არ არის საკმარისი, ყიდვას ვერ გავაგრძელებ. </string>
     <string name="alarm_message_01">სიმინდის ნაკლებობა/სიმინდი არ აფეთქდება</string>
+    <string name="sold_out">გაყიდულია</string>
+    <string name="detection_time">არა-პოპულაციური სიგნალიზაციის დრო</string>
+    <string name="corn_temperature">სიმინდის ტემპერატურა</string>
+    <string name="cup_drop_alarm_time">ჭიქის წვეთების სიგნალიზაციის დრო</string>
+    <string name="please_open_dev">გთხოვთ, გადატვირთოთ სისტემა ფონზე</string>
+    <string name="cannot_exceed_size">ხელმისაწვდომი დამატებების მიმდინარე რაოდენობა არ შეიძლება აღემატებოდეს</string>
+    <string name="value_too_large_small">მოდიფიკაცია ვერ მოხერხდა. გთხოვთ, შეცვალოთ მიმდინარე დიაპაზონში.</string>
 
 </resources>
 <!--格鲁吉亚-->

+ 8 - 0
lib_base/src/main/res/values-ab/strings.xml

@@ -306,5 +306,13 @@
     <string name="box_remain">紙匣剩餘</string>
     <string name="box_not_enough">盒子不足,無法繼續購買。 </string>
     <string name="alarm_message_01">缺玉米/玉米不爆開</string>
+    <string name="sold_out">已售罄</string>
+    <string name="detection_time">不爆開偵測時間</string>
+    <string name="corn_temperature">下玉米溫度</string>
+    <string name="cup_drop_alarm_time">落杯警報時間</string>
+    <string name="please_open_dev">請在後台重新開啟</string>
+    <string name="cannot_exceed_size">目前可加數不能超過</string>
+    <string name="value_too_large_small">修改失敗,請在目前區間內進行調整</string>
+
 </resources>
 <!--繁体-->

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

@@ -215,7 +215,7 @@
     <string name="coin_multiply">ضرب سکه</string>
     <string name="coin_divide">تقسیم سکه</string>
     <string name="not_selected">انتخاب نشده</string>
-    <string name="go_pay">رفتن به پرداخت</string>
+    <string name="go_pay">پرداخت</string>
     <string name="have_banknotes">اسکناس‌های وارد شده:</string>
     <string name="have_coin">سکه وارد شده:</string>
     <string name="contact_message">اطلاعات تماس</string>
@@ -306,6 +306,13 @@
     <string name="box_remain">جعبه باقی مانده</string>
     <string name="box_not_enough">جعبه کافی نیست، نمی‌توانم به خرید ادامه دهم.</string>
     <string name="alarm_message_01">کمبود ذرت/ذرت نمی‌ترکد</string>
+    <string name="sold_out">تمام شد</string>
+    <string name="detection_time">زمان تشخیص عدم ترکیدن</string>
+    <string name="corn_temperature">دمای ذرت</string>
+    <string name="cup_drop_alarm_time">زمان هشدار افتادن فنجان</string>
+    <string name="please_open_dev">لطفاً سیستم را در پس‌زمینه مجدداً راه‌اندازی کنید</string>
+    <string name="cannot_exceed_size">تعداد فعلی موارد اضافه شده نمی‌تواند بیشتر از</string> باشد.
+    <string name="value_too_large_small">اصلاح ناموفق بود. لطفاً در محدوده فعلی تنظیم کنید.</string>
 
 </resources>
 <!--波斯语-->

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

@@ -308,6 +308,13 @@
     <string name="box_remain">العلبة المتبقية</string>
     <string name="box_not_enough">العلب غير كافية، لا يمكنني الاستمرار في الشراء. </string>
     <string name="alarm_message_01">نقص الذرة/الذرة لن تنفجر</string>
+    <string name="sold_out">نفدت الكمية</string>
+    <string name="detection_time">وقت اكتشاف عدم وجود فرقعة</string>
+    <string name="corn_temperature">درجة حرارة الذرة</string>
+    <string name="cup_drop_alarm_time">وقت إنذار سقوط الكوب</string>
+    <string name="please_open_dev">يرجى إعادة تشغيل النظام في الخلفية</string>
+    <string name="cannot_exceed_size">لا يمكن أن يتجاوز العدد الحالي للإضافات المتاحة</string>
+    <string name="value_too_large_small">فشل التعديل. يُرجى التعديل ضمن النطاق الحالي.</string>
 
 </resources>
 <!--阿拉伯语-->

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

@@ -215,7 +215,7 @@
     <string name="coin_multiply">Умножение на монетни импулси</string>
     <string name="coin_divide">Деление на монетни импулси</string>
     <string name="not_selected">Не е избрано</string>
-    <string name="go_pay">Към плащане</string>
+    <string name="go_pay">плащам</string>
     <string name="have_banknotes">Вмъкнати банкноти:</string>
     <string name="have_coin">Вмъкната монета:</string>
     <string name="contact_message">Информация за контакт</string>
@@ -306,6 +306,13 @@
     <string name="box_remain">Оставаща кутия</string>
     <string name="box_not_enough">Няма достатъчно кутии, не мога да продължа да купувам. </string>
     <string name="alarm_message_01">Липса на царевица/Царевицата не пука</string>
+    <string name="sold_out">Разпродадено</string>
+    <string name="detection_time">Време за откриване на непукване</string>
+    <string name="corn_temperature">Температура на царевицата</string>
+    <string name="cup_drop_alarm_time">Време за аларма за падане на чаша</string>
+    <string name="please_open_dev">Моля, рестартирайте системата във фонов режим.</string>
+    <string name="cannot_exceed_size">Текущият брой налични допълнения не може да надвишава</string>
+    <string name="value_too_large_small">Модификацията е неуспешна. Моля, коригирайте в рамките на текущия диапазон.</string>
 
 </resources>
 <!--保加利亚-->

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

@@ -215,7 +215,7 @@
     <string name="coin_multiply">Násobení mincových impulsů</string>
     <string name="coin_divide">Dělení mincových impulsů</string>
     <string name="not_selected">Nevybráno</string>
-    <string name="go_pay">Přejít k platbě</string>
+    <string name="go_pay">platit</string>
     <string name="have_banknotes">Vložené bankovky:</string>
     <string name="have_coin">Vložená mince:</string>
     <string name="contact_message">Kontaktní informace</string>
@@ -306,6 +306,13 @@
     <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>
+    <string name="sold_out">Vyprodáno</string>
+    <string name="detection_time">Doba detekce nepukajícího produktu</string>
+    <string name="corn_temperature">Teplota kukuřice</string>
+    <string name="cup_drop_alarm_time">Doba alarmu pro případ kapky šálku</string>
+    <string name="please_open_dev">Prosím, restartujte systém na pozadí</string>
+    <string name="cannot_exceed_size">Aktuální počet dostupných doplňků nemůže překročit</string>
+    <string name="value_too_large_small">Úprava se nezdařila. Upravte prosím v rámci aktuálního rozsahu.</string>
 
 </resources>
 <!--捷克语-->

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

@@ -215,7 +215,7 @@
     <string name="coin_multiply">Møntpulsmultiplikation</string>
     <string name="coin_divide">Møntpulsdeling</string>
     <string name="not_selected">Ikke valgt</string>
-    <string name="go_pay">Gå til betaling</string>
+    <string name="go_pay">betale</string>
     <string name="have_banknotes">Pengesedler indsat:</string>
     <string name="have_coin">Mønt indsat:</string>
     <string name="contact_message">Kontaktoplysninger</string>
@@ -306,6 +306,13 @@
     <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>
+    <string name="sold_out">Udsolgt</string>
+    <string name="detection_time">Detektionstid for ikke-poppende drikke</string>
+    <string name="corn_temperature">Majstemperatur</string>
+    <string name="cup_drop_alarm_time">Alarmtid for kopfald</string>
+    <string name="please_open_dev">Genstart venligst systemet i baggrunden</string>
+    <string name="cannot_exceed_size">Det nuværende antal tilgængelige tilføjelser må ikke overstige</string>
+    <string name="value_too_large_small">Ændringen mislykkedes. Juster venligst inden for det aktuelle interval.</string>
 
 </resources>
 <!--丹麦-->

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

@@ -307,5 +307,12 @@
     <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>
+    <string name="sold_out">Ausverkauft</string>
+    <string name="detection_time">Nicht-Pop-Erkennungszeit</string>
+    <string name="corn_temperature">Maistemperatur</string>
+    <string name="cup_drop_alarm_time">Alarmzeit für Tassenabfall</string>
+    <string name="please_open_dev">Bitte starten Sie das System im Hintergrund neu</string>
+    <string name="cannot_exceed_size">Die aktuelle Anzahl verfügbarer Ergänzungen darf nicht überschreiten</string>
+    <string name="value_too_large_small">Änderung fehlgeschlagen. Bitte innerhalb des aktuellen Bereichs anpassen</string>
 
 </resources><!--德语-->

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

@@ -307,6 +307,13 @@
     <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>
+    <string name="sold_out">Sold Out</string>
+    <string name="detection_time">Non-pop detection time</string>
+    <string name="corn_temperature">Corn temperature</string>
+    <string name="cup_drop_alarm_time">Cup drop alarm time</string>
+    <string name="please_open_dev">Please restart the system in the background</string>
+    <string name="cannot_exceed_size">The current number of available additions cannot exceed</string>
+    <string name="value_too_large_small">Modification failed. Please adjust within the current range.</string>
 
 </resources>
     <!--英语-->

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

@@ -216,7 +216,7 @@
     <string name="coin_multiply">Multiplicación de pulsos de monedas</string>
     <string name="coin_divide">División de pulsos de monedas</string>
     <string name="not_selected">No seleccionado</string>
-    <string name="go_pay">Ir a pagar</string>
+    <string name="go_pay">pagar</string>
     <string name="have_banknotes">Billetes \ninsertados:</string>
     <string name="have_coin">Moneda \ninsertada:</string>
     <string name="contact_message">Información de contacto</string>
@@ -307,5 +307,12 @@
     <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>
+    <string name="sold_out">Agotado</string>
+    <string name="detection_time">Tiempo de detección de no estallido</string>
+    <string name="corn_temperature">Temperatura del maíz</string>
+    <string name="cup_drop_alarm_time">Tiempo de alarma de caída de la taza</string>
+    <string name="please_open_dev">Reinicie el sistema en segundo plano</string>
+    <string name="cannot_exceed_size">El número actual de adiciones disponibles no puede exceder</string>
+    <string name="value_too_large_small">Error en la modificación. Por favor, ajuste dentro del rango actual.</string>
 
 </resources><!--西班牙语-->

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

@@ -215,7 +215,7 @@
     <string name="coin_multiply">Mündiimpulsside korrutamine</string>
     <string name="coin_divide">Mündiimpulsside jagamine</string>
     <string name="not_selected">Pole valitud</string>
-    <string name="go_pay">Mine maksma</string>
+    <string name="go_pay">maksma</string>
     <string name="have_banknotes">Sisestatud rahatähed:</string>
     <string name="have_coin">Sisestatud münt:</string>
     <string name="contact_message">Kontaktandmed</string>
@@ -306,6 +306,13 @@
     <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>
+    <string name="sold_out">Läbi müüdud</string>
+    <string name="detection_time">Paukumiseta tuvastamise aeg</string>
+    <string name="corn_temperature">Maisi temperatuur</string>
+    <string name="cup_drop_alarm_time">Tassi kukkumise alarmi aeg</string>
+    <string name="please_open_dev">Palun taaskäivitage süsteem taustal</string>
+    <string name="cannot_exceed_size">Praegune saadaolevate lisanduste arv ei saa ületada</string>
+    <string name="value_too_large_small">Muutmine ebaõnnestus. Palun kohandage praeguses vahemikus.</string>
 
 </resources>
 <!--爱沙尼亚语-->

+ 318 - 0
lib_base/src/main/res/values-fi/strings.xml

@@ -0,0 +1,318 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <string name="base_network_disconnected">Verkkoyhteys katkaistu</string>
+    <string name="base_network_connected">Verkko yhdistetty</string>
+
+    <string name="base_plc_debug_1">Toissijainen ydinpiste 1</string>
+    <string name="base_plc_debug_2">Hidas ilmapumppu</string>
+    <string name="base_plc_debug_3">Keskinopeus ilmapumppu</string>
+    <string name="base_plc_debug_4">Nopea ilmapumppu</string>
+    <string name="base_plc_debug_5">Lämmityslanka</string>
+    <string name="base_plc_debug_6">Makeumaissin moottori eteenpäin</string>
+    <string name="base_plc_debug_7">Makeumaissin moottori taaksepäin</string>
+    <string name="base_plc_debug_8">Suolamaissin moottori eteenpäin</string>
+    <string name="base_plc_debug_9">Suolamaissin moottori taaksepäin</string>
+    <string name="base_plc_debug_10">Kupin pudotusmoottori</string>
+    <string name="base_plc_debug_11">Lohko</string>
+    <string name="base_plc_debug_12">Ruoan noutoluukku</string>
+
+    <string name="base_plc_debug_13">Toissijainen ohjauspiste 13</string>
+    <string name="base_plc_debug_14">Toissijainen ohjauspiste 14</string>
+    <string name="base_plc_debug_15">Toissijainen ohjauspiste 15</string>
+    <string name="base_plc_debug_16">Toissijainen ohjauspiste 16</string>
+    <string name="base_plc_debug_17">Toissijainen ohjauspiste 17</string>
+    <string name="base_plc_debug_18">Toissijainen ohjauspiste 18</string>
+    <string name="base_plc_debug_19">Toissijainen ohjauspiste 19</string>
+    <string name="base_plc_debug_20">Toissijainen ydinpiste 20</string>
+    <string name="base_plc_debug_21"></string>
+    <string name="base_plc_debug_22"></string>
+    <string name="base_plc_debug_23"></string>
+
+    <string name="base_plc_param_1">Ilmapumppu, hidas</string>
+    <string name="base_plc_param_2">Ilmapumppu, keskinopeus</string>
+    <string name="base_plc_param_3">Ilmapumppu, korkea</string>
+    <string name="base_plc_param_4">Korkean tuulen aika</string>
+    <string name="base_plc_param_5">Ohjauslevyn sulkeutumisaika</string>
+    <string name="base_plc_param_6">Lämpötila asetus</string>
+    <string name="base_plc_param_7">Lämmitysaika</string>
+    <string name="base_plc_param_8">Tuulen nopeus kypsennyksen aikana</string>
+    <string name="base_plc_param_9">Höyrystimen eristyksen yläraja</string>
+    <string name="base_plc_alarm_1">Maissi ei poksahda</string>
+    <string name="base_plc_alarm_2">Kuppi puuttuu</string>
+    <string name="base_plc_alarm_3">Suolamaissi puuttuu</string>
+    <string name="base_plc_alarm_4">Makeumaissi puuttuu</string>
+    <string name="base_plc_alarm_5">Ei lämpötilan nousua</string>
+    <string name="base_plc_alarm_6">Ylilämpötila</string>
+    <string name="base_plc_alarm_7">Sulkimen nollaus epäonnistui</string>
+    <string name="base_plc_alarm_8">Maissintähkä jumissa</string>
+
+    <string name="base_pro_01">Makea popcorn</string>
+    <string name="base_pro_02">Suolainen popcorn</string>
+    <string name="base_two_code">WeChat/Alipay</string>
+    <string name="base_bill_coin">Setelit ja kolikot</string>
+    <string name="base_nayax">Nayax</string>
+    <string name="base_mdb_no_cash">MDB-luottokortti</string>
+    <string name="base_soepay">Soepay</string>
+    <string name="base_other1">Järjestelmäasetukset</string>
+    <string name="base_other2">Sarjaporttiasetukset</string>
+    <string name="base_other3">Toiminnon käyttöönotto</string>
+    <string name="base_other4">Ostoskorin asetukset</string>
+    <string name="base_other5">Muuta asetuksia</string>
+    <string name="base_other6">Muu</string>
+    <string name="shopping_trolley">Ostoskori</string>
+    <string name="promotion_code">Kampanjakoodi</string>
+    <string name="change">Muuta toimintoa</string>
+    <string name="agreement">Viestintäprotokolla</string>
+    <string name="bill_country">Maan setelivalinta</string>
+    <string name="ttys_nayax">Nayax-sarjaportti</string>
+    <string name="ttys_mdb">MDB-sarjaportti</string>
+    <string name="ttys_plc">PLC-sarjaportti</string>
+    <string name="nayax_mode">Nayaxin lepotila</string>
+    <string name="bill_collocation">MDB-setelien säilytys</string>
+    <string name="mdb_level">MDB L3 -taso</string>
+    <string name="base_free_pay">Ilmainen tuotanto</string>
+    <string name="way_contacts">Yhteystiedot:</string>
+    <string name="name_contacts">Yhteyshenkilö:</string>
+
+    <string name="backstage_update_success">Päivitys onnistui</string>
+    <string name="backstage_data_null_tips">Data on tyhjä, toiminto ei ole sallittu</string>
+    <string name="backstage_check_update">Tarkista päivitykset</string>
+    <string name="backstage_system_set">Järjestelmäasetukset</string>
+    <string name="backstage_setting_1">Tuoteasetukset</string>
+    <string name="backstage_setting_2">Parametrien säätö</string>
+    <string name="backstage_setting_3">Datatilastot</string>
+    <string name="backstage_setting_4">Kielenvaihto</string>
+    <string name="backstage_setting_5">Hälytystietueet</string>
+    <string name="backstage_setting_6">Salasanan vaihto</string>
+    <string name="backstage_setting_6_1">Salasanan vaihto</string>
+    <string name="backstage_setting_7">Ajoitettu virran kytkeminen päälle/pois</string>
+    <string name="backstage_setting_8">Käyttöoikeus Asetukset</string>
+    <string name="backstage_setting_9">Muut</string>
+    <string name="backstage_setting_10">Maksutapa</string>
+    <string name="backstage_product_1">Tuotteen hinnan säätö</string>
+    <string name="backstage_product_2">Tuotetietojen asetukset</string>
+    <string name="backstage_product_3">Tuotteen nimen ja kuvan muokkaus</string>
+    <string name="backstage_product_4">Tuotteen virheenkorjaus</string>
+    <string name="backstage_param_set_1">Virheenkorjaussivu</string>
+    <string name="backstage_param_set_2">Yleiset parametrit</string>
+    <string name="backstage_param_set_3">Hälytyssuoja</string>
+    <string name="backstage_back">Palauta</string>
+    <string name="backstage_version">Versionumero:</string>
+    <string name="backstage_connected">Yhdistetty:</string>
+    <string name="backstage_open_dev_tips">Haluatko käynnistää laitteen heti? </string>
+    <string name="backstage_start_dev">Aloita nyt</string>
+    <string name="backstage_cancle">Peruuta</string>
+    <string name="backstage_quit_app">Paina enter-näppäintä uudelleen poistuaksesi</string>
+    <string name="backstage_latest_version">Jo uusin versio~</string>
+    <string name="backstage_connecting">Yhteyshakemus käynnissä</string>
+    <string name="backstage_update_price">Vahvista hinnanmuutos</string>
+    <string name="backstage_connection_server">Yhdistä palvelimeen</string>
+    <string name="backstage_connection_server_tips">Hae etäyhteyttä järjestelmään</string>
+    <string name="backstage_connection_server_hint">Anna hallintajärjestelmän tunnus</string>
+    <string name="backstage_connection_server_btn">Hae nyt</string>
+    <string name="backstage_update_now">Päivitä nyt</string>
+    <string name="backstage_new_version_discover">Uusi versio löydetty:</string>
+    <string name="backstage_down_progress">Latauksen edistyminen:</string>
+    <string name="backstage_old_password">Vanha salasana</string>
+    <string name="backstage_old_password_input">Anna vanha salasanasi salasana</string>
+    <string name="backstage_new_password">Uusi salasana</string>
+    <string name="backstage_new_password_input">Anna uusi salasanasi</string>
+    <string name="backstage_confirm_password">Vahvista salasana</string>
+    <string name="backstage_confirm_password_input">Anna vahvistussalasanasi</string>
+    <string name="backstage_confirm">OK</string>
+    <string name="backstage_update_progress_init_status">Latauksen edistyminen: 0%</string>
+    <string name="backstage_update">Päivitä</string>
+    <string name="backstage_confirm_update">Vahvista muutokset</string>
+    <string name="backstage_ok_dialog_title">Haluatko varmasti jatkaa? </string>
+    <string name="backstage_search_hint">Anna hakusana</string>
+    <string name="backstage_steam_wendu">Höyryn lämpötila</string>
+    <string name="backstage_choose_time">Anna aika</string>
+    <string name="backstage_year_input">Anna vuosi</string>
+    <string name="backstage_month_input">Anna kuukausi</string>
+    <string name="backstage_day_input">Anna päivä</string>
+    <string name="backstage_hour_input">Anna tunti</string>
+    <string name="backstage_ringht_month_input">Anna oikea kuukausi</string>
+    <string name="backstage_ringht_day_input">Anna oikea päivä</string>
+    <string name="backstage_ringht_hour_input">Anna oikea tunti</string>
+    <string name="tian">Aika ei voi ylittää kahta päivää</string>
+    <string name="yue">Aika ei voi ylittää yksi kuukausi</string>
+    <string name="yues">Aika ei voi ylittää 12 kuukautta</string>
+    <string name="sjcw">Aikavirhe</string>
+    <string name="nian">Aika ei voi ylittää 10 vuotta</string>
+    <string name="open_sleep">Avaa uni</string>
+    <string name="close_sleep">Sulje uni</string>
+    <string name="close_dev">Sammuta</string>
+    <string name="open_dev">Avaa</string>
+    <string name="backstage_bar_chart_statistics">Pylväsdiagrammin tilastot</string>
+    <string name="backstage_order_details">Tilaustiedot</string>
+    <string name="backstage_add_lock">Lisää hälytys</string>
+    <string name="backstage_open_lock">Avaa paikallinen hälytys</string>
+    <string name="home_dev_id">Laitetunnus:</string>
+    <string name="home_steam_wendu">Höyryn lämpötila</string>
+    <string name="home_login">Kirjaudu sisään</string>
+    <string name="home_back_user">Palaa käyttöliittymään</string>
+    <string name="home_login_tips_1">Tarkista tilisi salasana</string>
+    <string name="home_login_tips_2">Kirjautuminen onnistui</string>
+    <string name="home_tips_dialog_1">Laitteen tiedonsiirto epäonnistui</string>
+    <string name="home_tips_dialog_2">Käynnistä laite uudelleen taustajärjestelmässä ennen ostamista</string>
+    <string name="home_tips_dialog_3">Laite on antanut hälytyksen. Kun ongelma on ratkaistu, käynnistä laite uudelleen taustajärjestelmässä ennen ostamista</string>
+    <string name="home_tips_dialog_4">Laite käynnistyy. Odota hetki.</string>
+    <string name="home_tips_dialog_5">Laitetta valmistellaan. Odota hetki.</string>
+    <string name="home_confirm">Vahvista</string>
+    <string name="home_cancle">Peruuta</string>
+    <string name="home_make_success">Valmistelu valmis</string>
+    <string name="home_make_success_tips">Vedä luukku alas poistaaksesi popcornit</string>
+    <string name="home_residue_s">40 sekuntia jäljellä</string>
+    <string name="home_again_buy">Osta uudelleen</string>
+    <string name="home_quit_app">Poistu painamalla takaisin-painiketta uudelleen</string>
+    <string name="home_choosepay_title">Valitse maksutapa</string>
+    <string name="home_tips_dialog_6">Yhdistä palvelimeen ennen käyttöä</string>
+    <string name="home_shopping_cart_null">Ostoskorissa ei ole tuotteita. Valitse ensin kohde</string>
+    <string name="alarm_message_02">Puuttuva kuppi</string>
+    <string name="alarm_message_03">Puuttuva suolamaissi</string>
+    <string name="alarm_message_04">Puuttuva makea maissi</string>
+    <string name="alarm_message_05">Ei lämmitä</string>
+    <string name="alarm_message_06">Ylilämpötila</string>
+    <string name="alarm_message_07">Eston nollaus epäonnistui</string>
+    <string name="alarm_message_08">Maissintähkä jumissa</string>
+    <string name="heartbeat_temp">Generaattorin lämpötila</string>
+    <string name="mqtt_con_state">MQTT:tä ei ole vielä yhdistetty, odota hetki</string>
+    <string name="mdb_cash_sale">MDB-käteismyynti</string>
+    <string name="contact_way">Yhteystiedot</string>
+    <string name="auto_start_hotspot">Käynnistä automaattisesti käynnistyvä hotspot</string>
+    <string name="name_hotspot">Hotspotin nimi</string>
+    <string name="long_click_show_status_bar">Paina pitkään kirjautumissivulla näyttääksesi tilarivin</string>
+    <string name="pwd_hotspot">Hotspotin salasana</string>
+    <string name="mdb_rate">MDB-hinta</string>
+    <string name="card_text">Teksti, joka opastaa kuluttajia korttiensa lukemisessa</string>
+    <string name="bill_trust">Bill trust</string>
+    <string name="make_clean_price">Tyhjennä summa maksun suorittamisen jälkeen</string>
+    <string name="ad_rule">Mainontasäännöt</string>
+    <string name="auto_return_home">Automaattinen paluu kotisivulle (minuuttia)</string>
+    <string name="sleep_text">Uniteksti</string>
+    <string name="shopping_cart_size">Määrä, joka voidaan lisätä ostoskoriin ostoskori</string>
+    <string name="two_price_discount">Toisen tuotteen alennus</string>
+    <string name="five_price_discount">Viidennen tuotteen alennus</string>
+    <string name="three_price_discount">Kolmannen tuotteen alennus</string>
+    <string name="tips_discount_text">Alennusvinkit</string>
+    <string name="discount_function">Alennusfunktio</string>
+    <string name="change_function">Muuta toimintoa</string>
+    <string name="change_bill">Vaihda seteliä</string>
+    <string name="change_coin">Vaihda kolikkoa</string>
+    <string name="change_dollar">Määrä kolikkoa kohden</string>
+    <string name="change_coin_rep">Muuta kolikoiden varastoa</string>
+    <string name="change_allow_number">Sallittujen vaihtorahojen määrä</string>
+    <string name="change_warning_number">Muuta varoitus varastoa</string>
+    <string name="volume">Äänenvoimakkuus</string>
+    <string name="luminance">Kirkkaus</string>
+    <string name="logo_text">Vaihda kuvaketta</string>
+    <string name="sim">SIM</string>
+    <string name="sim_imei">SIM_IMEI</string>
+    <string name="cut_system_set">Vaihda järjestelmäasetuksia</string>
+    <string name="contact">Yhteyshenkilön nimi</string>
+    <string name="wifi_hotspot">Wifi-hotspot</string>
+    <string name="staff_login">Henkilökunnan kirjautuminen</string>
+    <string name="backstage_operate">Toiminto</string>
+    <string name="coin_multiply">Kolikoiden kertolasku</string>
+    <string name="coin_divide">Kolikoiden jako</string>
+    <string name="not_selected">Ei valittu</string>
+    <string name="go_pay">maksaa</string>
+    <string name="have_banknotes">Lisätyt setelit:</string>
+    <string name="have_coin">Lisätty kolikko:</string>
+    <string name="contact_message">Yhteystiedot</string>
+    <string name="unify_price">Yhteishinta:</string>
+    <string name="name">Nimi</string>
+    <string name="show">Näytä</string>
+    <string name="hide">Piilota</string>
+    <string name="image">Kuva</string>
+    <string name="replace_picture">Napsauta korvataksesi tuotekuvan</string>
+    <string name="more_setup">Lisää asetuksia</string>
+    <string name="start_time">Aloitusaika</string>
+    <string name="select_start_time">Valitse aloitusaika</string>
+    <string name="select_end_time">Valitse lopetusaika</string>
+    <string name="end_time">Päättymisaika</string>
+    <string name="unit">Yksikkö</string>
+    <string name="time">Tunti</string>
+    <string name="date">Päivä</string>
+    <string name="month">Kuukausi</string>
+    <string name="year">Vuosi</string>
+    <string name="filter">Suodatin</string>
+    <string name="clear_alarm_records">Tyhjennä hälytystietueet</string>
+    <string name="period">Jakso</string>
+    <string name="no_order_data">Ei tilaustietoja</string>
+    <string name="no_alarm_information">Ei hälytystietoja</string>
+    <string name="error_events">Virhetapahtumat</string>
+    <string name="rewrite">Kirjoita uudelleen</string>
+    <string name="open">Avaa</string>
+    <string name="close">Sulje</string>
+    <string name="turn_on_sleep">Ota uni käyttöön</string>
+    <string name="turn_off_sleep">Ota uni pois käytöstä</string>
+    <string name="device_sleep">Laite lepotilassa</string>
+    <string name="contact_details">Yhteystiedot</string>
+    <string name="custom_name">Mukautettava nimi</string>
+    <string name="no_sales_data">Ei myyntitietoja tältä ajalta</string>
+    <string name="remark">Huomautukset</string>
+    <string name="ict_currency">ICT-valuutan valinta:</string>
+    <string name="customized_payment">Mukautettu maksu:</string>
+    <string name="init_success">Käynnistyksen alustus onnistui</string>
+    <string name="init_fail">Käynnistyksen alustus epäonnistui</string>
+    <string name="warn_reminder">Varoitusmuistutus</string>
+    <string name="initializing">Alustataan... </string>
+    <string name="second">Sekuntia</string>
+    <string name="delete">Poista</string>
+    <string name="clear">Tyhjennä</string>
+    <string name="shopping_cart">Ostoskori</string>
+    <string name="total_amount">Yhteensä</string>
+    <string name="univalent">Yksikköhinta</string>
+    <string name="close_interface">Sulje jälkeen</string>
+    <string name="modific_success">Muokkaus onnistui</string>
+    <string name="sunday">Sunnuntai</string>
+    <string name="monday">Maanantai</string>
+    <string name="tuesday">Tiistai</string>
+    <string name="wednesday">Keskiviikko</string>
+    <string name="thursday">Torstai</string>
+    <string name="friday">Perjantai</string>
+    <string name="saturday">Lauantai</string>
+    <string name="modify">Muokkaa</string>
+    <string name="choose_time">Valitse aika</string>
+    <string name="week">Viikko</string>
+    <string name="type">Tyyppi</string>
+    <string name="system_setting">Syötä järjestelmäasetukset</string>
+    <string name="make_faild">Tuotanto epäonnistui, käynnistä uudelleen</string>
+    <string name="reset_product">Palauta asetukset</string>
+    <string name="now_make">Tuotanto käynnissä:</string>
+    <string name="make_loading">Kone esilämmitetään, odota kärsivällisesti...</string>
+    <string name="pay_success">Maksu onnistui</string>
+    <string name="time_cash_clear">Maksa määritetyn ajan kuluessa, muuten käteinen hyvitetään</string>
+    <string name="still_need">Tarvitsee vielä</string>
+    <string name="money">Summa</string>
+    <string name="out_system">Poistutaan järjestelmästä</string>
+    <string name="out_system_msg">Haluatko poistua järjestelmästä? </string>
+    <string name="corn_has_popped">Maissi on poksahtanut</string>
+    <string name="sweet_corn">Makea maissi</string>
+    <string name="salty_corn">Suolainen maissi</string>
+    <string name="select_language">Vaihda kieltä</string>
+    <string name="please_use_card_reader">Maksa kortillasi kortinlukijalla</string>
+    <string name="please_asap_complete_pay">Suorita maksu määritetyn ajan kuluessa</string>
+    <string name="pay_fail_reset">Maksu epäonnistui, napsauta aloittaaksesi maksun uudelleen</string>
+    <string name="guide_touch">Kosketusnäytöllä tilaaminen</string>
+    <string name="backstage_setting_11">Materiaalinäkymä</string>
+    <string name="material_box">Paperilaatikko</string>
+    <string name="material_box_amount">Laatikko</string>
+    <string name="fill_material">Täytä</string>
+    <string name="add_material">Lisää</string>
+    <string name="material_monitor">Materiaalin seuranta</string>
+    <string name="sweet_corn_remain">Jäljellä olevaa makeaa maissia</string>
+    <string name="salty_corn_remain">Jäljellä olevaa suolaista maissia</string>
+    <string name="box_remain">Jäljellä olevaa laatikkoa</string>
+    <string name="box_not_enough">Ei tarpeeksi laatikoita. Ei voida ostaa lisää.</string>
+    <string name="alarm_message_01">Maissi loppu/maissi ei poksahda</string>
+    <string name="sold_out">Loppuunmyyty</string>
+    <string name="detection_time">Ei-poksahtelun tunnistusaika</string>
+    <string name="corn_temperature">Maissin lämpötila</string>
+    <string name="cup_drop_alarm_time">Kupin putoamisen hälytysaika</string>
+    <string name="please_open_dev">Käynnistä taustajärjestelmä uudelleen</string>
+    <string name="cannot_exceed_size">Käytettävissä olevien lisäysten nykyinen määrä ei voi ylittää</string>
+    <string name="value_too_large_small">Muokkaus epäonnistui. Säädä nykyisen alueen sisällä.</string>
+
+</resources><!--芬兰语-->

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

@@ -306,5 +306,12 @@
     <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>
+    <string name="sold_out">Épuisé</string>
+    <string name="detection_time">Durée de détection sans éclatement</string>
+    <string name="corn_temperature">Température du maïs</string>
+    <string name="cup_drop_alarm_time">Durée de l`alarme de chute de tasse</string>
+    <string name="please_open_dev">Veuillez redémarrer le système en arrière-plan</string>
+    <string name="cannot_exceed_size">Le nombre actuel d`ajouts disponibles ne peut pas dépasser</string>
+    <string name="value_too_large_small">Échec de la modification. Veuillez ajuster dans la plage actuelle.</string>
 
 </resources><!--法语-->

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

@@ -215,7 +215,7 @@
     <string name="coin_multiply">Množenje impulsa kovanice</string>
     <string name="coin_divide">Dijeljenje impulsa kovanice</string>
     <string name="not_selected">Nije odabrano</string>
-    <string name="go_pay">Idi na plaćanje</string>
+    <string name="go_pay">platiti</string>
     <string name="have_banknotes">Umetnute novčanice:</string>
     <string name="have_coin">Umetnuta kovanica:</string>
     <string name="contact_message">Kontakt informacije</string>
@@ -306,6 +306,13 @@
     <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>
+    <string name="sold_out">Rasprodano</string>
+    <string name="detection_time">Vrijeme detekcije nepucanja</string>
+    <string name="corn_temperature">Temperatura kukuruza</string>
+    <string name="cup_drop_alarm_time">Vrijeme alarma za pad šalice</string>
+    <string name="please_open_dev">Molimo vas da ponovno pokrenite sustav u pozadini</string>
+    <string name="cannot_exceed_size">Trenutni broj dostupnih dodataka ne može premašiti</string>
+    <string name="value_too_large_small">Izmjena nije uspjela. Molimo prilagodite unutar trenutnog raspona.</string>
 
 </resources>
 <!--克罗地亚语-->

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

@@ -215,7 +215,7 @@
     <string name="coin_multiply">Érmeimpulzus szorzása</string>
     <string name="coin_divide">Érmeimpulzus osztása</string>
     <string name="not_selected">Nincs kiválasztva</string>
-    <string name="go_pay">Fizetés folytatása</string>
+    <string name="go_pay">fizetés</string>
     <string name="have_banknotes">Behelyezett bankjegyek:</string>
     <string name="have_coin">Behelyezett érme:</string>
     <string name="contact_message">Elérhetőségek</string>
@@ -306,6 +306,13 @@
     <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>
+    <string name="sold_out">Elfogyott</string>
+    <string name="detection_time">Pattogásmentes érzékelési idő</string>
+    <string name="corn_temperature">Kukorica hőmérséklete</string>
+    <string name="cup_drop_alarm_time">Csészecseppedés riasztási ideje</string>
+    <string name="please_open_dev">Indítsa újra a rendszert a háttérben</string>
+    <string name="cannot_exceed_size">A jelenleg elérhető hozzáadások száma nem haladhatja meg a</string>
+    <string name="value_too_large_small">A módosítás sikertelen. Kérjük, a jelenlegi tartományon belül módosítsa.</string>
 
 </resources>
 <!--匈牙利语-->

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

@@ -215,7 +215,7 @@
     <string name="coin_multiply">Մետաղադրամի իմպուլսային բազմապատկում</string>
     <string name="coin_divide">Մետաղադրամի իմպուլսային բաժանում</string>
     <string name="not_selected">Ընտրված չէ</string>
-    <string name="go_pay">Անցնել վճարման</string>
+    <string name="go_pay">վճարել</string>
     <string name="have_banknotes">Տեղադրված թղթադրամներ՝</string>
     <string name="have_coin">Տեղադրված մետաղադրամ՝</string>
     <string name="contact_message">Կոնտակտային տեղեկություններ</string>
@@ -306,6 +306,13 @@
     <string name="box_remain">Մնացած տուփ</string>
     <string name="box_not_enough">Տուփերը բավարար չեն, հնարավոր չէ շարունակել գնել։ </string>
     <string name="alarm_message_01">Եգիպտացորենի պակաս/Եգիպտացորենը չի պայթում</string>
+    <string name="sold_out">Վաճառված է</string>
+    <string name="detection_time">Չպայթող ազդանշանի հայտնաբերման ժամանակը</string>
+    <string name="corn_temperature">Եգիպտացորենի ջերմաստիճանը</string>
+    <string name="cup_drop_alarm_time">Բաժակի կաթիլային ազդանշանի ժամանակը</string>
+    <string name="please_open_dev">Խնդրում ենք վերագործարկել համակարգը ֆոնային ռեժիմում</string>
+    <string name="cannot_exceed_size">Հասանելի լրացումների ներկայիս քանակը չի կարող գերազանցել</string>
+    <string name="value_too_large_small">Փոփոխությունը ձախողվեց։ Խնդրում ենք կարգավորել ընթացիկ միջակայքում։</string>
 
 </resources>
 <!--亚美尼亚语-->

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

@@ -215,7 +215,7 @@
     <string name="coin_multiply">Moltiplicazione impulsi moneta</string>
     <string name="coin_divide">Divisione impulsi moneta</string>
     <string name="not_selected">Non selezionato</string>
-    <string name="go_pay">Vai al pagamento</string>
+    <string name="go_pay">paga</string>
     <string name="have_banknotes">Banconote inserite:</string>
     <string name="have_coin">Moneta inserita:</string>
     <string name="contact_message">Informazioni di contatto</string>
@@ -306,6 +306,13 @@
     <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>
+    <string name="sold_out">Esaurito</string>
+    <string name="detection_time">Tempo di rilevamento senza scoppiettio</string>
+    <string name="corn_temperature">Temperatura del mais</string>
+    <string name="cup_drop_alarm_time">Tempo di allarme caduta tazza</string>
+    <string name="please_open_dev">Riavviare il sistema in background</string>
+    <string name="cannot_exceed_size">Il numero attuale di aggiunte disponibili non può superare</string>
+    <string name="value_too_large_small">Modifica non riuscita. Si prega di adattare il valore entro l`intervallo corrente.</string>
 
 </resources>
 <!--意大利-->

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

@@ -215,7 +215,7 @@
     <string name="coin_multiply">コインパルス乗算</string>
     <string name="coin_divide">コインパルス除算</string>
     <string name="not_selected">未選択</string>
-    <string name="go_pay">支払いへ進む</string>
+    <string name="go_pay">支払</string>
     <string name="have_banknotes">投入した紙幣:</string>
     <string name="have_coin">投入したコイン:</string>
     <string name="contact_message">連絡先情報</string>
@@ -306,6 +306,13 @@
     <string name="box_remain">箱の残り</string>
     <string name="box_not_enough">箱が足りないため、購入を続行できません。</string>
     <string name="alarm_message_01">トウモロコシ不足/トウモロコシがはじけない</string>
+    <string name="sold_out">売り切れ</string>
+    <string name="detection_time">ポップ音なし検出時間</string>
+    <string name="corn_temperature">コーンの温度</string>
+    <string name="cup_drop_alarm_time">カップ落下アラーム時間</string>
+    <string name="please_open_dev">システムをバックグラウンドで再起動してください</string>
+    <string name="cannot_exceed_size">現在追加可能な数はを超えることはできません</string>
+    <string name="value_too_large_small">変更に失敗しました。現在の範囲内で調整してください。</string>
 
 </resources>
 <!--日语-->

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

@@ -215,7 +215,7 @@
     <string name="coin_multiply">코인 펄스 곱셈</string>
     <string name="coin_divide">코인 펄스 나눗셈</string>
     <string name="not_selected">선택 안 됨</string>
-    <string name="go_pay">결제하러 가기</string>
+    <string name="go_pay">지불하다</string>
     <string name="have_banknotes">지폐 삽입됨:</string>
     <string name="have_coin">동전 삽입됨:</string>
     <string name="contact_message">연락처 정보</string>
@@ -306,6 +306,13 @@
     <string name="box_remain">박스 잔량</string>
     <string name="box_not_enough">박스가 부족하여 더 이상 구매할 수 없습니다.</string>
     <string name="alarm_message_01">옥수수가 부족합니다/옥수수가 터지지 않습니다</string>
+    <string name="sold_out">품절</string>
+    <string name="detection_time">팝콘 없음 감지 시간</string>
+    <string name="corn_temperature">옥수수 온도</string>
+    <string name="cup_drop_alarm_time">컵 낙하 알람 시간</string>
+    <string name="please_open_dev">백그라운드에서 시스템을 다시 시작하세요.</string>
+    <string name="cannot_exceed_size">현재 사용 가능한 추가 항목 수는 이 값을 초과할 수 없습니다.</string>
+    <string name="value_too_large_small">수정에 실패했습니다. 현재 범위 내에서 조정해 주세요.</string>
 
 </resources>
 <!--韩语-->

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

@@ -215,7 +215,7 @@
     <string name="coin_multiply">Monētas impulsa reizināšana</string>
     <string name="coin_divide">Monētas impulsa dalīšana</string>
     <string name="not_selected">Nav atlasīts</string>
-    <string name="go_pay">Iet uz apmaksu</string>
+    <string name="go_pay">maksāt</string>
     <string name="have_banknotes">Ievietotās banknotes:</string>
     <string name="have_coin">Ievietotā monēta:</string>
     <string name="contact_message">Kontaktinformācija</string>
@@ -306,6 +306,13 @@
     <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>
+    <string name="sold_out">Izpārdots</string>
+    <string name="detection_time">Neuzsprāgšanas noteikšanas laiks</string>
+    <string name="corn_temperature">Kukurūzas temperatūra</string>
+    <string name="cup_drop_alarm_time">Krūzes nomešanas trauksmes laiks</string>
+    <string name="please_open_dev">Lūdzu, restartējiet sistēmu fonā</string>
+    <string name="cannot_exceed_size">Pašreiz pieejamo papildinājumu skaits nedrīkst pārsniegt</string>
+    <string name="value_too_large_small">Modifikācija neizdevās. Lūdzu, pielāgojiet pašreizējā diapazonā.</string>
 
 </resources>
 <!--拉脱维亚语-->

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

@@ -215,7 +215,7 @@
     <string name="coin_multiply">Зоосны импульсийн үржүүлэх</string>
     <string name="coin_divide">Зоосны импульсийн хуваагдал</string>
     <string name="not_selected">Сонгогоогүй</string>
-    <string name="go_pay">Төлбөр рүү очно уу</string>
+    <string name="go_pay">төлөх</string>
     <string name="have_banknotes">Оруулсан мөнгөн тэмдэгт:</string>
     <string name="have_coin">Зоос оруулсан:</string>
     <string name="contact_message">Холбоо барих мэдээлэл</string>
@@ -306,5 +306,12 @@
     <string name="box_remain">Үлдсэн хайрцаг</string>
     <string name="box_not_enough">Хайрцаг хангалтгүй, цаашид худалдан авах боломжгүй. </string>
     <string name = "alarm_message_01">Эрдэнэ шиш дутмаг/эрдэнэ шиш гарч ирэхгүй</string>
+    <string name = "sold_out">Борлогдож дууссан</string>
+    <string name = "detection_time" >Поп бус илрүүлэх хугацаа</string>
+    <string name="corn_temperature">Эрдэнэ шишийн температур</string>
+    <string name="cup_drop_alarm_time">Аяганы уналтын дохиоллын цаг</string>
+    <string name="please_open_dev">Системийг арын дэвсгэр дээр дахин эхлүүлнэ үү</string>
+    <string name = "cannot_exceed_size" >Одоо байгаа нэмэлтүүдийн тоо хэтэрч болохгүй</string>
+    <string name="value_too_large_small">Өөрчлөлт амжилтгүй боллоо. Одоогийн мужид тохируулна уу.</string>
 
 </resources><!--蒙古语-->

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

@@ -215,7 +215,7 @@
     <string name="coin_multiply">Muntpulsvermenigvuldiging</string>
     <string name="coin_divide">Muntpulsdeling</string>
     <string name="not_selected">Niet geselecteerd</string>
-    <string name="go_pay">Ga naar betalen</string>
+    <string name="go_pay">betalen</string>
     <string name="have_banknotes">Bankbiljetten ingebracht:</string>
     <string name="have_coin">Munt ingebracht:</string>
     <string name="contact_message">Contactgegevens</string>
@@ -306,6 +306,13 @@
     <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>
+    <string name="sold_out">Uitverkocht</string>
+    <string name="detection_time">Tijd voor detectie van niet-ploppen</string>
+    <string name="corn_temperature">Maïstemperatuur</string>
+    <string name="cup_drop_alarm_time">Tijd voor alarm bij vallende beker</string>
+    <string name="please_open_dev">Start het systeem opnieuw op op de achtergrond</string>
+    <string name="cannot_exceed_size">Het huidige aantal beschikbare toevoegingen mag niet groter zijn dan</string>
+    <string name="value_too_large_small">Wijziging mislukt. Pas aan binnen het huidige bereik.</string>
 
 </resources>
 <!--荷兰语-->

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

@@ -215,7 +215,7 @@
     <string name="coin_multiply">Myntpulsmultiplikasjon</string>
     <string name="coin_divide">Myntpulsdeling</string>
     <string name="not_selected">Ikke valgt</string>
-    <string name="go_pay">Gå til betaling</string>
+    <string name="go_pay">betale</string>
     <string name="have_banknotes">Sedler satt inn:</string>
     <string name="have_coin">Mynt satt inn:</string>
     <string name="contact_message">Kontaktinformasjon</string>
@@ -306,7 +306,13 @@
     <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>
-
+    <string name="sold_out">Utsolgt</string>
+    <string name="detection_time">Deteksjonstid uten pop</string>
+    <string name="corn_temperature">Maistemperatur</string>
+    <string name="cup_drop_alarm_time">Alarmtid for koppfall</string>
+    <string name="please_open_dev">Vennligst start systemet på nytt i bakgrunnen</string>
+    <string name="cannot_exceed_size">Det nåværende antallet tilgjengelige tillegg kan ikke overstige</string>
+    <string name="value_too_large_small">Endringen mislyktes. Vennligst juster innenfor gjeldende område.</string>
 
 </resources>
 <!--挪威语-->

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

@@ -215,7 +215,7 @@
     <string name="coin_multiply">Mnożenie impulsu monety</string>
     <string name="coin_divide">Podział impulsu monety</string>
     <string name="not_selected">Nie wybrano</string>
-    <string name="go_pay">Przejdź do płatności</string>
+    <string name="go_pay">płacić</string>
     <string name="have_banknotes">Banknoty wstawiono:</string>
     <string name="have_coin">Włożono monetę:</string>
     <string name="contact_message">Dane kontaktowe</string>
@@ -306,6 +306,13 @@
     <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>
+    <string name="sold_out">Wyprzedane</string>
+    <string name="detection_time">Czas wykrycia braku trzasku</string>
+    <string name="corn_temperature">Temperatura kukurydzy</string>
+    <string name="cup_drop_alarm_time">Czas alarmu upadku kubka</string>
+    <string name="please_open_dev">Uruchom ponownie system w tle</string>
+    <string name="cannot_exceed_size">Aktualna liczba dostępnych dodatków nie może przekraczać</string>
+    <string name="value_too_large_small">Modyfikacja nie powiodła się. Dostosuj w ramach bieżącego zakresu.</string>
 
 </resources>
 <!--波兰语-->

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

@@ -215,7 +215,7 @@
     <string name="coin_multiply">Multiplicação de pulso de moeda</string>
     <string name="coin_divide">Divisão de pulso de moeda</string>
     <string name="not_selected">Não selecionado</string>
-    <string name="go_pay">Ir para pagamento</string>
+    <string name="go_pay">pagar</string>
     <string name="have_banknotes">Notas inseridas:</string>
     <string name="have_coin">Moeda inserida:</string>
     <string name="contact_message">Informações de contato</string>
@@ -306,6 +306,13 @@
     <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>
+    <string name="sold_out">Esgotado</string>
+    <string name="detection_time">Tempo de detecção de não estouro</string>
+    <string name="corn_temperature">Temperatura do milho</string>
+    <string name="cup_drop_alarm_time">Tempo de alarme de queda do copo</string>
+    <string name="please_open_dev">Reinicie o sistema em segundo plano</string>
+    <string name="cannot_exceed_size">O número atual de adições disponíveis não pode exceder</string>
+    <string name="value_too_large_small">Falha na modificação. Ajuste dentro do intervalo atual.</string>
 
 </resources>
 <!--葡萄牙语-->

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

@@ -215,7 +215,7 @@
     <string name="coin_multiply">Multiplicarea impulsurilor monedelor</string>
     <string name="coin_divide">Divizarea impulsurilor monedelor</string>
     <string name="not_selected">Neselectat</string>
-    <string name="go_pay">Mergeți la plată</string>
+    <string name="go_pay">plată</string>
     <string name="have_banknotes">Bancnote introduse:</string>
     <string name="have_coin">Monedă introdusă:</string>
     <string name="contact_message">Informații de contact</string>
@@ -306,6 +306,13 @@
     <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>
+    <string name="sold_out">Stoc epuizat</string>
+    <string name="detection_time">Timp de detectare fără pop</string>
+    <string name="corn_temperature">Temperatura porumbului</string>
+    <string name="cup_drop_alarm_time">Oră alarmă cădere cană</string>
+    <string name="please_open_dev">Vă rugăm să reporniți sistemul în fundal</string>
+    <string name="cannot_exceed_size">Numărul curent de adăugări disponibile nu poate depăși</string>
+    <string name="value_too_large_small">Modificarea a eșuat. Vă rugăm să ajustați în intervalul curent.</string>
 
 </resources>
 <!--罗马尼亚语-->

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

@@ -215,7 +215,7 @@
     <string name="coin_multiply">Умножение импульса монеты</string>
     <string name="coin_divide">Деление импульса монеты</string>
     <string name="not_selected">Не выбрано</string>
-    <string name="go_pay">Перейти к оплате</string>
+    <string name="go_pay">платить</string>
     <string name="have_banknotes">Вставлено банкнот:</string>
     <string name="have_coin">Вставлена ​​монета:</string>
     <string name="contact_message">Контактная информация</string>
@@ -306,6 +306,13 @@
     <string name="box_remain">Осталось коробок</string>
     <string name="box_not_enough">Недостаточно коробок, не могу продолжить закупку.</string>
     <string name="alarm_message_01">Отсутствие кукурузы/Кукуруза не лопается</string>
+    <string name="sold_out">Продано</string>
+    <string name="detection_time">Время обнаружения падения зерна</string>
+    <string name="corn_temperature">Температура зерна</string>
+    <string name="cup_drop_alarm_time">Время оповещения о падении зерна</string>
+    <string name="please_open_dev">Пожалуйста, перезапустите систему в фоновом режиме</string>
+    <string name="cannot_exceed_size">Текущее количество доступных добавлений не может превышать</string>
+    <string name="value_too_large_small">Ошибка изменения. Пожалуйста, внесите изменения в пределах текущего диапазона.</string>
 
 </resources>
 <!--俄语-->

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

@@ -215,7 +215,7 @@
     <string name="coin_multiply">Násobenie mincovými impulzmi</string>
     <string name="coin_divide">Delenie mincovými impulzmi</string>
     <string name="not_selected">Nevybraté</string>
-    <string name="go_pay">Prejsť na platbu</string>
+    <string name="go_pay">platiť</string>
     <string name="have_banknotes">Vložené bankovky:</string>
     <string name="have_coin">Vložená minca:</string>
     <string name="contact_message">Kontaktné informácie</string>
@@ -306,6 +306,13 @@
     <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>
+    <string name="sold_out">Vypredané</string>
+    <string name="detection_time">Čas detekcie nepukania</string>
+    <string name="corn_temperature">Teplota kukurice</string>
+    <string name="cup_drop_alarm_time">Čas alarmu kvapky šálky</string>
+    <string name="please_open_dev">Prosím, reštartujte systém na pozadí</string>
+    <string name="cannot_exceed_size">Aktuálny počet dostupných doplnkov nemôže prekročiť</string>
+    <string name="value_too_large_small">Úprava zlyhala. Upravte v rámci aktuálneho rozsahu.</string>
 
 </resources>
 <!--斯洛伐克语-->

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

@@ -215,7 +215,7 @@
     <string name="coin_multiply">Množenje impulzov kovancev</string>
     <string name="coin_divide">Deljenje impulzov kovancev</string>
     <string name="not_selected">Ni izbrano</string>
-    <string name="go_pay">Pojdi na plačilo</string>
+    <string name="go_pay">plačati</string>
     <string name="have_banknotes">Vstavljeni bankovci:</string>
     <string name="have_coin">Vstavljen kovanec:</string>
     <string name="contact_message">Kontaktni podatki</string>
@@ -306,6 +306,13 @@
     <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>
+    <string name="sold_out">Razprodano</string>
+    <string name="detection_time">Čas zaznavanja padca skodelice</string>
+    <string name="corn_temperature">Temperatura koruze</string>
+    <string name="cup_drop_alarm_time">Čas alarma za padec skodelice</string>
+    <string name="please_open_dev">Prosimo, ponovno zaženite sistem v ozadju</string>
+    <string name="cannot_exceed_size">Trenutno število razpoložljivih dodatkov ne sme presegati</string>
+    <string name="value_too_large_small">Sprememba ni uspela. Prilagodite znotraj trenutnega obsega.</string>
 
 </resources>
 <!--斯洛文尼亚语-->

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

@@ -215,7 +215,7 @@
     <string name="coin_multiply">כפל פעימות מטבע</string>
     <string name="coin_divide">חילוק פעימות מטבע</string>
     <string name="not_selected">לא נבחר</string>
-    <string name="go_pay">עבור לתשלום</string>
+    <string name="go_pay">לְשַׁלֵם</string>
     <string name="have_banknotes">שטרות שהוכנסו:</string>
     <string name="have_coin">מטבע שהוכנס:</string>
     <string name="contact_message">פרטי קשר</string>
@@ -256,7 +256,7 @@
     <string name="init_success">אתחול ההפעלה הצליח</string>
     <string name="init_fail">נכשל באתחול ההפעלה</string>
     <string name="warn_reminder">תזכורת אזהרה</string>
-    <string name="initializing">מאתחל... </string>
+    <string name="initializing">מאתחל </string>
     <string name="second">שניות</string>
     <string name="delete">מחק</string>
     <string name="clear">נקה</string>
@@ -306,5 +306,12 @@
     <string name="box_remain">נותר קופסה</string>
     <string name="box_not_enough">אין מספיק קופסאות, לא ניתן להמשיך לקנות.</string>
     <string name="alarm_message_01">חוסר תירס/התירס לא מתבשל</string>
+    <string name="sold_out">אזל</string>
+    <string name="detection_time">זמן זיהוי אי-פופ</string>
+    <string name="corn_temperature">טמפרטורת תירס</string>
+    <string name="cup_drop_alarm_time">זמן התרעה על נפילת כוס</string>
+    <string name="please_open_dev">אנא הפעל מחדש את המערכת ברקע</string>
+    <string name="cannot_exceed_size">מספר התוספות הזמינות הנוכחי אינו יכול לעלות על</string>
+    <string name="value_too_large_small">השינוי נכשל. אנא התאם את הטווח הנוכחי.</string>
 
     </resources><!--希伯来语 以色列-->

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

@@ -215,7 +215,7 @@
     <string name="coin_multiply">Myntpulsmultiplikation</string>
     <string name="coin_divide">Myntpulsdelning</string>
     <string name="not_selected">Inte vald</string>
-    <string name="go_pay">Gå till betalning</string>
+    <string name="go_pay">betala</string>
     <string name="have_banknotes">Sedlar isatta:</string>
     <string name="have_coin">Mynt isatt:</string>
     <string name="contact_message">Kontaktinformation</string>
@@ -306,6 +306,13 @@
     <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>
+    <string name="sold_out">Slutsålt</string>
+    <string name="detection_time">Tid för detektering av icke-popande</string>
+    <string name="corn_temperature">Majstemperatur</string>
+    <string name="cup_drop_alarm_time">Alarmtid för koppfall</string>
+    <string name="please_open_dev">Starta om systemet i bakgrunden</string>
+    <string name="cannot_exceed_size">Det nuvarande antalet tillgängliga tillägg får inte överstiga</string>
+    <string name="value_too_large_small">Ändringen misslyckades. Vänligen justera inom det aktuella intervallet.</string>
 
 </resources>
 <!--瑞典语-->

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

@@ -215,7 +215,7 @@
     <string name="coin_multiply">การคูณพัลส์เหรียญ</string>
     <string name="coin_divide">การแบ่งพัลส์เหรียญ</string>
     <string name="not_selected">ไม่ได้เลือก</string>
-    <string name="go_pay">ไปที่ชำระเงิน</string>
+    <string name="go_pay">จ่าย</string>
     <string name="have_banknotes">ธนบัตรที่แทรกไว้:</string>
     <string name="have_coin">เหรียญที่แทรกไว้:</string>
     <string name="contact_message">ข้อมูลการติดต่อ</string>
@@ -306,6 +306,13 @@
     <string name="box_remain">กล่องคงเหลือ</string>
     <string name="box_not_enough">กล่องไม่เพียงพอ ไม่สามารถซื้อต่อได้</string>
     <string name="alarm_message_01">ข้าวโพดขาด/ข้าวโพดไม่แตก</string>
+    <string name="sold_out">สินค้าหมด</string>
+    <string name="detection_time">เวลาตรวจจับเสียงป๊อปคอร์น</string>
+    <string name="corn_temperature">อุณหภูมิข้าวโพด</string>
+    <string name="cup_drop_alarm_time">เวลาแจ้งเตือนเมื่อถ้วยหล่น</string>
+    <string name="please_open_dev">กรุณารีสตาร์ทระบบในพื้นหลัง</string>
+    <string name="cannot_exceed_size">จำนวนการเพิ่มที่มีอยู่ในปัจจุบันต้องไม่เกิน</string>
+    <string name="value_too_large_small">การแก้ไขล้มเหลว โปรดปรับภายในช่วงปัจจุบัน</string>
 
 </resources>
 <!--泰语-->

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

@@ -215,7 +215,7 @@
     <string name="coin_multiply">Množenje impulsa kovanice</string>
     <string name="coin_divide">Dijeljenje impulsa kovanice</string>
     <string name="not_selected">Nije odabrano</string>
-    <string name="go_pay">Idi na plaćanje</string>
+    <string name="go_pay">platiti</string>
     <string name="have_banknotes">Umetnute novčanice:</string>
     <string name="have_coin">Umetnuta kovanica:</string>
     <string name="contact_message">Kontakt informacije</string>
@@ -306,6 +306,13 @@
     <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>
+    <string name="sold_out">Rasprodato</string>
+    <string name="detection_time">Vrijeme detekcije pada čaše</string>
+    <string name="corn_temperature">Temperatura kukuruza</string>
+    <string name="cup_drop_alarm_time">Vrijeme alarma za kap čaše</string>
+    <string name="please_open_dev">Molimo vas da ponovo pokrenite sistem u pozadini</string>
+    <string name="cannot_exceed_size">Trenutni broj dostupnih dodataka ne može premašiti</string>
+    <string name="value_too_large_small">Izmjena nije uspjela. Molimo vas da prilagodite unutar trenutnog raspona.</string>
 
 </resources>
 <!--波斯尼亚语-->

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

@@ -215,7 +215,7 @@
     <string name="coin_multiply">Madeni para darbesi çarpımı</string>
     <string name="coin_divide">Madeni para darbesi bölümü</string>
     <string name="not_selected">Seçilmedi</string>
-    <string name="go_pay">Ödemeye git</string>
+    <string name="go_pay">ödemek</string>
     <string name="have_banknotes">Eklenen banknotlar:</string>
     <string name="have_coin">Eklenen madeni para:</string>
     <string name="contact_message">Kişi bilgileri</string>
@@ -306,6 +306,13 @@
     <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>
+    <string name="sold_out">Tükendi</string>
+    <string name="detection_time">Patlamama algılama süresi</string>
+    <string name="corn_temperature">Mısır sıcaklığı</string>
+    <string name="cup_drop_alarm_time">Bardak düşme alarm süresi</string>
+    <string name="please_open_dev">Lütfen sistemi arka planda yeniden başlatın</string>
+    <string name="cannot_exceed_size">Mevcut ekleme sayısı aşılamaz</string>
+    <string name="value_too_large_small">Değişiklik başarısız oldu. Lütfen mevcut aralıkta ayarlayın.</string>
 
 </resources>
 <!--土耳其语-->

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

@@ -215,7 +215,7 @@
     <string name="coin_multiply">Множення імпульсів монет</string>
     <string name="coin_divide">Ділення імпульсів монет</string>
     <string name="not_selected">Не вибрано</string>
-    <string name="go_pay">Перейти до оплати</string>
+    <string name="go_pay">платити</string>
     <string name="have_banknotes">Вставлено банкнот:</string>
     <string name="have_coin">Вставлено монету:</string>
     <string name="contact_message">Контактна інформація</string>
@@ -306,6 +306,13 @@
     <string name="box_remain">Залишилася коробка</string>
     <string name="box_not_enough">Недостатньо коробок, не можу продовжити покупку. </string>
     <string name="alarm_message_01">Не вистачає кукурудзи/Кукурудза не тріскається</string>
+    <string name="sold_out">Розпродано</string>
+    <string name="detection_time">Час виявлення нерозбірливих продуктів</string>
+    <string name="corn_temperature">Температура кукурудзи</string>
+    <string name="cup_drop_alarm_time">Час сигналу тривоги при падінні чашки</string>
+    <string name="please_open_dev">Будь ласка, перезавантажте систему у фоновому режимі</string>
+    <string name="cannot_exceed_size">Поточна кількість доступних доповнень не може перевищувати</string>
+    <string name="value_too_large_small">Модифікація не вдалася. Будь ласка, внесіть зміни в межах поточного діапазону.</string>
 
 </resources>
 <!--乌克兰语-->

+ 6 - 0
lib_base/src/main/res/values/strings.xml

@@ -307,6 +307,12 @@
     <string name="box_not_enough">纸盒不足,无法继续购买。</string>
     <string name="alarm_message_01">缺玉米/玉米不爆开</string>
     <string name="sold_out">已售罄</string>
+    <string name="detection_time">不爆开检测时间</string>
+    <string name="corn_temperature">下玉米温度</string>
+    <string name="cup_drop_alarm_time">落杯报警时间</string>
+    <string name="please_open_dev">请在后台重新开机</string>
+    <string name="cannot_exceed_size">当前可添加数量不能超过</string>
+    <string name="value_too_large_small">修改失败,请在当前区间内进行调整</string>
 
 </resources>
 <!--中文-->

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

@@ -38,7 +38,19 @@ object MqName {
     var MATERIAL = "material"//远程物料监控
 
     var RESTARTANDROID= "restartAndroid"//重启屏幕
+    /**
+     * 修改密码
+     */
+    var PASSWORD= "password"
+
+    /**
+     * 修改商品数据
+     */
+    var UPDATEPRODUCT= "updateProduct"
 
-    var PASSWORD= "password"//修改密码
+    /**
+     * 修改商品数据
+     */
+    var OPENDOOR= "openDoor"
 
 }

+ 1 - 0
lib_common/src/main/java/com/quyunshuo/sbm10/common/util/AlarmSettingUtil.kt

@@ -2,6 +2,7 @@ package com.quyunshuo.sbm10.common.util
 
 import com.quyunshuo.sbm10.base.BaseApplication
 import com.quyunshuo.sbm10.base.utils.SpUtils
+import com.quyunshuo.sbm10.base.utils.XLogUtil
 import com.quyunshuo.sbm10.common.bean.LocalAlarmClockBean
 import com.quyunshuo.sbm10.common.constant.MMKVName
 import com.quyunshuo.sbm10.common.enums.WeekEnum

+ 1 - 0
lib_common/src/main/java/com/quyunshuo/sbm10/common/util/AmountMoney.kt

@@ -1,6 +1,7 @@
 package com.quyunshuo.sbm10.common.util
 
 import com.quyunshuo.sbm10.base.utils.SpUtils
+import com.quyunshuo.sbm10.base.utils.XLogUtil
 import com.quyunshuo.sbm10.common.constant.MMKVName
 
 object AmountMoney {

+ 2 - 0
lib_common/src/main/java/com/quyunshuo/sbm10/common/util/LogUtils.java

@@ -1,5 +1,7 @@
 package com.quyunshuo.sbm10.common.util;
 
+import com.quyunshuo.sbm10.base.utils.FileUtil;
+
 import java.io.File;
 import java.io.FileOutputStream;
 import java.io.IOException;

+ 1 - 1
lib_common/src/main/java/com/quyunshuo/sbm10/common/work/AlarmWorker.kt

@@ -3,7 +3,7 @@ package com.quyunshuo.sbm10.common.work
 import android.content.Context
 import androidx.work.Worker
 import androidx.work.WorkerParameters
-import com.quyunshuo.sbm10.common.util.XLogUtil
+import com.quyunshuo.sbm10.base.utils.XLogUtil
 
 /**
  * 闹钟 任务 WorkerManager

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

@@ -48,6 +48,7 @@ import com.quyunshuo.sbm10.base.ktx.observeLiveData
 import com.quyunshuo.sbm10.base.utils.LanguageUtil
 import com.quyunshuo.sbm10.base.utils.RegisterEventBus
 import com.quyunshuo.sbm10.base.utils.SpUtils
+import com.quyunshuo.sbm10.base.utils.XLogUtil
 import com.quyunshuo.sbm10.common.bean.SettingTypeBean
 import com.quyunshuo.sbm10.common.constant.Heartbeat
 import com.quyunshuo.sbm10.common.constant.MMKVName
@@ -60,7 +61,6 @@ import com.quyunshuo.sbm10.common.ui.BaseActivity
 import com.quyunshuo.sbm10.common.util.LongClickUtils
 import com.quyunshuo.sbm10.common.util.ToastUtil
 import com.quyunshuo.sbm10.common.util.UiUtil
-import com.quyunshuo.sbm10.common.util.XLogUtil
 import com.zyao89.view.zloading.ZLoadingDialog
 import com.zyao89.view.zloading.Z_TYPE
 import dagger.hilt.android.AndroidEntryPoint
@@ -216,6 +216,7 @@ class SettingActivity : BaseActivity<BackstageActivitySettingBinding, SettingVie
             "03" -> {
                 mViewModel.cmdGetDevState(messageEvent)
                 if (mViewModel.isM3Success.value == true) {
+                    EventBus.getDefault().post(ApiMessageEvent(MMKVName.OPEN_DEV,1))
                     closeLoading()
                 }
             }
@@ -435,24 +436,24 @@ class SettingActivity : BaseActivity<BackstageActivitySettingBinding, SettingVie
         }
     }
 
-    @Subscribe(threadMode = ThreadMode.MAIN)
-    fun event(messageEvent: Message) {
-        Log.d(TAG, "messageEvent event: " + messageEvent.type)
-        when (messageEvent.type) {
-            Message.Type.ack -> {
-                mViewModel.ack(messageEvent)
-            }
-
-            Message.Type.response -> {
-                mViewModel.response(messageEvent)
-            }
-
-            Message.Type.connected -> {}
-            Message.Type.disconnected -> {}
-            Message.Type.sendError -> {}
-            Message.Type.nak -> {}
-        }
-    }
+//    @Subscribe(threadMode = ThreadMode.MAIN)
+//    fun event(messageEvent: Message) {
+//        Log.d(TAG, "messageEvent event: " + messageEvent.type)
+//        when (messageEvent.type) {
+//            Message.Type.ack -> {
+//                mViewModel.ack(messageEvent)
+//            }
+//
+//            Message.Type.response -> {
+//                mViewModel.response(messageEvent)
+//            }
+//
+//            Message.Type.connected -> {}
+//            Message.Type.disconnected -> {}
+//            Message.Type.sendError -> {}
+//            Message.Type.nak -> {}
+//        }
+//    }
 
     private fun showOnOffDialog() {
         if (devOnOffDialog == null) {
@@ -465,7 +466,6 @@ class SettingActivity : BaseActivity<BackstageActivitySettingBinding, SettingVie
                         Log.d(TAG, "onClickListener: ")
                         showLoading()
                         mViewModel.threadSettingParam.startUp()
-                        EventBus.getDefault().post(ApiMessageEvent(MMKVName.OPEN_DEV,1))
                     }
 
                     else -> {}

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

@@ -73,27 +73,27 @@ class SettingViewModel @Inject constructor(private val mRepo: SettingRepository)
         }
     }
 
-    fun ack(messageEvent: Message) {
-        val name = messageEvent.name
-        Log.d(TAG, "ack: " + name)
-        when (name) {
-            PlcSettingAddressEnum.M3.address -> {
-//                threadSettingParam.stopUp()
-                _isM3Success.value = true
-                viewModelScope.launch {
-                    delay(3000)
-                    threadSettingParam.startRstM3()
-                }
-            }
-
-            PlcSettingAddressEnum.RM3.address -> {
-                threadSettingParam.stopRstM3()
-            }
-
-            else -> {}
-        }
-
-    }
+//    fun ack(messageEvent: Message) {
+//        val name = messageEvent.name
+//        Log.d(TAG, "ack: " + name)
+//        when (name) {
+//            PlcSettingAddressEnum.M3.address -> {
+////                threadSettingParam.stopUp()
+//                _isM3Success.value = true
+//                viewModelScope.launch {
+//                    delay(3000)
+//                    threadSettingParam.startRstM3()
+//                }
+//            }
+//
+//            PlcSettingAddressEnum.RM3.address -> {
+//                threadSettingParam.stopRstM3()
+//            }
+//
+//            else -> {}
+//        }
+//
+//    }
 
     fun response(messageEvent: Message) {
 

+ 1 - 1
module_backstage/src/main/java/com/module/backstage/adapter/DebugAlarmAdapter.kt

@@ -8,9 +8,9 @@ import com.module.backstage.databinding.BackstageItemDebugAlarmBinding
 import com.quyunshuo.sbm10.base.addressenum.PlcDebugAddressEnum
 import com.module.backstage.databinding.BackstageItemDebugParamBinding
 import com.quyunshuo.sbm10.base.addressenum.PlcAlarmAddressEnum
+import com.quyunshuo.sbm10.base.utils.XLogUtil
 import com.quyunshuo.sbm10.common.listener.AdapterClickListener
 import com.quyunshuo.sbm10.common.util.UiUtil
-import com.quyunshuo.sbm10.common.util.XLogUtil
 
 class DebugAlarmAdapter (var productList:MutableList<PlcAlarmAddressEnum>): RecyclerView.Adapter<DebugAlarmAdapter.MyViewHolder>() {
 

+ 1 - 1
module_backstage/src/main/java/com/module/backstage/adapter/DebugParamAdapter.kt

@@ -6,9 +6,9 @@ import androidx.recyclerview.widget.RecyclerView
 import com.elvishew.xlog.XLog
 import com.quyunshuo.sbm10.base.addressenum.PlcDebugAddressEnum
 import com.module.backstage.databinding.BackstageItemDebugParamBinding
+import com.quyunshuo.sbm10.base.utils.XLogUtil
 import com.quyunshuo.sbm10.common.listener.AdapterClickListener
 import com.quyunshuo.sbm10.common.util.UiUtil
-import com.quyunshuo.sbm10.common.util.XLogUtil
 
 class DebugParamAdapter (var productList:MutableList<PlcDebugAddressEnum>): RecyclerView.Adapter<DebugParamAdapter.MyViewHolder>() {
 

+ 1 - 1
module_backstage/src/main/java/com/module/backstage/adapter/DebugProductAdapter.kt

@@ -9,10 +9,10 @@ import com.bumptech.glide.Glide
 import com.module.backstage.R
 import com.module.backstage.databinding.BackstageItemDebugProductBinding
 import com.module.backstage.databinding.BackstageItemPriceBinding
+import com.quyunshuo.sbm10.base.utils.XLogUtil
 import com.quyunshuo.sbm10.common.listener.AdapterClickListener
 import com.quyunshuo.sbm10.common.bean.ProductDataBean
 import com.quyunshuo.sbm10.common.util.UiUtil
-import com.quyunshuo.sbm10.common.util.XLogUtil
 
 class DebugProductAdapter(var productList:ArrayList<ProductDataBean>): RecyclerView.Adapter<DebugProductAdapter.MyViewHolder>() {
     private val TAG = "HomeProductAdapter"

+ 0 - 1
module_backstage/src/main/java/com/module/backstage/adapter/DebugSignalAdapter.kt

@@ -12,7 +12,6 @@ import com.quyunshuo.sbm10.base.addressenum.PlcAlarmAddressEnum
 import com.quyunshuo.sbm10.base.addressenum.PlcSensorSignalAddressEnum
 import com.quyunshuo.sbm10.common.listener.AdapterClickListener
 import com.quyunshuo.sbm10.common.util.UiUtil
-import com.quyunshuo.sbm10.common.util.XLogUtil
 
 class DebugSignalAdapter (var productList:MutableList<PlcSensorSignalAddressEnum>): RecyclerView.Adapter<DebugSignalAdapter.MyViewHolder>() {
 

+ 1 - 1
module_backstage/src/main/java/com/module/backstage/adapter/TestAdapter.kt

@@ -31,11 +31,11 @@ import com.module.backstage.databinding.BackstageItemTextBinding
 import com.module.backstage.listener.UpdateClickListener
 import com.module.pay.common.OtherEnum
 import com.quyunshuo.sbm10.base.utils.SpUtils
+import com.quyunshuo.sbm10.base.utils.XLogUtil
 import com.quyunshuo.sbm10.common.constant.MMKVName
 import com.quyunshuo.sbm10.common.listener.AdapterClickListener
 import com.quyunshuo.sbm10.common.util.ToastUtil
 import com.quyunshuo.sbm10.common.util.UiUtil
-import com.quyunshuo.sbm10.common.util.XLogUtil
 
 
 class TestAdapter(var productList: MutableList<OtherEnum>) :

+ 1 - 1
module_backstage/src/main/java/com/module/backstage/dialog/PayGoreSetDialog.kt

@@ -10,13 +10,13 @@ import com.module.backstage.databinding.BackstageDialogLocalAlarmClockBinding
 import com.module.backstage.databinding.BackstageDialogPayGoreSetBinding
 import com.quyunshuo.sbm10.base.mvvm.v.BaseFrameDialog
 import com.quyunshuo.sbm10.base.utils.SpUtils
+import com.quyunshuo.sbm10.base.utils.XLogUtil
 import com.quyunshuo.sbm10.common.bean.LocalAlarmClockBean
 import com.quyunshuo.sbm10.common.constant.MMKVName
 import com.quyunshuo.sbm10.common.enums.AlarmClockEnum
 import com.quyunshuo.sbm10.common.enums.WeekEnum
 import com.quyunshuo.sbm10.common.util.AmountMoney
 import com.quyunshuo.sbm10.common.util.ToastUtil
-import com.quyunshuo.sbm10.common.util.XLogUtil
 import com.tencent.mmkv.MMKV
 
 

+ 0 - 1
module_backstage/src/main/java/com/module/backstage/fragment/LocalAlarmClockFragment.kt

@@ -23,7 +23,6 @@ import com.quyunshuo.sbm10.common.bean.LocalAlarmClockBean
 import com.quyunshuo.sbm10.common.constant.MMKVName
 import com.quyunshuo.sbm10.common.listener.AdapterClickListener
 import com.quyunshuo.sbm10.common.ui.BaseFragment
-import com.quyunshuo.sbm10.common.util.XLogUtil
 import dagger.hilt.android.AndroidEntryPoint
 import kotlinx.coroutines.CoroutineScope
 import kotlinx.coroutines.Dispatchers

+ 1 - 1
module_backstage/src/main/java/com/module/backstage/fragment/material/MaterialFragment.kt

@@ -89,7 +89,7 @@ class MaterialFragment : BaseFragment<BackstageFragmentMaterialBinding, Material
         tvBox.text = UiUtil.getStringRes(R.string.material_box)+": "
         Log.d(TAG, "initView: ")
         rgSwitch.setOnCheckedChangeListener(this@MaterialFragment)
-        val isOpen = SpUtils.getBoolean(MMKVName.MATERIAL, true)
+        val isOpen = SpUtils.getBoolean(MMKVName.MATERIAL, false)
         if (isOpen == true) {
             rbOpen.isChecked = true
         } else {

+ 1 - 1
module_backstage/src/main/java/com/module/backstage/fragment/other/OtherFragment.kt

@@ -21,10 +21,10 @@ import com.quyunshuo.sbm10.common.listener.AdapterClickListener
 import com.module.backstage.vm.OtherFragmentVM
 import com.module.pay.common.OtherEnum
 import com.quyunshuo.sbm10.base.ktx.observeLiveData
+import com.quyunshuo.sbm10.base.utils.XLogUtil
 import com.quyunshuo.sbm10.common.ui.BaseFragment
 import com.quyunshuo.sbm10.common.util.ToastUtil
 import com.quyunshuo.sbm10.common.util.UiUtil
-import com.quyunshuo.sbm10.common.util.XLogUtil
 import dagger.hilt.android.AndroidEntryPoint
 import net.lucode.hackware.magicindicator.buildins.commonnavigator.CommonNavigator
 import net.lucode.hackware.magicindicator.buildins.commonnavigator.abs.CommonNavigatorAdapter

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

@@ -17,11 +17,11 @@ import com.module.backstage.vm.DebugAlarmFragmentVM
 import com.quyunshuo.sbm10.base.DialogClickListener
 import com.quyunshuo.sbm10.base.ktx.observeLiveData
 import com.quyunshuo.sbm10.base.utils.RegisterEventBus
+import com.quyunshuo.sbm10.base.utils.XLogUtil
 import com.quyunshuo.sbm10.common.listener.AdapterClickListener
 import com.quyunshuo.sbm10.common.ui.BaseFragment
 import com.quyunshuo.sbm10.common.util.ToastUtil
 import com.quyunshuo.sbm10.common.util.UiUtil
-import com.quyunshuo.sbm10.common.util.XLogUtil
 import com.zyao89.view.zloading.ZLoadingDialog
 import com.zyao89.view.zloading.Z_TYPE
 import dagger.hilt.android.AndroidEntryPoint
@@ -51,6 +51,7 @@ class DebugAlarmFragment :
     override fun createVB() = BackstageFragmentDebugAlarmBinding.inflate(layoutInflater)
 
     override fun onDestroyView() {
+        Log.d(TAG, "onDestroyView: DebugAlarmFragment")
         mBinding.debugRvAlarm.adapter = null
         closeLoading()
         super.onDestroyView()
@@ -76,7 +77,7 @@ class DebugAlarmFragment :
 
     @Subscribe(threadMode = ThreadMode.MAIN)
     fun event(messageEvent: VBoxMessage) {
-        XLogUtil.d("VBoxMessage:$messageEvent")
+        Log.d(TAG, "event: $messageEvent")
         mViewModel.disposeData(messageEvent)
     }
 

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

@@ -19,10 +19,10 @@ import com.module.backstage.vm.DebugParamFragmentVM
 import com.quyunshuo.sbm10.base.DialogClickListener
 import com.quyunshuo.sbm10.base.ktx.observeLiveData
 import com.quyunshuo.sbm10.base.utils.RegisterEventBus
+import com.quyunshuo.sbm10.base.utils.XLogUtil
 import com.quyunshuo.sbm10.common.ui.BaseFragment
 import com.quyunshuo.sbm10.common.util.ToastUtil
 import com.quyunshuo.sbm10.common.util.UiUtil
-import com.quyunshuo.sbm10.common.util.XLogUtil
 import com.zyao89.view.zloading.ZLoadingDialog
 import com.zyao89.view.zloading.Z_TYPE
 import dagger.hilt.android.AndroidEntryPoint
@@ -92,7 +92,7 @@ class DebugParamFragment :
 
     @Subscribe(threadMode = ThreadMode.MAIN)
     fun event(messageEvent: VBoxMessage) {
-        XLogUtil.d("VBoxMessage:$messageEvent")
+        Log.d(TAG, "event: $messageEvent")
         mViewModel.disposeData(messageEvent)
     }
 

+ 91 - 15
module_backstage/src/main/java/com/module/backstage/fragment/param/GeneralParamFragment.kt

@@ -1,5 +1,6 @@
 package com.module.backstage.fragment.param
 
+import android.annotation.SuppressLint
 import android.util.Log
 import android.view.View
 import androidx.fragment.app.viewModels
@@ -17,11 +18,19 @@ import com.module.backstage.vm.GeneralParamFragmentVM
 import com.quyunshuo.sbm10.base.DialogClickListener
 import com.quyunshuo.sbm10.base.ktx.observeLiveData
 import com.quyunshuo.sbm10.base.utils.RegisterEventBus
+import com.quyunshuo.sbm10.base.utils.XLogUtil
 import com.quyunshuo.sbm10.common.ui.BaseFragment
 import com.quyunshuo.sbm10.common.util.ToastUtil
 import com.quyunshuo.sbm10.common.util.UiUtil
-import com.quyunshuo.sbm10.common.util.XLogUtil
+import com.zyao89.view.zloading.ZLoadingDialog
+import com.zyao89.view.zloading.Z_TYPE
 import dagger.hilt.android.AndroidEntryPoint
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.Job
+import kotlinx.coroutines.delay
+import kotlinx.coroutines.launch
+import kotlinx.coroutines.withContext
 import org.greenrobot.eventbus.Subscribe
 import org.greenrobot.eventbus.ThreadMode
 
@@ -33,7 +42,9 @@ import org.greenrobot.eventbus.ThreadMode
  */
 @RegisterEventBus
 @AndroidEntryPoint
-class GeneralParamFragment : BaseFragment<BackstageFragmentGeneralParamBinding, GeneralParamFragmentVM>() ,LifecycleObserver{
+class GeneralParamFragment :
+    BaseFragment<BackstageFragmentGeneralParamBinding, GeneralParamFragmentVM>(),
+    LifecycleObserver {
 
     private val TAG = "GeneralParamFragment"
     var okCancelDialog: OKCancelDialog? = null
@@ -48,16 +59,21 @@ class GeneralParamFragment : BaseFragment<BackstageFragmentGeneralParamBinding,
     }
 
     override fun BackstageFragmentGeneralParamBinding.initView() {
-        with(generalRvProduct){
+        with(generalRvProduct) {
             //设置布局排列方式,默认垂直排列
             val gridLayoutManager: GridLayoutManager =
-                GridLayoutManager(this@GeneralParamFragment.context, 2, GridLayoutManager.VERTICAL, false)
+                GridLayoutManager(
+                    this@GeneralParamFragment.context,
+                    2,
+                    GridLayoutManager.VERTICAL,
+                    false
+                )
             layoutManager = gridLayoutManager
 
             debugParamAdapter = GeneralParamAdapter(mViewModel.getGeneralParamData())
             debugParamAdapter!!.setItemListener(object : AdapterClickListener {
                 override fun onClickListener(view: View?, position: Int, data: String?) {
-                    if (data==null) {
+                    if (data == null) {
                         addAllKeyboardView(view)
                         return
                     }
@@ -65,7 +81,17 @@ class GeneralParamFragment : BaseFragment<BackstageFragmentGeneralParamBinding,
                         ToastUtil.switchToastStyleToWarn(UiUtil.getStringRes(R.string.backstage_data_null_tips))
                         return
                     }
-                    showOkCancelDialog(position,data)
+                    Log.d(
+                        TAG,
+                        "GeneralParamFragmentonClickListener: " + mViewModel.getGeneralParamData()[position].upperLimit + "  data:" + data
+                    )
+                    val upperLimit = mViewModel.getGeneralParamData()[position].upperLimit.toInt()
+                    val lowerLimit = mViewModel.getGeneralParamData()[position].lowerLimit.toInt()
+                    if (data.toInt() < lowerLimit || data.toInt() > upperLimit) {
+                        ToastUtil.switchToastStyleToWarn(UiUtil.getStringRes(R.string.value_too_large_small)+":"+lowerLimit+"~"+upperLimit)
+                        return
+                    }
+                    showOkCancelDialog(position, data)
                 }
             })
             adapter = debugParamAdapter
@@ -74,16 +100,16 @@ class GeneralParamFragment : BaseFragment<BackstageFragmentGeneralParamBinding,
 
     @Subscribe(threadMode = ThreadMode.MAIN)
     fun event(messageEvent: VBoxMessage) {
-        XLogUtil.d("VBoxMessage:$messageEvent")
+        Log.d(TAG, "event: $messageEvent")
         mViewModel.disposeData(messageEvent)
     }
 
 
-
     override fun initObserve() {
         lifecycle.addObserver(mViewModel.getThreadGeneralParam())
-        observeLiveData(mViewModel.readAllDataSuccess,::readAllDataSuccess)
-        observeLiveData(mViewModel.clickPosition,::clickPosition)
+        observeLiveData(mViewModel.readAllDataSuccess, ::readAllDataSuccess)
+        observeLiveData(mViewModel.clickPosition, ::clickPosition)
+        observeLiveData(mViewModel.setParamSuccess, ::setParamSuccess)
         lifecycle.addObserver(this)
 
     }
@@ -92,6 +118,13 @@ class GeneralParamFragment : BaseFragment<BackstageFragmentGeneralParamBinding,
 
     }
 
+    private fun setParamSuccess(data: Boolean) {
+        if (data) {
+            closeLoading()
+            ToastUtil.switchToastStyleToSuccess(UiUtil.getStringRes(R.string.modific_success))
+        }
+    }
+
     private fun readAllDataSuccess(flag: Boolean) {
         if (flag) {
             debugParamAdapter?.setData(mViewModel.paramDataList);
@@ -101,25 +134,68 @@ class GeneralParamFragment : BaseFragment<BackstageFragmentGeneralParamBinding,
     override fun initRequestData() {
         mViewModel.getArticleData()
     }
+
     private fun showOkCancelDialog(position: Int, data: String) {
         if (okCancelDialog == null) {
             okCancelDialog = this@GeneralParamFragment.context?.let { OKCancelDialog(it) }
         }
-        okCancelDialog?.setListener(object: DialogClickListener {
+        okCancelDialog?.setListener(object : DialogClickListener {
             override fun onClickListener(type: Int, text: String?) {
                 when (type) {
-                    okCancelDialog?.type1-> {
+                    okCancelDialog?.type1 -> {
                         okCancelDialog?.dismiss()
-                        mViewModel.sqWriteData(position,data)
-
+                        showLoading()
+                        mViewModel.sqWriteData(position, data)
                     }
+
                     else -> {}
                 }
             }
-
         })
 
         okCancelDialog?.show()
     }
 
+    private var dialog: ZLoadingDialog? = null
+    private var loadingJob: Job? = null
+
+    @SuppressLint("ResourceAsColor")
+    private fun showLoading() {
+        if (dialog == null) {
+            dialog = ZLoadingDialog(requireContext())
+        }
+        dialog!!.setLoadingBuilder(Z_TYPE.DOUBLE_CIRCLE) //设置类型
+            .setLoadingColor(
+                R.color.color_red
+            ) //颜色
+            .setHintText("Loading...")
+            .setCanceledOnTouchOutside(false)
+            .setCancelable(false)
+            .setHintTextSize(48f)
+
+        dialog!!.create().apply {
+            val window = this.window
+            window?.let {
+                val layoutParams = it.attributes
+                layoutParams.width = (800 * resources.displayMetrics.density).toInt() // 转换为 px
+                layoutParams.height = (400 * resources.displayMetrics.density).toInt() // 转换为 px
+                it.attributes = layoutParams
+            }
+        }
+        dialog!!.show()
+        loadingJob = CoroutineScope(Dispatchers.IO).launch {
+            delay(10000) // 延迟 20 秒
+            withContext(Dispatchers.Main) {
+                if (dialog?.isShowing == true) {
+                    ToastUtil.showToast("error")
+                    closeLoading() // 在主线程调用关闭方法
+                }
+            }
+        }
+    }
+
+    private fun closeLoading() {
+        loadingJob?.cancel()
+        dialog?.dismiss()
+    }
 }

+ 2 - 2
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.base.utils.XLogUtil
 import com.quyunshuo.sbm10.common.bean.ProductDataBean
 import com.quyunshuo.sbm10.common.constant.Heartbeat
 import com.quyunshuo.sbm10.common.constant.MMKVName
@@ -30,7 +31,6 @@ import com.quyunshuo.sbm10.common.ui.BaseFragment
 import com.quyunshuo.sbm10.common.util.ByteUtils
 import com.quyunshuo.sbm10.common.util.ToastUtil
 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
@@ -57,7 +57,7 @@ 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 material = SpUtils.getBoolean(MMKVName.MATERIAL,false)
     private var productList = ArrayList<ProductDataBean>()//传递给make的制作商品list
 
     override fun BackstageFragmentDebugProductBinding.initView() {

+ 3 - 0
module_backstage/src/main/java/com/module/backstage/repo/GeneralParamFragmentRepo.kt

@@ -25,6 +25,9 @@ class GeneralParamFragmentRepo @Inject constructor() : BaseRepository() {
         PlcParamAddressEnum.Param06,
         PlcParamAddressEnum.Param07,
         PlcParamAddressEnum.Param08,
+        PlcParamAddressEnum.Param09,
+        PlcParamAddressEnum.Param0A,
+        PlcParamAddressEnum.Param0B,
 //        PlcParamAddressEnum.D232,
 //        PlcParamAddressEnum.D231,
 //        PlcParamAddressEnum.D230,

+ 18 - 1
module_backstage/src/main/java/com/module/backstage/vm/GeneralParamFragmentVM.kt

@@ -43,9 +43,12 @@ class GeneralParamFragmentVM @Inject constructor(private val mRepo: GeneralParam
     val readAllDataSuccess: LiveData<Boolean> get() = _readAllDataSuccess
 
     //position
-    private var _position = MutableLiveData<Int>()//
+    private var _position = MutableLiveData<Int>()
     val clickPosition: LiveData<Int> get() = _position
 
+    private var _setParamSuccess = MutableLiveData<Boolean>()
+    val setParamSuccess: LiveData<Boolean> get() = _setParamSuccess
+
     /**
      * 获取文章数据
      */
@@ -122,6 +125,18 @@ class GeneralParamFragmentVM @Inject constructor(private val mRepo: GeneralParam
             PlcParamAddressEnum.Param08.address,
             HexadecimalUtil.hex2dec(messageEvent.data.substring(38, 40)).toString()
         )
+        paramDataList.put(
+            PlcParamAddressEnum.Param09.address,
+            HexadecimalUtil.hex2dec(messageEvent.data.substring(40, 42)).toString()
+        )
+        paramDataList.put(
+            PlcParamAddressEnum.Param0A.address,
+            HexadecimalUtil.hex2dec(messageEvent.data.substring(42, 44)).toString()
+        )
+        paramDataList.put(
+            PlcParamAddressEnum.Param0B.address,
+            HexadecimalUtil.hex2dec(messageEvent.data.substring(44, 46)).toString()
+        )
         ToastUtil.switchToastStyleToSuccess(UiUtil.getStringRes(R.string.backstage_update_success))
         _readAllDataSuccess.value = true
 //        mRepo.threadGeneralParam.jobParam?.cancel()
@@ -146,6 +161,7 @@ class GeneralParamFragmentVM @Inject constructor(private val mRepo: GeneralParam
 //        var bin = HexUtils.hexStr2BinStr(hex)
         val plcParamAddressEnum: PlcParamAddressEnum = mRepo.arrayList.get(position)
         getAddressData(plcParamAddressEnum.address)
+        _setParamSuccess.value=false
         mRepo.threadGeneralParam.writeData(plcParamAddressEnum.address, hex)
     }
 
@@ -188,6 +204,7 @@ class GeneralParamFragmentVM @Inject constructor(private val mRepo: GeneralParam
         val data = messageEvent.data.substring(76, 78)
         Log.d(TAG, "CMD_PARAM 修改的参数: " + data + ":" + getAddress)
         if (data!="00") {
+            _setParamSuccess.value=true
             mRepo.threadGeneralParam.jobWriteData?.cancel()
         }
     }

+ 0 - 1
module_backstage/src/main/java/com/module/backstage/vm/LocalAlarmClockFragmentVM.kt

@@ -12,7 +12,6 @@ import com.quyunshuo.sbm10.common.constant.MMKVName
 import com.quyunshuo.sbm10.common.enums.WeekEnum
 import com.quyunshuo.sbm10.common.util.AlarmManagerUtil
 import com.quyunshuo.sbm10.common.util.AlarmSettingUtil
-import com.quyunshuo.sbm10.common.util.XLogUtil
 import dagger.hilt.android.lifecycle.HiltViewModel
 import java.text.ParseException
 import java.text.SimpleDateFormat

+ 1 - 1
module_backstage/src/main/java/com/module/backstage/vm/OtherFragmentVM.kt

@@ -8,9 +8,9 @@ import com.module.backstage.repo.OtherFragmentRepo
 import com.module.pay.common.OtherEnum
 import com.quyunshuo.sbm10.base.mvvm.vm.BaseViewModel
 import com.quyunshuo.sbm10.base.utils.SpUtils
+import com.quyunshuo.sbm10.base.utils.XLogUtil
 import com.quyunshuo.sbm10.common.constant.MMKVName
 import com.quyunshuo.sbm10.common.util.UiUtil
-import com.quyunshuo.sbm10.common.util.XLogUtil
 import dagger.hilt.android.lifecycle.HiltViewModel
 import javax.inject.Inject
 

+ 1 - 0
module_home/src/main/java/com/quyunshuo/module/home/activity/main/MainActivity.kt

@@ -24,6 +24,7 @@ import com.quyunshuo.sbm10.common.ui.BaseActivity
 import dagger.hilt.android.AndroidEntryPoint
 import org.greenrobot.eventbus.Subscribe
 import org.greenrobot.eventbus.ThreadMode
+import java.util.Locale
 
 
 /**

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

@@ -16,7 +16,7 @@ import com.quyunshuo.sbm10.base.utils.SpUtils
 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)
+    private var material = SpUtils.getBoolean(MMKVName.MATERIAL,false)
 
     inner class MyViewHolder(binding: HomeItemHomeProductBinding): RecyclerView.ViewHolder(binding.root){
         private val mBinding = binding

+ 11 - 8
module_home/src/main/java/com/quyunshuo/module/home/dialog/AgainBuyDialog.kt

@@ -7,22 +7,27 @@ import android.os.Handler
 import android.util.Log
 import android.view.View
 import android.widget.ImageView
-import androidx.fragment.app.Fragment
 import androidx.lifecycle.Lifecycle
 import androidx.lifecycle.LifecycleObserver
 import androidx.lifecycle.OnLifecycleEvent
 import coil.request.ImageRequest
-import com.quyunshuo.sbm10.base.mvvm.v.BaseFrameDialog
-import com.quyunshuo.sbm10.base.utils.CoilGIFImageLoader
-import com.quyunshuo.sbm10.common.util.UiUtil
 import com.quyunshuo.module.home.R
 import com.quyunshuo.module.home.databinding.HomeDialogAgainBuyBinding
 import com.quyunshuo.sbm10.base.DialogClickListener
+import com.quyunshuo.sbm10.base.mvvm.v.BaseFrameDialog
+import com.quyunshuo.sbm10.base.utils.CoilGIFImageLoader
+import com.quyunshuo.sbm10.base.utils.GlideUtil
+import com.quyunshuo.sbm10.common.util.UiUtil
 import kotlinx.coroutines.CoroutineScope
 import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.Job
 import kotlinx.coroutines.delay
 import kotlinx.coroutines.launch
+import java.io.BufferedOutputStream
+import java.io.File
+import java.io.FileOutputStream
+import java.io.IOException
+import java.io.InputStream
 import java.lang.ref.WeakReference
 
 /**
@@ -42,8 +47,7 @@ class AgainBuyDialog(mContext: Context) : BaseFrameDialog<HomeDialogAgainBuyBind
 
     override fun HomeDialogAgainBuyBinding.initView() {
         binding = this // 将 binding 引用保存
-//        readDataFromAssets("assets/dingdian_qutang.gif", ivIcon)
-        ivIcon.setBackgroundResource(R.drawable.product_1)
+        readDataFromAssets(R.drawable.make_success, ivIcon)
         tvAgainBuy.setOnClickListener {
             againBuyDialoglistener?.onClickListener(type1,null)
         }
@@ -72,7 +76,7 @@ class AgainBuyDialog(mContext: Context) : BaseFrameDialog<HomeDialogAgainBuyBind
         return false
     }
 
-    private fun readDataFromAssets(assetsPath: String, ivAssets: ImageView): Boolean {
+    private fun readDataFromAssets(assetsPath: Int, ivAssets: ImageView) :Boolean{
         val request = ImageRequest.Builder(mContext)
             .data(assetsPath) // 替换为你的G图像路径
             .target(ivAssets)
@@ -138,5 +142,4 @@ class AgainBuyDialog(mContext: Context) : BaseFrameDialog<HomeDialogAgainBuyBind
         super.dismiss()
         stopRefreshTime()
     }
-
 }

+ 7 - 0
module_home/src/main/java/com/quyunshuo/module/home/dialog/LanguageSelectorDialog.kt

@@ -2,6 +2,7 @@ package com.quyunshuo.module.home.dialog
 
 import android.content.Context
 import android.util.Log
+import android.view.View
 import androidx.fragment.app.FragmentManager
 import androidx.lifecycle.Lifecycle
 import androidx.lifecycle.LifecycleObserver
@@ -13,6 +14,7 @@ import com.quyunshuo.module.home.listener.LanguageClickListener
 import com.quyunshuo.sbm10.base.mvvm.v.BaseFrameDialog
 import com.quyunshuo.sbm10.base.utils.LanguageUtil
 import com.quyunshuo.sbm10.base.utils.SpUtils
+import java.util.Locale
 
 /**
  * 确定和取消对话框
@@ -51,6 +53,11 @@ class LanguageSelectorDialog(mContext: Context) : BaseFrameDialog<LanguageSelect
             })
             adapter = languageAdapter
         }
+            // 对于阿拉伯语
+        if (window!=null){
+            window?.decorView?.layoutDirection = View.LAYOUT_DIRECTION_LTR
+            Log.d(TAG, "initView: LAYOUT_DIRECTION_LTR")
+        }
     }
 
     @OnLifecycleEvent(Lifecycle.Event.ON_STOP)

+ 1 - 1
module_home/src/main/java/com/quyunshuo/module/home/fragment/fragment/BuyFragment.kt

@@ -27,10 +27,10 @@ import com.quyunshuo.module.home.fragment.vm.BuyFragmentVM
 import com.quyunshuo.module.home.utils.SimplePlayerUtil
 import com.quyunshuo.sbm10.base.utils.RegisterEventBus
 import com.quyunshuo.sbm10.base.utils.SpUtils
+import com.quyunshuo.sbm10.base.utils.XLogUtil
 import com.quyunshuo.sbm10.common.constant.MMKVName
 import com.quyunshuo.sbm10.common.ui.BaseFragment
 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

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

@@ -50,8 +50,10 @@ import com.quyunshuo.sbm10.base.bean.Global
 import com.quyunshuo.sbm10.base.dialog.TipsDialog
 import com.quyunshuo.sbm10.base.ktx.observeLiveData
 import com.quyunshuo.sbm10.base.ktx.setVisible
+import com.quyunshuo.sbm10.base.utils.LanguageUtil
 import com.quyunshuo.sbm10.base.utils.RegisterEventBus
 import com.quyunshuo.sbm10.base.utils.SpUtils
+import com.quyunshuo.sbm10.base.utils.XLogUtil
 import com.quyunshuo.sbm10.common.bean.ProductDataBean
 import com.quyunshuo.sbm10.common.bean.ShoppingCartBean
 import com.quyunshuo.sbm10.common.constant.Heartbeat
@@ -64,7 +66,6 @@ import com.quyunshuo.sbm10.common.ui.BaseFragment
 import com.quyunshuo.sbm10.common.util.LongClickUtils
 import com.quyunshuo.sbm10.common.util.ToastUtil
 import com.quyunshuo.sbm10.common.util.UiUtil
-import com.quyunshuo.sbm10.common.util.XLogUtil
 import com.zhanshow.mylibrary.network.NetworkStateReceiver.NetworkStateReceiverListener
 import com.zhanshow.mylibrary.phonestate.MyPhoneStateListener.MyPhoneStateListenerListener
 import dagger.hilt.android.AndroidEntryPoint
@@ -116,9 +117,11 @@ class HomeFragment : BaseFragment<HomeFragmentHomeBinding, HomeFragmentVM>(), Vi
     var payChoose: WeakReference<PayChooseDialogFragment>? = null//支付方式选择对户口
 
     private var languageSelectorDialog: LanguageSelectorDialog? = null
-    lateinit var materialHashMap: HashMap<String, String>
+    private var materialHashMap: HashMap<String, String> = HashMap()
     private var materialValue=""
-    private var material = SpUtils.getBoolean(MMKVName.MATERIAL,true)
+    private var material = SpUtils.getBoolean(MMKVName.MATERIAL,false)
+    private var productCount = 0
+    private val shopCartSize = SpUtils.getString(MMKVName.SHOPPING_CART_SIZE, "3")?.toInt()
 
     @RequiresApi(Build.VERSION_CODES.P)
     override fun HomeFragmentHomeBinding.initView() {
@@ -266,6 +269,7 @@ class HomeFragment : BaseFragment<HomeFragmentHomeBinding, HomeFragmentVM>(), Vi
 
     private fun shoppingCarSize(i: Int) {
         mBinding.tvUpdateHint.text = i.toString()
+        productCount = i
     }
 
 
@@ -294,7 +298,7 @@ class HomeFragment : BaseFragment<HomeFragmentHomeBinding, HomeFragmentVM>(), Vi
                 return
             }
         }
-        if (checkToBuy()) return//是否开机
+//        if (checkToBuy()) return//是否开机
 //        selectProductDataBean = ProTypeEnum.getEnumByValue(product!!.nameChinese)
         //todo 测试做糖 传递价格等信息过去。
 //        gotoMake(product.nameChinese)
@@ -303,9 +307,14 @@ class HomeFragment : BaseFragment<HomeFragmentHomeBinding, HomeFragmentVM>(), Vi
 //        bundle.putInt("SELECT_PRO",selectProductDataBean.proValue)
 //        findNavController.navigate(R.id.home_action_home_homefragment_to_home_makefragment,bundle)
         if (SpUtils.getBoolean(MMKVName.SHOPPING_TROLLEY, true)!!) {
-            //添加进购物车
-            addAction(view)
-            mViewModel.shoppingTrolleyAdd(product!!)
+            if (productCount < shopCartSize!!){
+                //添加进购物车
+                addAction(view)
+                mViewModel.shoppingTrolleyAdd(product!!)
+            }else{
+                ToastUtil.showToast(UiUtil.getStringRes(R.string.cannot_exceed_size)+shopCartSize)
+                return
+            }
         } else {
             //单选 直接打开支付对话框  使用和购物车类似的方式,只不过呢,购物车只能加入一个而已。
             mViewModel.shoppingTrolleyRemoveAll()
@@ -316,6 +325,10 @@ class HomeFragment : BaseFragment<HomeFragmentHomeBinding, HomeFragmentVM>(), Vi
 
     private fun checkToBuy(): Boolean {
         val deviceStatusCheck = mViewModel.deviceStatusCheck()
+        if (SpUtils.getString(MMKVName.OPEN_DEV,"0")!="1"){
+            showTipsDialog(UiUtil.getStringRes(R.string.please_open_dev))
+            return true
+        }
         if (deviceStatusCheck != "02") {
             showTipsDialog(deviceStatusCheck)
             return true
@@ -397,8 +410,16 @@ class HomeFragment : BaseFragment<HomeFragmentHomeBinding, HomeFragmentVM>(), Vi
     override fun onDestroyView() {
         Log.d(TAG, "viewonDestroyView: ")
         mBinding.homeRvProduct.adapter = null //为什么要手动呢?。。。。。
-        NetWorkUtils.unRegisterNetWork(activity)
-        PhoneStateUtils.unRegisterPhoneStateListener(activity)
+        try {
+            NetWorkUtils.unRegisterNetWork(activity)
+        }catch (e:Exception){
+            Log.d(TAG, "onDestroyView:NetWorkUtils "+e.message)
+        }
+        try {
+            PhoneStateUtils.unRegisterPhoneStateListener(activity)
+        }catch (e:Exception){
+            Log.d(TAG, "onDestroyView:PhoneStateUtils "+e.message)
+        }
         super.onDestroyView()
     }
 
@@ -448,7 +469,7 @@ class HomeFragment : BaseFragment<HomeFragmentHomeBinding, HomeFragmentVM>(), Vi
 
     @Subscribe(threadMode = ThreadMode.MAIN)
     fun event(messageEvent: VBoxMessage) {
-        XLogUtil.d("VBoxMessage:$messageEvent")
+        Log.d(TAG, "event: $messageEvent")
         mViewModel.disposeData(messageEvent)
     }
 

+ 5 - 4
module_home/src/main/java/com/quyunshuo/module/home/fragment/fragment/MakeFragment.kt

@@ -31,6 +31,7 @@ import com.quyunshuo.sbm10.base.addressenum.PlcD2StatusEnum
 import com.quyunshuo.sbm10.base.ktx.observeLiveData
 import com.quyunshuo.sbm10.base.utils.RegisterEventBus
 import com.quyunshuo.sbm10.base.utils.SpUtils
+import com.quyunshuo.sbm10.base.utils.XLogUtil
 import com.quyunshuo.sbm10.common.bean.ShoppingCartBean
 import com.quyunshuo.sbm10.common.constant.Heartbeat
 import com.quyunshuo.sbm10.common.constant.MMKVName
@@ -38,7 +39,6 @@ import com.quyunshuo.sbm10.common.constant.event.ApiMessageEvent
 import com.quyunshuo.sbm10.common.ui.BaseFragment
 import com.quyunshuo.sbm10.common.util.LongClickUtils
 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
@@ -84,6 +84,7 @@ class MakeFragment : BaseFragment<HomeFragmentMakeBinding, MakeFragmentVM>(), Li
 
     @SuppressLint("SetTextI18n")
     override fun HomeFragmentMakeBinding.initView() {
+
         val deviceId = XLogUtil.getDeviceId()
         if (deviceId.isNotEmpty()) {
             tvClientId.text =
@@ -97,8 +98,8 @@ class MakeFragment : BaseFragment<HomeFragmentMakeBinding, MakeFragmentVM>(), Li
 //        setMaterialValue(materialValue)
         val price1 = price?.toBigDecimal()
         // 解析 JSON 数据
-        simplePlayerUtil = SimplePlayerUtil(svVideo)
-        simplePlayerUtil!!.setUrl("/storage/emulated/0/adB/1440.mp4")
+//        simplePlayerUtil = SimplePlayerUtil(svVideo)
+//        simplePlayerUtil!!.setUrl("/storage/emulated/0/adB/1440.mp4")
         if ((Heartbeat.acceptBill + Heartbeat.coinData) > price1) {
             Heartbeat.acceptBill = (Heartbeat.acceptBill + Heartbeat.coinData).subtract(price1)
         } else {
@@ -196,7 +197,7 @@ class MakeFragment : BaseFragment<HomeFragmentMakeBinding, MakeFragmentVM>(), Li
     }
 
     override fun onDestroyView() {
-        simplePlayerUtil?.onDestroy()
+//        simplePlayerUtil?.onDestroy()
         againBuyDialog?.dismiss()
         myHandler.removeCallbacksAndMessages(null)
         stopRestCoin()

+ 1 - 1
module_home/src/main/java/com/quyunshuo/module/home/fragment/fragment/UserLoginFragment.kt

@@ -22,6 +22,7 @@ import com.quyunshuo.module.home.fragment.vm.UserLoginFragmentVM
 import com.quyunshuo.module.home.model.livedata.LiveDataBean
 import com.quyunshuo.sbm10.base.ktx.observeLiveData
 import com.quyunshuo.sbm10.base.utils.SpUtils
+import com.quyunshuo.sbm10.base.utils.XLogUtil
 import com.quyunshuo.sbm10.common.constant.MMKVName
 import com.quyunshuo.sbm10.common.constant.RouteUrl
 import com.quyunshuo.sbm10.common.keyboard.KeyboardView
@@ -29,7 +30,6 @@ import com.quyunshuo.sbm10.common.ui.BaseFragment
 import com.quyunshuo.sbm10.common.util.LongClickUtils
 import com.quyunshuo.sbm10.common.util.ToastUtil
 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

+ 1 - 1
module_home/src/main/java/com/quyunshuo/module/home/fragment/fragment/pay/BillCoinFragment.kt

@@ -11,12 +11,12 @@ import com.quyunshuo.sbm10.common.constant.PayName
 import com.quyunshuo.sbm10.common.constant.event.ApiMessageEvent
 import com.quyunshuo.sbm10.common.ui.BaseFragment
 import com.quyunshuo.sbm10.common.util.UiUtil
-import com.quyunshuo.sbm10.common.util.XLogUtil
 import com.quyunshuo.module.home.R
 import com.quyunshuo.module.home.bean.PaySuccessBean
 import com.quyunshuo.module.home.databinding.HomeFragmentBillCoinBinding
 import com.quyunshuo.module.home.fragment.vm.BuyFragmentVM
 import com.quyunshuo.module.home.utils.OrderNumberGenerator
+import com.quyunshuo.sbm10.base.utils.XLogUtil
 import dagger.hilt.android.AndroidEntryPoint
 import org.greenrobot.eventbus.EventBus
 import org.greenrobot.eventbus.Subscribe

+ 1 - 1
module_home/src/main/java/com/quyunshuo/module/home/fragment/fragment/pay/FreeMakeFragment.kt

@@ -10,13 +10,13 @@ import com.quyunshuo.sbm10.common.constant.PayName
 import com.quyunshuo.sbm10.common.constant.event.ApiMessageEvent
 import com.quyunshuo.sbm10.common.ui.BaseFragment
 import com.quyunshuo.sbm10.common.util.UiUtil
-import com.quyunshuo.sbm10.common.util.XLogUtil
 import com.quyunshuo.module.home.R
 import com.quyunshuo.module.home.bean.PaySuccessBean
 import com.quyunshuo.module.home.databinding.HomeFragmentBillCoinBinding
 import com.quyunshuo.module.home.databinding.HomeFragmentFreeMakeBinding
 import com.quyunshuo.module.home.fragment.vm.BuyFragmentVM
 import com.quyunshuo.module.home.utils.OrderNumberGenerator
+import com.quyunshuo.sbm10.base.utils.XLogUtil
 import dagger.hilt.android.AndroidEntryPoint
 import org.greenrobot.eventbus.EventBus
 import org.greenrobot.eventbus.Subscribe

+ 1 - 1
module_home/src/main/java/com/quyunshuo/module/home/fragment/fragment/pay/MDBCardFragment.kt

@@ -21,13 +21,13 @@ import com.quyunshuo.sbm10.common.constant.PayName
 import com.quyunshuo.sbm10.common.constant.event.ApiMessageEvent
 import com.quyunshuo.sbm10.common.ui.BaseFragment
 import com.quyunshuo.sbm10.common.util.UiUtil
-import com.quyunshuo.sbm10.common.util.XLogUtil
 import com.quyunshuo.module.home.R
 import com.quyunshuo.module.home.bean.PaySuccessBean
 import com.quyunshuo.module.home.databinding.HomeFragmentMdbCardBinding
 import com.quyunshuo.module.home.databinding.HomeFragmentNayaxCardBinding
 import com.quyunshuo.module.home.fragment.vm.BuyFragmentVM
 import com.quyunshuo.module.home.utils.OrderNumberGenerator
+import com.quyunshuo.sbm10.base.utils.XLogUtil
 import dagger.hilt.android.AndroidEntryPoint
 import kotlinx.coroutines.CoroutineScope
 import kotlinx.coroutines.Dispatchers

+ 0 - 1
module_home/src/main/java/com/quyunshuo/module/home/fragment/fragment/pay/NayaxCardFragment.kt

@@ -18,7 +18,6 @@ import com.quyunshuo.sbm10.common.constant.PayName
 import com.quyunshuo.sbm10.common.constant.event.ApiMessageEvent
 import com.quyunshuo.sbm10.common.ui.BaseFragment
 import com.quyunshuo.sbm10.common.util.UiUtil
-import com.quyunshuo.sbm10.common.util.XLogUtil
 import com.quyunshuo.module.home.R
 import com.quyunshuo.module.home.bean.PaySuccessBean
 import com.quyunshuo.module.home.databinding.HomeFragmentNayaxCardBinding

+ 0 - 1
module_home/src/main/java/com/quyunshuo/module/home/fragment/fragment/pay/QrCodeFragment.kt

@@ -18,7 +18,6 @@ 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.XLogUtil
 import com.quyunshuo.module.home.databinding.HomeFragmentQrCodeBinding
 import com.quyunshuo.module.home.fragment.vm.QrCodeFragmentVM
 import dagger.hilt.android.AndroidEntryPoint

+ 2 - 1
module_home/src/main/java/com/quyunshuo/module/home/fragment/repo/HomeFragmentRepo.kt

@@ -9,6 +9,7 @@ import com.module.pay.service.HomeApiService
 import com.quyunshuo.sbm10.base.mvvm.m.BaseRepository
 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 javax.inject.Inject
 
@@ -42,7 +43,7 @@ class HomeFragmentRepo @Inject constructor(application: Application) : BaseRepos
     //请求密码
     fun getPwd()=request<String> {
         var map = HashMap<String,String>()
-        map.put("clientId","1665390239546718508779646")
+        Heartbeat.deviceId?.let { map.put("clientId", it) }
         mApi.getPwd(map).run {
             emit(data)
         }

+ 1 - 1
module_home/src/main/java/com/quyunshuo/module/home/fragment/vm/BuyFragmentVM.kt

@@ -9,7 +9,7 @@ import com.google.gson.reflect.TypeToken
 import com.quyunshuo.sbm10.base.mvvm.vm.BaseViewModel
 import com.quyunshuo.sbm10.base.utils.SpUtils
 import com.quyunshuo.sbm10.common.constant.MMKVName
-import com.quyunshuo.sbm10.common.util.FileUtil
+import com.quyunshuo.sbm10.base.utils.FileUtil
 import com.quyunshuo.module.home.fragment.repo.BuyFragmentRepo
 import com.quyunshuo.module.home.utils.SimplePlayerUtil
 import com.tencent.mmkv.MMKV

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

@@ -21,11 +21,12 @@ import com.quyunshuo.sbm10.common.bean.ProductDataBean
 import com.quyunshuo.sbm10.common.bean.ShoppingCartBean
 import com.quyunshuo.sbm10.common.constant.Heartbeat
 import com.quyunshuo.sbm10.common.util.UiUtil
-import com.quyunshuo.sbm10.common.util.XLogUtil
 import com.quyunshuo.module.home.R
 import com.quyunshuo.module.home.fragment.repo.HomeFragmentRepo
 import com.quyunshuo.module.home.interfaces.IShoppingTrolley
 import com.quyunshuo.sbm10.base.bean.Global
+import com.quyunshuo.sbm10.base.utils.SpUtils
+import com.quyunshuo.sbm10.common.constant.MMKVName
 import dagger.hilt.android.lifecycle.HiltViewModel
 import javax.inject.Inject
 

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

@@ -7,7 +7,6 @@ import androidx.lifecycle.viewModelScope
 import com.google.gson.Gson
 import com.quyunshuo.sbm10.base.mvvm.vm.BaseViewModel
 import com.quyunshuo.sbm10.common.bean.ShoppingCartBean
-import com.quyunshuo.sbm10.common.util.XLogUtil
 import com.quyunshuo.module.home.fragment.repo.QrCodeFragmentRepo
 import com.quyunshuo.module.home.pay.PaymentService
 import dagger.hilt.android.lifecycle.HiltViewModel

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

@@ -32,7 +32,6 @@ import com.quyunshuo.sbm10.common.constant.MqName
 import com.quyunshuo.sbm10.common.constant.event.ApiMessageEvent
 import com.quyunshuo.sbm10.common.util.LogUtil
 import com.quyunshuo.sbm10.common.util.ToastUtil
-import com.quyunshuo.sbm10.common.util.XLogUtil
 import com.quyunshuo.module.home.activity.main.MainActivity
 import com.quyunshuo.module.home.dialog.CountDownDialogFragment
 import com.quyunshuo.module.home.dialog.WarringDialog

+ 85 - 10
module_home/src/main/java/com/quyunshuo/module/home/service/GlobalService.kt

@@ -4,7 +4,9 @@ import android.annotation.SuppressLint
 import android.app.Notification
 import android.app.NotificationChannel
 import android.app.NotificationManager
+import android.content.Context
 import android.content.Intent
+import android.media.AudioManager
 import android.os.Build
 import android.os.IBinder
 import android.util.Log
@@ -13,6 +15,9 @@ import com.google.gson.Gson
 import com.google.gson.JsonObject
 import com.google.gson.reflect.TypeToken
 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.hjq.http.lifecycle.LifecycleService
 import com.module.pay.common.PayAgreementUtil
 import com.module.pay.nayax.CreditCardPresenter
@@ -24,8 +29,11 @@ import com.quyunshuo.module.home.dialog.WarringDialog
 import com.quyunshuo.module.home.receiver.MqttHelper
 import com.quyunshuo.sbm10.base.DialogClickListener
 import com.quyunshuo.sbm10.base.ktx.observeLiveData
+import com.quyunshuo.sbm10.base.utils.GsonUtil
+import com.quyunshuo.sbm10.base.utils.JsonUtils
 import com.quyunshuo.sbm10.base.utils.SpUtils
 import com.quyunshuo.sbm10.base.utils.TimeUtil
+import com.quyunshuo.sbm10.base.utils.XLogUtil
 import com.quyunshuo.sbm10.common.bean.ProductDataBean
 import com.quyunshuo.sbm10.common.constant.Heartbeat
 import com.quyunshuo.sbm10.common.constant.MMKVName
@@ -33,7 +41,6 @@ import com.quyunshuo.sbm10.common.constant.MqName
 import com.quyunshuo.sbm10.common.constant.event.ApiMessageEvent
 import com.quyunshuo.sbm10.common.util.ToastUtil
 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
@@ -100,14 +107,28 @@ class GlobalService : LifecycleService() {
             return
         }
         initPayIctMdb()
+
+        if (SpUtils.getString(MMKVName.OPEN_DEV,"0")!="0"){
+            SpUtils.putString(MMKVName.OPEN_DEV,"0")
+        }
         showTipsDialog(UiUtil.getStringRes(R.string.initializing))//是否开机
         observeLiveData(globalServiceViewModel.initIsSuccess, ::initIsSuccess)
         observeLiveData(globalServiceViewModel.alarmType, ::getAlarmType)
         globalServiceViewModel.sendBackData()//心跳上传
 //        globalServiceViewModel.forceBackToApp()
+        initMaterial()
 
     }
 
+    private fun initMaterial() {
+        val isMaterial = SpUtils.getBoolean(MMKVName.MATERIAL,false)
+        if (isMaterial==true){
+            EventBus.getDefault().post(ApiMessageEvent(MMKVName.MATERIAL,"1"))
+        }else{
+            EventBus.getDefault().post(ApiMessageEvent(MMKVName.MATERIAL,"0"))
+        }
+    }
+
     private fun initIsSuccess(initIsSuccess: Boolean) {
         //是否初始化成功,如果成功,提前结束,如果失败,什么都不做。
         if (initIsSuccess) {
@@ -229,16 +250,11 @@ class GlobalService : LifecycleService() {
     private var boxType = -1    //-1代表还没查询过,0为正常,1为少于默认值时提醒,2为没有物料了
 
     private fun getMeaterialValue() {
-        if (SpUtils.getBoolean(MMKVName.MATERIAL, true) == true) {
+        if (SpUtils.getBoolean(MMKVName.MATERIAL, false) == true) {
             val materialHashMap: HashMap<String, String> = Gson().fromJson(
                 SpUtils.getString(MMKVName.MATERIAL_VALUE, MMKVName.MATERIAL_HASHMAP),
                 object : TypeToken<HashMap<String, String>>() {}.type
             )
-            val productStr = SpUtils.getString(MMKVName.PRODUCT_DATA, "")
-            val list: ArrayList<ProductDataBean> = Gson().fromJson(
-                productStr,
-                object : TypeToken<ArrayList<ProductDataBean?>?>() {}.type
-            )
             val sweet = materialHashMap["sweet"].toString().toInt()
             val salty = materialHashMap["salty"].toString().toInt()
             val box = materialHashMap["box"].toString().toInt()
@@ -319,7 +335,6 @@ class GlobalService : LifecycleService() {
             } else {
                 boxType = 0
             }
-            SpUtils.putString(MMKVName.PRODUCT_DATA, Gson().toJson(list))
             val map = hashMapOf(
                 "responseContent" to warnBean,
                 "clientId" to Heartbeat.deviceId.toString(),
@@ -360,13 +375,11 @@ class GlobalService : LifecycleService() {
 
     @Subscribe(threadMode = ThreadMode.MAIN)
     fun event(messageEvent: VBoxMessage) {
-        XLogUtil.d("VBoxMessage:$messageEvent")
         globalServiceViewModel.disposeData(messageEvent)
     }
 
     @Subscribe(threadMode = ThreadMode.MAIN)
     fun event(messageEvent: ApiMessageEvent) {
-        XLogUtil.d("ApiMessage:$messageEvent")
         when (messageEvent.name) {
             MMKVName.OPEN_DEV -> {
                 //重新开机后清空上一个报警标记
@@ -420,6 +433,68 @@ class GlobalService : LifecycleService() {
                 }
                 mqttHelper.sendData("response", Gson().toJson(messageEvent.data))
             }
+            MqName.VOLUME->{
+                val map = Gson().fromJson(messageEvent.data.toString(), JsonObject::class.java)
+                val progress = map.get("responseContent").asInt
+                val audioManager =
+                    baseContext.getSystemService(Context.AUDIO_SERVICE) as AudioManager
+                audioManager.setStreamVolume(
+                    AudioManager.STREAM_MUSIC,
+                    progress,
+                    0
+                )
+                mqttHelper.sendData("response", Gson().toJson(messageEvent.data))
+                XLogUtil.d("远程修改了音量$progress")
+            }
+
+            MqName.UPDATEPRODUCT->{
+                val map = Gson().fromJson(messageEvent.data.toString(), JsonObject::class.java)
+                Log.d(TAG, "eventUPDATEPRODUCT: "+map)
+                val response= map.getAsJsonObject("responseContent")
+//                val no = JsonUtils.getValue<String>(response.toString(),"no").toString()
+//                val productName = JsonUtils.getValue<String>(response.toString(),"productName")
+//                val codePrice = response["codePrice"].asDouble
+//                val sellStatus = response["sellStatus"].asBoolean
+                val no = GsonUtil.getAsString(response,"no","")
+                val productName = GsonUtil.getAsString(response,"productName","")
+                val codePrice = GsonUtil.getAsDouble(response,"codePrice",0.0)
+                val sellStatus = GsonUtil.getAsBoolean(response,"sellStatus",true)
+                val productData= SpUtils.getString(MMKVName.PRODUCT_DATA,"")
+                Log.d(TAG, "eventproductData1: "+productData)
+                val list: ArrayList<ProductDataBean> = Gson().fromJson(
+                    productData,
+                    object : TypeToken<ArrayList<ProductDataBean?>?>() {}.type
+                )
+                for (i in list.indices){
+                    if (list[i].productNo==no){
+                        list[i].price=codePrice
+                        list[i].customName=productName
+                        list[i].isSelected=sellStatus
+                    }
+                }
+                XLogUtil.d("远程修改了商品:"+Gson().toJson(list))
+                SpUtils.putString(MMKVName.PRODUCT_DATA,Gson().toJson(list))
+                Log.d(TAG, "eventPRODUCT_DATA: "+SpUtils.getString(MMKVName.PRODUCT_DATA,""))
+                mqttHelper.sendData("response", Gson().toJson(messageEvent.data))
+            }
+
+            MqName.EQESTATUS->{
+                mqttHelper.sendData("response", Gson().toJson(messageEvent.data))
+            }
+
+            MqName.OPENDOOR->{
+                val map = Gson().fromJson(messageEvent.data.toString(), JsonObject::class.java)
+                val response= map.getAsJsonObject("responseContent")
+                val productName = GsonUtil.getAsString(response,"status","0")
+                VboxSerialPortSendQueue.getInstance()
+                    .sendCommand(
+                        VboxWriteCommand(
+                            VboxCommand.CMD_IO,
+                            VboxCommand.DEBUG_ID + "0C0" + productName
+                        )
+                    )
+                mqttHelper.sendData("response", Gson().toJson(messageEvent.data))
+            }
         }
     }
 

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

@@ -30,13 +30,15 @@ import com.quyunshuo.sbm10.common.enums.AlarmClockEnum
 import com.quyunshuo.sbm10.common.util.AlarmManagerUtil
 import com.quyunshuo.sbm10.common.util.AlarmSettingUtil
 import com.quyunshuo.sbm10.common.util.ByteUtils
-import com.quyunshuo.sbm10.common.util.FileUtil
+import com.quyunshuo.sbm10.base.utils.FileUtil
+import com.quyunshuo.sbm10.base.utils.XLogUtil
+import com.quyunshuo.sbm10.common.constant.event.ApiMessageEvent
 import com.quyunshuo.sbm10.common.util.LogUtil
-import com.quyunshuo.sbm10.common.util.XLogUtil
 import kotlinx.coroutines.CoroutineScope
 import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.flow.catch
 import kotlinx.coroutines.launch
+import org.greenrobot.eventbus.EventBus
 import java.io.File
 import java.text.SimpleDateFormat
 import java.util.Calendar
@@ -387,7 +389,7 @@ class GlobalServiceViewModel @Inject constructor(
     fun disposeData(messageEvent: VBoxMessage) {
         Log.d(TAG, messageEvent.cmd + ":messageEvent.data:" + messageEvent.data)
         if (messageEvent.cmd == VboxCommand.CMD_IO) {
-            if (messageEvent.data=="PreheatOff"){
+            if (messageEvent.data == "PreheatOff") {
                 startPreheatOff()
             }
         }
@@ -438,12 +440,14 @@ class GlobalServiceViewModel @Inject constructor(
         val data = messageEvent.data.substring(84, 86)
         Log.d(TAG, "调试按钮cmdHeartbeat: " + data)
         if (data.equals("05")) {
-            threadGlobalParam.isActivePreheatOff=false
+            threadGlobalParam.isActivePreheatOff = false
             threadGlobalParam.stopPreheatOff()
             Log.d(TAG, "startPreheat: 发送停止预热关闭")
         }
     }
 
+    private var isLoadDevOpen = false
+
     /**
      * 处理 单片机 心跳数据
      */
@@ -451,13 +455,21 @@ class GlobalServiceViewModel @Inject constructor(
         //机器状态码,设备目前处于关机的待机状态
         Log.d(TAG, "cmdHeartbeat1: " + messageEvent.data)
         SBCHeartbeat.devCode = messageEvent.data.substring(0, 2)//p10机器状态码
+        if (SBCHeartbeat.devCode == "01") {
+            if (!isLoadDevOpen) {
+                Log.d(TAG, "cmdHeartbeat: MMKVName.OPEN_DEV")
+                isLoadDevOpen = true
+            }
+        }else {
+            isLoadDevOpen = false
+        }
 
         if (SBCHeartbeat.devCode == "03") {
             _alarmType.value = messageEvent.data.substring(74, 76)
         }
 
         //这里用于全局计算物料剩余
-        if (SpUtils.getBoolean(MMKVName.MATERIAL, true) == true) {
+        if (SpUtils.getBoolean(MMKVName.MATERIAL, false) == true) {
             setMaterialValue()
             if (SBCHeartbeat.devCode == "04" && Heartbeat.productMaking != "") {
                 if (!calculateMaterial) {

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

@@ -88,6 +88,7 @@ class ManageMqtt @Inject constructor() {
                     //publish后会执行到这里  发布
                     try {
                         log("发送成功:" + token.message.toString())
+                        log("发送成功:" + token.message.id)
                     } catch (e: Exception) {
                         e.printStackTrace()
                     }

+ 49 - 15
module_home/src/main/java/com/quyunshuo/module/home/service/MqService.kt

@@ -19,17 +19,17 @@ import com.hboxs.serialport.sbc.SBCHeartbeat
 import com.quyunshuo.module.home.R
 import com.quyunshuo.module.home.receiver.MqttHelper
 import com.quyunshuo.sbm10.base.bean.HeartbeatBean
+import com.quyunshuo.sbm10.base.constant.SavaAddress
 import com.quyunshuo.sbm10.base.utils.SpUtils
 import com.quyunshuo.sbm10.base.utils.TimeUtil
+import com.quyunshuo.sbm10.base.utils.XLogUtil
 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.SavaAddress
 import com.quyunshuo.sbm10.common.constant.event.ApiMessageEvent
 import com.quyunshuo.sbm10.common.enums.ConnectStateEnum
 import com.quyunshuo.sbm10.common.util.ToastUtil
 import com.quyunshuo.sbm10.common.util.UiUtil
-import com.quyunshuo.sbm10.common.util.XLogUtil
 import com.rabbitmq.client.AMQP
 import com.rabbitmq.client.Channel
 import com.rabbitmq.client.Connection
@@ -45,6 +45,8 @@ import org.greenrobot.eventbus.EventBus
 import org.greenrobot.eventbus.Subscribe
 import org.greenrobot.eventbus.ThreadMode
 import java.io.IOException
+import java.net.URL
+import java.net.URLConnection
 import javax.inject.Inject
 
 @AndroidEntryPoint
@@ -171,7 +173,7 @@ class MqService : Service() {
         }
     }
 
-    //上传
+    //主动上传
     @Subscribe(threadMode = ThreadMode.MAIN)
     fun event(message: ApiMessageEvent) {
         val data = message.data
@@ -179,10 +181,18 @@ class MqService : Service() {
             MqName.HEARTBEAT -> {
                 updateMaterialStatus = SpUtils.getString(MMKVName.MANAGER_ID, "").toString()
                 val map = sendHeartMqtt()
+                Log.d(TAG, "eventsendHeartMqtt: "+updateMaterialStatus)
                 if (updateMaterialStatus != "") {
                     if (mqttHelper.isMqConnected()) {
                         mqttHelper.sendData("response", Gson().toJson(map))
+                        val isOpenDev = SpUtils.getString(MMKVName.OPEN_DEV,"0")
+                        if (isOpenDev=="1"){
+                            EventBus.getDefault().post(ApiMessageEvent(MMKVName.OPEN_DEV, 1))
+                        }else{
+                            EventBus.getDefault().post(ApiMessageEvent(MMKVName.OPEN_DEV, 0))
+                        }
                         Log.d(TAG, "event:上传心跳 " + map)
+                        mqConnected=0
                     } else {
                         XLogUtil.d("上传心跳失败,MQTT未连接")
                         if (mqConnected < 3) {
@@ -202,31 +212,55 @@ 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 = setMap(data.toString(), "material")
-                mqttHelper.sendData("response", Gson().toJson(map))
+                if (mqttHelper.isMqConnected()) {
+                    val map = setMap(data.toString(), "material")
+                    mqttHelper.sendData("response", Gson().toJson(map))
+                    mqConnected=0
+                } else {
+                    XLogUtil.d("上传物料监控状态失败,MQTT未连接")
+                    if (mqConnected < 3) {
+                        CoroutineScope(Dispatchers.Main).launch {
+                            delay(1000 * 30)
+                            EventBus.getDefault().post(ApiMessageEvent(MqName.MATERIAL, ""))
+                            mqConnected++
+                        }
+                    }
+                }
             }
 
             MMKVName.PASSWORD -> {
                 val map = setMap(data.toString(), "password")
                 mqttHelper.sendData("response", Gson().toJson(map))
             }
+
+            MMKVName.OPEN_DEV -> {
+                var ld:String
+                try {
+                    val url = URL("http://time.tianqi.com/")
+                    val uc: URLConnection = url.openConnection() // 生成连接du对象
+                    uc.connect() // 发出连接
+                    ld = uc.date.toString() // 取得网站日期时间
+                }catch (e:Exception){
+                    ld = ""
+                }
+
+                val responseContent = hashMapOf(
+                    "netTime" to ld,
+                    "eqeStatus" to data
+                )
+                val map = setMap(responseContent, "eqeStatus")
+                mqttHelper.sendData("response", Gson().toJson(map))
+            }
         }
     }
 
-    private fun setMap(responseContent: String, operation: String): HashMap<String, *> {
+    private fun setMap(responseContent: Any, operation: String): HashMap<String, *> {
         val map = hashMapOf(
             "responseContent" to responseContent,
             "statusCode" to 200,
-            "clientId" to System.currentTimeMillis(),
+            "clientId" to Heartbeat.deviceId,
             "operation" to operation,
+            "timestamp" to System.currentTimeMillis(),
             "direction" to 2
         )
         return map

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

@@ -6,7 +6,8 @@ import com.quyunshuo.sbm10.base.mvvm.m.BaseRepository
 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.SavaAddress
+import com.quyunshuo.sbm10.base.constant.SavaAddress
+
 import javax.inject.Inject
 
 /**

+ 35 - 2
module_home/src/main/java/com/quyunshuo/module/home/utils/RemotePushUtil.kt

@@ -10,6 +10,10 @@ import android.util.Log
 import com.google.gson.Gson
 import com.hboxs.serialport.plc.message.Message
 import com.hboxs.serialport.plc.thread.ThreadSettingParam
+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.qiniu.android.http.ResponseInfo
 import com.qiniu.android.storage.UpCompletionHandler
 import com.qiniu.android.storage.UploadManager
@@ -22,8 +26,10 @@ import com.quyunshuo.module.home.getui.MqttBaseBean
 import com.quyunshuo.sbm10.base.BaseApplication
 import com.quyunshuo.sbm10.base.BaseApplication.Companion.context
 import com.quyunshuo.sbm10.base.addressenum.PlcSettingAddressEnum
+import com.quyunshuo.sbm10.base.utils.GsonUtil
 import com.quyunshuo.sbm10.base.utils.JsonUtils
 import com.quyunshuo.sbm10.base.utils.SpUtils
+import com.quyunshuo.sbm10.base.utils.XLogUtil
 import com.quyunshuo.sbm10.common.bean.PaySucessBean
 import com.quyunshuo.sbm10.common.constant.Heartbeat
 import com.quyunshuo.sbm10.common.constant.MMKVName
@@ -34,7 +40,6 @@ 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
@@ -182,7 +187,7 @@ class RemotePushUtil @Inject constructor() {
             }
 
             MqName.EQESTATUS -> {
-                openOrCloseDev(baseBean)
+//                openOrCloseDev(baseBean)
             }
 
             MqName.PUSHTIMERULE -> {
@@ -254,6 +259,34 @@ class RemotePushUtil @Inject constructor() {
                 val map =setMap(msgId,DataBean.kind_data)
                 EventBus.getDefault().post(ApiMessageEvent(MqName.PASSWORD, map))
             }
+
+            MqName.VOLUME->{
+                val map =setMap(msgId,DataBean.kind_data)
+                EventBus.getDefault().post(ApiMessageEvent(MqName.VOLUME, map))
+            }
+
+            MqName.UPDATEPRODUCT->{
+                val map =setMap(msgId,DataBean.kind_data)
+                Log.d(TAG, "getMqttMessageUPDATEPRODUCT: "+map)
+                EventBus.getDefault().post(ApiMessageEvent(MqName.UPDATEPRODUCT, map))
+            }
+
+            MqName.EQESTATUS->{
+                val map =setMap(msgId,DataBean.kind_data)
+                Log.d(TAG, "getMqttMessageUPDATEPRODUCT: "+map)
+                if (DataBean.kind_data=="1"){
+                    VboxSerialPortSendQueue.getInstance()
+                        .sendCommand(
+                            VboxWriteCommand(
+                                VboxCommand.CMD_ON_OFF, VboxCommand.DEBUG_ID+"0100")
+                        )
+                }
+                EventBus.getDefault().post(ApiMessageEvent(MqName.EQESTATUS, map))
+            }
+            MqName.OPENDOOR->{
+                val map =setMap(msgId,DataBean.kind_data)
+                EventBus.getDefault().post(ApiMessageEvent(MqName.OPENDOOR, map))
+            }
         }
     }
 

二進制
module_home/src/main/res/drawable/make_success.gif


+ 3 - 3
module_home/src/main/res/layout/home_dialog_again_buy.xml

@@ -17,9 +17,9 @@
 
         <ImageView
             android:id="@+id/iv_icon"
-            android:layout_width="400dp"
-            android:layout_height="400dp"
-            android:src="@drawable/product_1"
+            android:layout_width="740dp"
+            android:src="@drawable/make_success"
+            android:layout_height="740dp"
             app:layout_constraintBottom_toBottomOf="parent"
             app:layout_constraintEnd_toStartOf="@+id/backstage_guideline"
             app:layout_constraintStart_toStartOf="parent"

+ 1 - 1
module_pay/src/main/java/com/module/pay/common/OtherEnum.kt

@@ -56,7 +56,7 @@ enum class OtherEnum(var nameId:Int,var nameS:String,var category:String,var def
 
 
     SHOPPING_TROLLEY(R.string.shopping_trolley,"购物车功能","购物车设置",true, 1,MMKVName.SHOPPING_TROLLEY),
-    SHOPPING_CART_SIZE(R.string.shopping_cart_size,"购物车可添加数量","购物车设置","5", 2,MMKVName.SHOPPING_CART_SIZE),
+    SHOPPING_CART_SIZE(R.string.shopping_cart_size,"购物车可添加数量","购物车设置","3", 2,MMKVName.SHOPPING_CART_SIZE),
     TWO_PRICE_DISCOUNT(R.string.two_price_discount,"第二件折扣","购物车设置","10", 2,MMKVName.TWO_PRICE_DISCOUNT),
     THREE_PRICE_DISCOUNT(R.string.three_price_discount,"第三件折扣","购物车设置","10", 2,MMKVName.THREE_PRICE_DISCOUNT),
     FIVE_PRICE_DISCOUNT(R.string.five_price_discount,"第五件折扣","购物车设置","10", 2,MMKVName.FIVE_PRICE_DISCOUNT),

+ 1 - 1
module_pay/src/main/java/com/module/pay/nayax/CreditCardMain.java

@@ -13,7 +13,7 @@ import com.bitmick.marshall.vmc.vmc_vend_t;
 import com.bitmick.utils.Utils;
 import com.quyunshuo.sbm10.base.utils.SpUtils;
 import com.quyunshuo.sbm10.common.constant.MMKVName;
-import com.quyunshuo.sbm10.common.util.XLogUtil;
+import com.quyunshuo.sbm10.base.utils.XLogUtil;
 
 import org.greenrobot.eventbus.EventBus;
 

+ 0 - 0
module_pay/src/main/java/com/module/pay/nayax/CreditCardPresenter.java


Some files were not shown because too many files changed in this diff