From 87ee1333de972e1ade8ccc9decf324e2fcb48382 Mon Sep 17 00:00:00 2001 From: jjLv <1981429112@qq.com> Date: Mon, 9 Jun 2025 13:15:14 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B7=B2=E4=BF=AE=E6=94=B9=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../activity/BusinessDataActivity.java | 2 +- .../activity/InitializationActivity.java | 2 +- .../canteen/activity/OperationActivity.java | 61 ++-- .../activity/order/MachineSaleActivity.java | 18 +- .../activity/setting/MealTimeActivity.java | 5 + .../activity/setting/NativeInfoActivity.java | 3 +- .../setting/ParamSettingsActivity.java | 16 +- .../activity/setting/SettingsActivity.java | 10 +- .../activity/setting/UserInfoActivity.java | 15 +- .../canteen/adapter/order/OrderAdapter.java | 269 ++++++++++-------- .../bonus/canteen/constants/AppConstants.java | 92 ++++-- .../db/dao/base/BusinessDataInfoDao.java | 6 +- .../db/dao/base/OfflineOrderInfoDao.java | 12 +- .../db/entity/base/OfflineOrderInfo.java | 11 +- .../com/bonus/canteen/upgrade/UpdateDown.java | 3 +- .../com/bonus/canteen/utils/WorkConfig.java | 3 + .../utils/rabbitmq/RabbitMqMqttHelper.java | 16 +- .../res/layout/machine_sale_order_main.xml | 12 +- 18 files changed, 342 insertions(+), 214 deletions(-) diff --git a/app/src/main/java/com/bonus/canteen/activity/BusinessDataActivity.java b/app/src/main/java/com/bonus/canteen/activity/BusinessDataActivity.java index 09c3350..4ddbe97 100644 --- a/app/src/main/java/com/bonus/canteen/activity/BusinessDataActivity.java +++ b/app/src/main/java/com/bonus/canteen/activity/BusinessDataActivity.java @@ -21,7 +21,7 @@ import org.easydarwin.easypusher.R; import org.easydarwin.easypusher.databinding.CanteenBusinessDataBinding; public class BusinessDataActivity extends BaseActivity { - public OkHttpService service = new OkHttpService(); + public final OkHttpService service = new OkHttpService(); @Override protected CanteenBusinessDataBinding viewBindingInflate(LayoutInflater inflater) { diff --git a/app/src/main/java/com/bonus/canteen/activity/InitializationActivity.java b/app/src/main/java/com/bonus/canteen/activity/InitializationActivity.java index 02ed812..5434d4c 100644 --- a/app/src/main/java/com/bonus/canteen/activity/InitializationActivity.java +++ b/app/src/main/java/com/bonus/canteen/activity/InitializationActivity.java @@ -418,7 +418,7 @@ public class InitializationActivity extends BaseActivity orderList = new ArrayList<>(); List orderDetailsInfoList = new ArrayList<>(); + //生成订单号 String orderId = generateOrderId(); - BigDecimal num = getOrderData(nuClearMode, orderList, orderId, orderDetailsInfoList); + //获取订单数据、存储订单数据 + BigDecimal num = getOrderData(nuClearMode, orderList, orderId, orderDetailsInfoList, deviceInfo); try { JSONObject json = createPaymentJson(userId, orderList); RequestBody body = createRequestBody(json); - DeviceInfo deviceInfo = AppDatabase.getDatabase(this).deviceInfoDao().getDeviceInfoOne(); - - if (deviceInfo == null) { - showErrorAndPlaySound("设备信息异常!", -100001); - return; - } String url = WorkConfig.getBaseUrl() + UrlConfig.PLACE_AND_PAY; Request request = createRequest(url, body, deviceInfo); OfflineOrderInfo offlineOrderInfo = createOfflineOrderInfo(orderId, userId, num, cookMealTimesInfo, json.toString()); BusinessDataInfo businessDataInfo = updateBusinessData(cookMealTimesInfo, payAmount); - + // 保存订单到本地 saveOrderToLocal(offlineOrderInfo, orderDetailsInfoList); - + // 判断网络连接状态--处理在线支付或离线支付 if (NetworkUtils.isNetworkConnected(this)) { handleOnlinePayment(url, body, request, businessDataInfo, orderId); } else { @@ -294,9 +302,13 @@ public class OperationActivity extends BaseActivity { XToastUtils.error(message); - if (soundResId != 100001) { + if (soundResId != -100001) { SoundManager.getInstance().play(Sound.createSimpleSound(soundResId)); } }); @@ -496,11 +508,9 @@ public class OperationActivity extends BaseActivity orderList, String - orderId, List orderDetailsInfoList) { + private BigDecimal getOrderData(int identityVerification, List orderList, + String orderId, List orderDetailsInfoList, DeviceInfo deviceInfo) { int num = 0; - DeviceInfo deviceInfo = AppDatabase.getDatabase(this).deviceInfoDao().getDeviceInfoOne(); //获取当前餐次 CookMealTimesInfo cookMealTimesInfo = AppDatabase.getDatabase(this).cookMeetTimesDao().getDefaultCookMeetTime(); OrderPayAndroidDTO orderPayAndroidDTO = new OrderPayAndroidDTO(); @@ -1083,7 +1093,8 @@ public class OperationActivity extends BaseActivity DialogLoader.getInstance().showConfirmDialog( + exitApp.setOnClickListener(v3 -> + DialogLoader.getInstance().showConfirmDialog( this, "是否确认退出程序?", getString(R.string.lab_yes), @@ -1111,8 +1122,6 @@ public class OperationActivity extends BaseActivity { AlertDialog.Builder builder = new AlertDialog.Builder(OperationActivity.this); View view = LayoutInflater.from(OperationActivity.this).inflate(R.layout.dialog_pick_up_meals, null); - TextView tipTitle = view.findViewById(R.id.tip_title); - TextView pickUpMealsContentTip = view.findViewById(R.id.pick_up_meals_content_tip); TextView close = view.findViewById(R.id.btn_close); builder.setView(view); pickUpYourMealDialog = builder.create(); @@ -1151,7 +1160,7 @@ public class OperationActivity extends BaseActivity { FaceScanUtil.stopReadMealCard(OperationActivity.this); myPresentation.closeScan(); @@ -1166,7 +1175,7 @@ public class OperationActivity extends BaseActivity { AlertDialog.Builder builder = new AlertDialog.Builder(OperationActivity.this); View view = LayoutInflater.from(OperationActivity.this).inflate(R.layout.dialog_person_balance, null); @@ -1286,7 +1295,7 @@ public class OperationActivity extends BaseActivity { UserInfo userInfo = AppDatabase.getDatabase(this).userDao().getUserInfoByPhone(name); - if (userInfo == null || !userInfo.getLoginType().contains("0")) { + if (userInfo == null || !userInfo.getLoginType().contains("3")) { runOnUiThread(() -> { XToastUtils.warning("该账号不支持登录!"); SoundManager.getInstance().play(Sound.createSimpleSound(R.raw.accont_not_to_login)); diff --git a/app/src/main/java/com/bonus/canteen/activity/order/MachineSaleActivity.java b/app/src/main/java/com/bonus/canteen/activity/order/MachineSaleActivity.java index b75abe1..9376bfd 100644 --- a/app/src/main/java/com/bonus/canteen/activity/order/MachineSaleActivity.java +++ b/app/src/main/java/com/bonus/canteen/activity/order/MachineSaleActivity.java @@ -119,6 +119,12 @@ public class MachineSaleActivity extends BaseActivity { + binding.macQueryKeyword.setText(""); + binding.macQueryTime.setText(""); + initData(null, DateTimeHelper.getNowDate(), type); + }); + binding.macQueryTime.setOnClickListener(v -> mDatePicker.show()); initData(null,null,type); @@ -227,6 +233,8 @@ public class MachineSaleActivity extends BaseActivity { // 获取当前点击控件的 ID int viewId = v.getId(); + String keyWord = binding.macQueryKeyword.getText().toString(); + String data = binding.macQueryTime.getText().toString(); // 根据 ID 判断是哪一个按钮被点击了 switch (viewId) { case R.id.mac_back: @@ -240,35 +248,35 @@ public class MachineSaleActivity extends BaseActivity{ List lists = AppDatabase.getDatabase(this).mealTimeDao().getMealTime(); @@ -62,6 +66,7 @@ public class MealTimeActivity extends BaseActivity dialog.dismiss())); - initData(); - initListeners(); } @@ -174,21 +174,15 @@ public class ParamSettingsActivity extends BaseActivity { - //保存输入的内容到paramSettingInfo - toChangeParam(message, dialog, input); - })) + ((dialog, input) -> toChangeParam(message, dialog, input)))//保存输入的内容到paramSettingInfo .inputRange(1, type == 1 ? 100 : 4) .positiveText("确定") .onPositive((dialog, which) -> { }) .negativeText("取消") - .onNegative((dialog, which) -> { - dialog.dismiss(); - }) + .onNegative((dialog, which) -> dialog.dismiss()) .cancelable(false) .show(); } diff --git a/app/src/main/java/com/bonus/canteen/activity/setting/SettingsActivity.java b/app/src/main/java/com/bonus/canteen/activity/setting/SettingsActivity.java index 8e5b644..deeedd5 100644 --- a/app/src/main/java/com/bonus/canteen/activity/setting/SettingsActivity.java +++ b/app/src/main/java/com/bonus/canteen/activity/setting/SettingsActivity.java @@ -50,6 +50,10 @@ public class SettingsActivity extends BaseActivity lists = new ArrayList<>(); + initSimpleData(lists); + ListView listView = findViewById(R.id.list_view); + listView.setAdapter(new SettingAdapter(this, lists)); } private void setupImmersiveMode() { @@ -66,20 +70,16 @@ public class SettingsActivity extends BaseActivity lists; Log.i("SettingActivity", "-===============================SettingActivity"); TextView tvTitle = findViewById(R.id.page_title); TextView ivBack = findViewById(R.id.page_back); - lists = new ArrayList<>(); tvTitle.setText("设置"); ivBack.setOnClickListener(v -> { Intent intent = new Intent(this, OperationActivity.class); startActivity(intent); finish(); }); - initSimpleData(lists); - ListView listView = findViewById(R.id.list_view); - listView.setAdapter(new SettingAdapter(this, lists)); + } diff --git a/app/src/main/java/com/bonus/canteen/activity/setting/UserInfoActivity.java b/app/src/main/java/com/bonus/canteen/activity/setting/UserInfoActivity.java index 51231ca..634e9bb 100644 --- a/app/src/main/java/com/bonus/canteen/activity/setting/UserInfoActivity.java +++ b/app/src/main/java/com/bonus/canteen/activity/setting/UserInfoActivity.java @@ -21,7 +21,6 @@ import android.content.Context; import android.content.Intent; import android.os.Build; import android.os.Bundle; -import android.util.Log; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; @@ -45,10 +44,10 @@ import java.util.List; import java.util.stream.Collectors; public class UserInfoActivity extends BaseActivity { + private ListView listView; private UserInfoAdapter adapter; - private List lists = new ArrayList<>(); @Override protected AcvtivitySettingUserInfoBinding viewBindingInflate(LayoutInflater inflater) { return AcvtivitySettingUserInfoBinding.inflate(inflater); @@ -61,12 +60,9 @@ public class UserInfoActivity extends BaseActivity{ - List lists = AppDatabase.getDatabase(this).userDao().getUserList(); - Log.i("UserInfoActivity", "lists size = " + lists); - + List list = AppDatabase.getDatabase(this).userDao().getUserList(); runOnUiThread(()->{ - Log.i("UserInfoActivity", "adapter size = " + lists); - adapter = new UserInfoAdapter(this, lists); + adapter = new UserInfoAdapter(this, list); listView.setAdapter(adapter); }); }); @@ -93,20 +89,15 @@ public class UserInfoActivity extends BaseActivity { - Log.i("UserInfoActivity", "mac_query_keyword"); EditText editText = findViewById(R.id.mac_query_keyword); String keyWord = editText.getText().toString(); - lists = new ArrayList<>(); ThreadPoolManager.getExecutor().execute(()->{ List list = AppDatabase.getDatabase(this).userDao().getUserList(); - Log.i("UserInfoActivity", "lists size = " + list); List newList = new ArrayList<>(); newList = list.stream().filter(userInfo -> userInfo.getUserName().contains(keyWord) || userInfo.getPhone().contains(keyWord) || userInfo.getNickName().contains(keyWord)).collect(Collectors.toList()); - Log.i("UserInfoActivity", "newList size = " + newList.size()); - Log.i("UserInfoActivity", "list size = " + list.size()); List finalNewList = newList; runOnUiThread(()-> { adapter = new UserInfoAdapter(this, finalNewList); diff --git a/app/src/main/java/com/bonus/canteen/adapter/order/OrderAdapter.java b/app/src/main/java/com/bonus/canteen/adapter/order/OrderAdapter.java index e574c82..44d6d31 100644 --- a/app/src/main/java/com/bonus/canteen/adapter/order/OrderAdapter.java +++ b/app/src/main/java/com/bonus/canteen/adapter/order/OrderAdapter.java @@ -1,6 +1,7 @@ package com.bonus.canteen.adapter.order; import static com.xuexiang.xutil.XUtil.runOnUiThread; +import static com.xuexiang.xutil.resource.ResUtils.getString; import android.annotation.SuppressLint; import android.content.Context; @@ -15,6 +16,7 @@ import android.widget.TextView; import com.alibaba.fastjson.JSONObject; import com.bonus.canteen.activity.order.MachineSaleActivity; +import com.bonus.canteen.constants.AppConstants; import com.bonus.canteen.db.AppDatabase; import com.bonus.canteen.db.entity.base.CookMealTimesInfo; import com.bonus.canteen.db.entity.base.LoginInfo; @@ -28,11 +30,13 @@ import com.bonus.canteen.utils.WorkConfig; import com.bonus.canteen.utils.sound.Sound; import com.bonus.canteen.utils.sound.SoundManager; import com.xuexiang.xui.utils.XToastUtils; +import com.xuexiang.xui.widget.dialog.DialogLoader; import org.easydarwin.easypusher.R; import java.lang.ref.WeakReference; import java.math.BigDecimal; +import java.math.RoundingMode; import java.util.ArrayList; import java.util.List; @@ -51,7 +55,7 @@ public class OrderAdapter extends BaseAdapter { private OrderDetailsAdapter orderDetailsAdapter; - public OkHttpService service = new OkHttpService(); + public final OkHttpService service = new OkHttpService(); public OrderAdapter(Context ctx, List lst, OrderDetailsAdapter orderDetailsAdapter, List lstDetails) { super(); @@ -84,7 +88,7 @@ public class OrderAdapter extends BaseAdapter { return position; } - @SuppressLint("SetTextI18n") + @SuppressLint({"SetTextI18n", "InflateParams"}) @Override public View getView(int i, View convertView, ViewGroup parent) { ViewHolder holder = null; @@ -105,127 +109,50 @@ public class OrderAdapter extends BaseAdapter { } OfflineOrderInfo bean = list.get(i); - holder.machineOrdId.setText(bean.getOrderId() + ""); - holder.machineOrderTime.setText(bean.getOrderTime() + ""); - holder.machinePersonName.setText(bean.getUserName() + ""); - holder.machineTotalAmount.setText(new BigDecimal(bean.getAmountDue()).divide(new BigDecimal(100)) + ""); - holder.machineRealAmount.setText(new BigDecimal(bean.getAmountDue()).divide(new BigDecimal(100)) + ""); + holder.machineOrdId.setText(bean.getOrderId()); + holder.machineOrderTime.setText(bean.getOrderTime()); + holder.machinePersonName.setText(bean.getUserName()); + holder.machineTotalAmount.setText(new BigDecimal(bean.getAmountDue()).divide(new BigDecimal(100), 2, RoundingMode.HALF_UP) + ""); + holder.machineRealAmount.setText(new BigDecimal(bean.getAmountDue()).divide(new BigDecimal(100), 2, RoundingMode.HALF_UP) + ""); if ("1".equals(bean.getPayStatus())) { - if ("1".equals(bean.getIsOnline())){ + if ("1".equals(bean.getIsOnline()) || "2".equals(bean.getIsOnline())) { holder.machineOrState.setText("【消费成功】"); holder.machineOrState.setTextColor(Color.parseColor("#3CB371")); - }else if ("0".equals(bean.getIsOnline())){ - holder.machineOrState.setText("【未支付】"); + } else if ("0".equals(bean.getIsOnline())) { + holder.machineOrState.setText("【未扣费】"); holder.machineOrState.setTextColor(Color.RED); - }else if ("2".equals(bean.getIsOnline())){ - holder.machineOrState.setText("【消费成功】"); - holder.machineOrState.setTextColor(Color.parseColor("#3CB371")); } } else if ("4".equals(bean.getPayStatus())) { holder.machineOrState.setText("【已退单】"); + // 斜体 + holder.machineOrState.getPaint().setTextSkewX(-0.25f); + // 加粗 + holder.machineOrState.getPaint().setFakeBoldText(true); + //设置中划线 + holder.machineOrState.getPaint().setFlags(android.graphics.Paint.STRIKE_THRU_TEXT_FLAG); holder.machineOrState.setTextColor(Color.GRAY); holder.machineRefund.setVisibility(View.GONE); } holder.machineRefund.setOnClickListener(v -> { - ThreadPoolManager.getExecutor().execute(() -> { - LoginInfo loginInfo = AppDatabase.getDatabase(context).loginInfoDao().getLoginInfoOne(); - if (ObjectUtil.isNull(loginInfo)) { - runOnUiThread(() -> { - SoundManager.getInstance().play(Sound.createSimpleSound(R.raw.please_login)); - XToastUtils.warning("请先登录"); - }); - return; - } - runOnUiThread(() -> v.setVisibility(View.GONE)); - OfflineOrderInfo offlineOrderInfo = AppDatabase.getDatabase(context).offlineOrderDao().getOfflineOrderById(bean.getOrderId()); - String money = new BigDecimal(offlineOrderInfo.getAmountDue()).divide(new BigDecimal(100)) + ""; - if ("0".equals(offlineOrderInfo.getIsOnline())) { - Log.d("getOrderTime", offlineOrderInfo.getOrderTime() + ""); - if (ObjectUtil.isNotNull(offlineOrderInfo.getOrderTime())){ - String orderDate = offlineOrderInfo.getOrderTime().substring(0, 10); - Log.d("退单", orderDate + ""); - if (orderDate.equals(DateTimeHelper.getNowDate())) { - AppDatabase.getDatabase(context).businessDataDao().updateOffLine(money, "1", DateTimeHelper.getNowDate()); - } - AppDatabase.getDatabase(context).offlineOrderDao().updatePayStatus("4", bean.getOrderId()); - runOnUiThread(() -> { - SoundManager.getInstance().play(Sound.createSimpleSound(R.raw.refund_success)); - MachineSaleActivity activity = (MachineSaleActivity) context; - activity.refreshData(); - }); - }else{ - runOnUiThread(() -> { - SoundManager.getInstance().play(Sound.createSimpleSound(R.raw.refund_fail)); - XToastUtils.error("当前暂未获取到餐次,请连线后在进行重试"); - }); - } - - }else { - //调用后台退单接口 - try { - JSONObject json = new JSONObject(); - json.put("deviceOrderId", bean.getOrderId()); - json.put("operationUser", loginInfo.getUserName()); - String jsonString = json.toString(); - Log.i("getPersonMessage jsonString", jsonString); - // 定义 JSON 的 MediaType - MediaType JSON = MediaType.parse("application/json; charset=utf-8"); - // 创建 RequestBody - RequestBody body = RequestBody.create(JSON, jsonString); - String url = WorkConfig.getBaseUrl() + UrlConfig.ORDER_REFUND; - Request request = new Request.Builder().url(url) - .post(body).build(); - String result = service.httpPost(url, body, context, request); - Log.d("退单 result", result); - if (ObjectUtil.isEmpty(result)) { - runOnUiThread(() -> { - XToastUtils.error("退单失败"); - SoundManager.getInstance().play(Sound.createSimpleSound(R.raw.refund_fail)); - }); - } else { - JSONObject firstJson = JSONObject.parseObject(result); - Log.d("退单 firstJson", firstJson.toJSONString()); - if (firstJson.getIntValue("code") == 200) { - AppDatabase.getDatabase(context).offlineOrderDao().updatePayStatus("4", bean.getOrderId()); - String orderDate = offlineOrderInfo.getOrderTime().substring(0, 10); - Log.d("退单", orderDate + ""); - if (orderDate.equals(DateTimeHelper.getNowDate())) { - Log.d("退单", "在当天"); - //判断是否在当餐 - CookMealTimesInfo cookMealTimesInfo = AppDatabase.getDatabase(context).cookMeetTimesDao().getDefaultCookMeetTime(); - if (cookMealTimesInfo.getIntervalId().equals(offlineOrderInfo.getIntervalId())) { - Log.d("退单", "在当餐"); - //修改当餐数据 - AppDatabase.getDatabase(context).businessDataDao().updateCurrent(money, "1", DateTimeHelper.getNowDate()); - } - AppDatabase.getDatabase(context).businessDataDao().updateToday(money, "1", DateTimeHelper.getNowDate()); - } - runOnUiThread(() -> { - Log.d("退单", "更新UI"); - MachineSaleActivity activity = (MachineSaleActivity) context; - activity.refreshData(); - SoundManager.getInstance().play(Sound.createSimpleSound(R.raw.refund_success)); - }); - } else if (firstJson.getIntValue("code") == 500) { - runOnUiThread(() -> { - v.setVisibility(View.VISIBLE); - XToastUtils.error(firstJson.getString("msg")); - SoundManager.getInstance().play(Sound.createSimpleSound(R.raw.refund_fail)); - }); - } - } - } catch (Exception e) { - runOnUiThread(() -> { - v.setVisibility(View.VISIBLE); - Log.d("退单", "出现错误进入catch"); - XToastUtils.error("退单失败"); - SoundManager.getInstance().play(Sound.createSimpleSound(R.raw.refund_fail)); - }); - } - } - }); - } - ); + StringBuilder sb = new StringBuilder(); + String money = new BigDecimal(bean.getAmountDue()).divide(new BigDecimal(100), 2, RoundingMode.HALF_UP) + ""; + sb.append("姓名:").append(bean.getUserName()).append("(金额:").append(money).append("元)"); + DialogLoader.getInstance().showConfirmDialog(context, "是否确认退单?\n"+sb, getString(R.string.lab_yes), (dialog, which) -> { + dialog.dismiss(); + ThreadPoolManager.getExecutor().execute(() -> { + LoginInfo loginInfo = AppDatabase.getDatabase(context).loginInfoDao().getLoginInfoOne(); + if (ObjectUtil.isNull(loginInfo)) { + runOnUiThread(() -> { + SoundManager.getInstance().play(Sound.createSimpleSound(R.raw.please_login)); + XToastUtils.warning("请先登录"); + }); + return; + } + // 进行退单操作 + refundOrder(bean, loginInfo, v); + }); + }, getString(R.string.lab_no), (dialog, which) -> dialog.dismiss()); + }); holder.linearLayout.setOnClickListener(v -> { lstDetails = new ArrayList<>(); @@ -236,11 +163,125 @@ public class OrderAdapter extends BaseAdapter { } }); }); - - return convertView; } + private void refundOrder(OfflineOrderInfo bean, LoginInfo loginInfo, View v) { + runOnUiThread(() -> v.setVisibility(View.GONE)); + OfflineOrderInfo offlineOrderInfo = AppDatabase.getDatabase(context).offlineOrderDao().getOfflineOrderById(bean.getOrderId()); + String money = new BigDecimal(offlineOrderInfo.getAmountDue()).divide(new BigDecimal(100), 2, RoundingMode.HALF_UP) + ""; + if ("0".equals(offlineOrderInfo.getIsOnline())) { + refundOffOnlineOrder(bean, loginInfo, offlineOrderInfo, money); + } else { + //调用后台退单接口 + try { + JSONObject json = new JSONObject(); + json.put("deviceOrderId", bean.getOrderId()); + json.put("operationUser", loginInfo.getUserName()); + String jsonString = json.toString(); + Log.i("getPersonMessage jsonString", jsonString); + // 定义 JSON 的 MediaType + MediaType mediaType = MediaType.parse(AppConstants.MEDIA_TYPE); + // 创建 RequestBody + RequestBody body = RequestBody.create(mediaType, jsonString); + String url = WorkConfig.getBaseUrl() + UrlConfig.ORDER_REFUND; + Request request = new Request.Builder().url(url).post(body).build(); + String result = service.httpPost(url, body, context, request); + if (ObjectUtil.isEmpty(result)) { + showToastError(v, "退单失败"); + } else { + JSONObject firstJson = JSONObject.parseObject(result); + if (firstJson.getIntValue("code") == 200) { + refundOnlineOrder(bean, loginInfo, offlineOrderInfo, money); + } else if (firstJson.getIntValue("code") == 500) { + showToastError(v, firstJson.getString("msg")); + } + } + } catch (Exception e) { + showToastError(v, "退单失败"); + } + } + } + + /** + * 处理离线订单的退款逻辑 + * + * @param bean 离线订单信息 + * @param loginInfo 登录信息 + * @param offlineOrderInfo 离线订单信息 + * @param money 退款金额 + */ + private void refundOffOnlineOrder(OfflineOrderInfo bean, LoginInfo loginInfo, OfflineOrderInfo offlineOrderInfo, String money) { + Log.d("getOrderTime", offlineOrderInfo.getOrderTime()); + if (ObjectUtil.isNotNull(offlineOrderInfo.getOrderTime())) { + String orderDate = offlineOrderInfo.getOrderTime().substring(0, 10); + Log.d("退单", orderDate); + if (orderDate.equals(DateTimeHelper.getNowDate())) { + AppDatabase.getDatabase(context).businessDataDao().updateOffLine(money, "1", DateTimeHelper.getNowDate()); + } + AppDatabase.getDatabase(context).offlineOrderDao().updatePayStatus("4", bean.getOrderId(), loginInfo.getUserName()); + runOnUiThread(() -> { + SoundManager.getInstance().play(Sound.createSimpleSound(R.raw.refund_success)); + MachineSaleActivity activity = (MachineSaleActivity) context; + activity.refreshData(); + }); + } else { + runOnUiThread(() -> { + SoundManager.getInstance().play(Sound.createSimpleSound(R.raw.refund_fail)); + XToastUtils.error("当前暂未获取到餐次,请连线后在进行重试"); + }); + } + } + + /** + * 处理在线订单的退款逻辑 + * + * @param bean 离线订单信息 + * @param loginInfo 登录信息 + * @param offlineOrderInfo 离线订单信息 + * @param money 退款金额 + */ + private void refundOnlineOrder(OfflineOrderInfo bean, LoginInfo loginInfo, OfflineOrderInfo offlineOrderInfo, String money) { + AppDatabase.getDatabase(context).offlineOrderDao().updatePayStatus("4", bean.getOrderId(), loginInfo.getUserName()); + String orderDate = offlineOrderInfo.getOrderTime().substring(0, 10); + Log.d("退单", orderDate); + if (orderDate.equals(DateTimeHelper.getNowDate())) { + Log.d("退单", "在当天"); + if ("2".equals(offlineOrderInfo.getIsOnline())) { + // 离线订单或在线订单 + AppDatabase.getDatabase(context).businessDataDao().updateOffLine(money, "1", DateTimeHelper.getNowDate()); + } + //判断是否在当餐 + CookMealTimesInfo cookMealTimesInfo = AppDatabase.getDatabase(context).cookMeetTimesDao().getDefaultCookMeetTime(); + if (cookMealTimesInfo.getIntervalId().equals(offlineOrderInfo.getIntervalId())) { + Log.d("退单", "在当餐"); + //修改当餐数据 + AppDatabase.getDatabase(context).businessDataDao().updateCurrent(money, "1", DateTimeHelper.getNowDate()); + } + AppDatabase.getDatabase(context).businessDataDao().updateToday(money, "1", DateTimeHelper.getNowDate()); + } + runOnUiThread(() -> { + Log.d("退单", "更新UI"); + MachineSaleActivity activity = (MachineSaleActivity) context; + activity.refreshData(); + SoundManager.getInstance().play(Sound.createSimpleSound(R.raw.refund_success)); + }); + } + + /** + * 显示错误提示 + * + * @param v 视图 + * @param msg 错误信息 + */ + private static void showToastError(View v, String msg) { + runOnUiThread(() -> { + v.setVisibility(View.VISIBLE); + XToastUtils.error(msg); + SoundManager.getInstance().play(Sound.createSimpleSound(R.raw.refund_fail)); + }); + } + private class ViewHolder { LinearLayout linearLayout; diff --git a/app/src/main/java/com/bonus/canteen/constants/AppConstants.java b/app/src/main/java/com/bonus/canteen/constants/AppConstants.java index 645a18b..56d329e 100644 --- a/app/src/main/java/com/bonus/canteen/constants/AppConstants.java +++ b/app/src/main/java/com/bonus/canteen/constants/AppConstants.java @@ -1,29 +1,77 @@ -/* - * Copyright (C) 2025 xuexiangjys(xuexiangjys@163.com) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - package com.bonus.canteen.constants; public class AppConstants { - public static final int PAY_TYPE_ACCOUNT = 1; - public static final int PAY_MODE_FACE = 2; - public static final int PAY_MODE_QRCODE = 3; - public static final int ORDER_TYPE_DEVICE = 11; - public static final String MEDIA_TYPE = "application/json; charset=utf-8"; + private AppConstants(){ + throw new UnsupportedOperationException("Utility class"); + } + public static final String MEDIA_TYPE = "application/json; charset=utf-8"; public static final String BALANCE = "balance"; + public static final String SUCCESS = "success"; + public static final String FAIL = "fail"; + public static final String ERROR = "error"; + public static final String EMPTY = ""; + public static final String NULL = "null"; + public static final String COLON = ":"; + public static final String COMMA = ","; + public static final String SPACE = " "; + public static final String SLASH = "/"; + public static final String BACKSLASH = "\\"; + public static final String DOT = "."; + public static final String UNDERLINE = "_"; + public static final String UTF_8 = "UTF-8"; + public static final String ENCODING = "encoding"; + + //int数字常量开始 + public static final int ZERO = 0; + public static final int ONE = 1; + public static final int TWO = 2; + public static final int THREE = 3; + public static final int FOUR = 4; + public static final int FIVE = 5; + public static final int SIX = 6; + public static final int SEVEN = 7; + public static final int EIGHT = 8; + public static final int NINE = 9; + public static final int TEN = 10; + public static final int ELEVEN = 11; + public static final int TWELVE = 12; + public static final int THIRTEEN = 13; + public static final int FOURTEEN = 14; + public static final int FIFTEEN = 15; + public static final int SIXTEEN = 16; + public static final int SEVENTEEN = 17; + public static final int EIGHTEEN = 18; + public static final int NINETEEN = 19; + public static final int TWENTY = 20; + public static final int HUNDRED = 100; + public static final int THOUSAND = 1000; + //int数字常量结束 + + //字符串数字常量开始 + public static final String ZERO_STR = "0"; + public static final String ONE_STR = "1"; + public static final String TWO_STR = "2"; + public static final String THREE_STR = "3"; + public static final String FOUR_STR = "4"; + public static final String FIVE_STR = "5"; + public static final String SIX_STR = "6"; + public static final String SEVEN_STR = "7"; + public static final String EIGHT_STR = "8"; + public static final String NINE_STR = "9"; + public static final String TEN_STR = "10"; + public static final String ELEVEN_STR = "11"; + public static final String TWELVE_STR = "12"; + public static final String THIRTEEN_STR = "13"; + public static final String FOURTEEN_STR = "14"; + public static final String FIFTEEN_STR = "15"; + public static final String SIXTEEN_STR = "16"; + public static final String SEVENTEEN_STR = "17"; + public static final String EIGHTEEN_STR = "18"; + public static final String NINETEEN_STR = "19"; + public static final String TWENTY_STR = "20"; + public static final String HUNDRED_STR = "100"; + public static final String THOUSAND_STR = "1000"; + //字符串数字常量结束 } diff --git a/app/src/main/java/com/bonus/canteen/db/dao/base/BusinessDataInfoDao.java b/app/src/main/java/com/bonus/canteen/db/dao/base/BusinessDataInfoDao.java index b37dc14..cd9f32f 100644 --- a/app/src/main/java/com/bonus/canteen/db/dao/base/BusinessDataInfoDao.java +++ b/app/src/main/java/com/bonus/canteen/db/dao/base/BusinessDataInfoDao.java @@ -37,11 +37,11 @@ public interface BusinessDataInfoDao { @Update void update(BusinessDataInfo businessDataInfo); // 更新数据 @Query("update business_data_info set offlineMoney = offlineMoney - :money,offlineOrderNum = offlineOrderNum - :orderNum where orderDate = :date") - void updateOffLine(String money,String orderNum,String date); // 更新数据 + void updateOffLine(String money,String orderNum,String date); // 更新离线数据 @Query("update business_data_info set todayMoney = todayMoney - :money,todayOrderNum = todayOrderNum - :orderNum where orderDate = :date") - void updateToday(String money,String orderNum,String date); // 更新数据 + void updateToday(String money,String orderNum,String date); // 更新当天数据 @Query("update business_data_info set currentMoney = currentMoney - :money,currentOrderNum = currentOrderNum - :orderNum where orderDate = :date") - void updateCurrent(String money,String orderNum,String date); // 更新数据 + void updateCurrent(String money,String orderNum,String date); // 更新当餐数据 @Delete void delete(BusinessDataInfo businessDataInfo); // 删除数据 diff --git a/app/src/main/java/com/bonus/canteen/db/dao/base/OfflineOrderInfoDao.java b/app/src/main/java/com/bonus/canteen/db/dao/base/OfflineOrderInfoDao.java index 7ec22bc..017f98f 100644 --- a/app/src/main/java/com/bonus/canteen/db/dao/base/OfflineOrderInfoDao.java +++ b/app/src/main/java/com/bonus/canteen/db/dao/base/OfflineOrderInfoDao.java @@ -31,13 +31,13 @@ public interface OfflineOrderInfoDao { @Query("select * from offline_order_info where orderId=:orderId") OfflineOrderInfo getOfflineOrderById(String orderId); - @Query("select * from offline_order_info where (isOnline = 0 or isOnline = 2) and strftime('%Y-%m-%d', orderTime) = :data") + @Query("select * from offline_order_info where (isOnline = 0 or isOnline = 2) and strftime('%Y-%m-%d', orderTime) = :data order by orderId desc") List getOfflineOrder(String data); - @Query("select * from offline_order_info where isOnline = 0 and payStatus = 1") + @Query("select * from offline_order_info where isOnline = 0 and payStatus = 1 order by orderId desc") List getOfflineOrderAndToPush(); - @Query("select * from offline_order_info where isOnline = 1 and strftime('%Y-%m-%d', orderTime) = :data") + @Query("select * from offline_order_info where isOnline = 1 and strftime('%Y-%m-%d', orderTime) = :data order by orderId desc") List getInlineOrder(String data); - @Query("select * from offline_order_info where strftime('%Y-%m-%d', orderTime) = :data") + @Query("select * from offline_order_info where strftime('%Y-%m-%d', orderTime) = :data order by orderId desc") List getOrderList(String data); @Insert @@ -47,8 +47,8 @@ public interface OfflineOrderInfoDao { void update(OfflineOrderInfo meal); // 更新数据 @Query("update offline_order_info set isOnline=:isOnline where orderId = :orderId") void updateIsOnline(String isOnline,String orderId); // 更新数据 - @Query("update offline_order_info set payStatus=:payStatus where orderId = :orderId") - void updatePayStatus(String payStatus,String orderId); // 更新数据 + @Query("update offline_order_info set payStatus=:payStatus,refundOperator =:userName where orderId = :orderId") + void updatePayStatus(String payStatus,String orderId,String userName); // 更新数据 @Delete void delete(OfflineOrderInfo meal); // 删除数据 diff --git a/app/src/main/java/com/bonus/canteen/db/entity/base/OfflineOrderInfo.java b/app/src/main/java/com/bonus/canteen/db/entity/base/OfflineOrderInfo.java index 38d6349..19f32e2 100644 --- a/app/src/main/java/com/bonus/canteen/db/entity/base/OfflineOrderInfo.java +++ b/app/src/main/java/com/bonus/canteen/db/entity/base/OfflineOrderInfo.java @@ -48,10 +48,19 @@ public class OfflineOrderInfo { private String isOnline; //0: 离线-已消费,未推送,1:在线消费成功 2:离线-推送成功 @ColumnInfo private String intervalId; - + @ColumnInfo + private String refundOperator; //退款操作人 @ColumnInfo private String jsonStr; + public String getRefundOperator() { + return refundOperator; + } + + public void setRefundOperator(String refundOperator) { + this.refundOperator = refundOperator; + } + public String getOrderId() { return orderId; } diff --git a/app/src/main/java/com/bonus/canteen/upgrade/UpdateDown.java b/app/src/main/java/com/bonus/canteen/upgrade/UpdateDown.java index 9da6a6f..1ee1350 100644 --- a/app/src/main/java/com/bonus/canteen/upgrade/UpdateDown.java +++ b/app/src/main/java/com/bonus/canteen/upgrade/UpdateDown.java @@ -3,6 +3,7 @@ package com.bonus.canteen.upgrade; import android.annotation.SuppressLint; import android.content.Context; import android.os.Handler; +import android.os.Looper; import android.os.Message; import android.util.Log; @@ -100,7 +101,7 @@ public class UpdateDown { } @SuppressLint("HandlerLeak") - private Handler handler = new Handler() { + private final Handler handler = new Handler(Looper.getMainLooper()) { @Override public void handleMessage(Message msg) { if (msg.what == 1) { 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 288cd53..68860d2 100644 --- a/app/src/main/java/com/bonus/canteen/utils/WorkConfig.java +++ b/app/src/main/java/com/bonus/canteen/utils/WorkConfig.java @@ -21,6 +21,9 @@ import com.bonus.canteen.SmartCanteenApp; import com.bonus.canteen.db.ConfigRepository; public class WorkConfig { + private WorkConfig() { + throw new UnsupportedOperationException("Cannot instantiate utility class"); + } //本地 // protected static String baseUrl = "http://192.168.0.34:48380/smart-canteen"; // protected static String prefixesUrl = "http://192.168.0.34:48380"; diff --git a/app/src/main/java/com/bonus/canteen/utils/rabbitmq/RabbitMqMqttHelper.java b/app/src/main/java/com/bonus/canteen/utils/rabbitmq/RabbitMqMqttHelper.java index f30047d..e7049f5 100644 --- a/app/src/main/java/com/bonus/canteen/utils/rabbitmq/RabbitMqMqttHelper.java +++ b/app/src/main/java/com/bonus/canteen/utils/rabbitmq/RabbitMqMqttHelper.java @@ -249,9 +249,16 @@ public class RabbitMqMqttHelper { try { if (json.getIntValue(field) > 0 && desc.equals("人员照片")) { ThreadPoolManager.getExecutor().execute(() -> { - GetBasicDataService service = new GetBasicDataServiceImp(); - service.getFacePhoto(json.getString("currentTime"), json.getIntValue(UPDATE_PERSON)); - runOnUiThread(() -> FaceServer.getInstance().loadFace(context)); + if (json.getString("type").equals("del")) { + int userId = json.getIntValue(field); + Log.d(TAG, "userId: " + userId); + AppDatabase.getDatabase(context).userDao().delete(new UserInfo(Long.parseLong(String.valueOf(userId)))); + AppDatabase.getDatabase(context).custPhotoFulDao().delete(new CustPhotoFulInfo(Long.parseLong(String.valueOf(userId)))); + } else { + GetBasicDataService service = new GetBasicDataServiceImp(); + service.getFacePhoto(json.getString("currentTime"), json.getIntValue(UPDATE_PERSON)); + runOnUiThread(() -> FaceServer.getInstance().loadFace(context)); + } }); } else if (json.getIntValue(field) > 0 && desc.equals("人员信息")) { ThreadPoolManager.getExecutor().execute(() -> { @@ -272,6 +279,7 @@ public class RabbitMqMqttHelper { } private void handleDeviceUpdateInfo(JSONObject json) { + Log.d(TAG, "设备更新信息: " + json.toJSONString()); ThreadPoolManager.getExecutor().execute(() -> { GetBasicDataService service = new GetBasicDataServiceImp(); service.getDeviceBase(); @@ -282,7 +290,7 @@ public class RabbitMqMqttHelper { if (!StringUtils.isEmpty(orderId)) { ThreadPoolManager.getExecutor().execute(() -> { OfflineOrderInfo offlineOrderInfo = AppDatabase.getDatabase(context).offlineOrderDao().getOfflineOrderById(orderId); - AppDatabase.getDatabase(context).offlineOrderDao().updatePayStatus("4", orderId); + AppDatabase.getDatabase(context).offlineOrderDao().updatePayStatus("4", orderId,"后台操作"); String money = new BigDecimal(offlineOrderInfo.getAmountDue()).divide(new BigDecimal(100),2, RoundingMode.HALF_UP) + ""; String orderDate = offlineOrderInfo.getOrderTime().substring(0, 10); Log.d("退单", orderDate); diff --git a/app/src/main/res/layout/machine_sale_order_main.xml b/app/src/main/res/layout/machine_sale_order_main.xml index 23a9509..bca49ed 100644 --- a/app/src/main/res/layout/machine_sale_order_main.xml +++ b/app/src/main/res/layout/machine_sale_order_main.xml @@ -100,11 +100,21 @@ android:layout_height="50dp" android:layout_marginTop="@dimen/config_margin_10dp" android:layout_marginLeft="@dimen/config_margin_20dp" - android:layout_marginRight="@dimen/config_margin_20dp" + android:layout_marginRight="@dimen/config_margin_10dp" android:text="查询" android:id="@+id/mac_query" android:background="@drawable/btn_border_yes_bg" /> +