Browse Source

出库采集界面采集成功文字拼接修改,颜色修改,物料库存核查界面逻辑修改,仓库管理界面修改,去除蓝牙打印中蓝牙类型的判断

ChengJH 3 years ago
parent
commit
471d64ac48
37 changed files with 2233 additions and 124 deletions
  1. 9 2
      app/src/main/AndroidManifest.xml
  2. 92 0
      app/src/main/java/com/uas/uas_mes_standard/BluetoothAction.java
  3. 53 0
      app/src/main/java/com/uas/uas_mes_standard/BluetoothActivity.java
  4. 259 0
      app/src/main/java/com/uas/uas_mes_standard/BluetoothService.java
  5. 60 0
      app/src/main/java/com/uas/uas_mes_standard/PrintDataAction.java
  6. 66 0
      app/src/main/java/com/uas/uas_mes_standard/PrintDataActivity.java
  7. 148 0
      app/src/main/java/com/uas/uas_mes_standard/PrintDataService.java
  8. 76 0
      app/src/main/java/com/uas/uas_mes_standard/activity/MainActivity.java
  9. 1 1
      app/src/main/java/com/uas/uas_mes_standard/adapter/BluetoothAdapter.java
  10. 3 3
      app/src/main/java/com/uas/uas_mes_standard/adapter/StorageInCollectAdapter.java
  11. 4 1
      app/src/main/java/com/uas/uas_mes_standard/adapter/WHCheckMakeMaterialListAdapter.java
  12. 15 6
      app/src/main/java/com/uas/uas_mes_standard/bean/WHMakeMaterialProduct.java
  13. 245 0
      app/src/main/java/com/uas/uas_mes_standard/bluebooths/ConnectHelper.java
  14. 494 0
      app/src/main/java/com/uas/uas_mes_standard/bluebooths/EscPosHelper.java
  15. 332 0
      app/src/main/java/com/uas/uas_mes_standard/bluebooths/PrintHelper.java
  16. 1 0
      app/src/main/java/com/uas/uas_mes_standard/fragment/BarcodeInfoCollectFragment.java
  17. 8 7
      app/src/main/java/com/uas/uas_mes_standard/fragment/BlueToothPrintFragment.java
  18. 43 41
      app/src/main/java/com/uas/uas_mes_standard/fragment/IOCOutMakeMaterialOper.java
  19. 8 3
      app/src/main/java/com/uas/uas_mes_standard/fragment/JLTStorageInBarcodeFragment.java
  20. 17 6
      app/src/main/java/com/uas/uas_mes_standard/fragment/MaterialInCollectFragment.java
  21. 9 2
      app/src/main/java/com/uas/uas_mes_standard/fragment/WHCheckContentFragment.java
  22. 44 27
      app/src/main/java/com/uas/uas_mes_standard/fragment/WHCheckMakeMaterialFragment.java
  23. 14 4
      app/src/main/java/com/uas/uas_mes_standard/global/GloableParams.java
  24. 1 0
      app/src/main/java/com/uas/uas_mes_standard/util/Constants.java
  25. 2 1
      app/src/main/java/com/uas/uas_mes_standard/util/PrintUtils.java
  26. 89 0
      app/src/main/res/layout/bluetooth_layout.xml
  27. 19 0
      app/src/main/res/layout/bonddevice_item.xml
  28. 0 1
      app/src/main/res/layout/fragment_jlt_storage_in_barcode.xml
  29. 1 0
      app/src/main/res/layout/item_list_stock_already_list.xml
  30. 7 0
      app/src/main/res/layout/item_list_table.xml
  31. 4 2
      app/src/main/res/layout/popwin_whbatch_breakpackage.xml
  32. 57 0
      app/src/main/res/layout/printdata_layout.xml
  33. 22 0
      app/src/main/res/layout/unbonddevice_item.xml
  34. 2 2
      build.gradle
  35. 1 0
      pda_libs/bluetooth/build.gradle
  36. 3 0
      pda_libs/bluetooth/src/main/AndroidManifest.xml
  37. 24 15
      pda_libs/bluetooth/src/main/java/com/uas/bluetooth/ConnectHelper.java

+ 9 - 2
app/src/main/AndroidManifest.xml

@@ -46,7 +46,8 @@
             android:icon="@mipmap/icon"
             android:label="@string/title_activity_menu"
             android:screenOrientation="portrait"
-            android:windowSoftInputMode="adjustPan|stateHidden"></activity>
+            android:windowSoftInputMode="adjustPan|stateHidden">
+        </activity>
         <activity
             android:name="com.uas.uas_mes_standard.activity.IndexActivity"
             android:label="@string/title_activity_menu"
@@ -56,12 +57,18 @@
             android:label="@string/title_activity_function"
             android:screenOrientation="portrait"
             android:windowSoftInputMode="adjustUnspecified|stateHidden" />
-
+        <activity
+            android:name="com.uas.uas_mes_standard.BluetoothActivity"
+            android:screenOrientation="portrait" />
+        <activity
+            android:name="com.uas.uas_mes_standard.PrintDataActivity"
+            android:screenOrientation="portrait" />
         <activity
             android:name="com.uas.uas_mes_standard.activity.SearchMaterialActivity"
             android:label="@string/material_number_search"
             android:screenOrientation="portrait" />
 
+
         <provider
             android:name="android.support.v4.content.FileProvider"
             android:authorities="com.uas.uas_mes_standard"

+ 92 - 0
app/src/main/java/com/uas/uas_mes_standard/BluetoothAction.java

@@ -0,0 +1,92 @@
+package com.uas.uas_mes_standard;
+
+import android.app.Activity;
+import android.content.Context;
+import android.view.View;
+import android.widget.Button;
+import android.widget.ListView;
+
+/**
+ * Created by cjh on 2022-07-29
+ */
+public class BluetoothAction implements View.OnClickListener {
+    private Button switchBT = null;
+    private Button searchDevices = null;
+    private Activity activity = null;
+
+    private ListView unbondDevices = null;
+    private ListView bondDevices = null;
+    private Context context = null;
+    private BluetoothService bluetoothService = null;
+
+    public BluetoothAction(Context context, ListView unbondDevices,
+                           ListView bondDevices, Button switchBT, Button searchDevices,
+                           Activity activity) {
+        super();
+        this.context = context;
+        this.unbondDevices = unbondDevices;
+        this.bondDevices = bondDevices;
+        this.switchBT = switchBT;
+        this.searchDevices = searchDevices;
+        this.activity = activity;
+        this.bluetoothService = new BluetoothService(this.context,
+                this.unbondDevices, this.bondDevices, this.switchBT,
+                this.searchDevices);
+    }
+
+    public void setSwitchBT(Button switchBT) {
+        this.switchBT = switchBT;
+    }
+
+    public void setSearchDevices(Button searchDevices) {
+        this.searchDevices = searchDevices;
+    }
+
+    public void setUnbondDevices(ListView unbondDevices) {
+        this.unbondDevices = unbondDevices;
+    }
+
+    /**
+     * 初始化界面
+     */
+    public void initView() {
+
+        if (this.bluetoothService.isOpen()) {
+            System.out.println("蓝牙有开!");
+            switchBT.setText("关闭蓝牙");
+        }
+        if (!this.bluetoothService.isOpen()) {
+            System.out.println("蓝牙没开!");
+            this.searchDevices.setEnabled(false);
+        }
+    }
+
+    private void searchDevices() {
+        bluetoothService.searchDevices();
+    }
+
+    /**
+     * 各种按钮的监听
+     */
+    @Override
+    public void onClick(View v) {
+        if (v.getId() == R.id.searchDevices) {
+            this.searchDevices();
+        } else if (v.getId() == R.id.return_Bluetooth_btn) {
+            activity.finish();
+        } else if (v.getId() == R.id.openBluetooth_tb) {
+            if (!this.bluetoothService.isOpen()) {
+                // 蓝牙关闭的情况
+                System.out.println("蓝牙关闭的情况");
+                this.bluetoothService.openBluetooth(activity);
+            } else {
+                // 蓝牙打开的情况
+                System.out.println("蓝牙打开的情况");
+                this.bluetoothService.closeBluetooth();
+
+            }
+
+        }
+    }
+
+}

+ 53 - 0
app/src/main/java/com/uas/uas_mes_standard/BluetoothActivity.java

@@ -0,0 +1,53 @@
+package com.uas.uas_mes_standard;
+
+import android.app.Activity;
+import android.content.Context;
+import android.os.Bundle;
+import android.view.KeyEvent;
+import android.widget.Button;
+import android.widget.ListView;
+
+/**
+ * Created by cjh on 2022-07-29
+ */
+public class BluetoothActivity extends Activity {
+    private Context context = null;
+
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        this.context = this;
+        setTitle("蓝牙打印");
+        setContentView(R.layout.bluetooth_layout);
+        this.initListener();
+    }
+
+    private void initListener() {
+        ListView unbondDevices = (ListView) this
+                .findViewById(R.id.unbondDevices);
+        ListView bondDevices = (ListView) this.findViewById(R.id.bondDevices);
+        Button switchBT = (Button) this.findViewById(R.id.openBluetooth_tb);
+        Button searchDevices = (Button) this.findViewById(R.id.searchDevices);
+
+        BluetoothAction bluetoothAction = new BluetoothAction(this.context,
+                unbondDevices, bondDevices, switchBT, searchDevices,
+                BluetoothActivity.this);
+
+        Button returnButton = (Button) this
+                .findViewById(R.id.return_Bluetooth_btn);
+        bluetoothAction.setSearchDevices(searchDevices);
+        bluetoothAction.initView();
+        switchBT.setOnClickListener(bluetoothAction);
+        searchDevices.setOnClickListener(bluetoothAction);
+        returnButton.setOnClickListener(bluetoothAction);
+    }
+    //屏蔽返回键的代码:
+    public boolean onKeyDown(int keyCode, KeyEvent event)
+    {
+        switch(keyCode)
+        {
+            case KeyEvent.KEYCODE_BACK:return true;
+        }
+        return super.onKeyDown(keyCode, event);
+    }
+
+}

+ 259 - 0
app/src/main/java/com/uas/uas_mes_standard/BluetoothService.java

