瀏覽代碼

ICT纸币器+MDB刷卡器

ccc 2 月之前
父節點
當前提交
1af9fa4e9e

+ 3 - 0
BaseLibrary/src/main/java/com/hboxs/base_library/constant/Name.java

@@ -357,5 +357,8 @@ public interface Name {
     String GkashsignatureKey="GkashsignatureKey";
     String GkashterminalID="GkashterminalID";
 
+    String ICTBILL_MDBCARD="ICTBILL_MDBCARD";//ICT纸币器+MDB刷卡器
+    String ICTSERIALPORT = "ictserialport";//ICT通讯地址
+
 }
 

+ 0 - 1
app/src/main/java/com/bgy/autosale/BootReceiver.java

@@ -23,7 +23,6 @@ public class BootReceiver extends BroadcastReceiver {
             start.setAction("com.bgy.action.main");
             start.setPackage(context.getPackageName());
             context.startActivity(start);
-
             Intent severIntent = new Intent(App.app, RemoteSupportService.class);
             if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                 context.startForegroundService(severIntent);

+ 10 - 4
app/src/main/java/com/bgy/autosale/ui/consumer/IceCreamFragment.java

@@ -545,9 +545,13 @@ public class IceCreamFragment extends BaseAutoExitFragment implements View.OnCli
     private Runnable mRunnable = new Runnable() {
         @Override
         public void run() {
-            MainActivity.openSerialPortA().addCommands(str1);
-            // 每隔500毫秒后再次执行
-            mHandler.postDelayed(this, 500);
+            try {
+                MainActivity.openSerialPortA().addCommands(str1);
+                // 每隔500毫秒后再次执行
+                mHandler.postDelayed(this, 500);
+            }catch (Exception e){
+
+            }
         }
     };
 
@@ -824,7 +828,9 @@ public class IceCreamFragment extends BaseAutoExitFragment implements View.OnCli
                 } else {
                     if (PreventSpeedClickUtil.isFastClick()) {
                         showLoading();
-                        getDiscountCodeOverseas(arrayCode[shoppingNumber], id);
+                        if (shoppingNumber >= 0 && shoppingNumber < arrayCode.length) {
+                            getDiscountCodeOverseas(arrayCode[shoppingNumber], id);
+                        }
                     } else {
                     }
                 }

+ 25 - 19
app/src/main/java/com/bgy/autosale/ui/consumer/PaySuccessFragment.java

@@ -27,6 +27,7 @@ import com.bgy.autosale.ui.base.BaseScanGunActivity;
 import com.bgy.autosale.ui.widget.CircularProgressView;
 import com.bgy.autosale.utils.IceCreamErrorUtils;
 import com.bgy.autosale.utils.PlcLog;
+import com.hboxs.base_library.constant.Global;
 import com.hboxs.base_library.constant.Name;
 import com.hboxs.base_library.event.ApiMessageEvent;
 import com.hboxs.base_library.util.LogUtils;
@@ -188,16 +189,19 @@ public class PaySuccessFragment extends BaseAutoExitFragment implements Callback
                         break;
                     case BasePlcAgreement.RESULT_CODE_ORDER_COMPLETE: // 3
                         updateFinishInfo();
