左晓为主开发手持机充值管理机
zuoxiao
2023-11-16 682caa4cef47046184e860d86ebb8467c11e032f
生成excl的修改
10个文件已修改
3个文件已添加
247 ■■■■ 已修改文件
app/build.gradle 34 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/libs/ocr-library.aar 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/AndroidManifest.xml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/recharge/activity/BaseActivity.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/recharge/activity/MyActivity.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/recharge/activity/NewCardActivity.java 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/recharge/net/SocketNet.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/recharge/utils/ExcelUtil.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/activity_new_card.xml 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/activity_test.xml 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/mipmap-xhdpi/icon_scan.png 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/values/styles.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
gradle.properties 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/build.gradle
@@ -27,35 +27,37 @@
    viewBinding {
        enabled = true;
    }
//    repositories {
//         flatDir {
//            dirs 'libs'
//        }
//    }
}
dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
//    implementation 'androidx.appcompat:appcompat:1.6.1'
//    implementation 'com.google.android.material:material:1.10.0'
    implementation fileTree(include: ['*.jar','*.aar'], dir: 'libs')
    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    implementation 'androidx.core:core-ktx:1.8.0'
    implementation 'androidx.appcompat:appcompat:1.5.0'
    //room数据库
    implementation "androidx.room:room-runtime:2.3.0"
    implementation "androidx.room:room-ktx:2.3.0"
    runtimeOnly("androidx.room:room-common:2.3.0")
    annotationProcessor "androidx.room:room-compiler:2.3.0"
//    implementation 'com.android.support:appcompat-v7:28.0.0'
//    implementation('com.jakewharton:butterknife:9.0.0') {
//        exclude group: 'com.android.support:annotations-v7:28.0.0';
//        exclude group: 'android.arch.core:common:1.1.1'
//    }
//    implementation project(path: ':pickerviewlibrary')
//    implementation files('libs\\AMap_Location_V6.2.0_20221026.jar')
//    annotationProcessor('com.jakewharton:butterknife-compiler:9.0.0') {
//        exclude group: 'android.arch.core:common:1.1.1'
//    }
//    implementation 'com.android.support:support-v4:28.0.0-alpha1'
//    implementation 'org.xutils:xutils:3.8.5'
//    implementation files('libs/core-3.3.0.jar')
    implementation 'com.google.zxing:core:3.4.1'
    implementation group: 'net.sourceforge.jexcelapi', name: 'jxl', version: '2.6.12'
    implementation 'com.wang.avi:library:2.1.3'
    implementation project(':pickerviewlibrary')
    implementation project(':easysocket')
    implementation 'com.tencent.bugly:crashreport:latest.release'
//    处理图片
//    implementation (name: 'ocr-library', ext: 'aar')
    //权限
    implementation ('com.guolindev.permissionx:permissionx:1.7.1'){
        exclude group: 'androidx.core';
        exclude group: 'androidx.appcompat';
        exclude group: 'androidx.annotation';
    }
}
app/libs/ocr-library.aar
Binary files differ
app/src/main/AndroidManifest.xml
@@ -63,6 +63,7 @@
        <activity
            android:name=".activity.NewCardActivity"
            android:exported="true"
            android:screenOrientation="portrait"
            android:launchMode="singleTop">
            <intent-filter>
                <action android:name="android.nfc.action.TAG_DISCOVERED" />
app/src/main/java/com/dayu/recharge/activity/BaseActivity.java
@@ -4,6 +4,8 @@
import android.os.Bundle;
import android.view.View;
import androidx.appcompat.app.AppCompatActivity;
import com.dayu.recharge.R;
import com.dayu.recharge.dao.AppDatabase;
import com.dayu.recharge.dao.BaseDaoSingleton;
@@ -13,7 +15,7 @@
 * Created by zuoxiao on 2018/12/20.
 */
