فهرست منبع

优化购物车逻辑,报警逻辑。

ccc 4 ماه پیش
والد
کامیت
1416390a05
22فایلهای تغییر یافته به همراه212 افزوده شده و 80 حذف شده
  1. 1 0
      app/src/main/AndroidManifest.xml
  2. 2 3
      buildSrc/src/main/kotlin/com/quyunshuo/androidbaseframemvvm/buildsrc/ProjectBuildConfig.kt
  3. 1 1
      lib_common/src/main/java/com/quyunshuo/androidbaseframemvvm/common/constant/MMKVName.kt
  4. 78 0
      lib_common/src/main/java/com/quyunshuo/androidbaseframemvvm/common/util/LogUtils.java
  5. 2 2
      lib_common/src/main/java/com/quyunshuo/androidbaseframemvvm/common/util/XLogUtil.kt
  6. 1 1
      module_backstage/src/main/java/com/module/backstage/activity/setting/SettingActivity.kt
  7. 5 9
      module_backstage/src/main/java/com/module/backstage/activity/setting/SettingViewModel.kt
  8. 15 4
      module_backstage/src/main/java/com/module/backstage/fragment/param/DebugParamFragment.kt
  9. 9 4
      module_backstage/src/main/java/com/module/backstage/vm/DebugParamFragmentVM.kt
  10. 1 1
      module_backstage/src/main/res/layout/backstage_activity_setting.xml
  11. 43 21
      module_home/src/main/java/com/quyunshuo/module/home/fragment/fragment/MakeFragment.kt
  12. 12 13
      module_home/src/main/java/com/quyunshuo/module/home/fragment/vm/HomeFragmentVM.kt
  13. 3 1
      module_home/src/main/java/com/quyunshuo/module/home/service/GlobalService.kt
  14. 5 2
      module_home/src/main/java/com/quyunshuo/module/home/service/GlobalServiceViewModel.kt
  15. 2 2
      module_home/src/main/java/com/quyunshuo/module/home/service/MqService.kt
  16. 1 2
      module_home/src/main/java/com/quyunshuo/module/home/service/MqServiceRepository.kt
  17. 5 3
      module_home/src/main/res/layout/home_fragment_buy.xml
  18. 3 0
      module_pay/src/main/java/com/module/pay/strategy/SerialPortICTRS232Strategy.kt
  19. 13 7
      serialport-api/src/main/java/com/hboxs/serialport/plc/thread/ThreadHomeParam.kt
  20. 4 3
      serialport-api/src/main/java/com/hboxs/serialport/sbc/VboxSerialPortReadThread.java
  21. 2 1
      serialport-api/src/main/java/com/hboxs/serialport/sbc/VboxSerialPortSendQueue.java
  22. 4 0
      serialport-api/src/main/java/com/hboxs/serialport/sbc/frame/VboxCommand.java

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

@@ -20,6 +20,7 @@
         android:roundIcon="@mipmap/ic_launcher_round"
         android:supportsRtl="true"
         android:theme="@style/base_AppTheme"
+        android:requestLegacyExternalStorage="true"
         tools:ignore="UnusedAttribute">
 
         <service android:name="com.quyunshuo.module.home.service.GlobalService" />

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

