diff --git a/doc/~$无人物流管理系统需求构思及描述.docx b/doc/~$无人物流管理系统需求构思及描述.docx new file mode 100644 index 0000000..17560ba Binary files /dev/null and b/doc/~$无人物流管理系统需求构思及描述.docx differ diff --git a/src/Logistics/.idea/misc.xml b/src/Logistics/.idea/misc.xml index 1c17b84..7bf2527 100644 --- a/src/Logistics/.idea/misc.xml +++ b/src/Logistics/.idea/misc.xml @@ -17,13 +17,14 @@ - + + diff --git a/src/Logistics/app/build.gradle b/src/Logistics/app/build.gradle index ef99642..bd44a64 100644 --- a/src/Logistics/app/build.gradle +++ b/src/Logistics/app/build.gradle @@ -43,4 +43,5 @@ dependencies { testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test.ext:junit:1.1.3' androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' + implementation "org.java-websocket:Java-WebSocket:1.4.0" } \ No newline at end of file diff --git a/src/Logistics/app/libs/java_websocket.jar b/src/Logistics/app/libs/java_websocket.jar deleted file mode 100644 index bb5caeb..0000000 Binary files a/src/Logistics/app/libs/java_websocket.jar and /dev/null differ diff --git a/src/Logistics/app/src/main/AndroidManifest.xml b/src/Logistics/app/src/main/AndroidManifest.xml index fc78965..bb8590b 100644 --- a/src/Logistics/app/src/main/AndroidManifest.xml +++ b/src/Logistics/app/src/main/AndroidManifest.xml @@ -25,7 +25,7 @@ android:name=".ui.MenuActivity" android:exported="false" /> diff --git a/src/Logistics/app/src/main/assets/js.html b/src/Logistics/app/src/main/assets/js.html index 113324c..7fd022d 100644 --- a/src/Logistics/app/src/main/assets/js.html +++ b/src/Logistics/app/src/main/assets/js.html @@ -8,7 +8,7 @@ function callJS(){ var ros = new ROSLIB.Ros({ - url : 'ws://192.168.43.164:9090' + url : 'ws://192.168.43.20:9090' }); ros.on('connection', function() { @@ -86,11 +86,11 @@ console.log('Connection to websocket server closed.'); }); - goal.send(); + //goal.send(); - /*var cmdVel = new ROSLIB.Topic({ + var cmdVel = new ROSLIB.Topic({ ros : ros, - name : '/cmd_vel_mux/input/navi', + name : '/cmd_vel', messageType : 'geometry_msgs/Twist' }); @@ -106,7 +106,7 @@ z : 0.0 } }); - cmdVel.publish(twist);*/ + cmdVel.publish(twist); } diff --git a/src/Logistics/app/src/main/java/com/example/logistics/dao/goodDao.java b/src/Logistics/app/src/main/java/com/example/logistics/manager/goodManager.java similarity index 72% rename from src/Logistics/app/src/main/java/com/example/logistics/dao/goodDao.java rename to src/Logistics/app/src/main/java/com/example/logistics/manager/goodManager.java index ffde8d0..e5ec254 100644 --- a/src/Logistics/app/src/main/java/com/example/logistics/dao/goodDao.java +++ b/src/Logistics/app/src/main/java/com/example/logistics/manager/goodManager.java @@ -1,4 +1,4 @@ -package com.example.logistics.dao; +package com.example.logistics.manager; import android.app.AlertDialog; import android.content.Context; @@ -7,8 +7,6 @@ import android.util.Log; import com.example.logistics.tools.DBOpenHelper; import com.example.logistics.tools.MD5Utils; -import com.example.logistics.ui.MainActivity; -import com.example.logistics.ui.MenuActivity; import java.sql.Connection; import java.sql.PreparedStatement; @@ -18,7 +16,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -public class goodDao { +public class goodManager { private static final String TAG = "goodDao"; @@ -165,5 +163,61 @@ public class goodDao { return datalist; } + public int pickup(String pickupcode, String phonenum){ + HashMap map = new HashMap<>(); + + Connection connection = DBOpenHelper.getConn(); + + int msg = 0; + try{ + String sql = "select * from goods where id=?"; + + if(connection != null){ + PreparedStatement ps = connection.prepareStatement(sql); + if(ps != null){ + Log.e(TAG, "pickupcode: " + pickupcode); + ps.setInt(1,Integer.parseInt(pickupcode)); + ResultSet rs = ps.executeQuery(); + + int count = rs.getMetaData().getColumnCount(); + while(rs.next()){ + for(int i = 1; i <= count; i++){ + String field = rs.getMetaData().getColumnName(i); + map.put(field, rs.getString(field)); + } + } + connection.close(); + ps.close(); + if(map.size() != 0){ + StringBuilder s = new StringBuilder(); + for(String key:map.keySet()){ + if(key.equals("phonenum")){ + if(phonenum.equals(map.get(key).toString().substring(7,11))){ + msg = 1; //password correct + }else{ + msg = 2; //password incorrect + } + break; + } + } + }else{ + Log.e(TAG, "result is null"); + msg = 3; //result is null + } + }else{ + Log.e(TAG, "ps is null"); + msg = 0; + } + }else{ + Log.e(TAG, "connection is null"); + msg = 0; + } + }catch (Exception e){ + e.printStackTrace(); + Log.d(TAG, "login bug: " + e.getMessage()); + msg = 0; + } + return msg; + } } diff --git a/src/Logistics/app/src/main/java/com/example/logistics/dao/operationDao.java b/src/Logistics/app/src/main/java/com/example/logistics/manager/operationManager.java similarity index 95% rename from src/Logistics/app/src/main/java/com/example/logistics/dao/operationDao.java rename to src/Logistics/app/src/main/java/com/example/logistics/manager/operationManager.java index e6800ee..415034b 100644 --- a/src/Logistics/app/src/main/java/com/example/logistics/dao/operationDao.java +++ b/src/Logistics/app/src/main/java/com/example/logistics/manager/operationManager.java @@ -1,10 +1,8 @@ -package com.example.logistics.dao; +package com.example.logistics.manager; import android.util.Log; -import com.example.logistics.entity.User; import com.example.logistics.tools.DBOpenHelper; -import com.example.logistics.tools.MD5Utils; import java.sql.Connection; import java.sql.PreparedStatement; @@ -16,7 +14,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -public class operationDao { +public class operationManager { private static final String TAG = "operationDao"; public boolean add(String pickupcode, String phonenum){ diff --git a/src/Logistics/app/src/main/java/com/example/logistics/dao/userDao.java b/src/Logistics/app/src/main/java/com/example/logistics/manager/userManager.java similarity index 57% rename from src/Logistics/app/src/main/java/com/example/logistics/dao/userDao.java rename to src/Logistics/app/src/main/java/com/example/logistics/manager/userManager.java index bd3bd0d..9a88384 100644 --- a/src/Logistics/app/src/main/java/com/example/logistics/dao/userDao.java +++ b/src/Logistics/app/src/main/java/com/example/logistics/manager/userManager.java @@ -1,4 +1,4 @@ -package com.example.logistics.dao; +package com.example.logistics.manager; import android.util.Log; @@ -12,7 +12,7 @@ import java.util.HashMap; import java.sql.ResultSet; import java.sql.Connection; -public class userDao { +public class userManager { private static final String TAG = "userDao"; @@ -46,6 +46,66 @@ public class userDao { StringBuilder s = new StringBuilder(); for(String key:map.keySet()){ if(key.equals("password")){ + + if(password.equals(map.get(key))){ + msg = 1; //password correct + }else{ + msg = 2; //password incorrect + } + break; + } + } + }else{ + Log.e(TAG, "result is null"); + msg = 3; //result is null + } + }else{ + Log.e(TAG, "ps is null"); + msg = 0; + } + }else{ + Log.e(TAG, "connection is null"); + msg = 0; + } + }catch (Exception e){ + e.printStackTrace(); + Log.d(TAG, "login bug: " + e.getMessage()); + msg = 0; + } + return msg; + } + + public int loginByPhone(String phonenum, String password){ + HashMap map = new HashMap<>(); + + Connection connection = DBOpenHelper.getConn(); + + int msg = 0; + try{ + String sql = "select * from users where phonenum = ?"; + + if(connection != null){ + PreparedStatement ps = connection.prepareStatement(sql); + if(ps != null){ + Log.e(TAG, "phonenum: " + phonenum); + ps.setString(1,phonenum); + ResultSet rs = ps.executeQuery(); + + int count = rs.getMetaData().getColumnCount(); + while(rs.next()){ + for(int i = 1; i <= count; i++){ + String field = rs.getMetaData().getColumnName(i); + map.put(field, rs.getString(field)); + } + } + connection.close(); + ps.close(); + password = MD5Utils.md5(password); + if(map.size() != 0){ + StringBuilder s = new StringBuilder(); + for(String key:map.keySet()){ + if(key.equals("password")){ + if(password.equals(map.get(key))){ msg = 1; //password correct }else{ @@ -136,4 +196,42 @@ public class userDao { } } + public int change(String phonenum, String password){ + HashMap map = new HashMap<>(); + + Connection connection = DBOpenHelper.getConn(); + + int msg = 0; + try{ + String sql = "update users set password = ? where phonenum = ?"; + + if(connection != null){ + PreparedStatement ps = connection.prepareStatement(sql); + if(ps != null){ + Log.e(TAG, "phonenum: " + phonenum); + password = MD5Utils.md5(password); + ps.setString(1,password); + + ps.setString(2,phonenum); + ps.executeUpdate(); + connection.close(); + ps.close(); + msg = 1; + + }else{ + Log.e(TAG, "ps is null"); + msg = 0; + } + }else{ + Log.e(TAG, "connection is null"); + msg = 0; + } + }catch (Exception e){ + e.printStackTrace(); + Log.d(TAG, "login bug: " + e.getMessage()); + msg = 0; + } + return msg; + } + } diff --git a/src/Logistics/app/src/main/java/com/example/logistics/tools/DBOpenHelper.java b/src/Logistics/app/src/main/java/com/example/logistics/tools/DBOpenHelper.java index c561dbb..73f0b02 100644 --- a/src/Logistics/app/src/main/java/com/example/logistics/tools/DBOpenHelper.java +++ b/src/Logistics/app/src/main/java/com/example/logistics/tools/DBOpenHelper.java @@ -7,9 +7,9 @@ import java.sql.SQLException; public class DBOpenHelper { private static String diver = "com.mysql.jdbc.Driver"; //加入utf-8是为了后面往表中输入中文,表中不会出现乱码的情况 - private static String url = "jdbc:mysql://49.235.83.73:3306/logistics?characterEncoding=utf-8"; + private static String url = "jdbc:mysql://192.168.43.203:3306/logistics?characterEncoding=utf-8"; private static String user = "root";//用户名 - private static String password = "123";//密码 + private static String password = "";//密码 /* * 连接数据库 * */ diff --git a/src/Logistics/app/src/main/java/com/example/logistics/tools/JWebSocketClient.java b/src/Logistics/app/src/main/java/com/example/logistics/tools/JWebSocketClient.java new file mode 100644 index 0000000..4236ecf --- /dev/null +++ b/src/Logistics/app/src/main/java/com/example/logistics/tools/JWebSocketClient.java @@ -0,0 +1,35 @@ +package com.example.logistics.tools; + +import android.util.Log; + +import org.java_websocket.client.WebSocketClient; +import org.java_websocket.drafts.Draft_6455; +import org.java_websocket.handshake.ServerHandshake; + +import java.net.URI; + +public class JWebSocketClient extends WebSocketClient { + public JWebSocketClient(URI serverUri) { + super(serverUri, new Draft_6455()); + } + + @Override + public void onOpen(ServerHandshake handshakedata) { + Log.e("JWebSocketClient", "onOpen()"); + } + + @Override + public void onMessage(String message) { + Log.e("JWebSocketClient", "onMessage()"); + } + + @Override + public void onClose(int code, String reason, boolean remote) { + Log.e("JWebSocketClient", "onClose()"); + } + + @Override + public void onError(Exception ex) { + Log.e("JWebSocketClient", "onError()"); + } +} diff --git a/src/Logistics/app/src/main/java/com/example/logistics/ui/HistoryActivity.java b/src/Logistics/app/src/main/java/com/example/logistics/ui/HistoryActivity.java index 4cc6c2e..3a89a44 100644 --- a/src/Logistics/app/src/main/java/com/example/logistics/ui/HistoryActivity.java +++ b/src/Logistics/app/src/main/java/com/example/logistics/ui/HistoryActivity.java @@ -1,11 +1,8 @@ package com.example.logistics.ui; -import androidx.appcompat.app.AppCompatActivity; - import android.annotation.SuppressLint; import android.app.Activity; import android.content.Intent; -import android.media.Image; import android.os.Bundle; import android.os.Handler; import android.os.Message; @@ -22,8 +19,7 @@ import android.widget.AdapterView.OnItemClickListener; import android.widget.Toast; import com.example.logistics.R; -import com.example.logistics.dao.goodDao; -import com.example.logistics.dao.operationDao; +import com.example.logistics.manager.operationManager; import java.util.ArrayList; import java.util.List; @@ -101,8 +97,8 @@ public class HistoryActivity extends Activity implements OnItemClickListener, On new Thread(){ @Override public void run(){ - operationDao operationDao = new operationDao(); - dataList = operationDao.history(phonenum); + operationManager operationManager = new operationManager(); + dataList = operationManager.history(phonenum); int msg = 1; hand1.sendEmptyMessage(msg); diff --git a/src/Logistics/app/src/main/java/com/example/logistics/ui/LoginActivity.java b/src/Logistics/app/src/main/java/com/example/logistics/ui/LoginActivity.java new file mode 100644 index 0000000..7b4ba8d --- /dev/null +++ b/src/Logistics/app/src/main/java/com/example/logistics/ui/LoginActivity.java @@ -0,0 +1,200 @@ +package com.example.logistics.ui; + +import com.example.logistics.R; +import com.example.logistics.manager.goodManager; +import com.example.logistics.manager.operationManager; +import com.example.logistics.manager.userManager; +import com.example.logistics.entity.User; + +import android.annotation.SuppressLint; +import android.app.Activity; +import android.app.AlertDialog; +import android.content.DialogInterface; +import android.content.Intent; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.EditText; +import android.widget.Toast; + +import org.json.JSONException; +import org.json.JSONObject; + + +public class LoginActivity extends Activity { + + private int islogin = 0; + private Button loginButton; + private Button signUpButton; + private Button forgetButton; + private Button phonenumButton; + private AlertDialog alert; + private Button changeButton; + private EditText fphonenum; + private EditText fpassword; + int flag = 0; //flag = 0 是用户名登录;=1是手机号 + + // 调用Actvity + private String TAG = "LoginActivity"; + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main); + + loginButton = (Button) this.findViewById(R.id.LoginButton); + signUpButton = (Button) this.findViewById(R.id.SignUpButton); + forgetButton = (Button) this.findViewById(R.id.forget); + phonenumButton = (Button) this.findViewById(R.id.phonenum); + + + AlertDialog.Builder builder = new AlertDialog.Builder(LoginActivity.this); + + View view2 = View.inflate(LoginActivity.this, R.layout.forget, null); + + builder.setTitle("取件").setView(view2); + + alert = builder.create(); + + changeButton = (Button) view2.findViewById(R.id.change); + fphonenum = (EditText) view2.findViewById(R.id.fphonenum); + fpassword = (EditText) view2.findViewById(R.id.fpassword); + + loginButton.setOnClickListener( + new View.OnClickListener() { + @Override + public void onClick(View v) { + login(v); + Log.d(TAG, "login"); + } + } + ); + + signUpButton.setOnClickListener( + new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(LoginActivity.this, SignUpActivity.class); + Log.d(TAG, "signup"); + startActivity(intent); + } + } + ); + + forgetButton.setOnClickListener( + new View.OnClickListener() { + @Override + public void onClick(View view) { + alert.show(); + changeButton.setOnClickListener( + new View.OnClickListener() { + @Override + public void onClick(View view) { + Log.d(TAG, "change password"); + change(view); + } + } + ); + } + } + ); + + EditText userName = (EditText) this.findViewById(R.id.UserNameEdit); + phonenumButton.setOnClickListener( + new View.OnClickListener() { + @Override + public void onClick(View view) { + userName.setHint("请输入手机号"); + flag = 1; + } + } + ); + + } + + public void change(View view){ + String phoneunm = fphonenum.getText().toString().trim(); + String password = fpassword.getText().toString().trim(); + new Thread() { + @Override + public void run() { + userManager userManager = new userManager(); + + int msg = userManager.change(phoneunm, password); + + Log.d(TAG, "change"); + if(msg != 1){ + Log.d(TAG, "pickup,failed"); + hand2.sendEmptyMessage(msg); + return; + } + Log.d(TAG, "change,success"); + + hand2.sendEmptyMessage(msg); + } + }.start(); + } + + public void login(View view){ + EditText userName = (EditText) this.findViewById(R.id.UserNameEdit); + EditText passWord = (EditText) this.findViewById(R.id.PassWordEdit); + + new Thread(){ + @Override + public void run(){ + userManager userManager = new userManager(); + int msg = 0; + if(flag == 0){ + msg = userManager.login(userName.getText().toString().trim(), passWord.getText().toString().trim()); + }else if(flag == 1){ + msg = userManager.loginByPhone(userName.getText().toString().trim(), passWord.getText().toString().trim()); + + } + Log.e("MAin", "msg"); + hand1.sendEmptyMessage(msg); + if(msg == 1){ + User owner = userManager.findUser(userName.getText().toString().trim()); + Intent intent = new Intent(LoginActivity.this, MenuActivity.class); + if(flag == 1){ + intent.putExtra("user", userName.getText().toString().trim()); + }else{ + intent.putExtra("user", owner.getPhoneNum()); + } + startActivity(intent); + finish(); + } + } + }.start(); + } + + @SuppressLint("HandlerLeak") + final Handler hand1 = new Handler(){ + @Override + public void handleMessage(Message msg){ + if(msg.what == 0){ + Toast.makeText(getApplicationContext(), "登录失败", Toast.LENGTH_SHORT).show(); + }else if(msg.what == 1){ + Toast.makeText(getApplicationContext(), "登录成功", Toast.LENGTH_SHORT).show(); + islogin = 1; + }else if(msg.what == 2){ + Toast.makeText(getApplicationContext(), "密码错误", Toast.LENGTH_SHORT).show(); + }else if(msg.what == 3){ + Toast.makeText(getApplicationContext(), "账号不存在", Toast.LENGTH_SHORT).show(); + } + } + }; + @SuppressLint("HandlerLeak") + final Handler hand2 = new Handler() { + @Override + public void handleMessage(Message msg) { + if(msg.what == 0){ + Toast.makeText(LoginActivity.this, "修改失败", Toast.LENGTH_SHORT).show(); + }else if(msg.what == 1) { + Toast.makeText(LoginActivity.this, "修改成功", Toast.LENGTH_SHORT).show(); + } + } + }; + +} \ No newline at end of file diff --git a/src/Logistics/app/src/main/java/com/example/logistics/ui/MainActivity.java b/src/Logistics/app/src/main/java/com/example/logistics/ui/MainActivity.java deleted file mode 100644 index fc419de..0000000 --- a/src/Logistics/app/src/main/java/com/example/logistics/ui/MainActivity.java +++ /dev/null @@ -1,95 +0,0 @@ -package com.example.logistics.ui; - -import com.example.logistics.R; -import com.example.logistics.dao.userDao; -import com.example.logistics.entity.User; -import com.example.logistics.tools.MD5Utils; - -import android.annotation.SuppressLint; -import android.app.Activity; -import android.content.Intent; -import android.os.Bundle; -import android.os.Handler; -import android.os.Message; -import android.util.Log; -import android.view.View; -import android.widget.Button; -import android.widget.EditText; -import android.widget.Toast; - -import java.text.SimpleDateFormat; -import java.util.Date; - - -public class MainActivity extends Activity { - - private int islogin = 0; - // 调用Actvity - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_main); - - Button loginButton = (Button) this.findViewById(R.id.LoginButton); - Button signUpButton = (Button) this.findViewById(R.id.SignUpButton); - - loginButton.setOnClickListener( - new View.OnClickListener() { - @Override - public void onClick(View v) { - login(v); - } - } - ); - signUpButton.setOnClickListener( - new View.OnClickListener() { - @Override - public void onClick(View v) { - Intent intent = new Intent(MainActivity.this, SignUpActivity.class); - startActivity(intent); - } - } - ); - - } - - public void login(View view){ - EditText userName = (EditText) this.findViewById(R.id.UserNameEdit); - EditText passWord = (EditText) this.findViewById(R.id.PassWordEdit); - - new Thread(){ - @Override - public void run(){ - userDao userDao = new userDao(); - int msg = userDao.login(userName.getText().toString().trim(), passWord.getText().toString().trim()); - Log.e("MAin", "msg"); - hand1.sendEmptyMessage(msg); - if(msg == 1){ - User owner = userDao.findUser(userName.getText().toString().trim()); - Intent intent = new Intent(MainActivity.this, MenuActivity.class); - intent.putExtra("user", owner.getPhoneNum()); - startActivity(intent); - finish(); - } - } - }.start(); - } - - @SuppressLint("HandlerLeak") - final Handler hand1 = new Handler(){ - @Override - public void handleMessage(Message msg){ - if(msg.what == 0){ - Toast.makeText(getApplicationContext(), "登录失败", Toast.LENGTH_SHORT).show(); - }else if(msg.what == 1){ - Toast.makeText(getApplicationContext(), "登录成功", Toast.LENGTH_SHORT).show(); - islogin = 1; - }else if(msg.what == 2){ - Toast.makeText(getApplicationContext(), "密码错误", Toast.LENGTH_SHORT).show(); - }else if(msg.what == 3){ - Toast.makeText(getApplicationContext(), "账号不存在", Toast.LENGTH_SHORT).show(); - } - } - }; - -} \ No newline at end of file diff --git a/src/Logistics/app/src/main/java/com/example/logistics/ui/MyFragment3.java b/src/Logistics/app/src/main/java/com/example/logistics/ui/MeUI.java similarity index 89% rename from src/Logistics/app/src/main/java/com/example/logistics/ui/MyFragment3.java rename to src/Logistics/app/src/main/java/com/example/logistics/ui/MeUI.java index 2ff01f4..f49574c 100644 --- a/src/Logistics/app/src/main/java/com/example/logistics/ui/MyFragment3.java +++ b/src/Logistics/app/src/main/java/com/example/logistics/ui/MeUI.java @@ -9,23 +9,20 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.LinearLayout; -import android.widget.TextView; import android.widget.Toast; import androidx.annotation.Nullable; import com.example.logistics.R; -import org.w3c.dom.Text; - -public class MyFragment3 extends Fragment implements View.OnClickListener{ +public class MeUI extends Fragment implements View.OnClickListener{ private LinearLayout ll_waiting; private LinearLayout ll_history; private LinearLayout ll_exit; private Context mContext; private String user; - public MyFragment3(){ + public MeUI(){ } @Nullable @@ -67,7 +64,7 @@ public class MyFragment3 extends Fragment implements View.OnClickListener{ break; case R.id.exit: Toast.makeText(mContext, "exit", Toast.LENGTH_SHORT).show(); - intent = new Intent(mContext, MainActivity.class); + intent = new Intent(mContext, LoginActivity.class); startActivity(intent); getActivity().finish(); break; diff --git a/src/Logistics/app/src/main/java/com/example/logistics/ui/MenuActivity.java b/src/Logistics/app/src/main/java/com/example/logistics/ui/MenuActivity.java index c366436..95ed844 100644 --- a/src/Logistics/app/src/main/java/com/example/logistics/ui/MenuActivity.java +++ b/src/Logistics/app/src/main/java/com/example/logistics/ui/MenuActivity.java @@ -93,7 +93,7 @@ public class MenuActivity extends AppCompatActivity implements View.OnClickListe mTextView1.setSelected(true); mTextNum1.setVisibility(View.INVISIBLE); if (mFrag1 == null) { - mFrag1 = new MyFragment1(); + mFrag1 = new SearchUI(); transaction.add(R.id.fragment_container, mFrag1); @@ -106,7 +106,7 @@ public class MenuActivity extends AppCompatActivity implements View.OnClickListe mTextView2.setSelected(true); mTextNum2.setVisibility(View.INVISIBLE); if (mFrag2 == null) { - mFrag2 = new MyFragment2(); + mFrag2 = new PickUpUI(); Bundle bundle = new Bundle(); bundle.putString("user", owner); mFrag2.setArguments(bundle); @@ -120,7 +120,7 @@ public class MenuActivity extends AppCompatActivity implements View.OnClickListe mTextView3.setSelected(true); mTextNum3.setVisibility(View.INVISIBLE); if (mFrag3 == null) { - mFrag3 = new MyFragment3(); + mFrag3 = new MeUI(); Bundle bundle = new Bundle(); bundle.putString("user", owner); mFrag3.setArguments(bundle); diff --git a/src/Logistics/app/src/main/java/com/example/logistics/ui/MyFragment2.java b/src/Logistics/app/src/main/java/com/example/logistics/ui/MyFragment2.java deleted file mode 100644 index 8f28860..0000000 --- a/src/Logistics/app/src/main/java/com/example/logistics/ui/MyFragment2.java +++ /dev/null @@ -1,220 +0,0 @@ -package com.example.logistics.ui; - -import androidx.fragment.app.Fragment; - -import android.annotation.SuppressLint; -import android.app.AlertDialog; -import android.content.Context; -import android.content.Intent; -import android.os.Bundle; -import android.os.Handler; -import android.os.Message; -import android.util.Log; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.webkit.WebSettings; -import android.webkit.WebView; -import android.webkit.WebViewClient; -import android.widget.Button; -import android.widget.EditText; -import android.widget.TextView; -import android.widget.Toast; - -import androidx.annotation.Nullable; - -import com.example.logistics.R; -import com.example.logistics.dao.goodDao; -import com.example.logistics.dao.operationDao; -import com.example.logistics.dao.userDao; -import com.example.logistics.entity.User; -import com.google.zxing.integration.android.IntentIntegrator; -import com.google.zxing.integration.android.IntentResult; -import com.journeyapps.barcodescanner.CaptureActivity; - -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.InputStream; - -public class MyFragment2 extends Fragment implements View.OnClickListener{ - - private Button mButton; - private Context mContext; - - private WebView mWebView; - - public MyFragment2(){ - - } - @Nullable - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - View view = inflater.inflate(R.layout.my_fragment2,container,false); - mWebView = (WebView) view.findViewById(R.id.webview); - - WebSettings webSettings = mWebView.getSettings(); - mButton = (Button)view.findViewById(R.id.Pick_Button); - mButton.setOnClickListener(this); - mContext = getActivity(); - - webSettings.setJavaScriptEnabled(true); - mWebView.loadUrl("file:///android_asset/js.html"); - - Log.i("set", "listner"); - - mWebView.setWebViewClient(new WebViewClient(){ - @Override - public void onPageFinished(WebView view, String url){ - super.onPageFinished(view, url); - String jsStr1 = ""; - try{ - InputStream in1 = mContext.getAssets().open("em.js"); - byte buff[] = new byte[1024]; - ByteArrayOutputStream fromFile = new ByteArrayOutputStream(); - do { - int numRead = in1.read(buff); - if (numRead <= 0) { - break; - } - fromFile.write(buff, 0, numRead); - } while (true); - jsStr1 = fromFile.toString(); - in1.close(); - fromFile.close(); - } catch (IOException e) { - e.printStackTrace(); - } - mWebView.loadUrl("javascript:" + jsStr1); - - String jsStr2 = ""; - try{ - InputStream in2 = mContext.getAssets().open("roslib.min.js"); - byte buff[] = new byte[1024]; - ByteArrayOutputStream fromFile = new ByteArrayOutputStream(); - do { - int numRead = in2.read(buff); - if (numRead <= 0) { - break; - } - fromFile.write(buff, 0, numRead); - } while (true); - jsStr2 = fromFile.toString(); - in2.close(); - fromFile.close(); - } catch (IOException e) { - e.printStackTrace(); - } - mWebView.loadUrl("javascript:" + jsStr2); - } - - }); - - - return view; - } - - @Override - public void onClick(View view) { - switch(view.getId()){ - case R.id.Pick_Button: - /*new IntentIntegrator(getActivity()) - .setDesiredBarcodeFormats(IntentIntegrator.QR_CODE)// 扫码的类型,一维码,二维码,一/二维码,默认为一/二维码 - .setPrompt("请对准摄像头") - .setCameraId(0) - .setBeepEnabled(false) - .setCaptureActivity(CaptureActivity.class) - .initiateScan();*/ - pickup("abnc"); - - } - } - - public void test(){ - mWebView.loadUrl("javascript:callJS()"); - Log.i("abc", "bcd"); - } - - - @Override - @SuppressLint("MissingSuperCall") - public void onActivityResult(int requestCode, int resultCode, Intent data) { - IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data); - if(result != null) { - if(result.getContents() != null) { - //Toast.makeText(mContext, "Scanned: " + result.getContents(), Toast.LENGTH_LONG).show(); - pickup(result.getContents()); - } - } - } - - public void pickup(String result){ - AlertDialog.Builder builder = new AlertDialog.Builder(mContext); - - View view2 = View.inflate(mContext, R.layout.pickup, null); - - EditText PickUpCode = (EditText) view2.findViewById(R.id.pk_PickUp); - EditText PhoneNum = (EditText) view2.findViewById(R.id.pk_PhoneNum); - Button button = (Button) view2.findViewById(R.id.pk_button); - - builder.setTitle("取件").setView(view2); - - builder.create().show(); - button.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - String pickupcode = PickUpCode.getText().toString().trim(); - String phonenum = PhoneNum.getText().toString().trim(); - Log.d("onclick", "123"); - //String QR_pickup = result.split(" ")[0]; - //String QR_phone = result.split(" ")[1]; - - if(true){ - //if (pickupcode.equals(QR_pickup) && phonenum.equals(QR_phone)) { - /*new Thread() { - @Override - public void run() { - int msg = 0; - - operationDao operationDao = new operationDao(); - goodDao goodDao = new goodDao(); - Bundle bundle = getArguments(); - - String user = bundle.getString("user"); - - boolean flag1 = operationDao.add(pickupcode, user); - boolean flag2 = goodDao.delete(pickupcode); - - boolean flag = flag1 & flag2; - if (flag) { - msg = 1; - } - int msg = 1; - test(); - hand1.sendEmptyMessage(msg); - } - }.start();*/ - Toast.makeText(mContext, "取件成功", Toast.LENGTH_LONG).show(); - test(); - - } else { - Toast.makeText(mContext, "取件失败", Toast.LENGTH_LONG).show(); - } - } - - - }); - } - - @SuppressLint("HandlerLeak") - final Handler hand1 = new Handler() { - @Override - public void handleMessage(Message msg) { - if (msg.what == 1) { - Toast.makeText(mContext, "取件成功", Toast.LENGTH_SHORT).show(); - } else { - Toast.makeText(mContext, "取件失败", Toast.LENGTH_SHORT); - } - } - }; -} \ No newline at end of file diff --git a/src/Logistics/app/src/main/java/com/example/logistics/ui/NoPickActivity.java b/src/Logistics/app/src/main/java/com/example/logistics/ui/NoPickActivity.java index d23a064..104bee1 100644 --- a/src/Logistics/app/src/main/java/com/example/logistics/ui/NoPickActivity.java +++ b/src/Logistics/app/src/main/java/com/example/logistics/ui/NoPickActivity.java @@ -1,9 +1,5 @@ package com.example.logistics.ui; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.appcompat.app.AppCompatActivity; - import android.annotation.SuppressLint; import android.app.Activity; import android.content.Intent; @@ -19,21 +15,14 @@ import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.ImageButton; import android.widget.ListView; -import android.widget.NumberPicker; import android.widget.SimpleAdapter; import android.widget.Toast; import com.example.logistics.R; -import com.example.logistics.dao.goodDao; -import com.example.logistics.dao.userDao; -import com.example.logistics.entity.User; +import com.example.logistics.manager.goodManager; import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Iterator; import java.util.List; -import java.util.ListIterator; import java.util.Map; public class NoPickActivity extends Activity implements OnItemClickListener, OnScrollListener, View.OnClickListener { @@ -110,8 +99,8 @@ public class NoPickActivity extends Activity implements OnItemClickListener, OnS new Thread(){ @Override public void run(){ - goodDao goodDao = new goodDao(); - dataList = goodDao.nopick(phonenum); + goodManager goodManager = new goodManager(); + dataList = goodManager.nopick(phonenum); int msg = 1; hand1.sendEmptyMessage(msg); diff --git a/src/Logistics/app/src/main/java/com/example/logistics/ui/PickUpUI.java b/src/Logistics/app/src/main/java/com/example/logistics/ui/PickUpUI.java new file mode 100644 index 0000000..0ffd4f1 --- /dev/null +++ b/src/Logistics/app/src/main/java/com/example/logistics/ui/PickUpUI.java @@ -0,0 +1,305 @@ +package com.example.logistics.ui; + +import androidx.fragment.app.Fragment; + +import android.annotation.SuppressLint; +import android.app.AlertDialog; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.graphics.Color; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.webkit.WebSettings; +import android.widget.Button; +import android.widget.EditText; +import android.widget.Toast; + +import androidx.annotation.Nullable; + +import com.example.logistics.R; +import com.example.logistics.manager.goodManager; +import com.example.logistics.manager.operationManager; +import com.example.logistics.tools.JWebSocketClient; +import com.google.zxing.integration.android.IntentIntegrator; +import com.google.zxing.integration.android.IntentResult; + +import org.java_websocket.handshake.ServerHandshake; +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.net.URI; + +public class PickUpUI extends Fragment implements View.OnClickListener{ + + private Button mButton; + private Context mContext; + private JWebSocketClient client; + private AlertDialog alert; + private AlertDialog alert2; + private EditText PickUpCode; + private EditText PhoneNum; + private String pickupcode; + private String phonenum; + private int shelfnum = 1; + private int floornum = 1; + + private String ws = "ws://192.168.43.203:8080/result"; + + private String TAG = "PickUpUI"; + + int flag = 0; //flag=0:chushi + + public PickUpUI(){ + + } + @Nullable + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + View view = inflater.inflate(R.layout.my_fragment2,container,false); + + mButton = (Button)view.findViewById(R.id.Pick_Button); + mButton.setOnClickListener(this); + mContext = getActivity(); + + Log.i("set", "listner"); + + setAlert(); + return view; + } + + + void setAlert(){ + alert = new android.app.AlertDialog.Builder(mContext) + .setTitle("提醒") + .setMessage("是否确认取件") + .setPositiveButton("确认", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialogInterface, int i) { + Log.d("alert","yes"); + //add(operation); + JSONObject js = new JSONObject(); + try { + js.put("content", "yes"); + js.put("op", "confirm"); + } catch (JSONException e) { + e.printStackTrace(); + } + flag = 1; + + mButton.setText("确认"); + + client.send(js.toString()); + Log.d("alert", "send"); + } + }) + .setNegativeButton("取消", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialogInterface, int i) { + Log.d("alert","no"); + + JSONObject js = new JSONObject(); + try { + js.put("confirm", "no"); + js.put("op", "confirm"); + } catch (JSONException e) { + e.printStackTrace(); + } + + client.send(js.toString()); + } + }) + .create(); + Log.d(TAG, "setAlert"); + } + + void setWebsocket(){ + URI uri = URI.create(ws); + client = new JWebSocketClient(uri){ + @Override + public void onMessage(String message) { + Log.e("JWebSocketClientService", "收到的消息:" + message); + Log.e("alert",message); + if(message.equals("confirm")){ + alert.dismiss(); + hand2.sendEmptyMessage(3); + Log.e("alert","show"); + } + } + + @Override + public void onOpen(ServerHandshake handshakedata) { + super.onOpen(handshakedata); + Log.e("JWebSocketClientService", "websocket连接成功"); + }; + }; + connect(); + } + + private void connect() { + new Thread() { + @Override + public void run() { + try { + //connectBlocking多出一个等待操作,会先连接再发送,否则未连接发送会报错 + client.connectBlocking(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + }.start(); + + } + + @SuppressLint("HandlerLeak") + final Handler hand2 = new Handler(){ + @Override + public void handleMessage(Message msg){ + alert.show(); + } + }; + + @Override + public void onClick(View view) { + switch(view.getId()){ + case R.id.Pick_Button: + Log.e(TAG, "onclick"); + if(flag == 1){ + confirm(); + }else{ + pickup(); + } + + + } + } + + void confirm(){ + JSONObject js = new JSONObject(); + try { + js.put("op","finish"); + client.send(js.toString()); + + flag = 0; + mButton.setText("取件"); + client.onClose(1,"close",true); + Log.d("finish", "over"); + + } catch (JSONException jsonException) { + jsonException.printStackTrace(); + } + } + + + public void pickup(){ + AlertDialog.Builder builder = new AlertDialog.Builder(mContext); + + View view2 = View.inflate(mContext, R.layout.pickup, null); + + PickUpCode = (EditText) view2.findViewById(R.id.pk_PickUp); + PhoneNum = (EditText) view2.findViewById(R.id.pk_PhoneNum); + Button button = (Button) view2.findViewById(R.id.pk_button); + + builder.setTitle("取件").setView(view2); + + alert2 = builder.create(); + alert2.show(); + button.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + Log.e(TAG,"onclick"); + setWebsocket(); + pickupcode = PickUpCode.getText().toString().trim(); + phonenum = PhoneNum.getText().toString().trim(); + Log.d("onclick", "123"); + new Thread() { + @Override + public void run() { + int msg = 0; + + operationManager operationManager = new operationManager(); + goodManager goodManager = new goodManager(); + Bundle bundle = getArguments(); + + String user = bundle.getString("user"); + + msg = goodManager.pickup(pickupcode,phonenum); + + Log.d(TAG, "pickup"); + if(msg != 1){ + Log.d(TAG, "pickup,failed"); + hand1.sendEmptyMessage(msg); + return; + } + + Log.d(TAG, "pickup,success"); + + boolean flag1 = operationManager.add(pickupcode, user); + boolean flag2 = goodManager.delete(pickupcode); + + boolean flag = flag1 & flag2; + if (flag) { + msg = 1; + } + + hand1.sendEmptyMessage(msg); + } + }.start(); + } + }); + } + + @SuppressLint("HandlerLeak") + final Handler hand1 = new Handler() { + @Override + public void handleMessage(Message msg) { + if(msg.what == 0){ + Toast.makeText(mContext, "取件失败", Toast.LENGTH_SHORT).show(); + }else if(msg.what == 1){ + Toast.makeText(mContext, "加入队列成功", Toast.LENGTH_SHORT).show(); + joinQueue(); + }else if(msg.what == 2){ + Toast.makeText(mContext, "手机号错误", Toast.LENGTH_SHORT).show(); + }else if(msg.what == 3){ + Toast.makeText(mContext, "取件码不存在", Toast.LENGTH_SHORT).show(); + } + } + }; + + void joinQueue(){ + alert2.dismiss(); + if (client != null && client.isOpen()) { + + JSONObject js = new JSONObject(); + JSONObject con = new JSONObject(); + try { + Log.d(TAG, pickupcode); + Log.d(TAG, phonenum); + + con.put("code", Integer.parseInt(pickupcode)); + con.put("shelf", shelfnum); + con.put("floor", floornum); + con.put("user", "xcr"); + js.put("content", con); + js.put("op", "connect"); + } catch (JSONException jsonException) { + jsonException.printStackTrace(); + } + + if (null != client) { + Log.e("JWebSocketClientService", "发送的消息:" + js.toString()); + client.send(js.toString()); + //暂时将发送的消息加入消息列表,实际以发送成功为准(也就是服务器返回你发的消息时) + } + } + } +} \ No newline at end of file diff --git a/src/Logistics/app/src/main/java/com/example/logistics/ui/MyFragment1.java b/src/Logistics/app/src/main/java/com/example/logistics/ui/SearchUI.java similarity index 81% rename from src/Logistics/app/src/main/java/com/example/logistics/ui/MyFragment1.java rename to src/Logistics/app/src/main/java/com/example/logistics/ui/SearchUI.java index 46caef0..e9bf32b 100644 --- a/src/Logistics/app/src/main/java/com/example/logistics/ui/MyFragment1.java +++ b/src/Logistics/app/src/main/java/com/example/logistics/ui/SearchUI.java @@ -2,9 +2,7 @@ package com.example.logistics.ui; import android.annotation.SuppressLint; -import android.app.AlertDialog; import android.content.Context; -import android.content.Intent; import android.os.Bundle; import android.os.Handler; import android.os.Message; @@ -14,23 +12,21 @@ import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.EditText; -import android.widget.TextView; import android.widget.Toast; import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; import com.example.logistics.R; -import com.example.logistics.dao.goodDao; -import com.example.logistics.dao.userDao; +import com.example.logistics.manager.goodManager; -public class MyFragment1 extends Fragment implements View.OnClickListener{ +public class SearchUI extends Fragment implements View.OnClickListener{ private Context mContext; private Button mButton; private EditText mPickUpCode; private EditText mPhoneNum; - public MyFragment1(){ + public SearchUI(){ } @Nullable @@ -60,8 +56,8 @@ public class MyFragment1 extends Fragment implements View.OnClickListener{ new Thread(){ @Override public void run(){ - goodDao goodDao = new goodDao(); - int msg = goodDao.search(mPickUpCode.getText().toString().trim(), mPhoneNum.getText().toString().trim(), getActivity()); + goodManager goodManager = new goodManager(); + int msg = goodManager.search(mPickUpCode.getText().toString().trim(), mPhoneNum.getText().toString().trim(), getActivity()); Log.e("Main", "msg"); hand1.sendEmptyMessage(msg); } diff --git a/src/Logistics/app/src/main/java/com/example/logistics/ui/SignUpActivity.java b/src/Logistics/app/src/main/java/com/example/logistics/ui/SignUpActivity.java index f927349..55ef479 100644 --- a/src/Logistics/app/src/main/java/com/example/logistics/ui/SignUpActivity.java +++ b/src/Logistics/app/src/main/java/com/example/logistics/ui/SignUpActivity.java @@ -12,7 +12,7 @@ import android.widget.EditText; import android.widget.Toast; import com.example.logistics.R; -import com.example.logistics.dao.userDao; +import com.example.logistics.manager.userManager; import com.example.logistics.entity.User; public class SignUpActivity extends Activity { @@ -38,7 +38,7 @@ public class SignUpActivity extends Activity { @Override public void onClick(View v) { // 跳转到登录界面 - Intent intent = new Intent(SignUpActivity.this, MainActivity.class); + Intent intent = new Intent(SignUpActivity.this, LoginActivity.class); startActivity(intent); } } @@ -79,14 +79,14 @@ public class SignUpActivity extends Activity { @Override public void run(){ int msg = 0; - userDao userDao = new userDao(); + userManager userManager = new userManager(); - User uu = userDao.findUser(user.getUserName()); + User uu = userManager.findUser(user.getUserName()); if(uu != null){ msg = 1; //have this account }else{ - boolean flag = userDao.register(user); + boolean flag = userManager.register(user); if(flag){ msg = 2; } @@ -106,7 +106,7 @@ public class SignUpActivity extends Activity { Toast.makeText(getApplicationContext(), "该账号已存在,请换一个注册", Toast.LENGTH_SHORT).show(); }else if(msg.what == 2){ Toast.makeText(getApplicationContext(), "注册成功", Toast.LENGTH_SHORT).show(); - Intent intent = new Intent(SignUpActivity.this, MainActivity.class); + Intent intent = new Intent(SignUpActivity.this, LoginActivity.class); startActivity(intent); } } diff --git a/src/Logistics/app/src/main/res/layout/activity_main.xml b/src/Logistics/app/src/main/res/layout/activity_main.xml index 939e667..9e033a5 100644 --- a/src/Logistics/app/src/main/res/layout/activity_main.xml +++ b/src/Logistics/app/src/main/res/layout/activity_main.xml @@ -3,7 +3,7 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" - tools:context="com.example.logistics.ui.MainActivity"> + tools:context="com.example.logistics.ui.LoginActivity"> + + +