-//                        exitTime = 5000; // 完成订单, 5秒超时退出
-                        new Handler().postDelayed(new Runnable() {
-                            @Override
-                            public void run() {
-                                if (getFragmentManager()!=null){
-                                    getFragmentManager().popBackStack();
+                        if (Global.isVersions == 1) {
+                            exitTime = 5000; // 完成订单, 5秒超时退出
+                        } else {
+                            new Handler().postDelayed(new Runnable() {
+                                @Override
+                                public void run() {
+                                    if (getFragmentManager() != null) {
+                                        getFragmentManager().popBackStack();
+                                    }
+                                    EventBus.getDefault().post(new ApiMessageEvent("clearMenu", 1));
                                 }
-                                EventBus.getDefault().post(new ApiMessageEvent("clearMenu", 1));
-                            }
-                        }, 5000);
+                            }, 5000);
+                        }
                         break;
                     default:
                         exitTime = 120000; // 不知道什么指令 2分钟超时退出
@@ -266,16 +270,18 @@ public class PaySuccessFragment extends BaseAutoExitFragment implements Callback
     // 订单完成界面数据
     private void updateFinishInfo() {
         UISoundHelper.getInstance().playOrderFinish();
-//        homeView.setVisibility(View.VISIBLE);
-//        homeView.setOnClickListener(new View.OnClickListener() {
-//            @Override
-//            public void onClick(View v) {
-//                resetFinishDelay();
-//                if (getFragmentManager()!=null){
-//                    getFragmentManager().popBackStack();
-//                }
-//            }
-//        });
+        if (Global.isVersions == 1) {
+            homeView.setVisibility(View.VISIBLE);
+            homeView.setOnClickListener(new View.OnClickListener() {
+                @Override
+                public void onClick(View v) {
+                    resetFinishDelay();
+                    if (getFragmentManager() != null) {
+                        getFragmentManager().popBackStack();
+                    }
+                }
+            });
+        }
 
         if (mix) {
             outTipView.setText("订单完成,欢迎下次光临~\nOrder Completed. Hope to see you again!");

+ 19 - 0
app/src/main/java/com/bgy/autosale/ui/operator/SwitchSettingActivity.java

@@ -29,6 +29,7 @@ public class SwitchSettingActivity extends BaseScanGunActivity implements View.O
     RadioButton rbPromotionCodeYes, rbPromotionCodeNo;
     RadioButton rbVoiceYes, rbVoiceNo;
     RadioButton rbShopCartYes, rbShopCartNo;
+    RadioButton rbIctMdbYes, rbIctMdbNo;
 
     Spinner spLanguage2;
     private ArrayAdapter<String> language2ArrayAdapter;
@@ -60,6 +61,20 @@ public class SwitchSettingActivity extends BaseScanGunActivity implements View.O
             public void onNothingSelected(AdapterView<?> parent) {
             }
         });
+
+        RadioGroup rgIctMdb = findViewById(R.id.rg_ict_mdb);
+        rgIctMdb.setOnCheckedChangeListener(this);
+
+        rbIctMdbYes = findViewById(R.id.rb_ict_mdb_yes);
+        rbIctMdbNo = findViewById(R.id.rb_ict_mdb_no);
+
+        Boolean isIctMdb = Hawk.get(Name.ICTBILL_MDBCARD, false);
+        if (isIctMdb) {
+            rbIctMdbYes.setChecked(true);
+        } else {
+            rbIctMdbNo.setChecked(true);
+        }
+
         RadioGroup rgShopCart = findViewById(R.id.rg_shop_cart);
         rgShopCart.setOnCheckedChangeListener(this);
 
@@ -167,6 +182,10 @@ public class SwitchSettingActivity extends BaseScanGunActivity implements View.O
             Hawk.put(Name.SHOPPING_TROLLEY, true);
         } else if (checkedId == R.id.rb_shop_cart_no) {
             Hawk.put(Name.SHOPPING_TROLLEY, false);
+        } else if (checkedId == R.id.rb_ict_mdb_yes) {
+            Hawk.put(Name.ICTBILL_MDBCARD, true);
+        } else if (checkedId == R.id.rb_ict_mdb_no) {
+            Hawk.put(Name.ICTBILL_MDBCARD, false);
         }
 
     }

+ 42 - 0
app/src/main/res/layout/activity_system_switch_setting.xml

@@ -324,6 +324,48 @@
                     android:textSize="@dimen/sp_8" />
             </RadioGroup>
         </LinearLayout>