@@ -10,11 +10,10 @@ object ProjectBuildConfig {
     const val compileSdkVersion = 34
     const val applicationId = "com.quyunshuo.androidbaseframemvvm"
     const val minSdkVersion = 21
-    const val targetSdkVersion = 34
+    const val targetSdkVersion = 29
     const val versionCode = 1
-    const val versionName = "1.0.0"
+    const val versionName = "1.0.1"
     const val isAppMode = false
-
     /**
      * 项目当前的版本状态
      * 该状态直接反映当前App是测试版 还是正式版 或者预览版

+ 1 - 1
lib_common/src/main/java/com/quyunshuo/androidbaseframemvvm/common/constant/MMKVName.kt

@@ -7,7 +7,7 @@ abstract class MMKVName {
 
     companion object {
 
-        var APP_VERSION: Int = 0 //区分国内外版本
+        var APP_VERSION: Int = 2 //区分国内外版本
 
         val PAY_TYPE: String
             get() = "PAY_TYPE"//支付方式

+ 78 - 0
lib_common/src/main/java/com/quyunshuo/androidbaseframemvvm/common/util/LogUtils.java

@@ -0,0 +1,78 @@
+package com.quyunshuo.androidbaseframemvvm.common.util;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+public class LogUtils {
+    private static SimpleDateFormat format = new SimpleDateFormat("MM-dd HH:mm:ss");
+    private static FileOutputStream mFileOutputStream;
+    public static final long SEVENT_DAYS = 604800000;//7天的毫秒数
+
+    /**
+     * 写入数据
+     * @param logDate
+     */
+    public static void logWrite(String logDate){
+        String content = format.format(new Date(System.currentTimeMillis()))+":" + logDate + "\r\n";
+        try {
+            mFileOutputStream = new FileOutputStream(createLogFile(), true);
+            mFileOutputStream.write(content.getBytes());
+            mFileOutputStream.close();
+        } catch (Exception e) {
+        }finally {
+            try {
+                if (mFileOutputStream != null) {
+                    mFileOutputStream.close();
+                }
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+    }
+
+    /**
+     * 删除超过7天的log文件
+     */
+    public static void pastDueLog() {
+        File logFolder = new File(FileUtil.INSTANCE.getFILEPATH());
+        if (logFolder.exists()) {
+            File[] logFiles = logFolder.listFiles();
+            if (logFiles == null) {
+                return;
+            }
+            for (File file : logFiles) {
+                SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
+                String nowDate = format.format(new Date(System.currentTimeMillis()));
+                try {
+                    String replace = file.getName().replace("-" + "p10"  + ".txt", "");
+                    Date dateFile = format.parse(replace);
+                    Date dataNow = format.parse(nowDate);
+                    long fileTime = dateFile.getTime();
+                    long nowTime = dataNow.getTime();
+                    if (nowTime - fileTime > SEVENT_DAYS) {
+                        //如果超过7天,我们就进行删除指定的文件,否则就什么都不做。
+                        //删除
+                        file.delete();
+                    }
+                } catch (ParseException e) {
+                    //604800000 7天
+                    e.printStackTrace();
+                }
+
+            }
+        }
+    }
+
+    /**
+     * 創建log文件,以及文件的路径。
+     */
+    public static File createLogFile() {
+        return FileUtil.INSTANCE.makeFilePath(FileUtil.INSTANCE.getFILEPATH(), FileUtil.INSTANCE.getFileName());
+    }
+
+
+}

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

@@ -33,8 +33,8 @@ object XLogUtil {
         val androidPrinter =
             AndroidPrinter(true)
 
-        val logFolder ="/storage/emulated/0/logdata/"
-//            Environment.getExternalStorageDirectory().path.toString() + "/logdata"
+        val logFolder =
+            Environment.getExternalStorageDirectory().path.toString() + "/logdata"
         val filePrinter = FilePrinter.Builder(logFolder)
             .fileNameGenerator(DateFileNameGenerator())//日志文件名格式
             .backupStrategy(FileSizeBackupStrategy((500 * 1024 * 1024).toLong()))//单个日志文件的大小默认:FileSizeBackupStrategy(1024 * 1024) 500MB

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

@@ -152,6 +152,7 @@ class SettingActivity : BaseActivity<BackstageActivitySettingBinding, SettingVie
         mBinding.tvSoftwareVersion.text = "软件版本号:"+SBCHeartbeat.softwareVersion
         mBinding.tvCrateVersion.text = "机箱版本号:"+SBCHeartbeat.crateVersion
 //        mBinding.tvDevDogtag.text ="铭牌号:"+ SBCHeartbeat.devDogtag
+        mBinding.tvAppVersion.text=  "App版本号:"+packageManager.getPackageInfo(packageName, 0).versionName
         mViewModel.getParamData();//读取参数
     }
 
@@ -385,7 +386,6 @@ class SettingActivity : BaseActivity<BackstageActivitySettingBinding, SettingVie
                         Log.d(TAG, "onClickListener: ")
                         showLoading()
                         mViewModel.threadSettingParam.startUp()
-                        Heartbeat.isAlarm=true
                     }
                     else -> {}
                 }

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

@@ -136,21 +136,16 @@ class SettingViewModel @Inject constructor(private val mRepo: SettingRepository)
         val versionCode = getVersionCode()
         //下载的版本号
         val version: Int = apkInfoBean.version
-        if (versionCode > version) {
-            //当前版本号小于等于下载的版本号,则不提示更新
-            Log.d(
-                TAG,
-                "apkInfoSuccess: 当前版本号小于等于下载的版本号" + versionCode + ":" + version
-            )
+        if (versionCode >= version) {
+            //当前版本号大于等于下载的版本号,则不提示更新
+            Log.d(TAG, "apkInfoSuccess: 当前版本号小于等于下载的版本号" + versionCode + ":" + version)
         } else {
-            //当前版本号于下载的版本号,则要提示更新
+            //当前版本号小于下载的版本号,则要提示更新
             Log.d(TAG, "apkInfoSuccess: 当前版本号大于下载的版本号")
             _apkInfo.value = apkInfoBean
-
         }
     }
 
