Browse Source

1、Json拼接方法修改,之前的字符串拼接方式非常消耗内存,改为通过fastjson的toJsonString方法
2、webview的会话已断开问题

RaoMeng 6 years ago
parent
commit
6ad653f64a
24 changed files with 210 additions and 94 deletions
  1. 0 3
      WeiChat/build.gradle
  2. 33 20
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/WebViewCommActivity.java
  3. 3 3
      WeiChat/version.properties
  4. 4 0
      app_core/common/build.gradle
  5. 7 7
      app_core/common/src/main/java/com/common/data/JSONUtil.java
  6. 16 7
      app_core/common/src/main/java/com/common/preferences/PreferenceUtils.java
  7. 10 9
      app_core/common/src/main/java/com/core/app/AppConfig.java
  8. 3 0
      app_core/common/src/main/java/com/core/app/MyApplication.java
  9. 1 0
      app_core/common/src/main/java/com/core/service/InitializeService.java
  10. 7 1
      app_core/common/src/main/java/com/core/utils/CommonInterfaceHandler.java
  11. 24 2
      app_core/common/src/main/res/layout/activity_mission_set.xml
  12. 1 0
      app_core/common/src/main/res/values-en/strings.xml
  13. 1 0
      app_core/common/src/main/res/values-zh-rCN/strings.xml
  14. 1 0
      app_core/common/src/main/res/values-zh-rTW/strings.xml
  15. 1 0
      app_core/common/src/main/res/values/strings.xml
  16. 2 1
      app_modular/apputils/src/main/AndroidManifest.xml
  17. 44 27
      app_modular/apputils/src/main/java/com/modular/apputils/presenter/BillPresenter.java
  18. 8 4
      app_modular/appworks/src/main/AndroidManifest.xml
  19. 24 2
      app_modular/appworks/src/main/java/com/uas/appworks/OA/erp/activity/MissionActivity.java
  20. 9 4
      app_modular/appworks/src/main/java/com/uas/appworks/OA/erp/activity/MissionSetActivity.java
  21. 1 0
      app_modular/appworks/src/main/java/com/uas/appworks/OA/erp/model/IMission.java
  22. 2 0
      app_modular/appworks/src/main/java/com/uas/appworks/OA/erp/presenter/IMissionPresenter.java
  23. 8 1
      app_modular/appworks/src/main/java/com/uas/appworks/OA/erp/presenter/MissionPresenter.java
  24. 0 3
      app_modular/appworks/src/main/java/com/uas/appworks/crm3_0/activity/CustomerVisitDetailsActivity.java

+ 0 - 3
WeiChat/build.gradle

@@ -184,9 +184,6 @@ dependencies {
     compile deps.stickyGridHeaders
     compile deps.materialDialogs
     compile deps.okhttp
-//    androidTestCompile deps.leakcanaryNp
-//    debugCompile deps.leakcanary
-//    releaseCompile deps.leakcanaryNp
     compile project(':common')
     compile project(':appmessages')
     compile project(':network')

+ 33 - 20
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/WebViewCommActivity.java

@@ -34,10 +34,13 @@ import com.common.system.SystemUtil;
 import com.core.app.MyApplication;
 import com.core.base.BaseActivity;
 import com.core.net.http.ViewUtil;
+import com.core.utils.ToastUtil;
 import com.modular.appmessages.model.SubMessage;
 import com.modular.login.activity.LoginActivity;
 import com.tencent.smtt.export.external.interfaces.SslError;
 import com.tencent.smtt.export.external.interfaces.SslErrorHandler;
+import com.tencent.smtt.export.external.interfaces.WebResourceRequest;
+import com.tencent.smtt.export.external.interfaces.WebResourceResponse;
 import com.tencent.smtt.sdk.CookieManager;
 import com.tencent.smtt.sdk.CookieSyncManager;
 import com.tencent.smtt.sdk.ValueCallback;
@@ -81,6 +84,7 @@ public class WebViewCommActivity extends BaseActivity implements View.OnClickLis
     private TextView tck_icon;
     private boolean isStartApp = false;
     private boolean isCookie;
+    private boolean isLoginSuccess = false;
     private int reCode = 201;
 
     private ValueCallback<Uri> mUploadMessage;
@@ -107,12 +111,13 @@ public class WebViewCommActivity extends BaseActivity implements View.OnClickLis
                     boolean success = JSON.parseObject(result).getBoolean("success");
 
                     if (success) {
+                        isLoginSuccess = true;
                         if (!jsonObject.isNull("sessionId")) {
                             CommonUtil.setSharedPreferences(WebViewCommActivity.this, "sessionId", jsonObject.getString("sessionId"));
                         }
                         doNextLoadURL();
                     }
-                } catch (JSONException e) {
+                } catch (Exception e) {
                     e.printStackTrace();
                 }
             }