public class BaseActivity extends Activity {
public class BaseActivity extends AppCompatActivity {
    public TitleBar titleBar = null;
    public  AppDatabase baseDao;
app/src/main/java/com/dayu/recharge/activity/MyActivity.java
@@ -124,11 +124,11 @@
        }
        List listData = new ArrayList();
        try {
//            if (isRechargeList) {
//                listData = SqLite_DB_Utile.getInit(MyActivity.this).selector(RechargeBean.class).where("date", ">=", beginTime).and("date", "<=", endTime).findAll();
//            } else {
//                listData = SqLite_DB_Utile.getInit(MyActivity.this).selector(UserCardBean.class).where("date", ">=", beginTime).and("date", "<=", endTime).findAll();
//            }
            if (isRechargeList) {
                listData = baseDao.rechargeDao().findByTime(beginTime, endTime);
            } else {
                listData = baseDao.userCardDao().findByTime(beginTime, endTime);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
@@ -139,10 +139,10 @@
            return;
        }
        if (isRechargeList) {
            title = new String[]{"村号", "用户名", "户号", "充值日期", "充值金额(元)", "剩余金额(元)"};
            title = new String[]{"设备序列号", "用户名", "身份证号", "充值日期", "充值金额(元)", "剩余金额(元)"};
            fileName = file.toString() + "/" + ExcelUtil.outRechargePathName;
        } else {
            title = new String[]{"村号", "用户名", "户号", "注册日期", "电话", "水权内水量", "亩数", "状态"};
            title = new String[]{"设备序列号", "用户名", "身份证号", "注册日期", "电话"};
            fileName = file.toString() + "/" + ExcelUtil.outUserPathName;
        }
        ExcelUtil.initExcel(fileName, title);
app/src/main/java/com/dayu/recharge/activity/NewCardActivity.java
@@ -1,5 +1,6 @@
package com.dayu.recharge.activity;
import android.Manifest;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.Intent;
@@ -8,6 +9,7 @@
import android.view.LayoutInflater;
import android.view.View;
import com.msd.ocr.idcard.LibraryInitOCR;
import com.dayu.recharge.MyApplication;
import com.dayu.recharge.card.UserCard;
import com.dayu.recharge.databinding.ActivityNewCardBinding;
@@ -26,6 +28,10 @@
import com.dayu.recharge.utils.SocketUtil;
import com.dayu.recharge.utils.ToastUtil;
import com.dayu.recharge.utils.WSHelper;
import com.permissionx.guolindev.PermissionX;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.Arrays;
@@ -37,7 +43,7 @@
 */
public class NewCardActivity extends BaseNfcActivity {
    public static final int SCAN_IDCARD_REQUEST = 1;
    UserCardBean userCardBean;
    Dialog dialog;
@@ -54,9 +60,19 @@
        setContentView(newCardBinding.getRoot());
        setData();
        initView();
        LibraryInitOCR.initOCR(NewCardActivity.this);
    }
    private void initView() {
        //身份证识别
        newCardBinding.newCardScanBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                rxPermission();
            }
        });
        newCardBinding.newCardRegistBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