-
     private fun initDevSuccess(result: String) {
         /*
             这里的逻辑:
@@ -292,6 +287,7 @@ class SettingViewModel @Inject constructor(private val mRepo: SettingRepository)
                 threadSettingParam.stopUp()
                 threadSettingParam.isActiveM3 = false
                 _isM3Success.value = true
+                Heartbeat.isAlarm=true
             }
 
             else -> _isM3Success.value = false

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

@@ -100,6 +100,7 @@ class DebugParamFragment :
     private fun refreshPage(b: Boolean?) {
         debugParamAdapter?.setState(mViewModel._paramDataMap)
         debugParamAdapter?.notifyDataSetChanged()
+        Log.d(TAG, "refreshPage: 控件刷新")
     }
 
 
@@ -113,12 +114,22 @@ class DebugParamFragment :
         Log.d(TAG, "paramDataList0: "+lis)
         while (i < len) {
             when (i) {
+//                5 -> {
+//                    if (lis[9]=="0"){
+//                        getValue(lis, i, 4)
+//                    }else{
+//                        getValue(lis, i, 5)
+//                    }
+//                }
+//                8 ->{
+//                    if (lis[9]=="0"){
+//                        getValue(lis, i, 6)
+//                    }else{
+//                        getValue(lis, i, 7)
+//                    }
+//                }
                 0-> getValue(lis, i, 8)
                 1 -> getValue(lis, i, 10)
-                9 -> getValue(lis, i, 4)
-                8 -> getValue(lis, i, 5)
-                4 -> getValue(lis, i, 6)
-                5 -> getValue(lis, i, 7)
             }
             i++
         }

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

@@ -279,6 +279,7 @@ class DebugParamFragmentVM @Inject constructor(private val mRepo: DebugParamFrag
             "setBtnParam: " + plcDebugAddressEnum.aName + ":" + plcDebugAddressEnum.address + ":" + checked
         )
         loading.value=true
+        _refreshPage.value=false
         if (checked) {
             threadDebugParamParam.setBtn(plcDebugAddressEnum.address)
         } else {
@@ -293,11 +294,16 @@ class DebugParamFragmentVM @Inject constructor(private val mRepo: DebugParamFrag
             "03"->{
                 val data = messageEvent.data.substring(84,86)
                 Log.d(TAG, "调试按钮cmdHeartbeat: "+data)
+                val data1 = messageEvent.data.substring(26, 32)
+                Log.d(TAG, "调试页 cmdHeartbeat: "+data)
+                val hexStr2BinStr = HexUtils.hexStr2BinStr(data1)
+                val split = hexStr2BinStr.split("")
                 if (!data.equals("00")){
                     Log.d(TAG, "调试按钮cmdHeartbeat: 关")
                     threadDebugParamParam.isActiveRstBtn=false
                     threadDebugParamParam.isActiveSetBtn=false
                     loading.value=false
+                    _refreshPage.value=true
                 }
             }
             "01"->{
@@ -314,7 +320,7 @@ class DebugParamFragmentVM @Inject constructor(private val mRepo: DebugParamFrag
                 val getWindSpeed = messageEvent.data.substring(38, 40)//气泵风速
                 updatePumpState(getWindSpeed)
                 val data = messageEvent.data.substring(26, 32)
-                Log.d(TAG, "调试页 cmdHeartbeat:26, 32:: "+data)
+                Log.d(TAG, "调试页 cmdHeartbeat: "+data)
                 val hexStr2BinStr = HexUtils.hexStr2BinStr(data)
                 val split = hexStr2BinStr.split("")
                 updateOtherState(split)
@@ -324,8 +330,8 @@ class DebugParamFragmentVM @Inject constructor(private val mRepo: DebugParamFrag
                 val split1 = hexStr2BinStr1.split("")
                 updateOtherState1(split1)
                 val data3=messageEvent.data.substring(58,62)
-        Log.d(TAG, "调试页 cmdHeartbeat3: "+data3)
-        Log.d(TAG, "调试页 cmdHeartbeat4: "+messageEvent.data)
+                Log.d(TAG, "调试页 cmdHeartbeat3: "+data3)
+                Log.d(TAG, "调试页 cmdHeartbeat4: "+messageEvent.data)
                 val hexStr2BinStr3 = HexUtils.hexStr2BinStr(data3)
                 val split3 = hexStr2BinStr3.split("")
                 updateOtherState3(split3)
@@ -355,7 +361,6 @@ class DebugParamFragmentVM @Inject constructor(private val mRepo: DebugParamFrag
                 _midSpeedChecked.value = false
                 _highSpeedChecked.value = true
             }
-
             else -> {
                 Log.d(TAG, "updatePumpState: " + getWindSpeed)
                 _lowSpeedChecked.value = false

+ 1 - 1
module_backstage/src/main/res/layout/backstage_activity_setting.xml

@@ -130,7 +130,7 @@
             android:text="1"
             android:textColor="@android:color/white"
             android:textSize="24sp"
-            android:visibility="visible"
+            android:visibility="gone"
             app:layout_constraintEnd_toEndOf="@+id/btn_update_app"
             app:layout_constraintTop_toTopOf="@+id/btn_update_app" />
 

+ 43 - 21
module_home/src/main/java/com/quyunshuo/module/home/fragment/fragment/MakeFragment.kt

@@ -15,7 +15,6 @@ import com.google.gson.reflect.TypeToken
 import com.hboxs.serialport.plc.DialogClickListener
 import com.hboxs.serialport.plc.message.Message
 import com.hboxs.serialport.plc.util.HexUtils
-import com.hboxs.serialport.sbc.SBCHeartbeat
 import com.hboxs.serialport.sbc.VBoxMessage
 import com.hboxs.serialport.sbc.VboxSerialPortSendQueue
 import com.hboxs.serialport.sbc.frame.VboxCommand
@@ -25,6 +24,7 @@ import com.quyunshuo.androidbaseframemvvm.base.ktx.observeLiveData
 import com.quyunshuo.androidbaseframemvvm.base.utils.RegisterEventBus
 import com.quyunshuo.androidbaseframemvvm.common.bean.ShoppingCartBean
 import com.quyunshuo.androidbaseframemvvm.common.constant.Heartbeat
+import com.quyunshuo.androidbaseframemvvm.common.constant.event.ApiMessageEvent
 import com.quyunshuo.androidbaseframemvvm.common.ui.BaseFragment
 import com.quyunshuo.androidbaseframemvvm.common.util.ByteUtils
 import com.quyunshuo.androidbaseframemvvm.common.util.LongClickUtils
@@ -66,6 +66,7 @@ class MakeFragment : BaseFragment<HomeFragmentMakeBinding, MakeFragmentVM>() {
     private var shoppingCartItems: MutableList<ShoppingCartBean> = mutableListOf()
     private var isProcessing = false // 标志位,用于确保只执行一次
     private var isMakePoc = false
+    private var firstItem: ShoppingCartBean? = null
 
     override fun HomeFragmentMakeBinding.initView() {
         //处理传递过来的商品数据,进行制作、数据保存
@@ -80,10 +81,16 @@ class MakeFragment : BaseFragment<HomeFragmentMakeBinding, MakeFragmentVM>() {
         //首先判断是否有做糖数据,如果有则发送指令,如果没有就结束。
         if (selectPro != null) {
             shoppingCartItems = parseShoppingCartData(selectPro).toMutableList()
-            if (shoppingCartItems.isNotEmpty()) {
-                mViewModel.startSendMake(shoppingCartItems[0].nameChinese)
-                shoppingCartItems.removeAt(0)
-            }
+            Log.d(TAG, "制作列表: "+shoppingCartItems)
+//            if (shoppingCartItems.isNotEmpty()) {
+//                mViewModel.startSendMake(shoppingCartItems[0].nameChinese)
+//                val item = shoppingCartItems[0]
+//                if (item.count > 1) {
+//                    item.count--
+//                } else {
+//                    shoppingCartItems.removeAt(0)
+//                }
+//            }
         }
 
         LongClickUtils.setLongClick(Handler(), ivLogo, 5000, object : View.OnLongClickListener {
@@ -92,7 +99,6 @@ class MakeFragment : BaseFragment<HomeFragmentMakeBinding, MakeFragmentVM>() {
                 findNavController.navigate(R.id.home_action_home_makefragment_to_home_homefragment)
                 return true
             }
-
         })
         //硬币清零
         restCoin()
@@ -159,9 +165,10 @@ class MakeFragment : BaseFragment<HomeFragmentMakeBinding, MakeFragmentVM>() {
         // 设置叶子对象的属性,例如坐标等
         mBinding.progressView.addLeaf(leaf1)
         mBinding.progressView.maxProgress = 95f
-        jobHandler = CoroutineScope(Dispatchers.IO).launch {
+        jobHandler = CoroutineScope(Dispatchers.Main).launch {
             while (true) {
                 myHandler.sendEmptyMessage(1)
+                Log.d(TAG, "initProgress: 进度条")
                 delay(1000)
             }
         }
@@ -175,7 +182,7 @@ class MakeFragment : BaseFragment<HomeFragmentMakeBinding, MakeFragmentVM>() {
                 1 -> {
                     if (fragment.mBinding!=null) {
                         if (fragment.isMakePoc) {
-                            Log.d("制作测试", "2: ")
+                            Log.d("makefragment", "进度条: " + fragment.plannedSpeed)
                             fragment.plannedSpeed++
                             fragment.mBinding.progressView.setCurrentProgress(fragment.plannedSpeed)
                             val sysTime = System.currentTimeMillis() //获取系统时间
@@ -197,8 +204,8 @@ class MakeFragment : BaseFragment<HomeFragmentMakeBinding, MakeFragmentVM>() {
 //                            }
                             }
                         } else {
+                            Log.d("makefragment", "initProgress: 进度条")
                             fragment.plannedSpeed = 1
-                            Log.d("制作测试", "3: ")
                             fragment.mBinding.progressView.setCurrentProgress(fragment.plannedSpeed)
                             fragment.mBinding.tvProgressDescribe.setText("机器预热中,请耐心等待。。。")
                         }
@@ -224,11 +231,9 @@ class MakeFragment : BaseFragment<HomeFragmentMakeBinding, MakeFragmentVM>() {
             Message.Type.ack -> {
                 mViewModel.ack(messageEvent)
             }
-
             Message.Type.response -> {
                 mViewModel.response(messageEvent)
             }
-
             Message.Type.connected -> {}
             Message.Type.disconnected -> {}
             Message.Type.sendError -> {}
@@ -237,6 +242,16 @@ class MakeFragment : BaseFragment<HomeFragmentMakeBinding, MakeFragmentVM>() {
     }
 
     @Subscribe(threadMode = ThreadMode.MAIN)
+    fun event(messageEvent: ApiMessageEvent) {
+        when (messageEvent.name) {
+            "backPrev" -> {
+                val findNavController = findNavController()
+                    findNavController.navigate(R.id.home_action_home_makefragment_to_home_homefragment)
+            }
+        }
+    }
+
+    @Subscribe(threadMode = ThreadMode.MAIN)
     fun event(messageEvent: VBoxMessage) {
         XLogUtil.d(messageEvent.cmd + ":messageEvent.data:" + messageEvent.data)
         Log.d(TAG, messageEvent.cmd + "制作页面 :messageEvent.data:" + messageEvent.data)
@@ -249,7 +264,7 @@ class MakeFragment : BaseFragment<HomeFragmentMakeBinding, MakeFragmentVM>() {
                 }
                 val overheatState = HexUtils.hexStr2BinStr(messageEvent.data.substring(4, 6))
                 val split = overheatState.trim().split("")
-                mBinding.tvLutou.text = ((split[1].toInt() * 256) + ByteUtils.hexStr2decimal(messageEvent.data.substring(6, 8))).toString()
+                mBinding.tvLutou.text = ((split[1].toInt() * 256) + ByteUtils.hexStr2decimal(messageEvent.data.substring(6, 8))).toString()+"℃"
                 cmdHeartbeat(messageEvent)
                }
             else -> {}
@@ -263,20 +278,24 @@ class MakeFragment : BaseFragment<HomeFragmentMakeBinding, MakeFragmentVM>() {
         when (deviceState) {
             "02" -> {//就绪待机,可以选购或制作下一杯
                 Log.d(TAG, "startSendMake: " + isProcessing + ":" + shoppingCartItems)
-//                if (!isProcessing && shoppingCartItems.isNotEmpty()) {
-//                    mViewModel.startSendMake(shoppingCartItems[0].nameChinese)
-//                    isProcessing = true // 设置标志位,表示正在处理
+                if (!isProcessing && shoppingCartItems.isNotEmpty()) {
+                    mViewModel.startSendMake(shoppingCartItems[0].nameChinese)
+                    Log.d(TAG, "cmdHeartbeat: ")
+                    plannedSpeed = 1
+                    isProcessing = true // 设置标志位,表示正在处理
                     isShowAgainBuyDialog = true
-//                }
+                }
             }
             "04" -> {//开始制作
+                isMakePoc = true
+                Log.d(TAG, "initProgress: 进度条: true")
                 if (isProcessing) {
+                    mViewModel.threadHomeParam.stopSendMake()
+                    Log.d(TAG, "startMake:stopMake ")
                     initProgress()
-                    isMakePoc = true
                     if (againBuyDialog != null) {
                         againBuyDialog?.dismiss()
                     }
-                    mViewModel.threadHomeParam.stopSendMake()
                     // 移除购物车中的第一个数据
                     if (shoppingCartItems.isNotEmpty()) {
                         val item = shoppingCartItems[0]
@@ -285,7 +304,6 @@ class MakeFragment : BaseFragment<HomeFragmentMakeBinding, MakeFragmentVM>() {
                         } else {
                             shoppingCartItems.removeAt(0)
                         }
-                        Log.d(TAG, "Removed first item, remaining items: ${shoppingCartItems.size}")
                     }
                     isProcessing = false // 重置标志位
                 }
@@ -310,15 +328,19 @@ class MakeFragment : BaseFragment<HomeFragmentMakeBinding, MakeFragmentVM>() {
     private fun showAgainBuyDialog(isBegin: Int) {
         if (againBuyDialog == null) {
             againBuyDialog = this@MakeFragment.context?.let { AgainBuyDialog(it) }
+            againBuyDialog?.setCancelable(false)
             againBuyDialog?.setListener(object : DialogClickListener {
                 override fun onClickListener(type: Int, text: String?) {
                     when (type) {
                         againBuyDialog?.type1 -> {
                             againBuyDialog?.dismiss()
                             val findNavController = findNavController()
-                            findNavController.navigate(R.id.home_action_home_makefragment_to_home_homefragment)
+                            try {
+                                findNavController.navigate(R.id.home_action_home_makefragment_to_home_homefragment)
+                            }catch (e: IllegalArgumentException){
+                                Log.d(TAG, "onClickListener: "+e.message)
+                            }
                         }
-
                         else -> {}
                     }
                 }

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

@@ -184,32 +184,31 @@ class HomeFragmentVM @Inject constructor(private val mRepo: HomeFragmentRepo) :
 //            //没有连接服务器
 //            return UiUtil.getStringRes(R.string.home_tips_dialog_6)
 //        }
-
         if (D2Value.value == "00") {
             //整机初次上电。
             return UiUtil.getStringRes(R.string.home_tips_dialog_2)
         }
-
-        if (D2Value.value == "03") {
-            //机器报警了。
-
-            return UiUtil.getStringRes(R.string.home_tips_dialog_3)
-        }
-
         if (D2Value.value == "01") {
             //机器复位中。
-
             return UiUtil.getStringRes(R.string.home_tips_dialog_4)
         }
-
+        if (D2Value.value == "02") {
+            //机器开机完毕
+            return "02"
+        }
+        if (D2Value.value == "03") {
+            //机器报警了。
+            return UiUtil.getStringRes(R.string.home_tips_dialog_3)
+        }
         if (D2Value.value == "04") {
             //机器制作中
             return UiUtil.getStringRes(R.string.home_tips_dialog_5)
         }
-        if (D2Value.value == "02") {
-            //机器开机完毕
-            return "02"
+        if (D2Value.value == "10") {
+            //未取出
+            return UiUtil.getStringRes(R.string.home_make_success_tips)
         }
+
         return ""
     }
 

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

@@ -9,6 +9,7 @@ import android.os.Build
 import android.os.IBinder
 import android.util.Log
 import android.view.WindowManager
+import androidx.localbroadcastmanager.content.LocalBroadcastManager
 import com.hboxs.serialport.plc.DialogClickListener
 import com.hboxs.serialport.sbc.SBCHeartbeat
 import com.hboxs.serialport.sbc.VBoxMessage
@@ -20,6 +21,7 @@ import com.quyunshuo.androidbaseframemvvm.base.ktx.observeLiveData
 import com.quyunshuo.androidbaseframemvvm.base.utils.SpUtils
 import com.quyunshuo.androidbaseframemvvm.common.constant.Heartbeat
 import com.quyunshuo.androidbaseframemvvm.common.constant.MMKVName
+import com.quyunshuo.androidbaseframemvvm.common.constant.event.ApiMessageEvent
 import com.quyunshuo.androidbaseframemvvm.common.util.ToastUtil
 import com.quyunshuo.androidbaseframemvvm.common.util.UiUtil
 import com.quyunshuo.androidbaseframemvvm.common.util.XLogUtil
@@ -125,7 +127,6 @@ class GlobalService :LifecycleService() {
         CoroutineScope(Dispatchers.IO).launch {
             //MDB ICT
             val payAgreement = SpUtils.getInt(MMKVName.ICT, 0)
-
             XLogUtil.d("initPayIctMdb :"+ PayAgreementUtil.MDB_ICT[payAgreement!!])
             val createStrategy = PaySendDataFactory.createStrategy(PayAgreementUtil.MDB_ICT[payAgreement!!])
             createStrategy.billInit()
@@ -203,6 +204,7 @@ class GlobalService :LifecycleService() {
                 when (type) {
                     warringDialog?.type1 -> {
                         Heartbeat.isAlarm=false
+                        EventBus.getDefault().post(ApiMessageEvent("backPrev", 1))
                         warringDialog?.dismiss()
                     }
                     else -> {}

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

@@ -69,7 +69,7 @@ class GlobalServiceViewModel @Inject constructor(
             return
         }
         CoroutineScope(Dispatchers.IO).launch {
-            mRepo.getVideoRule("775").catch {
+            mRepo.getVideoRule("818").catch {
                 LogUtil.d(TAG, "getVideoRule onerror: $it")
             }.collect {
                 getVideoInfo(it)
@@ -88,6 +88,7 @@ class GlobalServiceViewModel @Inject constructor(
         //存储广告规则 ,用于前台播放。
         SpUtils.putString(MMKVName.PLAY_RULE, gson.toJson(list))
         //1. 根据id 获取广告信息。
+        Log.d(TAG, "getVideoInfo: "+list)
         downVideos.clear()
         getvideo()
         //2. 获取的信息,通过一个map进行存储。
@@ -455,11 +456,13 @@ class GlobalServiceViewModel @Inject constructor(
         //验证码是否正确。
         val sumHexPairs = HexUtils.sumHexPairs(messageEvent.data)
         if (sumHexPairs) {
-            _initIsSuccess.value = true
             SBCHeartbeat.initIsSuccess = true
             SBCHeartbeat.devCode = messageEvent.data.substring(0, 2)
             //是否保存设备数据了。
             SBCHeartbeat.saveDevData = messageEvent.data.substring(2, 4)
+            if (SBCHeartbeat.saveDevData.equals("00")){
+                _initIsSuccess.value = true
+            }
             //机箱版本号
             SBCHeartbeat.crateVersion = "" + HexadecimalUtil.hex2dec(
                 messageEvent.data.substring(

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

@@ -141,7 +141,7 @@ class MqService : Service() {
         if (("" == updateMaterialStatus)) { //因为脱离系统了,那么就清空,重新创建
             data = ""
         }
-        val machineType: String = SpUtils.getString(MMKVName.MACHINE_TYPE, "P10_SBM")!!
+        val machineType: String = SpUtils.getString(MMKVName.MACHINE_TYPE, "SBM10")!!
         Log.d(TAG, "$data: mq getAddQueue: $machineType")
         // SharedPreferencesUtils.setParam(Name.QUEUE_DATA, data);
         if (("" == Heartbeat.deviceId)) {
@@ -176,7 +176,7 @@ class MqService : Service() {
     private fun initView1() {
         val data = SpUtils.getString(MMKVName.QUEUE_DATA, "") as String //连接设备id
         Log.d(TAG, "1data initView: $data")
-        val machineType: String = SpUtils.getString(MMKVName.MACHINE_TYPE, "P10_SBM")!!
+        val machineType: String = SpUtils.getString(MMKVName.MACHINE_TYPE, "SBM10")!!
         Log.d(TAG, "$data: mq getAddQueue: $machineType")
         // SharedPreferencesUtils.setParam(Name.QUEUE_DATA, data);
         if (("" == FileUtil.getDeviceId())) {

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

@@ -36,8 +36,7 @@ class MqServiceRepository @Inject constructor() : BaseRepository() {
     suspend fun getAddQueue() = request<String> {
         val params= HashMap<String, Any>()
         Log.d(TAG, "Heartbeat.deviceId-->" + Heartbeat.deviceId)
-
-        val machineType: String = SpUtils.getString(MMKVName.MACHINE_TYPE, "P10_SBM")!!
+        val machineType: String = SpUtils.getString(MMKVName.MACHINE_TYPE, "SBM10")!!
         params["exchange"] = machineType //交换机的名称,机型
         params["queue"] = Heartbeat.deviceId!! //队列的名称,机器的设备编码
         params["routingKey"] = Heartbeat.deviceId!! //队列的key,机器的设备编码

+ 5 - 3
module_home/src/main/res/layout/home_fragment_buy.xml

@@ -33,10 +33,12 @@
         app:layout_constraintTop_toTopOf="parent" />
 
     <ImageView
+        android:layout_alignParentBottom="true"
+        android:layout_centerHorizontal="true"
+        android:layout_marginBottom="600dp"
         android:id="@+id/iv_buy_icon"
-        android:layout_width="480dp"
-        android:layout_height="480dp"
-        android:layout_centerInParent="true"
+        android:layout_width="400dp"
+        android:layout_height="400dp"
         android:src="@drawable/btn_goumai" />
 
 </RelativeLayout>

+ 3 - 0
module_pay/src/main/java/com/module/pay/strategy/SerialPortICTRS232Strategy.kt

@@ -1,5 +1,6 @@
 package com.module.pay.strategy
 
+import android.util.Log
 import com.module.pay.serialport.DataUtils
 import com.quyunshuo.androidbaseframemvvm.common.constant.Heartbeat
 import com.quyunshuo.androidbaseframemvvm.common.constant.PayName
@@ -15,6 +16,7 @@ import java.math.RoundingMode
  * ict rs232 接受和发送数据 策略实现类
  */
 class SerialPortICTRS232Strategy:SerialPortStrategy {
+    private val TAG = "SerialPortICTRS232Strat"
     private var nowAmountMoney: Double? = null
     private var createStrategy: PaySendDataStrategy? = null
 
@@ -24,6 +26,7 @@ class SerialPortICTRS232Strategy:SerialPortStrategy {
 
     override fun readData(data: ByteArray, i: Int, size: Int) {
         val readString: String = DataUtils.ByteArrToHex(data, 0, size)
+        Log.d(TAG, "readData: "+readString)
         disposeData(readString.trim())
 
     }

+ 13 - 7
serialport-api/src/main/java/com/hboxs/serialport/plc/thread/ThreadHomeParam.kt

@@ -10,6 +10,9 @@ import com.hboxs.serialport.plc.frame.RstCommandFrame
 import com.hboxs.serialport.plc.frame.SetCommandFrame
 import com.hboxs.serialport.plc.frame.WriteCommandFrame
 import com.hboxs.serialport.sbc.VboxSerialPortManager
+import com.hboxs.serialport.sbc.VboxSerialPortSendQueue
+import com.hboxs.serialport.sbc.frame.VboxCommand
+import com.hboxs.serialport.sbc.frame.VboxWriteCommand
 import com.quyunshuo.androidbaseframemvvm.base.addressenum.PlcHomeAddressEnum
 import kotlinx.coroutines.CoroutineScope
 import kotlinx.coroutines.Dispatchers
@@ -93,14 +96,17 @@ class ThreadHomeParam : LifecycleObserver {
 
     fun startMake(value: String) {
         stopSendMake()
-//        jobM1 = CoroutineScope(Dispatchers.Main).launch {
-//            while (isActiveM1) {
-                VboxSerialPortManager.getInstance().sendData(value)
-//                delay(1000) // 每隔2秒重复执行
-//            }
-//        }
+        isActiveM1=true
+        jobM1 = CoroutineScope(Dispatchers.Main).launch {
+            while (isActiveM1) {
+                Log.d(TAG, "startMake: ")
+                VboxSerialPortSendQueue.getInstance()
+                    .sendCommand(VboxWriteCommand(VboxCommand.MAKE_ORDER,value))
+//                VboxSerialPortManager.getInstance().sendData(value)
+                delay(1000) // 每隔2秒重复执行
+            }
+        }
     }
-
     fun stopSendMake() {
         isActiveM1=false
         jobM1?.cancel()

+ 4 - 3
serialport-api/src/main/java/com/hboxs/serialport/sbc/VboxSerialPortReadThread.java

@@ -13,6 +13,7 @@ import com.hboxs.serialport.sbc.frame.VboxResponseFrame;
 import com.quyunshuo.androidbaseframemvvm.common.constant.MMKVName;
 import com.quyunshuo.androidbaseframemvvm.common.util.ByteUtils;
 import com.quyunshuo.androidbaseframemvvm.common.util.LogUtil;
+import com.quyunshuo.androidbaseframemvvm.common.util.LogUtils;
 import com.quyunshuo.androidbaseframemvvm.common.util.XLogUtil;
 
 import org.greenrobot.eventbus.EventBus;
@@ -72,7 +73,7 @@ public class VboxSerialPortReadThread extends Thread {
 //            vboxSerialPortSendQueue.startReadListThread();
             try {
                 int available = mInputStream.available();
-                LogUtil.INSTANCE.d("ceshi 0 ",available);
+//                LogUtil.INSTANCE.d("ceshi 0 ",available);
                 if (available > 0) {
                     size = mInputStream.read(received);
                     if (size > 0) {
@@ -97,7 +98,7 @@ public class VboxSerialPortReadThread extends Thread {
                 return;
             }
 //            Log.d("backinifo","长度:"+size+","+commandFrame.getCmd());
-            XLogUtil.INSTANCE.d("长度:"+size+","+commandFrame.getCmd());
+//            XLogUtil.INSTANCE.d("长度:"+size+","+commandFrame.getCmd());
             vboxSerialPortSendQueue.setReceived();//收到数据了,要停止了。
             synchronized (receiveBuffer) {
                 // 将新数据追加到缓冲区
@@ -143,7 +144,7 @@ public class VboxSerialPortReadThread extends Thread {
         String hexStr =ByteUtil.ByteArrToHex(packet, 0, packet.length);
         EventBus.getDefault().post(new VBoxMessage(commandFrame.getCmd(), hexStr));
 //        Log.d(TAG,"长度 收到的命令:3 "+ commandFrame.getCmd()+"收到有效数据包: " + hexStr);
-        XLogUtil.INSTANCE.d("长度 收到的命令:3 "+ commandFrame.getCmd()+"收到有效数据包: " + hexStr);
+//        XLogUtil.INSTANCE.d("长度 收到的命令:3 "+ commandFrame.getCmd()+"收到有效数据包: " + hexStr);
     }
 
     // 查找起始符位置

+ 2 - 1
serialport-api/src/main/java/com/hboxs/serialport/sbc/VboxSerialPortSendQueue.java

@@ -9,6 +9,7 @@ import android.util.Log;
 
 import com.hboxs.serialport.sbc.frame.VboxCommandFrame;
 import com.hboxs.serialport.sbc.frame.VboxOrder;
+import com.quyunshuo.androidbaseframemvvm.common.util.LogUtils;
 import com.quyunshuo.androidbaseframemvvm.common.util.XLogUtil;
 
 import java.util.LinkedList;
@@ -120,7 +121,7 @@ public class VboxSerialPortSendQueue {
                 synchronized (VboxSerialPortSendQueue.class) {
                     sendOrderMessage(sMessageListRead.getFirst());
 //                    Log.d(TAG, "长度 startReadListThread: "+currentFrame.getCmd());
-                    XLogUtil.INSTANCE.d("长度 startReadListThread: "+currentFrame.getCmd());
+//                    XLogUtil.INSTANCE.d("长度 startReadListThread: "+currentFrame.getCmd());
                 }
             }
 //                Thread.sleep(300);

+ 4 - 0
serialport-api/src/main/java/com/hboxs/serialport/sbc/frame/VboxCommand.java

@@ -111,5 +111,9 @@ public class VboxCommand {
      * 硬币数量
      */
     public final static String COIN_DATA = "COIN_DATA";
+    /**
+     * 制作指令
+     */
+    public final static String MAKE_ORDER = "MAKE_ORDER";
 
 }