@@ -0,0 +1,259 @@
+package com.uas.uas_mes_standard;
+
+import android.app.Activity;
+import android.app.ProgressDialog;
+import android.bluetooth.BluetoothAdapter;
+import android.bluetooth.BluetoothDevice;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.view.View;
+import android.widget.AdapterView;
+import android.widget.Button;
+import android.widget.ListView;
+import android.widget.SimpleAdapter;
+import android.widget.Toast;
+
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.HashMap;
+
+/**
+ * Created by jsxiaoshui on 2022-07-29
+ */
+public class BluetoothService {
+    private Context context = null;
+    private BluetoothAdapter bluetoothAdapter = BluetoothAdapter
+            .getDefaultAdapter();
+    private ArrayList<BluetoothDevice> unbondDevices = null; // 用于存放未配对蓝牙设备
+    private ArrayList<BluetoothDevice> bondDevices = null;// 用于存放已配对蓝牙设备
+    private Button switchBT = null;
+    private Button searchDevices = null;
+    private ListView unbondDevicesListView = null;
+    private ListView bondDevicesListView = null;
+
+    /**
+     * 添加已绑定蓝牙设备到ListView
+     */
+    private void addBondDevicesToListView() {
+        ArrayList<HashMap<String, Object>> data = new ArrayList<HashMap<String, Object>>();
+        int count = this.bondDevices.size();
+        System.out.println("已绑定设备数量:" + count);
+        for (int i = 0; i < count; i++) {
+            HashMap<String, Object> map = new HashMap<String, Object>();
+            map.put("deviceName", this.bondDevices.get(i).getName());
+            data.add(map);// 把item项的数据加到data中
+        }
+        String[] from = { "deviceName" };
+        int[] to = { R.id.device_name };
+        SimpleAdapter simpleAdapter = new SimpleAdapter(this.context, data,
+                R.layout.bonddevice_item, from, to);
+        // 把适配器装载到listView中
+        this.bondDevicesListView.setAdapter(simpleAdapter);
+
+        this.bondDevicesListView
+                .setOnItemClickListener(new AdapterView.OnItemClickListener() {
+
+                    @Override
+                    public void onItemClick(AdapterView<?> arg0, View arg1,
+                                            int arg2, long arg3) {
+                        BluetoothDevice device = bondDevices.get(arg2);
+                        Intent intent = new Intent();
+                        intent.setClassName(context,
+                                "com.uas.uas_mes_standard.PrintDataActivity");
+                        intent.putExtra("deviceAddress", device.getAddress());
+                        context.startActivity(intent);
+                    }
+                });
+
+    }
+
+    /**
+     * 添加未绑定蓝牙设备到ListView
+     */
+    private void addUnbondDevicesToListView() {
+        ArrayList<HashMap<String, Object>> data = new ArrayList<HashMap<String, Object>>();
+        int count = this.unbondDevices.size();
+        System.out.println("未绑定设备数量:" + count);
+        for (int i = 0; i < count; i++) {
+            HashMap<String, Object> map = new HashMap<String, Object>();
+            map.put("deviceName", this.unbondDevices.get(i).getName());
+            data.add(map);// 把item项的数据加到data中
+        }
+        String[] from = { "deviceName" };
+        int[] to = { R.id.device_name };
+        SimpleAdapter simpleAdapter = new SimpleAdapter(this.context, data,
+                R.layout.unbonddevice_item, from, to);
+
+        // 把适配器装载到listView中
+        this.unbondDevicesListView.setAdapter(simpleAdapter);
+
+        // 为每个item绑定监听,用于设备间的配对
+        this.unbondDevicesListView
+                .setOnItemClickListener(new AdapterView.OnItemClickListener() {
+
+                    @Override
+                    public void onItemClick(AdapterView<?> arg0, View arg1,
+                                            int arg2, long arg3) {
+                        try {
+                            Method createBondMethod = BluetoothDevice.class
+                                    .getMethod("createBond");
+                            createBondMethod
+                                    .invoke(unbondDevices.get(arg2));
+                            // 将绑定好的设备添加的已绑定list集合
+                            bondDevices.add(unbondDevices.get(arg2));
+                            // 将绑定好的设备从未绑定list集合中移除
+                            unbondDevices.remove(arg2);
+                            addBondDevicesToListView();
+                            addUnbondDevicesToListView();
+                        } catch (Exception e) {
+                            Toast.makeText(context, "配对失败!", Toast.LENGTH_SHORT)
+                                    .show();
+                        }
+
+                    }
+                });
+    }
+
+    public BluetoothService(Context context, ListView unbondDevicesListView,
+                            ListView bondDevicesListView, Button switchBT, Button searchDevices) {
+        this.context = context;
+        this.unbondDevicesListView = unbondDevicesListView;
+        this.bondDevicesListView = bondDevicesListView;
+        // this.bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
+        this.unbondDevices = new ArrayList<BluetoothDevice>();
+        this.bondDevices = new ArrayList<BluetoothDevice>();
+        this.switchBT = switchBT;
+        this.searchDevices = searchDevices;
+        this.initIntentFilter();
+
+    }
+
+    private void initIntentFilter() {
+        // 设置广播信息过滤
+        IntentFilter intentFilter = new IntentFilter();
+        intentFilter.addAction(BluetoothDevice.ACTION_FOUND);
+        intentFilter.addAction(BluetoothAdapter.ACTION_DISCOVERY_STARTED);
+        intentFilter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
+        intentFilter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED);
+        // 注册广播接收器,接收并处理搜索结果
+        context.registerReceiver(receiver, intentFilter);
+
+    }
+
+    /**
+     * 打开蓝牙
+     */
+    public void openBluetooth(Activity activity) {
+        Intent enableBtIntent = new Intent(
+                BluetoothAdapter.ACTION_REQUEST_ENABLE);
+        activity.startActivityForResult(enableBtIntent, 1);
+
+    }
+
+    /**
+     * 关闭蓝牙
+     */
+    public void closeBluetooth() {
+        this.bluetoothAdapter.disable();
+    }
+
+    /**
+     * 判断蓝牙是否打开
+     *
+     * @return boolean
+     */
+    public boolean isOpen() {
+        return this.bluetoothAdapter.isEnabled();
+
+    }
+
+    /**
+     * 搜索蓝牙设备
+     */
+    public void searchDevices() {
+        this.bondDevices.clear();
+        this.unbondDevices.clear();
+
+        // 寻找蓝牙设备,android会将查找到的设备以广播形式发出去
+        this.bluetoothAdapter.startDiscovery();
+    }
+
+    /**
+     * 添加未绑定蓝牙设备到list集合
+     *
+     * @param device
+     */
+    public void addUnbondDevices(BluetoothDevice device) {
+        System.out.println("未绑定设备名称:" + device.getName());
+        if (!this.unbondDevices.contains(device)) {
+            this.unbondDevices.add(device);
+        }
+    }
+
+    /**
+     * 添加已绑定蓝牙设备到list集合
+     *
+     * @param device
+     */
+    public void addBandDevices(BluetoothDevice device) {
+        System.out.println("已绑定设备名称:" + device.getName());
+        if (!this.bondDevices.contains(device)) {
+            this.bondDevices.add(device);
+        }
+    }
+
+    /**
+     * 蓝牙广播接收器
+     */
+    private BroadcastReceiver receiver = new BroadcastReceiver() {
+
+        ProgressDialog progressDialog = null;
+
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            String action = intent.getAction();
+            if (BluetoothDevice.ACTION_FOUND.equals(action)) {
+                BluetoothDevice device = intent
+                        .getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
+                if (device.getBondState() == BluetoothDevice.BOND_BONDED) {
+                    addBandDevices(device);
+                } else {
+                    addUnbondDevices(device);
+                }
+            } else if (BluetoothAdapter.ACTION_DISCOVERY_STARTED.equals(action)) {
+                progressDialog = ProgressDialog.show(context, "请稍等...",
+                        "搜索蓝牙设备中...", true);
+
+            } else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED
+                    .equals(action)) {
+                System.out.println("设备搜索完毕");
+                progressDialog.dismiss();
+
+                addUnbondDevicesToListView();
+                addBondDevicesToListView();
+                // bluetoothAdapter.cancelDiscovery();
+            }
+
+            if (BluetoothAdapter.ACTION_STATE_CHANGED.equals(action)) {
+                if (bluetoothAdapter.getState() == BluetoothAdapter.STATE_ON) {
+                    System.out.println("--------打开蓝牙-----------");
+                    switchBT.setText("关闭蓝牙");
+                    searchDevices.setEnabled(true);
+                    bondDevicesListView.setEnabled(true);
+                    unbondDevicesListView.setEnabled(true);
+                } else if (bluetoothAdapter.getState() == BluetoothAdapter.STATE_OFF) {
+                    System.out.println("--------关闭蓝牙-----------");
+                    switchBT.setText("打开蓝牙");
+                    searchDevices.setEnabled(false);
+                    bondDevicesListView.setEnabled(false);
+                    unbondDevicesListView.setEnabled(false);
+                }
+            }
+
+        }
+
+    };
+
+}

+ 60 - 0
app/src/main/java/com/uas/uas_mes_standard/PrintDataAction.java

@@ -0,0 +1,60 @@
+package com.uas.uas_mes_standard;
+
+import android.content.Context;
+import android.view.View;
+import android.widget.TextView;
+
+/**
+ * Created by cjh on 2022-07-29
+ */
+public class PrintDataAction implements View.OnClickListener {
+    private Context context = null;
+    private TextView deviceName = null;
+    private TextView connectState = null;
+    private String printData = null;
+    private String deviceAddress = null;
+    private PrintDataService printDataService = null;
+
+    public PrintDataAction(Context context, String deviceAddress,
+                           TextView deviceName, TextView connectState) {
+        super();
+        this.context = context;
+        this.deviceAddress = deviceAddress;
+        this.deviceName = deviceName;
+        this.connectState = connectState;
+        this.printDataService = new PrintDataService(this.context,
+                this.deviceAddress);
+        this.initView();
+
+    }
+
+    private void initView() {
+        // 设置当前设备名称
+        this.deviceName.setText(this.printDataService.getDeviceName());
+        // 一上来就先连接蓝牙设备
+        boolean flag = this.printDataService.connect();
+        if (flag == false) {
+            // 连接失败
+            this.connectState.setText("连接失败!");
+        } else {
+            // 连接成功
+            this.connectState.setText("连接成功!");
+
+        }
+    }
+
+    public void setPrintData(String printData) {
+        this.printData = printData;
+    }
+
+    @Override
+    public void onClick(View v) {
+        if (v.getId() == R.id.send) {
+            String sendData = printData;
+            this.printDataService.send(sendData);
+        } else if (v.getId() == R.id.command) {
+            this.printDataService.selectCommand();
+
+        }
+    }
+}

+ 66 - 0
app/src/main/java/com/uas/uas_mes_standard/PrintDataActivity.java

@@ -0,0 +1,66 @@
+package com.uas.uas_mes_standard;
+
+import android.app.Activity;
+import android.content.Context;
+import android.content.Intent;
+import android.os.Bundle;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.TextView;
+
+/**
+ * Created by cjh on 2022-07-29
+ */
+public class PrintDataActivity extends Activity {
+    private Context context = null;
+
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        this.setTitle("蓝牙打印");
+        this.setContentView(R.layout.printdata_layout);
+        this.context = this;
+        this.initListener();
+
+
+    }
+
+    /**
+     * 获得从上一个Activity传来的蓝牙地址
+     * @return String
+     */
+    private String getDeviceAddress() {
+        // 直接通过Context类的getIntent()即可获取Intent
+        Intent intent = this.getIntent();
+        // 判断
+        if (intent != null) {
+            return intent.getStringExtra("deviceAddress");
+        } else {
+            return null;
+        }
+    }
+
+    private void initListener() {
+        TextView deviceName = (TextView) this.findViewById(R.id.device_name);
+        TextView connectState = (TextView) this
+                .findViewById(R.id.connect_state);
+
+        PrintDataAction printDataAction = new PrintDataAction(this.context,
+                this.getDeviceAddress(), deviceName, connectState);
+
+        EditText printData = (EditText) this.findViewById(R.id.print_data);
+        Button send = (Button) this.findViewById(R.id.send);
+        Button command = (Button) this.findViewById(R.id.command);
+        printDataAction.setPrintData("1111111");
+
+        send.setOnClickListener(printDataAction);
+        command.setOnClickListener(printDataAction);
+    }
+
+
+    @Override
+    protected void onDestroy() {
+        PrintDataService.disconnect();
+        super.onDestroy();
+    }
+
+}

+ 148 - 0
app/src/main/java/com/uas/uas_mes_standard/PrintDataService.java

