diff --git a/app/src/main/java/com/example/tyre/maintenance/TireScrapActivity.java b/app/src/main/java/com/example/tyre/maintenance/TireScrapActivity.java index c99b5df..a7765dc 100644 --- a/app/src/main/java/com/example/tyre/maintenance/TireScrapActivity.java +++ b/app/src/main/java/com/example/tyre/maintenance/TireScrapActivity.java @@ -1,9 +1,19 @@ package com.example.tyre.maintenance; +import android.app.Dialog; import android.content.Intent; +import android.graphics.Color; import android.os.Bundle; +import android.view.Gravity; +import android.view.LayoutInflater; import android.view.View; +import android.view.ViewGroup; +import android.view.Window; +import android.widget.AdapterView; import android.widget.ArrayAdapter; +import android.widget.ImageView; +import android.widget.ListView; +import android.widget.TextView; import android.widget.Toast; import androidx.databinding.DataBindingUtil; @@ -17,28 +27,31 @@ import com.example.tyre.maintenance.been.BaseTyre; import com.example.tyre.maintenance.been.BizOrderTireDetail; import com.example.tyre.maintenance.been.Order; import com.example.tyre.util.MyUrl; +import com.google.android.material.bottomsheet.BottomSheetDialog; import com.google.gson.reflect.TypeToken; import com.lzy.okgo.OkGo; import com.lzy.okgo.callback.StringCallback; import com.lzy.okgo.model.Response; import java.io.File; +import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.Date; import java.util.HashMap; import java.util.List; +import java.util.Locale; import java.util.Map; -import okhttp3.RequestBody; - public class TireScrapActivity extends BaseActivity { private ActivityTireScrapBinding binding; private Order order; private String carNo; - private Map tyreMap; - private List baseTyreList; - private List positionList; - private ArrayAdapter positionAdapter; + private BaseTyre selectedTire; + + // Scrap Position Data + private String scrapCategory = ""; + private String scrapReason = ""; // Photos private int currentPhotoIndex = -1; @@ -49,8 +62,6 @@ public class TireScrapActivity extends BaseActivity { super.onCreate(savedInstanceState); binding = DataBindingUtil.setContentView(this, R.layout.activity_tire_scrap); - tyreMap = new HashMap<>(); - positionList = new ArrayList<>(); fileList = new ArrayList<>(); Intent intent = getIntent(); @@ -60,10 +71,11 @@ public class TireScrapActivity extends BaseActivity { binding.setCarNo(carNo); binding.setSite(site); + + String currentDate = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()).format(new Date()); + binding.setCurrentDate(currentDate); - positionAdapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, positionList); - positionAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); - binding.spinnerScrapPosition.setAdapter(positionAdapter); + binding.llScrapPosition.setOnClickListener(v -> showScrapReasonDialog()); selectTire(carNo); } @@ -73,26 +85,106 @@ public class TireScrapActivity extends BaseActivity { OkGo.post(MyUrl.url + "/tyre/tyre/getCarBingTire").tag(this).params("carNo", carNo).execute(new StringCallback() { @Override public void onSuccess(Response response) { - baseTyreList = gson.fromJson(response.body(), new TypeToken>() { + List baseTyreList = gson.fromJson(response.body(), new TypeToken>() { }.getType()); - if (baseTyreList == null || baseTyreList.isEmpty()) { + + if (baseTyreList != null && !baseTyreList.isEmpty()) { + // 默认展示第一个轮胎的基础信息 + selectedTire = baseTyreList.get(0); + binding.setTire(selectedTire); + } else { Toast.makeText(context, "该车无绑定轮胎", Toast.LENGTH_SHORT).show(); - return; } - positionList.clear(); - tyreMap.clear(); - for (BaseTyre tire : baseTyreList) { - String wheelPostion = tire.getWheelPostion(); - if (wheelPostion != null && !wheelPostion.isEmpty()) { - positionList.add(wheelPostion); - tyreMap.put(wheelPostion, tire); - } - } - positionAdapter.notifyDataSetChanged(); } }); } + private void showScrapReasonDialog() { + BottomSheetDialog dialog = new BottomSheetDialog(this); + View view = LayoutInflater.from(this).inflate(R.layout.dialog_scrap_reason, null); + dialog.setContentView(view); + + // Make background transparent to show custom rounded corners + Window window = dialog.getWindow(); + if (window != null) { + window.findViewById(com.google.android.material.R.id.design_bottom_sheet) + .setBackgroundColor(Color.TRANSPARENT); + } + + ImageView ivClose = view.findViewById(R.id.iv_close_dialog); + ivClose.setOnClickListener(v -> dialog.dismiss()); + + ListView lvCategories = view.findViewById(R.id.lv_categories); + ListView lvSubItems = view.findViewById(R.id.lv_sub_items); + + String[] categories = new String[]{"胎冠", "胎侧", "趾口T(胎号面)", "趾口D(DOT面)", "其他"}; + Map subItemsMap = new HashMap<>(); + subItemsMap.put("胎冠", new String[]{"一次性刺扎(包含花纹沟夹石)", "连续刺扎(钉子或石头扎伤,橡胶受损)", "脱层", "撞击", "磨光", "不规则磨损"}); + subItemsMap.put("胎侧", new String[]{"撞击", "连续损伤(双胎夹石、机械损伤)", "一次性损伤", "过度曲挠", "开裂", "变形"}); + subItemsMap.put("趾口T(胎号面)", new String[]{"趾口开裂、脱层、变形", "拆装损伤", "老化过热", "轮辋装配"}); + subItemsMap.put("趾口D(DOT面)", new String[]{"趾口开裂、脱层、变形", "拆装损伤", "老化过热", "轮辋装配"}); + subItemsMap.put("其他", new String[]{"好的或坏的修补(厂家或授权服务商)", "不满足良性修补判定", "气密层褶皱", "串气", "化学污染", "年限到期", "其他未列出原因"}); + + // Category Adapter + ArrayAdapter catAdapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, categories) { + @Override + public View getView(int position, View convertView, ViewGroup parent) { + TextView tv = (TextView) super.getView(position, convertView, parent); + tv.setTextSize(14f); + tv.setTextColor(Color.parseColor("#333333")); + tv.setGravity(Gravity.CENTER); + tv.setPadding(0, 40, 0, 40); + return tv; + } + }; + lvCategories.setAdapter(catAdapter); + + // Sub Items Adapter (initially empty or first category) + final ArrayAdapter[] subAdapter = new ArrayAdapter[]{new ArrayAdapter(this, android.R.layout.simple_list_item_1, subItemsMap.get(categories[0])) { + @Override + public View getView(int position, View convertView, ViewGroup parent) { + TextView tv = (TextView) super.getView(position, convertView, parent); + tv.setTextSize(14f); + tv.setTextColor(Color.parseColor("#666666")); + tv.setPadding(0, 40, 0, 40); + return tv; + } + }}; + lvSubItems.setAdapter(subAdapter[0]); + + final String[] currentCategory = {categories[0]}; + + lvCategories.setOnItemClickListener((parent, view1, position, id) -> { + currentCategory[0] = categories[position]; + subAdapter[0] = new ArrayAdapter(TireScrapActivity.this, android.R.layout.simple_list_item_1, subItemsMap.get(currentCategory[0])) { + @Override + public View getView(int pos, View convertView, ViewGroup p) { + TextView tv = (TextView) super.getView(pos, convertView, p); + tv.setTextSize(14f); + tv.setTextColor(Color.parseColor("#666666")); + tv.setPadding(0, 40, 0, 40); + return tv; + } + }; + lvSubItems.setAdapter(subAdapter[0]); + for (int i = 0; i < parent.getChildCount(); i++) { + parent.getChildAt(i).setBackgroundColor(Color.TRANSPARENT); + } + view1.setBackgroundColor(Color.WHITE); + }); + + lvSubItems.setOnItemClickListener((parent, view12, position, id) -> { + String selectedSubItem = subAdapter[0].getItem(position); + scrapCategory = currentCategory[0]; + scrapReason = selectedSubItem; + binding.tvScrapPosition.setText(scrapCategory + " - " + scrapReason); + binding.tvScrapPosition.setTextColor(Color.parseColor("#333333")); + dialog.dismiss(); + }); + + dialog.show(); + } + public void takePhoto1(View view) { currentPhotoIndex = 1; try { @@ -119,6 +211,15 @@ public class TireScrapActivity extends BaseActivity { e.printStackTrace(); } } + + public void takePhoto4(View view) { + currentPhotoIndex = 4; + try { + teke_photo(); + } catch (Exception e) { + e.printStackTrace(); + } + } @Override public void tekePhotoResult(String fileUrl, File file) { @@ -131,13 +232,20 @@ public class TireScrapActivity extends BaseActivity { binding.ivPhoto2.setImageResource(R.mipmap.ic_duihao); } else if (currentPhotoIndex == 3) { binding.ivPhoto3.setImageResource(R.mipmap.ic_duihao); + } else if (currentPhotoIndex == 4) { + binding.ivPhoto4.setImageResource(R.mipmap.ic_duihao); } } } public void saveScrapOrder(View view) { - if (positionList.isEmpty()) { - Toast.makeText(context, "无可报废的轮胎", Toast.LENGTH_SHORT).show(); + if (selectedTire == null) { + Toast.makeText(context, "未找到关联的轮胎信息,无法报废", Toast.LENGTH_SHORT).show(); + return; + } + + if (scrapReason.isEmpty()) { + Toast.makeText(context, "请选择报废位置", Toast.LENGTH_SHORT).show(); return; } @@ -146,13 +254,6 @@ public class TireScrapActivity extends BaseActivity { return; } - String selectedPosition = (String) binding.spinnerScrapPosition.getSelectedItem(); - BaseTyre selectedTire = tyreMap.get(selectedPosition); - if (selectedTire == null) { - Toast.makeText(context, "选择的轮位无效", Toast.LENGTH_SHORT).show(); - return; - } - String remark = binding.dialogTireRemark1.getText().toString().trim(); BizOrderTireDetail scrapDetail = new BizOrderTireDetail(); @@ -161,6 +262,8 @@ public class TireScrapActivity extends BaseActivity { scrapDetail.setTireCode(selectedTire.getTyreNo()); scrapDetail.setPositionName(selectedTire.getWheelPostion()); scrapDetail.setDataType("报废"); + + // 暂不将两级原因结果存入数据库中,轮胎状态默认报废 scrapDetail.setTireStatus("报废"); scrapDetail.setRemark(remark); diff --git a/app/src/main/res/drawable/bg_bottom_dialog.xml b/app/src/main/res/drawable/bg_bottom_dialog.xml new file mode 100644 index 0000000..6620f87 --- /dev/null +++ b/app/src/main/res/drawable/bg_bottom_dialog.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/app/src/main/res/layout/activity_tire_scrap.xml b/app/src/main/res/layout/activity_tire_scrap.xml index 2208690..aa70ef6 100644 --- a/app/src/main/res/layout/activity_tire_scrap.xml +++ b/app/src/main/res/layout/activity_tire_scrap.xml @@ -4,190 +4,505 @@ xmlns:tools="http://schemas.android.com/tools"> - + - + + android:background="#F5F6FA" + android:orientation="vertical"> - + - - - - - - - - - - - - - + android:layout_height="0dp" + android:layout_weight="1" + android:scrollbars="none"> - - - - - - - - - - - - - - - - - - - - - + android:orientation="vertical" + android:padding="16dp"> - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +