Sfoglia il codice sorgente

1.修改Android Apex Mobile Result本地数据保存与查询。

Pen Li 7 anni fa
parent
commit
e737fe77db

+ 6 - 2
Apex Mobile/app/src/main/java/com/usai/apex/apexResult/ApexResultActivity.java

@@ -148,7 +148,8 @@ public class ApexResultActivity extends AppCompatActivity implements ApexResultP
         super.onActivityResult(requestCode, resultCode, data);
 
         if (requestCode == RequestCode.Field_Setting) {
-            refresh();
+            mPresenter.dirty = true;
+            loadData();
         }
     }
 
@@ -222,6 +223,9 @@ public class ApexResultActivity extends AppCompatActivity implements ApexResultP
     // endregion
 
     // region Action
+    private void loadData() {
+        mPresenter.loadData();
+    }
 
     private void refresh() {
         mPresenter.refreshData();
@@ -367,7 +371,7 @@ public class ApexResultActivity extends AppCompatActivity implements ApexResultP
                                     return;
                                 }
 
-                                mPresenter.saveSearchParametersWithName(name);
+                                mPresenter.saveSearchParametersWithName(getIntent().toUri(0), name);
 
                             }
                         })

+ 50 - 3
Apex Mobile/app/src/main/java/com/usai/apex/apexResult/ApexResultPresenter.java

@@ -9,6 +9,7 @@ import com.usai.apex.apexResult.model.ApexResultDocumentModel;
 import com.usai.apex.apexResult.model.ApexResultShipModel;
 import com.usai.apex.operationQueue.OperationQueue;
 import com.usai.util.Network;
+import com.usai.util.RAUtil;
 
 
 import org.json.JSONArray;
@@ -48,11 +49,13 @@ public class ApexResultPresenter implements ApexResultAdapter.ApexResultAdapterD
 
     private WeakReference<ApexResultProtocol> mWeakDelegate;
     private Bundle mParams;
+    private String mFields;
     private int offset = 0;
     private static final int detal = 20;
     private ArrayList<ApexResultBaseModel> mDataArray;
     private JSONArray rowActions;
     private JSONArray actions;
+    public boolean dirty = true;
 
     public ApexResultPresenter(ApexResultProtocol delegate, Bundle params) {
         if (delegate == null) {
@@ -65,6 +68,13 @@ public class ApexResultPresenter implements ApexResultAdapter.ApexResultAdapterD
         } else {
             mParams = params;
         }
+
+        if (mParams.containsKey("columns")) {
+
+            dirty = false;
+        } else {
+            dirty = true;
+        }
     }
     // endregion
 
@@ -74,6 +84,8 @@ public class ApexResultPresenter implements ApexResultAdapter.ApexResultAdapterD
     private static final String Offset_Key = "Offset_Key";
     private static final String Row_Actions_key = "Row_Actions_Key";
     private static final String Actions_Key = "Actions_Key";
+    private static final String Dirty_Key = "Dirty_Key";
+    private static final String Display_Fields_Key = "Display_Fields_Key";
 
     public void onSaveInstanceState(Bundle outState) {
         if (outState != null) {
@@ -92,6 +104,11 @@ public class ApexResultPresenter implements ApexResultAdapter.ApexResultAdapterD
             if (actions != null) {
                 outState.putString(Actions_Key, actions.toString());
             }
+
+            outState.putBoolean(Dirty_Key, dirty);
+            if (mFields != null) {
+                outState.putString(Display_Fields_Key, mFields);
+            }
         }
     }
 
@@ -120,6 +137,9 @@ public class ApexResultPresenter implements ApexResultAdapter.ApexResultAdapterD
             } catch (JSONException e) {
                 e.printStackTrace();
             }
+
+            mFields = savedInstanceState.getString(Display_Fields_Key);
+            dirty = savedInstanceState.getBoolean(Dirty_Key);
         }
     }
 
@@ -258,6 +278,11 @@ public class ApexResultPresenter implements ApexResultAdapter.ApexResultAdapterD
             getDelegate().onStartLoading();
         }
 
