You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

378 lines
14 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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_drinks> 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<String> food = new ArrayList<String>();
ArrayList<String> number = new ArrayList<String>();
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<Ordered_drinks> get_ordered_array(ArrayList<Ordered_drinks> ordered_array, String targetRestaurantName) {
ArrayList<Ordered_drinks> 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();
}
});
}
}
});
}
}