@@ -0,0 +1,148 @@
+package com.uas.uas_mes_standard;
+
+import android.app.AlertDialog;
+import android.bluetooth.BluetoothAdapter;
+import android.bluetooth.BluetoothDevice;
+import android.bluetooth.BluetoothSocket;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.widget.Toast;
+
+import com.uas.uas_mes_standard.util.CommonUtil;
+import com.uas.uas_mes_standard.util.PrintUtils;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.util.UUID;
+
+/**
+ * Created by cjh on 2022-07-29
+ */
+public class PrintDataService {
+    private Context context = null;
+    private String deviceAddress = null;
+    private BluetoothAdapter bluetoothAdapter = BluetoothAdapter
+            .getDefaultAdapter();
+    private BluetoothDevice device = null;
+    private static BluetoothSocket bluetoothSocket = null;
+    private static OutputStream outputStream = null;
+    private static final UUID uuid = UUID
+            .fromString("00001101-0000-1000-8000-00805F9B34FB");
+    private boolean isConnection = false;
+    final String[] items = { "复位打印机", "标准ASCII字体", "压缩ASCII字体", "字体不放大",
+            "宽高加倍", "取消加粗模式", "选择加粗模式", "取消倒置打印", "选择倒置打印", "取消黑白反显", "选择黑白反显",
+            "取消顺时针旋转90°", "选择顺时针旋转90°" };
+    final byte[][] byteCommands = { { 0x1b, 0x40 },// 复位打印机
+            { 0x1b, 0x4d, 0x00 },// 标准ASCII字体
+            { 0x1b, 0x4d, 0x01 },// 压缩ASCII字体
+            { 0x1d, 0x21, 0x00 },// 字体不放大
+            { 0x1d, 0x21, 0x11 },// 宽高加倍
+            { 0x1b, 0x45, 0x00 },// 取消加粗模式
+            { 0x1b, 0x45, 0x01 },// 选择加粗模式
+            { 0x1b, 0x7b, 0x00 },// 取消倒置打印
+            { 0x1b, 0x7b, 0x01 },// 选择倒置打印
+            { 0x1d, 0x42, 0x00 },// 取消黑白反显
+            { 0x1d, 0x42, 0x01 },// 选择黑白反显
+            { 0x1b, 0x56, 0x00 },// 取消顺时针旋转90°
+            { 0x1b, 0x56, 0x01 },// 选择顺时针旋转90°
+    };
+
+    public PrintDataService(Context context, String deviceAddress) {
+        super();
+        this.context = context;
+        this.deviceAddress = deviceAddress;
+        this.device = this.bluetoothAdapter.getRemoteDevice(this.deviceAddress);
+    }
+
+    /**
+     * 获取设备名称
+     *
+     * @return String
+     */
+    public String getDeviceName() {
+        return this.device.getName();
+    }
+
+    /**
+     * 连接蓝牙设备
+     */
+    public boolean connect() {
+        if (!this.isConnection) {
+            try {
+                bluetoothSocket = this.device
+                        .createRfcommSocketToServiceRecord(uuid);
+                bluetoothSocket.connect();
+                outputStream = bluetoothSocket.getOutputStream();
+                this.isConnection = true;
+                if (this.bluetoothAdapter.isDiscovering()) {
+                    System.out.println("关闭适配器!");
+                    this.bluetoothAdapter.isDiscovering();
+                }
+            } catch (Exception e) {
+                CommonUtil.toastNoRepeat(this.context,"连接失败");
+                return false;
+            }
+            Toast.makeText(this.context, this.device.getName() + "连接成功!",
+                    Toast.LENGTH_SHORT).show();
+            return true;
+        } else {
+            return true;
+        }
+    }
+
+    /**
+     * 断开蓝牙设备连接
+     */
+    public static void disconnect() {
+        System.out.println("断开蓝牙设备连接");
+        try {
+            bluetoothSocket.close();
+            outputStream.close();
+        } catch (IOException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+
+    }
+
+    /**
+     * 选择指令
+     */
+    public void selectCommand() {
+        new AlertDialog.Builder(context).setTitle("请选择指令")
+                .setItems(items, new DialogInterface.OnClickListener() {
+                    @Override
+                    public void onClick(DialogInterface dialog, int which) {
+                        try {
+                            outputStream.write(byteCommands[which]);
+                        } catch (IOException e) {
+                            Toast.makeText(context, "设置指令失败!",
+                                    Toast.LENGTH_SHORT).show();
+                        }
+                    }
+                }).create().show();
+    }
+
+    /**
+     * 发送数据
+     */
+    public void send(String sendData) {
+        if (this.isConnection) {
+            System.out.println("开始打印!!");
+            try {
+                byte[] data = sendData.getBytes("gbk");
+                outputStream.write(data, 0, data.length);
+                outputStream.flush();
+                PrintUtils.printBar(context, sendData, 203, null);
+            } catch (IOException e) {
+                Toast.makeText(this.context, "发送失败!", Toast.LENGTH_SHORT)
+                        .show();
+            }
+        } else {
+            Toast.makeText(this.context, "设备未连接,请重新连接!", Toast.LENGTH_SHORT)
+                    .show();
+
+        }
+    }
+
+}

+ 76 - 0
app/src/main/java/com/uas/uas_mes_standard/activity/MainActivity.java

@@ -1,11 +1,16 @@
 package com.uas.uas_mes_standard.activity;
 
+import android.Manifest;
 import android.content.Context;
 import android.content.DialogInterface;
 import android.content.Intent;
+import android.content.pm.PackageManager;
 import android.os.Build;
 import android.os.Bundle;
+import android.support.annotation.NonNull;
+import android.support.v4.app.ActivityCompat;
 import android.support.v4.app.Fragment;
+import android.support.v4.content.ContextCompat;
 import android.support.v7.app.AlertDialog;
 import android.view.ViewGroup;
 import android.view.WindowManager;
@@ -42,6 +47,7 @@ public class MainActivity extends BaseActivity implements BackHandlerInterface {
 
 //        getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
         initPermissions();
+        initPermission();
         Intent intent = getIntent();
         if (intent != null) {
             isConnected = intent.getBooleanExtra("isConnected", false);
@@ -74,8 +80,78 @@ public class MainActivity extends BaseActivity implements BackHandlerInterface {
                     .commit();
         }
 
+//        ACCESS_COARSE_LOCATION
+
+
+    }
+    final int REQUEST_PERMISSION_LOCATION = 10;
+    private void initPermission() {
+
+        if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CAMERA)
+
+                != PackageManager.PERMISSION_GRANTED ||(ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.WRITE_CALENDAR)
+
+                != PackageManager.PERMISSION_GRANTED ||(ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.READ_CALENDAR)
+
+                != PackageManager.PERMISSION_GRANTED ||(ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_FINE_LOCATION)
+
+                != PackageManager.PERMISSION_GRANTED ||(ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_COARSE_LOCATION)
+
+                != PackageManager.PERMISSION_GRANTED || ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE)
+
+                != PackageManager.PERMISSION_GRANTED || ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.READ_PHONE_STATE)
+
+                != PackageManager.PERMISSION_GRANTED))))){
+
+            // 没有权限
+
+            ActivityCompat.requestPermissions(MainActivity.this, new String[]{
+
+                            Manifest.permission.READ_CALENDAR,
+
+                            Manifest.permission.WRITE_CALENDAR,
+
+                            Manifest.permission.CAMERA,
+
+                            Manifest.permission.ACCESS_FINE_LOCATION,
+                            Manifest.permission.ACCESS_COARSE_LOCATION,
+
+                            Manifest.permission.READ_EXTERNAL_STORAGE,
+
+                            Manifest.permission.READ_PHONE_STATE},
+
+                    REQUEST_PERMISSION_LOCATION);
+
+        }
+
     }
+    @Override
+
+    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
+
+                                           @NonNull int[] grantResults) {
+
+        switch (requestCode) {
+
+            case REQUEST_PERMISSION_LOCATION:
+
+// startService(new Intent(this, LocationService.class));
 
+// startIntent();
+
+                break;
+
+            default:
+
+// startIntent();
+
+                break;
+
+        }
+
+        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
+
+    }
     @Override
     protected void initViews() {
 

+ 1 - 1
app/src/main/java/com/uas/uas_mes_standard/adapter/BluetoothAdapter.java

@@ -12,8 +12,8 @@ import android.view.ViewGroup;
 import android.widget.ImageView;
 import android.widget.TextView;
 
-import com.uas.bluetooth.ConnectHelper;
 import com.uas.uas_mes_standard.R;
+import com.uas.uas_mes_standard.bluebooths.ConnectHelper;
 import com.uas.uas_mes_standard.util.ListUtils;
 
 import java.util.Collections;

+ 3 - 3
app/src/main/java/com/uas/uas_mes_standard/adapter/StorageInCollectAdapter.java

@@ -25,9 +25,9 @@ public class StorageInCollectAdapter extends BaseQuickAdapter<StockAlreadyItemBe
         helper.setText(R.id.stock_already_list_outqty, CommonUtil.doubleFormat(item.getBI_INQTY()));
         helper.setText(R.id.stock_already_list_prodcode, item.getBI_PRODCODE());
         helper.setText(R.id.stock_already_list_detail, item.getPR_DETAIL());
-        helper.setText(R.id.stock_already_list_batchcode, item.getBI_BATCHCODE());
-        helper.setText(R.id.stock_already_list_location_caption, "采集状态:");
-        helper.setText(R.id.stock_already_list_location, item.getBI_PDAGET() == 0 ? "未采集" : "已采集");
+//        helper.setText(R.id.stock_already_list_batchcode, item.getBI_BATCHCODE());
+//        helper.setText(R.id.stock_already_list_location_caption, "采集状态:");
+//        helper.setText(R.id.stock_already_list_location, item.getBI_PDAGET() == 0 ? "未采集" : "已采集");
         //新增型号
         if(!TextUtils.isEmpty(item.getPR_ORISPECCODE())){
             tv_type_value.setText(item.getPR_ORISPECCODE());

+ 4 - 1
app/src/main/java/com/uas/uas_mes_standard/adapter/WHCheckMakeMaterialListAdapter.java

@@ -45,10 +45,13 @@ public class WHCheckMakeMaterialListAdapter extends BaseAdapter {
         TextView tvColumn1 = (TextView) view.findViewById(R.id.tv_table_1);
         TextView tvColumn2 = (TextView) view.findViewById(R.id.tv_table_2);
         TextView tvColumn3 = (TextView) view.findViewById(R.id.tv_table_3);
+        TextView tvColumn4 = (TextView) view.findViewById(R.id.tv_table_4);
+        tvColumn4.setVisibility(View.VISIBLE);
         WHMakeMaterialProduct tmpProduct = (WHMakeMaterialProduct) getItem(position);
         tvColumn1.setText("" + tmpProduct.getBAR_WHCODE());
         tvColumn2.setText("" + tmpProduct.getBAR_LOCATION());
-        tvColumn3.setText("" + tmpProduct.getBAR_REMAIN());
+        tvColumn3.setText("" + tmpProduct.getREMAIN());
+        tvColumn4.setText("" + tmpProduct.getMADEDATE());
         int[] colors = {Color.WHITE, Color.rgb(219, 238, 244)};
         view.setBackgroundColor(colors[position % 2]);
         return view;

+ 15 - 6
app/src/main/java/com/uas/uas_mes_standard/bean/WHMakeMaterialProduct.java

@@ -4,19 +4,28 @@ package com.uas.uas_mes_standard.bean;
  * @note:仓库管理:物料库存核查中物料Bean
  */
 public class WHMakeMaterialProduct {
-    private int BAR_REMAIN;
+    private int REMAIN;
     private String BAR_PRODCODE;
     private String PR_DETAIL;
     private String PR_SPEC;
     private String BAR_LOCATION;
     private String BAR_WHCODE;
+    private String MADEDATE;
 
-    public int getBAR_REMAIN() {
-        return BAR_REMAIN;
+    public String getMADEDATE() {
+        return MADEDATE;
     }
 
-    public void setBAR_REMAIN(int BAR_REMAIN) {
-        this.BAR_REMAIN = BAR_REMAIN;
+    public void setMADEDATE(String MADEDATE) {
+        this.MADEDATE = MADEDATE;
+    }
+
+    public int getREMAIN() {
+        return REMAIN;
+    }
+
+    public void setREMAIN(int REMAIN) {
+        this.REMAIN = REMAIN;
     }
 
     public String getBAR_PRODCODE() {
@@ -67,7 +76,7 @@ public class WHMakeMaterialProduct {
                 ", PR_SPEC='" + PR_SPEC + '\'' +
                 ", PR_DETAIL='" + PR_DETAIL + '\'' +
                 ", BAR_PRODCODE='" + BAR_PRODCODE + '\'' +
-                ", BAR_REMAIN=" + BAR_REMAIN +
+                ", REMAIN=" + REMAIN +
                 '}';
     }
 }

+ 245 - 0
app/src/main/java/com/uas/uas_mes_standard/bluebooths/ConnectHelper.java

@@ -0,0 +1,245 @@
+package com.uas.uas_mes_standard.bluebooths;
+
+import android.app.Activity;
+import android.bluetooth.BluetoothAdapter;
+import android.bluetooth.BluetoothDevice;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.os.Build;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.Looper;
+import android.os.Message;
+import android.support.annotation.RequiresApi;
+
+import java.lang.reflect.Method;
+import java.util.Set;
+
+import HPRTAndroidSDKA300.HPRTPrinterHelper;
+
+//import HPRTAndroidSDKA300.HPRTPrinterHelper;
+
+
+/**
+ * 蓝牙设备连接工具类
+ * onDestroy() //在退出界面等应该调用
+ */
+public class ConnectHelper {
+    public static final int PRINT_TYPE = 1664;//打印机类型
+    private Activity ct;
+    //蓝牙适配器
+    private BluetoothAdapter mBluetoothAdapter;
+    private Thread connectThread;//蓝牙连接线程
+    //主线程Handler
+    private Handler mainHandler = new Handler(Looper.getMainLooper()) {
+        public void handleMessage(Message msg) {
+
+            if (msg.what == 102) {
+                BluetoothDevice device = null;
+                int portOpen = msg.arg1;
+                Bundle data = msg.getData();
+                if (data != null) {
+                    device = data.getParcelable("device");
+                }
+                if (mConnectListener != null) {
+                    mConnectListener.bindResult(portOpen, device);
+                }
+            }
+
+        }
+    };
+    /**
+     * 通过广播搜索蓝牙设备
+     */
+    private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
+        @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR2)
+        public void onReceive(Context context, Intent intent) {
+
+            String action = intent.getAction();
+            // 把搜索的设置添加到集合中
+            if (BluetoothDevice.ACTION_FOUND.equals(action)) {
+                BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
+                if (mConnectListener != null) {
+                    mConnectListener.onDeviceChange(device.getBondState(), device);
+                }
+
+            } else if (BluetoothDevice.ACTION_BOND_STATE_CHANGED.equals(action)) {
+                BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
+                if (mConnectListener != null) {
+                    mConnectListener.onDeviceChange(device.getBondState(), device);
+                }
+            } else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) {
+                if (mConnectListener != null) {
+                    mConnectListener.onFinished();
+                }
+            }
+        }
+
+    };
+    private String toothAddress;
+
+    public ConnectHelper(Activity ct) {
+        this.ct = ct;
+        //广播注册
+        IntentFilter filter = new IntentFilter();
+//        filter.addAction(BluetoothDevice.ACTION_FOUND);
+//        filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_STARTED);
+//        filter.addAction(BluetoothDevice.ACTION_BOND_STATE_CHANGED);//状态改变
+//        filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);//搜索完成
+//        filter.addAction(BluetoothAdapter.ACTION_SCAN_MODE_CHANGED);//行动扫描模式改变了
+//        filter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED);//动作状态发生了变化
+        filter.addAction(BluetoothDevice.ACTION_FOUND);
+        filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_STARTED);
+        filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
+        filter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED);
+
+
+
+
+        ct.registerReceiver(mReceiver, filter); // Don't forget to unregister during onDestroy
+        //初始化
+        mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
+
+    }
+
+    /**
+     * 判断有没有开启蓝牙
+     */
+    public boolean isOpenBluetooth() {
+        if (mBluetoothAdapter != null) {
+            return mBluetoothAdapter.isEnabled();
+        } else {
+            return false;
+        }
+    }
+
+    /**
+     * 搜索蓝牙设备
+     *
+     * @return -1:当前蓝牙不可用 -2:搜索失败(可能正在搜索) -3:蓝牙关闭,先开启蓝牙  0:搜索请求发送成功
+     */
+    public void searchDevices() {
+        if (isOpenBluetooth()) {
+            //开始搜索蓝牙设备
+            mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
+             mBluetoothAdapter.startDiscovery();
+        }
+
+    }
+
+    public Set<BluetoothDevice> getBondedDevices() {
+        return mBluetoothAdapter.getBondedDevices();
+    }
+
+    //关闭蓝牙
+    public boolean closeBluetooth() {
+        return mBluetoothAdapter.disable();
+    }
+
+    //打开蓝牙
+    public void openBluetooth(int requestCode) {
+        Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); // 设置蓝牙可见性,最多300秒
+        intent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 20);
+        ct.startActivityForResult(intent, requestCode);
+    }
+
+    public boolean toConnectDevice(final BluetoothDevice device) {
+        if (device.getBondState() == BluetoothDevice.BOND_BONDED) {
+            return true;
+        }
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
+            return device.createBond();
+        } else {
+            try {
+                Method createBondMethod = BluetoothDevice.class.getMethod("createBond");
+                Object object = createBondMethod.invoke(device);
+                if (object != null && object instanceof Boolean) {
+                    return (boolean) object;
+                }
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+        return false;
+    }
+
+    public void toConnectDeviceHY(final BluetoothDevice device) {
+//        toConnectDeviceHY("A300", device);
+        toConnectDeviceHY(HPRTPrinterHelper.PRINT_NAME_A300, device);
+    }
+
+    /**
+     * 连接华印蓝牙
+     *
+     * @param modelName 机型名称 (默认需要选A300)
+     * @param device
+     */
+    public void toConnectDeviceHY(final String modelName, final BluetoothDevice device) {
+        if (mBluetoothAdapter == null) return;
+        mBluetoothAdapter.cancelDiscovery();
+        try {
+            String macAddress = device.getAddress();
+            toothAddress = macAddress.substring(macAddress.length() - 17);
+            if (!toothAddress.contains(":")) {
+                return;
+            }
+            connectThread = new Thread(new Runnable() {
+                @Override
+                public void run() {
+                    try {
+                        new HPRTPrinterHelper(ct, modelName);
+                        int portOpen = HPRTPrinterHelper.PortOpen("Bluetooth," + toothAddress);
+                        Message message = new Message();
+                        Bundle data = new Bundle();
+                        data.putParcelable("device", device);
+                        message.setData(data);
+                        message.what = 102;
+                        message.arg1 = portOpen;
+                        mainHandler.sendMessage(message);
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                        Message message = new Message();
+                        message.what = 102;
+                        message.arg1 = -11;
+                        mainHandler.sendMessage(message);
+                    }
+                }
+            });
+            connectThread.start();
+        } catch (Exception e) {
+        }
+    }
+
+    public void onDestroy() {
+        if (ct != null) {
+            ct.unregisterReceiver(mReceiver);
+        }
+        // 确认是否还需要做扫描
+        if (mBluetoothAdapter != null)
+            mBluetoothAdapter.cancelDiscovery();
+        if (connectThread != null) {
+            Thread dummy = connectThread;
+            connectThread = null;
+            dummy.interrupt();
+        }
+    }
+
+    private ConnectListener mConnectListener;
+
+    public void setConnectListener(ConnectListener mConnectListener) {
+        this.mConnectListener = mConnectListener;
+    }
+
+    public interface ConnectListener {
+        //搜索到设备或是设备状态改变
+        void onDeviceChange(int state, BluetoothDevice device);
+
+        //汉印机型绑定结果回调
+        void bindResult(int portOpen, BluetoothDevice device);
+
+        //搜索完成
+        void onFinished();
+    }
+}

