diff --git a/app/src/main/java/com/bonus/canteen/activity/MainActivity.java b/app/src/main/java/com/bonus/canteen/activity/MainActivity.java index ad12665..6a61508 100644 --- a/app/src/main/java/com/bonus/canteen/activity/MainActivity.java +++ b/app/src/main/java/com/bonus/canteen/activity/MainActivity.java @@ -72,6 +72,7 @@ import com.bonus.canteen.db.entity.base.DeviceInfo; import com.bonus.canteen.entity.CanteenBean; import com.bonus.canteen.entity.DishBean; import com.bonus.canteen.entity.KeepSampleRecordBean; +import com.bonus.canteen.entity.KitchenSampleDishesRecord; import com.bonus.canteen.entity.MealTimeBean; import com.bonus.canteen.entity.PhotoResponse; import com.bonus.canteen.entity.StallBean; @@ -79,6 +80,7 @@ import com.bonus.canteen.print.TestFunction; import com.bonus.canteen.receiver.ShutdownReceiver; import com.bonus.canteen.utils.DateTimeHelper; import com.bonus.canteen.utils.OkHttpService; +import com.bonus.canteen.utils.StringHelper; import com.bonus.canteen.utils.ThreadPoolManager; import com.bonus.canteen.utils.WorkConfig; import com.caysn.autoreplyprint.AutoReplyPrint; @@ -270,6 +272,11 @@ public class MainActivity extends AppCompatActivity { XToastUtils.info("请先选择留样菜品!"); return; } + boolean isRecord = !StringHelper.isEmptyAndNull(currentDishBean.getSampleSaveTime()); + if (isRecord) { + XToastUtils.info("当前菜品已经留样,不能重复留样!"); + return; + } isUpload = true; showTipDialog("正在留样,请稍候..."); takePicture(); @@ -293,9 +300,74 @@ public class MainActivity extends AppCompatActivity { }); findViewById(R.id.refresh).setOnClickListener(view -> { isInitData = false; + currentDishBean = new DishBean(); XToastUtils.info("正在刷新,请稍候..."); initStallTab(canteenList.get(0).getCanteenId()); }); + findViewById(R.id.manualPrinting).setOnClickListener(view -> { + if(currentDishBean == null || currentDishBean.getDishesId() == null || currentDishBean.getDishesId().isEmpty()) { + XToastUtils.info("请先选择留样菜品!"); + return; + } + boolean isRecord = StringHelper.isEmptyAndNull(currentDishBean.getSampleSaveTime()); + if (isRecord) { + XToastUtils.info("请先选择已经留样的菜品!"); + } + ThreadPoolManager.getExecutor().execute(()->{ + //获取当前菜品的留样记录 + String url = WorkConfig.getBaseUrl() + "/kitchen_sample_dishes_record/list?pageNum=" + 1 + "&pageSize=" + 10; + Log.e(TAG, "loadMoreData url: " + url); + JSONObject json = new JSONObject(); + json.put("searchType", 3); + mealTimeBeanList.stream() + .filter(mealTimeBean -> currentDishBean.getMealtimeType().equals(mealTimeBean.getMealtimeType())) + .filter(mealTimeBean -> DateTimeHelper.isInTimeRange(mealTimeBean.getStartTime(), mealTimeBean.getEndTime())) + .findFirst() + .ifPresent(mealTimeBean -> json.put("mealtimeType", mealTimeBean.getMealtimeType())); + json.put("canteenId", ((CanteenBean) canteenSpinner.getSelectedItem()).getCanteenId()); + json.put("stallId", ((StallBean) stallSpinner.getSelectedItem()).getStallId()); + json.put("dishesId", currentDishBean.getDishesId()); + json.put("startDateTime", DateTimeHelper.getNowDate() + " 00:00:00"); + json.put("endDateTime", DateTimeHelper.getNowDate() + " 23:59:59"); + String jsonString = json.toString(); + Log.e(TAG, "loadMoreData jsonString: " + jsonString); + MediaType mediaType = MediaType.parse(AppConstants.MEDIA_TYPE); + RequestBody body = RequestBody.create(mediaType, jsonString); + Request request = new Request.Builder().url(url).post(body).build(); + try { + String result = service.httpPost(url, body, this, request); + Log.e(TAG, "loadMoreData result: " + result); + if (!ObjectUtil.isEmpty(result)) { + JSONObject jsonObject = JSONObject.parseObject(result); + if (jsonObject.containsKey("rows")) { + List moreRecords = new Gson().fromJson( + jsonObject.getString("rows"), + new TypeToken>() { + }.getType() + ); + String userName = AppDatabase.getDatabase(this).loginInfoDao().getLoginInfoOne().getUserName(); + KeepSampleRecordBean keepSampleRecordBean = new KeepSampleRecordBean(); + keepSampleRecordBean.setDishName(moreRecords.get(0).getDishesName()); + keepSampleRecordBean.setStallName(moreRecords.get(0).getStallName()); + keepSampleRecordBean.setMealTimeName(mealTimeBeanList.stream().filter(mealTimeBean -> + mealTimeBean.getMealtimeType().equals(json.get("mealtimeType").toString())) + .map(MealTimeBean::getMealtimeName) + .findFirst() + .orElse("未知时间")); + keepSampleRecordBean.setWeight(String.valueOf(moreRecords.get(0).getSampleWeight())); + keepSampleRecordBean.setSampleHolder(userName); + keepSampleRecordBean.setPrintingTime(DateTimeHelper.getTime()); + keepSampleRecordBean.setId(moreRecords.get(0).getDishesId()); + keepSampleRecordBean.setValidityPeriod("48"); + toPrint(keepSampleRecordBean); + } + } + } catch (Exception e) { + Log.e(TAG, "Error loading more data: " + e.getMessage()); + } + }); + + }); } private void initScale() { @@ -396,15 +468,15 @@ public class MainActivity extends AppCompatActivity { if (unit.equalsIgnoreCase("kg")) { decimal = decimal.multiply(new BigDecimal(1000)).setScale(0, RoundingMode.HALF_UP); } - Log.e("MainActivity", "秤数据解析结果: " + decimal + " " + "g"); +// Log.e("MainActivity", "秤数据解析结果: " + decimal + " " + "g"); tvWeight.setText(String.format(Locale.getDefault(), "%s", decimal)); if (decimal.compareTo(BigDecimal.valueOf(124)) > 0) { - // 如果重量大于100,表示秤上有物品 + // 如果重量大于124,表示秤上有物品 keepASample.setEnabled(true); keepASample.setBackground(getDrawable(R.drawable.title_bg)); keepASample.setText(getString(R.string.keepASample)); } else { - // 如果重量小于等于0,表示秤上没有物品 + // 如果重量小于等于124,表示秤上没有物品 keepASample.setEnabled(false); keepASample.setBackground(getDrawable(R.drawable.btn_border_bg_10_dark_gray)); keepASample.setText(getString(R.string.theWeightDoesNotMeetTheStandard)); @@ -680,19 +752,32 @@ public class MainActivity extends AppCompatActivity { keepSampleRecordBean.setValidityPeriod("48"); initDishData(stallId); toPrint(keepSampleRecordBean); - dialog.dismiss(); + if (dialog != null && dialog.isShowing()) { + dialog.dismiss(); + } currentDishBean = new DishBean(); // 清空当前菜品信息 ThreadPoolManager.getExecutor().execute(this::readScale); }); } else { isUpload = false; + ThreadPoolManager.getExecutor().execute(this::readScale); - runOnUiThread(() -> XToastUtils.error("留样失败,请重试!")); + runOnUiThread(() -> { + XToastUtils.error("留样失败,请重试!"); + if (dialog != null && dialog.isShowing()) { + dialog.dismiss(); + } + }); } } else { isUpload = false; ThreadPoolManager.getExecutor().execute(this::readScale); - runOnUiThread(() -> XToastUtils.error("留样失败,请重试!")); + runOnUiThread(() -> { + XToastUtils.error("留样失败,请重试!"); + if (dialog != null && dialog.isShowing()) { + dialog.dismiss(); + } + }); } }); } @@ -702,11 +787,16 @@ public class MainActivity extends AppCompatActivity { * 使用AutoReplyPrint打印留样信息 */ private void toPrint(KeepSampleRecordBean keepSampleRecordBean) { - new Thread(() -> { + ThreadPoolManager.getExecutor().execute(()->{ try { + // 判断端口是否已经打开,若已打开则先关闭 + if(h != Pointer.NULL && AutoReplyPrint.INSTANCE.CP_Port_IsOpened(h)){ + Log.i(TAG,"usb端口已经打开"); + AutoReplyPrint.INSTANCE.CP_Port_Close(h); + } + // 打开端口,若失败则重试打开 h = AutoReplyPrint.INSTANCE.CP_Port_OpenUsb("VID:0x4B43,PID:0x3538", 1); if (h == Pointer.NULL) { -// runOnUiThread(() -> XToastUtils.warning("打印机连接失败,尝试重新连接")); h = AutoReplyPrint.INSTANCE.CP_Port_OpenUsb("VID:0x4B43,PID:0x3538", 1); if (h == Pointer.NULL) { Log.e(TAG, "打印机连接失败"); @@ -714,15 +804,18 @@ public class MainActivity extends AppCompatActivity { return; } } + // 打印留样信息 TestFunction fun = new TestFunction(); fun.ctx = activity; Method m = TestFunction.class.getDeclaredMethod("ToPrint", Pointer.class, KeepSampleRecordBean.class); m.setAccessible(true); // 允许访问私有方法 m.invoke(fun, h, keepSampleRecordBean); - } catch (Throwable tr) { - tr.printStackTrace(); + }catch (Exception e){ + Log.e(TAG, "打印失败Exception: " + e.getMessage()); + } catch(Throwable tr) { + Log.e(TAG, "打印失败Throwable: " + tr.getMessage()); } - }).start(); + }); } /*---------------------------启动相机及配置等--------------------------------*/ @@ -739,10 +832,14 @@ public class MainActivity extends AppCompatActivity { // 设置自动对焦 captureBuilder.set(CaptureRequest.CONTROL_AF_MODE, CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE); - + // 设置光学防抖 + captureBuilder.set(CaptureRequest.LENS_OPTICAL_STABILIZATION_MODE, + CaptureRequest.LENS_OPTICAL_STABILIZATION_MODE_ON); + // 设置 JPEG 质量为最高 + captureBuilder.set(CaptureRequest.JPEG_QUALITY, (byte) 100); // 设置方向 int rotation = getWindowManager().getDefaultDisplay().getRotation(); - captureBuilder.set(CaptureRequest.JPEG_ORIENTATION, getOrientation(rotation)); + captureBuilder.set(CaptureRequest.JPEG_ORIENTATION, getOrientation(rotation) - 90); // 停止预览,执行拍照 captureSession.stopRepeating(); @@ -814,12 +911,15 @@ public class MainActivity extends AppCompatActivity { CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP); previewSize = chooseOptimalSize(map.getOutputSizes(SurfaceTexture.class), mSurfaceView.getWidth(), mSurfaceView.getHeight()); + // 选择最佳拍照尺寸(使用最大可用尺寸) + Size[] jpegSizes = map.getOutputSizes(ImageFormat.JPEG); + Size largestJpegSize = Collections.max(Arrays.asList(jpegSizes), new CompareSizesByArea()); // 配置Surface mSurfaceView.getHolder().setFixedSize(previewSize.getWidth(), previewSize.getHeight()); // 创建ImageReader用于拍照 - imageReader = ImageReader.newInstance(previewSize.getWidth(), previewSize.getHeight(), + imageReader = ImageReader.newInstance(largestJpegSize.getWidth(), largestJpegSize.getHeight(), ImageFormat.JPEG, 2); imageReader.setOnImageAvailableListener(imageListener, backgroundHandler); @@ -1127,6 +1227,10 @@ public class MainActivity extends AppCompatActivity { if (shutdownReceiver != null) { unregisterReceiver(shutdownReceiver); } + if (dialog != null){ + dialog.dismiss(); + dialog = null; + } mHandler.removeCallbacksAndMessages(null); // 清除所有的回调和消息 if (timeShow != null) { timeShow.setText(null); diff --git a/app/src/main/java/com/bonus/canteen/activity/SplashActivity.java b/app/src/main/java/com/bonus/canteen/activity/SplashActivity.java index d06f23e..790021c 100644 --- a/app/src/main/java/com/bonus/canteen/activity/SplashActivity.java +++ b/app/src/main/java/com/bonus/canteen/activity/SplashActivity.java @@ -19,14 +19,10 @@ package com.bonus.canteen.activity; import android.view.KeyEvent; -import com.bonus.canteen.db.AppDatabase; -import com.bonus.canteen.db.entity.base.ParamSettingInfo; import com.bonus.canteen.upgrade.UpdateDown; -import com.bonus.canteen.utils.WorkConfig; import com.xuexiang.xui.utils.KeyboardUtils; import com.xuexiang.xui.widget.activity.BaseSplashActivity; import com.xuexiang.xutil.app.ActivityUtils; -import com.xuexiang.xutil.net.NetworkUtils; import org.easydarwin.easypusher.R; @@ -64,23 +60,24 @@ public class SplashActivity extends BaseSplashActivity implements CancelAdapt { } private void loginOrGoMainPage() { - if (NetworkUtils.isNetworkAvailable()) { - new Thread(() -> { - ParamSettingInfo paramSettingInfo = AppDatabase.getDatabase(this).parameterInfoDao().getOneInfo(); - String url = WorkConfig.getBaseUrl(); - if (paramSettingInfo != null){ - url = paramSettingInfo.getIpAddress() + "/smart-canteen"; - } - boolean isLatestVersion = down.checkUpdate(url); - runOnUiThread(() -> { - if (!isLatestVersion) { - navigateToNextPage(); - } - }); - }).start(); - } else { - navigateToNextPage(); - } + navigateToNextPage(); +// if (NetworkUtils.isNetworkAvailable()) { +// ThreadPoolManager.getExecutor().execute(()->{ +// ParamSettingInfo paramSettingInfo = AppDatabase.getDatabase(this).parameterInfoDao().getOneInfo(); +// String url = WorkConfig.getBaseUrl(); +// if (paramSettingInfo != null){ +// url = paramSettingInfo.getIpAddress() + "/smart-canteen"; +// } +// boolean isLatestVersion = down.checkUpdate(url); +// runOnUiThread(() -> { +// if (!isLatestVersion) { +// navigateToNextPage(); +// } +// }); +// }); +// } else { +// navigateToNextPage(); +// } } private void navigateToNextPage() { ActivityUtils.startActivity(LoginActivity.class); diff --git a/app/src/main/java/com/bonus/canteen/adapter/DishAdapter.java b/app/src/main/java/com/bonus/canteen/adapter/DishAdapter.java index 4f646d8..aca3ad1 100644 --- a/app/src/main/java/com/bonus/canteen/adapter/DishAdapter.java +++ b/app/src/main/java/com/bonus/canteen/adapter/DishAdapter.java @@ -30,7 +30,6 @@ import android.widget.TextView; import com.bonus.canteen.activity.MainActivity; import com.bonus.canteen.entity.DishBean; import com.bonus.canteen.utils.StringHelper; -import com.xuexiang.xui.utils.XToastUtils; import org.easydarwin.easypusher.R; @@ -83,7 +82,7 @@ public class DishAdapter extends BaseAdapter { DishBean bean = list.get(i); Log.e("DishAdapter", "getView: " + bean); // 2. 移除旧的点击监听器,避免复用残留 - holder.dishName.setText(bean.getDishesName()); + holder.dishName.setText(bean.getDishesName().length() > 5 ? bean.getDishesName().substring(0, 5) + "..." : bean.getDishesName()); boolean isSampled = StringHelper.isEmptyAndNull(bean.getSampleSaveTime()); holder.isRecord.setText(isSampled ? "未留样" : "已留样"); holder.dishItemLinearLayout.setBackgroundResource( @@ -93,24 +92,22 @@ public class DishAdapter extends BaseAdapter { holder.dishItemLinearLayout.setOnClickListener(v -> { // 通过 position 参数直接获取数据 DishBean clickedBean = list.get(i); - boolean isRecord = !StringHelper.isEmptyAndNull(bean.getSampleSaveTime()); - Log.e("点击了", "ThreadUpdatesUI clickedBean" + clickedBean); - if (isRecord) { - XToastUtils.info("当前菜品已留样,无需重复留样!"); - }else{ - //对其他未留样菜品设置底色 - for (DishBean dish : list) { - if (StringHelper.isEmptyAndNull(dish.getSampleSaveTime())) { - LinearLayout itemLayout = (LinearLayout) viewGroup.getChildAt(list.indexOf(dish)); - if (itemLayout != null) { - itemLayout.setBackgroundResource(R.drawable.btn_border_bg_10_dark_blue); - } + //对其他未留样菜品设置底色 + for (DishBean dish : list) { + if (StringHelper.isEmptyAndNull(dish.getSampleSaveTime())) { + LinearLayout itemLayout = (LinearLayout) viewGroup.getChildAt(list.indexOf(dish)); + if (itemLayout != null) { + itemLayout.setBackgroundResource(R.drawable.btn_border_bg_10_dark_blue); } + }else{ + LinearLayout itemLayout = (LinearLayout) viewGroup.getChildAt(list.indexOf(dish)); + if (itemLayout != null) + itemLayout.setBackgroundResource(R.drawable.btn_border_bg_10_dark_green_1); } - //设置当前选择菜品的底色 - finalHolder.dishItemLinearLayout.setBackgroundResource(R.drawable.btn_border_bg_5_fe6d4b); - mainActivity.updateDishDate(clickedBean); } + //设置当前选择菜品的底色 + finalHolder.dishItemLinearLayout.setBackgroundResource(R.drawable.btn_border_bg_5_fe6d4b); + mainActivity.updateDishDate(clickedBean); }); return convertView; } diff --git a/app/src/main/java/com/bonus/canteen/utils/DateTimeHelper.java b/app/src/main/java/com/bonus/canteen/utils/DateTimeHelper.java index 0e4dd04..cd57e98 100644 --- a/app/src/main/java/com/bonus/canteen/utils/DateTimeHelper.java +++ b/app/src/main/java/com/bonus/canteen/utils/DateTimeHelper.java @@ -36,11 +36,11 @@ public class DateTimeHelper { return format(new Date(),"HH:mm:ss"); } public static String getTime(){ - return format(new Date(),"YYYY-MM-dd HH:mm:ss"); + return format(new Date(),"yyyy-MM-dd HH:mm:ss"); } public static String getNowDate(){ - return format(new Date(),"YYYY-MM-dd"); + return format(new Date(),"yyyy-MM-dd"); } public static String getCurrentTimeStr(){ return format(new Date(),"yyyyMMddHHmmssSSS"); diff --git a/app/src/main/java/com/bonus/canteen/utils/WorkConfig.java b/app/src/main/java/com/bonus/canteen/utils/WorkConfig.java index f427de6..315d368 100644 --- a/app/src/main/java/com/bonus/canteen/utils/WorkConfig.java +++ b/app/src/main/java/com/bonus/canteen/utils/WorkConfig.java @@ -24,14 +24,17 @@ public class WorkConfig { private WorkConfig() { throw new UnsupportedOperationException("Cannot instantiate utility class"); } - //本地 + //线上 protected static String baseUrl = "http://192.168.20.234:48390/smart-canteen"; protected static String prefixesUrl = "http://192.168.20.234:48390"; -// protected static String baseUrl = "http://192.168.0.244:48380/smart-canteen"; -// protected static String prefixesUrl = "http://192.168.0.244:48380"; protected static String fileUrl = "http://192.168.20.234:9090/lnyst/"; - protected static String updateUrl = "https://www.baidu.com"; protected static String serverUri = "tcp://192.168.20.234:1883"; +// protected static String baseUrl = "http://192.168.20.242:48380/smart-canteen"; +// protected static String prefixesUrl = "http://192.168.20.242:48380"; +// protected static String fileUrl = "http://192.168.20.242:9090/lnyst/"; +// protected static String serverUri = "tcp://192.168.20.242:1883"; + + protected static String updateUrl = "https://www.baidu.com"; protected static String MqttUserName = "guest"; protected static String MqttPassWord = "Bonus@Rabbitmq123!"; protected static String APP_ID = "52XE2dQBtdmMsfDMvyKmPCCPyFsc4jvo8TKvAdaYfr28"; diff --git a/app/src/main/res/layout/activity_dish_item.xml b/app/src/main/res/layout/activity_dish_item.xml index cc85622..0875cb8 100644 --- a/app/src/main/res/layout/activity_dish_item.xml +++ b/app/src/main/res/layout/activity_dish_item.xml @@ -21,18 +21,18 @@ android:id="@+id/dish_item_linear_layout" android:background="@drawable/btn_border_bg_10_dark_blue" android:orientation="vertical" - android:padding="20dp"> + android:padding="10dp"> + android:textSize="20sp" /> + android:text="Bonus$2026" /> +