From bdea369f5b35ece7c1cdf9b3cb42ad3bcdf1f686 Mon Sep 17 00:00:00 2001 From: wangh <123456> Date: Fri, 2 Aug 2024 15:00:09 +0800 Subject: [PATCH] =?UTF-8?q?xiugai=20=E8=AF=BB=E5=8F=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 1 + app/src/main/AndroidManifest.xml | 30 +++++-- app/src/main/assets/litepal.xml | 8 ++ .../example/beijing_daxing/CheckActivity.java | 62 +++++++++---- .../beijing_daxing/HomePageActivity.java | 74 +++++++++------- .../beijing_daxing/OffLineCheckActivity.java | 86 +++++++++++++++++++ .../beijing_daxing/base/BaseActivity.java | 4 +- .../beijing_daxing/base/MyApplication.java | 3 + .../beijing_daxing/been/RFIDLocation.java | 38 ++++++++ .../example/beijing_daxing/been/Stock.java | 4 +- .../broadcast/MyNetWorkReceiver.java | 82 ++++++++++++++++++ app/src/main/res/layout/activity_check.xml | 69 ++++++++++----- .../res/layout/activity_off_line_check.xml | 66 ++++++++++++++ .../main/res/layout/activity_store_check.xml | 2 +- app/src/main/res/layout/item_store_check.xml | 43 ++++------ app/src/main/res/values/themes.xml | 2 +- 16 files changed, 463 insertions(+), 111 deletions(-) create mode 100644 app/src/main/assets/litepal.xml create mode 100644 app/src/main/java/com/example/beijing_daxing/OffLineCheckActivity.java create mode 100644 app/src/main/java/com/example/beijing_daxing/been/RFIDLocation.java create mode 100644 app/src/main/java/com/example/beijing_daxing/broadcast/MyNetWorkReceiver.java create mode 100644 app/src/main/res/layout/activity_off_line_check.xml diff --git a/app/build.gradle b/app/build.gradle index 0e23d84..76ac3d3 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -52,4 +52,5 @@ dependencies { implementation 'com.google.code.gson:gson:2.10.1' // https://mvnrepository.com/artifact/com.contrarywind/Android-PickerView // implementation 'com.contrarywind:Android-PickerView:4.1.9' + implementation 'org.litepal.android:java:3.0.0' } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 123018e..87f5fae 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,6 +1,9 @@ + + + + + + + @@ -39,19 +51,21 @@ - - - - - - + + + + + + + + \ No newline at end of file diff --git a/app/src/main/assets/litepal.xml b/app/src/main/assets/litepal.xml new file mode 100644 index 0000000..b47d9e3 --- /dev/null +++ b/app/src/main/assets/litepal.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/example/beijing_daxing/CheckActivity.java b/app/src/main/java/com/example/beijing_daxing/CheckActivity.java index e4c623f..5991f43 100644 --- a/app/src/main/java/com/example/beijing_daxing/CheckActivity.java +++ b/app/src/main/java/com/example/beijing_daxing/CheckActivity.java @@ -1,9 +1,13 @@ package com.example.beijing_daxing; +import androidx.annotation.NonNull; import androidx.databinding.DataBindingUtil; import androidx.databinding.ObservableBoolean; +import android.annotation.SuppressLint; import android.os.Bundle; +import android.os.Handler; +import android.os.Message; import android.view.View; import android.widget.AdapterView; import android.widget.Toast; @@ -31,6 +35,7 @@ public class CheckActivity extends BaseActivity implements AdapterClickCall, InP private List list; private List selectList; private ObservableBoolean state; + private ObservableBoolean checkState; private InPutDialog inputDialog; @Override @@ -39,8 +44,10 @@ public class CheckActivity extends BaseActivity implements AdapterClickCall, InP binding = DataBindingUtil.setContentView(this, R.layout.activity_check); adapter = new CheckAdapter(this, this); state = new ObservableBoolean(); + checkState = new ObservableBoolean(); binding.setAdapter(adapter); binding.setState(state); + binding.setCheckState(checkState); selectList = Arrays.asList(getResources().getStringArray(R.array.check_item)); binding.checkItemSelect.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override @@ -55,14 +62,12 @@ public class CheckActivity extends BaseActivity implements AdapterClickCall, InP } }); initRequest(); - - inputDialog = new InPutDialog(this); inputDialog.setInPutDialogCall(this); } - + // 初始化数据 private void initRequest() { OkGo.post(url + "/xj/select").params("user", SharedPreferencesUtils.getstring("user", "")).execute(new MyRecultCall(dialog, this) { @Override @@ -86,7 +91,7 @@ public class CheckActivity extends BaseActivity implements AdapterClickCall, InP } private int subIndex = -1; - + // 扫描一个验证 @Override protected void sanRfid(List epcs) { var text = epcs.get(0); @@ -101,7 +106,7 @@ public class CheckActivity extends BaseActivity implements AdapterClickCall, InP subIndex = index; } - + //提交数据 public void check_submit(View view) { var type = list.stream().anyMatch(t -> t.getState().equals("未检")); @@ -109,20 +114,16 @@ public class CheckActivity extends BaseActivity implements AdapterClickCall, InP Toast.makeText(this, "未检完全部轮挡,不允许提交", Toast.LENGTH_SHORT).show(); return; } - OkGo.post(url + "/xj/submit") - .tag(this) - .params("json", gson.toJson(list)) - .params("user", SharedPreferencesUtils.getstring("user", "test-user")) - .execute(new MyRecultCall(dialog, this) { - @Override - public void onSuccess(Response response) { - super.onSuccess(response); - Toast.makeText(CheckActivity.this, "提交成功", Toast.LENGTH_SHORT).show(); - finish(); - } - }); + OkGo.post(url + "/xj/submit").tag(this).params("json", gson.toJson(list)).params("user", SharedPreferencesUtils.getstring("user", "test-user")).execute(new MyRecultCall(dialog, this) { + @Override + public void onSuccess(Response response) { + super.onSuccess(response); + Toast.makeText(CheckActivity.this, "提交成功", Toast.LENGTH_SHORT).show(); + finish(); + } + }); } - + // 一条数据保存 public void check_stock(View view) { if (subIndex == -1) return; var stock = list.get(subIndex); @@ -150,4 +151,29 @@ public class CheckActivity extends BaseActivity implements AdapterClickCall, InP inputDialog.dismiss(); adapter.notifyDataSetChanged(); } + // 持续扫描按钮 + public void offCheckRead(View view) { + var b = checkState.get(); + if (b) { + handler.removeCallbacks(runnable); + } else { + handler.postDelayed(runnable, 0); + } + checkState.set(!b); + } + + @SuppressLint("HandlerLeak") + private Handler handler = new Handler() { + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + } + }; + private Runnable runnable = new Runnable() { + @Override + public void run() { + sendBroadcast(broadcastIntent); + handler.postDelayed(runnable, 1000); + } + }; } \ No newline at end of file diff --git a/app/src/main/java/com/example/beijing_daxing/HomePageActivity.java b/app/src/main/java/com/example/beijing_daxing/HomePageActivity.java index c2f958d..7f39a03 100644 --- a/app/src/main/java/com/example/beijing_daxing/HomePageActivity.java +++ b/app/src/main/java/com/example/beijing_daxing/HomePageActivity.java @@ -4,6 +4,8 @@ import androidx.appcompat.app.AppCompatActivity; import androidx.databinding.DataBindingUtil; import android.content.Intent; +import android.content.IntentFilter; +import android.net.wifi.WifiManager; import android.os.Bundle; import android.view.KeyEvent; import android.view.View; @@ -11,35 +13,70 @@ import android.widget.AdapterView; import android.widget.Toast; import com.example.beijing_daxing.adapter.HomePageAdapter; -import com.example.beijing_daxing.base.BaseActivity; import com.example.beijing_daxing.base.MyApplication; +import com.example.beijing_daxing.broadcast.MyNetWorkReceiver; import com.example.beijing_daxing.databinding.ActivityHomePageBinding; import com.example.beijing_daxing.been.HomeIcon; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; -import com.handheld.UHFLonger.UHFLongerManager; import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class HomePageActivity extends AppCompatActivity { + private MyNetWorkReceiver myNetWorkReceiver; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ActivityHomePageBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_home_page); - List list = new ArrayList<>(); + initUi(binding); + /* myNetWorkReceiver=new MyNetWorkReceiver(); + IntentFilter intentFilter = new IntentFilter(); + intentFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION); + registerReceiver(myNetWorkReceiver, intentFilter);*/ + + } + + + private long exitTime = 0; + + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) { + if (keyCode == 4) { + if ((System.currentTimeMillis() - exitTime) > 2000) { + Toast.makeText(getApplicationContext(), "再按一次退出程序", Toast.LENGTH_SHORT).show(); + exitTime = System.currentTimeMillis(); + return true; + } else { + finish(); + } + } + return super.onKeyDown(keyCode, event); + + } + + @Override + protected void onDestroy() { + super.onDestroy(); + var uhfLongerManager = MyApplication.getUhfLongerManager(); + uhfLongerManager.close(); + MyApplication.uhfLongerManager = null; + // unregisterReceiver(myNetWorkReceiver); + } + private void initUi(ActivityHomePageBinding binding) { + List list = new ArrayList<>(); list.add(new HomeIcon(R.mipmap.home_in1, "轮挡入库", InActivity.class)); list.add(new HomeIcon(R.mipmap.home_out1, "轮挡领用出库", OutActivity.class)); list.add(new HomeIcon(R.mipmap.home_store_check, "仓库盘点", StoreCheckActivity.class)); - list.add(new HomeIcon(R.mipmap.home_check, "轮挡巡检", CheckActivity.class)); + list.add(new HomeIcon(R.mipmap.home_check, "轮挡检查", CheckActivity.class)); + list.add(new HomeIcon(R.mipmap.home_check, "轮挡巡检", OffLineCheckActivity.class)); list.add(new HomeIcon(R.mipmap.home_bf, "轮挡报废", BFActivity.class)); list.add(new HomeIcon(R.mipmap.home_in, "废品入库", FpInActivity.class)); list.add(new HomeIcon(R.mipmap.home_out, "废品出库", FpOutActivity.class)); var intent = getIntent(); - try { if (!intent.getStringExtra("user").equals("admin")) { ArrayList strings = new Gson().fromJson(intent.getStringExtra("json"), new TypeToken>() { @@ -69,31 +106,4 @@ public class HomePageActivity extends AppCompatActivity { } }); } - - - private long exitTime = 0; - - @Override - public boolean onKeyDown(int keyCode, KeyEvent event) { - if (keyCode == 4) { - if ((System.currentTimeMillis() - exitTime) > 2000) { - Toast.makeText(getApplicationContext(), "再按一次退出程序", Toast.LENGTH_SHORT).show(); - exitTime = System.currentTimeMillis(); - return true; - } else { - finish(); - } - } - return super.onKeyDown(keyCode, event); - - } - - @Override - protected void onDestroy() { - super.onDestroy(); - var uhfLongerManager = MyApplication.getUhfLongerManager(); - uhfLongerManager.close(); - MyApplication.uhfLongerManager = null; - - } } \ No newline at end of file diff --git a/app/src/main/java/com/example/beijing_daxing/OffLineCheckActivity.java b/app/src/main/java/com/example/beijing_daxing/OffLineCheckActivity.java new file mode 100644 index 0000000..15e7dc9 --- /dev/null +++ b/app/src/main/java/com/example/beijing_daxing/OffLineCheckActivity.java @@ -0,0 +1,86 @@ +package com.example.beijing_daxing; + +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; +import androidx.databinding.DataBindingUtil; +import androidx.databinding.ObservableBoolean; +import androidx.databinding.ViewDataBinding; + +import android.annotation.SuppressLint; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.view.View; +import android.widget.Toast; + +import com.example.beijing_daxing.adapter.StoreCheckAdapter; +import com.example.beijing_daxing.base.BaseActivity; +import com.example.beijing_daxing.been.RFIDLocation; +import com.example.beijing_daxing.been.Stock; +import com.example.beijing_daxing.databinding.ActivityOffLineCheckBinding; + +import org.litepal.LitePal; + +import java.util.ArrayList; +import java.util.List; + +public class OffLineCheckActivity extends BaseActivity { + private StoreCheckAdapter checkAdapter; + private ObservableBoolean checkState; + private List list; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + ActivityOffLineCheckBinding binding; + binding = DataBindingUtil.setContentView(this, R.layout.activity_off_line_check); + checkState = new ObservableBoolean(); + binding.setCheckState(checkState); + /* var all = LitePal.findAll(RFIDLocation.class); + if (all == null || all.isEmpty()) { + Toast.makeText(this, "", Toast.LENGTH_SHORT).show(); + return; + }*/ + list = new ArrayList<>(); + // all.forEach(t -> { + // Stock stock = new Stock(); + // stock.setLocationCode(t.getLocationCode()); + // stock.setEpcCode(t.getEpcCode()); + // list.add(stock); + // }); + checkAdapter=new StoreCheckAdapter(this); + checkAdapter.setList(list); + checkAdapter = new StoreCheckAdapter(this); + binding.setAdapter(checkAdapter); + } + + @Override + protected void sanRfid(List epcs) { + + } + + public void offCheckRead(View view) { + var b = checkState.get(); + if (b) { + handler.removeCallbacks(runnable); + } else { + handler.postDelayed(runnable, 0); + } + checkState.set(!b); + } + + @SuppressLint("HandlerLeak") + private Handler handler = new Handler() { + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + } + }; + private Runnable runnable = new Runnable() { + @Override + public void run() { + sendBroadcast(broadcastIntent); + handler.postDelayed(runnable, 1000); + } + }; +} \ No newline at end of file diff --git a/app/src/main/java/com/example/beijing_daxing/base/BaseActivity.java b/app/src/main/java/com/example/beijing_daxing/base/BaseActivity.java index a692079..c743af1 100644 --- a/app/src/main/java/com/example/beijing_daxing/base/BaseActivity.java +++ b/app/src/main/java/com/example/beijing_daxing/base/BaseActivity.java @@ -25,8 +25,8 @@ import java.util.List; import okhttp3.MediaType; public abstract class BaseActivity extends AppCompatActivity { - public static String url = "http://192.168.0.102:90/api"; - // public static String url = "http://172.20.10.2:90/api"; + public static String url = "http://192.168.0.102:8090/api"; + // public static String url = "http://175.27.215.92:8090/api"; public ProgressDialog dialog; public Gson gson; public MediaType JSON = MediaType.parse("application/json; charset=utf-8"); diff --git a/app/src/main/java/com/example/beijing_daxing/base/MyApplication.java b/app/src/main/java/com/example/beijing_daxing/base/MyApplication.java index 68fcf72..4514e19 100644 --- a/app/src/main/java/com/example/beijing_daxing/base/MyApplication.java +++ b/app/src/main/java/com/example/beijing_daxing/base/MyApplication.java @@ -12,6 +12,8 @@ import com.lzy.okgo.cookie.store.MemoryCookieStore; import com.lzy.okgo.https.HttpsUtils; import com.lzy.okgo.interceptor.HttpLoggingInterceptor; +import org.litepal.LitePal; + import java.util.concurrent.TimeUnit; import java.util.logging.Level; @@ -31,6 +33,7 @@ public class MyApplication extends Application { public void onCreate() { super.onCreate(); application = this; + LitePal.initialize(this); SharedPreferencesUtils.init(getApplicationContext(), "myapp"); okGoBase(); getUhfLongerManager(); diff --git a/app/src/main/java/com/example/beijing_daxing/been/RFIDLocation.java b/app/src/main/java/com/example/beijing_daxing/been/RFIDLocation.java new file mode 100644 index 0000000..48ec761 --- /dev/null +++ b/app/src/main/java/com/example/beijing_daxing/been/RFIDLocation.java @@ -0,0 +1,38 @@ +package com.example.beijing_daxing.been; + +import org.litepal.crud.LitePalSupport; + +/** + * @author wanghao + * @date 2024/5/13 16:40 + */ +public class RFIDLocation extends LitePalSupport { + + private int id; + private String epcCode; + private String locationCode; + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getEpcCode() { + return epcCode; + } + + public void setEpcCode(String epcCode) { + this.epcCode = epcCode; + } + + public String getLocationCode() { + return locationCode; + } + + public void setLocationCode(String locationCode) { + this.locationCode = locationCode; + } +} diff --git a/app/src/main/java/com/example/beijing_daxing/been/Stock.java b/app/src/main/java/com/example/beijing_daxing/been/Stock.java index 1648b21..5a84363 100644 --- a/app/src/main/java/com/example/beijing_daxing/been/Stock.java +++ b/app/src/main/java/com/example/beijing_daxing/been/Stock.java @@ -2,13 +2,15 @@ package com.example.beijing_daxing.been; import androidx.databinding.BaseObservable; +import org.litepal.crud.LitePalSupport; + import java.util.Objects; /** * @author wanghao * @date 2024/1/19 13:45 */ -public class Stock extends BaseObservable { +public class Stock extends BaseObservable { private int index; private String epcCode; private String locationCode; diff --git a/app/src/main/java/com/example/beijing_daxing/broadcast/MyNetWorkReceiver.java b/app/src/main/java/com/example/beijing_daxing/broadcast/MyNetWorkReceiver.java new file mode 100644 index 0000000..d9f4d6f --- /dev/null +++ b/app/src/main/java/com/example/beijing_daxing/broadcast/MyNetWorkReceiver.java @@ -0,0 +1,82 @@ +package com.example.beijing_daxing.broadcast; + +import static com.example.beijing_daxing.base.BaseActivity.url; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.net.ConnectivityManager; +import android.net.NetworkInfo; +import android.net.wifi.WifiInfo; +import android.net.wifi.WifiManager; +import android.util.Log; +import android.widget.Toast; + +import com.example.beijing_daxing.base.MyRecultCall; +import com.example.beijing_daxing.base.MyResult; +import com.example.beijing_daxing.been.RFIDLocation; +import com.example.beijing_daxing.been.Stock; +import com.example.beijing_daxing.uitls.SharedPreferencesUtils; +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; +import com.lzy.okgo.OkGo; +import com.lzy.okgo.callback.StringCallback; +import com.lzy.okgo.model.Response; + +import org.litepal.LitePal; + +import java.util.List; + +public class MyNetWorkReceiver extends BroadcastReceiver { + private String wifiName = ""; + private Gson gson; + + public MyNetWorkReceiver() { + gson=new Gson(); + } + + @Override + public void onReceive(Context context, Intent intent) { + if (WifiManager.NETWORK_STATE_CHANGED_ACTION.equals(intent.getAction())) { + NetworkInfo networkInfo = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO); + + Log.e("TAG", "正在连接:" + networkInfo.isConnectedOrConnecting()); + Log.e("TAG", "已连接:" + networkInfo.isConnected()); + if (networkInfo != null && networkInfo.isConnected()) { + WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); + WifiInfo wifiInfo = wifiManager.getConnectionInfo(); + String ssid = wifiInfo.getSSID(); + if (ssid != null) { + var newWifiNameState = ssid.equals("\"wang\""); + if (newWifiNameState && !wifiName.equals(ssid)) { + wifiName = ssid; + // 执行你的业务逻辑 + Log.e("TAG", "onReceive:连接成功"); + OkGo.post(url + "/xj/selectLite") + .params("user", SharedPreferencesUtils.getstring("user", "")) + .execute(new StringCallback() { + @Override + public void onSuccess(Response response) { + var body = response.body(); + if (!body.equals("null")){ + List list = gson.fromJson(body, new TypeToken>() {}.getType()); + if (list!=null &&!list.isEmpty()){ + LitePal.deleteAll(RFIDLocation.class); + LitePal.saveAll(list); + } + } + } + }); + + + return; + } + + } + } + Log.e("TAG", "onReceive:连接断开"); + wifiName = ""; + } + + } +} \ No newline at end of file diff --git a/app/src/main/res/layout/activity_check.xml b/app/src/main/res/layout/activity_check.xml index 12d86e8..8e88bc1 100644 --- a/app/src/main/res/layout/activity_check.xml +++ b/app/src/main/res/layout/activity_check.xml @@ -4,6 +4,7 @@ xmlns:tools="http://schemas.android.com/tools"> + @@ -12,32 +13,38 @@ name="state" type="androidx.databinding.ObservableBoolean" /> - + + + + android:orientation="vertical" + tools:context=".CheckActivity"> + + android:layout_marginTop="10dp" + android:text="未巡检轮挡情况" /> + + android:padding="10dp" + app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" /> + + android:background="@color/white"> + android:textAlignment="center" /> + + android:focusableInTouchMode="true" + android:visibility='@{state ? View.GONE :View.VISIBLE }'> + android:minHeight="48dp" />