Bläddra i källkod

配合测试完成BUG修复

JaycePC 1 månad sedan
förälder
incheckning
f8ef1afcf0

+ 1 - 1
app/build.gradle

@@ -131,6 +131,6 @@ dependencies {
     implementation "androidx.camera:camera-extensions:1.0.0-alpha28"
 
     implementation 'com.google.mlkit:face-detection:16.0.0'
-
+    implementation 'com.github.kongzue.DialogXSample:DatePicker:0.0.14'
 
 }

+ 10 - 0
app/src/main/java/com/rc/httpcore/bean/HxpChemicalVo.java

@@ -89,6 +89,8 @@ public class HxpChemicalVo implements Serializable {
     private String doorName;
     // 存储到哪层层数
     private String layers;
+    // 过期日期
+    private String expireTime;
 
     /**
      * 是否全新
@@ -445,4 +447,12 @@ public class HxpChemicalVo implements Serializable {
     public void setTwoUserMobile(String twoUserMobile) {
         this.twoUserMobile = twoUserMobile;
     }
+
+    public String getExpireTime() {
+        return expireTime;
+    }
+
+    public void setExpireTime(String expireTime) {
+        this.expireTime = expireTime;
+    }
 }

+ 64 - 0
app/src/main/java/xn/hxp/blu/BluetoothConnectionManager.kt

@@ -0,0 +1,64 @@
+package xn.hxp.blu
+
+import android.bluetooth.BluetoothAdapter
+import android.bluetooth.BluetoothDevice
+import android.bluetooth.BluetoothSocket
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.withContext
+import java.io.IOException
+import java.util.*
+
+object BluetoothConnectionManager {
+    private val bluetoothAdapter: BluetoothAdapter? = BluetoothAdapter.getDefaultAdapter()
+    private val uuid: UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB") // SPP UUID
+    private const val connectionTimeoutMillis: Long = 3000 // 连接超时时间3秒钟
+//    suspend fun getDeviceAddress(deviceName: String): String? {
+    suspend fun getDeviceAddress(): String? {
+        return withContext(Dispatchers.IO) {
+            val pairedDevices: Set<BluetoothDevice>? = bluetoothAdapter?.bondedDevices
+//            pairedDevices?.find { it.name == deviceName }?.address
+            pairedDevices?.find { it.name == "HF-18" }?.address
+        }
+    }
+
+
+    suspend fun connectToDevice(deviceAddress: String): BluetoothSocket? {
+        val bluetoothAdapter: BluetoothAdapter? = BluetoothAdapter.getDefaultAdapter()
+        val device: BluetoothDevice? = bluetoothAdapter?.getRemoteDevice(deviceAddress)
+
+        return withContext(Dispatchers.IO) {
+            var socket: BluetoothSocket? = null
+            val thread = Thread {
+                try {
+                    socket = device?.createRfcommSocketToServiceRecord(uuid)
+                    socket?.connect()
+                } catch (e: IOException) {
+                    e.printStackTrace()
+                    try {
+                        socket?.close()
+                    } catch (closeException: IOException) {
+                        closeException.printStackTrace()
+                    }
+                    socket = null
+                }
+            }
+
+            thread.start()
+            try {
+                thread.join(connectionTimeoutMillis)
+            } catch (e: InterruptedException) {
+                e.printStackTrace()
+            }
+
+            if (thread.isAlive) {
+                socket?.close()
+                thread.interrupt()
+                socket = null
+            }
+
+            socket  // 返回连接成功或为null(失败或超时)
+        }
+    }
+
+
+}

+ 124 - 0
app/src/main/java/xn/hxp/blu/BluetoothHelper.kt

@@ -0,0 +1,124 @@
+package xn.hxp.blu
+
+import android.bluetooth.BluetoothAdapter
+import android.bluetooth.BluetoothDevice
+import android.bluetooth.BluetoothSocket
+import android.content.Context
+import android.os.Handler
+import android.widget.Toast
+import com.blankj.utilcode.util.LogUtils
+import xn.hxp.blu.bean.IBluetoothCallback
+import com.rc.core.util.Weak
+import java.io.IOException
+import java.io.InputStream
+import java.io.PrintWriter
+import java.util.UUID
+
+
+/**
+ * 蓝牙连接
+ */
+class BluetoothHelper(
+    context: Context,
+    private val iBluetoothCallback: IBluetoothCallback? = null,
+) {
+    private val mContext: Context? by Weak { context }
+    private var mBluetoothAdapter: BluetoothAdapter? = null
+    private var device: BluetoothDevice? = null
+    val UUIDString = "00001101-0000-1000-8000-00805F9B34FB"
+    private var mSocket: BluetoothSocket? = null
+    private val lock = Any()
+    private var mInputBluetooth: InputStream? = null
+    private var out: PrintWriter? = null
+    private val mHandler: Handler? = Handler()
+    private var gotoLoginAct: Runnable? = null
+    private var mAddress: String? = null
+
+    fun onResume() {
+        mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter()
+        //判断蓝牙设备是否已开起
+        if (!mBluetoothAdapter!!.isEnabled) {
+            LogUtils.i("=========不支持蓝牙")
+            iBluetoothCallback?.onIsConnected("蓝牙未开启")
+            return
+        }
+        iBluetoothCallback?.onReStart()
+        val devices = mBluetoothAdapter!!.bondedDevices
+        val iterator: Iterator<BluetoothDevice> = devices.iterator()
+        while (iterator.hasNext()) {
+            device = iterator.next()
+        }
+        val name = device?.name
+        LogUtils.i("=========蓝牙已配置参数name$name")
+//        if (name != null && name == "RS001") {
+        if (name != null && name == "HF-18") {
+//        if (name != null && name == "RS-001-BLE") {
+            mAddress = device?.address
+            LogUtils.i("=========蓝牙已配置参数$mAddress")
+            val remoteDevice = mBluetoothAdapter!!.getRemoteDevice(mAddress)
+            try {
+                mSocket =
+                    remoteDevice.createRfcommSocketToServiceRecord(UUID.fromString(UUIDString))
+                connect()
+            } catch (e: Exception) {
+                mSocket = null
+                onCloses()
+                Toast.makeText(mContext, "蓝牙1连接异常", Toast.LENGTH_SHORT).show()
+            }
+        } else {
+            mSocket = null
+            onCloses()
+            iBluetoothCallback?.onIsConnected("蓝牙秤1连接失败$name")
+        }
+
+    }
+
+
+    private fun connect() {
+
+        gotoLoginAct = object : Runnable {
+            override fun run() {
+                try {
+                    synchronized(lock) {
+//                        if (mSocket!!.isConnected) {
+//                            onCloses()
+//                            iBluetoothCallback?.onIsConnected("蓝牙2秤连接失败")
+//                            return
+//                        } else {
+//                            mSocket!!.connect() // 会阻塞线程,建议在子线程中进行
+//                            iBluetoothCallback?.onBluetoothSocketBean(mSocket!!)
+//                        }
+                        mSocket!!.connect() // 会阻塞线程,建议在子线程中进行
+//                        Thread.sleep(2000)
+                        if (mSocket!!.isConnected) {
+                            // 连接成功处理逻辑
+                            iBluetoothCallback?.onBluetoothSocketBean(mSocket!!)
+                        } else {
+                            onCloses()
+                            iBluetoothCallback?.onIsConnected("蓝牙秤连接失败")
+                        }
+                    }
+                } catch (e: IOException) {
+                    mSocket = null
+                    mHandler!!.removeCallbacks(gotoLoginAct!!) //停止线程
+                    mHandler!!.removeCallbacksAndMessages(null)
+                    iBluetoothCallback?.onConnectError()
+                    e.printStackTrace()
+                    LogUtils.i("=========蓝牙3连接异常$e")
+                }
+            }
+        }
+        mHandler?.postDelayed(gotoLoginAct!!, 100)
+
+    }
+
+    //关闭所有资源
+    fun onCloses() {
+        if (mSocket != null) {
+            mSocket!!.close()
+            mHandler!!.removeCallbacks(gotoLoginAct!!) //停止线程
+            mHandler!!.removeCallbacksAndMessages(null)
+        }
+
+    }
+}

+ 10 - 0
app/src/main/java/xn/hxp/blu/bean/IBluetoothCallback.kt

@@ -0,0 +1,10 @@
+package xn.hxp.blu.bean
+
+import android.bluetooth.BluetoothSocket
+
+interface IBluetoothCallback {
+    fun onReStart()  //开始连接
+    fun onIsConnected(msg:String)//连接失败
+    fun onConnectError()//连接异常
+    fun onBluetoothSocketBean(sockets: BluetoothSocket)
+}

+ 0 - 1
app/src/main/java/xn/hxp/receiver/PortScanHelper.kt

@@ -22,7 +22,6 @@ class PortScanHelper (context: Context, private val listener: OnSerialScanListen
     fun dispatchKeyEvent(event: KeyEvent?) {
 //        LogUtils.i("PortScanHelper#dispatchKeyEvent2222=======")
         event?.let {
-            LogUtils.i("PortScanHelper#dispatchKeyEvent====111======${it}")
             mScanKeyEventHelper.analysisKeyEvent(it)
         }
     }

+ 1 - 2
app/src/main/java/xn/hxp/receiver/ScanKeyEventHelper.kt

@@ -31,7 +31,7 @@ class ScanKeyEventHelper(private val callback: ((content: String) -> Unit)? = nu
                     Handler(Looper.getMainLooper()).postDelayed({
                         callback?.invoke(mKeyContent.toString())
                         mKeyContent.clear()
-                    }, 700)
+                    }, 2000)
                 }
             }
 