@@ -122,12 +127,17 @@ public class WebViewCommActivity extends BaseActivity implements View.OnClickLis
     private void doNextLoadURL() {
         if (isCookie) {
             synCookies(this, url);
-        } else {
-            clearCookie();
         }
+        webView.loadUrl(url, getWebHeader());
+    }
+
+    private Map<String, String> getWebHeader() {
         Map<String, String> headers = new HashMap<>();
         headers.put("clientType", "uas client");
-        webView.loadUrl(url, headers);
+        headers.put("Cookie", com.core.utils.CommonUtil.getErpCookie(ct));
+        headers.put("sessionUser", com.core.utils.CommonUtil.getEmcode());
+        headers.put("sessionId", com.core.utils.CommonUtil.getSharedPreferences(ct, "sessionId"));
+        return headers;
     }
 
     @SuppressLint("SetJavaScriptEnabled")
@@ -200,7 +210,7 @@ public class WebViewCommActivity extends BaseActivity implements View.OnClickLis
             url = "http://www.baidu.com";
         }
         long oldtime = PreferenceUtils.getLong(this, TIME, System.currentTimeMillis());
-        if (((System.currentTimeMillis() - oldtime) / (1000 * 60)) > 20) {
+        if (((System.currentTimeMillis() - oldtime) / (1000 * 60)) > 10) {
             if (isCookie) {
                 login(this);
             }
@@ -226,20 +236,14 @@ public class WebViewCommActivity extends BaseActivity implements View.OnClickLis
 
         if (isCookie) {
             synCookies(this, url);
-        } else {
-            //   clearCookie();
         }
-        Map<String, String> headers = new HashMap<>();
-        headers.put("client-name", "uasClient");
-//          url="http://192.168.253.132:9090/platform-b2c/?client=true";
-        Log.d("webUrl", url);
-        webView.loadUrl(url, headers);
-//        webView.loadUrl("file:///android_asset/jsWithNative.html");
+
+        webView.loadUrl(url, getWebHeader());
         webView.setWebChromeClient(new ChromeClient());
         webView.setWebViewClient(new WebViewClient() {
             @Override
             public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
-                if (isCookie) {
+                if (isCookie && !isLoginSuccess) {
                     ViewUtil.ct = WebViewCommActivity.this;
                     ViewUtil.LoginERPTask(WebViewCommActivity.this, hander, reCode);
                 }
@@ -247,10 +251,19 @@ public class WebViewCommActivity extends BaseActivity implements View.OnClickLis
                 super.onReceivedError(view, errorCode, description, failingUrl);
             }
 
+            @Override
+            public void onReceivedHttpError(WebView webView, WebResourceRequest webResourceRequest, WebResourceResponse webResourceResponse) {
+                if (isCookie && !isLoginSuccess && webResourceResponse.getStatusCode() == 500) {
+                    ToastUtil.showToast(ct, "登录信息已过期,正在重新登录");
+                    ViewUtil.ct = WebViewCommActivity.this;
+                    ViewUtil.LoginERPTask(WebViewCommActivity.this, hander, reCode);
+                }
+                super.onReceivedHttpError(webView, webResourceRequest, webResourceResponse);
+            }
+
             @Override
             public boolean shouldOverrideUrlLoading(WebView view, String url) {
                 if (!TextUtils.isEmpty(url)) {
-                    Log.d("loadurl", url);
                     if (url.contains("https://account.ubtob.com/sso/login") ||
 //                            url.equals("https://sso.ubtob.com/") ||
                             url.equals("http://surecloseweb.com")) {
@@ -261,11 +274,11 @@ public class WebViewCommActivity extends BaseActivity implements View.OnClickLis
                     } else {
                         if (isCookie) {
                             synCookies(WebViewCommActivity.this, url);
-                            view.loadUrl(url);
+                            view.loadUrl(url, getWebHeader());
                         } else {
 //                        ViewUtil.ShowMessageTitleAutoDismiss(WebViewCommActivity.this,
 //                                "您的登录会话过期!请重新登录!",1000);
-                            view.loadUrl(url);
+                            view.loadUrl(url, getWebHeader());
                         }
                     }
                 }
@@ -329,9 +342,8 @@ public class WebViewCommActivity extends BaseActivity implements View.OnClickLis
                     + "&insId=" + mSubscriptionMessages.get(mPosition).getId()
                     + "&title=" + mSubscriptionMessages.get(mPosition).getTitle()
                     + "&sessionId=" + CommonUtil.getSharedPreferences(ct, "sessionId");
-            Map<String, String> headers = new HashMap<>();
-            headers.put("client-name", "uasClient");
-            webView.loadUrl(url, headers);
+
+            webView.loadUrl(url, getWebHeader());
         }
     }
 
@@ -486,6 +498,7 @@ public class WebViewCommActivity extends BaseActivity implements View.OnClickLis
         CookieManager cookieManager = CookieManager.getInstance();
         cookieManager.setAcceptCookie(true);
         cookieManager.removeSessionCookie();//移除
+        LogUtil.prinlnLongMsg("cookieERP", MyApplication.cookieERP.toString());
         Cookie sessionCookie = MyApplication.cookieERP;
         String cookieStr = sessionCookie.getName() + "="
                 + sessionCookie.getValue() + "; domain="

+ 3 - 3
WeiChat/version.properties

@@ -1,5 +1,5 @@
-#Fri May 10 10:17:38 CST 2019
+#Sun May 19 20:15:08 CST 2019
 debugName=972
-versionName=677
+versionName=679
 debugCode=972
-versionCode=232
+versionCode=234

+ 4 - 0
app_core/common/build.gradle

@@ -77,4 +77,8 @@ dependencies {
     compile deps.wechatSdk
     compile 'com.github.hss01248:NotifyUtil:1.0.1'
     compile deps.basePopup
+
+//    androidTestCompile deps.leakcanaryNp
+//    debugCompile deps.leakcanary
+//    releaseCompile deps.leakcanaryNp
 }

+ 7 - 7
app_core/common/src/main/java/com/common/data/JSONUtil.java

@@ -17,7 +17,7 @@ public class JSONUtil {
 
     public static <T> String map2JSON(Map<String, T> map) {
         if (map == null) return "";
-        StringBuilder builder = new StringBuilder("{\n");
+        /*StringBuilder builder = new StringBuilder("{\n");
         for (Map.Entry<String, T> e : map.entrySet()) {
             builder.append("\"" + e.getKey() + "\":");
             if (e.getValue() instanceof String || e.getValue() instanceof CharSequence) {
@@ -30,13 +30,13 @@ public class JSONUtil {
         }
         builder.deleteCharAt(builder.length() - 1);
         builder.deleteCharAt(builder.length() - 1);
-        builder.append("\n}");
-        return builder.toString();
+        builder.append("\n}");*/
+        return JSON.toJSONString(map);
     }
 
     public static <T> String map2JSON(List<Map<String, T>> maps) {
         if (maps == null || maps.size() <= 0) return "";
-        StringBuilder builder = new StringBuilder("[\n");
+        /*StringBuilder builder = new StringBuilder("[\n");
         for (Map<String, T> m : maps) {
             builder.append("{\n");
             for (Map.Entry<String, T> e : m.entrySet()) {
@@ -53,8 +53,8 @@ public class JSONUtil {
         }
         StringUtil.removieLast(builder);
         StringUtil.removieLast(builder);
-        builder.append("\n]");
-        return builder.toString();
+        builder.append("\n]");*/
+        return JSON.toJSONString(maps);
     }
 
     public static String param2Url(String url, Map<String, Object> param) {
@@ -215,7 +215,7 @@ public class JSONUtil {
     public static long getLong(JSONObject object, String... keys) {
         try {
             String i = getDataForJson(object, keys);
-            return i==null?0:Long.valueOf(i);
+            return i == null ? 0 : Long.valueOf(i);
         } catch (Exception e) {
             e.printStackTrace();
             return 0;

+ 16 - 7
app_core/common/src/main/java/com/common/preferences/PreferenceUtils.java

@@ -10,16 +10,15 @@ import com.common.config.BaseConfig;
  * SharedPreferences存储数据类
  */
 public class PreferenceUtils {
-    public interface Constants{
-        String  AUTO_SIGN_SW="AUTO_SIGN_SW";//是否开启自动打卡
-        String  SAVE_SYSTEM_SCHEDULE="saveSystemSchedule";//是否保存日程到系统
-        String  DEF_WARN_TIME="DEF_WARN_TIME";//默认提醒时间设置
-        String  DEF_REPEAT_TIME="DEF_repeat_TIME";//默认重复时间
+    public interface Constants {
+        String AUTO_SIGN_SW = "AUTO_SIGN_SW";//是否开启自动打卡
+        String SAVE_SYSTEM_SCHEDULE = "saveSystemSchedule";//是否保存日程到系统
+        String DEF_WARN_TIME = "DEF_WARN_TIME";//默认提醒时间设置
+        String DEF_REPEAT_TIME = "DEF_repeat_TIME";//默认重复时间
 
     }
 
 
-
     private static SharedPreferences sp;
 
     private static SharedPreferences getPreferences(Context context) {
@@ -74,7 +73,6 @@ public class PreferenceUtils {
     }
 
     /**
-     *
      * @param key
      * @param value
      */
@@ -191,5 +189,16 @@ public class PreferenceUtils {
 
         }
     }
+
+    public static void remove(String key) {
+        try {
+            SharedPreferences sp = getPreferences(BaseConfig.getContext());
+            Editor editor = sp.edit();
+            editor.remove(key);
+            editor.commit();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
 }
 

+ 10 - 9
app_core/common/src/main/java/com/core/app/AppConfig.java

@@ -19,6 +19,7 @@ public class AppConfig {
     public final static String ALARMA_CLICK = "ALARMA_CLICK";//判断是否选中提醒
     public final static String AUTO_MISSION = "AUTO_MISSION";//是否自动外勤
     public final static String NEED_PROCESS = "NEED_PROCESS";//外勤设置是否需要审批
+    public final static String FACE_SIGN = "FACE_SIGN";//外勤设置是否开启人脸打卡
 
     public final static String ALARM_MISSION_TIME = "ALARM_MISSION_TIME";//提醒时间
     public final static String ALARM_MISSION_DISTANCE = "ALARM_MISSION_DISTANCE";//有效距离
@@ -132,7 +133,7 @@ public class AppConfig {
             editor.putString("apiUrl", apiUrl);
         }
 
-		/* 2、上传 的服务器地址 */
+        /* 2、上传 的服务器地址 */
         String uploadUrl = configBean.getUploadUrl();
         if (TextUtils.isEmpty(uploadUrl)) {
             uploadUrl = configSharePre.getString("uploadUrl", "http://192.168.1.240/");
@@ -140,7 +141,7 @@ public class AppConfig {
             editor.putString("uploadUrl", uploadUrl);
         }
 
-		/* 3、头像下载地址 */
+        /* 3、头像下载地址 */
         String downloadAvatarUrl = configBean.getDownloadAvatarUrl();
         if (TextUtils.isEmpty(downloadAvatarUrl)) {
             downloadAvatarUrl = configSharePre.getString("downloadAvatarUrl", "http://192.168.1.240/");
@@ -148,7 +149,7 @@ public class AppConfig {
             editor.putString("downloadAvatarUrl", downloadAvatarUrl);
         }
 
-		/* 4、Xmpp 服务器IP地址 */
+        /* 4、Xmpp 服务器IP地址 */
         String XMPPHost = configBean.getXMPPHost();
         if (TextUtils.isEmpty(XMPPHost)) {
             XMPPHost = configSharePre.getString("XMPPHost", "121.37.30.15");
@@ -164,7 +165,7 @@ public class AppConfig {
         }
         editor.commit();
 
-		/* 赋值给AppConfig对象 */
+        /* 赋值给AppConfig对象 */
         AppConfig config = new AppConfig();
         config.apiUrl = apiUrl;
         config.uploadUrl = uploadUrl;
@@ -198,14 +199,14 @@ public class AppConfig {
 
         config.USER_NEAR = apiUrl + "nearby/user";//查询搜索列表
 
-		/* 附近 */
+        /* 附近 */
         config.NEARBY_USER = apiUrl + "nearby/user";// 获取附近的用户
 
-		/* 商务圈 */
+        /* 商务圈 */
         config.USER_CIRCLE_MESSAGE = apiUrl + "b/circle/msg/user/ids";// 获取某个人的商务圈消息
         config.DOWNLOAD_CIRCLE_MESSAGE = apiUrl + "b/circle/msg/ids";// 下载商务圈消息
 
-		/* 好友 */
+        /* 好友 */
         config.FRIENDS_ATTENTION_LIST = apiUrl + "friends/attention/list";// 获取关注列表
         config.FRIENDS_REMARK = apiUrl + "friends/remark";// 备注好友
         config.FRIENDS_BLACKLIST_ADD = apiUrl + "friends/blacklist/add";// 拉黑
@@ -215,7 +216,7 @@ public class AppConfig {
         config.APP_QUER_YUSER = apiUrl + "user/appQueryuser";// 添加通讯录
         config.FRIENDS_BLACKLIST_DELETE = apiUrl + "friends/blacklist/delete";// 取消拉黑
 
-		/* 群聊 */
+        /* 群聊 */
         config.ROOM_ADD = apiUrl + "room/add";// 创建群组
         config.ROOM_DELETE = apiUrl + "room/delete";// 删除群组
         config.ROOM_UPDATE = apiUrl + "room/update";// 设置群组
@@ -228,7 +229,7 @@ public class AppConfig {
         config.ROOM_LIST_HIS = apiUrl + "/room/list/his";// 获取某个用户已加入的房间列表
         config.ROOM_JOIN = apiUrl + "/room/join";// 加入房间
 
-		/* 商务圈 */
+        /* 商务圈 */
         config.MSG_ADD_URL = apiUrl + "b/circle/msg/add";// 发布一条公共消息的接口
         config.MSG_LIST = apiUrl + "b/circle/msg/list";// 获取公共消息的接口
         config.MSG_USER_LIST = apiUrl + "b/circle/msg/user";// 获取某个用户的最新公共消息

+ 3 - 0
app_core/common/src/main/java/com/core/app/MyApplication.java

@@ -1,6 +1,7 @@
 package com.core.app;
 
 import android.app.Activity;
+import android.app.Application;
 import android.content.Context;
 import android.graphics.Bitmap;
 import android.os.Build;
@@ -103,6 +104,8 @@ public class MyApplication extends BaseApplication {
         //后台服务初始化application
         InitializeService.initApplication(this);
 
+//        LeakCanary.install(this);
+
         INSTANCE = this;
         mRequestQueue = Volley.newRequestQueue(this);
         mHttpUtils = new HttpUtils();

+ 1 - 0
app_core/common/src/main/java/com/core/service/InitializeService.java

@@ -1,5 +1,6 @@
 package com.core.service;
 
+import android.app.Application;
 import android.app.IntentService;
 import android.content.Context;
 import android.content.Intent;

+ 7 - 1
app_core/common/src/main/java/com/core/utils/CommonInterfaceHandler.java

@@ -58,7 +58,13 @@ public class CommonInterfaceHandler {
         JSONObject object = null;
         if (!isB2b) {
             JSONArray array = o.getJSONArray("result");
-            if (ListUtils.isEmpty(array)) return false;
+            if (ListUtils.isEmpty(array)) {
+                PreferenceUtils.putBoolean(AppConfig.AUTO_MISSION, false);
+                PreferenceUtils.putBoolean(AppConfig.NEED_PROCESS, false);
+                PreferenceUtils.putInt(AppConfig.ALARM_MISSION_DISTANCE, 0);
+                PreferenceUtils.putInt(AppConfig.AUTO_MISSION_TIME, 0);
+                return false;
+            }
             object = array.getJSONObject(0);
         } else object = o;
         int distance = JSONUtil.getInt(object, "mo_distance", "MO_DISTANCE");

+ 24 - 2
app_core/common/src/main/res/layout/activity_mission_set.xml

@@ -1,6 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<LinearLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
@@ -106,4 +105,27 @@
             android:layout_alignParentRight="true"
             android:layout_centerVertical="true" />
     </RelativeLayout>
+
+    <View
+        android:layout_width="match_parent"
+        android:layout_height="1px"
+        android:background="@color/item_line" />
+
+    <RelativeLayout style="@style/commonSettingItem"
+        android:visibility="gone">
+
+        <TextView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_centerVertical="true"
+            android:text="@string/work_out_face_sign"
+            android:textSize="@dimen/commonSettingItemTextSize" />
+
+        <com.core.widget.view.SwitchView
+            android:id="@+id/face_sign_sv"
+            android:layout_width="40dp"
+            android:layout_height="25dp"
+            android:layout_alignParentRight="true"
+            android:layout_centerVertical="true" />
+    </RelativeLayout>
 </LinearLayout>

+ 1 - 0
app_core/common/src/main/res/values-en/strings.xml

@@ -1640,4 +1640,5 @@
     <string name="str_system_admin">系统管理员</string>
     <string name="font_size">字体大小</string>
     <string name="project_business_chance">项目商机</string>
+    <string name="work_out_face_sign">人脸打卡</string>
 </resources>

+ 1 - 0
app_core/common/src/main/res/values-zh-rCN/strings.xml

@@ -1712,5 +1712,6 @@
     <string name="srl_content_empty">SmartRefreshLayout中没有找到内容视图。您是否忘记在xml布局文件中添加?</string>
     <string name="srl_component_falsify" formatted="false">%s 虚假区域\n代表运行时拖动的高度【%.1fdp】 \n而不会显示任何东西</string>
     <string name="project_business_chance">项目商机</string>
+    <string name="work_out_face_sign">人脸打卡</string>
 
 </resources>

+ 1 - 0
app_core/common/src/main/res/values-zh-rTW/strings.xml

@@ -1752,6 +1752,7 @@
     <string name="str_system_admin">系统管理员</string>
     <string name="font_size">字体大小</string>
     <string name="project_business_chance">项目商机</string>
+    <string name="work_out_face_sign">人脸打卡</string>
     <!--end s商家设置-->
 
 </resources>

+ 1 - 0
app_core/common/src/main/res/values/strings.xml

@@ -2074,5 +2074,6 @@
 
     <string name="str_shipment_order">出货单</string>
     <string name="str_shipment_order_list">出货单列表</string>
+    <string name="work_out_face_sign">人脸打卡</string>
 
 </resources>

+ 2 - 1
app_modular/apputils/src/main/AndroidManifest.xml

@@ -57,7 +57,8 @@
             </intent-filter>
         </activity>
         <activity android:name=".activity.BillInputActivity"
-            android:windowSoftInputMode="stateHidden|adjustResize"/>
+            android:windowSoftInputMode="stateHidden|adjustResize"
+            android:hardwareAccelerated="false"/>
         <activity android:name=".activity.BillDetailsActivity"/>
         <activity
             android:name=".activity.PDFViewActivity"

+ 44 - 27
app_modular/apputils/src/main/java/com/modular/apputils/presenter/BillPresenter.java

@@ -128,20 +128,27 @@ public class BillPresenter extends BaseNetPresenter implements OnSmartHttpListen
             return;
         }
 
-        String formStoreStr = JSONUtil.map2JSON(formStore);
-        String gridStoreStr = JSONUtil.map2JSON(gridStoreList);
+//        String formStoreStr = JSONUtil.map2JSON(formStore);
+//        String gridStoreStr = JSONUtil.map2JSON(gridStoreList);
+        String formStoreStr = JSON.toJSONString(formStore);
+        String gridStoreStr = JSON.toJSONString(gridStoreList);
 
-        LogUtil.i("gong", "formStoreStr=" + formStoreStr);
-        LogUtil.i("gong", "gridStoreStr=" + gridStoreStr);
-        requestCompanyHttp(new Parameter.Builder()
-                        .url(mId == 0 ? "mobile/oa/commonSaveAndSubmit.action" : "mobile/commonUpdate.action")
-                        .addParams("caller", mCaller)
-                        .mode(Method.POST)
-                        .addParams("keyid", String.valueOf(mId))
-                        .addParams("formStore", formStoreStr)
-                        .addParams("gridStore", gridStoreStr)
-                        .record(SAVE_AND_SUBMIT)
-                , this);
+//        LogUtil.i("gong", "formStoreStr=" + formStoreStr);
+//        LogUtil.i("gong", "gridStoreStr=" + gridStoreStr);
+        try {
+            requestCompanyHttp(new Parameter.Builder()
+                            .url(mId == 0 ? "mobile/oa/commonSaveAndSubmit.action" : "mobile/commonUpdate.action")
+                            .addParams("caller", mCaller)
+                            .mode(Method.POST)
+                            .addParams("keyid", String.valueOf(mId))
+                            .addParams("formStore", formStoreStr)
+                            .addParams("gridStore", gridStoreStr)
+                            .record(SAVE_AND_SUBMIT)
+                    , this);
+        } catch (Exception e) {
+            iBill.dimssLoading();
+            iBill.showToast("网络请求异常");
+        }
     }
 
     public void saveAndSubmit(List<BillGroupModel.BillModel> formFields, List<BillGroupModel.GridTab> otherGridList, int flag) {
@@ -184,7 +191,8 @@ public class BillPresenter extends BaseNetPresenter implements OnSmartHttpListen
                     if (otherGridStoreItem == null) {
                         return;
                     }
-                    String otherGridStoreItemStr = JSONUtil.map2JSON(otherGridStoreItem);
+//                    String otherGridStoreItemStr = JSONUtil.map2JSON(otherGridStoreItem);
+                    String otherGridStoreItemStr = JSON.toJSONString(otherGridStoreItem);
                     JSONArray otherGridStoreItemArray = JSON.parseArray(otherGridStoreItemStr);
 
                     Map<String, Object> OtherGridStoreItemMap = new HashMap<>();
@@ -196,20 +204,29 @@ public class BillPresenter extends BaseNetPresenter implements OnSmartHttpListen
             }
         }
 
-        String formStoreStr = JSONUtil.map2JSON(formStore);
-        String otherGridStoreListStr = JSONUtil.map2JSON(otherGridStoreList);
-        LogUtil.prinlnLongMsg("billJson", formStoreStr);
-        LogUtil.prinlnLongMsg("billJson", otherGridStoreListStr);
+//        String formStoreStr = JSONUtil.map2JSON(formStore);
+//        String otherGridStoreListStr = JSONUtil.map2JSON(otherGridStoreList);
+        String formStoreStr = JSON.toJSONString(formStore);
+        String otherGridStoreListStr = JSON.toJSONString(otherGridStoreList);
+//        LogUtil.prinlnLongMsg("billJson", formStoreStr);
+//        LogUtil.prinlnLongMsg("billJson", otherGridStoreListStr);
+//        LogUtil.prinlnLongMsg("billJson2", formStoreStr);
+//        LogUtil.prinlnLongMsg("billJson2", otherGridStoreListStr);
 
-        requestCompanyHttp(new Parameter.Builder()
-                        .url(mId == 0 ? "mobile/oa/commonSaveAndSubmit.action" : "mobile/commonUpdate.action")
-                        .mode(Method.POST)
-                        .addParams("caller", mCaller)
-                        .addParams("keyid", String.valueOf(mId))
-                        .addParams("formStore", formStoreStr)
-                        .addParams("othergridStore", otherGridStoreListStr)
-                        .record(SAVE_AND_SUBMIT)
-                , this);
+        try {
+            requestCompanyHttp(new Parameter.Builder()
+                            .url(mId == 0 ? "mobile/oa/commonSaveAndSubmit.action" : "mobile/commonUpdate.action")
+                            .mode(Method.POST)
+                            .addParams("caller", mCaller)
+                            .addParams("keyid", String.valueOf(mId))
+                            .addParams("formStore", formStoreStr)
+                            .addParams("othergridStore", otherGridStoreListStr)
+                            .record(SAVE_AND_SUBMIT)
+                    , this);
+        } catch (Exception e) {
+            iBill.dimssLoading();
+            iBill.showToast("网络请求异常");
+        }
     }
 
     @Nullable

+ 8 - 4
app_modular/appworks/src/main/AndroidManifest.xml

@@ -537,7 +537,8 @@
                 <category android:name="android.intent.category.DEFAULT" />
             </intent-filter>
         </activity>
-        <activity android:name=".crm3_0.activity.CustomerBillInputActivity"></activity>
+        <activity android:name=".crm3_0.activity.CustomerBillInputActivity"
+            android:hardwareAccelerated="false"></activity>
         <activity android:name=".crm3_0.activity.CustomerDetails3_0Activity"></activity>
         <!-- 联系人 -->
         <activity 
@@ -582,14 +583,17 @@
         </activity>
         <activity android:name=".crm3_0.activity.CustomerVisitDetailsActivity" />
         <activity android:name=".crm3_0.activity.CustomerCareListActivity" />
-        <activity android:name=".crm3_0.activity.VisitRecordBillInputActivity" />
+        <activity android:name=".crm3_0.activity.VisitRecordBillInputActivity"
+            android:hardwareAccelerated="false" />
         <activity android:name=".crm3_0.activity.CusBillDetailsActivity" />
-        <activity android:name=".crm3_0.activity.CustomerVisitBillInputActivity" />
+        <activity android:name=".crm3_0.activity.CustomerVisitBillInputActivity"
+            android:hardwareAccelerated="false" />
         <activity android:name=".crm3_0.activity.CustomerContactActivity" />
         <activity android:name=".activity.businessManage.businessDetailActivity.BusinessDetailNewActivity" />
         <activity android:name=".activity.businessManage.BusinessCompanyListActivity" />
         <activity android:name=".activity.businessManage.businessChangeStage.BusinessChangeStageActivity" />
-        <activity android:name=".activity.businessManage.BusinessBillInputActivity" />
+        <activity android:name=".activity.businessManage.BusinessBillInputActivity"
+            android:hardwareAccelerated="false" />
         
         <activity android:name=".crm3_0.activity.BillInputBindActivity"/>
     </application>

+ 24 - 2
app_modular/appworks/src/main/java/com/uas/appworks/OA/erp/activity/MissionActivity.java

@@ -1,5 +1,6 @@
 package com.uas.appworks.OA.erp.activity;
 
+import android.Manifest;
 import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.DialogInterface;
@@ -16,6 +17,7 @@ import android.view.View;
 import android.widget.PopupWindow;
 
 import com.afollestad.materialdialogs.MaterialDialog;
+import com.baidu.aip.excep.activity.RealTimeDetectFaceActivty;
 import com.baidu.mapapi.model.LatLng;
 import com.baidu.mapapi.search.route.DrivingRouteLine;
 import com.baidu.mapapi.search.route.DrivingRouteResult;
@@ -35,6 +37,7 @@ import com.core.model.SelectBean;
 import com.core.utils.BaiduMapUtil;
 import com.core.utils.OnGetDrivingRouteResult;
 import com.core.utils.TimeUtils;
+import com.core.utils.ToastUtil;
 import com.core.utils.time.wheel.DateTimePicker;
 import com.core.widget.view.Activity.SelectActivity;
 import com.core.widget.view.model.SelectAimModel;
@@ -79,7 +82,7 @@ public class MissionActivity extends OABaseActivity implements View.OnClickListe
         }
     };
 
-    private void updateLocation(){
+    private void updateLocation() {
         time = System.currentTimeMillis();
         locationOk = UasLocationHelper.getInstance().getUASLocation().isLocationOk();
         if (locationOk && adapter != null && !ListUtils.isEmpty(adapter.getModels())) {
@@ -92,6 +95,7 @@ public class MissionActivity extends OABaseActivity implements View.OnClickListe
             }
         }
     }
+
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
@@ -149,7 +153,7 @@ public class MissionActivity extends OABaseActivity implements View.OnClickListe
     }
 
     private void initEvent() {
-        if (!showSubmit){
+        if (!showSubmit) {
             findViewById(R.id.click_btn).setVisibility(View.GONE);
             findViewById(R.id.additem_tv).setVisibility(View.GONE);
         }
@@ -235,6 +239,21 @@ public class MissionActivity extends OABaseActivity implements View.OnClickListe
         adapter.notifyItemChanged(postion);
     }
 
+    @Override
+    public void faceSign(MissionModel missionModel) {
+        requestPermission(Manifest.permission.CAMERA, new Runnable() {
+            @Override
+            public void run() {
+                startActivityForResult(new Intent(ct, RealTimeDetectFaceActivty.class), 0x223);
+            }
+        }, new Runnable() {
+            @Override
+            public void run() {
+                ToastUtil.showToast(ct, R.string.not_camera_permission);
+            }
+        });
+    }
+
     @Override
     public void onClick(View view) {
         if (view.getId() == R.id.additem_tv) {
@@ -396,6 +415,9 @@ public class MissionActivity extends OABaseActivity implements View.OnClickListe
                 });
             }
 
+        } else if (requestCode == 0x223 && RESULT_OK == resultCode) {
+//            presenter.signinMission(null);
+            toast("人脸验证通过");
         }
     }
 

+ 9 - 4
app_modular/appworks/src/main/java/com/uas/appworks/OA/erp/activity/MissionSetActivity.java

@@ -25,8 +25,7 @@ import com.uas.appworks.R;
 import java.util.ArrayList;
 
 public class MissionSetActivity extends SupportToolBarActivity implements View.OnClickListener {
-    private SwitchView auto_sv;
-    private SwitchView needprocess_sv;
+    private SwitchView auto_sv, needprocess_sv, mFaceSignSwitchView;
     private RelativeLayout distance_rl;
     private RelativeLayout time_rl;
     private TextView distance_tv;
@@ -37,6 +36,7 @@ public class MissionSetActivity extends SupportToolBarActivity implements View.O
     private int time = 30;
     private boolean adminStatus;
     private boolean needprocess;
+    private boolean mFaceSign;
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
@@ -103,6 +103,7 @@ public class MissionSetActivity extends SupportToolBarActivity implements View.O
         }
         auto_sv = (SwitchView) findViewById(R.id.auto_sv);
         needprocess_sv = (SwitchView) findViewById(R.id.needprocess_sv);
+        mFaceSignSwitchView = findViewById(R.id.face_sign_sv);
         distance_rl = (RelativeLayout) findViewById(R.id.distance_rl);
         time_rl = (RelativeLayout) findViewById(R.id.time_rl);
         distance_tv = (TextView) findViewById(R.id.distance_tv);
@@ -110,8 +111,12 @@ public class MissionSetActivity extends SupportToolBarActivity implements View.O
 
         isAuto = PreferenceUtils.getBoolean(AppConfig.AUTO_MISSION, false);
         needprocess = PreferenceUtils.getBoolean(AppConfig.NEED_PROCESS, false);
+        mFaceSign = PreferenceUtils.getBoolean(AppConfig.FACE_SIGN, false);
+
         auto_sv.setChecked(isAuto);
         needprocess_sv.setChecked(needprocess);
+        mFaceSignSwitchView.setChecked(mFaceSign);
+
         setClickAble(isAuto);
         distance = PreferenceUtils.getInt(AppConfig.ALARM_MISSION_DISTANCE, 500);
         distance_tv.setText(distance + "m");
@@ -144,7 +149,7 @@ public class MissionSetActivity extends SupportToolBarActivity implements View.O
         SelectBean bean = null;
         ArrayList<SelectBean> beans = null;
 
-        if (view.getId() == R.id.distance_rl){
+        if (view.getId() == R.id.distance_rl) {
             str = new String[]{"100m", "200m", "500m", "1000m", "1500m"};
             beans = new ArrayList<>();
             for (String e : str) {
@@ -158,7 +163,7 @@ public class MissionSetActivity extends SupportToolBarActivity implements View.O
             intent.putParcelableArrayListExtra("data", beans);
             intent.putExtra("title", getResources().getString(R.string.effective_range));
             startActivityForResult(intent, 0x22);
-        }else if (view.getId() == R.id.time_rl){
+        } else if (view.getId() == R.id.time_rl) {
             str = new String[]{"10" + getString(R.string.minute), "20" + getString(R.string.minute),
                     "30" + getString(R.string.minute), "45" + getString(R.string.minute), "60" + getString(R.string.minute)};
             beans = new ArrayList<>();

+ 1 - 0
app_modular/appworks/src/main/java/com/uas/appworks/OA/erp/model/IMission.java

@@ -18,4 +18,5 @@ public interface IMission extends HttpImp {
 
 	void changModelStatus(int status, int postion);
 
+	void faceSign(MissionModel missionModel);
 }

+ 2 - 0
app_modular/appworks/src/main/java/com/uas/appworks/OA/erp/presenter/IMissionPresenter.java

@@ -24,6 +24,8 @@ public interface IMissionPresenter {
 
 	void sign(List<MissionModel> models);
 
+	void signinMission(MissionModel model);
+
 	void finder(String licker);
 
 

+ 8 - 1
app_modular/appworks/src/main/java/com/uas/appworks/OA/erp/presenter/MissionPresenter.java

@@ -1,5 +1,6 @@
 package com.uas.appworks.OA.erp.presenter;
 
+import android.Manifest;
 import android.content.Context;
 import android.content.Intent;
 import android.os.Bundle;
@@ -7,6 +8,7 @@ import android.os.Bundle;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.baidu.aip.excep.activity.RealTimeDetectFaceActivty;
 import com.common.LogUtil;
 import com.common.data.DateFormatUtil;
 import com.common.data.JSONUtil;
@@ -134,7 +136,11 @@ public class MissionPresenter implements IMissionPresenter, OnHttpResultListener
         if (mission == null) {
             iMission.showToast("无可签到签退的计划", R.color.load_error);
         } else {
-            signinMission(mission);
+            if (false) {
+                iMission.faceSign(mission);
+            } else {
+                signinMission(mission);
+            }
         }
     }
 
@@ -435,6 +441,7 @@ public class MissionPresenter implements IMissionPresenter, OnHttpResultListener
 
     private boolean submiting = false;
 
+    @Override
     public void signinMission(MissionModel model) {
         if (model == null) return;
         if (!MyApplication.getInstance().isNetworkActive()) {

+ 0 - 3
app_modular/appworks/src/main/java/com/uas/appworks/crm3_0/activity/CustomerVisitDetailsActivity.java

@@ -642,9 +642,6 @@ public class CustomerVisitDetailsActivity extends OABaseActivity implements Bill
         String formStoreStr = JSONUtil.map2JSON(formStore);
         String gridStoreStr = JSONUtil.map2JSON(gridStoreList);
 
-        LogUtil.i("update", "formStoreStr=" + formStoreStr);
-        LogUtil.i("update", "gridStoreStr=" + gridStoreStr);
-
         String sessionId = CommonUtil.getSharedPreferences(ct, "sessionId");
         String emCode = CommonUtil.getEmcode();
         com.me.network.app.http.HttpRequest.getInstance().sendRequest(CommonUtil.getAppBaseUrl(mContext),