+ 494 - 0
app/src/main/java/com/uas/uas_mes_standard/bluebooths/EscPosHelper.java

@@ -0,0 +1,494 @@
+package com.uas.uas_mes_standard.bluebooths;
+
+import java.io.BufferedWriter;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+
+/**
+ * 汉印的指令集为CPCL  不支持ESC  所以这个工具类没有进行有效的测试
+ * ESC/POS协议打印机工具类(个别打印机型不支持)
+ */
+public class EscPosHelper {
+    public static final byte ESC = 27;// 换码
+    public static final byte FS = 28;// 文本分隔符
+    public static final byte GS = 29;// 组分隔符
+    public static final byte DLE = 16;// 数据连接换码
+    public static final byte EOT = 4;// 传输结束
+    public static final byte ENQ = 5;// 询问字符
+    public static final byte SP = 32;// 空格
+    public static final byte HT = 9;// 横向列表
+    public static final byte LF = 10;// 打印并换行(水平定位)
+    public static final byte CR = 13;// 归位键
+    public static final byte FF = 12;// 走纸控制(打印并回到标准模式(在页模式下) )
+    public static final byte CAN = 24;// 作废(页模式下取消打印数据 )
+
+
+    /**
+     * CodePage table
+     */
+    public static class CodePage {
+        public static final byte PC437 = 0;
+        public static final byte KATAKANA = 1;
+        public static final byte PC850 = 2;
+        public static final byte PC860 = 3;
+        public static final byte PC863 = 4;
+        public static final byte PC865 = 5;
+        public static final byte WPC1252 = 16;
+        public static final byte PC866 = 17;
+        public static final byte PC852 = 18;
+        public static final byte PC858 = 19;
+    }
+
+    /**
+     * 条形码编号
+     */
+    public static class BarCode {
+        public static final byte UPC_A = 0;
+        public static final byte UPC_E = 1;
+        public static final byte EAN13 = 2;
+        public static final byte EAN8 = 3;
+        public static final byte CODE39 = 4;
+        public static final byte ITF = 5;
+        public static final byte NW7 = 6;
+        public static final byte CODE128 = 73;
+    }
+
+// ------------------------打印机初始化-----------------------------
+
+    /**
+     * 打印机初始化
+     *
+     * @return bytes for this command
+     */
+    public static byte[] init_printer() {
+        byte[] result = new byte[2];
+        result[0] = ESC;
+        result[1] = 64;
+        return result;
+    }
+
+    // ------------------------换行-----------------------------
+
+    /**
+     * 换行
+     *
+     * @param -lineNum要换几行
+     */
+    public static byte[] nextLine(int lineNum) {
+        byte[] result = new byte[lineNum];
+        for (int i = 0; i < lineNum; i++) {
+            result[i] = LF;
+        }
+        return result;
+    }
+    // ------------------------下划线-----------------------------
+
+    /**
+     * 设置绘制下划线
+     *
+     * @param width 下划线的宽度 字节
+     * @return
+     */
+    public static byte[] setUnderline(byte width) {
+        byte[] result = new byte[3];
+        result[0] = ESC;
+        result[1] = 45;
+        result[2] = width;
+        return result;
+    }
+
+    /**
+     * 取消绘制下划线
+     */
+    public static byte[] underlineOff() {
+        byte[] result = new byte[3];
+        result[0] = ESC;
+        result[1] = 45;
+        result[2] = 0;
+        return result;
+    }
+
+    // ------------------------加粗-----------------------------
+
+    /**
+     * 选择加粗模式
+     */
+    public static byte[] boldOn() {
+        byte[] result = new byte[3];
+        result[0] = ESC;
+        result[1] = 69;
+        result[2] = 0xF;
+        return result;
+    }
+
+    /**
+     * 取消加粗模式
+     */
+    public static byte[] boldOff() {
+        byte[] result = new byte[3];
+        result[0] = ESC;
+        result[1] = 69;
+        result[2] = 0;
+        return result;
+    }
+
+// ------------------------对齐-----------------------------
+
+    /**
+     * 左对齐
+     */
+    public static byte[] alignLeft() {
+        byte[] result = new byte[3];
+        result[0] = ESC;
+        result[1] = 97;
+        result[2] = 0;
+        return result;
+    }
+
+    /**
+     * 居中对齐
+     */
+    public static byte[] alignCenter() {
+        byte[] result = new byte[3];
+        result[0] = ESC;
+        result[1] = 97;
+        result[2] = 1;
+        return result;
+    }
+
+    /**
+     * 右对齐
+     */
+    public static byte[] alignRight() {
+        byte[] result = new byte[3];
+        result[0] = ESC;
+        result[1] = 97;
+        result[2] = 2;
+        return result;
+    }
+
+    /**
+     * 水平方向向右移动col列
+     */
+    public static byte[] offset(byte col) {
+        byte[] result = new byte[4];
+        result[0] = ESC;
+        result[1] = 68;
+        result[2] = col;
+        result[3] = 0;
+        return result;
+    }
+
+
+// ------------------------字体变大-----------------------------
+
+    /**
+     * 字体变大为标准的n倍
+     */
+    public static byte[] fontSizeSetBig(int num) {
+        byte realSize = 0;
+        switch (num) {
+            case 1:
+                realSize = 0;
+                break;
+            case 2:
+                realSize = 17;
+                break;
+            case 3:
+                realSize = 34;
+                break;
+            case 4:
+                realSize = 51;
+                break;
+            case 5:
+                realSize = 68;
+                break;
+            case 6:
+                realSize = 85;
+                break;
+            case 7:
+                realSize = 102;
+                break;
+            case 8:
+                realSize = 119;
+                break;
+        }
+        byte[] result = new byte[3];
+        result[0] = GS;
+        result[1] = 33;
+        result[2] = realSize;
+        return result;
+    }
+
+    /**
+     * 字体取消倍宽倍高
+     */
+    public static byte[] fontSizeSetSmall(int num) {
+        byte[] result = new byte[3];
+        result[0] = ESC;
+        result[1] = 33;
+
+        return result;
+    }
+
+
+    // ------------------------切纸-----------------------------
+
+    /**
+     * 进纸并全部切割
+     */
+    public static byte[] feedPaperCutAll() {
+        byte[] result = new byte[4];
+        result[0] = GS;
+        result[1] = 86;
+        result[2] = 65;
+        result[3] = 0;
+        return result;
+    }
+
+    /**
+     * 进纸并切割(左边留一点不切)
+     */
+    public static byte[] feedPaperCutPartial() {
+        byte[] result = new byte[4];
+        result[0] = GS;
+        result[1] = 86;
+        result[2] = 66;
+        result[3] = 0;
+        return result;
+    }
+
+    // ------------------------条形码-----------------------------
+    public static byte[] printBarGs(byte barCodeType, String text) {
+        return printBar(BarCode.CODE128, barCodeType, text);
+    }
+
+
+    public static byte[] printBarESC(byte barCodeType, String text) {
+        return printBar(ESC, barCodeType, text);
+    }
+
+    //设置条形码的宽度单位
+    public static byte[] setBarCodeWidth(int n) {
+        byte[] result = new byte[3];
+        result[0] = GS;
+        result[1] = 119;
+        result[2] = (byte) n;
+        return result;
+    }
+
+    /**
+     * 设置条码高度
+     *
+     * @param dots ( default  = 162 )
+     * @return bytes for this command
+     */
+    public static byte[] barCodeHeight(byte dots) {
+        byte[] result = new byte[3];
+        result[0] = GS;
+        result[1] = 104;
+        result[2] = dots;
+        return result;
+    }
+
+
+    /**
+     * 打印条形码
+     *
+     * @param type        指令类型
+     * @param barCodeType 条形码类型({@link BarCode})
+     * @param text        打印内容
+     * @return
+     */
+    public static byte[] printBar(byte type, byte barCodeType, String text) {
+        byte[] barCodeBytes = text.getBytes();
+        byte[] result = new byte[4 + barCodeBytes.length];
+        result[0] = type;
+        result[1] = 107;
+        result[2] = barCodeType;
+        int idx = 3;
+        if (type == ESC) {
+            result[3] = (byte) barCodeBytes.length;
+            idx = 4;
+        }
+        for (int i = 0; i < barCodeBytes.length; i++) {
+            result[idx] = barCodeBytes[i];
+            idx++;
+        }
+        if (type == GS) {
+            result[idx] = 0;
+        }
+        return result;
+    }
+
+    //开启双划线模式
+    public static byte[] doubleStrikeOn() {
+        byte[] result = new byte[3];
+        result[0] = ESC;
+        result[1] = 71;
+        result[2] = 1;
+        return result;
+    }
+
+    //关闭双划线模式
+    public static byte[] doubleStrikeOff() {
+        byte[] result = new byte[3];
+        result[0] = ESC;
+        result[1] = 71;
+        result[2] = 0;
+        return result;
+    }
+
+    /**
+     * 选择字体(0-3)
+     *
+     * @return bytes for this command
+     */
+    public static byte[] selectFont(byte fout) {
+        byte[] result = new byte[3];
+        result[0] = ESC;
+        result[1] = 77;
+        result[2] = fout;
+        return result;
+    }
+
+    /**
+     * 选择字符代码表
+     *
+     * @param cp example:CodePage.WPC1252
+     * @return bytes for this command
+     */
+    public static byte[] selectCodeTab(byte cp) {
+        byte[] result = new byte[3];
+        result[0] = ESC;
+        result[1] = 116;
+        result[2] = cp;
+        return result;
+    }
+
+
+    /**
+     * justification_left
+     * ESC a n
+     *
+     * @return bytes for this command
+     */
+    public static byte[] justification_left() {
+        byte[] result = new byte[3];
+        result[0] = ESC;
+        result[1] = 97;
+        result[2] = 0;
+        return result;
+    }
+
+    /**
+     * justification_center
+     * ESC a n
+     *
+     * @return bytes for this command
+     */
+    public static byte[] justification_center() {
+        byte[] result = new byte[3];
+        result[0] = ESC;
+        result[1] = 97;
+        result[2] = 1;
+        return result;
+    }
+
+    /**
+     * justification_right
+     * ESC a n
+     *
+     * @return bytes for this command
+     */
+    public static byte[] justification_right() {
+        byte[] result = new byte[3];
+        result[0] = ESC;
+        result[1] = 97;
+        result[2] = 2;
+        return result;
+    }
+
+    /**
+     * 从缓冲区打印数据并保留几行在页尾
+     *
+     * @param n lines
+     * @return bytes for this command
+     */
+    public static byte[] printAndFeedLines(byte n) {
+        byte[] result = new byte[3];
+        result[0] = ESC;
+        result[1] = 100;
+        result[2] = n;
+        return result;
+    }
+
+    public static byte[] setChineseOn() {
+        byte[] result = new byte[2];
+        result[0] = FS;
+        result[1] = 38;
+        return result;
+    }
+
+    public static byte[] setChineseOff() {
+        byte[] result = new byte[2];
+        result[0] = FS;
+        result[1] = 46;
+        return result;
+    }
+
+    public static byte[] setChineseSuperOn() {
+        byte[] result = new byte[3];
+        result[0] = FS;
+        result[1] = 33;
+        result[2] = 12;
+        return result;
+    }
+
+    public static byte[] setChineseSuperOff() {
+        byte[] result = new byte[3];
+        result[0] = FS;
+        result[1] = 33;
+        result[2] = 0;
+        return result;
+    }
+
+    public static void test(OutputStream mOutputStream) throws IOException {
+        OutputStreamWriter outSW = new OutputStreamWriter(mOutputStream, "GBK");
+        BufferedWriter socketWriter = new BufferedWriter(outSW);
+        socketWriter.write(new String(justification_center(), "UTF-8"));
+        socketWriter.write("***测试***\n");
+        socketWriter.write("快来买吧\n");
+        socketWriter.write(new String(justification_left(), "UTF-8"));
+        socketWriter.write("订单号:170426543103\n");
+        socketWriter.write("哈哈哈\n");
+        socketWriter.write("-------------------------------------------\n");
+        socketWriter.write(new String(boldOn(), "UTF-8"));
+        socketWriter.write(new String(doubleStrikeOn(), "UTF-8"));
+        socketWriter.write("367#085_1300\n");
+        socketWriter.write(new String(doubleStrikeOff(), "UTF-8"));
+        socketWriter.write(new String(boldOff(), "UTF-8"));
+        socketWriter.write("测试人:王大帅哥\n");
+        socketWriter.write("手机:13052235269\n");
+        socketWriter.write(new String(boldOn(), "UTF-8"));
+        socketWriter.write(new String(setChineseSuperOn(), "UTF-8"));
+        socketWriter.write(new String(doubleStrikeOn(), "UTF-8"));
+        socketWriter.write("你说我是不是帅哥\n");
+        socketWriter.write(new String(doubleStrikeOff(), "UTF-8"));
+        socketWriter.write(new String(setChineseSuperOff(), "UTF-8"));
+        socketWriter.write(new String(boldOff(), "UTF-8"));
+
+        socketWriter.write("\n\n");
+        socketWriter.write(new String(setBarCodeWidth(2), "UTF-8"));
+        socketWriter.write(new String(printBarESC(BarCode.CODE128, "Bcb7099132890012345"), "UTF-8"));
+        socketWriter.write("\n");
+        socketWriter.write("cb7099132890012345");
+
+        //加一个空行
+        socketWriter.write("\n");
+        socketWriter.write(new String(feedPaperCutPartial(), "UTF-8"));
+        socketWriter.flush();
+        socketWriter.close();
+    }
+}