@@ -101,7 +101,6 @@ class ScanKeyEventHelper(private val callback: ((content: String) -> Unit)? = nu
      */
     private fun decodeKeyCode(keyCode: Int, event: KeyEvent): Char? {
         val isShiftPressed = event.isShiftPressed
-        LogUtils.i("=======shifou $isShiftPressed  ${KeyEvent.KEYCODE_7}")
 
         if (keyCode >= KeyEvent.KEYCODE_0 && keyCode <= KeyEvent.KEYCODE_9) {
             return if (KeyEvent.KEYCODE_7 == 14 && isShiftPressed) {

+ 38 - 37
app/src/main/java/xn/hxp/ui/common/BaseCountDownActivity.java

@@ -25,37 +25,7 @@ public abstract class BaseCountDownActivity<VB extends ViewBinding> extends RcBa
     private int backTime = 60;
     // 页面自定义倒计时长
     private int cTime = 0;
-
-
-    private CountDownTimer countDownTimer = new CountDownTimer(1000, 1000) {
-        @Override
-        public void onTick(long millisUntilFinished) {
-
-        }
-
-
-        @Override
-        public void onFinish() {
-            if (!isFinishing() && !isDestroyed()) {
-                if (cTime > 0) {
-                    cTime--;
-                    if (cTime <= 0) {
-                        cdEnd();
-                    } else {
-                        invokeTime(cTime);
-                    }
-                } else {
-                    backTime--;
-                    if (backTime <= 0) {
-                        cdEnd();
-                    } else {
-                        invokeTime(backTime);
-                    }
-                }
-                countDownTimer.start();
-            }
-        }
-    };
+    private CountDownTimer countDownTimer;
 
     private void cdEnd() {
         // 下面逻辑是之前开发者的  很难理解为什么写
@@ -101,22 +71,19 @@ public abstract class BaseCountDownActivity<VB extends ViewBinding> extends RcBa
         super.onCreate(savedInstanceState);
         // 重置时间
         reSetCdTime();
+        cTime = 0;
     }
 
     @Override
     protected void onResume() {
         super.onResume();
-        if (null != countDownTimer) {
-            countDownTimer.start();
-        }
+        openCD();
     }
 
     @Override
     protected void onPause() {
         super.onPause();
-        if (null != countDownTimer) {
-            countDownTimer.cancel();
-        }
+        stopCountDown();
     }
 
     @Override
@@ -131,6 +98,40 @@ public abstract class BaseCountDownActivity<VB extends ViewBinding> extends RcBa
         reSetCdTime();
     }
 
+    private void openCD() {
+        stopCountDown();
+        countDownTimer = new CountDownTimer(1000, 1000) {
+            @Override
+            public void onTick(long millisUntilFinished) {
+
+            }
+
+
+            @Override
+            public void onFinish() {
+                if (!isFinishing() && !isDestroyed()) {
+                    if (cTime > 0) {
+                        cTime--;
+                        if (cTime <= 0) {
+                            cdEnd();
+                        } else {
+                            invokeTime(cTime);
+                        }
+                    } else {
+                        backTime--;
+                        if (backTime <= 0) {
+                            cdEnd();
+                        } else {
+                            invokeTime(backTime);
+                        }
+                    }
+                    countDownTimer.start();
+                }
+            }
+        };
+        countDownTimer.start();
+    }
+
     protected void stopCountDown() {
         if (null != countDownTimer) {
             countDownTimer.cancel();

+ 0 - 15
app/src/main/java/xn/hxp/ui/login/ScanLoginActivity.kt

@@ -365,22 +365,7 @@ class ScanLoginActivity : BaseCountDownActivity<ActivityScanLoginBinding>() {
      * 异常处理
      */
     private fun throwableView(throwable: Throwable) {
-        LogUtils.i("${throwable.message}")
-//        when (throwable) {
-//            is NetException -> {
-//                if (throwable.message.isNullOrEmpty()) {
-//                    "接口请求失败(${throwable.code})"
-//                } else {
-//                    throwable.message!!
-//                }
-//            }
-//            is SocketTimeoutException -> "请求超时,请稍后重试"
-//            is ConnectException -> "无法连接服务器,请检查网络"
-//            is HttpException -> "服务器繁忙,请稍后重试"
-//            else -> null
-//        }?.let { customDialogView(2, "$it") }
         customDialogView(2, "${throwable.message}")
-
     }
 
 }

+ 17 - 0
app/src/main/java/xn/hxp/ui/plan/add/AddActivity.java

@@ -1,5 +1,6 @@
 package xn.hxp.ui.plan.add;
 
+import android.app.DatePickerDialog;
 import android.content.Intent;
 import android.os.Bundle;
 import android.text.Editable;
@@ -28,6 +29,7 @@ import com.rc.httpcore.bean.TopicDataBean;
 import com.rc.httpcore.client.ApiRepository;
 
 import java.text.SimpleDateFormat;
+import java.util.Calendar;
 import java.util.List;
 import java.util.Locale;
 
@@ -137,6 +139,7 @@ public class AddActivity extends BaseCountDownActivity<ActivityAddBinding> {
             }
             addActivityHelp.topicSearch(belongingPerson.getUserId());
         });
+
         binding.topicET.setOnEditorActionListener((v, actionId, event) -> {
             binding.topicBT.performClick();
             return true;
@@ -180,6 +183,20 @@ public class AddActivity extends BaseCountDownActivity<ActivityAddBinding> {
                 hxpChemicalVo.setBelongType(1);
             }
         });
+        // 过期日期
+        binding.chemicalExpiresTV.setOnClickListener(v -> {
+            DatePickerDialog datePickerDialog = new DatePickerDialog(AddActivity.this);
+            datePickerDialog.setOnDateSetListener((view, year, month, dayOfMonth) -> {
+                Calendar calendar = Calendar.getInstance();
+                calendar.set(year, month, dayOfMonth, 23, 59, 59);
+                SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault());
+                String date = simpleDateFormat.format(calendar.getTime());
+                hxpChemicalVo.setExpireTime(date);
+                binding.chemicalExpiresTV.setText(date);
+                datePickerDialog.dismiss();
+            });
+            datePickerDialog.show();
+        });
 
         // 位置选择
         intentActivityResultLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback<ActivityResult>() {

+ 29 - 0
app/src/main/java/xn/hxp/ui/plan/unlock/UnlockActivity.java

@@ -3,6 +3,7 @@ package xn.hxp.ui.plan.unlock;
 import android.content.Intent;
 import android.os.Bundle;
 import android.text.TextUtils;
+import android.util.Log;
 import android.view.View;
 
 import androidx.activity.result.ActivityResultLauncher;
@@ -11,8 +12,16 @@ import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 
 import com.blankj.utilcode.util.GsonUtils;
+import com.blankj.utilcode.util.LogUtils;
+import com.blankj.utilcode.util.TimeUtils;
+import com.bumptech.glide.Glide;
+import com.rc.httpcore.HttpConfig;
 import com.rc.httpcore.bean.UserValidationBean;
 
+import java.text.SimpleDateFormat;
+import java.util.Locale;
+
+import xn.hxp.app.ChemicalApp;
 import xn.hxp.databinding.ActivityUnlockBinding;
 import xn.hxp.ui.common.BaseCountDownActivity;
 import xn.hxp.ui.plan.PlanAddData;
@@ -78,6 +87,26 @@ public class UnlockActivity extends BaseCountDownActivity<ActivityUnlockBinding>
                 });
             }
         }