+        <LinearLayout
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_gravity="center"
+            android:orientation="vertical"
+            tools:ignore="MissingConstraints">
+
+            <TextView
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_margin="@dimen/dp_8"
+                android:text="ICT MDB model"
+                android:textColor="#333"
+                android:textSize="@dimen/sp_14"
+                android:textStyle="bold" />
+
+            <RadioGroup
+                android:id="@+id/rg_ict_mdb"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:orientation="horizontal">
+
+                <RadioButton
+                    android:id="@+id/rb_ict_mdb_yes"
+                    android:layout_width="@dimen/dp_60"
+                    android:layout_height="@dimen/dp_26"
+                    android:gravity="center"
+                    android:text="@string/setting_switch_on"
+                    android:textColor="#576478"
+                    android:textSize="@dimen/sp_8" />
+
+                <RadioButton
+                    android:id="@+id/rb_ict_mdb_no"
+                    android:layout_width="@dimen/dp_60"
+                    android:layout_height="@dimen/dp_26"
+                    android:layout_marginLeft="@dimen/dp_20"
+                    android:gravity="center"
+                    android:text="@string/setting_switch_off"
+                    android:textColor="#576478"
+                    android:textSize="@dimen/sp_8" />
+            </RadioGroup>
+        </LinearLayout>
 
     </LinearLayout>
     </LinearLayout>

+ 1 - 1
app/src/main/res/values-en/strings.xml

@@ -61,7 +61,7 @@
     <string name="flavor_original">Vanilla Ice Cream</string>
     <string name="flavor_original_hw">Plain soft serve</string>
     <string name="flavor_multi">Multi-flavored ice cream</string>
-    <string name="flavor_sauce">Syrup +</string>
+    <string name="flavor_sauce">Syrups +</string>
     <string name="flavor_kernel">+ Toppings</string>
     <string name="shop_cart_add">Add to Cart</string>
     <string name="make_now">Making</string>

+ 1 - 1
config.gradle

