Browse Source

1、本地闹钟
2、logo设置优化

ccc 1 day ago
parent
commit
2fbaa0d1f1
27 changed files with 318 additions and 123 deletions
  1. 1 1
      app/src/main/AndroidManifest.xml
  2. 2 2
      buildSrc/src/main/kotlin/com/quyunshuo/sbm10/buildsrc/ProjectBuildConfig.kt
  3. 29 30
      lib_base/src/main/java/com/quyunshuo/sbm10/base/mvvm/v/BaseFrameFragment.kt
  4. BIN
      lib_base/src/main/res/drawable/icon_p10.png
  5. 6 3
      lib_common/src/main/java/com/quyunshuo/sbm10/common/constant/MMKVName.kt
  6. 2 1
      lib_common/src/main/java/com/quyunshuo/sbm10/common/constant/MqName.kt
  7. 2 0
      lib_common/src/main/java/com/quyunshuo/sbm10/common/util/AlarmManagerUtil.java
  8. 3 3
      lib_common/src/main/java/com/quyunshuo/sbm10/common/util/AlarmSettingUtil.kt
  9. 50 22
      module_backstage/src/main/java/com/module/backstage/adapter/TestAdapter.kt
  10. 1 1
      module_backstage/src/main/java/com/module/backstage/dialog/LocalAlarmClockDialog.kt
  11. 3 0
      module_backstage/src/main/java/com/module/backstage/fragment/other/SystemSettingsFragment.kt
  12. 5 4
      module_backstage/src/main/java/com/module/backstage/vm/OtherFragmentVM.kt
  13. 2 1
      module_backstage/src/main/java/com/module/backstage/vm/SystemSettingsFragmentVM.kt
  14. 1 0
      module_backstage/src/main/res/layout/backstage_dialog_local_alarm_clock.xml
  15. 1 2
      module_home/src/main/AndroidManifest.xml
  16. 3 3
      module_home/src/main/java/com/quyunshuo/module/home/fragment/fragment/BuyFragment.kt
  17. 3 3
      module_home/src/main/java/com/quyunshuo/module/home/fragment/fragment/HomeFragment.kt
  18. 5 4
      module_home/src/main/java/com/quyunshuo/module/home/fragment/fragment/MakeFragment.kt
  19. 9 3
      module_home/src/main/java/com/quyunshuo/module/home/fragment/fragment/SleepFragment.kt
  20. 46 10
      module_home/src/main/java/com/quyunshuo/module/home/receiver/TimedCleaningTaskAlarmReceiver.java
  21. 20 0
      module_home/src/main/java/com/quyunshuo/module/home/service/GlobalService.kt
  22. 2 0
      module_home/src/main/java/com/quyunshuo/module/home/service/GlobalServiceViewModel.kt
  23. 3 2
      module_home/src/main/java/com/quyunshuo/module/home/service/MqService.kt
  24. 16 11
      module_home/src/main/java/com/quyunshuo/module/home/utils/RemotePushUtil.kt
  25. 14 8
      module_home/src/main/res/layout/home_fragment_make.xml
  26. 30 0
      module_home/src/main/res/layout/home_fragment_sleep_block.xml
  27. 59 9
      serialport-api/src/main/java/com/hboxs/serialport/sbc/thread/ThreadGlobalParam.kt

+ 1 - 1
app/src/main/AndroidManifest.xml

@@ -24,7 +24,7 @@
     <application
     <application
         android:name="com.sunzee.app.AppApplication"
         android:name="com.sunzee.app.AppApplication"
         android:allowBackup="false"
         android:allowBackup="false"
-        android:icon="@drawable/pic_sc_01"
+        android:icon="@drawable/icon_p10"
         android:label="@string/app_name"
         android:label="@string/app_name"
         android:networkSecurityConfig="@xml/network_security_config"
         android:networkSecurityConfig="@xml/network_security_config"
         android:roundIcon="@mipmap/ic_launcher_round"
         android:roundIcon="@mipmap/ic_launcher_round"

+ 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 applicationId = "com.quyunshuo.sbm10"
     const val minSdkVersion = 21
     const val minSdkVersion = 21
     const val targetSdkVersion = 29
     const val targetSdkVersion = 29
-    const val versionCode = 17
-    const val versionName = "1.0.17"
+    const val versionCode = 17//版本号
+    const val versionName = "1.0.17"//版本名
     const val isAppMode = false
     const val isAppMode = false
     const val appVersion = 1  //国内外版本修改
     const val appVersion = 1  //国内外版本修改
 
 

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

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

BIN
lib_base/src/main/res/drawable/icon_p10.png


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

