Explorar o código

feat 增加小票打印加油员姓名

robin %!s(int64=4) %!d(string=hai) anos
pai
achega
2421cf7c16

+ 2 - 2
app/build.gradle

@@ -13,8 +13,8 @@ android {
         applicationId "com.doverfuelingsolutions.issp"
         minSdkVersion 22
         targetSdkVersion 26
-        versionCode 3
-        versionName "1.0.16"
+        versionCode 4
+        versionName "1.1.17"
         archivesBaseName = versionName + "." + getTime()
 
         testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"

+ 32 - 0
app/src/main/java/com/doverfuelingsolutions/issp/api/SystemApi.kt

@@ -15,6 +15,7 @@ import com.doverfuelingsolutions.issp.utils.log.DFSLog
 import com.doverfuelingsolutions.issp.utils.thread.ThreadUtil
 import com.wayne.www.waynelib.fdc.message.DeviceClass
 import com.wayne.www.waynelib.webservice.entity.*
+import okhttp3.ResponseBody
 import org.json.JSONArray
 import retrofit2.Call
 import retrofit2.Callback
@@ -381,6 +382,37 @@ object SystemApi {
         serviceConfig = makeConfigService()
     }
 
+    /**
+     * 获取POS订单小票
+     */
+    suspend fun getPosTicketInfo(trxId: String): DFSResult<ResultPosTicketInfo> {
+        return suspendCoroutine {
+            val tip = "获取POS订单小票信息失败"
+            serviceBase.posTicketInfo(trxId).enqueue(object : Callback<ResponseBody> {
+                override fun onResponse(call: Call<ResponseBody>, response: Response<ResponseBody>) {
+                    val code = response.code()
+                    val body = response.body()?.string()
+                    if (code != 200 || body == null) {
+                        it.resume(DFSResult.fail(tip))
+                        return
+                    }
+                    // 加油员
+                    val index1 = body.indexOf("加油员:")
+                    val index2 = body.indexOf("<", index1)
+                    val fuelGuy = body.slice((index1 + 4) until index2).trim()
+                    it.resume(DFSResult.success(ResultPosTicketInfo(
+                        fuelGuy
+                    )))
+                }
+
+                override fun onFailure(call: Call<ResponseBody>, t: Throwable) {
+                    DFSLog.e(tip, t)
+                    it.resume(DFSResult.fail("$tip: ${t.message}"))
+                }
+            })
+        }
+    }
+
     private fun makeLoginService(): ServiceLogin {
         return RetrofitUtil.getGsonBuilder()
             .baseUrl(WayneApiConfig.HOST_BASE)

+ 1 - 0
app/src/main/java/com/doverfuelingsolutions/issp/api/WayneApiConfig.kt

@@ -19,6 +19,7 @@ class WayneApiConfig {
         const val PATH_BARCODE = "api/products/barcode/{id}"
         const val PATH_PAY_BY_ID = "api/Transactions/{id}/payment"
         const val PATH_VERSION_FILE = "isspt/version.json"
+        const val POS_TICKET_INFO = "api/receipt/{trxId}/maxChar/40"
 
         const val CONFIG_LOGO = "SiteLogo"
 

+ 5 - 0
app/src/main/java/com/doverfuelingsolutions/issp/api/dto/ResultPosTicketInfo.kt

@@ -0,0 +1,5 @@
+package com.doverfuelingsolutions.issp.api.dto
+
+data class ResultPosTicketInfo(
+    val employee: String,
+)

+ 3 - 0
app/src/main/java/com/doverfuelingsolutions/issp/api/service/ServiceBase.kt

@@ -16,4 +16,7 @@ interface ServiceBase {
     @Headers("requestName: barcodeInfo")
     @GET(WayneApiConfig.PATH_BARCODE)
     fun barcodeInfo(@Path("id") id: Int): Call<ResultBarcode>
+
+    @GET(WayneApiConfig.POS_TICKET_INFO)
+    fun posTicketInfo(@Path("trxId") trxId: String): Call<ResponseBody>
 }

+ 3 - 3
app/src/main/java/com/doverfuelingsolutions/issp/driver/lib/PrintManager.kt

@@ -17,7 +17,7 @@ import kotlin.coroutines.suspendCoroutine
 class PrintManager : LifecycleObserver, PrintStatusListen {
 
     companion object {
-        const val STATUS_FAIL_INIT = -1
+        var operator = ""
     }
 
     private lateinit var comPrintManager: ComPrintManager
@@ -31,7 +31,7 @@ class PrintManager : LifecycleObserver, PrintStatusListen {
         callback = null
     }
 
-    suspend fun print(dc: DeviceClass, posTrxBean: ResultPayment.PosTrxBean) = suspendCoroutine<DFSResult<Any>> {
+    suspend fun print(dc: DeviceClass, posTrxBean: ResultPayment.PosTrxBean, operator: String) = suspendCoroutine<DFSResult<Any>> {
         val manager = this
         ThreadUtil.io {
             if (!manager::comPrintManager.isInitialized) {
@@ -46,7 +46,7 @@ class PrintManager : LifecycleObserver, PrintStatusListen {
             callback = { success ->
                 it.resume(if (success) DFSResult.success(true) else DFSResult.fail(R.string.fail_print))
             }
-            comPrintManager.printOrderOkBillHs(dc, posTrxBean)
+            comPrintManager.printOrderOkBillHs(dc, posTrxBean, operator)
         }
     }
 

+ 3 - 1
app/src/main/java/com/doverfuelingsolutions/issp/driver/printer/ComPrintManager.java

@@ -49,7 +49,7 @@ public class ComPrintManager implements PrintManager, DataReceivedListener {
     /**
      * 支付成功后的小票打印
      */
-    public void printOrderOkBillHs(DeviceClass dc, ResultPayment.PosTrxBean ptb) throws Exception {
+    public void printOrderOkBillHs(DeviceClass dc, ResultPayment.PosTrxBean ptb, String operator) throws Exception {
         if (serialControl == null) return;
         if (ptb == null || dc == null) return;
 
@@ -80,6 +80,8 @@ public class ComPrintManager implements PrintManager, DataReceivedListener {
             if (ib.isHaveTagId())
                 serialControl.send(PrintCmd.PrintString("员工卡号:" + ib.getCardNo(), 0));
         }
+        if (!operator.isEmpty())
+            serialControl.send(PrintCmd.PrintString("员工姓名:" + operator, 0));
 //        serialControl.send(PrintCmd.PrintString("加油时间:" + ib.getItem().getCreatedDateTime(), 0));
         serialControl.send(PrintCmd.PrintFeedline(1));
 //        serialControl.send(PrintCmd.PrintString("支付方式:" + payResult.getMyPayType(), 0));

+ 5 - 2
app/src/main/java/com/doverfuelingsolutions/issp/view/fragment/FragmentPayResult.kt

@@ -27,11 +27,12 @@ import kotlinx.coroutines.launch
 class FragmentPayResult private constructor() : FragmentBasic(), View.OnClickListener {
 
     companion object {
-        fun build(dc: DeviceClass, posTrxBean: ResultPayment.PosTrxBean): FragmentPayResult {
+        fun build(dc: DeviceClass, posTrxBean: ResultPayment.PosTrxBean, operator: String): FragmentPayResult {
             return FragmentPayResult().apply {
                 arguments = bundleOf(
                     Pair("dc", dc),
                     Pair("posTrxBean", posTrxBean),
+                    Pair("operator", operator),
                 )
             }
         }
@@ -39,6 +40,7 @@ class FragmentPayResult private constructor() : FragmentBasic(), View.OnClickLis
 
     private lateinit var dc: DeviceClass
     private lateinit var posTrxBean: ResultPayment.PosTrxBean
+    private lateinit var operator: String
 
     override val title: String = StringUtil.get(R.string.pay_success)
     override val showButtonBack: Boolean = false
@@ -51,6 +53,7 @@ class FragmentPayResult private constructor() : FragmentBasic(), View.OnClickLis
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
 
+        operator = arguments?.getString("operator", "") ?: ""
         val sDC = arguments?.getSerializable("dc")
         val sPos = arguments?.getSerializable("posTrxBean")
         if (sDC is DeviceClass && sPos is ResultPayment.PosTrxBean) {
@@ -100,7 +103,7 @@ class FragmentPayResult private constructor() : FragmentBasic(), View.OnClickLis
 
     private fun print() {
         lifecycleScope.launchWhenStarted {
-            val result = printManager.print(dc, posTrxBean)
+            val result = printManager.print(dc, posTrxBean, operator)
             if (result.success) {
                 viewModel.isReprint.value = false
             } else {

+ 5 - 1
app/src/main/java/com/doverfuelingsolutions/issp/view/fragment/FragmentPayScanCode.kt

@@ -126,8 +126,12 @@ class FragmentPayScanCode private constructor() : FragmentBasic() {
                     }
                 }
 
+                // 获取加油员名称
+                val resultInfo = SystemApi.getPosTicketInfo(posTrx.id)
+
+
                 if (result.success) {
-                    (requireActivity() as MainActivity).fragmentRouter.push(FragmentPayResult.build(dc, result.data!!.PosTrx))
+                    (requireActivity() as MainActivity).fragmentRouter.push(FragmentPayResult.build(dc, result.data!!.PosTrx, resultInfo.data?.employee ?: ""))
                 } else {
                     DFSToastUtil.fail(result.message)
                     (requireActivity() as MainActivity).fragmentRouter.popBottom()