@@ -5,7 +5,7 @@ ext {
             "minSdkVersion"                : 21,
             "targetSdkVersion"             : 28,
             "versionCode"                  : 110,
-            "versionName"                  : "1.0.79-5",//版本号修改
+            "versionName"                  : "1.0.80",//版本号修改
 
             "androidSupport"               : "28.0.0",
             "constraint-layout"            : "1.1.3",

+ 205 - 0
module_offpay/src/main/java/com/example/offpay/ictrs232/IctSerialPortUtil.java

@@ -0,0 +1,205 @@
+package com.example.offpay.ictrs232;
+
+import android.util.Log;
+
+import com.example.offpay.event.WmdbIctMessageEvent;
+import com.hboxs.base_library.constant.Global;
+import com.hboxs.base_library.constant.Name;
+import com.hboxs.base_library.util.LogUtils;
+import com.hboxs.base_library.util.PreventSpeedClickUtil;
+import com.orhanobut.hawk.Hawk;
+
+import org.greenrobot.eventbus.EventBus;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+
+import android_serialport_api.SerialPort;
+
+
+/**
+ * @author by AllenJ on 2018/4/20.
+ * <p>
+ * 通过串口用于接收或发送数据
+ */
+
+public class IctSerialPortUtil {
+    private static final String TAG = "SerialPortUtil";
+    private SerialPort serialPort = null;
+    private InputStream inputStream = null;
+    private OutputStream outputStream = null;
+    private ReceiveThread mReceiveThread = null;
+    private boolean isStart = false;
+    private SerialListen mSerialListen;
+
+    //-----------------单例模式 start---------------
+    private IctSerialPortUtil() {
+    }
+
+    private static IctSerialPortUtil sCreditCardMain;
+
+    public static IctSerialPortUtil getSerialPortUtil() {
+        if (sCreditCardMain == null) {
+            synchronized (IctSerialPortUtil.class) {//todo 修改了这里看看情况
+                sCreditCardMain = new IctSerialPortUtil();
+            }
+        }
+        return sCreditCardMain;
+    }
+    //-----------------单例模式 end---------------
+
+    /**
+     * 打开串口,接收数据
+     * 通过串口,接收单片机发送来的数据
+     */
+    public void openSerialPort(String path, int baudrate, int flags, int parity) {
+        try {
+//            serialPort = new SerialPort(new File(path), baudrate, flags, 1, 8, 1);// parity 1表示使用,0表示不使用奇偶校验。ict,如果这里做不好,就会导致接收的数据存在乱码
+            serialPort = new SerialPort(new File(path), baudrate, flags, parity, 8, 1);//威佛
+            //调用对象SerialPort方法,获取串口中"读和写"的数据流
+            inputStream = serialPort.getInputStream();
+            outputStream = serialPort.getOutputStream();
+            isStart = true;
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+
+        getSerialPort();
+    }
+
+    public void setSerialListen(SerialListen vSerialListen) {
+        mSerialListen = vSerialListen;
+    }
+
+    /**
+     * 关闭串口
+     * 关闭串口中的输入输出流
+     */
+    public void closeSerialPort() {
+        Log.i("test", "关闭串口");
+        try {
+            if (inputStream != null) {
+                inputStream.close();
+            }
+            if (outputStream != null) {
+                outputStream.close();
+            }
+            isStart = false;
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+    String lastData = "";
+    /**
+     * 发送数据
+     * 通过串口,发送数据到单片机
+     *
+     * @param data 要发送的数据
+     */
+    public void sendSerialPort(String data) {
+        //如果500发送 并且是12 则跳过
+        //如果500发送 但不是12 则不跳过
+        //如果不是快,那么就直接跳过。
+        if ((!PreventSpeedClickUtil.isFastClick500())&& "12".equals(data)) {
+            return;
+        }
+        if ("12".equals(data) && ("1304".equals(lastData)||lastData.startsWith("1302")||lastData.startsWith("1305")||lastData.startsWith("1300"))) {//如果上一次是10 06 ,這一次是12,則
+            //直接技術
+            lastData=data;
+            return;
+        }
+        //如果传递的数据为12
+        lastData=data;
+        Log.d(TAG, "sendSerialPort: " + data);
+        Log.d(TAG, "sendSerialPort: " + data);
+        Log.d(TAG, "creditCardVendCancel: 取消支付2start"+data);
+        LogUtils.logWrite("SWD:" + data);
+        try {
+            if (outputStream != null) {
+                byte[] sendData = DataUtils.HexToByteArr(data);
+                outputStream.write(sendData);
+                outputStream.flush();
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+    }
+
+    private void getSerialPort() {
+        if (mReceiveThread == null) {
+            mReceiveThread = new ReceiveThread();
+        }
+        try {
+            mReceiveThread.start();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * 接收串口数据的线程
+     */
+
+    private class ReceiveThread extends Thread {
+        @Override
+        public void run() {
+            super.run();
+            //条件判断,只要条件为true,则一直执行这个线程
+            StringBuilder sber = new StringBuilder();
+            String communicAtion = Hawk.get(Name.NOTE_COMMUNICATION, Name.WMDB);
+
+            while (isStart) {
+                if (inputStream == null) {
+                    return;
+                }
+                synchronized (Global.class) {
+                    byte[] readData = new byte[1024];
+                    try {
+                        int size = 0;
+                        /** 获取流中数据的量*/
+                        int i = inputStream.available();
+                        if (i == 0) {
+                            size = 0;
+                        } else {
+                            /** 流中有数据,则添加到临时数组中*/
+                            Log.d(TAG, "data run read: ");
+                            size = inputStream.read(readData);
+                        }
+                        if (size > 0) {
+//                            if (Name.WMDB.equals(communicAtion)) {
+//
+//                                String ascii = new String(readData, "ascii");
+//                                if (ascii.contains("\n")) {
+//                                    String substring = ascii.substring(0, size);
+//                                    sber.append(substring);
+////                                    if (mSerialListen != null) {
+//                                    String[] split = sber.toString().split("\n");
+//                                    for (String s1 : split) {
+//                                        if ("30 03".equals(s1)) {
+//                                            continue;
+//                                        }
+////                                        EventBus.getDefault().post(new WmdbIctMessageEvent(Name.SOEPAY_WMDB, s1.trim()));
+//                                    }
+//                                    sber.delete(0, sber.length());
+//                                } else {
+//                                    String substring = ascii.substring(0, size);
+//                                    sber.append(substring);
+//                                }
+//                            } else if (Name.ICT.equals(communicAtion)) {
+                                String readString = DataUtils.ByteArrToHex(readData, 0, size);
+                                EventBus.getDefault().post(new WmdbIctMessageEvent(Name.ICT, readString));
+//                            }
+                        }
+                        Thread.sleep(30);
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                        sber.delete(0, sber.length());
+                    }
+                }
+            }
+        }
+    }
+}

+ 26 - 4
module_offpay/src/main/java/com/example/offpay/service/OfflinePayService.java

@@ -22,6 +22,7 @@ import com.example.offpay.event.OfflineMessageEvent;
 import com.example.offpay.event.WmdbIctMessageEvent;
 import com.example.offpay.ictrs232.AmountMoney;
 import com.example.offpay.ictrs232.ByteUtils;
+import com.example.offpay.ictrs232.IctSerialPortUtil;
 import com.example.offpay.ictrs232.SerialPortUtil;
 import com.example.offpay.wmdb.WeaverUtil;
 import com.example.spunsugar.db.BillBeanDao;
@@ -58,6 +59,8 @@ public class OfflinePayService extends Service {
     private static final String NOTIFICATION_ID = "2";
     private static final CharSequence NOTIFICATION_NAME = "OfflinePayService";
     private SerialPortUtil serialPortUtil;
+    private IctSerialPortUtil ictSerialPortUtil;
+
     private Double nowAmountMoney;
     private String communicAtion = Hawk.get(Name.NOTE_COMMUNICATION, Name.WMDB);
     private BillBeanDao billBeanDao;
@@ -87,6 +90,7 @@ public class OfflinePayService extends Service {
         EventBus.getDefault().register(this);
         Log.d(TAG, "OfflinePayService onCreate: ");
         serialPortUtil = SerialPortUtil.getSerialPortUtil();
+        ictSerialPortUtil = IctSerialPortUtil.getSerialPortUtil();
 
 
         //信用卡器,纸币器初始化
@@ -120,7 +124,16 @@ public class OfflinePayService extends Service {
                         SerialPortUtil.getSerialPortUtil().sendSerialPort("3E");
                         Log.d(TAG, "run: Name.ICT");
                     } else if (Name.WMDB.equals(Hawk.get(Name.NOTE_COMMUNICATION, Name.WMDB))) {
-                        SerialPortUtil.getSerialPortUtil().openSerialPort("/dev/" + Hawk.get(Name.MDBSERIALPORT, "ttyS3"), 9600, 0, 0);
+                        if (Hawk.get(Name.ICTBILL_MDBCARD,false)){
+                            IctSerialPortUtil.getSerialPortUtil().openSerialPort("/dev/" + Hawk.get(Name.ICTSERIALPORT, "ttyS4"), 9600, 0, 1);
+                            IctSerialPortUtil.getSerialPortUtil().sendSerialPort("3E");
+                            Log.d(TAG, "run: ICTBILL_MDBCARD");
+                        }
+                        try{
+                            SerialPortUtil.getSerialPortUtil().openSerialPort("/dev/" + Hawk.get(Name.MDBSERIALPORT, "ttyS3"), 9600, 0, 0);
+                        }catch (Exception e){
+
+                        }
                         WeaverUtil.billValidatorEscrowPressure();
                     }
 
@@ -198,8 +211,13 @@ public class OfflinePayService extends Service {
         switch (asciiData) {
             case "808F"://上电,初始化【美国的,这里会不一样。】
             case "26":
-                serialPortUtil.sendSerialPort("02");
-                serialPortUtil.sendSerialPort("02");
+                if (Hawk.get(Name.ICTBILL_MDBCARD,false)){
+                    ictSerialPortUtil.sendSerialPort("02");
+                    ictSerialPortUtil.sendSerialPort("02");
+                }else {
+                    serialPortUtil.sendSerialPort("02");
+                    serialPortUtil.sendSerialPort("02");
+                }
                 break;
             case "8140":
             case "818F40":
@@ -264,7 +282,11 @@ public class OfflinePayService extends Service {
 
     private void pressing(int x) {
         nowAmountMoney = AmountMoney.earth[x];
-        serialPortUtil.sendSerialPort("02");//收钱
+        if (Hawk.get(Name.ICTBILL_MDBCARD,false)) {
+            ictSerialPortUtil.sendSerialPort("02");//收钱
+        }else {
+            serialPortUtil.sendSerialPort("02");//收钱
+        }
     }
 
     private void wmdbData(String asciiData) {