@@ -186,9 +186,12 @@ abstract class MMKVName {
         val COIN_PULSE_DIVIDE: String
         val COIN_PULSE_DIVIDE: String
             //硬币脉冲相除
             //硬币脉冲相除
             get() = "COIN_PULSE_DIVIDE"
             get() = "COIN_PULSE_DIVIDE"
-        val IS_SHOW_CHANGLOGE: String
-            //是否展示修改logo
-            get() = "IS_SHOW_CHANGLOGE"
+//        val IS_SHOW_CHANGLOGE: String
+//            //是否展示修改logo
+//            get() = "IS_SHOW_CHANGLOGE"
+
+        //是否展示修改logo
+        var IS_SHOW_CHANGLOGE: Boolean = false
 
 
         val PLC_PATH:String
         val PLC_PATH:String
             //单板机通讯地址默认值
             //单板机通讯地址默认值

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

@@ -10,7 +10,8 @@ object MqName {
     val VOLUME ="volume"//音量调节
     val VOLUME ="volume"//音量调节
     var UPDATE_PRODUCTS_SHOW = "updateProductsShow"//显示花型
     var UPDATE_PRODUCTS_SHOW = "updateProductsShow"//显示花型
     var PAY_SUCCESS = "pay_success"//收到支付成功
     var PAY_SUCCESS = "pay_success"//收到支付成功
-    var SLEEP= "sleep"//开关休眠
+    var SLEEP= "sleep"//远程开关休眠
+    var GO_SLEEP= "go_sleep"//闹钟执行休眠
     var BLOCK = "block"//开关锁机
     var BLOCK = "block"//开关锁机
     var STATUS_TYPE = "statusType"//连接服务器的状态
     var STATUS_TYPE = "statusType"//连接服务器的状态
     var GUEST_PWD = "guestPwd"
     var GUEST_PWD = "guestPwd"

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

@@ -49,6 +49,7 @@ public class AlarmManagerUtil {
      */
      */
     public static void setAlarm(Context context, int flag, int hour, int minute, int second, int id, int
     public static void setAlarm(Context context, int flag, int hour, int minute, int second, int id, int
             week, String tips) {
             week, String tips) {
+        Log.d("闹钟测试", "setAlarm:1 ");
             AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
             AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
             Calendar calendar = Calendar.getInstance();
             Calendar calendar = Calendar.getInstance();
             long intervalMillis = 0;
             long intervalMillis = 0;
@@ -64,6 +65,7 @@ public class AlarmManagerUtil {
             long startLong = 0L;
             long startLong = 0L;
             //版本适配 System.currentTimeMillis()
             //版本适配 System.currentTimeMillis()
             if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {// 6.0及以上
             if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {// 6.0及以上
+                Log.d("闹钟测试", "setAlarm:2 ");
                 //中午十二点会出现问题。
                 //中午十二点会出现问题。
                 startLong = calendar.getTimeInMillis();
                 startLong = calendar.getTimeInMillis();
                 if (System.currentTimeMillis() >= startLong) {
                 if (System.currentTimeMillis() >= startLong) {

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

@@ -54,9 +54,9 @@ object AlarmSettingUtil {
 //            return 0
 //            return 0
 //        }
 //        }
         for (i in number until alarmNumber) { //清除所有的闹钟
         for (i in number until alarmNumber) { //清除所有的闹钟
-            com.quyunshuo.sbm10.common.util.AlarmManagerUtil.cancelAlarm(
+            AlarmManagerUtil.cancelAlarm(
                 BaseApplication.context,
                 BaseApplication.context,
-                com.quyunshuo.sbm10.common.util.AlarmManagerUtil.ALARM_ACTION,
+                AlarmManagerUtil.ALARM_ACTION,
                 i
                 i
             )
             )
         }
         }
@@ -113,7 +113,7 @@ object AlarmSettingUtil {
 
 
         //时间。
         //时间。
         for (i in week.indices) {
         for (i in week.indices) {
-            com.quyunshuo.sbm10.common.util.AlarmManagerUtil.setAlarm(
+            AlarmManagerUtil.setAlarm(
                 BaseApplication.context,
                 BaseApplication.context,
                 2,
                 2,
                 Integer.valueOf(alarmClockBean.hour),
                 Integer.valueOf(alarmClockBean.hour),

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

@@ -7,6 +7,7 @@ import android.content.Context
 import android.content.Intent
 import android.content.Intent
 import android.media.AudioManager
 import android.media.AudioManager
 import android.os.Build
 import android.os.Build
+import android.os.Handler
 import android.provider.Settings
 import android.provider.Settings
 import android.util.Log
 import android.util.Log
 import android.view.LayoutInflater
 import android.view.LayoutInflater
@@ -36,6 +37,7 @@ import com.quyunshuo.sbm10.common.constant.MMKVName
 import com.quyunshuo.sbm10.common.constant.MqName
 import com.quyunshuo.sbm10.common.constant.MqName
 import com.quyunshuo.sbm10.common.constant.event.ApiMessageEvent
 import com.quyunshuo.sbm10.common.constant.event.ApiMessageEvent
 import com.quyunshuo.sbm10.common.listener.AdapterClickListener
 import com.quyunshuo.sbm10.common.listener.AdapterClickListener
+import com.quyunshuo.sbm10.common.util.LongClickUtils
 import com.quyunshuo.sbm10.common.util.ToastUtil
 import com.quyunshuo.sbm10.common.util.ToastUtil
 import com.quyunshuo.sbm10.common.util.UiUtil
 import com.quyunshuo.sbm10.common.util.UiUtil
 import org.greenrobot.eventbus.EventBus
 import org.greenrobot.eventbus.EventBus
@@ -98,26 +100,46 @@ class TestAdapter(var productList: MutableList<OtherEnum>) :
                     // 绑定 item 数据
                     // 绑定 item 数据
                     holder.viewBinding.run {
                     holder.viewBinding.run {
                         tvName.text = UiUtil.getStringRes(item!!.nameId)
                         tvName.text = UiUtil.getStringRes(item!!.nameId)
-                        tvName.setOnLongClickListener(object : OnLongClickListener {
-                            override fun onLongClick(v: View?): Boolean {
-                                if (item.mmkvName == MMKVName.PROMOTION_CODE) {
-                                    if (updateClickListener != null) {
-                                        if (SpUtils.getBoolean(
-                                                MMKVName.IS_SHOW_CHANGLOGE, false
-                                            ) == true
-                                        ) {
-                                            SpUtils.putBoolean(MMKVName.IS_SHOW_CHANGLOGE, false)
-                                        } else {
-                                            SpUtils.putBoolean(MMKVName.IS_SHOW_CHANGLOGE, true)
-                                        }
-                                        updateClickListener?.setOnLongClickListener(
-                                            item.type, position, ""
-                                        )
-                                    }
+                        LongClickUtils.setLongClick(Handler(), tvName, 5000) {
+                            if (item.mmkvName == MMKVName.PROMOTION_CODE) {
+                                if (updateClickListener != null) {
+                                    MMKVName.IS_SHOW_CHANGLOGE = true
+//                                        if (SpUtils.getBoolean(
+//                                                MMKVName.IS_SHOW_CHANGLOGE, false
+//                                            ) == true
+//                                        ) {
+//                                            SpUtils.putBoolean(MMKVName.IS_SHOW_CHANGLOGE, false)
+//                                        } else {
+//                                            SpUtils.putBoolean(MMKVName.IS_SHOW_CHANGLOGE, true)
+//                                        }
+                                    updateClickListener?.setOnLongClickListener(
+                                        item.type, position, ""
+                                    )
                                 }
                                 }
-                                return false
                             }
                             }
-                        })
+                            false
+                        }
+//                        tvName.setOnLongClickListener(object : OnLongClickListener {
+//                            override fun onLongClick(v: View?): Boolean {
+//                                if (item.mmkvName == MMKVName.PROMOTION_CODE) {
+//                                    if (updateClickListener != null) {
+//                                        MMKVName.IS_SHOW_CHANGLOGE=true
+//                                        if (SpUtils.getBoolean(
+//                                                MMKVName.IS_SHOW_CHANGLOGE, false
+//                                            ) == true
+//                                        ) {
+//                                            SpUtils.putBoolean(MMKVName.IS_SHOW_CHANGLOGE, false)
+//                                        } else {
+//                                            SpUtils.putBoolean(MMKVName.IS_SHOW_CHANGLOGE, true)
+//                                        }
+//                                        updateClickListener?.setOnLongClickListener(
+//                                            item.type, position, ""
+//                                        )
+//                                    }
+//                                }
+//                                return false
+//                            }
+//                        })
                         rgSwitch.setOnCheckedChangeListener { group, checkedId ->
                         rgSwitch.setOnCheckedChangeListener { group, checkedId ->
                             when (checkedId) {
                             when (checkedId) {
                                 R.id.rb_close -> {
                                 R.id.rb_close -> {
@@ -173,14 +195,20 @@ class TestAdapter(var productList: MutableList<OtherEnum>) :
 
 
                         tvName.text = UiUtil.getStringRes(item!!.nameId)
                         tvName.text = UiUtil.getStringRes(item!!.nameId)
 
 
-                        var defaultValue = SpUtils.getString(item.mmkvName, item.default as String)
+                        val defaultValue = SpUtils.getString(item.mmkvName, item.default as String)
                         etValue.setText(defaultValue)
                         etValue.setText(defaultValue)
                         btnUpdate.setOnClickListener {
                         btnUpdate.setOnClickListener {
-                            val value = etValue.text.trim().toString()
+                            var value = etValue.text.trim().toString()
                             if (value == "") {
                             if (value == "") {
                                 ToastUtil.switchToastStyleToWarn("输入为空")
                                 ToastUtil.switchToastStyleToWarn("输入为空")
                                 return@setOnClickListener
                                 return@setOnClickListener
                             }
                             }
+                            if (item.mmkvName == MMKVName.LOGO_TEXT) {
+                                val invalidValues = setOf("1", "2", "7777", "0000")
+                                if (value !in invalidValues) {
+                                    value = "7777"
+                                }
+                            }
                             SpUtils.putString(item.mmkvName, value)
                             SpUtils.putString(item.mmkvName, value)
                             ToastUtil.switchToastStyleToSuccess(UiUtil.getStringRes(R.string.modific_success) + item.mmkvName)
                             ToastUtil.switchToastStyleToSuccess(UiUtil.getStringRes(R.string.modific_success) + item.mmkvName)
                         }
                         }
@@ -247,7 +275,7 @@ class TestAdapter(var productList: MutableList<OtherEnum>) :
                 }
                 }
             }).addItemType(
             }).addItemType(
             SLIDER_TYPE,
             SLIDER_TYPE,
-            object : OnMultiItemAdapterListener<OtherEnum, SliderVH> { // 类型 2
+            object : OnMultiItemAdapterListener<OtherEnum, SliderVH> { // 类型 4
                 override fun onCreate(
                 override fun onCreate(
                     context: Context,
                     context: Context,
                     parent: ViewGroup,
                     parent: ViewGroup,
@@ -398,7 +426,7 @@ class TestAdapter(var productList: MutableList<OtherEnum>) :
 
 
             }).addItemType(
             }).addItemType(
             BUTTON_TYPE,
             BUTTON_TYPE,
-            object : OnMultiItemAdapterListener<OtherEnum, ButtonVH> { // 类型 2
+            object : OnMultiItemAdapterListener<OtherEnum, ButtonVH> { // 类型 6
                 override fun onCreate(
                 override fun onCreate(
                     context: Context,
                     context: Context,
                     parent: ViewGroup,
                     parent: ViewGroup,

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

@@ -40,7 +40,7 @@ class LocalAlarmClockDialog(mContext: Context) :
         rgType.setOnCheckedChangeListener { group, checkedId ->
         rgType.setOnCheckedChangeListener { group, checkedId ->
             when (checkedId) {
             when (checkedId) {
                 R.id.rb_open_dev -> alarmclockTypeEnum = AlarmClockEnum.OPEN_DEV
                 R.id.rb_open_dev -> alarmclockTypeEnum = AlarmClockEnum.OPEN_DEV
-                R.id.rb_close_dev -> alarmclockTypeEnum = AlarmClockEnum.CLOSE_DEV
+//                R.id.rb_close_dev -> alarmclockTypeEnum = AlarmClockEnum.CLOSE_DEV
                 R.id.rb_open_sleep -> alarmclockTypeEnum = AlarmClockEnum.OPEN_SLEEP
                 R.id.rb_open_sleep -> alarmclockTypeEnum = AlarmClockEnum.OPEN_SLEEP
                 R.id.rb_close_sleep -> alarmclockTypeEnum = AlarmClockEnum.CLOSE_SLEEP
                 R.id.rb_close_sleep -> alarmclockTypeEnum = AlarmClockEnum.CLOSE_SLEEP
                 else -> {
                 else -> {

+ 3 - 0
module_backstage/src/main/java/com/module/backstage/fragment/other/SystemSettingsFragment.kt

@@ -18,6 +18,8 @@ import com.quyunshuo.sbm10.common.listener.AdapterClickListener
 import com.module.backstage.vm.SystemSettingsFragmentVM
 import com.module.backstage.vm.SystemSettingsFragmentVM
 import com.module.backstage.weight.HorizontalSpaceItemDecoration
 import com.module.backstage.weight.HorizontalSpaceItemDecoration
 import com.quyunshuo.sbm10.base.DialogClickListener
 import com.quyunshuo.sbm10.base.DialogClickListener
+import com.quyunshuo.sbm10.base.utils.SpUtils
+import com.quyunshuo.sbm10.common.constant.MMKVName
 import com.quyunshuo.sbm10.common.ui.BaseFragment
 import com.quyunshuo.sbm10.common.ui.BaseFragment
 import com.quyunshuo.sbm10.common.util.ToastUtil
 import com.quyunshuo.sbm10.common.util.ToastUtil
 import com.quyunshuo.sbm10.common.util.UiUtil
 import com.quyunshuo.sbm10.common.util.UiUtil
@@ -47,6 +49,7 @@ class SystemSettingsFragment : BaseFragment<BackstageFragmentSystemSettingsBindi
     var functionIndex=0
     var functionIndex=0
 
 
     override fun BackstageFragmentSystemSettingsBinding.initView() {
     override fun BackstageFragmentSystemSettingsBinding.initView() {
+        MMKVName.IS_SHOW_CHANGLOGE=false
         if (arguments!=null){
         if (arguments!=null){
             functionIndex = arguments?.getInt("FUNCTION")!!
             functionIndex = arguments?.getInt("FUNCTION")!!
         }
         }

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

@@ -38,10 +38,11 @@ class OtherFragmentVM @Inject constructor(private val mRepo: OtherFragmentRepo)
     val readAllDataSuccess: LiveData<Int> get() = _readAllDataSuccess
     val readAllDataSuccess: LiveData<Int> get() = _readAllDataSuccess
 
 
     fun search(searchText: CharSequence) {
     fun search(searchText: CharSequence) {
-        var isOpenChangLogo = SpUtils.getBoolean(
-            MMKVName.IS_SHOW_CHANGLOGE,
-            false
-        )
+//        var isOpenChangLogo = SpUtils.getBoolean(
+//            MMKVName.IS_SHOW_CHANGLOGE,
+//            false
+//        )
+        val isOpenChangLogo = MMKVName.IS_SHOW_CHANGLOGE
         list.clear()
         list.clear()
         val arrayList = mRepo.arrayList
         val arrayList = mRepo.arrayList
         XLogUtil.d("arrayList :$arrayList")
         XLogUtil.d("arrayList :$arrayList")

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

@@ -49,7 +49,8 @@ class SystemSettingsFragmentVM @Inject constructor(private val mRepo: SystemSett
                 return mRepo.changeSetList
                 return mRepo.changeSetList
             }
             }
             5 -> {
             5 -> {
-                if (SpUtils.getBoolean(MMKVName.IS_SHOW_CHANGLOGE, false) == true) {
+//                if (SpUtils.getBoolean(MMKVName.IS_SHOW_CHANGLOGE, false) == true) {
+                if (MMKVName.IS_SHOW_CHANGLOGE) {
                     return mRepo.otherSetListLogo
                     return mRepo.otherSetListLogo
                 }else{
                 }else{
                     return mRepo.otherSetList
                     return mRepo.otherSetList

+ 1 - 0
module_backstage/src/main/res/layout/backstage_dialog_local_alarm_clock.xml

@@ -199,6 +199,7 @@
                 android:textSize="50sp"/>
                 android:textSize="50sp"/>
 
 
             <RadioButton
             <RadioButton
+                android:visibility="gone"
                 android:id="@+id/rb_close_dev"
                 android:id="@+id/rb_close_dev"
                 android:layout_width="wrap_content"
                 android:layout_width="wrap_content"
                 android:padding="10dp"
                 android:padding="10dp"

+ 1 - 2
module_home/src/main/AndroidManifest.xml

@@ -89,10 +89,9 @@
 
 
         <service android:name="org.eclipse.paho.android.service.MqttService" />
         <service android:name="org.eclipse.paho.android.service.MqttService" />
 
 
-
         <receiver
         <receiver
             android:name=".receiver.TimedCleaningTaskAlarmReceiver"
             android:name=".receiver.TimedCleaningTaskAlarmReceiver"
-            android:exported="false">
+            android:exported="true">
             <intent-filter>
             <intent-filter>
                 <action android:name="android.intent.action.Timed_Cleaning_Task" />
                 <action android:name="android.intent.action.Timed_Cleaning_Task" />
             </intent-filter>
             </intent-filter>

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

@@ -95,9 +95,9 @@ class BuyFragment : BaseFragment<HomeFragmentBuyBinding, BuyFragmentVM>(),
         val logoIcon = SpUtils.getString(MMKVName.LOGO_TEXT, "7777")
         val logoIcon = SpUtils.getString(MMKVName.LOGO_TEXT, "7777")
         val enumByValue = LogoEnum.getEnumByValue(logoIcon!!)
         val enumByValue = LogoEnum.getEnumByValue(logoIcon!!)
         val layoutParams = ivLogo.layoutParams
         val layoutParams = ivLogo.layoutParams
-        enumByValue?.navId?.let { ivLogo.setImageResource(it) }
-        enumByValue?.width?.let { layoutParams.width = it }
-        enumByValue?.height?.let { layoutParams.height = it }
+        enumByValue.navId.let { ivLogo.setImageResource(it) }
+        enumByValue.width.let { layoutParams.width = it }
+        enumByValue.height.let { layoutParams.height = it }
     }
     }
 
 
     @Subscribe(threadMode = ThreadMode.MAIN)
     @Subscribe(threadMode = ThreadMode.MAIN)

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

@@ -176,9 +176,9 @@ class HomeFragment : BaseFragment<HomeFragmentHomeBinding, HomeFragmentVM>(), Vi
         val logoIcon = SpUtils.getString(MMKVName.LOGO_TEXT, "7777")
         val logoIcon = SpUtils.getString(MMKVName.LOGO_TEXT, "7777")
         val enumByValue = LogoEnum.getEnumByValue(logoIcon!!)
         val enumByValue = LogoEnum.getEnumByValue(logoIcon!!)
         val layoutParams = ivLogo.layoutParams
         val layoutParams = ivLogo.layoutParams
-        enumByValue?.navId?.let { ivLogo.setImageResource(it) }
-        enumByValue?.width?.let { layoutParams.width = it }
-        enumByValue?.height?.let { layoutParams.height = it }
+        enumByValue.navId.let { ivLogo.setImageResource(it) }
+        enumByValue.width.let { layoutParams.width = it }
+        enumByValue.height.let { layoutParams.height = it }
 
 
         NetWorkUtils.registerLister(
         NetWorkUtils.registerLister(
             this@HomeFragment.activity,
             this@HomeFragment.activity,

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

@@ -125,22 +125,23 @@ class MakeFragment : BaseFragment<HomeFragmentMakeBinding, MakeFragmentVM>(), Li
 //                }
 //                }
 //            }
 //            }
         }
         }
-        LongClickUtils.setLongClick(Handler(), ivLogo, 5000, object : View.OnLongClickListener {
+        LongClickUtils.setLongClick(Handler(), rlLogo, 5000, object : View.OnLongClickListener {
             override fun onLongClick(p0: View?): Boolean {
             override fun onLongClick(p0: View?): Boolean {
                 val findNavController = findNavController()
                 val findNavController = findNavController()
                 findNavController.navigate(R.id.home_action_home_makefragment_to_home_homefragment)
                 findNavController.navigate(R.id.home_action_home_makefragment_to_home_homefragment)
                 return true
                 return true
             }
             }
         })
         })
+
         //硬币清零
         //硬币清零
         restCoin()
         restCoin()
 
 
         val logoIcon = SpUtils.getString(MMKVName.LOGO_TEXT, "7777")
         val logoIcon = SpUtils.getString(MMKVName.LOGO_TEXT, "7777")
         val enumByValue = LogoEnum.getEnumByValue(logoIcon!!)
         val enumByValue = LogoEnum.getEnumByValue(logoIcon!!)
         val layoutParams = ivLogo.layoutParams
         val layoutParams = ivLogo.layoutParams
-        enumByValue?.navId?.let { ivLogo.setImageResource(it) }
-        enumByValue?.width?.let { layoutParams.width = it }
-        enumByValue?.height?.let { layoutParams.height = it }
+        enumByValue.navId.let { ivLogo.setImageResource(it) }
+        enumByValue.width.let { layoutParams.width = it }
+        enumByValue.height.let { layoutParams.height = it }
     }
     }
 
 
 //    private fun setMaterialValue(materialValue: String?) {
 //    private fun setMaterialValue(materialValue: String?) {

+ 9 - 3
module_home/src/main/java/com/quyunshuo/module/home/fragment/fragment/SleepFragment.kt

@@ -26,6 +26,7 @@ import com.quyunshuo.module.home.fragment.vm.SleepFragmentVM
 import com.quyunshuo.module.home.fragment.vm.UserLoginFragmentVM
 import com.quyunshuo.module.home.fragment.vm.UserLoginFragmentVM
 import com.quyunshuo.module.home.model.livedata.LiveDataBean
 import com.quyunshuo.module.home.model.livedata.LiveDataBean
 import com.quyunshuo.sbm10.base.utils.RegisterEventBus
 import com.quyunshuo.sbm10.base.utils.RegisterEventBus
+import com.quyunshuo.sbm10.base.utils.XLogUtil
 import com.quyunshuo.sbm10.common.constant.MqName
 import com.quyunshuo.sbm10.common.constant.MqName
 import com.quyunshuo.sbm10.common.constant.event.ApiMessageEvent
 import com.quyunshuo.sbm10.common.constant.event.ApiMessageEvent
 import dagger.hilt.android.AndroidEntryPoint
 import dagger.hilt.android.AndroidEntryPoint
@@ -66,10 +67,15 @@ class SleepFragment : BaseFragment<HomeFragmentSleepBlockBinding, SleepFragmentV
         val logoIcon = SpUtils.getString(MMKVName.LOGO_TEXT, "7777")
         val logoIcon = SpUtils.getString(MMKVName.LOGO_TEXT, "7777")
         val enumByValue = LogoEnum.getEnumByValue(logoIcon!!)
         val enumByValue = LogoEnum.getEnumByValue(logoIcon!!)
         val layoutParams = ivLogo.layoutParams
         val layoutParams = ivLogo.layoutParams
-        enumByValue?.navId?.let { ivLogo.setImageResource(it) }
-        enumByValue?.width?.let { layoutParams.width = it }
-        enumByValue?.height?.let { layoutParams.height = it }
+        enumByValue.navId.let { ivLogo.setImageResource(it) }
+        enumByValue.width.let { layoutParams.width = it }
+        enumByValue.height.let { layoutParams.height = it }
         mBinding.tvTitle.text = sleepText
         mBinding.tvTitle.text = sleepText
+        val deviceId = XLogUtil.getDeviceId()
+        if (deviceId.isNotEmpty()) {
+            tvClientId.text =
+                UiUtil.getStringRes(R.string.home_dev_id) + deviceId.substring(deviceId.length - 6)
+        }
     }
     }
 
 
     @Subscribe(threadMode = ThreadMode.MAIN)
     @Subscribe(threadMode = ThreadMode.MAIN)

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

@@ -6,12 +6,19 @@ import android.content.Intent;
 import android.text.format.DateFormat;
 import android.text.format.DateFormat;
 import android.util.Log;
 import android.util.Log;
 
 
+import androidx.annotation.NonNull;
+
+import com.quyunshuo.sbm10.base.utils.XLogUtil;
+import com.quyunshuo.sbm10.common.constant.Heartbeat;
 import com.quyunshuo.sbm10.common.constant.MqName;
 import com.quyunshuo.sbm10.common.constant.MqName;
 import com.quyunshuo.sbm10.common.constant.event.ApiMessageEvent;
 import com.quyunshuo.sbm10.common.constant.event.ApiMessageEvent;
 import com.quyunshuo.sbm10.common.enums.AlarmClockEnum;
 import com.quyunshuo.sbm10.common.enums.AlarmClockEnum;
 
 
 import org.greenrobot.eventbus.EventBus;
 import org.greenrobot.eventbus.EventBus;
 
 
+import java.net.URL;
+import java.net.URLConnection;
+import java.util.HashMap;
 /**
 /**
  * 监听并启动定时清洗任务广播.
  * 监听并启动定时清洗任务广播.
  */
  */
@@ -30,20 +37,49 @@ public class TimedCleaningTaskAlarmReceiver extends BroadcastReceiver {
       if ("0".equals(msg)) {
       if ("0".equals(msg)) {
             //开机了则不能开机了。
             //开机了则不能开机了。
             //LogUtils.logWrite("定时开机:"+open);
             //LogUtils.logWrite("定时开机:"+open);
-            EventBus.getDefault().post(new ApiMessageEvent(AlarmClockEnum.OPEN_DEV.getCode(), "开机"));
-        } else if ("1".equals(msg)) {
-            //开启一个定时闹钟,1.弹窗。2.倒计时。3.关机 4.结束弹窗
-            EventBus.getDefault().post(new ApiMessageEvent(AlarmClockEnum.CLOSE_DEV.getCode(), "关机"));
-        } else if ("1show".equals(msg)) {
-            EventBus.getDefault().post(new ApiMessageEvent(AlarmClockEnum.CLOSE_DEV.getCode() + "show", "关机"));
+//          EventBus.getDefault().post(new ApiMessageEvent(AlarmClockEnum.OPEN_DEV.getContent(), "开机"));
+          String ld;
+          try {
+              URL url = new URL("http://time.tianqi.com/");
+              URLConnection uc = url.openConnection();
+              uc.connect();
+              ld = String.valueOf(uc.getDate());
+          } catch (Exception e) {
+              ld = "0";
+          }
+          HashMap<String,String> responseContent = new HashMap<>();
+          responseContent.put("netTime",ld);
+          responseContent.put("eqeStatus","1");
+          HashMap<String, Object> map = getHashMap(responseContent,"eqeStatus");
+          EventBus.getDefault().post(new ApiMessageEvent(MqName.INSTANCE.getEQESTATUS(), map));
+//        } else if ("1".equals(msg)) {
+//            //开启一个定时闹钟,1.弹窗。2.倒计时。3.关机 4.结束弹窗
+//            EventBus.getDefault().post(new ApiMessageEvent(AlarmClockEnum.CLOSE_DEV.getCode(), "关机"));
+//        } else if ("1show".equals(msg)) {
+//            EventBus.getDefault().post(new ApiMessageEvent(AlarmClockEnum.CLOSE_DEV.getCode() + "show", "关机"));
         } else if ("2".equals(msg)) {
         } else if ("2".equals(msg)) {
             //LogUtils.logWrite("休眠2?:"+msg);
             //LogUtils.logWrite("休眠2?:"+msg);
-            //睡眠
-            EventBus.getDefault().post(new ApiMessageEvent(MqName.INSTANCE.getSLEEP(), "1"));
+          HashMap<String, Object> map = getHashMap("1","sleep");
+          //睡眠
+            EventBus.getDefault().post(new ApiMessageEvent(MqName.INSTANCE.getSLEEP(), map));
+          XLogUtil.INSTANCE.d("定时开启休眠");
         } else if ("3".equals(msg)) {
         } else if ("3".equals(msg)) {
-            //LogUtils.logWrite("休眠3?:"+msg);
+          HashMap<String, Object> map = getHashMap("0","sleep");
             //唤醒。
             //唤醒。
-            EventBus.getDefault().post(new ApiMessageEvent(MqName.INSTANCE.getSLEEP(), "0"));
+            EventBus.getDefault().post(new ApiMessageEvent(MqName.INSTANCE.getSLEEP(), map));
+          XLogUtil.INSTANCE.d("定时关闭休眠");
         }
         }
     }
     }
+
+    private static @NonNull HashMap<String, Object> getHashMap(Object state,String operation) {
+        HashMap<String ,Object> map = new HashMap<>();
+        map.put("responseContent", state);
+        map.put("statusCode",200);
+        map.put("clientId", Heartbeat.INSTANCE.getDeviceId());
+        map.put("timestamp",System.currentTimeMillis());
+        map.put("operation",operation);
+        map.put("direction",2);
+        return map;
+    }
+
 }
 }

+ 20 - 0
module_home/src/main/java/com/quyunshuo/module/home/service/GlobalService.kt

@@ -6,6 +6,7 @@ import android.app.NotificationChannel
 import android.app.NotificationManager
 import android.app.NotificationManager
 import android.content.Context
 import android.content.Context
 import android.content.Intent
 import android.content.Intent
+import android.content.IntentFilter
 import android.media.AudioManager
 import android.media.AudioManager
 import android.os.Build
 import android.os.Build
 import android.os.IBinder
 import android.os.IBinder
@@ -27,6 +28,7 @@ import com.quyunshuo.module.home.bean.WarningBean
 import com.quyunshuo.module.home.dialog.CountDownDialogFragment
 import com.quyunshuo.module.home.dialog.CountDownDialogFragment
 import com.quyunshuo.module.home.dialog.WarringDialog
 import com.quyunshuo.module.home.dialog.WarringDialog
 import com.quyunshuo.module.home.receiver.MqttHelper
 import com.quyunshuo.module.home.receiver.MqttHelper
+import com.quyunshuo.module.home.receiver.TimedCleaningTaskAlarmReceiver
 import com.quyunshuo.sbm10.base.DialogClickListener
 import com.quyunshuo.sbm10.base.DialogClickListener
 import com.quyunshuo.sbm10.base.ktx.observeLiveData
 import com.quyunshuo.sbm10.base.ktx.observeLiveData
 import com.quyunshuo.sbm10.base.utils.GsonUtil
 import com.quyunshuo.sbm10.base.utils.GsonUtil
@@ -39,6 +41,7 @@ import com.quyunshuo.sbm10.common.constant.Heartbeat
 import com.quyunshuo.sbm10.common.constant.MMKVName
 import com.quyunshuo.sbm10.common.constant.MMKVName
 import com.quyunshuo.sbm10.common.constant.MqName
 import com.quyunshuo.sbm10.common.constant.MqName
 import com.quyunshuo.sbm10.common.constant.event.ApiMessageEvent
 import com.quyunshuo.sbm10.common.constant.event.ApiMessageEvent
+import com.quyunshuo.sbm10.common.util.AlarmManagerUtil.ALARM_ACTION
 import com.quyunshuo.sbm10.common.util.ToastUtil
 import com.quyunshuo.sbm10.common.util.ToastUtil
 import com.quyunshuo.sbm10.common.util.UiUtil
 import com.quyunshuo.sbm10.common.util.UiUtil
 import dagger.hilt.android.AndroidEntryPoint
 import dagger.hilt.android.AndroidEntryPoint
@@ -80,10 +83,16 @@ class GlobalService : LifecycleService() {
 
 
     @Inject
     @Inject
     lateinit var mqttHelper: MqttHelper
     lateinit var mqttHelper: MqttHelper
+    var alarmReceiver: TimedCleaningTaskAlarmReceiver? = null
 
 
     @SuppressLint("ForegroundServiceType")
     @SuppressLint("ForegroundServiceType")
     override fun onCreate() {
     override fun onCreate() {
         super.onCreate()
         super.onCreate()
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+            alarmReceiver = TimedCleaningTaskAlarmReceiver()
+            val filter = IntentFilter(ALARM_ACTION)
+            registerReceiver(alarmReceiver, filter)
+        }
         val notificationManager = getSystemService(NOTIFICATION_SERVICE) as NotificationManager
         val notificationManager = getSystemService(NOTIFICATION_SERVICE) as NotificationManager
 
 
         //创建NotificationChannel
         //创建NotificationChannel
@@ -479,6 +488,16 @@ class GlobalService : LifecycleService() {
             }
             }
 
 
             MqName.EQESTATUS->{
             MqName.EQESTATUS->{
+                Log.d(TAG, " MqName.EQESTATUSevent: "+messageEvent.data)
+                val map = Gson().fromJson(messageEvent.data.toString(), JsonObject::class.java)
+                val response= map.getAsJsonObject("responseContent")
+                val eqeStatus = GsonUtil.getAsString(response,"eqeStatus","0")
+                Log.d(TAG, "eventeqeStatus: "+eqeStatus)
+                if (eqeStatus=="1"){
+                    globalServiceViewModel.threadGlobalParam.stopUp()
+                    globalServiceViewModel.threadGlobalParam.startUp()
+                    Log.d(TAG, "event: startUp")
+                }
                 mqttHelper.sendData("response", Gson().toJson(messageEvent.data))
                 mqttHelper.sendData("response", Gson().toJson(messageEvent.data))
             }
             }
 
 
@@ -521,6 +540,7 @@ class GlobalService : LifecycleService() {
     override fun onDestroy() {
     override fun onDestroy() {
         super.onDestroy()
         super.onDestroy()
         EventBus.getDefault().unregister(this)
         EventBus.getDefault().unregister(this)
+        alarmReceiver?.let { unregisterReceiver(it) }
     }
     }
 
 
     override fun onBind(intent: Intent?): IBinder? {
     override fun onBind(intent: Intent?): IBinder? {

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

@@ -456,9 +456,11 @@ class GlobalServiceViewModel @Inject constructor(
         Log.d(TAG, "cmdHeartbeat1: " + messageEvent.data)
         Log.d(TAG, "cmdHeartbeat1: " + messageEvent.data)
         SBCHeartbeat.devCode = messageEvent.data.substring(0, 2)//p10机器状态码
         SBCHeartbeat.devCode = messageEvent.data.substring(0, 2)//p10机器状态码
         if (SBCHeartbeat.devCode == "01") {
         if (SBCHeartbeat.devCode == "01") {
+            threadGlobalParam.stopUp()
             if (!isLoadDevOpen) {
             if (!isLoadDevOpen) {
                 Log.d(TAG, "cmdHeartbeat: MMKVName.OPEN_DEV")
                 Log.d(TAG, "cmdHeartbeat: MMKVName.OPEN_DEV")
                 isLoadDevOpen = true
                 isLoadDevOpen = true
+                SpUtils.putString(MMKVName.OPEN_DEV,"1")
             }
             }
         }else {
         }else {
             isLoadDevOpen = false
             isLoadDevOpen = false

+ 3 - 2
module_home/src/main/java/com/quyunshuo/module/home/service/MqService.kt

@@ -248,7 +248,7 @@ class MqService : Service() {
                     uc.connect() // 发出连接
                     uc.connect() // 发出连接
                     ld = uc.date.toString() // 取得网站日期时间
                     ld = uc.date.toString() // 取得网站日期时间
                 }catch (e:Exception){
                 }catch (e:Exception){
-                    ld = ""
+                    ld = "0"
                 }
                 }
 
 
                 val responseContent = hashMapOf(
                 val responseContent = hashMapOf(
@@ -306,13 +306,14 @@ class MqService : Service() {
         val sweet = materialHashMap["sweet"].toString()
         val sweet = materialHashMap["sweet"].toString()
         val salty = materialHashMap["salty"].toString()
         val salty = materialHashMap["salty"].toString()
         val box = materialHashMap["box"].toString()
         val box = materialHashMap["box"].toString()
+        val eqeState= SpUtils.getString(MMKVName.OPEN_DEV,"0").toString()
         val heartbeatBean = HeartbeatBean(
         val heartbeatBean = HeartbeatBean(
             "0",
             "0",
             "0",
             "0",
             SBCHeartbeat.cabinetTm,
             SBCHeartbeat.cabinetTm,
             "0",
             "0",
             Heartbeat.clientId.toString(),
             Heartbeat.clientId.toString(),
-            "0",
+            eqeState,
             "0",
             "0",
             "0",
             "0",
             "0",
             "0",

+ 16 - 11
module_home/src/main/java/com/quyunshuo/module/home/utils/RemotePushUtil.kt

@@ -10,9 +10,6 @@ import android.util.Log
 import com.google.gson.Gson
 import com.google.gson.Gson
 import com.hboxs.serialport.plc.message.Message
 import com.hboxs.serialport.plc.message.Message
 import com.hboxs.serialport.plc.thread.ThreadSettingParam
 import com.hboxs.serialport.plc.thread.ThreadSettingParam
-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.http.ResponseInfo
 import com.qiniu.android.storage.UpCompletionHandler
 import com.qiniu.android.storage.UpCompletionHandler
 import com.qiniu.android.storage.UploadManager
 import com.qiniu.android.storage.UploadManager
@@ -270,15 +267,23 @@ class RemotePushUtil @Inject constructor() {
             }
             }
 
 
             MqName.EQESTATUS->{
             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")
-                        )
+                //开机了则不能开机了。
+                //LogUtils.logWrite("定时开机:"+open);
+//          EventBus.getDefault().post(new ApiMessageEvent(AlarmClockEnum.OPEN_DEV.getContent(), "开机"));
+                var ld: String
+                try {
+                    val url = URL("http://time.tianqi.com/")
+                    val uc = url.openConnection()
+                    uc.connect()
+                    ld = uc.date.toString()
+                } catch (e: Exception) {
+                    ld = "0"
                 }
                 }
+                val responseContent = hashMapOf(
+                    "netTime" to ld,
+                    "eqeStatus" to DataBean.kind_data
+                )
+                val map =setMap(msgId,responseContent)
                 EventBus.getDefault().post(ApiMessageEvent(MqName.EQESTATUS, map))
                 EventBus.getDefault().post(ApiMessageEvent(MqName.EQESTATUS, map))
             }
             }
             MqName.OPENDOOR->{
             MqName.OPENDOOR->{

+ 14 - 8
module_home/src/main/res/layout/home_fragment_make.xml

@@ -21,15 +21,21 @@
         android:layout_height="200dp"
         android:layout_height="200dp"
         android:background="@drawable/userbottom_bg"/>
         android:background="@drawable/userbottom_bg"/>
 
 
-    <ImageView
-        android:id="@+id/iv_logo"
-        android:layout_width="350dp"
-        android:layout_height="150dp"
-        android:layout_marginLeft="20dp"
-        android:layout_marginTop="20dp"
-        android:src="@drawable/logo_sevencloud"
+    <RelativeLayout
+        android:id="@+id/rl_logo"
+        android:layout_width="450dp"
+        android:layout_height="250dp"
         app:layout_constraintStart_toStartOf="parent"
         app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintTop_toTopOf="parent" />
+        app:layout_constraintTop_toTopOf="parent">
+
+        <ImageView
+            android:id="@+id/iv_logo"
+            android:layout_width="350dp"
+            android:layout_height="150dp"
+            android:layout_marginLeft="20dp"
+            android:layout_marginTop="20dp"
+            android:src="@drawable/logo_sevencloud" />
+    </RelativeLayout>
 
 
     <com.quyunshuo.module.home.weight.ProgressView
     <com.quyunshuo.module.home.weight.ProgressView
         android:id="@+id/progressView"
         android:id="@+id/progressView"

+ 30 - 0
module_home/src/main/res/layout/home_fragment_sleep_block.xml

@@ -12,6 +12,8 @@
         android:layout_height="wrap_content"
         android:layout_height="wrap_content"
         android:text="@string/device_sleep"
         android:text="@string/device_sleep"
         android:gravity="center"
         android:gravity="center"
+        android:textStyle="bold"
+        android:letterSpacing="0.1"
         android:textColor="@color/white"
         android:textColor="@color/white"
         android:textSize="100sp"
         android:textSize="100sp"
         app:layout_constraintBottom_toBottomOf="parent"
         app:layout_constraintBottom_toBottomOf="parent"
@@ -41,5 +43,33 @@
         android:layout_marginTop="20dp"
         android:layout_marginTop="20dp"
         android:src="@drawable/logo_sevencloud" />
         android:src="@drawable/logo_sevencloud" />
     </RelativeLayout>
     </RelativeLayout>
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:id="@+id/cl_home_time"
+        android:layout_width="550dp"
+        android:layout_height="250dp"
+        android:layout_marginTop="20dp"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintTop_toTopOf="parent">
+
+        <TextView
+            android:id="@+id/tv_time"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="2024-07-21 21:06:23"
+            android:textColor="@color/white"
+            android:textSize="50sp"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+        <TextView
+            android:id="@+id/tv_clientId"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="@string/home_dev_id"
+            android:textColor="@color/white"
+            android:textSize="50sp"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toBottomOf="@+id/tv_time" />
+    </androidx.constraintlayout.widget.ConstraintLayout>
 
 
 </androidx.constraintlayout.widget.ConstraintLayout>
 </androidx.constraintlayout.widget.ConstraintLayout>

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

@@ -7,6 +7,7 @@ import androidx.lifecycle.OnLifecycleEvent
 import com.hboxs.serialport.sbc.VboxSerialPortSendQueue
 import com.hboxs.serialport.sbc.VboxSerialPortSendQueue
 import com.hboxs.serialport.sbc.frame.VboxCommand
 import com.hboxs.serialport.sbc.frame.VboxCommand
 import com.hboxs.serialport.sbc.frame.VboxWriteCommand
 import com.hboxs.serialport.sbc.frame.VboxWriteCommand
+import com.quyunshuo.sbm10.base.utils.XLogUtil
 import com.quyunshuo.sbm10.common.constant.MqName
 import com.quyunshuo.sbm10.common.constant.MqName
 import com.quyunshuo.sbm10.common.constant.event.ApiMessageEvent
 import com.quyunshuo.sbm10.common.constant.event.ApiMessageEvent
 import kotlinx.coroutines.CoroutineScope
 import kotlinx.coroutines.CoroutineScope
@@ -16,9 +17,10 @@ import kotlinx.coroutines.delay
 import kotlinx.coroutines.launch
 import kotlinx.coroutines.launch
 import org.greenrobot.eventbus.EventBus
 import org.greenrobot.eventbus.EventBus
 
 
-class ThreadGlobalParam: LifecycleObserver {
+class ThreadGlobalParam : LifecycleObserver {
 
 
     private val TAG = "ThreadGeneralParam"
     private val TAG = "ThreadGeneralParam"
+
     //初始化
     //初始化
     var jobSbcInit: Job? = null
     var jobSbcInit: Job? = null
         get() = field
         get() = field
@@ -27,6 +29,7 @@ class ThreadGlobalParam: LifecycleObserver {
         set(value) {
         set(value) {
             field = value
             field = value
         }
         }
+
     //读取心跳
     //读取心跳
     var jobHeartbeat: Job? = null
     var jobHeartbeat: Job? = null
         get() = field
         get() = field
@@ -53,10 +56,51 @@ class ThreadGlobalParam: LifecycleObserver {
         set(value) {
         set(value) {
             field = value
             field = value
         }
         }
+    var jobStartUp: Job? = null
+        get() = field
+    var isActiveStartUp: Boolean = true
+        get() = field
+        set(value) {
+            field = value
+        }
+
+    private var startUpNumber = 0
+
+    /**
+     * 开机
+     */
+    fun startUp() {
+        stopUp()
+        isActiveStartUp = true
+        startUpNumber = 0
+        // 启动协程
+        jobStartUp = CoroutineScope(Dispatchers.Main).launch {
+            while (isActiveStartUp) {
+                if (startUpNumber < 5) {
+                    VboxSerialPortSendQueue.getInstance()
+                        .sendCommand(
+                            VboxWriteCommand(
+                                VboxCommand.CMD_ON_OFF, VboxCommand.DEBUG_ID + "0100"
+                            )
+                        )
+                    delay(2000) // 每隔0.3秒重复执行
+                    startUpNumber++
+                } else {
+                    stopUp()
+                    XLogUtil.d("远程或本地闹钟开机失败")
+                }
+            }
+        }
+    }
+
+    fun stopUp() {
+        isActiveStartUp = false
+        jobStartUp?.cancel()
+    }
 
 
     fun startInit() {
     fun startInit() {
         stopInit()
         stopInit()
-        isActiveSbcInit=true
+        isActiveSbcInit = true
         // 启动协程
         // 启动协程
         jobSbcInit = CoroutineScope(Dispatchers.Main).launch {
         jobSbcInit = CoroutineScope(Dispatchers.Main).launch {
             while (isActiveSbcInit) {
             while (isActiveSbcInit) {
@@ -70,8 +114,8 @@ class ThreadGlobalParam: LifecycleObserver {
         }
         }
     }
     }
 
 
-    fun stopInit(){
-        isActiveSbcInit=false
+    fun stopInit() {
+        isActiveSbcInit = false
         jobSbcInit?.cancel()
         jobSbcInit?.cancel()
     }
     }
 
 
@@ -95,19 +139,24 @@ class ThreadGlobalParam: LifecycleObserver {
 
 
     fun startPreheatOff() {
     fun startPreheatOff() {
         stopPreheatOff()
         stopPreheatOff()
-        isActivePreheatOff=true
+        isActivePreheatOff = true
         // 启动协程
         // 启动协程
         jobPreheatOff = CoroutineScope(Dispatchers.Main).launch {
         jobPreheatOff = CoroutineScope(Dispatchers.Main).launch {
             while (isActivePreheatOff) {
             while (isActivePreheatOff) {
                 VboxSerialPortSendQueue.getInstance()
                 VboxSerialPortSendQueue.getInstance()
-                    .sendCommand(VboxWriteCommand(VboxCommand.CMD_IO,
-                        VboxCommand.DEBUG_ID+"0500"))
+                    .sendCommand(
+                        VboxWriteCommand(
+                            VboxCommand.CMD_IO,
+                            VboxCommand.DEBUG_ID + "0500"
+                        )
+                    )
                 // 执行定时任务的操作
                 // 执行定时任务的操作
                 Log.d(TAG, "startPreheat: 发送预热关闭")
                 Log.d(TAG, "startPreheat: 发送预热关闭")
                 delay(1000) // 每隔1秒重复执行
                 delay(1000) // 每隔1秒重复执行
             }
             }
         }
         }
     }
     }
+
     fun stopPreheatOff() {
     fun stopPreheatOff() {
         jobPreheatOff?.cancel()
         jobPreheatOff?.cancel()
     }
     }
@@ -117,9 +166,9 @@ class ThreadGlobalParam: LifecycleObserver {
         // 启动协程
         // 启动协程
         jobBackData = CoroutineScope(Dispatchers.Main).launch {
         jobBackData = CoroutineScope(Dispatchers.Main).launch {
             while (isActiveBackData) {
             while (isActiveBackData) {
-                EventBus.getDefault().post(ApiMessageEvent(MqName.HEARTBEAT,""))
+                EventBus.getDefault().post(ApiMessageEvent(MqName.HEARTBEAT, ""))
                 Log.d(TAG, "startBackData: ")
                 Log.d(TAG, "startBackData: ")
-                delay(1000*60*5) // 每隔5分钟重复执行
+                delay(1000 * 60 * 5) // 每隔5分钟重复执行
             }
             }
         }
         }
     }
     }
@@ -134,6 +183,7 @@ class ThreadGlobalParam: LifecycleObserver {
     @OnLifecycleEvent(Lifecycle.Event.ON_STOP)
     @OnLifecycleEvent(Lifecycle.Event.ON_STOP)
     fun destroy() {
     fun destroy() {
         //避免线程池关不掉
         //避免线程池关不掉
+        stopUp()
         stopInit()
         stopInit()
         stopHeartbeat()
         stopHeartbeat()
         stopPreheatOff()
         stopPreheatOff()