+        if (mFields == null) {
+            mFields = "";
+        }
+
+
         OperationQueue.sharedQueue().addOperationTask(new OperationQueue.OperationBackgroundCallBack() {
             @Override
             public Object operationDoInBackground() {
@@ -265,6 +290,7 @@ public class ApexResultPresenter implements ApexResultAdapter.ApexResultAdapterD
                 Bundle params = (Bundle) mParams.clone();
                 params.putInt("offset", offset);
                 params.putInt("limit", detal);
+                params.putString("columns", mFields);
                 JSONObject json = Network.fetchResult(params);
 
                 return json;
@@ -338,10 +364,21 @@ public class ApexResultPresenter implements ApexResultAdapter.ApexResultAdapterD
     }
 
     public void loadData() {
+
+        if (dirty) {
+            dirty = false;
+            String module_name = mParams.getString("module_name");
+            String fields = Network.getDisplayFieldsForFunction(module_name);
+            mFields = fields;
+        }
+
+        offset = 0;
         loadData(ApexResultFetchDataType.APEX_RESULT_FETCH_DATA_TYPE_INITIAL);
     }
 
     public void refreshData() {
+
+        offset = 0;
         loadData(ApexResultFetchDataType.APEX_RESULT_FETCH_DATA_TYPE_REFRESH);
     }
 
@@ -353,19 +390,29 @@ public class ApexResultPresenter implements ApexResultAdapter.ApexResultAdapterD
 
     // region Save Search Parameter
 
-    public void saveSearchParametersWithName(final String name) {
+    public void saveSearchParametersWithName(final String  intentStr, final String name) {
 
         if (getDelegate() != null) {
             getDelegate().onStartLoading();
         }
 
-        final String paramStr = mParams.toString();
+        JSONObject json = RAUtil.Bundle2Json(mParams);
+        if (mFields != null) {
+            try {
+                json.put("columns", mFields);
+            } catch (JSONException e) {
+                e.printStackTrace();
+            }
+        }
+
+
+        final String paramStr = json.toString();
         final String module_name = mParams.getString("module_name");
 
         OperationQueue.sharedQueue().addOperationTask(new OperationQueue.OperationBackgroundCallBack() {
             @Override
             public Object operationDoInBackground() {
-                return Network.saveSearchParametersForModuleWithName(paramStr, module_name, name);
+                return Network.saveSearchParametersForModuleWithName(intentStr, paramStr, module_name, name);
             }
         }, new OperationQueue.OperationCompletionCallBack() {
             @Override

+ 6 - 2
Apex Mobile/app/src/main/java/com/usai/apex/saved/SavedSearchFragment.java

@@ -20,6 +20,7 @@ import android.widget.TextView;
 
 import com.usai.apex.ApexTrackingApplication;
 import com.usai.apex.R;
+import com.usai.apex.apexResult.ApexResultActivity;
 import com.usai.apex.swipemenulistview.BaseSwipListAdapter;
 import com.usai.apex.swipemenulistview.SwipeMenu;
 import com.usai.apex.swipemenulistview.SwipeMenuCreator;
@@ -169,9 +170,12 @@ public class SavedSearchFragment extends AMListFragment
 //					dbUtil.get_fields(ApexTrackingApplication.get_user(), (String) searchresult.getData().get(position).get("module_name")));
 
 			parms.putString("columns",dbUtil.get_fields(ApexTrackingApplication.get_user(), (String) searchresult.getData().get(position).get("module_name")));
-			intent.putExtra("query_params",parms);
 
-			startActivity(intent);
+//			intent.putExtra("query_params",parms);
+//			startActivity(intent);
+
+			ApexResultActivity.startResultActivity(getActivity(), parms);
+
 		}
 		catch (URISyntaxException e)
 		{

+ 60 - 8
Apex Mobile/app/src/main/java/com/usai/util/Network.java

@@ -51,6 +51,7 @@ import org.apache.http.params.HttpConnectionParams;
 import org.apache.http.params.HttpParams;
 import org.apache.http.params.HttpProtocolParams;
 import org.apache.http.protocol.HTTP;
+import org.json.JSONArray;
 import org.json.JSONException;
 import org.json.JSONObject;
 
@@ -64,6 +65,7 @@ import android.content.pm.PackageInfo;
 import android.content.pm.PackageManager;
 import android.content.pm.PackageManager.NameNotFoundException;
 import android.database.Cursor;
+import android.database.SQLException;
 import android.database.sqlite.SQLiteDatabase;
 import android.database.sqlite.SQLiteStatement;
 import android.net.ConnectivityManager;
@@ -1952,18 +1954,68 @@ public class Network
 		// URL_FETCH_RESULT
 		String jstr = getJson(url, params);
 
-		return handleResponse(jstr);
+		JSONObject json = handleResponse(jstr);
+		if (json != null) {
+
+			JSONArray actions = dbUtil.getActionsForFunction(module_name, ApexTrackingApplication.get_user());
+			try {
+				json.put("actions", actions);
+			} catch (JSONException e) {
+				e.printStackTrace();
+			}
+		}
+		return json;
 	}
 
-	public static JSONObject saveSearchParametersForModuleWithName(String paramStr, String module, String name) {
+	public static JSONObject saveSearchParametersForModuleWithName(String intentStr, String paramStr, String module, String name) {
 
-		Bundle params = new Bundle();
-		params.putString("params", paramStr);
-		params.putString("module_name", module);
-		params.putString("name", name);
+		boolean success = true;
+		try {
+			SQLiteDatabase db = dbUtil.OpenDB(ApexTrackingApplication.get_instance(), null, true);
+
+			db.execSQL("insert into history(params,name,criterion,module_name,user,create_time) values('"
+					+ intentStr
+					+ "','"
+					+ name
+					+ "','"
+					+ paramStr
+					+ "','"
+					+ module
+					+ "','"
+					+ ApexTrackingApplication.get_user()
+					+ "',"
+					+ System.currentTimeMillis() + ")");
+			dbUtil.CloseDB(db);
 
-		String jstr = getJson(URL_SAVE_RESULT,params);
+		} catch (Exception e) {
+			e.printStackTrace();
+			success = false;
+		}
+
+		JSONObject json = new JSONObject();
+
+		try {
+			if (success) {
+
+				json.put("result", RESULT_TRUE);
+				json.put("err_msg", "save success.");
+
+			} else {
+
+				json.put("result", RESULT_FALSE);
+				json.put("err_msg", "Sorry, something is wrong.");
+			}
+		} catch (JSONException e) {
+			e.printStackTrace();
+		}
+
+		return json;
+	}
+
+	public static String getDisplayFieldsForFunction(String function) {
+
+		String user = ApexTrackingApplication.get_user();
+		return dbUtil.getDisplayFieldsForFunction(function, user);
 
-		return handleResponse(jstr);
 	}
 }

+ 48 - 0
Apex Mobile/app/src/main/java/com/usai/util/dbUtil.java

@@ -13,6 +13,8 @@ import android.util.Log;
 
 import com.usai.apex.ApexTrackingApplication;
 
+import org.json.JSONArray;
+
 import java.util.ArrayList;
 import java.util.List;
 
@@ -516,4 +518,50 @@ public class dbUtil
 		return sql.toString();
 	}
 
+	public static String getDisplayFieldsForFunction(String function, String user) {
+
+		StringBuffer fields = new StringBuffer();
+
+		SQLiteDatabase db = dbUtil.OpenDB(ApexTrackingApplication.get_instance(), null, false);
+		Cursor cursor = db.query("fields_info", new String[] { "name" }, "function_name='" + function + "' and user='" + user + "' and behavior=" + Network.BEHAVIOR_RESULT + " and show = 1", null, null, null, "priority , aname", null);
+		while (cursor.moveToNext())
+		{
+			String name = cursor.getString(0);
+			fields.append(String.format("%s,",name));
+		}
+		dbUtil.CloseCursor(cursor);
+		dbUtil.CloseDB(db);
+
+		if (fields.length() > 0) {
+			fields.deleteCharAt(fields.length() - 1);
+		}
+
+		return fields.toString();
+
+	}
+
+	public static JSONArray getActionsForFunction(String function, String user) {
+
+		String module_name = function;
+
+		SQLiteDatabase db = dbUtil.OpenDB(ApexTrackingApplication.get_instance(), null, false);
+		Cursor cursor = db.query("actions_info",
+				new String[] { "name" }, "function_name='"
+						+ module_name + "' and user='" + ApexTrackingApplication.get_user() + "'", null,
+				null, null, "priority", null);
+
+		JSONArray actions = new JSONArray();
+
+		while (cursor.moveToNext())
+		{
+			String name = cursor.getString(0);
+			actions.put(name);
+		}
+		dbUtil.CloseCursor(cursor);
+		dbUtil.CloseDB(db);
+
+		return actions;
+
+	}
+
 }