+
+        try {
+            // 日期
+            binding.nowTime.setText(TimeUtils.getNowString(new SimpleDateFormat("MM月dd日 EEEE ", Locale.getDefault())));
+            // 用户
+            Glide.with(this).load(HttpConfig.Companion.getAPI_BASE_IMG_URL() + ChemicalApp.userData.getAvatar()).into(binding.imageName);
+            String userName = ChemicalApp.userData.getUserName();
+            binding.tvName.setText(TextUtils.isEmpty(userName) ? "" : userName);
+            // 实验室logo
+            Glide.with(this).load(HttpConfig.Companion.getAPI_BASE_IMG_URL() + ChemicalApp.confs.getCircularLogo()).into(binding.image);
+            // 实验室名称
+            String subName = ChemicalApp.subjectName;
+            subName = TextUtils.isEmpty(subName) ? "" : subName;
+            // 房间号
+            String roomNum = ChemicalApp.subRoom;
+            roomNum = TextUtils.isEmpty(roomNum) ? "" : roomNum;
+            binding.deptName.setText(subName + "-" + roomNum);
+        } catch (Exception e) {
+            LogUtils.e(Log.getStackTraceString(e));
+        }
         // 退出
         binding.tvOutLogin.setOnClickListener(new View.OnClickListener() {
             @Override

+ 80 - 36
app/src/main/java/xn/hxp/ui/still/ChemicalsAlsoActivity.kt

@@ -15,9 +15,12 @@ import androidx.core.content.ContextCompat
 import androidx.lifecycle.lifecycleScope
 import androidx.recyclerview.widget.LinearLayoutManager
 import com.blankj.utilcode.util.LogUtils
+import com.blankj.utilcode.util.ThreadUtils
+import com.blankj.utilcode.util.ThreadUtils.SimpleTask
 import com.bumptech.glide.Glide
 import com.bumptech.glide.load.engine.DiskCacheStrategy
 import com.bumptech.glide.request.RequestOptions
+import com.kongzue.dialogx.dialogs.PopTip
 import com.rc.httpcore.HttpConfig
 import com.rc.httpcore.bean.GiveBackBean
 import com.rc.httpcore.bean.LockVoListBean
@@ -32,6 +35,7 @@ import org.greenrobot.eventbus.ThreadMode
 import retrofit2.HttpException
 import xn.hxp.R
 import xn.hxp.app.ChemicalApp
+import xn.hxp.blu.BluetoothConnectionManager
 import xn.hxp.comm.Constants
 import xn.hxp.databinding.ActivityChemicalsAlsoBinding
 import xn.hxp.receiver.OnSerialScanListener
@@ -48,6 +52,7 @@ import xn.hxp.weidith.*
 import java.lang.Runnable
 import java.net.ConnectException
 import java.net.SocketTimeoutException
+import java.nio.charset.StandardCharsets
 
 //化学品-归还   StorageDialog  柜字信息
 class ChemicalsAlsoActivity : BaseCountDownActivity<ActivityChemicalsAlsoBinding>() {
@@ -738,43 +743,85 @@ class ChemicalsAlsoActivity : BaseCountDownActivity<ActivityChemicalsAlsoBinding
     private fun connectToDeviceWithTimeout() {
         showToast("连接中...", Toast.LENGTH_SHORT)
         lifecycleScope.launch {
-            MediaPlayerHelper.playRawMp3(this@ChemicalsAlsoActivity, R.raw.qing_zheng_zhong)
-            BluetoothTool.INSTANCE.connect(object : BluetoothCallBack {
-                override fun callBack(weight: String) {
-                    if ("" == weight || weight.isEmpty()) {
-                        return
-                    }
-                    if (weight.toDouble() > 2999) {
-                        turnOffWeighing()
-                    } else {
-                        if (weight.toDouble() > 0) {
-                            if (mWeighingValue!!.text.toString().trim()
-                                    .isNotEmpty()
-                            ) {
-                                if (weight.toDouble() == mWeighingValue!!.text.toString()
-                                        .trim().toDouble()
-                                ) {
-                                    if (!taskStarted) {
-                                        taskStarted = true
-                                        LogUtils.i("=====执行了")
-                                        delayedTaskToUpdateUI()
-                                        return
+            val deviceAddress = withContext(Dispatchers.IO) {
+                BluetoothConnectionManager.getDeviceAddress()
+            }
+            if (deviceAddress != null) {
+                val socket = withContext(Dispatchers.IO) {
+                    BluetoothConnectionManager.connectToDevice(deviceAddress)
+                }
+                if (socket != null) {
+                    // 连接成功后的处理逻辑
+                    // 在这里使用返回的 BluetoothSocket 对象进行后续操作
+                    MediaPlayerHelper.playRawMp3(this@ChemicalsAlsoActivity, R.raw.qing_zheng_zhong)
+                    // 连接成功后的处理逻辑
+                    withContext(Dispatchers.Main) {
+                        do {
+//                            try {
+                            val inputStream = socket!!.inputStream
+                            val bt = ByteArray(1024)
+                            val content = inputStream!!.read(bt)
+                            if (content != null && content > 0) {
+                                val contents = String(
+                                    bt,
+                                    0,
+                                    content,
+                                    StandardCharsets.UTF_8
+                                )
+                                val split = contents.split("\n")
+                                val weight = split[0].trim()
+                                LogUtils.i("===================称重未处理之前=======$contents")
+                                LogUtils.i("===================weight=======$weight")
+                                LogUtils.i("=====称重数据$weight $taskStarted  ${mWeighingValue!!.text.toString()}")
+                                if (weight.toDouble() > 2999) {
+                                    turnOffWeighing()
+                                } else {
+                                    if (weight.toDouble() > 0) {
+                                        if (mWeighingValue!!.text.toString().trim()
+                                                .isNotEmpty()
+                                        ) {
+                                            if (weight.toDouble() == mWeighingValue!!.text.toString()
+                                                    .trim().toDouble()
+                                            ) {
+                                                if (taskStarted == false) {
+                                                    taskStarted = true
+                                                    LogUtils.i("=====执行了")
+                                                    socket.close()
+                                                    delayedTaskToUpdateUI()
+                                                    break
+                                                }
+                                            }
+                                        }
+                                        mWeighingValue!!.setText("$weight")
+                                    } else {
+                                        mWeighingValue!!.setText("")
                                     }
                                 }
+                                delay(200)
+                            } else {
+//                                jobTow?.cancel()
+                                showToast("请手动输入")
+                                weiView()
+                                break
                             }
-                            mWeighingValue!!.setText("$weight")
-                        } else {
-                            mWeighingValue!!.setText("")
-                        }
+//                            } catch (e: Exception) {
+//                                jobTow?.cancel()
+//                                weiView()
+//                                break
+//                            }
+                        } while (mWeighDialog != null && mWeighDialog!!.isShowing)
                     }
-                }
 
-                override fun connectFailed(msg: String) {
-                    showToast("找不到设备", Toast.LENGTH_SHORT)
+                } else {
+                    // 连接失败的处理逻辑
+                    showToast("连接失败或超时", Toast.LENGTH_SHORT)
                     weiView()
                 }
-            })
-
+            } else {
+                // 根据设备名称获取的设备地址为空,处理无法找到设备的情况
+                showToast("找不到设备", Toast.LENGTH_SHORT)
+                weiView()
+            }
         }
     }
 
@@ -1554,15 +1601,14 @@ class ChemicalsAlsoActivity : BaseCountDownActivity<ActivityChemicalsAlsoBinding
         } catch (e: Exception) {
 
         }
-        showLoading("加载中...")
+        PopTip.show("正在开门")
         val disposable = ApiRepository.lockOperate(map)
             .subscribe({ data ->
-                dismissLoading()
                 val containsFalse =
                     mCabinetLockVoList!!.any { it.isOk == false && it.unlockingMethod == 2 }
                 LogUtils.i("====开锁信息${containsFalse}  $isok")
                 if (containsFalse) {
-                    showLoading("查询中...")
+                    PopTip.show("正在查询开门状态...")
                     // 开始执行任务,每 3 秒执行一次
                     startCountdownLock()
                     handlerUtil.startTask(task, 1000)
@@ -1570,19 +1616,17 @@ class ChemicalsAlsoActivity : BaseCountDownActivity<ActivityChemicalsAlsoBinding
                     if (isok) {//再次开门
                         handlerUtil.stopAllTasks()
                         countdownTimer?.cancel()
-                        dismissLoading()
                         isok = false
                     } else {
+                        PopTip.show("开锁成功!")
                         //开锁成功
                         handlerUtil.stopAllTasks()
                         countdownTimer?.cancel()
-                        dismissLoading()
                         //开锁成功
                         weighData()
                     }
                 }
             }, { throwable ->
-                dismissLoading()
                 showNetError(throwable)
 
             })

+ 73 - 31
app/src/main/java/xn/hxp/ui/uses/UseActivity.kt

@@ -17,6 +17,7 @@ import com.bumptech.glide.load.engine.DiskCacheStrategy
 import com.bumptech.glide.request.RequestOptions
 import xn.hxp.app.ChemicalApp
 import xn.hxp.R
+import xn.hxp.blu.BluetoothConnectionManager
 import xn.hxp.comm.Constants
 import xn.hxp.databinding.ActivityUseBinding
 import xn.hxp.ui.SplashActivity
@@ -37,8 +38,6 @@ import com.rc.httpcore.HttpConfig
 import com.rc.httpcore.bean.*
 import com.rc.httpcore.client.ApiRepository
 import kotlinx.coroutines.*
-import xn.hxp.utils.bluetooth.BluetoothTool
-import xn.hxp.utils.bluetooth.BluetoothTool.BluetoothCallBack
 import java.lang.Runnable
 import java.math.BigDecimal
 import java.nio.charset.StandardCharsets
@@ -543,42 +542,85 @@ class UseActivity : BaseCountDownActivity<ActivityUseBinding>() {
     private fun connectToDeviceWithTimeout() {
         showToast("连接中...", Toast.LENGTH_SHORT)
         lifecycleScope.launch {
-            MediaPlayerHelper.playRawMp3(this@UseActivity, R.raw.qing_zheng_zhong)
-            BluetoothTool.INSTANCE.connect(object : BluetoothCallBack {
-                override fun callBack(weight: String) {
-                    if ("" == weight || weight.isEmpty()) {
-                        return
-                    }
-                    if (weight.toDouble() > 2999) {
-                        turnOffWeighing()
-                    } else {
-                        if (weight.toDouble() > 0) {
-                            if (mWeighingValue!!.text.toString().trim()
-                                    .isNotEmpty()
-                            ) {
-                                if (weight.toDouble() == mWeighingValue!!.text.toString()
-                                        .trim().toDouble()
-                                ) {
-                                    if (!taskStarted) {
-                                        taskStarted = true
-                                        LogUtils.i("=====执行了")
-                                        delayedTaskToUpdateUI()
-                                        return
+            val deviceAddress = withContext(Dispatchers.IO) {
+                BluetoothConnectionManager.getDeviceAddress()
+            }
+            if (deviceAddress != null) {
+                val socket = withContext(Dispatchers.IO) {
+                    BluetoothConnectionManager.connectToDevice(deviceAddress)
+                }
+                if (socket != null) {
+                    // 连接成功后的处理逻辑
+                    // 在这里使用返回的 BluetoothSocket 对象进行后续操作
+                    MediaPlayerHelper.playRawMp3(this@UseActivity, R.raw.qing_zheng_zhong)
+                    // 连接成功后的处理逻辑
+                    withContext(Dispatchers.Main) {
+                        do {
+//                            try {
+                            val inputStream = socket!!.inputStream
+                            val bt = ByteArray(1024)
+                            val content = inputStream!!.read(bt)
+                            if (content != null && content > 0) {
+                                val contents = String(
+                                    bt,
+                                    0,
+                                    content,
+                                    StandardCharsets.UTF_8
+                                )
+                                val split = contents.split("\n")
+                                val weight = split[0].trim()
+                                LogUtils.i("===================称重未处理之前=======$contents")
+                                LogUtils.i("===================weight=======$weight")
+                                LogUtils.i("=====称重数据$weight $taskStarted  ${mWeighingValue!!.text.toString()}")
+                                if (weight.toDouble() > 2999) {
+                                    turnOffWeighing()
+                                } else {
+                                    if (weight.toDouble() > 0) {
+                                        if (mWeighingValue!!.text.toString().trim()
+                                                .isNotEmpty()
+                                        ) {
+                                            if (weight.toDouble() == mWeighingValue!!.text.toString()
+                                                    .trim().toDouble()
+                                            ) {
+                                                if (taskStarted == false) {
+                                                    taskStarted = true
+                                                    LogUtils.i("=====执行了")
+                                                    socket.close()
+                                                    delayedTaskToUpdateUI()
+                                                    break
+                                                }
+                                            }
+                                        }
+                                        mWeighingValue!!.setText("$weight")
+                                    } else {
+                                        mWeighingValue!!.setText("")
                                     }
                                 }
+                                delay(200)
+                            } else {
+//                                jobTow?.cancel()
+                                showToast("请手动输入")
+                                weiView()
+                                break
                             }
-                            mWeighingValue!!.setText("$weight")
-                        } else {
-                            mWeighingValue!!.setText("")
-                        }
+//                            } catch (e: Exception) {
+//                                jobTow?.cancel()
+//                                weiView()
+//                                break
+//                            }
+                        } while (mWeighDialog != null && mWeighDialog!!.isShowing)
                     }
-                }
 
-                override fun connectFailed(msg: String) {
-                    showToast("找不到设备", Toast.LENGTH_SHORT)
+                } else {
+                    // 连接失败的处理逻辑
+                    showToast("连接失败或超时", Toast.LENGTH_SHORT)
                     weiView()
                 }
-            })
+            } else {
+                // 根据设备名称获取的设备地址为空,处理无法找到设备的情况
+                showToast("找不到设备", Toast.LENGTH_SHORT)
+                weiView()
+            }
         }
     }
 

+ 9 - 2
app/src/main/java/xn/hxp/ui/verify/DoubleVerifyActivityHelp.java

@@ -137,6 +137,10 @@ public class DoubleVerifyActivityHelp {
             activity.doubleVerifyList.set(0, new Triple<>(true, isAdmin, Long.valueOf(userValidation.getUserId())));
             // 切换到第二位验证人 默认人脸方式
             switchShowDetect(DetectType.FACE_DETECT, false, true);
+            if (null != qrTimer) {
+                qrTimer.cancel();
+                qrTimer = null;
+            }
         }
         if (first.getFirst() && !second.getFirst()) {
             //  至少一个人是管理员
@@ -153,8 +157,13 @@ public class DoubleVerifyActivityHelp {
             activity.doubleVerifyList.set(1, new Triple<>(true, isAdmin, Long.valueOf(userValidation.getUserId())));
             binding.hint2IV.setText("第二位验证已通过");
             PopTip.show("第2位验证已通过!");
+
             userValidation2 = userValidation;
             doubleVerifySuccess();
+            if (null != qrTimer) {
+                qrTimer.cancel();
+                qrTimer = null;
+            }
         }
 
     }
@@ -372,8 +381,6 @@ public class DoubleVerifyActivityHelp {
                         @Override
                         public void onSuccess(UserValidationBean result) {
                             if (null != result) {
-                                qrTimer.cancel();
-                                qrTimer = null;
                                 verifyProcess(result);
                             }
                         }

+ 5 - 1
app/src/main/java/xn/hxp/ui/verify/TwoVerificationActivity.kt

@@ -33,6 +33,7 @@ import com.google.zxing.WriterException
 import com.google.zxing.common.BitMatrix
 import com.lztek.toolkit.Lztek
 import com.blankj.utilcode.util.LogUtils
+import com.kongzue.dialogx.dialogs.WaitDialog
 import com.rc.httpcore.HttpClient
 import com.rc.httpcore.HttpConfig
 import com.rc.httpcore.bean.UserValidationBean
@@ -1086,6 +1087,7 @@ class TwoVerificationActivity : BaseCountDownActivity<ActivityTwoVerificationBin
 
         //刷卡
         TextViewDebouncer.setDebouncedOnClickListener(viewBinding.campus, 1000L) {
+            WaitDialog.dismiss()
             mUIDelegate.clearDisposable()
             mVerOne = 2
             closeOneMission()
@@ -1138,6 +1140,7 @@ class TwoVerificationActivity : BaseCountDownActivity<ActivityTwoVerificationBin
 
         //第二个人 人脸
         TextViewDebouncer.setDebouncedOnClickListener(viewBinding.faceRoa, 1000L) {
+            WaitDialog.dismiss()
             mHandleScanEvent = true
             mVerTwo = 1
             viewBinding.tvMsgRoe.text = "请 第 二 位 人 脸 验 证"
@@ -1206,6 +1209,7 @@ class TwoVerificationActivity : BaseCountDownActivity<ActivityTwoVerificationBin
 
         //刷卡
         TextViewDebouncer.setDebouncedOnClickListener(viewBinding.campusTwo, 1000L) {
+            WaitDialog.dismiss()
             mVerTwo = 2
             LogUtils.i("=======当前刷卡====$count")
             if (count == 2) {
@@ -1259,7 +1263,7 @@ class TwoVerificationActivity : BaseCountDownActivity<ActivityTwoVerificationBin
         //扫码
         TextViewDebouncer.setDebouncedOnClickListener(viewBinding.scanTwo, 1000L) {
 //            closeFace(4)
-
+            WaitDialog.dismiss()
             mVerTwo = 3
             viewBinding.tvMsgRoe.text = "请 第 二 位 扫 码 验 证"
             viewBinding.tvMsgRoc.text = "请打开微信扫描屏幕二维码"

+ 76 - 24
app/src/main/java/xn/hxp/ui/warehousing/WarehousingActivity.kt

@@ -25,6 +25,7 @@ import kotlinx.coroutines.*
 import retrofit2.HttpException
 import xn.hxp.R
 import xn.hxp.app.ChemicalApp
+import xn.hxp.blu.BluetoothConnectionManager
 import xn.hxp.comm.Constants
 import xn.hxp.databinding.ActivityWarehousingBinding
 import xn.hxp.ui.PrintBean
@@ -564,37 +565,88 @@ class WarehousingActivity : BaseCountDownActivity<ActivityWarehousingBinding>()
     }
 
     private suspend fun connectToDeviceWithTimeout() {
-        BluetoothTool.INSTANCE.connect(object : BluetoothCallBack {
-            override fun callBack(weight: String) {
-                if (weight.toDouble() > 2999) {
-                    turnOffWeighing()
-                } else {
-                    if (weight.toDouble() > 0) {
-                        if (mWeighingValue!!.text.toString().trim()
-                                .isNotEmpty()
-                        ) {
-                            if (weight.toDouble() == mWeighingValue!!.text.toString()
-                                    .trim().toDouble()
-                            ) {
-                                if (taskStarted == false) {
-                                    taskStarted = true
-                                    LogUtils.i("=====执行了")
-                                    delayedTaskToUpdateUI()
+        showToast("连接中...", Toast.LENGTH_SHORT)
+        lifecycleScope.launch {
+            val deviceAddress = withContext(Dispatchers.IO) {
+                BluetoothConnectionManager.getDeviceAddress()
+            }
+            if (deviceAddress != null) {
+                val socket = withContext(Dispatchers.IO) {
+                    BluetoothConnectionManager.connectToDevice(deviceAddress)
+                }
+                if (socket != null) {
+                    // 连接成功后的处理逻辑
+                    // 在这里使用返回的 BluetoothSocket 对象进行后续操作
+                    MediaPlayerHelper.playRawMp3(this@WarehousingActivity, R.raw.qing_zheng_zhong)
+                    // 连接成功后的处理逻辑
+                    withContext(Dispatchers.Main) {
+                        do {
+//                            try {
+                            val inputStream = socket!!.inputStream
+                            val bt = ByteArray(1024)
+                            val content = inputStream!!.read(bt)
+                            if (content != null && content > 0) {
+                                val contents = String(
+                                    bt,
+                                    0,
+                                    content,
+                                    StandardCharsets.UTF_8
+                                )
+                                val split = contents.split("\n")
+                                val weight = split[0].trim()
+                                LogUtils.i("===================称重未处理之前=======$contents")
+                                LogUtils.i("===================weight=======$weight")
+                                LogUtils.i("=====称重数据$weight $taskStarted  ${mWeighingValue!!.text.toString()}")
+                                if (weight.toDouble() > 2999) {
+                                    turnOffWeighing()
+                                } else {
+                                    if (weight.toDouble() > 0) {
+                                        if (mWeighingValue!!.text.toString().trim()
+                                                .isNotEmpty()
+                                        ) {
+                                            if (weight.toDouble() == mWeighingValue!!.text.toString()
+                                                    .trim().toDouble()
+                                            ) {
+                                                if (taskStarted == false) {
+                                                    taskStarted = true
+                                                    LogUtils.i("=====执行了")
+                                                    socket.close()
+                                                    delayedTaskToUpdateUI()
+                                                    break
+                                                }
+                                            }
+                                        }
+                                        mWeighingValue!!.setText("$weight")
+                                    } else {
+                                        mWeighingValue!!.setText("")
+                                    }
                                 }
+                                delay(200)
+                            } else {
+//                                jobTow?.cancel()
+                                showToast("请手动输入")
+                                weiView()
+                                break
                             }
-                        }
-                        mWeighingValue!!.setText("$weight")
-                    } else {
-                        mWeighingValue!!.setText("")
+//                            } catch (e: Exception) {
+//                                jobTow?.cancel()
+//                                weiView()
+//                                break
+//                            }
+                        } while (mWeighDialog != null && mWeighDialog!!.isShowing)
                     }
-                }
-            }
 
-            override fun connectFailed(msg: String) {
+                } else {
+                    // 连接失败的处理逻辑
+                    showToast("连接失败或超时", Toast.LENGTH_SHORT)
+                    weiView()
+                }
+            } else {
+                // 根据设备名称获取的设备地址为空,处理无法找到设备的情况
                 showToast("找不到设备", Toast.LENGTH_SHORT)
                 weiView()
             }
-        })
+        }
     }
 
     private fun showToast(message: String, duration: Int) {

+ 2 - 0
app/src/main/java/xn/hxp/weidith/prin_label_dialog/PrintLabelDialog.java

@@ -179,8 +179,10 @@ public class PrintLabelDialog extends AppCompatDialog {
                         printBean.setTypes(TextUtils.isEmpty(chemicalCategory) ? "" : chemicalCategory.toString());
                         // 打印
                         if (isPrint) {
+                            LogUtils.json("打印机前", labelList);
                             PrintTool.INSTANCE.print(belongType == 2, printBean);
                         }
+                        Thread.sleep(200);
                     }
                     return null;
                 }

+ 24 - 2
app/src/main/res/layout/activity_add.xml

@@ -587,11 +587,33 @@
 
                 </LinearLayout>
 
-                <View
+                <LinearLayout
                     android:layout_width="match_parent"
                     android:layout_height="65px"
                     android:layout_marginStart="50px"
-                    android:layout_weight="1" />
+                    android:layout_weight="1"
+                    android:gravity="center_vertical">
+
+                    <TextView
+                        android:layout_width="120px"
+                        android:layout_height="wrap_content"
+                        android:gravity="end"
+                        android:text="过期日期"
+                        android:textColor="#333" />
+
+
+                    <TextView
+                        android:id="@+id/chemical_expires_TV"
+                        android:layout_width="250px"
+                        android:layout_height="50px"
+                        android:layout_marginStart="20px"
+                        android:background="@drawable/shape_input_box"
+                        android:gravity="center_vertical"
+                        android:hint="选择过期日期"
+                        android:paddingHorizontal="10px"
+                        android:textAppearance="@style/input_hint_text_size"
+                        app:drawableEndCompat="@drawable/vector_input_down_arrow" />
+                </LinearLayout>
 
             </LinearLayout>
 

+ 12 - 12
serialport/.cxx/Debug/6e5q1f5t/arm64-v8a/configure_fingerprint.bin

@@ -2,28 +2,28 @@ C/C++ Structured Logb
 `
 ^D:\work\HuaXuePin\xn_hxp\serialport\.cxx\Debug\6e5q1f5t\arm64-v8a\additional_project_files.txtC
 A
-?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint	Ù„œ½Ò2 —’¼‘Ò2_
+?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint	Ýà“ÁÒ2 —’¼‘Ò2_
 ]
-[D:\work\HuaXuePin\xn_hxp\serialport\.cxx\Debug\6e5q1f5t\arm64-v8a\android_gradle_build.json	Ù„œ½Ò2˜
+[D:\work\HuaXuePin\xn_hxp\serialport\.cxx\Debug\6e5q1f5t\arm64-v8a\android_gradle_build.json	Ýà“ÁÒ2˜
  œ’¼‘Ò2d
 b
-`D:\work\HuaXuePin\xn_hxp\serialport\.cxx\Debug\6e5q1f5t\arm64-v8a\android_gradle_build_mini.json	Ù„œ½Ò2”	 ¼’¼‘Ò2Q
+`D:\work\HuaXuePin\xn_hxp\serialport\.cxx\Debug\6e5q1f5t\arm64-v8a\android_gradle_build_mini.json	Ýà“ÁÒ2”	 ¼’¼‘Ò2Q
 O
-MD:\work\HuaXuePin\xn_hxp\serialport\.cxx\Debug\6e5q1f5t\arm64-v8a\build.ninja	Ù„œ½Ò2މ 쑼‘Ò2U
+MD:\work\HuaXuePin\xn_hxp\serialport\.cxx\Debug\6e5q1f5t\arm64-v8a\build.ninja	Ýà“ÁÒ2މ 쑼‘Ò2U
 S
-QD:\work\HuaXuePin\xn_hxp\serialport\.cxx\Debug\6e5q1f5t\arm64-v8a\build.ninja.txt	Ù„œ½Ò2Z
+QD:\work\HuaXuePin\xn_hxp\serialport\.cxx\Debug\6e5q1f5t\arm64-v8a\build.ninja.txt	Ýà“ÁÒ2Z
 X
-VD:\work\HuaXuePin\xn_hxp\serialport\.cxx\Debug\6e5q1f5t\arm64-v8a\build_file_index.txt	Ù„œ½Ò2
? ¿’¼‘Ò2[
+VD:\work\HuaXuePin\xn_hxp\serialport\.cxx\Debug\6e5q1f5t\arm64-v8a\build_file_index.txt	Ýà“ÁÒ2
? ¿’¼‘Ò2[
 Y
-WD:\work\HuaXuePin\xn_hxp\serialport\.cxx\Debug\6e5q1f5t\arm64-v8a\compile_commands.json	Ù„œ½Ò2¸ 둼‘Ò2_
+WD:\work\HuaXuePin\xn_hxp\serialport\.cxx\Debug\6e5q1f5t\arm64-v8a\compile_commands.json	Ýà“ÁÒ2¸ 둼‘Ò2_
 ]
-[D:\work\HuaXuePin\xn_hxp\serialport\.cxx\Debug\6e5q1f5t\arm64-v8a\compile_commands.json.bin	Ù„œ½Ò2	… 둼‘Ò2e
+[D:\work\HuaXuePin\xn_hxp\serialport\.cxx\Debug\6e5q1f5t\arm64-v8a\compile_commands.json.bin	Ýà“ÁÒ2	… 둼‘Ò2e
 c
-aD:\work\HuaXuePin\xn_hxp\serialport\.cxx\Debug\6e5q1f5t\arm64-v8a\metadata_generation_command.txt	Ù„œ½Ò2
+aD:\work\HuaXuePin\xn_hxp\serialport\.cxx\Debug\6e5q1f5t\arm64-v8a\metadata_generation_command.txt	Ýà“ÁÒ2
 ž ¾’¼‘Ò2X
 V
-TD:\work\HuaXuePin\xn_hxp\serialport\.cxx\Debug\6e5q1f5t\arm64-v8a\prefab_config.json	Ù„œ½Ò2
( ¾’¼‘Ò2]
+TD:\work\HuaXuePin\xn_hxp\serialport\.cxx\Debug\6e5q1f5t\arm64-v8a\prefab_config.json	Ýà“ÁÒ2
( ¾’¼‘Ò2]
 [
-YD:\work\HuaXuePin\xn_hxp\serialport\.cxx\Debug\6e5q1f5t\arm64-v8a\symbol_folder_index.txt	Ù„œ½Ò2
X ¾’¼‘Ò2C
+YD:\work\HuaXuePin\xn_hxp\serialport\.cxx\Debug\6e5q1f5t\arm64-v8a\symbol_folder_index.txt	Ýà“ÁÒ2
X ¾’¼‘Ò2C
 A
-?D:\work\HuaXuePin\xn_hxp\serialport\src\main\cpp\CMakeLists.txt	Ù„œ½Ò2
Ó ÈÒðê©2
+?D:\work\HuaXuePin\xn_hxp\serialport\src\main\cpp\CMakeLists.txt	Ýà“ÁÒ2
Ó ÈÒðê©2

+ 12 - 12
serialport/.cxx/Debug/6e5q1f5t/x86/configure_fingerprint.bin

@@ -2,27 +2,27 @@ C/C++ Structured Log\
 Z
 XD:\work\HuaXuePin\xn_hxp\serialport\.cxx\Debug\6e5q1f5t\x86\additional_project_files.txtC
 A
-?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint	˜ôû´Ò2 ï“…‘Ò2Y
+?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint	†ì½Ò2 ï“…‘Ò2Y
 W
-UD:\work\HuaXuePin\xn_hxp\serialport\.cxx\Debug\6e5q1f5t\x86\android_gradle_build.json	˜ôû´Ò2ô	 ô“…‘Ò2^
+UD:\work\HuaXuePin\xn_hxp\serialport\.cxx\Debug\6e5q1f5t\x86\android_gradle_build.json	†ì½Ò2ô	 ô“…‘Ò2^
 \
-ZD:\work\HuaXuePin\xn_hxp\serialport\.cxx\Debug\6e5q1f5t\x86\android_gradle_build_mini.json	˜ôû´Ò2ð –”…‘Ò2K
+ZD:\work\HuaXuePin\xn_hxp\serialport\.cxx\Debug\6e5q1f5t\x86\android_gradle_build_mini.json	†ì½Ò2ð –”…‘Ò2K
 I
-GD:\work\HuaXuePin\xn_hxp\serialport\.cxx\Debug\6e5q1f5t\x86\build.ninja	˜ôû´Ò2Õˆ “…‘Ò2O
+GD:\work\HuaXuePin\xn_hxp\serialport\.cxx\Debug\6e5q1f5t\x86\build.ninja	†ì½Ò2Õˆ “…‘Ò2O
 M
-KD:\work\HuaXuePin\xn_hxp\serialport\.cxx\Debug\6e5q1f5t\x86\build.ninja.txt	˜ôû´Ò2T
+KD:\work\HuaXuePin\xn_hxp\serialport\.cxx\Debug\6e5q1f5t\x86\build.ninja.txt	†ì½Ò2T
 R
-PD:\work\HuaXuePin\xn_hxp\serialport\.cxx\Debug\6e5q1f5t\x86\build_file_index.txt	˜ôû´Ò2
? ™”…‘Ò2U
+PD:\work\HuaXuePin\xn_hxp\serialport\.cxx\Debug\6e5q1f5t\x86\build_file_index.txt	†ì½Ò2
? ™”…‘Ò2U
 S
-QD:\work\HuaXuePin\xn_hxp\serialport\.cxx\Debug\6e5q1f5t\x86\compile_commands.json	˜ôû´Ò2¯ Á“…‘Ò2Y
+QD:\work\HuaXuePin\xn_hxp\serialport\.cxx\Debug\6e5q1f5t\x86\compile_commands.json	†ì½Ò2¯ Á“…‘Ò2Y
 W
-UD:\work\HuaXuePin\xn_hxp\serialport\.cxx\Debug\6e5q1f5t\x86\compile_commands.json.bin	˜ôû´Ò2	ü Á“…‘Ò2_
+UD:\work\HuaXuePin\xn_hxp\serialport\.cxx\Debug\6e5q1f5t\x86\compile_commands.json.bin	†ì½Ò2	ü Á“…‘Ò2_
 ]
-[D:\work\HuaXuePin\xn_hxp\serialport\.cxx\Debug\6e5q1f5t\x86\metadata_generation_command.txt	˜ôû´Ò2
+[D:\work\HuaXuePin\xn_hxp\serialport\.cxx\Debug\6e5q1f5t\x86\metadata_generation_command.txt	‡ì½Ò2
 € ˜”…‘Ò2R
 P
-ND:\work\HuaXuePin\xn_hxp\serialport\.cxx\Debug\6e5q1f5t\x86\prefab_config.json	˜ôû´Ò2
( ˜”…‘Ò2W
+ND:\work\HuaXuePin\xn_hxp\serialport\.cxx\Debug\6e5q1f5t\x86\prefab_config.json	‡ì½Ò2
( ˜”…‘Ò2W
 U
-SD:\work\HuaXuePin\xn_hxp\serialport\.cxx\Debug\6e5q1f5t\x86\symbol_folder_index.txt	˜ôû´Ò2
R ™”…‘Ò2C
+SD:\work\HuaXuePin\xn_hxp\serialport\.cxx\Debug\6e5q1f5t\x86\symbol_folder_index.txt	‡ì½Ò2
R ™”…‘Ò2C
 A
-?D:\work\HuaXuePin\xn_hxp\serialport\src\main\cpp\CMakeLists.txt	˜ôû´Ò2
Ó ÈÒðê©2
+?D:\work\HuaXuePin\xn_hxp\serialport\src\main\cpp\CMakeLists.txt	‡ì½Ò2
Ó ÈÒðê©2