+ 332 - 0
app/src/main/java/com/uas/uas_mes_standard/bluebooths/PrintHelper.java

@@ -0,0 +1,332 @@
+package com.uas.uas_mes_standard.bluebooths;
+
+
+import HPRTAndroidSDKA300.HPRTPrinterHelper;
+
+/**
+ * 汉印的指令集为CPCL
+ * 想通过View来确定打印布局,但是工作量太大了,比较复杂
+ * 打印工具类
+ * 共同:
+ * 1.1 开始的坐标
+ * 1.2
+ * 1.打印文本
+ * 1.1 文本字体大小
+ * 1.2 字体
+ * <p>
+ * 2.打印条形码|二维码
+ */
+public class PrintHelper {
+
+    @SuppressWarnings("unused")
+    public PrintHelper() throws Exception {
+        this(0, 200, 200, 500, 1);
+    }
+
+    /**
+     * 设置标签局域
+     *
+     * @param offset 偏移值
+     * @param h      横向分辨率
+     * @param v      纵向分辨率
+     * @param height 最大高度
+     * @param qty    重复打印次数
+     */
+    public PrintHelper(int offset, int h, int v, int height, int qty) throws Exception {
+        HPRTPrinterHelper.printAreaSize(String.valueOf(offset),
+                "" + h,
+                "" + v,
+                "" + height,
+                "" + qty);
+    }
+
+    public int printEnd() throws Exception {
+        int printResult = HPRTPrinterHelper.Print();
+        return printResult;
+    }
+
+    public PrintHelper printForm() throws Exception {
+        HPRTPrinterHelper.Form();
+        return this;
+    }
+
+
+    //打印二维码
+    public QrBuilder printQr(CharSequence qr) {
+        return new QrBuilder(qr, this);
+    }
+
+    //打印文本
+    public TextBuilder printText(CharSequence qr) {
+
+        return new TextBuilder(qr, this);
+    }
+
+    //打印条形码
+    public BarCodeBuilder printBarCode(CharSequence qr) {
+        return new BarCodeBuilder(qr, this);
+    }
+
+    public static class TextBuilder extends Builder<TextBuilder> {
+        private int textFont = 7;//字体字号
+        private int textSize = 1;//字体大小
+        private int bold = 0;//加粗系数:0~5
+        private String fontType = "黑体";
+
+        public TextBuilder(CharSequence text, PrintHelper mPrintHelper) {
+            super(text, mPrintHelper);
+        }
+
+        public TextBuilder setTextFont(int textFont) {
+            this.textFont = textFont;
+            return this;
+        }
+
+        public TextBuilder setTextSize(int textSize) {
+            this.textSize = textSize;
+            return this;
+        }
+
+        public TextBuilder setBold(int bold) {
+            if (bold < 0) {
+                bold = 0;
+            }
+            if (bold > 5) {
+                bold = 5;
+            }
+            this.bold = bold;
+            return this;
+        }
+
+        @Override
+        public void print() throws Exception {
+            if (bold > 0) {
+                HPRTPrinterHelper.SetBold(bold + "");
+            }
+//            HPRTPrinterHelper.Setlp("5", "2", "46");
+            HPRTPrinterHelper.SetMag("1","1");
+            HPRTPrinterHelper.Text(HPRTPrinterHelper.TEXT,
+                    "" + textFont,
+                    "" + textSize,
+                    "" + x,
+                    "" + y,
+                    text.toString());
+        }
+
+
+    }
+
+    public static class BarCodeBuilder extends Builder<BarCodeBuilder> {
+        private String barCodeType = HPRTPrinterHelper.code128;//打印类型
+        private String orientation = HPRTPrinterHelper.BARCODE;//条形码方向
+        private int width = 1;//宽度 窄条的单位宽度
+        private int ratio = 1;//宽条与窄条的比率0 = 1.5 :1 20 = 2.0:1 26 = 2.6:1 1 = 2.0 :1 21 = 2.1:1 27 = 2.7:1 2 = 2.5 :1 22 = 2.2:1 28 = 2.8:1 3 = 3.0 :1 23 = 2.3:1 29 = 2.9:1 4 = 3.5 :1 24 = 2.4:1 30 = 3.0:1
+        private int height = 80;//条码的单位高度
+        private int codeTextFont = 1;//注释条码时要使用的字体号。 (当isReader)
+        private int codeTextSize = 1;//注释条码时要使用的字体大小。 (当isReader)
+        private int offset = 5;//文本距离条码的单位偏移。 (当isReader)
+        private boolean isReader = true;//是否可读(显示下面的编号)
+
+        public BarCodeBuilder(CharSequence text, PrintHelper mPrintHelper) {
+            super(text, mPrintHelper);
+        }
+
+        public BarCodeBuilder setHeight(int height) {
+            this.height = height;
+            return this;
+        }
+
+        public BarCodeBuilder setBarCodeType(String barCodeType) {
+            this.barCodeType = barCodeType;
+            return this;
+        }
+
+        public BarCodeBuilder setOrientation(String orientation) {
+            this.orientation = orientation;
+            return this;
+        }
+
+        public BarCodeBuilder setWidth(int width) {
+            this.width = width;
+            return this;
+        }
+
+        public BarCodeBuilder setRatio(int ratio) {
+            this.ratio = ratio;
+            return this;
+        }
+
+        public BarCodeBuilder setCodeTextFont(int codeTextFont) {
+            this.codeTextFont = codeTextFont;
+            return this;
+        }
+
+        public BarCodeBuilder setCodeTextSize(int codeTextSize) {
+            this.codeTextSize = codeTextSize;
+            return this;
+        }
+
+        public BarCodeBuilder setOffset(int offset) {
+            this.offset = offset;
+            return this;
+        }
+
+        public BarCodeBuilder setReader(boolean reader) {
+            isReader = reader;
+            return this;
+        }
+
+        @Override
+        public void print() throws Exception {
+            HPRTPrinterHelper.Barcode(orientation,
+                    barCodeType,
+                    String.valueOf(width),
+                    String.valueOf(ratio),
+                    String.valueOf(height),
+                    String.valueOf(x),
+                    String.valueOf(y),
+                    isReader,
+                    "" + codeTextFont,
+                    "" + codeTextSize,
+                    "" + offset,
+                    text.toString());
+        }
+
+
+    }
+
+    public static class QrBuilder extends Builder<QrBuilder> {
+        private String orientation = HPRTPrinterHelper.BARCODE;//条形码方向
+        // QRCode规范编号。选项是1或2。QRCodeModel1是原始规范,
+        // 而QRCodeModel2 则是该符号的经过增强后的形式。
+        // Model2 提供了附加功能,而且可以自动与 Model1 进行区分。 Model 2 为推荐规范,是默认值。
+        private int model = 2;
+        private int textSize = 2;//模块的单位宽度/单位高度
+
+        public QrBuilder(CharSequence text, PrintHelper mPrintHelper) {
+            super(text, mPrintHelper);
+        }
+
+        public QrBuilder setTextSize(int textSize) {
+            this.textSize = textSize;
+            return this;
+        }
+
+        public QrBuilder setModel(int model) {
+            this.model = model;
+            return this;
+        }
+
+        public QrBuilder setOrientation(String orientation) {
+            this.orientation = orientation;
+            return this;
+        }
+
+        @Override
+        public void print() throws Exception {
+            HPRTPrinterHelper.PrintQR(orientation,
+                    String.valueOf(x),
+                    String.valueOf(y),
+                    model + "",
+                    textSize + "",
+                    text.toString());
+        }
+    }
+
+    public static abstract class Builder<T extends Builder> {
+        protected int x, y;//坐标
+        protected CharSequence text;
+        protected PrintHelper mPrintHelper;
+
+        public Builder(CharSequence text, PrintHelper mPrintHelper) {
+            this.text = text;
+            this.mPrintHelper = mPrintHelper;
+        }
+
+        public T setX(int x) {
+            this.x = x;
+            return (T) this;
+        }
+
+        public T setAlign(String align) {
+            try {
+                HPRTPrinterHelper.Align(align);
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+            return (T) this;
+        }
+
+
+        public T setY(int y) {
+            this.y = y;
+            return (T) this;
+        }
+
+        public PrintHelper build() {
+            try {
+                print();
+            } catch (Exception e) {
+            }
+            return mPrintHelper;
+        }
+
+        public T form() {
+            try {
+                mPrintHelper.printForm();
+            } catch (Exception e) {
+            }
+            return (T) this;
+        }
+
+
+        public abstract void print() throws Exception;
+    }
+
+
+    public void test() throws Exception {
+        String code = "000208070099996170200060";//编号
+        String model = "A个静安四季的卡拉是打算考虑到";//规格
+        String company = "厦门雷度电子科技公司";//公司
+        String materialNumber = "009999617020006";//物料编号
+        String batchNumber = "2017161771";//批号
+        int number = 10000;//数量
+        int offset = 6,
+                h = 200,
+                v = 200,
+                height = 500,
+                qty = 1;
+        new PrintHelper(offset, h, v, height, qty)
+                .printBarCode(code)
+                .setAlign(HPRTPrinterHelper.CENTER)
+                .setY(5)
+                .setHeight(40)
+                .setCodeTextSize(4)
+                .build()
+                .printText(model)
+                .setAlign(HPRTPrinterHelper.CENTER)
+                .setY(90)
+                .setTextSize(10)
+                .build()
+                .printText(company)
+                .setAlign(HPRTPrinterHelper.LEFT)
+                .setY(115)
+                .setTextFont(2)
+                .build()
+                .printQr(materialNumber)
+                .setY(150)
+                .setTextSize(3)
+                .build()
+                .printText(batchNumber)
+                .setY(160)
+                .setX(120)
+                .build()
+                .printText(String.valueOf(number))
+                .setY(180)
+                .setX(120)
+                .build()
+                .printEnd();
+    }
+
+
+}

+ 1 - 0
app/src/main/java/com/uas/uas_mes_standard/fragment/BarcodeInfoCollectFragment.java

@@ -726,6 +726,7 @@ public class BarcodeInfoCollectFragment extends BaseFragment {
                 mResultTextView.setVisibility(View.VISIBLE);
                 mResultTextView.setText(null);
                 mBarcodeEditText.setText(null);
+                mResultTextView.setTextColor(getResources().getColor(R.color.green));
                 mBarcodeEditText.postDelayed(new Runnable() {
                     @Override
                     public void run() {

+ 8 - 7
app/src/main/java/com/uas/uas_mes_standard/fragment/BlueToothPrintFragment.java

@@ -23,10 +23,10 @@ import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.chad.library.adapter.base.BaseQuickAdapter;
 import com.chad.library.adapter.base.BaseViewHolder;
-import com.uas.bluetooth.ConnectHelper;
 import com.uas.uas_mes_standard.R;
 import com.uas.uas_mes_standard.activity.FunctionActivity;
 import com.uas.uas_mes_standard.adapter.BluetoothAdapter;
+import com.uas.uas_mes_standard.bluebooths.ConnectHelper;
 import com.uas.uas_mes_standard.tools.SharedPreUtil;
 import com.uas.uas_mes_standard.util.CommonUtil;
 import com.uas.uas_mes_standard.util.Constants;
@@ -76,7 +76,6 @@ public class BlueToothPrintFragment extends BaseFragment {
     @Override
     protected void initViews() {
         ((FunctionActivity) getActivity()).setTitle("打印机连接");
-
         mDpi = SharedPreUtil.getInt(mActivity, "printDpi", 203);
         mDpiTextView = (TextView) getActivity().findViewById(R.id.btn_actionbar_submit);
         mDpiTextView.setText(mDpi + "dpi");
@@ -108,6 +107,7 @@ public class BlueToothPrintFragment extends BaseFragment {
                     mRefreshImageView.setAnimation(getImgAnimation());
                     mRefreshImageView.startAnimation(getImgAnimation());
                     connectHelper.searchDevices();
+
                 }
             }
         });
@@ -334,13 +334,14 @@ public class BlueToothPrintFragment extends BaseFragment {
         }
         return mRotateAnimation;
     }
-
     private void setAdapter(List<BluetoothDevice> models) {
         List<BluetoothDevice> printDevices = new ArrayList<>();
         if (!ListUtils.isEmpty(models)) {
             for (int i = 0; i < models.size(); i++) {
                 BluetoothDevice bluetoothDevice = models.get(i);
-                if (bluetoothDevice != null && bluetoothDevice.getBluetoothClass().getDeviceClass() == ConnectHelper.PRINT_TYPE) {
+                if (bluetoothDevice != null
+//                        && bluetoothDevice.getBluetoothClass().getDeviceClass() == ConnectHelper.PRINT_TYPE
+                ) {
                     printDevices.add(bluetoothDevice);
                 }
             }
@@ -422,9 +423,9 @@ public class BlueToothPrintFragment extends BaseFragment {
 
     @Override
     public void onDestroyView() {
-        if (connectHelper != null) {
-            connectHelper.onDestroy();
-        }
+//        if (connectHelper != null) {
+//            connectHelper.onDestroy();
+//        }
         ((FunctionActivity) getActivity()).setSubmitBtnVisible(false);
         super.onDestroyView();
     }

+ 43 - 41
app/src/main/java/com/uas/uas_mes_standard/fragment/IOCOutMakeMaterialOper.java

@@ -241,7 +241,7 @@ public class IOCOutMakeMaterialOper extends BaseFragment implements View.OnClick
                                         + ";数量:" + CommonUtil.doubleFormat(messageObject.optDouble("BAR_REMAIN"))
                                         + ";批号:" + JsonUtils.optStringNotNull(messageObject, "BAR_BATCHCODE")
                                         + ";料号:" + JsonUtils.optStringNotNull(messageObject, "BAR_PRODCODE")
-                                        + ";名称规格:" + messageObject.optString("PR_DETAIL")
+                                        + ";名称规格:" + messageObject.  optString("PR_DETAIL")
                                         + "  " + JsonUtils.optStringNotNull(messageObject, "PR_SPEC")
                                         + ";仓位:" + JsonUtils.optStringNotNull(messageObject, "BAR_LOCATION");
 
@@ -850,26 +850,27 @@ public class IOCOutMakeMaterialOper extends BaseFragment implements View.OnClick
                         mCollectResultTextView.setVisibility(View.VISIBLE);
                         mCollectResultTextView.setTextColor(getResources().getColor(R.color.green));
                         mCollectResultTextView.setText(null);
-                        JSONArray listArray = dataObject.optJSONArray("nolist");
+//                        JSONArray listArray = dataObject.optJSONArray("nolist");
                         if (mCollectType.equals("byBarcode") || mCollectType.equals("byBatchcode")) {
-                            String barcodeResult = "采集成功;" + JsonUtils.optStringNotNull(dataObject, "finishno")
+                            String barcodeResult = "采集成功!\n"
+//                                    + JsonUtils.optStringNotNull(dataObject, "finishno")
                                     + "\n条码:" + JsonUtils.optStringNotNull(messageObject, "BAR_CODE")
                                     + ";数量:" + CommonUtil.doubleFormat(messageObject.optDouble("BAR_REMAIN"))
-                                    + ";批号:" + JsonUtils.optStringNotNull(messageObject, "BAR_BATCHCODE")
-                                    + ";料号:" + JsonUtils.optStringNotNull(messageObject, "BAR_PRODCODE")
-                                    + ";名称规格:" + messageObject.optString("PR_DETAIL")
-                                    + "  " + JsonUtils.optStringNotNull(messageObject, "PR_SPEC")
-                                    + ";仓位:" + JsonUtils.optStringNotNull(messageObject, "BAR_LOCATION");
-
-                            if (listArray != null && listArray.length() > 0) {
-                                for (int i = 0; i < listArray.length(); i++) {
-                                    JSONObject listObject = listArray.optJSONObject(i);
-                                    barcodeResult = barcodeResult
-                                            + "\n单号:" + JsonUtils.optStringNotNull(listObject, "PI_INOUTNO")
-                                            + ";条码号:" + JsonUtils.optStringNotNull(listObject, "BAR_CODE")
-                                            + ";数量:" + CommonUtil.doubleFormat(JsonUtils.optDoubleNotNull(listObject, "BAR_REMAIN"));
-                                }
-                            }
+//                                    + ";批号:" + JsonUtils.optStringNotNull(messageObject, "BAR_BATCHCODE")
+                                    + ";\n料号:" + JsonUtils.optStringNotNull(messageObject, "BAR_PRODCODE")
+                                    + ";\n名称规格:" + messageObject.optString("PR_DETAIL")+";";
+//                                    + "  " + JsonUtils.optStringNotNull(messageObject, "PR_SPEC");
+//                                    + ";仓位:" + JsonUtils.optStringNotNull(messageObject, "BAR_LOCATION");
+
+//                            if (listArray != null && listArray.length() > 0) {
+//                                for (int i = 0; i < listArray.length(); i++) {
+//                                    JSONObject listObject = listArray.optJSONObject(i);
+//                                    barcodeResult = barcodeResult
+//                                            + "\n单号:" + JsonUtils.optStringNotNull(listObject, "PI_INOUTNO")
+//                                            + ";条码号:" + JsonUtils.optStringNotNull(listObject, "BAR_CODE")
+//                                            + ";数量:" + CommonUtil.doubleFormat(JsonUtils.optDoubleNotNull(listObject, "BAR_REMAIN"));
+//                                }
+//                            }
 
                             mCollectResultTextView.setText(barcodeResult);
                             mCollectResultTextView.setTextColor(getResources().getColor(R.color.green));
@@ -901,18 +902,18 @@ public class IOCOutMakeMaterialOper extends BaseFragment implements View.OnClick
                                     + ";批号:" + JsonUtils.optStringNotNull(messageObject, "BAR_BATCHCODE")
                                     + ";料号:" + JsonUtils.optStringNotNull(messageObject, "BAR_PRODCODE")
                                     + ";名称规格:" + JsonUtils.optStringNotNull(messageObject, "PR_DETAIL")
-                                    + "  " + JsonUtils.optStringNotNull(messageObject, "PR_SPEC");
+                                    + " " + JsonUtils.optStringNotNull(messageObject, "PR_SPEC");
 
 
-                            if (listArray != null && listArray.length() > 0) {
-                                for (int i = 0; i < listArray.length(); i++) {
-                                    JSONObject listObject = listArray.optJSONObject(i);
-                                    boxResult = boxResult
-                                            + "\n单号:" + JsonUtils.optStringNotNull(listObject, "PI_INOUTNO")
-                                            + ";条码号:" + JsonUtils.optStringNotNull(listObject, "BAR_CODE")
-                                            + ";数量:" + CommonUtil.doubleFormat(JsonUtils.optDoubleNotNull(listObject, "BAR_REMAIN"));
-                                }
-                            }
+//                            if (listArray != null && listArray.length() > 0) {
+//                                for (int i = 0; i < listArray.length(); i++) {
+//                                    JSONObject listObject = listArray.optJSONObject(i);
+//                                    boxResult = boxResult
+//                                            + "\n单号:" + JsonUtils.optStringNotNull(listObject, "PI_INOUTNO")
+//                                            + ";条码号:" + JsonUtils.optStringNotNull(listObject, "BAR_CODE")
+//                                            + ";数量:" + CommonUtil.doubleFormat(JsonUtils.optDoubleNotNull(listObject, "BAR_REMAIN"));
+//                                }
+//                            }
 
                             mCollectResultTextView.setText(boxResult);
                             mCollectResultTextView.setTextColor(getResources().getColor(R.color.green));
@@ -1616,23 +1617,24 @@ public class IOCOutMakeMaterialOper extends BaseFragment implements View.OnClick
                         mCollectResultTextView.setText(null);
                         JSONArray listArray = dataObject.optJSONArray("nolist");
                         if (mCollectType.equals("byBarcode") || mCollectType.equals("byBatchcode")) {
-                            String barcodeResult = "采集成功;" + JsonUtils.optStringNotNull(dataObject, "finishno")
+                            String barcodeResult = "采集成功!"
+//                                    + JsonUtils.optStringNotNull(dataObject, "finishno")
                                     + "\n条码:" + JsonUtils.optStringNotNull(messageObject, "BAR_CODE")
                                     + ";数量:" + CommonUtil.doubleFormat(messageObject.optDouble("BAR_REMAIN"))
-                                    + ";批号:" + JsonUtils.optStringNotNull(messageObject, "BAR_BATCHCODE")
-                                    + ";料号:" + JsonUtils.optStringNotNull(messageObject, "BAR_PRODCODE")
-                                    + ";名称规格:" + messageObject.optString("PR_DETAIL")
-                                    + "  " + JsonUtils.optStringNotNull(messageObject, "PR_SPEC")
-                                    + ";仓位:" + JsonUtils.optStringNotNull(messageObject, "BAR_LOCATION");
+//                                    + ";批号:" + JsonUtils.optStringNotNull(messageObject, "BAR_BATCHCODE")
+                                    + ";\n料号:" + JsonUtils.optStringNotNull(messageObject, "BAR_PRODCODE")
+                                    + ";\n名称规格:" + messageObject.optString("PR_DETAIL");
+//                                    + "  " + JsonUtils.optStringNotNull(messageObject, "PR_SPEC")
+//                                    + ";仓位:" + JsonUtils.optStringNotNull(messageObject, "BAR_LOCATION");
 
                             if (listArray != null && listArray.length() > 0) {
-                                for (int i = 0; i < listArray.length(); i++) {
-                                    JSONObject listObject = listArray.optJSONObject(i);
-                                    barcodeResult = barcodeResult
-                                            + "\n单号:" + JsonUtils.optStringNotNull(listObject, "PI_INOUTNO")
-                                            + ";条码号:" + JsonUtils.optStringNotNull(listObject, "BAR_CODE")
-                                            + ";数量:" + CommonUtil.doubleFormat(JsonUtils.optDoubleNotNull(listObject, "BAR_REMAIN"));
-                                }
+//                                for (int i = 0; i < listArray.length(); i++) {
+//                                    JSONObject listObject = listArray.optJSONObject(i);
+//                                    barcodeResult = barcodeResult
+//                                            + "\n单号:" + JsonUtils.optStringNotNull(listObject, "PI_INOUTNO")
+//                                            + ";条码号:" + JsonUtils.optStringNotNull(listObject, "BAR_CODE")
+//                                            + ";数量:" + CommonUtil.doubleFormat(JsonUtils.optDoubleNotNull(listObject, "BAR_REMAIN"));
+//                                }
 
                                 //弹出拆分结果弹框
                                 initBreakPopupWindow(listArray);

+ 8 - 3
app/src/main/java/com/uas/uas_mes_standard/fragment/JLTStorageInBarcodeFragment.java

@@ -806,7 +806,7 @@ public class JLTStorageInBarcodeFragment extends BaseFragment implements View.On
         String jlt_edit_lotnos = jlt_edit_lotno.getText().toString().trim();//LoNo
         String jlt_edit_dataecodes = jlt_edit_dataecode.getText().toString().trim();//日期
         String jlt_edit_dcs = jlt_edit_dc.getText().toString().trim();//字符
-        if (jlt_storage_in_barcode_ets.isEmpty()){
+        if (jlt_check_ok.isChecked()==true&&jlt_storage_in_barcode_ets.isEmpty()){
             jlt_storage_in_barcode_et.requestFocus();
             return;
         }
@@ -1106,9 +1106,14 @@ public class JLTStorageInBarcodeFragment extends BaseFragment implements View.On
                         jlt_edit_dc.setText(dc);
                         jlt_edit_qty.setText(qty);
                     }
+                    if (jlt_check_ok.isChecked()==true&&jlt_storage_in_barcode_et.getText().toString().trim().isEmpty()){
+                        jlt_storage_in_barcode_et.requestFocus();
+                        jlt_storage_in_barcode_et.setSelection(jlt_edit_qty.getText().toString().trim().length());
+                    }else {
+                        newlinebarcodeEnter();
+                    }
+
 
-                        jlt_edit_qty.requestFocus();
-                        jlt_edit_qty.setSelection(jlt_edit_qty.getText().toString().trim().length());
             }
 
             @Override

+ 17 - 6
app/src/main/java/com/uas/uas_mes_standard/fragment/MaterialInCollectFragment.java

@@ -108,7 +108,7 @@ public class MaterialInCollectFragment extends BaseFragment implements View.OnCl
 
     @Override
     protected void initViews() {
-        FunctionActivity.setTitle("入库绑定");
+        ((FunctionActivity) getActivity()).setTitle("入库绑定");
         ((FunctionActivity) getActivity()).setMoreBtnVisible(true);
         ((FunctionActivity) getActivity()).setScanIvVisible(true);
 
@@ -716,15 +716,25 @@ public class MaterialInCollectFragment extends BaseFragment implements View.OnCl
     @Override
     public void onHiddenChanged(boolean hidden) {
         super.onHiddenChanged(hidden);
-        if (!hidden) {
-            FunctionActivity.setTitle(getResources().getString(R.string.material_in_collection));
+        if (hidden) {
+            ((FunctionActivity) getActivity()).setMoreBtnVisible(false);
+        } else {
+            ((FunctionActivity) getActivity()).setTitle("入库绑定");
             ((FunctionActivity) getActivity()).setMoreBtnVisible(true);
             ((FunctionActivity) getActivity()).setScanIvVisible(true);
             mScanImageView.setOnClickListener(this);
-        } else {
-            ((FunctionActivity) getActivity()).setMoreBtnVisible(false);
-            ((FunctionActivity) getActivity()).setScanIvVisible(false);
         }
+
+
+//        if (!hidden) {
+//            FunctionActivity.setTitle();
+//            ((FunctionActivity) getActivity()).setMoreBtnVisible(true);
+//            ((FunctionActivity) getActivity()).setScanIvVisible(true);
+//
+//        } else {
+//            ((FunctionActivity) getActivity()).setMoreBtnVisible(false);
+//            ((FunctionActivity) getActivity()).setScanIvVisible(false);
+//        }
     }
 
     @Override
@@ -982,6 +992,7 @@ public class MaterialInCollectFragment extends BaseFragment implements View.OnCl
                             progressDialog.dismiss();
                             mResultTextView.setVisibility(View.VISIBLE);
                             mBarcodeEditText.setText(null);
+                            mResultTextView.setTextColor(getResources().getColor(R.color.green));
 //                            mBarcodeEditText.postDelayed(new Runnable() {
 //                                @Override
 //                                public void run() {

+ 9 - 2
app/src/main/java/com/uas/uas_mes_standard/fragment/WHCheckContentFragment.java

@@ -72,8 +72,15 @@ public class WHCheckContentFragment extends BaseFragment implements AdapterView.
                 break;
             //包装信息核查
             case GloableParams.LISTNAME_WH_CHECKCONTENT_PACKAGE:
-                getFragmentManager().beginTransaction().addToBackStack(null)
-                        .replace(R.id.container_function_fragment,new WHCheckPackageFragment()).commit();
+//                Intent intent = new Intent(getActivity(),BluetoothActivity.class);
+//                startActivity(intent);
+//                BlueToothPrintFragment blueToothPrintFragment = new BlueToothPrintFragment();
+//                Bundle bundle = new Bundle();
+//                bundle.putString(Constants.KEY.BARCODE_PRINT_ARRAY, listArray.toString());
+//                blueToothPrintFragment.setArguments(bundle);
+//                FragmentUtils.switchFragment(WHCheckContentFragment.this, blueToothPrintFragment);
+//                getFragmentManager().beginTransaction().addToBackStack(null)
+//                        .replace(R.id.container_function_fragment,new WHCheckPackageFragment()).commit();
                 break;
             //工单完工品核查
             case GloableParams.LISTNAME_WH_CHECKCONTENT_MAKEFINISH:

+ 44 - 27
app/src/main/java/com/uas/uas_mes_standard/fragment/WHCheckMakeMaterialFragment.java

@@ -12,7 +12,6 @@ import android.view.KeyEvent;
 import android.view.View;
 import android.view.Window;
 import android.view.inputmethod.InputMethodManager;
-import android.widget.AdapterView;
 import android.widget.EditText;
 import android.widget.ImageView;
 import android.widget.ListView;
@@ -46,7 +45,9 @@ import java.util.List;
 /**
  * @note:物料库存核查Fragment
  */
-public class WHCheckMakeMaterialFragment extends BaseFragment implements View.OnClickListener, DataSourceManager.NotifyData, AdapterView.OnItemClickListener, VolleyUtil.VolleyFinishListener {
+public class WHCheckMakeMaterialFragment extends BaseFragment implements View.OnClickListener, DataSourceManager.NotifyData,
+//        AdapterView.OnItemClickListener,
+        VolleyUtil.VolleyFinishListener {
     private static final int SCAN_BARCODE_CODE = 301;
     ClearableEditText etProdcode, etWhcode;
     TextView tvPrDetail, tvPrSpec;
@@ -91,8 +92,20 @@ public class WHCheckMakeMaterialFragment extends BaseFragment implements View.On
     @Override
     protected void initEvents() {
         btnSearch.setOnClickListener(this);
-        lvDetail.setOnItemClickListener(this);
+//        lvDetail.setOnItemClickListener(this);
         etProdcode.setOnKeyListener(new View.OnKeyListener() {
+            @Override
+            public boolean onKey(View v, int keyCode, KeyEvent event) {
+                if (keyCode == KeyEvent.KEYCODE_ENTER && event.getAction() == KeyEvent.ACTION_UP) {
+                    disposeOnClickEnter();
+                    etWhcode.requestFocus();
+                    etWhcode.setSelection(etWhcode.getText().toString().length());
+                    return true;
+                }
+                return false;
+            }
+        });
+        etWhcode.setOnKeyListener(new View.OnKeyListener() {
             @Override
             public boolean onKey(View v, int keyCode, KeyEvent event) {
                 if (keyCode == KeyEvent.KEYCODE_ENTER && event.getAction() == KeyEvent.ACTION_UP) {
@@ -282,30 +295,34 @@ public class WHCheckMakeMaterialFragment extends BaseFragment implements View.On
     }
 
     /*=========================监听事件===================================*/
-    @Override
-    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
-        //获取点击行所对应的detail对象
-        WHMakeMaterialProduct tmpProd = detailItemList.get(position);
-        String strPrcode = tmpProd.getBAR_PRODCODE().trim();
-        String strWhcode = tmpProd.getBAR_WHCODE().trim();
-        String strLocation = tmpProd.getBAR_LOCATION();
-        if (strLocation == null || strLocation.equals("null") || strLocation.equals("")) {
-            strLocation = "null";
-        }
-        //请求服务器获取明细
-        JSONObject paramJson = new JSONObject();
-        try {
-            paramJson.put("pr_code", strPrcode);
-            paramJson.put("wh_code", strWhcode);
-            paramJson.put("bar_location", strLocation);
-        } catch (JSONException e) {
-            e.printStackTrace();
-        }
-        Log.e("WHCheck", "!!!" + paramJson.toString());
-        requestType = VolleyUtil.FRAGMETN_WHCHECK_PRODUCT_DETAIL;
-        VolleyUtil.getVolleyUtil().requestMakeMaterialDetail(getActivity(), GloableParams.ADDRESS_WH_DETAIL, VolleyUtil.METHOD_GET,
-                requestType, strPrcode, strWhcode, strLocation);
-    }
+//    @Override
+//    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
+//        //获取点击行所对应的detail对象
+//        WHMakeMaterialProduct tmpProd = detailItemList.get(position);
+//        String strPrcode = tmpProd.getBAR_PRODCODE().trim();
+//        String strWhcode = tmpProd.getBAR_WHCODE().trim();
+//        String strLocation = tmpProd.getBAR_LOCATION();
+//        String bar_madedate = tmpProd.getBAR_MADEDATE();
+//
+//        if (strLocation == null || strLocation.equals("null") || strLocation.equals("")) {
+//            strLocation = "null";
+//        }
+//        //请求服务器获取明细
+//        JSONObject paramJson = new JSONObject();
+//        try {
+//            paramJson.put("pr_code", strPrcode);
+//            paramJson.put("wh_code", strWhcode);
+//            paramJson.put("bar_location", strLocation);
+//            paramJson.put("bar_madedate", bar_madedate);
+//
+//        } catch (JSONException e) {
+//            e.printStackTrace();
+//        }
+//        Log.e("WHCheck", "!!!" + paramJson.toString());
+//        requestType = VolleyUtil.FRAGMETN_WHCHECK_PRODUCT_DETAIL;
+//        VolleyUtil.getVolleyUtil().requestMakeMaterialDetail(getActivity(), GloableParams.ADDRESS_WH_DETAIL, VolleyUtil.METHOD_GET,
+//                requestType, strPrcode, strWhcode, strLocation);
+//    }
 
     @Override
     public void onClick(View v) {

+ 14 - 4
app/src/main/java/com/uas/uas_mes_standard/global/GloableParams.java

@@ -873,10 +873,20 @@ public class GloableParams {
     public static final String LISTNAME_WH_CHECKCONTENT_PACKAGE = "包装信息核查";
     public static final String LISTNAME_WH_CHECKCONTENT_MAKEFINISH = "工单完工品核查";
     public static final String LISTNAME_WH_CHECKCONTENT_ORDERFINISH = "订单完工品核查";
-    public static final String[] mmindexListName = {LISTNAME_WH_CHECKCONTENT_MAKEMATERIAL, LISTNAME_WH_CHECKCONTENT_BARCODE,
-            LISTNAME_WH_CHECKCONTENT_PACKAGE, LISTNAME_WH_CHECKCONTENT_MAKEFINISH, LISTNAME_WH_CHECKCONTENT_ORDERFINISH};
-    public static final int[] mmindexListImg = {R.drawable.ic_menu_head, R.drawable.ic_menu_head,
-            R.drawable.ic_menu_head, R.drawable.ic_menu_head, R.drawable.ic_menu_head};
+    public static final String[] mmindexListName = {
+            LISTNAME_WH_CHECKCONTENT_MAKEMATERIAL,
+            LISTNAME_WH_CHECKCONTENT_BARCODE,
+//            LISTNAME_WH_CHECKCONTENT_PACKAGE,
+//            LISTNAME_WH_CHECKCONTENT_MAKEFINISH,
+//            LISTNAME_WH_CHECKCONTENT_ORDERFINISH
+    };
+    public static final int[] mmindexListImg = {
+            R.drawable.ic_menu_head,
+            R.drawable.ic_menu_head,
+//            R.drawable.ic_menu_head,
+//            R.drawable.ic_menu_head,
+//            R.drawable.ic_menu_head
+    };
     //INDEX:setting Index
 
 

+ 1 - 0
app/src/main/java/com/uas/uas_mes_standard/util/Constants.java

@@ -120,6 +120,7 @@ public interface Constants {
 
         //是否设置过材料入库采集项
         String HAD_SET_IN_COLLECT = "had_set_in_collect";
+        String HAD_SET_IN_DY = "had_set_in_dy";
         //材料入库撤销备料方式
         String MATERIAL_IN_REVOKE_TYPE = "material_in_revoke_type";
         /*********************************************

+ 2 - 1
app/src/main/java/com/uas/uas_mes_standard/util/PrintUtils.java

@@ -6,9 +6,10 @@ import android.text.TextUtils;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
-import com.uas.bluetooth.PrintHelper;
 import com.uas.uas_mes_standard.tools.SharedPreUtil;
 
+import com.uas.uas_mes_standard.bluebooths.PrintHelper;
+
 public class PrintUtils {
 
     public static int printBar(Context context, String dataJson, int dpi, String printTemplate) {

+ 89 - 0
app/src/main/res/layout/bluetooth_layout.xml

@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+
+    <RelativeLayout
+        android:layout_width="match_parent"
+        android:layout_height="match_parent" >
+
+        <Button
+            android:id="@+id/openBluetooth_tb"
+            android:layout_width="130dp"
+            android:layout_height="wrap_content"
+            android:layout_alignParentRight="true"
+            android:layout_marginRight="18dp"
+            android:layout_marginTop="5dp"
+            android:text="打开蓝牙" />
+
+        <Button
+            android:id="@+id/searchDevices"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_alignParentLeft="true"
+            android:layout_below="@+id/openBluetooth_tb"
+            android:layout_marginTop="20dp"
+            android:text="搜索设备" />
+
+        <View
+            android:layout_width="match_parent"
+            android:layout_height="3dp"
+            android:layout_alignParentLeft="true"
+            android:layout_below="@+id/searchDevices"
+            android:background="@android:color/darker_gray" />
+
+        <LinearLayout
+            android:id="@+id/linearLayout1"
+            android:layout_width="match_parent"
+            android:layout_height="150dp"
+            android:layout_marginTop="125dp"
+            android:orientation="vertical" >
+
+            <TextView
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:text="未配对设备" />
+
+            <ListView
+                android:id="@+id/unbondDevices"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content" />
+        </LinearLayout>
+
+        <View
+            android:layout_width="match_parent"
+            android:layout_height="3dp"
+            android:layout_alignParentLeft="true"
+            android:layout_below="@+id/searchDevices"
+            android:layout_marginTop="160dp"
+            android:background="@android:color/darker_gray" />
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="190dp"
+            android:layout_marginTop="288dp"
+            android:orientation="vertical" >
+
+            <TextView
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:text="已配对设备" />
+            <ListView
+                android:id="@+id/bondDevices"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_alignParentLeft="true"
+                android:layout_below="@+id/linearLayout1" >
+            </ListView>
+        </LinearLayout>
+
+        <Button
+            android:id="@+id/return_Bluetooth_btn"
+            android:layout_width="100dp"
+            android:layout_height="wrap_content"
+            android:layout_above="@+id/searchDevices"
+            android:layout_alignParentLeft="true"
+            android:text="返回" />
+
+    </RelativeLayout>
+</LinearLayout>

+ 19 - 0
app/src/main/res/layout/bonddevice_item.xml

@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+    <RelativeLayout
+        android:layout_width="match_parent"
+        android:layout_height="match_parent" >
+
+        <TextView
+            android:id="@+id/device_name"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_alignParentLeft="true"
+            android:layout_alignParentTop="true"
+            android:text="已绑定设备"
+            android:textAppearance="?android:attr/textAppearanceLarge" />
+
+    </RelativeLayout>
+</LinearLayout>

+ 0 - 1
app/src/main/res/layout/fragment_jlt_storage_in_barcode.xml

@@ -62,7 +62,6 @@
             android:background="@null"
             android:focusable="true"
             android:selectAllOnFocus="true"
-            android:numeric="signed"
             android:hint="请采集条码号/二维码"
             android:imeOptions="actionSend"
             android:textColor="@color/black" />

+ 1 - 0
app/src/main/res/layout/item_list_stock_already_list.xml

@@ -80,6 +80,7 @@
 
 
     <LinearLayout
+        android:visibility="gone"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:layout_marginTop="5dp">

+ 7 - 0
app/src/main/res/layout/item_list_table.xml

@@ -42,4 +42,11 @@
         android:layout_width="0.5px"
         android:layout_height="fill_parent"
         android:background="#B8B8B8" />
+    <TextView
+        android:id="@+id/tv_table_4"
+        style="@style/CardContentTextStyle"
+        android:layout_weight="1"
+        android:text="DC" />
+
+
 </LinearLayout>

+ 4 - 2
app/src/main/res/layout/popwin_whbatch_breakpackage.xml

@@ -1,6 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
-   android:layout_width="match_parent"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
     android:layout_height="match_parent">
 
     <RelativeLayout
@@ -60,7 +61,8 @@
                 android:id="@+id/btn_print"
                 android:layout_toLeftOf="@id/btn_dialog_confirm_ok"
                 style="@style/PopwinCancleButtonStyle"
-                android:text="@string/text_btn_print"/>
+                android:text="@string/text_btn_print"
+                tools:ignore="NotSibling" />
         </RelativeLayout>
     </RelativeLayout>
 </RelativeLayout>

+ 57 - 0
app/src/main/res/layout/printdata_layout.xml

@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+    <RelativeLayout
+        android:layout_width="match_parent"
+        android:layout_height="match_parent" >
+
+        <EditText
+            android:id="@+id/print_data"
+            android:layout_width="match_parent"
+            android:layout_height="200dp"
+            android:layout_alignParentLeft="true"
+            android:layout_alignParentTop="true"
+            android:layout_marginTop="46dp" >
+        </EditText>
+
+        <TextView
+            android:id="@+id/device_name"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_alignParentLeft="true"
+            android:layout_alignParentTop="true"
+            android:layout_marginTop="16dp"
+            android:text="Large Text"
+            android:textAppearance="?android:attr/textAppearanceLarge" />
+
+        <TextView
+            android:id="@+id/connect_state"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_alignBaseline="@+id/device_name"
+            android:layout_alignBottom="@+id/device_name"
+            android:layout_marginLeft="42dp"
+            android:layout_toRightOf="@+id/device_name"
+            android:text="Large Text"
+            android:textAppearance="?android:attr/textAppearanceLarge" />
+
+        <Button
+            android:id="@+id/send"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_alignParentLeft="true"
+            android:layout_below="@+id/print_data"
+            android:layout_marginTop="21dp"
+            android:text="打印" />
+
+        <Button
+            android:id="@+id/command"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_alignParentLeft="true"
+            android:layout_below="@+id/send"
+            android:text="指令" />
+
+    </RelativeLayout>
+</LinearLayout>

+ 22 - 0
app/src/main/res/layout/unbonddevice_item.xml

@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+
+    <RelativeLayout
+        android:layout_width="match_parent"
+        android:layout_height="match_parent" >
+
+        <TextView
+            android:id="@+id/device_name"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_alignParentLeft="true"
+            android:layout_alignParentTop="true"
+            android:text="未绑定设备"
+            android:textAppearance="?android:attr/textAppearanceLarge" />
+
+    </RelativeLayout>
+
+
+</LinearLayout>

+ 2 - 2
build.gradle

@@ -43,8 +43,8 @@ ext {
             targetSdkVersion : 28,
             compileSdkVersion: 28,
             buildToolsVersion: "28.0.3",
-            versionCode      : 10,
-            versionName      : "v1.0"
+            versionCode      : 12,
+            versionName      : "v1.2"
     ]
 
     depsVersion = [

+ 1 - 0
pda_libs/bluetooth/build.gradle

@@ -24,5 +24,6 @@ android {
 }
 
 dependencies {
+    implementation fileTree(include: ['*.jar'], dir: 'libs')
     api fileTree(dir: 'libs', include: ['*.jar'])
 }

+ 3 - 0
pda_libs/bluetooth/src/main/AndroidManifest.xml

@@ -3,4 +3,7 @@
 
     <uses-permission android:name="android.permission.BLUETOOTH" />
     <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
+    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
+    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
+
 </manifest>

+ 24 - 15
pda_libs/bluetooth/src/main/java/com/uas/bluetooth/ConnectHelper.java

@@ -15,6 +15,7 @@ import android.os.Message;
 import android.util.Log;
 
 import java.lang.reflect.Method;
+import java.util.ArrayList;
 import java.util.Set;
 
 import HPRTAndroidSDKA300.HPRTPrinterHelper;
@@ -53,12 +54,16 @@ public class ConnectHelper {
      */
     private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
         public void onReceive(Context context, Intent intent) {
+            ArrayList<BluetoothDevice> list=new ArrayList<>();
+
             String action = intent.getAction();
             // 把搜索的设置添加到集合中
             if (BluetoothDevice.ACTION_FOUND.equals(action)) {
                 BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
                 if (mConnectListener != null) {
                     mConnectListener.onDeviceChange(device.getBondState(), device);
+                    list.add(device);
+                    Log.e("devicesize",list.size()+"");
                 }
 
             } else if (BluetoothDevice.ACTION_BOND_STATE_CHANGED.equals(action)) {
@@ -79,14 +84,25 @@ public class ConnectHelper {
     public ConnectHelper(Activity ct) {
         this.ct = ct;
         //广播注册
-        IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
-        filter.addAction(BluetoothDevice.ACTION_BOND_STATE_CHANGED);//状态改变
-        filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);//搜索完成
-        filter.addAction(BluetoothAdapter.ACTION_SCAN_MODE_CHANGED);//行动扫描模式改变了
-        filter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED);//动作状态发生了变化
+        IntentFilter filter = new IntentFilter();
+//        filter.addAction(BluetoothDevice.ACTION_FOUND);
+//        filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_STARTED);
+//        filter.addAction(BluetoothDevice.ACTION_BOND_STATE_CHANGED);//状态改变
+//        filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);//搜索完成
+//        filter.addAction(BluetoothAdapter.ACTION_SCAN_MODE_CHANGED);//行动扫描模式改变了
+//        filter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED);//动作状态发生了变化
+        filter.addAction(BluetoothDevice.ACTION_FOUND);
+        filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_STARTED);
+        filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
+        filter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED);
+
+
+
+
         ct.registerReceiver(mReceiver, filter); // Don't forget to unregister during onDestroy
         //初始化
         mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
+
     }
 
     /**
@@ -105,18 +121,11 @@ public class ConnectHelper {
      *
      * @return -1:当前蓝牙不可用 -2:搜索失败(可能正在搜索) -3:蓝牙关闭,先开启蓝牙  0:搜索请求发送成功
      */
-    public int searchDevices() {
+    public void searchDevices() {
         if (isOpenBluetooth()) {
             //开始搜索蓝牙设备
-            if (mBluetoothAdapter == null) {
-                mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
-            }
-            if (mBluetoothAdapter == null) {
-                return 1;
-            }
-            return mBluetoothAdapter.startDiscovery() ? 0 : -2;
-        } else {
-            return -3;
+            mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
+             mBluetoothAdapter.startDiscovery();
         }
 
     }