package com.example.drink_order_system; import android.app.AlertDialog; import android.content.Context; import android.os.Bundle; import android.app.Fragment; import android.text.Editable; import android.text.TextWatcher; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.CheckBox; import android.widget.EditText; import android.widget.ImageButton; import android.widget.TextView; import android.widget.Toast; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import com.google.gson.Gson; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import okhttp3.Call; import okhttp3.Callback; import okhttp3.MediaType; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.RequestBody; import okhttp3.Response; public class ShopFragment extends Fragment { private RecyclerView bill_listView; private LinearLayoutManager llM; private LayoutInflater layoutInflater; private Context mContext; private TextView TV_cost; private EditText ET_people; private EditText ET_table; private CheckBox CB_takeAway; private ImageButton BT_delete; private Button BT_buy; private int drinkCost; private float serviceCost; private AlertDialog buyDialog = null; private AlertDialog.Builder builder = null; private View view_buy; private View view; private String userName; private String restaurantName; private static ArrayList ordered_array = new ArrayList<>(); public ShopFragment() { // Required empty public constructor } public static ShopFragment newInstance(String userName,String restaurantName) { ShopFragment myFragment = new ShopFragment(); Bundle args = new Bundle(); args.putString("userName", userName); args.putString("restaurantName", restaurantName); myFragment.setArguments(args); return myFragment; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (getArguments() != null) { userName = getArguments().getString("userName"); restaurantName = getArguments().getString("restaurantName"); } } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { ordered_array=get_ordered_array(Ordered_drinks.getOrdered_array(),restaurantName); mContext = getActivity(); layoutInflater = inflater; view = inflater.inflate(R.layout.fragment_shop, container, false); bill_listView = (RecyclerView) view.findViewById(R.id.RV_bill); llM = new LinearLayoutManager(this.getActivity()); bill_listView.setLayoutManager(llM); OrderAdapter orderAdapter = new OrderAdapter(inflater, ordered_array); orderAdapter.buttonSetOnClick((new OrderAdapter.MyClickListener() { @Override public void onAddClick(View v, int position) { Ordered_drinks.addDrink(position); ordered_array=get_ordered_array(Ordered_drinks.getOrdered_array(),restaurantName); refresh(); } public void onSubClick(View v, int position){ Ordered_drinks.subtractDrink(position); ordered_array=get_ordered_array(Ordered_drinks.getOrdered_array(),restaurantName); refresh(); } })); bill_listView.setAdapter(orderAdapter); TV_cost = view.findViewById(R.id.textView_cost); ET_people = view.findViewById(R.id.editText_people); ET_table = view.findViewById(R.id.editText_table); CB_takeAway = view.findViewById(R.id.checkBox); BT_delete = view.findViewById(R.id.button_delete); BT_buy = view.findViewById(R.id.button_buy); drinkCost = getDrinkCost(); serviceCost = 0.2f; if(!ET_people.getText().equals("")) { serviceCost = 0.2f*Integer.parseInt((String.valueOf(ET_people.getText()))); } TV_cost.setText(String.format("饮料费:¥ %d \n服务费:¥ %.1f", drinkCost, serviceCost)); ET_people.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { } @Override public void afterTextChanged(Editable s) { if(s.toString().equals("")) { s.append("1"); } if(s.toString().equals("0")) { s.replace(0, 1, "1"); } serviceCost = 0.2f; if(!ET_people.getText().equals("")) { serviceCost = 0.2f*Integer.parseInt((String.valueOf(ET_people.getText()))); } TV_cost.setText(String.format("饮料费:¥ %d \n服务费:¥ %.1f", drinkCost, serviceCost)); } }); ET_people.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { } @Override public void afterTextChanged(Editable s) { if(s.toString().equals("")) { s.append("1"); } if(s.toString().equals("0")) { s.replace(0, 1, "1"); } serviceCost = 0.2f; if(!ET_people.getText().equals("")) { serviceCost = 0.2f*Integer.parseInt((String.valueOf(ET_people.getText()))); } TV_cost.setText(String.format("饮料费:¥ %d \n服务费:¥ %.1f", drinkCost, serviceCost)); } }); ET_table.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { } @Override public void afterTextChanged(Editable s) { if(s.toString().equals("")) { s.append("1"); } if(Integer.valueOf(s.toString())<=0) { s.replace(0, 1, "1"); } if(Integer.valueOf(s.toString())>30) { s.replace(0, s.length(), "30"); } } }); BT_delete.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(getContext(), "您已清空购物车!", Toast.LENGTH_SHORT).show(); Ordered_drinks.clearOrdered_array(); ordered_array=get_ordered_array(Ordered_drinks.getOrdered_array(),restaurantName); refresh(); } }); builder = new AlertDialog.Builder(this.getActivity()); view_buy = inflater.inflate(R.layout.dialogue_buy, null, false); builder.setView(view_buy); builder.setCancelable(false); buyDialog = builder.create(); view_buy.findViewById(R.id.button_quit).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { buyDialog.dismiss(); } } ); view_buy.findViewById(R.id.button_bought).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Account temp = new Account(userName, mContext); String takeAway = "0"; if (CB_takeAway.isChecked()) { takeAway = "1"; } String cost = String.format("%.1f", drinkCost + serviceCost); Date date1 = temp.saveBill(takeAway, cost); //上传订单信息 SimpleDateFormat sdf3 = new SimpleDateFormat("yyyyMMddHHmmss"); String date = sdf3.format(date1); drinkCost = getDrinkCost(); serviceCost = 0.2f; float money=drinkCost+serviceCost; ArrayList food = new ArrayList(); ArrayList number = new ArrayList(); for (Ordered_drinks s:ordered_array) { food.add(s.get_drink().get_name()); number.add(String.valueOf(s.get_drink_number())); } Bill bill=new Bill(date,restaurantName,money,food,number); Gson gson = new Gson(); String jsonOrder = gson.toJson(bill); uploadBillInfo(jsonOrder); Ordered_drinks.clearOrdered_array(); refresh(); buyDialog.dismiss(); } } ); BT_buy.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v){ if(drinkCost==0) { Toast.makeText(getContext(), "请先选购饮品再结账!", Toast.LENGTH_SHORT).show(); } else if(MineFragment.add==null||MineFragment.tel==null) { Toast.makeText(getContext(), "请填写电话和地址!", Toast.LENGTH_SHORT).show(); } else { buyDialog.show(); if(view_buy!=null) { TextView TV_allCost = view_buy.findViewById(R.id.textView_allCost); { TV_allCost.setText(String.format("饮料费:¥ %d\n服务费:¥ %.1f\n总价:¥ %.1f\n请扫描以下二维码进行支付。" ,drinkCost, serviceCost, drinkCost+serviceCost)); } } } } }); return view; } private void refresh() { ordered_array=get_ordered_array(Ordered_drinks.getOrdered_array(),restaurantName); OrderAdapter orderAdapter = new OrderAdapter(layoutInflater, ordered_array); orderAdapter.buttonSetOnClick((new OrderAdapter.MyClickListener() { @Override public void onAddClick(View v, int position) { Ordered_drinks.addDrink(position); ordered_array=get_ordered_array(Ordered_drinks.getOrdered_array(),restaurantName); refresh(); } public void onSubClick(View v, int position){ Ordered_drinks.subtractDrink(position); ordered_array=get_ordered_array(Ordered_drinks.getOrdered_array(),restaurantName); refresh(); } })); bill_listView.setAdapter(orderAdapter); drinkCost = getDrinkCost(); serviceCost = 0.2f; ET_people.setText("1"); if(!ET_people.getText().equals("")) { serviceCost = 0.2f*Integer.parseInt((String.valueOf(ET_people.getText()))); } TV_cost.setText(String.format("饮料费:¥ %d \n服务费:¥ %.1f", drinkCost, serviceCost)); } @Override public void onHiddenChanged(boolean hidden) { super.onHiddenChanged(hidden); refresh(); } public ArrayList get_ordered_array(ArrayList ordered_array, String targetRestaurantName) { ArrayList ordered_array1 = new ArrayList<>(); for (Ordered_drinks orderedDrink : ordered_array) { if (orderedDrink.get_restaurant_name().equals(targetRestaurantName)) { ordered_array1.add(orderedDrink); } } return ordered_array1; } public int getDrinkCost() { int sum = 0; for (Ordered_drinks od:ordered_array) { sum += od.get_drink().get_price()*od.get_drink_number(); } return sum; } private void uploadBillInfo(final String jsonOrder) { OkHttpClient client = new OkHttpClient(); RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"), jsonOrder); Request request = new Request.Builder() .url("http://192.168.43.176:8080/warehouse_management_system_war_exploded/setPurchase") .post(requestBody) .build(); Log.e("uploadBillInfo", jsonOrder); client.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { e.printStackTrace(); } @Override public void onResponse(Call call, Response response) throws IOException { if (response.isSuccessful()) { getActivity().runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(mContext.getApplicationContext(), "下单成功", Toast.LENGTH_SHORT).show(); } }); } } }); } }