@@ -97,6 +113,67 @@
        });
    }
    private void rxPermission() {
        PermissionX.init(NewCardActivity.this).permissions(Manifest.permission.CAMERA)
                .onExplainRequestReason((scope, deniedList) -> {
// val message = "PermissionX需要您同意以下权限才能正常使用"
                })
                .request((allGranted, grantedList, deniedList) -> {
                    if (allGranted) {//所有申请的权限都已通过
                        startCamera();
                    } else {//您拒绝了如下权限:$deniedList
                    }
                });
    }
    private void startCamera() {
        Bundle bundle = new Bundle();
        bundle.putBoolean("saveImage", false);
        bundle.putInt("requestCode", SCAN_IDCARD_REQUEST);
        bundle.putInt("type", 0); //0身份证, 1驾驶证
        LibraryInitOCR.startScan(NewCardActivity.this, bundle);
    }
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == RESULT_OK){
            switch (requestCode) {
                case SCAN_IDCARD_REQUEST:
                    String result = data.getStringExtra("OCRResult");
                    try {
                        JSONObject jo = new JSONObject(result);
//                    sb.append(String.format("正面 = %s\n", jo.opt("type")));
//                    sb.append(String.format("姓名 = %s\n", jo.opt("name")));
//                    sb.append(String.format("性别 = %s\n", jo.opt("sex")));
//                    sb.append(String.format("民族 = %s\n", jo.opt("folk")));
//                    sb.append(String.format("日期 = %s\n", jo.opt("birt")));
//                    sb.append(String.format("号码 = %s\n", jo.opt("num")));
//                    sb.append(String.format("住址 = %s\n", jo.opt("addr")));
//                    sb.append(String.format("签发机关 = %s\n", jo.opt("issue")));
//                    sb.append(String.format("有效期限 = %s\n", jo.opt("valid")));
//                    sb.append(String.format("整体照片 = %s\n", jo.opt("imgPath")));
//                    sb.append(String.format("头像路径 = %s\n", jo.opt("headPath")));
                        newCardBinding.newCardName.setText(jo.opt("name").toString());
                        newCardBinding.newCardId.setText(jo.opt("num").toString());
                        newCardBinding.newCardIdTip.setVisibility(View.VISIBLE);
                    } catch (JSONException e) {
                        throw new RuntimeException(e);
                    }
                    break;
            }
        }
    }
    private void setData() {
        try {
app/src/main/java/com/dayu/recharge/net/SocketNet.java
@@ -132,7 +132,7 @@
//            isConnected = false;
            Log.i("SocketActionListener", "socket连接失败");
            if (isTest) {
                ToastUtil.show(mContext, "连接失败,请检查网络");
//                ToastUtil.show(mContext, "连接失败,请检查网络");
            } else {
                if (myCallBack != null) {
                    myCallBack.onSocketError(-1, "socket连接失败,请检查网络");
app/src/main/java/com/dayu/recharge/utils/ExcelUtil.java
@@ -129,27 +129,19 @@
                    List<String> list = new ArrayList<>();
                    if (objList.get(j) instanceof RechargeBean) {
                        RechargeBean projectBean = (RechargeBean) objList.get(j);
//                        list.add(projectBean.getVillageNum());
//                        list.add(projectBean.getUserName());
//                        list.add(projectBean.getUserNum());
//                        list.add(DateUtil.dateToStamp(projectBean.getDate(), DateUtil.type2));
//                        list.add(projectBean.getMorny());
//                        list.add(projectBean.getBalance());
                        list.add(projectBean.getSerial());
                        list.add(projectBean.getUserName());
                        list.add(projectBean.getUserId());
                        list.add(DateUtil.dateToStamp(projectBean.getDate(), DateUtil.type2));
                        list.add(projectBean.getMorny());
                        list.add(projectBean.getBalance());
                    } else {
//                        UserCardBean userCardBean = (UserCardBean) objList.get(j);
//                        list.add(userCardBean.getVillageNum());
//                        list.add(userCardBean.getUserName());
//                        list.add(userCardBean.getUserNum());
//                        list.add(DateUtil.dateToStamp(userCardBean.getDate(), DateUtil.type2));
//                        list.add(userCardBean.getPhone());
//                        list.add(userCardBean.getWaterNum());
//                        list.add(userCardBean.getMushu());
//                        if (userCardBean.getSt() == 0) {
//                            list.add("空闲");
//                        } else {
//                            list.add("使用");
//                        }
                        UserCardBean userCardBean = (UserCardBean) objList.get(j);
                        list.add(userCardBean.getSerial());
                        list.add(userCardBean.getUserName());
                        list.add(userCardBean.getUserID());
                        list.add(DateUtil.dateToStamp(userCardBean.getDate(), DateUtil.type2));
                        list.add(userCardBean.getPhone());
                    }
                    for (int i = 0; i < list.size(); i++) {
app/src/main/res/layout/activity_new_card.xml
@@ -47,7 +47,8 @@
            <LinearLayout
                style="@style/newCardLL"
                android:layout_width="match_parent"
                android:layout_height="wrap_content">
                android:layout_height="wrap_content"
                android:orientation="horizontal">
                <TextView
                    android:layout_width="wrap_content"
@@ -57,13 +58,21 @@
                <EditText
                    android:id="@+id/newCard_name"
                    android:layout_width="match_parent"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:textSize="@dimen/new_card_size" />
                <ImageView
                    android:id="@+id/newCard_scanBtn"
                    android:layout_width="45dp"
                    android:layout_height="45dp"
                    android:visibility="gone"
                    android:padding="10dp"
                    android:src="@mipmap/icon_scan" />
            </LinearLayout>
            <LinearLayout
                style="@style/newCardLL"
                android:layout_width="match_parent"
@@ -79,21 +88,29 @@
                    android:id="@+id/newCard_id"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:inputType="numberSigned"
                    android:digits="0123456789Xx"
                     android:maxLength="18"
                    android:inputType="numberSigned"
                    android:maxLength="18"
                    android:textSize="@dimen/new_card_size" />
            </LinearLayout>
            <TextView
                android:id="@+id/newCard_idTip"
                style="@style/newCardLL"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="扫描后请核对身份信息无误"
                android:textColor="#FF4500"
                android:visibility="gone" />
            <LinearLayout
                style="@style/newCardLL"
                android:visibility="gone"
                android:layout_width="match_parent"
                android:layout_height="wrap_content">
                android:layout_height="wrap_content"
                android:visibility="gone">
                <TextView
                    android:layout_width="wrap_content"
@@ -130,10 +147,7 @@
                    android:layout_height="wrap_content"
                    android:inputType="number"
                    android:maxLength="11"
                    android:textSize="@dimen/new_card_size" />
            </LinearLayout>
app/src/main/res/layout/activity_test.xml
New file
@@ -0,0 +1,21 @@
<?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"
    android:orientation="vertical">
    <TextView
        android:id="@+id/testBtn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="测试" />
    <ImageView
        android:id="@+id/img"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:visibility="gone"
        android:scaleType="fitCenter" />
</LinearLayout>
app/src/main/res/mipmap-xhdpi/icon_scan.png
app/src/main/res/values/styles.xml
@@ -1,7 +1,7 @@
<resources>
    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
gradle.properties
@@ -1,21 +1,17 @@
# Project-wide Gradle settings.
# IDE (e.g. Android Studio) users:
# Gradle settings configured through the IDE *will override*
# any settings specified in this file.
# For more details on how to configure your build environment visit
## For more details on how to configure your build environment visit
# http://www.gradle.org/docs/current/userguide/build_environment.html
#
# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
# Default value: -Xmx1024m -XX:MaxPermSize=256m
# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
#
# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
# org.gradle.parallel=true
# AndroidX package structure to make it clearer which packages are bundled with the
# Android operating system, and which are packaged with your app's APK
# https://developer.android.com/topic/libraries/support-library/androidx-rn
#Thu Nov 16 14:03:50 CST 2023
android.enableJetifier=true
android.nonTransitiveRClass=true
android.useAndroidX=true
# Enables namespacing of each library's R class so that its R class includes only the
# resources declared in the library itself and none from the library's dependencies,
# thereby reducing the size of the R class for that library
android.nonTransitiveRClass=true
org.gradle.jvmargs=-Xmx2048m -Dfile.encoding\=UTF-8