Browse Source

Merge branch 'feature' of https://gitlab.com/Arisono/SkWeiChat-Baidu into uu_v1.0

Arison 8 years ago
parent
commit
596dddb118

+ 3 - 1
WeiChat/src/main/res/menu/menu_outoffice.xml

@@ -2,8 +2,10 @@
 <menu xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto">
     <item
-        android:id="@id/title"
+        android:id="@+id/title"
         android:title="@string/user_setting"
         android:icon="@drawable/setting"
         app:showAsAction="always" />
+
+
 </menu>

+ 343 - 339
app_core/common/src/main/java/com/core/app/MyApplication.java

@@ -16,6 +16,7 @@ import com.android.volley.RequestQueue;
 import com.android.volley.toolbox.Volley;
 import com.baidu.mapapi.SDKInitializer;
 import com.common.config.BaseApplication;
+import com.common.config.BaseConfig;
 import com.common.preferences.PreferenceUtils;
 import com.common.preferences.SharedUtil;
 import com.core.db.DBOpenHelper;
@@ -26,6 +27,7 @@ import com.core.model.User;
 import com.core.net.NetWorkObservable;
 import com.core.net.location.BdLocationHelper;
 import com.core.net.ssl.AuthImageDownloader;
+import com.core.net.utils.NetUtils;
 import com.core.net.volley.FastVolley;
 import com.core.utils.CommonUtil;
 import com.facebook.stetho.Stetho;
@@ -58,346 +60,348 @@ import cat.ereza.customactivityoncrash.CustomActivityOnCrash;
  */
 public class MyApplication extends BaseApplication {
 
-    private static MyApplication INSTANCE = null;
-    /*********************
-     * 提供全局配置
-     ************************/
-    private AppConfig mConfig;
-    /*****************
-     * 提供全局的Volley
-     ***************************/
-
-    private FastVolley mFastVolley;
-    public static Cookie cookieERP;
-    public static RequestQueue mRequestQueue;
-    public static HttpUtils mHttpUtils;
-
-    /* 文件缓存的目录 */
-    public String mAppDir;
-    public String mPicturesDir;
-    public String mVoicesDir;
-    public String mVideosDir;
-    public String mFilesDir;
-    /***********************
-     * 保存当前登陆用户的全局信息
-     ***************/
-    public String roomName;
-    public String mAccessToken;
-    public long mExpiresIn;
-    public int mUserStatus;
-    public boolean mUserStatusChecked = false;
-    public User mLoginUser = new User();// 当前登陆的用户
-
-    /*******************
-     * 初始化图片加载
-     **********************/
-    // 显示的设置
-    public static DisplayImageOptions mNormalImageOptions;
-    public static DisplayImageOptions mAvatarRoundImageOptions;
-    public static DisplayImageOptions mAvatarNormalImageOptions;
-
-    /*********************
-     * 提供网络全局监听
-     ************************/
-    private NetWorkObservable mNetWorkObservable;
-    /*********************
-     * 百度地图定位服务
-     ************************/
-    private BdLocationHelper mBdLocationHelper;
-
-    public BdLocationHelper getBdLocationHelper() {
-        if (mBdLocationHelper == null)
-            mBdLocationHelper = new BdLocationHelper(this);
-        mBdLocationHelper.requestLocation();
-        return mBdLocationHelper;
-    }
-
-
-    @Override
-    public void initConfig() throws Exception {
-        Stetho.initializeWithDefaults(this);
-        SpeechUtility.createUtility(this, SpeechConstant.APPID + "=5876dc99");
-        //自定义闪退页面初始化
-        CustomActivityOnCrash.install(this);
-        //设置ErrorActivity在后台启动,默认为true
-        CustomActivityOnCrash.setLaunchErrorActivityWhenInBackground(true);
-        //设置展示详细错误信息,默认为true
-        CustomActivityOnCrash.setShowErrorDetails(true);
-        //启用APP Restart,默认为true
-        CustomActivityOnCrash.setEnableAppRestart(true);
-        //设置重新启动的activity
-        //  CustomActivityOnCrash.setRestartActivityClass(SplashActivity.class);
-        Config.REDIRECT_URL = "http://sns.whalecloud.com/sina2/callback";
-        INSTANCE = this;
-        ZXingLibrary.initDisplayOpinion(this);
-        mRequestQueue = Volley.newRequestQueue(this);
-
-        mHttpUtils = new HttpUtils();
-        configHttpUtils();
-
-       
-        SharedUtil.init(this);
-        initShareAPI();
-        //  CrashReport.initCrashReport(getApplicationContext(), "900050585", false);
-        PreferenceUtils.putBoolean(this, Constants.IS_NOTIFICATION, false);//不进行通知
-        new Handler().postDelayed(new Runnable() {
-            @Override
-            public void run() {
-                //定位场景设置
-                MobclickAgent.setScenarioType(MyApplication.this, MobclickAgent.EScenarioType.E_UM_NORMAL);
-                initUmengStatistics();
-                SDKInitializer.initialize(getApplicationContext());
-                // 初始化数据库
-                SQLiteHelper.copyDatabaseFile(getApplicationContext());
-                // 初始化定位
-                getBdLocationHelper();
-                // 初始化App目录
-                initAppDir();
-                // 初始化图片加载
-                initImageLoader();
-             
-            }
-        }, 1);
-        if (AppConfig.DEBUG) {
-            Log.d(AppConfig.TAG, "MyApplication onCreate");
-        }
-        if (AppConfig.DEBUG) {
-            StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectAll().penaltyLog().build());
-            StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder().detectAll().penaltyLog().build());
-        }
-        // 初始化网络监听
-        mNetWorkObservable = new NetWorkObservable(this);
-        initErpDB();
-    /*    try {
-            com.core.app.Constants.cleanRed(this);
+	private static MyApplication INSTANCE = null;
+	/*********************
+	 * 提供全局配置
+	 ************************/
+	private AppConfig mConfig;
+	/*****************
+	 * 提供全局的Volley
+	 ***************************/
+
+	private FastVolley mFastVolley;
+	public static Cookie cookieERP;
+	public static RequestQueue mRequestQueue;
+	public static HttpUtils mHttpUtils;
+
+	/* 文件缓存的目录 */
+	public String mAppDir;
+	public String mPicturesDir;
+	public String mVoicesDir;
+	public String mVideosDir;
+	public String mFilesDir;
+	/***********************
+	 * 保存当前登陆用户的全局信息
+	 ***************/
+	public String roomName;
+	public String mAccessToken;
+	public long mExpiresIn;
+	public int mUserStatus;
+	public boolean mUserStatusChecked = false;
+	public User mLoginUser = new User();// 当前登陆的用户
+
+	/*******************
+	 * 初始化图片加载
+	 **********************/
+	// 显示的设置
+	public static DisplayImageOptions mNormalImageOptions;
+	public static DisplayImageOptions mAvatarRoundImageOptions;
+	public static DisplayImageOptions mAvatarNormalImageOptions;
+
+	/*********************
+	 * 提供网络全局监听
+	 ************************/
+	private NetWorkObservable mNetWorkObservable;
+	/*********************
+	 * 百度地图定位服务
+	 ************************/
+	private BdLocationHelper mBdLocationHelper;
+
+	public BdLocationHelper getBdLocationHelper() {
+		if (mBdLocationHelper == null)
+			mBdLocationHelper = new BdLocationHelper(this);
+		mBdLocationHelper.requestLocation();
+		return mBdLocationHelper;
+	}
+
+
+	@Override
+	public void initConfig() throws Exception {
+		Stetho.initializeWithDefaults(this);
+		SpeechUtility.createUtility(this, SpeechConstant.APPID + "=5876dc99");
+		//自定义闪退页面初始化
+		CustomActivityOnCrash.install(this);
+		//设置ErrorActivity在后台启动,默认为true
+		CustomActivityOnCrash.setLaunchErrorActivityWhenInBackground(true);
+		//设置展示详细错误信息,默认为true
+		CustomActivityOnCrash.setShowErrorDetails(true);
+		//启用APP Restart,默认为true
+		CustomActivityOnCrash.setEnableAppRestart(true);
+		//设置重新启动的activity
+		//  CustomActivityOnCrash.setRestartActivityClass(SplashActivity.class);
+		Config.REDIRECT_URL = "http://sns.whalecloud.com/sina2/callback";
+		INSTANCE = this;
+		ZXingLibrary.initDisplayOpinion(this);
+		mRequestQueue = Volley.newRequestQueue(this);
+
+		mHttpUtils = new HttpUtils();
+		configHttpUtils();
+
+
+		SharedUtil.init(this);
+		initShareAPI();
+		//  CrashReport.initCrashReport(getApplicationContext(), "900050585", false);
+		PreferenceUtils.putBoolean(this, Constants.IS_NOTIFICATION, false);//不进行通知
+		new Handler().postDelayed(new Runnable() {
+			@Override
+			public void run() {
+				//定位场景设置
+				MobclickAgent.setScenarioType(MyApplication.this, MobclickAgent.EScenarioType.E_UM_NORMAL);
+				initUmengStatistics();
+				SDKInitializer.initialize(getApplicationContext());
+				// 初始化数据库
+				SQLiteHelper.copyDatabaseFile(getApplicationContext());
+				// 初始化定位
+				getBdLocationHelper();
+				// 初始化App目录
+				initAppDir();
+				// 初始化图片加载
+				initImageLoader();
+
+			}
+		}, 1);
+		if (AppConfig.DEBUG) {
+			Log.d(AppConfig.TAG, "MyApplication onCreate");
+		}
+		if (AppConfig.DEBUG) {
+			StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectAll().penaltyLog().build());
+			StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder().detectAll().penaltyLog().build());
+		}
+		// 初始化网络监听
+		mNetWorkObservable = new NetWorkObservable(this);
+		initErpDB();
+	/*    try {
+	        com.core.app.Constants.cleanRed(this);
         } catch (PackageManager.NameNotFoundException e) {
             e.printStackTrace();
         }*/
-        registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
-            @Override
-            public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
-            }
-
-            @Override
-            public void onActivityStarted(Activity activity) {
-            }
-
-            @Override
-            public void onActivityResumed(Activity activity) {
-                MyActivityManager.getInstance().setCurrentActivity(activity);
-            }
-
-            @Override
-            public void onActivityPaused(Activity activity) {
-            }
-
-            @Override
-            public void onActivityStopped(Activity activity) {
-            }
-
-            @Override
-            public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
-            }
-
-            @Override
-            public void onActivityDestroyed(Activity activity) {
-            }
-        });
-    }
-
-    public void destory() {
-        if (AppConfig.DEBUG) {
-            Log.d(AppConfig.TAG, "MyApplication destory");
-        }
-        // 结束百度定位
-        if (mBdLocationHelper != null) {
-            mBdLocationHelper.release();
-        }
-        // 关闭网络状态的监听
-        if (mNetWorkObservable != null) {
-            mNetWorkObservable.release();
-        }
-        // 清除图片加载
-        ImageLoader.getInstance().destroy();
-        releaseFastVolley();
-        android.os.Process.killProcess(android.os.Process.myPid());
-    }
-
-    private void initErpDB() {
-        DatabaseManager.initializeInstance(DBOpenHelper.getInstance(this));
-    }
-
-    /**
-     * @desc:初始化分享组件
-     * @author:Arison on 2016/9/29
-     */
-    public void initShareAPI() {
-        PlatformConfig.setWeixin("wx2539cc96bf158e00", "b057aa3e807ba7c505a2f03cc541bbf6");
-        PlatformConfig.setSinaWeibo("493318722", "7def652c3683603b08bab87d34b1f944");
-        PlatformConfig.setQQZone("1104894295", "Nk8zMIz5YSqwRQ1F");
-    }
-
-    private void initUmengStatistics() {
-        MobclickAgent.UMAnalyticsConfig config = new MobclickAgent.UMAnalyticsConfig(this, "57ea27bb67e58e088c003bbf",
-                "baidu", MobclickAgent.EScenarioType.E_UM_NORMAL);
-        MobclickAgent.startWithConfigure(config);
-        if (!CommonUtil.isReleaseVersion()) {//当前为开发版本时候不需要上传友盟
-            MobclickAgent.setCatchUncaughtExceptions(false);
-        }
-    }
-
-    /**
-     * 为HttpUtils配置参数
-     */
-    private void configHttpUtils() {
-        mHttpUtils.configRequestThreadPoolSize(4);
-        mHttpUtils.configRequestRetryCount(3);
-        mHttpUtils.configResponseTextCharset("utf-8");
-        mHttpUtils.configTimeout(10000);
-    }
-
-    public boolean isNetworkActive() {
-        if (mNetWorkObservable != null) {
-            return mNetWorkObservable.isNetworkActive();
-        }
-        return true;
-    }
-
-    public void registerNetWorkObserver(NetWorkObservable.NetWorkObserver observer) {
-        if (mNetWorkObservable != null) {
-            mNetWorkObservable.registerObserver(observer);
-        }
-    }
-
-    public void unregisterNetWorkObserver(NetWorkObservable.NetWorkObserver observer) {
-        if (mNetWorkObservable != null) {
-            mNetWorkObservable.unregisterObserver(observer);
-        }
-    }
-
-    private void initAppDir() {
-        File file = getExternalFilesDir(null);
-        if (file != null) {
-            if (!file.exists()) {
-                file.mkdirs();
-            }
-            mAppDir = file.getAbsolutePath();
-        }
-
-        file = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
-        if (file != null) {
-            if (!file.exists()) {
-                file.mkdirs();
-            }
-            mPicturesDir = file.getAbsolutePath();
-        }
-
-        file = getExternalFilesDir(Environment.DIRECTORY_MUSIC);
-        if (file != null) {
-            if (!file.exists()) {
-                file.mkdirs();
-            }
-            mVoicesDir = file.getAbsolutePath();
-        }
-        file = getExternalFilesDir(Environment.DIRECTORY_MOVIES);
-        if (file != null) {
-            if (!file.exists()) {
-                file.mkdirs();
-            }
-            mVideosDir = file.getAbsolutePath();
-        }
-        file = getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS);
-        if (file != null) {
-            if (!file.exists()) {
-                file.mkdirs();
-            }
-            mFilesDir = file.getAbsolutePath();
-        }
-    }
-
-    private void initImageLoader() {
-        int memoryCacheSize = (int) (Runtime.getRuntime().maxMemory() / 5);
-        MemoryCacheAware<String, Bitmap> memoryCache;
-        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) {
-            memoryCache = new LruMemoryCache(memoryCacheSize);
-        } else {
-            memoryCache = new LRULimitedMemoryCache(memoryCacheSize);
-        }
-
-        mNormalImageOptions = new DisplayImageOptions.Builder().bitmapConfig(Bitmap.Config.RGB_565).cacheInMemory(true).cacheOnDisc(true)
-                .resetViewBeforeLoading(false).showImageForEmptyUri(R.drawable.image_download_fail_icon)
-                .showImageOnFail(R.drawable.image_download_fail_icon).build();
-
-        mAvatarRoundImageOptions = new DisplayImageOptions.Builder().bitmapConfig(Bitmap.Config.RGB_565).
-                cacheInMemory(true).cacheOnDisc(true)
-                .displayer(new RoundedBitmapDisplayer(10)).
-                        resetViewBeforeLoading(true).
-                        showImageForEmptyUri(R.drawable.avatar_normal)
-                .showImageOnFail(R.drawable.avatar_normal).showImageOnLoading(R.drawable.avatar_normal).build();
-
-        mAvatarNormalImageOptions = new DisplayImageOptions.Builder().bitmapConfig(Bitmap.Config.RGB_565).cacheInMemory(true).cacheOnDisc(true)
-                .resetViewBeforeLoading(true).showImageForEmptyUri(R.drawable.avatar_normal).showImageOnFail(R.drawable.avatar_normal)
-                .showImageOnLoading(R.drawable.avatar_normal).build();
-
-        ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(this).defaultDisplayImageOptions(mNormalImageOptions)
-                // .denyCacheImageMultipleSizesInMemory()
-                .discCache(new TotalSizeLimitedDiscCache(new File(mPicturesDir), 50 * 1024 * 1024))
-                // 最多缓存50M的图片
-                .discCacheFileNameGenerator(new Md5FileNameGenerator())
-                .memoryCache(memoryCache)
-                .tasksProcessingOrder(QueueProcessingType.LIFO)
-                .threadPriority(Thread.NORM_PRIORITY - 2)
-                .imageDownloader(new AuthImageDownloader(this))
-                .denyCacheImageMultipleSizesInMemory()
-                .threadPoolSize(4)
-                .build();
-        // Initialize ImageLoader with configuration.
-        ImageLoader.getInstance().init(config);
-    }
-
-
-    public void setConfig(AppConfig config) {
-        mConfig = config;
-    }
-
-    public AppConfig getConfig() {
-        if (mConfig == null) {
-            mConfig = AppConfig.initConfig(getApplicationContext(), new ConfigBean());
-        }
-        return mConfig;
-    }
-
-    public FastVolley getFastVolley() {
-        if (mFastVolley == null) {
-            synchronized (MyApplication.class) {
-                if (mFastVolley == null) {
-                    mFastVolley = new FastVolley(this);
-                    mFastVolley.start();
-                }
-            }
-        }
-        return mFastVolley;
-    }
-
-    private void releaseFastVolley() {
-        if (mFastVolley != null) {
-            mFastVolley.stop();
-        }
-    }
-
-
-    @Override
-    protected void attachBaseContext(Context base) {
-        super.attachBaseContext(base);
-        MultiDex.install(this);
-    }
-
-
-    public String getLoginUserId() {
-        return (mLoginUser != null && !TextUtils.isEmpty(mLoginUser.getUserId())) ? mLoginUser.getUserId() : "";
-    }
-
-    public static MyApplication getInstance() {
-        return INSTANCE;
-    }
+		registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
+			@Override
+			public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
+			}
+
+			@Override
+			public void onActivityStarted(Activity activity) {
+			}
+
+			@Override
+			public void onActivityResumed(Activity activity) {
+				MyActivityManager.getInstance().setCurrentActivity(activity);
+			}
+
+			@Override
+			public void onActivityPaused(Activity activity) {
+			}
+
+			@Override
+			public void onActivityStopped(Activity activity) {
+			}
+
+			@Override
+			public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
+			}
+
+			@Override
+			public void onActivityDestroyed(Activity activity) {
+			}
+		});
+	}
+
+	public void destory() {
+		if (AppConfig.DEBUG) {
+			Log.d(AppConfig.TAG, "MyApplication destory");
+		}
+		// 结束百度定位
+		if (mBdLocationHelper != null) {
+			mBdLocationHelper.release();
+		}
+		// 关闭网络状态的监听
+		if (mNetWorkObservable != null) {
+			mNetWorkObservable.release();
+		}
+		// 清除图片加载
+		ImageLoader.getInstance().destroy();
+		releaseFastVolley();
+		android.os.Process.killProcess(android.os.Process.myPid());
+	}
+
+	private void initErpDB() {
+		DatabaseManager.initializeInstance(DBOpenHelper.getInstance(this));
+	}
+
+	/**
+	 * @desc:初始化分享组件
+	 * @author:Arison on 2016/9/29
+	 */
+	public void initShareAPI() {
+		PlatformConfig.setWeixin("wx2539cc96bf158e00", "b057aa3e807ba7c505a2f03cc541bbf6");
+		PlatformConfig.setSinaWeibo("493318722", "7def652c3683603b08bab87d34b1f944");
+		PlatformConfig.setQQZone("1104894295", "Nk8zMIz5YSqwRQ1F");
+	}
+
+	private void initUmengStatistics() {
+		MobclickAgent.UMAnalyticsConfig config = new MobclickAgent.UMAnalyticsConfig(this, "57ea27bb67e58e088c003bbf",
+				"baidu", MobclickAgent.EScenarioType.E_UM_NORMAL);
+		MobclickAgent.startWithConfigure(config);
+		if (!CommonUtil.isReleaseVersion()) {//当前为开发版本时候不需要上传友盟
+			MobclickAgent.setCatchUncaughtExceptions(false);
+		}
+	}
+
+	/**
+	 * 为HttpUtils配置参数
+	 */
+	private void configHttpUtils() {
+		mHttpUtils.configRequestThreadPoolSize(4);
+		mHttpUtils.configRequestRetryCount(3);
+		mHttpUtils.configResponseTextCharset("utf-8");
+		mHttpUtils.configTimeout(10000);
+	}
+
+	public boolean isNetworkActive() {
+//        if (mNetWorkObservable != null) {
+//            return mNetWorkObservable.isNetworkActive();
+//        }else{
+//	        return true;
+//        }
+		return NetUtils.isNetWorkConnected(BaseConfig.getContext());
+	}
+
+	public void registerNetWorkObserver(NetWorkObservable.NetWorkObserver observer) {
+		if (mNetWorkObservable != null) {
+			mNetWorkObservable.registerObserver(observer);
+		}
+	}
+
+	public void unregisterNetWorkObserver(NetWorkObservable.NetWorkObserver observer) {
+		if (mNetWorkObservable != null) {
+			mNetWorkObservable.unregisterObserver(observer);
+		}
+	}
+
+	private void initAppDir() {
+		File file = getExternalFilesDir(null);
+		if (file != null) {
+			if (!file.exists()) {
+				file.mkdirs();
+			}
+			mAppDir = file.getAbsolutePath();
+		}
+
+		file = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
+		if (file != null) {
+			if (!file.exists()) {
+				file.mkdirs();
+			}
+			mPicturesDir = file.getAbsolutePath();
+		}
+
+		file = getExternalFilesDir(Environment.DIRECTORY_MUSIC);
+		if (file != null) {
+			if (!file.exists()) {
+				file.mkdirs();
+			}
+			mVoicesDir = file.getAbsolutePath();
+		}
+		file = getExternalFilesDir(Environment.DIRECTORY_MOVIES);
+		if (file != null) {
+			if (!file.exists()) {
+				file.mkdirs();
+			}
+			mVideosDir = file.getAbsolutePath();
+		}
+		file = getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS);
+		if (file != null) {
+			if (!file.exists()) {
+				file.mkdirs();
+			}
+			mFilesDir = file.getAbsolutePath();
+		}
+	}
+
+	private void initImageLoader() {
+		int memoryCacheSize = (int) (Runtime.getRuntime().maxMemory() / 5);
+		MemoryCacheAware<String, Bitmap> memoryCache;
+		if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) {
+			memoryCache = new LruMemoryCache(memoryCacheSize);
+		} else {
+			memoryCache = new LRULimitedMemoryCache(memoryCacheSize);
+		}
+
+		mNormalImageOptions = new DisplayImageOptions.Builder().bitmapConfig(Bitmap.Config.RGB_565).cacheInMemory(true).cacheOnDisc(true)
+				.resetViewBeforeLoading(false).showImageForEmptyUri(R.drawable.image_download_fail_icon)
+				.showImageOnFail(R.drawable.image_download_fail_icon).build();
+
+		mAvatarRoundImageOptions = new DisplayImageOptions.Builder().bitmapConfig(Bitmap.Config.RGB_565).
+				cacheInMemory(true).cacheOnDisc(true)
+				.displayer(new RoundedBitmapDisplayer(10)).
+						resetViewBeforeLoading(true).
+						showImageForEmptyUri(R.drawable.avatar_normal)
+				.showImageOnFail(R.drawable.avatar_normal).showImageOnLoading(R.drawable.avatar_normal).build();
+
+		mAvatarNormalImageOptions = new DisplayImageOptions.Builder().bitmapConfig(Bitmap.Config.RGB_565).cacheInMemory(true).cacheOnDisc(true)
+				.resetViewBeforeLoading(true).showImageForEmptyUri(R.drawable.avatar_normal).showImageOnFail(R.drawable.avatar_normal)
+				.showImageOnLoading(R.drawable.avatar_normal).build();
+
+		ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(this).defaultDisplayImageOptions(mNormalImageOptions)
+				// .denyCacheImageMultipleSizesInMemory()
+				.discCache(new TotalSizeLimitedDiscCache(new File(mPicturesDir), 50 * 1024 * 1024))
+				// 最多缓存50M的图片
+				.discCacheFileNameGenerator(new Md5FileNameGenerator())
+				.memoryCache(memoryCache)
+				.tasksProcessingOrder(QueueProcessingType.LIFO)
+				.threadPriority(Thread.NORM_PRIORITY - 2)
+				.imageDownloader(new AuthImageDownloader(this))
+				.denyCacheImageMultipleSizesInMemory()
+				.threadPoolSize(4)
+				.build();
+		// Initialize ImageLoader with configuration.
+		ImageLoader.getInstance().init(config);
+	}
+
+
+	public void setConfig(AppConfig config) {
+		mConfig = config;
+	}
+
+	public AppConfig getConfig() {
+		if (mConfig == null) {
+			mConfig = AppConfig.initConfig(getApplicationContext(), new ConfigBean());
+		}
+		return mConfig;
+	}
+
+	public FastVolley getFastVolley() {
+		if (mFastVolley == null) {
+			synchronized (MyApplication.class) {
+				if (mFastVolley == null) {
+					mFastVolley = new FastVolley(this);
+					mFastVolley.start();
+				}
+			}
+		}
+		return mFastVolley;
+	}
+
+	private void releaseFastVolley() {
+		if (mFastVolley != null) {
+			mFastVolley.stop();
+		}
+	}
+
+
+	@Override
+	protected void attachBaseContext(Context base) {
+		super.attachBaseContext(base);
+		MultiDex.install(this);
+	}
+
+
+	public String getLoginUserId() {
+		return (mLoginUser != null && !TextUtils.isEmpty(mLoginUser.getUserId())) ? mLoginUser.getUserId() : "";
+	}
+
+	public static MyApplication getInstance() {
+		return INSTANCE;
+	}
 }

+ 2 - 0
app_core/common/src/main/java/com/core/net/http/ViewUtil.java

@@ -932,6 +932,8 @@ public class ViewUtil {
         params.put("username", username);
         params.put("password", password);
         params.put("master", master);
+        LogUtil.i("login","url="+url);
+        LogUtil.i("login","params="+JSONUtil.map2JSON(params));
         startNetThread(url, params, handler, Constants.SUCCESS_ERP, null, null, "post");
     }
 

+ 1 - 0
app_core/common/src/main/res/layout/image_setting_activity.xml

@@ -7,6 +7,7 @@
         android:id="@+id/image_im"
         android:layout_width="200dp"
         android:layout_height="200dp"
+        android:scaleType="fitXY"
         android:src="@drawable/common_header_boy"
         android:layout_centerInParent="true"
         />

+ 14 - 0
app_core/common/src/main/res/menu/menu_mission.xml

@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<menu xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto">
+    <item
+        android:id="@+id/title"
+        android:title="@string/user_setting"
+        android:icon="@drawable/setting"
+        app:showAsAction="always" />
+
+    <item
+        android:id="@+id/sign"
+        android:title="手动签"
+        app:showAsAction="always"/>
+</menu>

+ 3 - 1
app_core/common/src/main/res/menu/menu_outoffice.xml

@@ -2,8 +2,10 @@
 <menu xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto">
     <item
-        android:id="@id/title"
+        android:id="@+id/title"
         android:title="@string/user_setting"
         android:icon="@drawable/setting"
         app:showAsAction="always" />
+
+
 </menu>

+ 1 - 1
app_modular/appme/src/main/java/com/uas/appme/pedometer/utils/StepUtils.java

@@ -226,7 +226,7 @@ public class StepUtils {
 
 
     /**
-     * 分享UU运动的发消息方法
+     * 分享UU运动的发消息方法,只要在调用该方法的上下文中bind mService就可以了
      * @param ownerId
      * @param ownerName
      * @param objectId

+ 22 - 3
app_modular/appme/src/main/java/com/uas/appme/pedometer/view/PersonalPageActivity.java

@@ -1,7 +1,10 @@
 package com.uas.appme.pedometer.view;
 
+import android.content.ComponentName;
 import android.content.Intent;
+import android.content.ServiceConnection;
 import android.os.Bundle;
+import android.os.IBinder;
 import android.util.Log;
 import android.view.Gravity;
 import android.view.LayoutInflater;
@@ -65,7 +68,7 @@ public class PersonalPageActivity extends BaseActivity implements View.OnClickLi
     private PersonalStepBean mPersonalStepBean;
     private Button mbtnAttention;
     private LineChartView lineChart;
-    private String shareStepStr = "分享了UU运动内容给你";
+    private String shareStepStr = "我正在使用UU运动计步功能,你也一起来吧";
     private ImageView share_bitmap_im;
     private LinearLayout line_chart_ll;
     private int my_rank;
@@ -75,10 +78,16 @@ public class PersonalPageActivity extends BaseActivity implements View.OnClickLi
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.personal_page_activity);
+        bindService(CoreService.getIntent(), mConnection, BIND_AUTO_CREATE);
         initView();
     }
 
 
+    @Override
+    protected void onDestroy() {
+        super.onDestroy();
+        unbindService(mConnection);
+    }
     private void initView() {
         Intent intent = getIntent();
         title = intent.getStringExtra("title");
@@ -321,7 +330,7 @@ public class PersonalPageActivity extends BaseActivity implements View.OnClickLi
             startActivity(intent);
             closePopupWindow();
         }else if (v.getId() == R.id.not_rankingwith_tv){
-            ToastMessage("not_rankingwith_tv");
+//            ToastMessage("not_rankingwith_tv");
             closePopupWindow();
         }
     }
@@ -334,10 +343,20 @@ public class PersonalPageActivity extends BaseActivity implements View.OnClickLi
             String ownerId = MyApplication.getInstance().mLoginUser.getUserId();
             String ownerName = CommonUtil.getSharedPreferences(MyApplication.getInstance(), "erp_emname");
             String objectId = model.getImid();
-            mService = new CoreService();
             StepUtils.sendMessage(mService,ownerId,ownerName,objectId,shareStepStr);
             LogUtil.d("0x01",JSON.toJSONString(model));
         }
     }
+    private ServiceConnection mConnection = new ServiceConnection() {
+        @Override
+        public void onServiceDisconnected(ComponentName name) {
+            mService = null;
+        }
 
+        @Override
+        public void onServiceConnected(ComponentName name, IBinder service) {
+            mService = ((CoreService.CoreServiceBinder) service).getService();
+
+        }
+    };
 }

+ 70 - 44
app_modular/appme/src/main/java/com/uas/appme/settings/activity/BSettingLocationActivity.java

@@ -114,59 +114,85 @@ public class BSettingLocationActivity extends BaseActivity implements View.OnCli
         }else if (v.getId() == R.id.save_bt){
             LogUtil.prinlnLongMsg("mList", JSON.toJSONString(mList));
             if (ListUtils.isEmpty(mList)) return;
-            if (update && !StringUtil.isEmpty(st_id))
-                doUpdate();
-            else
-                doSave(mList);
+            if (!CommonUtil.isNetWorkConnected(this)) {
+                ToastMessage(getString(R.string.common_notlinknet));
+                return;
+            }else {
+                if (update && !StringUtil.isEmpty(st_id))
+                    doUpdate();
+                else
+                    doSave(mList);
+            }
+
         }
     }
 
     private void doUpdate() {
-        Map<String,Object> param = new HashMap<>();
-        param.put("st_id",st_id);
-        param.put("st_name",mList.get(0).getSt_name());
-        param.put("st_siid",mList.get(0).getSt_siid());
-        param.put("st_companyid",mList.get(0).getSt_companyid());
-        param.put("st_companyname",mList.get(0).getSt_companyname());
-
-        HttpClient httpClient = new HttpClient.Builder(Constant.BASE_BOOKING_SETTING_URL).isDebug(true).build(true);
-        httpClient.Api().send(new HttpClient.Builder()
-                .url("user/appServiceSet")
-                .add("map",JSON.toJSONString(param))
-                .add("token",MyApplication.getInstance().mAccessToken)
-                .method(Method.POST)
-                .build(),new ResultSubscriber<>(new ResultListener<Object>() {
-            @Override
-            public void onResponse(Object o) {
-                if (!JSONUtil.validate(o.toString()) || o == null) return;
-                LogUtil.prinlnLongMsg("appServiceSet", o.toString()+"");
-                if (o.toString().contains("result") && JSON.parseObject(o.toString()).getBooleanValue("result")) {
-                    Toast.makeText(ct,getString(R.string.update_success),Toast.LENGTH_LONG).show();
-                    setResult(20);
-                    finish();
+        if (StringUtil.isEmpty(mList.get(0).getSt_name())){
+            ToastMessage("请输入名称");
+           return;
+        }else {
+            Map<String,Object> param = new HashMap<>();
+            param.put("st_id",st_id);
+            param.put("st_name",mList.get(0).getSt_name());
+            param.put("st_siid",mList.get(0).getSt_siid());
+            param.put("st_companyid",mList.get(0).getSt_companyid());
+            param.put("st_companyname",mList.get(0).getSt_companyname());
+            progressDialog.show();save_bt.setEnabled(false);
+
+            HttpClient httpClient = new HttpClient.Builder(Constant.BASE_BOOKING_SETTING_URL).isDebug(true).build(true);
+            httpClient.Api().send(new HttpClient.Builder()
+                    .url("user/appServiceSet")
+                    .add("map",JSON.toJSONString(param))
+                    .add("token",MyApplication.getInstance().mAccessToken)
+                    .method(Method.POST)
+                    .build(),new ResultSubscriber<>(new ResultListener<Object>() {
+                @Override
+                public void onResponse(Object o) {
+                    if (!JSONUtil.validate(o.toString()) || o == null) return;
+                    LogUtil.prinlnLongMsg("appServiceSet", o.toString()+"");
+                    if (o.toString().contains("result") && JSON.parseObject(o.toString()).getBooleanValue("result")) {
+                        Toast.makeText(ct,getString(R.string.update_success),Toast.LENGTH_LONG).show();
+                        setResult(20);
+                        finish();
+                    }
+
+                    progressDialog.dismiss();save_bt.setEnabled(true);
                 }
-            }
-        }));
+            }));
+        }
+
     }
 
     private void doSave(List<BSetLocationBean> mList) {
-        HttpClient httpClient = new HttpClient.Builder(Constant.BASE_BOOKING_SETTING_URL).isDebug(true).build(true);
-        httpClient.Api().send(new HttpClient.Builder()
-                .url("user/appBatchPlace")
-                .add("map",JSON.toJSONString(mList))
-                .add("token",MyApplication.getInstance().mAccessToken)
-                .method(Method.POST)
-                .build(),new ResultSubscriber<>(new ResultListener<Object>() {
-            @Override
-            public void onResponse(Object o) {
-                if (!JSONUtil.validate(o.toString()) || o == null) return;
-                LogUtil.prinlnLongMsg("appBatchPlace", o.toString()+"");
-                if (o.toString().contains("result") && JSON.parseObject(o.toString()).getBooleanValue("result")) {
-                    Toast.makeText(ct,getString(R.string.common_save_success),Toast.LENGTH_LONG).show();
-                    finish();
-                }
+        for (int i = 0; i < mList.size(); i++) {
+            if (StringUtil.isEmpty(mList.get(i).getSt_name())){
+                ToastMessage("请输入名称");
+                break;
+            }else if (i==mList.size()-1){
+                progressDialog.show();save_bt.setEnabled(false);
+                HttpClient httpClient = new HttpClient.Builder(Constant.BASE_BOOKING_SETTING_URL).isDebug(true).build(true);
+                httpClient.Api().send(new HttpClient.Builder()
+                        .url("user/appBatchPlace")
+                        .add("map",JSON.toJSONString(mList))
+                        .add("token",MyApplication.getInstance().mAccessToken)
+                        .method(Method.POST)
+                        .build(),new ResultSubscriber<>(new ResultListener<Object>() {
+                    @Override
+                    public void onResponse(Object o) {
+                        if (!JSONUtil.validate(o.toString()) || o == null) return;
+                        LogUtil.prinlnLongMsg("appBatchPlace", o.toString()+"");
+                        if (o.toString().contains("result") && JSON.parseObject(o.toString()).getBooleanValue("result")) {
+                            Toast.makeText(ct,getString(R.string.common_save_success),Toast.LENGTH_LONG).show();
+                            finish();
+                        }
+                        progressDialog.dismiss();save_bt.setEnabled(true);
+                    }
+                }));
             }
-        }));
+        }
+
+
     }
 
     private class BSetLocationAdapter extends BaseAdapter{

+ 189 - 168
app_modular/appme/src/main/java/com/uas/appme/settings/activity/ImageSettingActivity.java

@@ -1,5 +1,6 @@
 package com.uas.appme.settings.activity;
 
+import android.Manifest;
 import android.app.Activity;
 import android.app.AlertDialog;
 import android.app.ProgressDialog;
@@ -18,6 +19,7 @@ import com.common.LogUtil;
 import com.common.data.JSONUtil;
 import com.common.data.ListUtils;
 import com.common.data.StringUtil;
+import com.common.system.PermissionUtil;
 import com.common.ui.CameraUtil;
 import com.common.ui.ProgressDialogUtil;
 import com.core.app.MyApplication;
@@ -34,6 +36,7 @@ import com.me.network.app.http.HttpClient;
 import com.me.network.app.http.Method;
 import com.me.network.app.http.rx.ResultListener;
 import com.me.network.app.http.rx.ResultSubscriber;
+import com.nostra13.universalimageloader.core.ImageLoader;
 import com.uas.appme.R;
 import com.uas.appme.settings.Constant.Constant;
 import com.umeng.socialize.utils.Log;
@@ -47,179 +50,197 @@ import java.util.Map;
  * function:
  */
 
-public class ImageSettingActivity extends BaseActivity implements View.OnClickListener{
-    private ImageView mImageIm;
-    private Uri mNewPhotoUri;// 拍照和图库 获得图片的URI
-    private static final int REQUEST_CODE_CAPTURE_PHOTO = 1;// 拍照
-    private static final int REQUEST_CODE_PICK_PHOTO = 2;//单选照片
-    private int Max_Size = 1;
-    private String photoselect=null;
-    private ProgressDialog mProgressDialog;
-
-    @Override
-    protected void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        setContentView(R.layout.image_setting_activity);
-
-        initView();
-    }
-
-    private void initView() {
-        mImageIm = (ImageView) findViewById(R.id.image_im);
-        findViewById(R.id.image_tv).setOnClickListener(this);
-        findViewById(R.id.btn_save).setOnClickListener(this);
-        mProgressDialog = ProgressDialogUtil.init(mContext, null, getString(R.string.please_wait));
-    }
-
-    @Override
-    public void onClick(View v) {
-        if (v.getId() == R.id.image_tv){
-            showSelectPictureDialog();
-        }else if (v.getId() == R.id.btn_save){
-            doSaveImage();
-        }
-
-    }
-    private void doSaveImage() {
-        if (StringUtil.isEmpty(photoselect)) return;
-        File waterBitmapToFile=  new File(photoselect);
-        if (!waterBitmapToFile.isFile()){
-            return;
-        }else {
-            com.lidroid.xutils.http.RequestParams params = new com.lidroid.xutils.http.RequestParams();
-            params.addQueryStringParameter("master", CommonUtil.getSharedPreferences(ct, "erp_master"));
-            params.addHeader("Cookie", "JSESSIONID=" + CommonUtil.getSharedPreferences(ct, "sessionId"));
-            params.addBodyParameter("userid", MyApplication.getInstance().mLoginUser.getUserId());
-            params.addBodyParameter("file1", waterBitmapToFile);
-            String url = "http://113.105.74.140:8080/upload/UploadServlet";
-            final HttpUtils http = new HttpUtils();
-            http.send(HttpRequest.HttpMethod.POST, url, params, new RequestCallBack<String>() {
-                @Override
-                public void onStart() {
-                    progressDialog.show();
-                    ViewUtil.ToastMessage(ct, getString(com.uas.appworks.R.string.sending_picture)+"...");
-                }
-                @Override
-                public void onLoading(long total, long current, boolean isUploading) {
-                    if (isUploading) {
-                    } else {
-                    }
-                }
-
-                @Override
-                public void onSuccess(ResponseInfo<String> responseInfo) {
-                    if (JSONUtil.validate(responseInfo.result) && JSON.parseObject(responseInfo.result).getBoolean("success")) {
-                        LogUtil.prinlnLongMsg("UploadServlet", responseInfo.result + "");
-
-                        try {
-                            JSONObject object = JSON.parseObject(responseInfo.result);
-                            JSONObject dataobject = object.getJSONObject("data");
-                            if (dataobject == null) return;
-                            JSONArray imagearray = dataobject.getJSONArray("images");
-                            if (ListUtils.isEmpty(imagearray)) return;
-                            String oUrl = imagearray.getJSONObject(0).getString("oUrl");
-                            if (!StringUtil.isEmpty(oUrl))
-                                doUpdateUrl(oUrl);
-                    } catch (Exception e) {
-                        e.printStackTrace();
-                    }
-                    }
-                }
-
-                @Override
-                public void onFailure(HttpException error, String msg) {
-                    ViewUtil.ToastMessage(ct, getString(com.uas.appworks.R.string.common_save_failed) + msg);
-                    progressDialog.dismiss();
-                }
-            });
-        }
-    }
-
-    private void doUpdateUrl(String oUrl) {
-        Map<String, Object> params = new HashMap<>();
-        params.put("sc_imageurl",oUrl);
-        params.put("sc_uu",Constant.BASE_COMPANYID);
+public class ImageSettingActivity extends BaseActivity implements View.OnClickListener {
+	private ImageView mImageIm;
+	private Uri mNewPhotoUri;// 拍照和图库 获得图片的URI
+	private static final int REQUEST_CODE_CAPTURE_PHOTO = 1;// 拍照
+	private static final int REQUEST_CODE_PICK_PHOTO = 2;//单选照片
+	private int Max_Size = 1;
+	private String photoselect = null;
+	private ProgressDialog mProgressDialog;
+
+	@Override
+	protected void onCreate(Bundle savedInstanceState) {
+		super.onCreate(savedInstanceState);
+		setContentView(R.layout.image_setting_activity);
+
+		initView();
+	}
+
+	@Override
+	protected void onResume() {
+		super.onResume();
+		String[] permissions = new String[]{Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE};
+		for (String permission : permissions) {
+			if (PermissionUtil.lacksPermissions(ct, permission)) {
+				PermissionUtil.requestPermission(this, PermissionUtil.DEFAULT_REQUEST, permission);
+			}
+		}
+	}
+
+	private void initView() {
+		mImageIm = (ImageView) findViewById(R.id.image_im);
+		findViewById(R.id.image_tv).setOnClickListener(this);
+		findViewById(R.id.btn_save).setOnClickListener(this);
+		mProgressDialog = ProgressDialogUtil.init(mContext, null, getString(R.string.please_wait));
+	}
+
+	@Override
+	public void onClick(View v) {
+		if (v.getId() == R.id.image_tv) {
+			showSelectPictureDialog();
+		} else if (v.getId() == R.id.btn_save) {
+			doSaveImage();
+		}
+
+	}
+
+	private void doSaveImage() {
+		if (StringUtil.isEmpty(photoselect)) return;
+		File waterBitmapToFile = new File(photoselect);
+		if (!waterBitmapToFile.isFile()) {
+			return;
+		} else {
+			com.lidroid.xutils.http.RequestParams params = new com.lidroid.xutils.http.RequestParams();
+			params.addQueryStringParameter("master", CommonUtil.getSharedPreferences(ct, "erp_master"));
+			params.addHeader("Cookie", "JSESSIONID=" + CommonUtil.getSharedPreferences(ct, "sessionId"));
+			params.addBodyParameter("userid", MyApplication.getInstance().mLoginUser.getUserId());
+			params.addBodyParameter("file1", waterBitmapToFile);
+			String url = "http://113.105.74.140:8080/upload/UploadServlet";
+			final HttpUtils http = new HttpUtils();
+			http.send(HttpRequest.HttpMethod.POST, url, params, new RequestCallBack<String>() {
+				@Override
+				public void onStart() {
+					progressDialog.show();
+					ViewUtil.ToastMessage(ct, getString(com.uas.appworks.R.string.sending_picture) + "...");
+				}
+
+				@Override
+				public void onLoading(long total, long current, boolean isUploading) {
+					if (isUploading) {
+					} else {
+					}
+				}
+
+				@Override
+				public void onSuccess(ResponseInfo<String> responseInfo) {
+					if (JSONUtil.validate(responseInfo.result) && JSON.parseObject(responseInfo.result).getBoolean("success")) {
+						LogUtil.prinlnLongMsg("UploadServlet", responseInfo.result + "");
+
+						try {
+							JSONObject object = JSON.parseObject(responseInfo.result);
+							JSONObject dataobject = object.getJSONObject("data");
+							if (dataobject == null) return;
+							JSONArray imagearray = dataobject.getJSONArray("images");
+							if (ListUtils.isEmpty(imagearray)) return;
+							String oUrl = imagearray.getJSONObject(0).getString("oUrl");
+							if (!StringUtil.isEmpty(oUrl))
+								doUpdateUrl(oUrl);
+						} catch (Exception e) {
+							e.printStackTrace();
+						}
+					}
+				}
+
+				@Override
+				public void onFailure(HttpException error, String msg) {
+					ViewUtil.ToastMessage(ct, getString(com.uas.appworks.R.string.common_save_failed) + msg);
+					progressDialog.dismiss();
+				}
+			});
+		}
+	}
+
+	private void doUpdateUrl(String oUrl) {
+		Map<String, Object> params = new HashMap<>();
+		params.put("sc_imageurl", oUrl);
+		params.put("sc_uu", Constant.BASE_COMPANYID);
 //        params.put("sc_uu", CommonUtil.getSharedPreferences(MyApplication.getInstance().getApplicationContext(), "erp_uu"));
-        HttpClient httpClient = new HttpClient.Builder(Constant.BASE_BOOKING_SETTING_URL).isDebug(true).build(true);
-        httpClient.Api().send(new HttpClient.Builder()
-                .url("user/appStorurl")
-                .add("map",JSONUtil.map2JSON(params))
-                .add("token",MyApplication.getInstance().mAccessToken)
-                .method(Method.POST)
-                .build(),new ResultSubscriber<>(new ResultListener<Object>() {
-            @Override
-            public void onResponse(Object o) {
-                LogUtil.prinlnLongMsg("hi/appStorurl", o.toString()+"ddd");
-                if (!JSONUtil.validate(o.toString()) || o == null) return;
-                if (o.toString().contains("result") && JSON.parseObject(o.toString()).getBoolean("result")){
-                    Toast.makeText(ct,getString(R.string.common_save_success),Toast.LENGTH_LONG).show();
-                    progressDialog.dismiss();
-                    finish();
-                }
-        }
-    }));
-    }
-
-
-    @Override
-    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
-        super.onActivityResult(requestCode, resultCode, data);
-
-        if (requestCode == 0x01 && resultCode == 0x02 && data != null){  //新的多选方式
-            photoselect = data.getStringArrayListExtra("files").get(0);
-            mImageIm.setImageURI(Uri.fromFile(new File(photoselect)));
-            Log.i("files0x01",data.getStringArrayListExtra("files").toString());
-            Log.i("files0x01",photoselect);
-        }else if (requestCode == REQUEST_CODE_CAPTURE_PHOTO) {// 拍照返回
-            if (resultCode == Activity.RESULT_OK) {
-                if (mNewPhotoUri != null) {
-                    photoselect = mNewPhotoUri.getPath();
-                    mImageIm.setImageURI(mNewPhotoUri);
-                } else {
-                    ToastUtil.showToast(this, com.uas.appworks.R.string.c_take_picture_failed);
-                }
-            }
-        }else if (requestCode == REQUEST_CODE_PICK_PHOTO) {// 传统单选方式,选择一张图片,然后立即调用裁减
-            if (resultCode == Activity.RESULT_OK){
-                if (data != null && data.getData() != null){
-                    photoselect= CameraUtil.getImagePathFromUri(this, data.getData());
-                    mImageIm.setImageURI(Uri.fromFile(new File(photoselect)));
-                    Log.i("files0x01",photoselect);
-                }
-            }
-        }
-    }
-
-    private void showSelectPictureDialog() {
-        String[] items = new String[]{getString(com.uas.appworks.R.string.c_take_picture), getString(com.uas.appworks.R.string.c_photo_album)};
-        AlertDialog.Builder builder = new AlertDialog.Builder(this).setSingleChoiceItems(items, 0,
-                new DialogInterface.OnClickListener() {
-                    @Override
-                    public void onClick(DialogInterface dialog, int which) {
-                        if (which == 0) {
-                            takePhoto();
-                        } else {
-                            selectPhoto();
-                        }
-                        dialog.dismiss();
-                    }
-                });
-        builder.show();
-    }
-
-    private void takePhoto() {
-        mNewPhotoUri = CameraUtil.getOutputMediaFileUri(this, MyApplication.getInstance().getLoginUserId(), CameraUtil.MEDIA_TYPE_IMAGE);
-        CameraUtil.captureImage(this, mNewPhotoUri, REQUEST_CODE_CAPTURE_PHOTO);
-    }
-
-    private void selectPhoto() {
-        CameraUtil.pickImageSimple(this, REQUEST_CODE_PICK_PHOTO);  //传统单选方式
-        //新式多选方式
+		HttpClient httpClient = new HttpClient.Builder(Constant.BASE_BOOKING_SETTING_URL).isDebug(true).build(true);
+		httpClient.Api().send(new HttpClient.Builder()
+				.url("user/appStorurl")
+				.add("map", JSONUtil.map2JSON(params))
+				.add("token", MyApplication.getInstance().mAccessToken)
+				.method(Method.POST)
+				.build(), new ResultSubscriber<>(new ResultListener<Object>() {
+			@Override
+			public void onResponse(Object o) {
+				LogUtil.prinlnLongMsg("hi/appStorurl", o.toString() + "ddd");
+				if (!JSONUtil.validate(o.toString()) || o == null) return;
+				if (o.toString().contains("result") && JSON.parseObject(o.toString()).getBoolean("result")) {
+					Toast.makeText(ct, getString(R.string.common_save_success), Toast.LENGTH_LONG).show();
+					progressDialog.dismiss();
+					finish();
+				}
+			}
+		}));
+	}
+
+
+	@Override
+	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+		super.onActivityResult(requestCode, resultCode, data);
+
+		if (requestCode == 0x01 && resultCode == 0x02 && data != null) {  //新的多选方式
+			photoselect = data.getStringArrayListExtra("files").get(0);
+			mImageIm.setImageURI(Uri.fromFile(new File(photoselect)));
+			Log.i("files0x01", data.getStringArrayListExtra("files").toString());
+			Log.i("files0x01", photoselect);
+		} else if (requestCode == REQUEST_CODE_CAPTURE_PHOTO) {// 拍照返回
+			if (resultCode == Activity.RESULT_OK) {
+				if (mNewPhotoUri != null) {
+					photoselect = mNewPhotoUri.getPath();
+					LogUtil.i("photoselect=" + photoselect);
+					ImageLoader.getInstance().displayImage(mNewPhotoUri.toString(),mImageIm);
+				} else {
+					ToastUtil.showToast(this, com.uas.appworks.R.string.c_take_picture_failed);
+				}
+			}
+		} else if (requestCode == REQUEST_CODE_PICK_PHOTO) {// 传统单选方式,选择一张图片,然后立即调用裁减
+			if (resultCode == Activity.RESULT_OK) {
+				if (data != null && data.getData() != null) {
+					photoselect = CameraUtil.getImagePathFromUri(this, data.getData());
+					ImageLoader.getInstance().displayImage(Uri.fromFile(new File(photoselect)).toString(),mImageIm);
+					Log.i("files0x01", photoselect);
+				}
+			}
+		}
+	}
+
+	private void showSelectPictureDialog() {
+		String[] items = new String[]{getString(com.uas.appworks.R.string.c_take_picture), getString(com.uas.appworks.R.string.c_photo_album)};
+		AlertDialog.Builder builder = new AlertDialog.Builder(this).setSingleChoiceItems(items, 0,
+				new DialogInterface.OnClickListener() {
+					@Override
+					public void onClick(DialogInterface dialog, int which) {
+						if (which == 0) {
+							takePhoto();
+						} else {
+							selectPhoto();
+						}
+						dialog.dismiss();
+					}
+				});
+		builder.show();
+	}
+
+	private void takePhoto() {
+		try {
+			mNewPhotoUri = CameraUtil.getOutputMediaFileUri(this, MyApplication.getInstance().getLoginUserId(), CameraUtil.MEDIA_TYPE_IMAGE);
+			CameraUtil.captureImage(this, mNewPhotoUri, REQUEST_CODE_CAPTURE_PHOTO);
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+
+	private void selectPhoto() {
+		CameraUtil.pickImageSimple(this, REQUEST_CODE_PICK_PHOTO);  //传统单选方式
+		//新式多选方式
 //        Intent intent = new Intent();
 //        intent.putExtra("MAX_SIZE",Max_Size);
 //        intent.putExtra("CURRENT_SIZE",0);
 //        intent.setClass(ct,ImgFileListActivity.class);
 //        startActivityForResult(intent,0x01);
-    }
+	}
 
 }

+ 372 - 362
app_modular/appworks/src/main/java/com/uas/appworks/OA/erp/activity/MissionActivity.java

@@ -50,119 +50,129 @@ import java.util.List;
  * 外勤打卡
  */
 public class MissionActivity extends OABaseActivity implements View.OnClickListener, IMission, MissionAdapter.OnitemClickListener {
-    private RecyclerView recycler;
-    public int position;//调转指针
-    private IMissionPresenter presenter;
-    private MissionAdapter adapter;
-    private int flag;
-    private boolean adminStatus;
-    private boolean locationOk = true;
-
-    private long time = System.currentTimeMillis();
-    private BroadcastReceiver receiver = new BroadcastReceiver() {
-        @Override
-        public void onReceive(Context context, Intent intent) {
-            if (System.currentTimeMillis() - time < (3 * 60 * 1000)) return;
-            time = System.currentTimeMillis();
-            locationOk = MyApplication.getInstance().getBdLocationHelper().locationOk();
-            if (locationOk && adapter != null && !ListUtils.isEmpty(adapter.getModels())) {
-                for (int i = 0; i < adapter.getModels().size(); i++) {
-                    if (adapter.getModels().get(i).getStatus() != 1) {
-                        adapter.getModels().get(i).setRecorddate(TimeUtils.f_long_2_str(System.currentTimeMillis()));
-                        adapter.getModels().get(i).setLocation(MyApplication.getInstance().getBdLocationHelper().getName());
-                        adapter.notifyItemChanged(i);
-                    }
-                }
-            }
-        }
-    };
-
-    @Override
-    protected void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        setContentView(R.layout.activity_mission);
-        ViewUtils.inject(this);
-        IntentFilter filter = new IntentFilter();
-        filter.addAction(Constants.ACTION_LOCATION_CHANGE);
-        LocalBroadcastManager.getInstance(ct).registerReceiver(receiver, filter);
-        initView();
-        initEvent();
-    }
-
-    @Override
-    public boolean onCreateOptionsMenu(Menu menu) {
-        getMenuInflater().inflate(R.menu.menu_outoffice, menu);
-        return super.onCreateOptionsMenu(menu);
-    }
-
-    @Override
-    public void onBackPressed() {
-        endActivity();
-    }
-
-    @Override
-    public boolean onOptionsItemSelected(MenuItem item) {
-        if (item.getItemId() == android.R.id.home) {
-            endActivity();
-            return true;
-        } else if (item.getItemId() == R.id.title) {
-            Intent intent = new Intent(ct, MissionSetActivity.class);
-            intent.putExtra(AppConfig.IS_ADMIN, adminStatus);
-            startActivityForResult(intent, 0x22);
-        }
-        return super.onOptionsItemSelected(item);
-    }
-
-    private void initEvent() {
-        findViewById(R.id.click_btn).setOnClickListener(this);
-        findViewById(R.id.additem_tv).setOnClickListener(this);
-    }
-
-    private void initView() {
-        getSupportActionBar().setTitle(R.string.activity_mission_plan);
-        recycler = (RecyclerView) findViewById(R.id.recycler);
-        locationOk = MyApplication.getInstance().getBdLocationHelper().locationOk();
-        if (getIntent() != null)
-            flag = getIntent().getIntExtra("flag", 0);
-        String addrName = MyApplication.getInstance().getBdLocationHelper().getName();
-        if (StringUtil.isEmpty(addrName) && !locationOk)
-            showNotLocation();
-        adminStatus = getIntent() == null ? false : getIntent().getBooleanExtra(AppConfig.IS_ADMIN, false);
-        adapter = new MissionAdapter(this, this);
-        recycler.setLayoutManager(new MostLinearLayoutManager(ct));
-        recycler.setAdapter(adapter);
-        presenter = new MissionPresenter(this);
-        presenter.start(getIntent());
-    }
-
-
-    private void endActivity() {
-        LocalBroadcastManager.getInstance(ct).unregisterReceiver(receiver);
-        boolean isAuto = PreferenceUtils.getBoolean(AppConfig.AUTO_MISSION, false);
-        if (ApiUtils.getApiModel() instanceof ApiPlatform || isAuto) {
-            setResult(0x20);
-            finish();
-        } else {
-            if (flag == 1) {
-                //启动手动外勤
-                Intent intent = new Intent("com.modualr.appworks.OutofficeActivity");
-                intent.putExtra(AppConfig.IS_ADMIN, true);//上传管理员状态
-                startActivity(intent);
-                finish();
-            } else if (flag == 2) {
-                setResult(0x20);
-                finish();
-            }
-        }
-    }
-
-
-    @Override
-    public void showModels(List<MissionModel> models) {
-        dimssLoading();
-        if (adapter != null) {
-            adapter.setModels(models);
-            adapter.notifyDataSetChanged();
+	private RecyclerView recycler;
+	public int position;//调转指针
+	private IMissionPresenter presenter;
+	private MissionAdapter adapter;
+	private int flag;
+	private boolean adminStatus;
+	private boolean locationOk = true;
+
+	private long time = System.currentTimeMillis();
+	private BroadcastReceiver receiver = new BroadcastReceiver() {
+		@Override
+		public void onReceive(Context context, Intent intent) {
+			if (System.currentTimeMillis() - time < (3 * 60 * 1000)) return;
+			time = System.currentTimeMillis();
+			locationOk = MyApplication.getInstance().getBdLocationHelper().locationOk();
+			if (locationOk && adapter != null && !ListUtils.isEmpty(adapter.getModels())) {
+				for (int i = 0; i < adapter.getModels().size(); i++) {
+					if (adapter.getModels().get(i).getStatus() != 1) {
+						adapter.getModels().get(i).setRecorddate(TimeUtils.f_long_2_str(System.currentTimeMillis()));
+						adapter.getModels().get(i).setLocation(MyApplication.getInstance().getBdLocationHelper().getName());
+						adapter.notifyItemChanged(i);
+					}
+				}
+			}
+		}
+	};
+
+	@Override
+	protected void onCreate(Bundle savedInstanceState) {
+		super.onCreate(savedInstanceState);
+		setContentView(R.layout.activity_mission);
+		ViewUtils.inject(this);
+		IntentFilter filter = new IntentFilter();
+		filter.addAction(Constants.ACTION_LOCATION_CHANGE);
+		LocalBroadcastManager.getInstance(ct).registerReceiver(receiver, filter);
+		initView();
+		initEvent();
+	}
+
+	@Override
+	public boolean onCreateOptionsMenu(Menu menu) {
+		getMenuInflater().inflate(R.menu.menu_mission, menu);
+		if (!adminStatus) {
+			MenuItem item = menu.getItem(0);
+			if (item.getItemId() == R.id.title) {
+				item.setVisible(false);
+			}
+		}
+		return super.onCreateOptionsMenu(menu);
+	}
+
+	@Override
+	public void onBackPressed() {
+		endActivity();
+	}
+
+	@Override
+	public boolean onOptionsItemSelected(MenuItem item) {
+		if (item.getItemId() == android.R.id.home) {
+			endActivity();
+			return true;
+		} else if (item.getItemId() == R.id.title) {
+			Intent intent = new Intent(ct, MissionSetActivity.class);
+			intent.putExtra(AppConfig.IS_ADMIN, adminStatus);
+			startActivityForResult(intent, 0x22);
+		} else if (item.getItemId() == R.id.sign) {
+			if (adapter!=null){
+				presenter.sign(adapter.getModels());
+			}
+		}
+		return super.onOptionsItemSelected(item);
+	}
+
+	private void initEvent() {
+		findViewById(R.id.click_btn).setOnClickListener(this);
+		findViewById(R.id.additem_tv).setOnClickListener(this);
+	}
+
+	private void initView() {
+		getSupportActionBar().setTitle(R.string.activity_mission_plan);
+		recycler = (RecyclerView) findViewById(R.id.recycler);
+		locationOk = MyApplication.getInstance().getBdLocationHelper().locationOk();
+		if (getIntent() != null)
+			flag = getIntent().getIntExtra("flag", 0);
+		String addrName = MyApplication.getInstance().getBdLocationHelper().getName();
+		if (StringUtil.isEmpty(addrName) && !locationOk)
+			showNotLocation();
+		adminStatus = getIntent() == null ? false : getIntent().getBooleanExtra(AppConfig.IS_ADMIN, false);
+		adapter = new MissionAdapter(this, this);
+		recycler.setLayoutManager(new MostLinearLayoutManager(ct));
+		recycler.setAdapter(adapter);
+		presenter = new MissionPresenter(this);
+		presenter.start(getIntent());
+	}
+
+
+	private void endActivity() {
+		LocalBroadcastManager.getInstance(ct).unregisterReceiver(receiver);
+		boolean isAuto = PreferenceUtils.getBoolean(AppConfig.AUTO_MISSION, false);
+		if (ApiUtils.getApiModel() instanceof ApiPlatform || isAuto) {
+			setResult(0x20);
+			finish();
+		} else {
+			if (flag == 1) {
+				//启动手动外勤
+				Intent intent = new Intent("com.modualr.appworks.OutofficeActivity");
+				intent.putExtra(AppConfig.IS_ADMIN, true);//上传管理员状态
+				startActivity(intent);
+				finish();
+			} else if (flag == 2) {
+				setResult(0x20);
+				finish();
+			}
+		}
+	}
+
+
+	@Override
+	public void showModels(List<MissionModel> models) {
+		dimssLoading();
+		if (adapter != null) {
+			adapter.setModels(models);
+			adapter.notifyDataSetChanged();
 //            if (ListUtils.isEmpty(models)) return;
 //            for (int i = 0; i < models.size(); i++) {
 //                if (models.get(i).getStatus() == 4 && StringUtil.isEmpty(models.get(i).getVisitTime())) {
@@ -171,130 +181,130 @@ public class MissionActivity extends OABaseActivity implements View.OnClickListe
 //                    setEndTime(models.get(i).getLatLng(), dis);
 //                }
 //            }
-        } else {//容错
-            adapter = new MissionAdapter(this, this);
-            recycler.setLayoutManager(new MostLinearLayoutManager(ct));
-            recycler.setAdapter(adapter);
-        }
-    }
-
-    @Override
-    public void changModelStatus(int status, int postion) {
-        if (ListUtils.isEmpty(adapter.getModels()) || adapter.getModels().size() <= postion) return;
-        adapter.getModels().get(postion).setStatus(status);
-        adapter.notifyItemChanged(postion);
-    }
-
-    @Override
-    public void onClick(View view) {
-        if (view.getId() == R.id.additem_tv){
-            if (!ListUtils.isEmpty(adapter.getModels())) {
-                addEntity(adapter.getModels());
-                adapter.notifyItemInserted(adapter.getModels().size() - 1);
-            }
-        }else if (view.getId() == R.id.click_btn){
-            if (!locationOk) {
-                showNotLocation();
-                return;
-            }
-            presenter.submit(adapter.getModels());
-        }
-    }
-
-
-    @Override
-    public void click(final int position, MissionModel model, View view) {
-        Intent intent = null;
-        MissionActivity.this.position = position;
-        if (view.getId() == R.id.item_company_tv){
-            if (model == null || model.getStatus() == 1) return;
-            intent = new Intent("com.modular.form.SelectAimActivity");
-            startActivityForResult(intent, 0x20);
-        }else if (view.getId() == R.id.item_delete_tv){
-            try {
-                MissionModel m = adapter.getModels().get(position);
-                if (!StringUtil.isEmpty(m.getCompanyName()) || !StringUtil.isEmpty(m.getCompanyAddr()) ||
-                        !StringUtil.isEmpty(m.getVisitTime())) {
-                    AlertDialog.Builder builder = new AlertDialog.Builder(ct);
-                    builder.setTitle(R.string.prompt_title).setMessage(R.string.sure_delete_mission).setPositiveButton(R.string.sure, new DialogInterface.OnClickListener() {
-                        @Override
-                        public void onClick(DialogInterface dialogInterface, int i) {
-                            try {
-                                if (adapter == null || ListUtils.isEmpty(adapter.getModels()) || adapter.getModels().size() <= position)
-                                    return;
-
-                                adapter.getModels().remove(position);
-                                adapter.notifyItemRemoved(position);
-                                adapter.notifyItemRangeChanged(position, adapter.getModels().size());
-                            } catch (Exception e) {
-
-                            }
-                        }
-                    }).setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
-                        @Override
-                        public void onClick(DialogInterface dialogInterface, int i) {
-
-                        }
-                    }).show();
-                } else {
-                    adapter.getModels().remove(position);
-                    adapter.notifyItemRemoved(position);
-                    adapter.notifyItemRangeChanged(position, adapter.getModels().size());
-                }
-            } catch (Exception e) {
-                if (e != null)
-                    LogUtil.i("Exception e=" + e.getMessage());
-            }
-        }else if (view.getId() == R.id.item_reckontime_tv){
-            if (model == null || model.getStatus() == 1) return;
-            showDateDialog();
-        }else if (view.getId() == R.id.item_remark_tv){
-            if (model == null || model.getStatus() == 1) return;
-            intent = new Intent("com.modular.appworks.SelectRemarkActivity");
-            startActivityForResult(intent, 0x23);
-        }else if (view.getId() == R.id.navigation_tv){
-            intent = new Intent("com.modular.appworks.NavigationActivity");
-            intent.putExtra("toLocation", model.getLatLng());
-            startActivityForResult(intent, 0x23);
-        }
-    }
-
-    public void showDateDialog() {
-        DateTimePicker picker = new DateTimePicker(this, DateTimePicker.HOUR_OF_DAY);
-        picker.setRange(2010, 2030);
-        picker.setSelectedItem(CalendarUtil.getYear(), CalendarUtil.getMonth(), CalendarUtil.getDay(), CalendarUtil.getMinute(), CalendarUtil.getSecond());
-        picker.setOnDateTimePickListener(new DateTimePicker.OnYearMonthDayTimePickListener() {
-            @Override
-            public void onDateTimePicked(String year, String month, String day, String hour, String minute) {
-                String time = year + "-" + month + "-" + day + " " + hour + ":" + minute + ":00";
-                adapter.getModels().get(position).setVisitTime(time);
-                adapter.notifyItemChanged(position);
-            }
-        });
-        picker.show();
-    }
-
-
-    @Override
-    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
-        if (resultCode != 0x20 || data == null) return;
-        try {
-            onResult(requestCode, resultCode, data);
-        } catch (Exception e) {
-
-        }
-    }
-
-    private void onResult(int requestCode, int resultCode, Intent data) throws Exception {
-        if (requestCode == 0x20) {//选择公司
-            SelectAimModel entity = data.getParcelableExtra("data");
-            PopupWindowHelper.create(this, getString(R.string.perfect_company_name), entity, new PopupWindowHelper.OnClickListener() {
-                @Override
-                public void result(SelectAimModel model) {
-                    sureSelectAim(model);
-                }
-            });
-        }
+		} else {//容错
+			adapter = new MissionAdapter(this, this);
+			recycler.setLayoutManager(new MostLinearLayoutManager(ct));
+			recycler.setAdapter(adapter);
+		}
+	}
+
+	@Override
+	public void changModelStatus(int status, int postion) {
+		if (ListUtils.isEmpty(adapter.getModels()) || adapter.getModels().size() <= postion) return;
+		adapter.getModels().get(postion).setStatus(status);
+		adapter.notifyItemChanged(postion);
+	}
+
+	@Override
+	public void onClick(View view) {
+		if (view.getId() == R.id.additem_tv) {
+			if (!ListUtils.isEmpty(adapter.getModels())) {
+				addEntity(adapter.getModels());
+				adapter.notifyItemInserted(adapter.getModels().size() - 1);
+			}
+		} else if (view.getId() == R.id.click_btn) {
+			if (!locationOk) {
+				showNotLocation();
+				return;
+			}
+			presenter.submit(adapter.getModels());
+		}
+	}
+
+
+	@Override
+	public void click(final int position, MissionModel model, View view) {
+		Intent intent = null;
+		MissionActivity.this.position = position;
+		if (view.getId() == R.id.item_company_tv) {
+			if (model == null || model.getStatus() == 1) return;
+			intent = new Intent("com.modular.form.SelectAimActivity");
+			startActivityForResult(intent, 0x20);
+		} else if (view.getId() == R.id.item_delete_tv) {
+			try {
+				MissionModel m = adapter.getModels().get(position);
+				if (!StringUtil.isEmpty(m.getCompanyName()) || !StringUtil.isEmpty(m.getCompanyAddr()) ||
+						!StringUtil.isEmpty(m.getVisitTime())) {
+					AlertDialog.Builder builder = new AlertDialog.Builder(ct);
+					builder.setTitle(R.string.prompt_title).setMessage(R.string.sure_delete_mission).setPositiveButton(R.string.sure, new DialogInterface.OnClickListener() {
+						@Override
+						public void onClick(DialogInterface dialogInterface, int i) {
+							try {
+								if (adapter == null || ListUtils.isEmpty(adapter.getModels()) || adapter.getModels().size() <= position)
+									return;
+
+								adapter.getModels().remove(position);
+								adapter.notifyItemRemoved(position);
+								adapter.notifyItemRangeChanged(position, adapter.getModels().size());
+							} catch (Exception e) {
+
+							}
+						}
+					}).setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
+						@Override
+						public void onClick(DialogInterface dialogInterface, int i) {
+
+						}
+					}).show();
+				} else {
+					adapter.getModels().remove(position);
+					adapter.notifyItemRemoved(position);
+					adapter.notifyItemRangeChanged(position, adapter.getModels().size());
+				}
+			} catch (Exception e) {
+				if (e != null)
+					LogUtil.i("Exception e=" + e.getMessage());
+			}
+		} else if (view.getId() == R.id.item_reckontime_tv) {
+			if (model == null || model.getStatus() == 1) return;
+			showDateDialog();
+		} else if (view.getId() == R.id.item_remark_tv) {
+			if (model == null || model.getStatus() == 1) return;
+			intent = new Intent("com.modular.appworks.SelectRemarkActivity");
+			startActivityForResult(intent, 0x23);
+		} else if (view.getId() == R.id.navigation_tv) {
+			intent = new Intent("com.modular.appworks.NavigationActivity");
+			intent.putExtra("toLocation", model.getLatLng());
+			startActivityForResult(intent, 0x23);
+		}
+	}
+
+	public void showDateDialog() {
+		DateTimePicker picker = new DateTimePicker(this, DateTimePicker.HOUR_OF_DAY);
+		picker.setRange(2010, 2030);
+		picker.setSelectedItem(CalendarUtil.getYear(), CalendarUtil.getMonth(), CalendarUtil.getDay(), CalendarUtil.getMinute(), CalendarUtil.getSecond());
+		picker.setOnDateTimePickListener(new DateTimePicker.OnYearMonthDayTimePickListener() {
+			@Override
+			public void onDateTimePicked(String year, String month, String day, String hour, String minute) {
+				String time = year + "-" + month + "-" + day + " " + hour + ":" + minute + ":00";
+				adapter.getModels().get(position).setVisitTime(time);
+				adapter.notifyItemChanged(position);
+			}
+		});
+		picker.show();
+	}
+
+
+	@Override
+	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+		if (resultCode != 0x20 || data == null) return;
+		try {
+			onResult(requestCode, resultCode, data);
+		} catch (Exception e) {
+
+		}
+	}
+
+	private void onResult(int requestCode, int resultCode, Intent data) throws Exception {
+		if (requestCode == 0x20) {//选择公司
+			SelectAimModel entity = data.getParcelableExtra("data");
+			PopupWindowHelper.create(this, getString(R.string.perfect_company_name), entity, new PopupWindowHelper.OnClickListener() {
+				@Override
+				public void result(SelectAimModel model) {
+					sureSelectAim(model);
+				}
+			});
+		}
 // else if (requestCode == 0x21) {//选择地址
 //            PoiInfo info = data.getParcelableExtra("resultName");
 //            if (info == null) {
@@ -323,129 +333,129 @@ public class MissionActivity extends OABaseActivity implements View.OnClickListe
 //                    }
 //            }
 //        }
-        else if (0x22 == requestCode) {//外勤设置
-            boolean isAuto = data.getBooleanExtra("isAuto", true);
-            if (!isAuto && !(ApiUtils.getApiModel() instanceof ApiPlatform)) {
-                if (flag == 1) {
-                    //启动手动外勤
-                    Intent intent = new Intent("com.modualr.appworks.OutofficeActivity");
-                    intent.putExtra(AppConfig.IS_ADMIN, true);
-                    startActivity(intent);
-                    finish();
-                } else if (flag == 2) {
-                    setResult(0x20);
-                    finish();
-                }
-            }
-        } else if (0x23 == requestCode) {
-            String message = data.getStringExtra("data");
-            String remark = StringUtil.isEmpty(message) ? getResources().getString(R.string.maintain_customers) : message;
-            adapter.getModels().get(position).setRemark(remark);
-            adapter.notifyItemChanged(position);
-        }
-    }
-
-
-    private void sureSelectAim(SelectAimModel entity) {
-        if (entity == null) return;
-        if (ListUtils.isEmpty(adapter.getModels()) || adapter.getModels().size() <= position)
-            return;
-        adapter.getModels().get(position).setCompanyName(StringUtil.isEmpty(entity.getName()) ? "" : entity.getName());
-        adapter.getModels().get(position).setCompanyAddr(StringUtil.isEmpty(entity.getAddress()) ? "" : entity.getAddress());
-        adapter.getModels().get(position).setVisitcount(1 + entity.getTimes());
-        if (entity.getLatLng() != null) {
-            adapter.getModels().get(position).setLatLng(entity.getLatLng());
-            adapter.getModels().get(position).setDistance(BaiduMapUtil.getInstence().distance(adapter.getModels().get(position).getLatLng()
-                    , new LatLng(MyApplication.getInstance().getBdLocationHelper().getLatitude(),
-                            MyApplication.getInstance().getBdLocationHelper().getLongitude())));
-        }
-        adapter.notifyItemChanged(position);
-        if (entity.getLatLng() != null) {
-            try {
-                float dis = Float.valueOf(BaiduMapUtil.getInstence().getDistance(entity.getLatLng()));
-                setEndTime(entity.getLatLng(), dis);
-            } catch (ClassCastException e) {
-                if (e != null)
-                    LogUtil.i("ClassCastException " + e.getMessage());
-            }
-        }
-    }
-
-    /**
-     * @param location
-     * @param dis
-     * @update by 2017/1/11
-     */
-    private void setEndTime(LatLng location, final double dis) {
-        BaiduMapUtil.getInstence().getDrivingRoute(MyApplication.getInstance().getBdLocationHelper().getLocation(), location,
-                new OnGetDrivingRouteResult() {
-                    @Override
-                    public void onGetDrivingRouteResult(DrivingRouteResult drivingRouteResult) {
-                        try {
-                            List<DrivingRouteLine> list = drivingRouteResult.getRouteLines();
-                            if (ListUtils.isEmpty(list)) {
-                                if (dis != 0) {
-                                    setVoisitTime((long) (dis / 3));
-                                } else
-                                    setVoisitTime(800);
-                                return;
-                            }
-                            int minTime = 0;
-                            for (DrivingRouteLine e : list) {
-                                if (minTime == 0 || minTime > e.getDuration()) {
-                                    minTime = e.getDuration();
-                                }
-                            }
-                            setVoisitTime(minTime);
-                        } catch (Exception e) {
-
-                        }
-                    }
-                });
-
-    }
-
-    /**
-     * 注意异常处理,由于是一个延迟的过程,可能出现在时间计算出来前删除该条数据
-     *
-     * @param time 秒
-     * @update by 2017/1/11
-     */
-    private void setVoisitTime(long time) throws Exception {
-        if (adapter == null || ListUtils.isEmpty(adapter.getModels()) || adapter.getModels().size() <= position)
-            return;
-        String realTime = TimeUtils.f_long_2_str(System.currentTimeMillis() + (time * 1000));
-        adapter.getModels().get(position).setVisitTime(realTime);
-        adapter.notifyItemChanged(position);
-    }
-
-    public void showNotLocation() {
-        int stringId = 0;
-        if (MyApplication.getInstance().isNetworkActive()) {
-            stringId = R.string.allow_location;
-            MaterialDialog dialog = new MaterialDialog.Builder(ct).title(R.string.prompt_title).
-                    content(stringId)
-                    .positiveText(R.string.sure).
-                            autoDismiss(false).callback(new MaterialDialog.ButtonCallback() {
-                        @Override
-                        public void onPositive(MaterialDialog dialog) {
-                            super.onPositive(dialog);
-                            dialog.dismiss();
-                        }
-                    }).build();
-            dialog.show();
-        } else {
-            stringId = R.string.networks_out;
-            showToast(stringId, R.color.load_message);
-        }
-    }
-
-    private void addEntity(List<MissionModel> entitys) {
-        MissionModel entity = new MissionModel();
-        entity.setLocation(MyApplication.getInstance().getBdLocationHelper().getName());//当前位置
-        entity.setRecorddate(TimeUtils.f_long_2_str(System.currentTimeMillis()));//当前时间
-        entity.setStatus(0);
-        entity.setType(1);//当前时间
-        entitys.add(entity);
-    }
+		else if (0x22 == requestCode) {//外勤设置
+			boolean isAuto = data.getBooleanExtra("isAuto", true);
+			if (!isAuto && !(ApiUtils.getApiModel() instanceof ApiPlatform)) {
+				if (flag == 1) {
+					//启动手动外勤
+					Intent intent = new Intent("com.modualr.appworks.OutofficeActivity");
+					intent.putExtra(AppConfig.IS_ADMIN, true);
+					startActivity(intent);
+					finish();
+				} else if (flag == 2) {
+					setResult(0x20);
+					finish();
+				}
+			}
+		} else if (0x23 == requestCode) {
+			String message = data.getStringExtra("data");
+			String remark = StringUtil.isEmpty(message) ? getResources().getString(R.string.maintain_customers) : message;
+			adapter.getModels().get(position).setRemark(remark);
+			adapter.notifyItemChanged(position);
+		}
+	}
+
+
+	private void sureSelectAim(SelectAimModel entity) {
+		if (entity == null) return;
+		if (ListUtils.isEmpty(adapter.getModels()) || adapter.getModels().size() <= position)
+			return;
+		adapter.getModels().get(position).setCompanyName(StringUtil.isEmpty(entity.getName()) ? "" : entity.getName());
+		adapter.getModels().get(position).setCompanyAddr(StringUtil.isEmpty(entity.getAddress()) ? "" : entity.getAddress());
+		adapter.getModels().get(position).setVisitcount(1 + entity.getTimes());
+		if (entity.getLatLng() != null) {
+			adapter.getModels().get(position).setLatLng(entity.getLatLng());
+			adapter.getModels().get(position).setDistance(BaiduMapUtil.getInstence().distance(adapter.getModels().get(position).getLatLng()
+					, new LatLng(MyApplication.getInstance().getBdLocationHelper().getLatitude(),
+							MyApplication.getInstance().getBdLocationHelper().getLongitude())));
+		}
+		adapter.notifyItemChanged(position);
+		if (entity.getLatLng() != null) {
+			try {
+				float dis = Float.valueOf(BaiduMapUtil.getInstence().getDistance(entity.getLatLng()));
+				setEndTime(entity.getLatLng(), dis);
+			} catch (ClassCastException e) {
+				if (e != null)
+					LogUtil.i("ClassCastException " + e.getMessage());
+			}
+		}
+	}
+
+	/**
+	 * @param location
+	 * @param dis
+	 * @update by 2017/1/11
+	 */
+	private void setEndTime(LatLng location, final double dis) {
+		BaiduMapUtil.getInstence().getDrivingRoute(MyApplication.getInstance().getBdLocationHelper().getLocation(), location,
+				new OnGetDrivingRouteResult() {
+					@Override
+					public void onGetDrivingRouteResult(DrivingRouteResult drivingRouteResult) {
+						try {
+							List<DrivingRouteLine> list = drivingRouteResult.getRouteLines();
+							if (ListUtils.isEmpty(list)) {
+								if (dis != 0) {
+									setVoisitTime((long) (dis / 3));
+								} else
+									setVoisitTime(800);
+								return;
+							}
+							int minTime = 0;
+							for (DrivingRouteLine e : list) {
+								if (minTime == 0 || minTime > e.getDuration()) {
+									minTime = e.getDuration();
+								}
+							}
+							setVoisitTime(minTime);
+						} catch (Exception e) {
+
+						}
+					}
+				});
+
+	}
+
+	/**
+	 * 注意异常处理,由于是一个延迟的过程,可能出现在时间计算出来前删除该条数据
+	 *
+	 * @param time 秒
+	 * @update by 2017/1/11
+	 */
+	private void setVoisitTime(long time) throws Exception {
+		if (adapter == null || ListUtils.isEmpty(adapter.getModels()) || adapter.getModels().size() <= position)
+			return;
+		String realTime = TimeUtils.f_long_2_str(System.currentTimeMillis() + (time * 1000));
+		adapter.getModels().get(position).setVisitTime(realTime);
+		adapter.notifyItemChanged(position);
+	}
+
+	public void showNotLocation() {
+		int stringId = 0;
+		if (MyApplication.getInstance().isNetworkActive()) {
+			stringId = R.string.allow_location;
+			MaterialDialog dialog = new MaterialDialog.Builder(ct).title(R.string.prompt_title).
+					content(stringId)
+					.positiveText(R.string.sure).
+							autoDismiss(false).callback(new MaterialDialog.ButtonCallback() {
+						@Override
+						public void onPositive(MaterialDialog dialog) {
+							super.onPositive(dialog);
+							dialog.dismiss();
+						}
+					}).build();
+			dialog.show();
+		} else {
+			stringId = R.string.networks_out;
+			showToast(stringId, R.color.load_message);
+		}
+	}
+
+	private void addEntity(List<MissionModel> entitys) {
+		MissionModel entity = new MissionModel();
+		entity.setLocation(MyApplication.getInstance().getBdLocationHelper().getName());//当前位置
+		entity.setRecorddate(TimeUtils.f_long_2_str(System.currentTimeMillis()));//当前时间
+		entity.setStatus(0);
+		entity.setType(1);//当前时间
+		entitys.add(entity);
+	}
 }

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

@@ -22,5 +22,7 @@ public interface IMissionPresenter {
 
     void submit(List<MissionModel> models);
 
+    void sign(List<MissionModel> models);
+
 
 }

+ 597 - 452
app_modular/appworks/src/main/java/com/uas/appworks/OA/erp/presenter/MissionPresenter.java

@@ -7,6 +7,8 @@ import android.os.Bundle;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.common.LogUtil;
+import com.common.data.DateFormatUtil;
 import com.common.data.JSONUtil;
 import com.common.data.ListUtils;
 import com.common.data.StringUtil;
@@ -15,9 +17,9 @@ import com.core.api.wxapi.ApiConfig;
 import com.core.api.wxapi.ApiPlatform;
 import com.core.api.wxapi.ApiUtils;
 import com.core.app.AppConfig;
+import com.core.app.AppConstant;
 import com.core.app.MyApplication;
 import com.core.broadcast.MsgBroadcast;
-import com.core.app.AppConstant;
 import com.core.model.MissionModel;
 import com.core.net.http.http.OAHttpHelper;
 import com.core.net.http.http.OnHttpResultListener;
@@ -26,8 +28,8 @@ import com.core.utils.BaiduMapUtil;
 import com.core.utils.CommonUtil;
 import com.core.utils.TimeUtils;
 import com.core.utils.WorkHandlerUtil;
-import com.uas.appworks.R;
 import com.uas.appworks.OA.erp.model.IMission;
+import com.uas.appworks.R;
 import com.uas.appworks.dao.MissionDao;
 
 import java.util.ArrayList;
@@ -36,462 +38,605 @@ import java.util.List;
 import java.util.Map;
 
 
-
 /**
  * Created by Bitliker on 2016/12/19.
  */
 
 public class MissionPresenter implements IMissionPresenter, OnHttpResultListener {
-    private final int SUBMIT = 0x16;
-    private final int CODE_WHAT = 0x15;
-    private final int ID_WHAT = 0x14;
-    private final int LOAD_PLAN = 0x11;
-    private final int SAVE_PLAN = 0x12;
-    private final int SAVE_ADDRESS = 0x13;
-    private IMission iMission;
-    private boolean isB2b;
-    private MissionModel modelIntent;
-
-
-    public MissionPresenter(IMission iMission) {
-        this.iMission = iMission;
-    }
-
-    /**
-     * 1.下拉数据或是从数据库获取数据(修改返回id后先数据库再网络,当前先网络再数据库)
-     * 2.保存数据
-     */
-    @Override
-    public void start(Intent intent) {
-        isB2b = ApiUtils.getApiModel() instanceof ApiPlatform;
-        if (iMission != null) {//初始化
-            List<MissionModel> models = new ArrayList<>();
-            MissionModel entity = new MissionModel();
-            entity.setType(1);
-            entity.setLocation(MyApplication.getInstance().getBdLocationHelper().getName());//当前位置
-            entity.setRecorddate(TimeUtils.f_long_2_str(System.currentTimeMillis()));//当前时间
-            models.add(entity);
-            iMission.showModels(models);
-            iMission.showLoading();
-        }
-        if (intent != null) {
-            modelIntent = intent.getParcelableExtra("model");
-            if (modelIntent != null)
-                modelIntent.setStatus(4);
-        }
-        if (MyApplication.getInstance().isNetworkActive()) {
-            loadMissionPlan();
-        } else {
-            loadMissionByDB();
-        }
-    }
-
-    boolean isSubmiting = false;
-
-    @Override
-    public void submit(List<MissionModel> models) {
-        if (ListUtils.isEmpty(models)) return;
-        if (isSubmiting) return;
-        if (!MyApplication.getInstance().isNetworkActive()) {
-            if (iMission != null) iMission.showToast(R.string.networks_out, R.color.load_warning);
-            return;
-        }
-        for (int i = 0; i < models.size(); i++) {
-            MissionModel e = models.get(i);
-            if (canSubmit(e, i + 1)) {
-                savePlan2Net(e, i);
-            }
-        }
-    }
-
-    /**
-     * 保存拜访计划
-     *
-     * @param mode    对象
-     * @param postion 指针
-     */
-    private void savePlan2Net(MissionModel mode, int postion) {
-        isSubmiting = true;
-        if (isB2b) {
-            Bundle bundle = new Bundle();
-            bundle.putInt("position", postion);
-            bundle.putParcelable("data", mode);
-            savePlan2Net(bundle);
-        } else
-            loadId(mode, postion);
-    }
-
-    private void loadId(MissionModel entity, int position) {
-        isSubmiting = true;
-        Map<String, Object> param = new HashMap<>();
-        param.put("seq", "MOBILE_OUTPLAN_SEQ");
-        Bundle bundle = new Bundle();
-        bundle.putParcelable("data", entity);
-        bundle.putInt("position", position);
-        Request request = new Request.Bulider()
-                .setUrl("common/getId.action")
-                .setWhat(ID_WHAT)
-                .setParam(param)
-                .setBundle(bundle)
-                .setMode(Request.Mode.GET)
-                .bulid();
-        OAHttpHelper.getInstance().requestHttp(request, this);
-    }
-
-    private void loadCode(Bundle bundle) {
-        Map<String, Object> param = new HashMap<>();
-        param.put("caller", "MOBILE_OUTPLAN");
-        param.put("type", 2);
-        Request request = new Request.Bulider()
-                .setUrl("common/getCodeString.action")
-                .setWhat(CODE_WHAT)
-                .setParam(param)
-                .setBundle(bundle)
-                .setMode(Request.Mode.GET)
-                .bulid();
-        OAHttpHelper.getInstance().requestHttp(request, this);
-    }
-
-    //保存外勤计划接口
-    private void savePlan2Net(Bundle bundle) {
-        if (bundle == null) return;
-        int id = 0;
-        String code = "";
-        if (!isB2b) {
-            id = bundle.getInt("id");
-            code = bundle.getString("code");
-        }
-        int position = bundle.getInt("position");
-        MissionModel entity = bundle.getParcelable("data");
-        if (!isB2b && (id == 0 || StringUtil.isEmpty(code)) || entity == null) return;
-        isSubmiting = true;
-        //获取网络数据
-        if (iMission != null) iMission.showLoading();
-        Context ct = MyApplication.getInstance();
-        Map<String, Object> param = new HashMap<>();
-        Map<String, Object> formStore = new HashMap<>();
-        Map<String, Object> params = new HashMap<>();
-        String name = CommonUtil.getSharedPreferences(ct, "erp_emname");
-        if (StringUtil.isEmpty(name)) {
-            name = MyApplication.getInstance().mLoginUser.getNickName();
-        }
-        /***formStore***/
-        if (!isB2b) {
-            formStore.put("mp_id", id);//请求的id MOBILE_OUTPLAN_SEQ
-            formStore.put("mp_code", code);//code MOBILE_OUTPLAN_SEQ
-        }
-        formStore.put("mp_visittime", TimeUtils.f_long_2_str(System.currentTimeMillis()));
-        if (isB2b) {
-            formStore.put("enuu", CommonUtil.getSharedPreferences(MyApplication.getInstance().getApplicationContext(), "companyEnUu"));
-            formStore.put("emcode", CommonUtil.getSharedPreferences(MyApplication.getInstance().getApplicationContext(), "b2b_uu"));
-        } else {
-            formStore.put("mp_status", "在录入");
-            formStore.put("mp_statuscode", "ENTERING");
-        }
-        formStore.put("mp_recorder", name);//用户名
-        String mp_recordercode = isB2b ? CommonUtil.getSharedPreferences(MyApplication.getInstance().getApplicationContext(), "b2b_uu") :
-                CommonUtil.getSharedPreferences(ct, "erp_username");
-        if (isB2b)
-            formStore.put("recorderCode", mp_recordercode);//编号
-        else
-            formStore.put("mp_recordercode", mp_recordercode);//编号
-        formStore.put("mp_address", MyApplication.getInstance().getBdLocationHelper().getAddress());//当前地址
-        /***params***/
-        if (!isB2b)
-            params.put("mpd_detno", position + 1);
-        if (!isB2b)
-            params.put("mpd_id", "");
-        params.put("mpd_kind", entity.getType() == 1 ? getStrByResources(R.string.half_day)
-                : getStrByResources(R.string.all_day));
-        params.put("mpd_remark", StringUtil.toHttpString(entity.getRemark()));
-        params.put("mpd_distance", BaiduMapUtil.getInstence().getDistance(entity.getLatLng()));
-        params.put("mpd_arrivedate", entity.getVisitTime());
-        if (!isB2b)
-            params.put("mpd_mpid", id);
-        params.put("mpd_company", entity.getCompanyName());
-        params.put("mpd_address", entity.getCompanyAddr());
-        param.put("caller", "lp");
-        /******update by 2016/12/19**************/
-        params.put("mpd_location", entity.getLocation());
-        params.put("mpd_recorddate", entity.getRecorddate());
-        if (isB2b) {
-            params.put("longitude", entity.getLatLng().longitude);
-            params.put("latitude", entity.getLatLng().latitude);
-        }
-        param.put("formStore", JSONUtil.map2JSON(formStore));
-        param.put("param", "[" + JSONUtil.map2JSON(params) + "]");
-
-        String url = isB2b ? ApiConfig.getInstance(ApiUtils.getApiModel()).getmApiBase().saveOutPlan :
-                "mobile/addOutPlan.action";
-        Request request = new Request.Bulider()
-                .setUrl(url)
-                .setWhat(SAVE_PLAN)
-                .setParam(param)
-                .setBundle(bundle)
-                .setMode(Request.Mode.POST)
-                .bulid();
-        OAHttpHelper.getInstance().requestHttp(request, this);
-        saveOutAddress(entity);
-    }
-
-
-    //保存外勤计划目的地
-    private void saveOutAddress(MissionModel entity) {
-        if (entity.getLatLng() == null || entity.getLatLng().latitude == 0 || entity.getLatLng().longitude == 0) {
-            if (iMission != null)
-                iMission.showToast(R.string.not_save_illegal_bill, R.color.load_warning);
-            return;
-        }
-        //获取网络数据
-        Map<String, Object> param = new HashMap<>();
-        Map<String, Object> formStore = new HashMap<>();
-        param.put("caller", "lp");
-        /***formStore***/
+	private final int SUBMIT = 0x16;
+	private final int CODE_WHAT = 0x15;
+	private final int ID_WHAT = 0x14;
+	private final int LOAD_PLAN = 0x11;
+	private final int SAVE_PLAN = 0x12;
+	private final int SAVE_ADDRESS = 0x13;
+	private final int SIGNIN_MISSION = 0x17;
+	private IMission iMission;
+	private boolean isB2b;
+	private MissionModel modelIntent;
+
+
+	public MissionPresenter(IMission iMission) {
+		this.iMission = iMission;
+	}
+
+	/**
+	 * 1.下拉数据或是从数据库获取数据(修改返回id后先数据库再网络,当前先网络再数据库)
+	 * 2.保存数据
+	 */
+	@Override
+	public void start(Intent intent) {
+		isB2b = ApiUtils.getApiModel() instanceof ApiPlatform;
+		if (iMission != null) {//初始化
+			List<MissionModel> models = new ArrayList<>();
+			MissionModel entity = new MissionModel();
+			entity.setType(1);
+			entity.setLocation(MyApplication.getInstance().getBdLocationHelper().getName());//当前位置
+			entity.setRecorddate(TimeUtils.f_long_2_str(System.currentTimeMillis()));//当前时间
+			models.add(entity);
+			iMission.showModels(models);
+			iMission.showLoading();
+		}
+		if (intent != null) {
+			modelIntent = intent.getParcelableExtra("model");
+			if (modelIntent != null)
+				modelIntent.setStatus(4);
+		}
+		if (MyApplication.getInstance().isNetworkActive()) {
+			loadMissionPlan();
+		} else {
+			loadMissionByDB();
+		}
+	}
+
+	boolean isSubmiting = false;
+
+	@Override
+	public void submit(List<MissionModel> models) {
+		if (ListUtils.isEmpty(models)) return;
+		if (isSubmiting) return;
+		if (!MyApplication.getInstance().isNetworkActive()) {
+			if (iMission != null) iMission.showToast(R.string.networks_out, R.color.load_warning);
+			return;
+		}
+		for (int i = 0; i < models.size(); i++) {
+			MissionModel e = models.get(i);
+			if (canSubmit(e, i + 1)) {
+				savePlan2Net(e, i);
+			}
+		}
+	}
+
+
+	@Override
+	public void sign(List<MissionModel> models) {
+		if (ListUtils.isEmpty(models)) return;
+		if (isSubmiting) return;
+		List<MissionModel> plans = new ArrayList<>();
+		for (MissionModel e : models) {
+			LogUtil.i(JSON.toJSONString(e));
+			LogUtil.i("_________________________");
+			if (e.getStatus() != 0) {
+				plans.add(e);
+			}
+		}
+		MissionModel mission = reckonMission(plans);//判断
+		if (mission != null) {
+			//TODO 打卡
+			LogUtil.i(JSON.toJSONString(mission));
+			signinMission(mission);
+		}
+	}
+
+
+	/**
+	 * 保存拜访计划
+	 *
+	 * @param mode    对象
+	 * @param postion 指针
+	 */
+
+	private void savePlan2Net(MissionModel mode, int postion) {
+		isSubmiting = true;
+		if (isB2b) {
+			Bundle bundle = new Bundle();
+			bundle.putInt("position", postion);
+			bundle.putParcelable("data", mode);
+			savePlan2Net(bundle);
+		} else
+			loadId(mode, postion);
+	}
+
+	private void loadId(MissionModel entity, int position) {
+		isSubmiting = true;
+		Map<String, Object> param = new HashMap<>();
+		param.put("seq", "MOBILE_OUTPLAN_SEQ");
+		Bundle bundle = new Bundle();
+		bundle.putParcelable("data", entity);
+		bundle.putInt("position", position);
+		Request request = new Request.Bulider()
+				.setUrl("common/getId.action")
+				.setWhat(ID_WHAT)
+				.setParam(param)
+				.setBundle(bundle)
+				.setMode(Request.Mode.GET)
+				.bulid();
+		OAHttpHelper.getInstance().requestHttp(request, this);
+	}
+
+	private void loadCode(Bundle bundle) {
+		Map<String, Object> param = new HashMap<>();
+		param.put("caller", "MOBILE_OUTPLAN");
+		param.put("type", 2);
+		Request request = new Request.Bulider()
+				.setUrl("common/getCodeString.action")
+				.setWhat(CODE_WHAT)
+				.setParam(param)
+				.setBundle(bundle)
+				.setMode(Request.Mode.GET)
+				.bulid();
+		OAHttpHelper.getInstance().requestHttp(request, this);
+	}
+
+	//保存外勤计划接口
+	private void savePlan2Net(Bundle bundle) {
+		if (bundle == null) return;
+		int id = 0;
+		String code = "";
+		if (!isB2b) {
+			id = bundle.getInt("id");
+			code = bundle.getString("code");
+		}
+		int position = bundle.getInt("position");
+		MissionModel entity = bundle.getParcelable("data");
+		if (!isB2b && (id == 0 || StringUtil.isEmpty(code)) || entity == null) return;
+		isSubmiting = true;
+		//获取网络数据
+		if (iMission != null) iMission.showLoading();
+		Context ct = MyApplication.getInstance();
+		Map<String, Object> param = new HashMap<>();
+		Map<String, Object> formStore = new HashMap<>();
+		Map<String, Object> params = new HashMap<>();
+		String name = CommonUtil.getSharedPreferences(ct, "erp_emname");
+		if (StringUtil.isEmpty(name)) {
+			name = MyApplication.getInstance().mLoginUser.getNickName();
+		}
+		/***formStore***/
+		if (!isB2b) {
+			formStore.put("mp_id", id);//请求的id MOBILE_OUTPLAN_SEQ
+			formStore.put("mp_code", code);//code MOBILE_OUTPLAN_SEQ
+		}
+		formStore.put("mp_visittime", TimeUtils.f_long_2_str(System.currentTimeMillis()));
+		if (isB2b) {
+			formStore.put("enuu", CommonUtil.getSharedPreferences(MyApplication.getInstance().getApplicationContext(), "companyEnUu"));
+			formStore.put("emcode", CommonUtil.getSharedPreferences(MyApplication.getInstance().getApplicationContext(), "b2b_uu"));
+		} else {
+			formStore.put("mp_status", "在录入");
+			formStore.put("mp_statuscode", "ENTERING");
+		}
+		formStore.put("mp_recorder", name);//用户名
+		String mp_recordercode = isB2b ? CommonUtil.getSharedPreferences(MyApplication.getInstance().getApplicationContext(), "b2b_uu") :
+				CommonUtil.getSharedPreferences(ct, "erp_username");
+		if (isB2b)
+			formStore.put("recorderCode", mp_recordercode);//编号
+		else
+			formStore.put("mp_recordercode", mp_recordercode);//编号
+		formStore.put("mp_address", MyApplication.getInstance().getBdLocationHelper().getAddress());//当前地址
+		/***params***/
+		if (!isB2b)
+			params.put("mpd_detno", position + 1);
+		if (!isB2b)
+			params.put("mpd_id", "");
+		params.put("mpd_kind", entity.getType() == 1 ? getStrByResources(R.string.half_day)
+				: getStrByResources(R.string.all_day));
+		params.put("mpd_remark", StringUtil.toHttpString(entity.getRemark()));
+		params.put("mpd_distance", BaiduMapUtil.getInstence().getDistance(entity.getLatLng()));
+		params.put("mpd_arrivedate", entity.getVisitTime());
+		if (!isB2b)
+			params.put("mpd_mpid", id);
+		params.put("mpd_company", entity.getCompanyName());
+		params.put("mpd_address", entity.getCompanyAddr());
+		param.put("caller", "lp");
+		/******update by 2016/12/19**************/
+		params.put("mpd_location", entity.getLocation());
+		params.put("mpd_recorddate", entity.getRecorddate());
+		if (isB2b) {
+			params.put("longitude", entity.getLatLng().longitude);
+			params.put("latitude", entity.getLatLng().latitude);
+		}
+		param.put("formStore", JSONUtil.map2JSON(formStore));
+		param.put("param", "[" + JSONUtil.map2JSON(params) + "]");
+
+		String url = isB2b ? ApiConfig.getInstance(ApiUtils.getApiModel()).getmApiBase().saveOutPlan :
+				"mobile/addOutPlan.action";
+		Request request = new Request.Bulider()
+				.setUrl(url)
+				.setWhat(SAVE_PLAN)
+				.setParam(param)
+				.setBundle(bundle)
+				.setMode(Request.Mode.POST)
+				.bulid();
+		OAHttpHelper.getInstance().requestHttp(request, this);
+		saveOutAddress(entity);
+	}
+
+
+	//保存外勤计划目的地
+	private void saveOutAddress(MissionModel entity) {
+		if (entity.getLatLng() == null || entity.getLatLng().latitude == 0 || entity.getLatLng().longitude == 0) {
+			if (iMission != null)
+				iMission.showToast(R.string.not_save_illegal_bill, R.color.load_warning);
+			return;
+		}
+		//获取网络数据
+		Map<String, Object> param = new HashMap<>();
+		Map<String, Object> formStore = new HashMap<>();
+		param.put("caller", "lp");
+		/***formStore***/
 //        formStore.put("Md_id", "");//请求的id MOBILE_OUTPLAN_SEQ
-        formStore.put(isB2b ? "company" : "Md_company", entity.getCompanyName());//拜访公司
-        String length = entity.getCompanyAddr();
-        if (length.length() >= 200)
-            length = length.substring(0, 190);
-        formStore.put("Md_address", length);//拜访地址
-        formStore.put("Md_visitcount", 1);//固定为1,由后台加1
-        formStore.put("Md_visittime", entity.getVisitTime());//预计时间
-        formStore.put("Md_longitude", entity.getLatLng().longitude);//经度
-        formStore.put("Md_latitude", entity.getLatLng().latitude);//纬度
-        if (isB2b) {
-            formStore.put("enuu", CommonUtil.getSharedPreferences(MyApplication.getInstance().getApplicationContext(), "companyEnUu"));
-            formStore.put("emcode", CommonUtil.getEmcode());
-        }
-        param.put("formStore", JSONUtil.map2JSON(formStore));
-        Bundle bundle = new Bundle();
-        String url = isB2b ? ApiConfig.getInstance(ApiUtils.getApiModel()).getmApiBase().saveOutAddress :
-                "mobile/addOutAddress.action";
-        Request request = new Request.Bulider()
-                .setUrl(url)
-                .setWhat(SAVE_ADDRESS)
-                .setParam(param)
-                .setMode(Request.Mode.POST)
-                .setBundle(bundle)
-                .bulid();
-        OAHttpHelper.getInstance().requestHttp(request, this);
-    }
-
-    private boolean canSubmit(MissionModel e, int i) {
-        if (e == null) return false;
-        else if (e.getStatus() != 0) {
-            return false;
-        } else if (StringUtil.isEmpty(e.getCompanyName())) {
-            if (iMission != null)
-                iMission.showToast(getStrByResources(R.string.you_destination)
-                        + i +
-                        getStrByResources(R.string.visit_company) + getStrByResources(R.string.not_edit), R.color.load_warning);
-            return false;
-        } else if (StringUtil.isEmpty(e.getCompanyAddr())) {
-            if (iMission != null)
-                iMission.showToast(getStrByResources(R.string.you_destination) + i +
-                        getStrByResources(R.string.visit_address) + getStrByResources(R.string.not_edit), R.color.load_warning);
-            return false;
-        } else if (e.getLatLng() == null) {
-            if (iMission != null)
-                iMission.showToast(getStrByResources(R.string.you_destination) + i + getStrByResources(R.string.location_error_try_agen), R.color.load_warning);
-            return false;
-        } else if (StringUtil.isEmpty(e.getVisitTime())) {
-            if (iMission != null)
-                iMission.showToast(getStrByResources(R.string.you_destination) + i +
-                        getStrByResources(R.string.expected_arrival_time) + getStrByResources(R.string.not_edit), R.color.load_warning);
-            return false;
-        } else if (StringUtil.isEmpty(e.getRemark())) {
-            if (iMission != null)
-                iMission.showToast(getStrByResources(R.string.you_destination) + i +
-                        getStrByResources(R.string.visit_aim) + getStrByResources(R.string.not_edit), R.color.load_warning);
-            return false;
-        }
-        return true;
-    }
-
-
-    //获取外勤计划列表
-    private void loadMissionByDB() {
-        //没有网络情况下获取缓存的数据
-        List<MissionModel> models = MissionDao.getInstance().queryByEnCode();
-        if (!ListUtils.isEmpty(models)) {
-            if (iMission != null) {
-                iMission.dimssLoading();
-                for (int i = 0; i < models.size(); i++)
-                    models.get(i).setStatus(1);
-                if (modelIntent != null) {
-                    modelIntent.setStatus(0);
-                    models.add(modelIntent);
-                }
-                iMission.showModels(models);
-            }
-        } else {
-            if (modelIntent != null) {
-                modelIntent.setStatus(0);
-                models.add(modelIntent);
-                iMission.showModels(models);
-            } else {
-                if (iMission != null) iMission.dimssLoading();
-            }
-        }
-    }
-
-    //获取外勤计划列表
-    public void loadMissionPlan() {
-        Map<String, Object> param = new HashMap<>();
-        param.put("emcode", CommonUtil.getSharedPreferences(MyApplication.getInstance(), "erp_username"));
-
-        String url = isB2b ? ApiConfig.getInstance(ApiUtils.getApiModel()).getmApiBase().getOutPlan :
-                "mobile/mobileoutplan.action";
-        Request request = new Request.Bulider()
-                .setUrl(url)
-                .setWhat(LOAD_PLAN)
-                .setParam(param)
-                .setMode(Request.Mode.GET)
-                .bulid();
-        OAHttpHelper.getInstance().requestHttp(request, this);
-
-
-    }
-
-    /*提交审批了*/
-    private void submitCommon(int id) {
-        //获取网络数据
-        Map<String, Object> param = new HashMap<>();
-        param.put("caller", "MOBILEOUTPLAN");
-        param.put("id", id);
-        Request request = new Request.Bulider()
-                .setUrl("common/submitCommon.action")
-                .setWhat(SUBMIT)
-                .setParam(param)
-                .setMode(Request.Mode.POST)
-                .bulid();
-        OAHttpHelper.getInstance().requestHttp(request, this);
-    }
-
-
-    @Override
-    public void result(int what, boolean isJSON, String message, Bundle bundle) {
-        try {
-            if (isJSON) {
-                JSONObject object = JSON.parseObject(message);
-                switch (what) {
-                    case LOAD_PLAN:
-                        JSONArray array = null;
-                        if (object.get("data") instanceof JSONArray) {
-                            array = object.getJSONArray("data");
-                        } else if (object.get("success") instanceof JSONArray) {
-                            array = object.getJSONArray("success");
-                        }
-                        handlerData(array);
-                        break;
-                    case SAVE_PLAN:
-                        isSubmiting = false;
-                        if (isJSON && JSON.parseObject(message).getBoolean("success")) {
-                            int mpd_id = JSON.parseObject(message).getIntValue("mpd_id");
-                            int id = 0;
-
-                            if (bundle != null)
-                                id = bundle.getInt("id");
-                            if (id == 0)
-                                id = JSON.parseObject(message).getIntValue("mp_id") - 1;
-                            MissionModel entity = bundle.getParcelable("data");
-                            if (mpd_id != 0 && entity != null) {//保存数据库
-                                entity.setId(mpd_id);
-                                boolean saveOk = MissionDao.getInstance().updataOrCreate(entity);
-                                if (saveOk) {
-                                    Intent intent = new Intent();
-                                    intent.setAction(AppConstant.CHANGE_MISSION_TASK);
-                                    intent.putExtra(AppConstant.CHANGE_MISSION_TASK, true);
-                                    MsgBroadcast.sendLocalBroadcast(intent);
-                                }
-                            }
-                            if (PreferenceUtils.getBoolean(AppConfig.NEED_PROCESS, true) && !isB2b)
-                                submitCommon(id);
-                        }
-                        if (iMission != null) iMission.dimssLoading();
-                        int position = bundle.getInt("position", -1);//成功保存第几个目标
-                        if (iMission != null)
-                            iMission.showToast(R.string.save_ok, R.color.load_submit);
-                        if (iMission != null) {
-                            iMission.changModelStatus(1, position);
-                        }
-                        break;
-                    case ID_WHAT:
-                        if (isJSON && JSON.parseObject(message).containsKey("success") && JSON.parseObject(message).getBoolean("success")) {
-                            int id = JSON.parseObject(message).getInteger("id");
-                            if (id != 0 && bundle != null) {
-                                bundle.putInt("id", id);
-                                loadCode(bundle);
-                            }
-                        }
-                        break;
-                    case CODE_WHAT:
-                        String code = JSON.parseObject(message).getString("code");
-                        if (!StringUtil.isEmpty(code) && bundle != null) {
-                            bundle.putString("code", code);
-                            savePlan2Net(bundle);
-                        }
-                        break;
-                }
-            }
-        } catch (Exception e) {
-            if (iMission != null) iMission.dimssLoading();
-        }
-    }
-
-
-    @Override
-    public void error(int what, String message, Bundle bundle) {
-        isSubmiting = false;
-        if (what == LOAD_PLAN && !StringUtil.isEmpty(StringUtil.getChinese(message)) && StringUtil.getChinese(message).equals("程序错误")) {
-            loadMissionByDB();
-        } else {
-            String showMessage = StringUtil.getChinese(message);
-            if (iMission != null) iMission.dimssLoading();
-            if (StringUtil.isEmpty(showMessage)) return;
-            if (iMission != null) iMission.showToast(showMessage, R.color.load_error);
-        }
-
-    }
-
-
-    /**
-     * 解析处理外勤计划列表并保存到数据库
-     *
-     * @param array
-     */
-    private void handlerData(JSONArray array) throws Exception {
-        if (ListUtils.isEmpty(array)) {
-            if (iMission != null) {
-                loadMissionByDB();
+		formStore.put(isB2b ? "company" : "Md_company", entity.getCompanyName());//拜访公司
+		String length = entity.getCompanyAddr();
+		if (length.length() >= 200)
+			length = length.substring(0, 190);
+		formStore.put("Md_address", length);//拜访地址
+		formStore.put("Md_visitcount", 1);//固定为1,由后台加1
+		formStore.put("Md_visittime", entity.getVisitTime());//预计时间
+		formStore.put("Md_longitude", entity.getLatLng().longitude);//经度
+		formStore.put("Md_latitude", entity.getLatLng().latitude);//纬度
+		if (isB2b) {
+			formStore.put("enuu", CommonUtil.getSharedPreferences(MyApplication.getInstance().getApplicationContext(), "companyEnUu"));
+			formStore.put("emcode", CommonUtil.getEmcode());
+		}
+		param.put("formStore", JSONUtil.map2JSON(formStore));
+		Bundle bundle = new Bundle();
+		String url = isB2b ? ApiConfig.getInstance(ApiUtils.getApiModel()).getmApiBase().saveOutAddress :
+				"mobile/addOutAddress.action";
+		Request request = new Request.Bulider()
+				.setUrl(url)
+				.setWhat(SAVE_ADDRESS)
+				.setParam(param)
+				.setMode(Request.Mode.POST)
+				.setBundle(bundle)
+				.bulid();
+		OAHttpHelper.getInstance().requestHttp(request, this);
+	}
+
+	private boolean canSubmit(MissionModel e, int i) {
+		if (e == null) return false;
+		else if (e.getStatus() != 0) {
+			return false;
+		} else if (StringUtil.isEmpty(e.getCompanyName())) {
+			if (iMission != null)
+				iMission.showToast(getStrByResources(R.string.you_destination)
+						+ i +
+						getStrByResources(R.string.visit_company) + getStrByResources(R.string.not_edit), R.color.load_warning);
+			return false;
+		} else if (StringUtil.isEmpty(e.getCompanyAddr())) {
+			if (iMission != null)
+				iMission.showToast(getStrByResources(R.string.you_destination) + i +
+						getStrByResources(R.string.visit_address) + getStrByResources(R.string.not_edit), R.color.load_warning);
+			return false;
+		} else if (e.getLatLng() == null) {
+			if (iMission != null)
+				iMission.showToast(getStrByResources(R.string.you_destination) + i + getStrByResources(R.string.location_error_try_agen), R.color.load_warning);
+			return false;
+		} else if (StringUtil.isEmpty(e.getVisitTime())) {
+			if (iMission != null)
+				iMission.showToast(getStrByResources(R.string.you_destination) + i +
+						getStrByResources(R.string.expected_arrival_time) + getStrByResources(R.string.not_edit), R.color.load_warning);
+			return false;
+		} else if (StringUtil.isEmpty(e.getRemark())) {
+			if (iMission != null)
+				iMission.showToast(getStrByResources(R.string.you_destination) + i +
+						getStrByResources(R.string.visit_aim) + getStrByResources(R.string.not_edit), R.color.load_warning);
+			return false;
+		}
+		return true;
+	}
+
+
+	//获取外勤计划列表
+	private void loadMissionByDB() {
+		//没有网络情况下获取缓存的数据
+		List<MissionModel> models = MissionDao.getInstance().queryByEnCode();
+		if (!ListUtils.isEmpty(models)) {
+			if (iMission != null) {
+				iMission.dimssLoading();
+				for (int i = 0; i < models.size(); i++)
+					models.get(i).setStatus(1);
+				if (modelIntent != null) {
+					modelIntent.setStatus(0);
+					models.add(modelIntent);
+				}
+				iMission.showModels(models);
+			}
+		} else {
+			if (modelIntent != null) {
+				modelIntent.setStatus(0);
+				models.add(modelIntent);
+				iMission.showModels(models);
+			} else {
+				if (iMission != null) iMission.dimssLoading();
+			}
+		}
+	}
+
+	//获取外勤计划列表
+	public void loadMissionPlan() {
+		Map<String, Object> param = new HashMap<>();
+		param.put("emcode", CommonUtil.getSharedPreferences(MyApplication.getInstance(), "erp_username"));
+
+		String url = isB2b ? ApiConfig.getInstance(ApiUtils.getApiModel()).getmApiBase().getOutPlan :
+				"mobile/mobileoutplan.action";
+		Request request = new Request.Bulider()
+				.setUrl(url)
+				.setWhat(LOAD_PLAN)
+				.setParam(param)
+				.setMode(Request.Mode.GET)
+				.bulid();
+		OAHttpHelper.getInstance().requestHttp(request, this);
+
+
+	}
+
+	/*提交审批了*/
+	private void submitCommon(int id) {
+		//获取网络数据
+		Map<String, Object> param = new HashMap<>();
+		param.put("caller", "MOBILEOUTPLAN");
+		param.put("id", id);
+		Request request = new Request.Bulider()
+				.setUrl("common/submitCommon.action")
+				.setWhat(SUBMIT)
+				.setParam(param)
+				.setMode(Request.Mode.POST)
+				.bulid();
+		OAHttpHelper.getInstance().requestHttp(request, this);
+	}
+
+	public void signinMission(MissionModel model) {
+		if (model == null) return;
+		if (!MyApplication.getInstance().isNetworkActive()) {
+			iMission.showToast(R.string.networks_out, R.color.load_error);
+			return;
+		}
+		iMission.showLoading();
+		Map<String, Object> param = new HashMap<>();
+		Map<String, Object> formStore = new HashMap<>();
+		String emcode = CommonUtil.getEmcode();
+		String name = CommonUtil.getName();
+		String address = MyApplication.getInstance().getBdLocationHelper().getAddress();
+		if (StringUtil.isEmpty(address))
+			address = model.getCompanyAddr();
+		String remark = model.getStatus() == 2 ? MyApplication.getInstance().getString(R.string.auto_mission_signindown)
+				: MyApplication.getInstance().getString(R.string.auto_mission_signinup);
+		String location = model.getCompanyName();
+		if (StringUtil.isEmpty(location) || isB2b)
+			location = MyApplication.getInstance().getBdLocationHelper().getName();
+		formStore.put("mo_remark", remark);//备注
+		formStore.put("mo_company", location);
+		formStore.put("mo_address", address);
+		if (isB2b) {
+			formStore.put("enuu", CommonUtil.getMaster());
+			formStore.put("mpd_id", model.getId());
+			formStore.put("emcode", emcode);
+		} else {
+			param.put("mpd_id", model.getId());
+			param.put("caller", "Mobile_outsign");
+			formStore.put("mo_man", name);
+			formStore.put("mo_mancode", emcode);
+		}
+		param.put("formStore", JSONUtil.map2JSON(formStore));
+		Bundle bundle = new Bundle();
+		bundle.putParcelable("data", model);
+		String url = isB2b ? ApiConfig.getInstance(ApiUtils.getApiModel()).getmApiBase().saveOutSign :
+				"mobile/addAutoSign.action";
+		Request request = new Request.Bulider()
+				.setBundle(bundle)
+				.setMode(Request.Mode.POST)
+				.setParam(param)
+				.setUrl(url)
+				.setWhat(SIGNIN_MISSION)
+				.bulid();
+		OAHttpHelper.getInstance().requestHttp(request, this);
+	}
+
+	@Override
+	public void result(int what, boolean isJSON, String message, Bundle bundle) {
+		try {
+			if (isJSON) {
+				JSONObject object = JSON.parseObject(message);
+				switch (what) {
+					case LOAD_PLAN:
+						JSONArray array = null;
+						if (object.get("data") instanceof JSONArray) {
+							array = object.getJSONArray("data");
+						} else if (object.get("success") instanceof JSONArray) {
+							array = object.getJSONArray("success");
+						}
+						handlerData(array);
+						break;
+					case SAVE_PLAN:
+						isSubmiting = false;
+						if (isJSON && JSON.parseObject(message).getBoolean("success")) {
+							int mpd_id = JSON.parseObject(message).getIntValue("mpd_id");
+							int id = 0;
+
+							if (bundle != null)
+								id = bundle.getInt("id");
+							if (id == 0)
+								id = JSON.parseObject(message).getIntValue("mp_id") - 1;
+							MissionModel entity = bundle.getParcelable("data");
+							if (mpd_id != 0 && entity != null) {//保存数据库
+								entity.setId(mpd_id);
+								boolean saveOk = MissionDao.getInstance().updataOrCreate(entity);
+								if (saveOk) {
+									Intent intent = new Intent();
+									intent.setAction(AppConstant.CHANGE_MISSION_TASK);
+									intent.putExtra(AppConstant.CHANGE_MISSION_TASK, true);
+									MsgBroadcast.sendLocalBroadcast(intent);
+								}
+							}
+							if (PreferenceUtils.getBoolean(AppConfig.NEED_PROCESS, true) && !isB2b)
+								submitCommon(id);
+						}
+						if (iMission != null) iMission.dimssLoading();
+						int position = bundle.getInt("position", -1);//成功保存第几个目标
+						if (iMission != null)
+							iMission.showToast(R.string.save_ok, R.color.load_submit);
+						if (iMission != null) {
+							iMission.changModelStatus(1, position);
+						}
+						break;
+					case ID_WHAT:
+						if (isJSON && JSON.parseObject(message).containsKey("success") && JSON.parseObject(message).getBoolean("success")) {
+							int id = JSON.parseObject(message).getInteger("id");
+							if (id != 0 && bundle != null) {
+								bundle.putInt("id", id);
+								loadCode(bundle);
+							}
+						}
+						break;
+					case CODE_WHAT:
+						String code = JSON.parseObject(message).getString("code");
+						if (!StringUtil.isEmpty(code) && bundle != null) {
+							bundle.putString("code", code);
+							savePlan2Net(bundle);
+						}
+						break;
+					case SIGNIN_MISSION:
+						if (JSON.parseObject(message).containsKey("success") && JSON.parseObject(message).getBoolean("success")) {
+							//成功  更新数据库
+//							if (bundle == null) return;
+//							MissionModel mission = bundle.getParcelable("data");
+//							if (mission == null) return;
+							iMission.showToast("手动签到成功", R.color.load_error);
+							loadMissionPlan();
+						}
+						break;
+				}
+			}
+		} catch (Exception e) {
+
+		} finally {
+			if (iMission != null) iMission.dimssLoading();
+		}
+	}
+
+
+	@Override
+	public void error(int what, String message, Bundle bundle) {
+		isSubmiting = false;
+		if (what == LOAD_PLAN && !StringUtil.isEmpty(StringUtil.getChinese(message)) && StringUtil.getChinese(message).equals("程序错误")) {
+			loadMissionByDB();
+		} else {
+			String showMessage = StringUtil.getChinese(message);
+			if (iMission != null) iMission.dimssLoading();
+			if (StringUtil.isEmpty(showMessage)) return;
+			if (iMission != null) iMission.showToast(showMessage, R.color.load_error);
+		}
+
+	}
+
+
+	/**
+	 * 解析处理外勤计划列表并保存到数据库
+	 *
+	 * @param array
+	 */
+	private void handlerData(JSONArray array) throws Exception {
+		if (ListUtils.isEmpty(array)) {
+			if (iMission != null) {
+				loadMissionByDB();
 //                iMission.dimssLoading();
 //                iMission.showModels(models);
-            }
-            return; //获取到拜访计划数据
-        } else {
-            JSONObject object = null;
-            MissionModel entity = null;
-            final List<MissionModel> entities = new ArrayList<>();
-            for (int i = 0; i < array.size(); i++) {
-                object = array.getJSONObject(i);
-                entity = WorkHandlerUtil.handlerEntity(isB2b, object);
-                if (entity == null)
-                    continue;
-                entities.add(entity);
-            }
-            if (!ListUtils.isEmpty(entities))
-                setModels(entities);
-        }
-    }
-
-
-    private void setModels(final List<MissionModel> models) {
-        boolean saveOk = MissionDao.getInstance().updataOrCreate(models);
-        if (saveOk)
-            loadMissionByDB();
-    }
-
-    private String getStrByResources(int id) {
-        return MyApplication.getInstance().getResources().getString(id);
-    }
+			}
+			return; //获取到拜访计划数据
+		} else {
+			JSONObject object = null;
+			MissionModel entity = null;
+			final List<MissionModel> entities = new ArrayList<>();
+			for (int i = 0; i < array.size(); i++) {
+				object = array.getJSONObject(i);
+				entity = WorkHandlerUtil.handlerEntity(isB2b, object);
+				if (entity == null)
+					continue;
+				entities.add(entity);
+			}
+			if (!ListUtils.isEmpty(entities))
+				setModels(entities);
+		}
+	}
+
+
+	private void setModels(final List<MissionModel> models) {
+		boolean saveOk = MissionDao.getInstance().updataOrCreate(models);
+		if (saveOk)
+			loadMissionByDB();
+	}
+
+	private String getStrByResources(int id) {
+		return MyApplication.getInstance().getResources().getString(id);
+	}
+
+	public MissionModel reckonMission(List<MissionModel> list) {
+		int companyDistance = PreferenceUtils.getInt(AppConfig.ALARM_MISSION_DISTANCE, 500);
+		MissionModel minBean = null;
+		float minDistance = 0;
+		if (ListUtils.isEmpty(list)) {
+			return minBean;
+		}
+		for (MissionModel e : list) {
+			if (!timeAllowMission(e)) continue;//时间上不符合该外勤签到或签退
+			if (e.getLatLng() == null) continue;//定位不存在
+			//获取当前与目的地的距离
+			float distance = BaiduMapUtil.getInstence().autoDistance(e.getLatLng());
+			if (distance == -1f) return null;
+			if (e.getStatus() != 2 &&
+					distance > companyDistance
+					&& !StringUtil.isEmpty(e.getRealTime())) {
+				//符合外勤签退  1.判断进行中的外勤计划,如果离开了签到最后一次,结束该计划
+				minBean = e;
+				minBean.setStatus(2);//结束该外勤
+				break;
+			} else if (distance < companyDistance && (e.getType() != 1 || e.getStatus() != 2)) { //判断符合自动外勤
+				if (minDistance <= 0 || minDistance > distance) {//2.如果第一个不存在,判断获取最近的位置
+					minDistance = distance;
+					minBean = e;
+					if (minBean.getStatus() == 2)
+						minBean.setStatus(3);
+				}
+			}
+		}
+		return minBean;
+	}
+
+	/**
+	 * 判断该对应班次最后一次签到时间和当前是否有足够长的时间间隔
+	 *
+	 * @param bean
+	 * @return
+	 */
+	private boolean timeAllowMission(MissionModel bean) {
+		if (bean == null) return false;
+		if (StringUtil.isEmpty(bean.getRealTime())) return true;
+		String lastTime = StringUtil.isEmpty(bean.getRealLeave()) ? bean.getRealTime() : bean.getRealLeave();
+		return long2LastTime(lastTime);
+	}
+
+	/**
+	 * 判断最后一次签到是否相隔足够长的时间
+	 *
+	 * @param lastSignin 最后一次签到时间  yyyy-MM-dd HH:mm:ss
+	 * @return
+	 */
+	private boolean long2LastTime(String lastSignin) {
+		long last = DateFormatUtil.str2Long(lastSignin, DateFormatUtil.YMD_HMS);
+		if ((System.currentTimeMillis() - last) > (15 * 60 * 1000)) {
+			//如果遍历到了,但是时间相差很小,就更新
+			return true;
+		} else {
+			iMission.showToast("距离上一次打卡时间太短,请稍后再试");
+			return false;
+		}
+	}
 }

+ 652 - 643
app_modular/appworks/src/main/java/com/uas/appworks/OA/erp/presenter/WorkPresenter.java

@@ -52,647 +52,656 @@ import java.util.Map;
  * Created by Bitliker on 2016/12/12.
  */
 public class WorkPresenter implements OnHttpResultListener, IWorkPresenter {
-    private final int WORK_LOG = 0x12;
-    private final int WORK_DATA = 0x11;
-    private final int MAC_VAL = 0x13;
-    private final int LOAD_MAC = 0x14;
-    private final int SIGNING = 0x15;//签到
-    private final int LOAD_WORK_SET = 0x16;//获取考勤设置
-    private final int ADDRESS_CHANGE = 0x14;//地址微调
-
-    private double distance = -1;
-
-    //本地位置
-    private double longitude;
-    private double latitude;
-    private String loaction;
-    private String address;
-
-    private List<WorkLocationModel> locationList;
-    private WorkLocationModel companyLocation;
-
-    private boolean isMacInNet = false;//服务器上是否有mac地址
-    private boolean isSubmiting = false;
-
-    private String macAddress;
-    private boolean isFree = false;
-    private String days;
-    private String name;
-
-
-    private IWorkView iWorkView;
-    private boolean isB2b;
-
-    public WorkPresenter(IWorkView iWorkView, String macAddress) {
-        if (iWorkView == null) new NullPointerException("iWorkView not be null ");
-        this.iWorkView = iWorkView;
-        this.macAddress = macAddress;
-    }
-
-    private void loadLog(ArrayList<WorkModel> models, long time) {
-        if (iWorkView != null)
-            iWorkView.showLoading();
-        String date = TimeUtils.s_long_2_str(time);
-        Map<String, Object> param = new HashMap<>();
-        String code = CommonUtil.getSharedPreferences(MyApplication.getInstance(), "erp_username");
-        param.put("currentMaster", CommonUtil.getSharedPreferences(MyApplication.getInstance(), "erp_master"));
-        if (isB2b)
-            param.put("pageNumber", 1);
-        else
-            param.put("page", 1);
-        param.put("pageSize", 1000);
-        if (!isB2b)
-            param.put("condition", "cl_emcode='" + code + "' and to_char(cl_time,'yyyy-MM-dd')='" + date + "'");
-        else
-            param.put("date", DateFormatUtil.long2Str(time, "yyyyMMdd"));
-        param.put("caller", "CardLog");
-        param.put("emcode", code);
-        param.put("master", CommonUtil.getSharedPreferences(MyApplication.getInstance(), "erp_master"));
-        Bundle bundle = new Bundle();
-        bundle.putParcelableArrayList("models", models);
-        bundle.putLong("time", time);
-        String url = isB2b ? ApiConfig.getInstance(ApiUtils.getApiModel()).getmApiBase().punch_record_url :
-                "mobile/oa/workdata.action";
-        Request request = new Request.Bulider()
-                .setUrl(url)
-                .setWhat(WORK_LOG)
-                .setMode(Request.Mode.GET)
-                .setParam(param)
-                .setBundle(bundle)
-                .bulid();
-        OAHttpHelper.getInstance().requestHttp(request, this);
-    }
-
-    //判断mac地址是否已经上传
-    private void getMacByNet() {
-        if (iWorkView != null) iWorkView.showLoading();
-        //获取网络数据
-        Map<String, Object> param = new HashMap<>();
-        param.put("macaddress", macAddress);
-        param.put("emcode", CommonUtil.getSharedPreferences(MyApplication.getInstance(), "erp_username"));
-        String url = "mobile/queryMobileMac.action";
-
-        Request request = new Request.Bulider()
-                .setUrl(url)
-                .setWhat(LOAD_MAC)
-                .setMode(Request.Mode.GET)
-                .setParam(param)
-                .bulid();
-        OAHttpHelper.getInstance().requestHttp(request, this);
-
-    }
-
-    private void validatorMac(ArrayList<WorkModel> models, String macAddress) {
-        isSubmiting = true;
-        if (iWorkView != null) iWorkView.showLoading();
-        Map<String, Object> param = new HashMap<>();
-        param.put("macAddress", macAddress);
-        param.put("emcode", CommonUtil.getSharedPreferences(MyApplication.getInstance(), "erp_username"));
-        Bundle bundle = new Bundle();
-        bundle.putParcelableArrayList("models", models);
-
-        String url = "mobile/addMobileMac.action";
-        Request request = new Request.Bulider()
-                .setUrl(url)
-                .setWhat(MAC_VAL)
-                .setMode(Request.Mode.POST)
-                .setParam(param)
-                .setBundle(bundle)
-                .bulid();
-        OAHttpHelper.getInstance().requestHttp(request, this);
-
-    }
-
-    //签到
-    private void signinWork(Bundle bundle, String code) {
-        if (iWorkView != null) iWorkView.showLoading();
-        Map<String, Object> param = new HashMap<>();
-        Map<String, Object> form = new HashMap<>();
-
-        //如果是erp就上传code
-        if (!isB2b)
-            form.put("cl_code", code);
-        if (StringUtil.isEmpty(address))
-            address = PreferenceUtils.getString("bdaddress");
-        String phone = MyApplication.getInstance().mLoginUser.getTelephone();
-        if (StringUtil.isEmpty(phone)) {
-            String userId = MyApplication.getInstance().mLoginUser.getUserId();
-            if (!StringUtil.isEmpty(userId)) {
-                User user = UserDao.getInstance().getUserByUserId(userId);
-                phone = user.getTelephone();
-            } else
-                phone = CommonUtil.getSharedPreferences(MyApplication.getInstance(), "user_phone");
-        }
-        String emCode = CommonUtil.getEmcode();
-        String emname = CommonUtil.getSharedPreferences(MyApplication.getInstance(), "erp_emname");
-        if (StringUtil.isEmpty(emname)) {
-            emname = MyApplication.getInstance().mLoginUser.getNickName().trim();
-        }
-        if (StringUtil.isEmpty(loaction))
-            loaction = PreferenceUtils.getString("bdlocation");
-        form.put("cl_address", address);//地址
-        form.put("cl_phone", phone);    //电话号码
-        form.put("cl_distance", distance);//距离
-        form.put("cl_emname", emname);  //名字
-        form.put("cl_location", loaction); //位置
-        form.put("cl_emcode", emCode);//编号 erp员工编号  b2b  enuu
-        if (isB2b) {
-            form.put("enuu", CommonUtil.getSharedPreferences(MyApplication.getInstance().getApplicationContext(), "companyEnUu"));
-            form.put("emcode", CommonUtil.getSharedPreferences(MyApplication.getInstance().getApplicationContext(), "b2b_uu"));
-        }
-        String formStore = JSONUtil.map2JSON(form);
-        param.put("formStore", formStore);
-        if (!isB2b)
-            param.put("caller", "CardLog");
-
-        String url = isB2b ? ApiConfig.getInstance(ApiUtils.getApiModel()).getmApiBase().punch_worksignin_url : "mobile/saveCardLog.action";
-        Request request = new Request.Bulider()
-                .setUrl(url)
-                .setWhat(SIGNING)
-                .setMode(Request.Mode.POST)
-                .setParam(param)
-                .setBundle(bundle)
-                .bulid();
-        OAHttpHelper.getInstance().requestHttp(request, this);
-    }
-
-
-    /*获取高级设置*/
-    private void loadWorkSet(long time) {
-        if (iWorkView != null)
-            iWorkView.showLoading();
-        //获取考勤高级设置时间请求
-        Map<String, Object> param = new HashMap<>();
-        Bundle bundle = new Bundle();
-        bundle.putLong("time", time);
-        if (!isB2b)
-            param.put("code", 1);
-        String url = isB2b ? ApiConfig.getInstance(ApiUtils.getApiModel()).getmApiBase().get_plat_senior_setting_url :
-                "/mobile/getconfigs.action";
-        Request request = new Request.Bulider()
-                .setUrl(url)
-                .setWhat(LOAD_WORK_SET)
-                .setMode(Request.Mode.GET)
-                .setParam(param)
-                .setBundle(bundle)
-                .bulid();
-        OAHttpHelper.getInstance().requestHttp(request, this);
-
-    }
-
-    /*请求班次数据*/
-    private void loadWorkData(long time) {
-        Map<String, Object> param = new HashMap<>();
-        param.put("date", DateFormatUtil.long2Str(time, "yyyyMMdd"));
-        param.put("emcode", CommonUtil.getSharedPreferences(MyApplication.getInstance(), "erp_username"));
-        Bundle bundle = new Bundle();
-        bundle.putLong("time", time);
-        String url = isB2b ? ApiConfig.getInstance(ApiUtils.getApiModel()).getmApiBase().punch_schedule_url :
-                "mobile/getWorkDate.action";
-        Request request = new Request.Bulider()
-                .setUrl(url)
-                .setWhat(WORK_DATA)
-                .setMode(Request.Mode.GET)
-                .setParam(param)
-                .setBundle(bundle)
-                .bulid();
-        OAHttpHelper.getInstance().requestHttp(request, this);
-    }
-
-    public void upDateLocation() {
-        try {
-            setBaiduLocation();
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-    }
-
-    //设置位置信息
-    private void setBaiduLocation() throws Exception {
-        boolean isLocation = MyApplication.getInstance().getBdLocationHelper().locationOk();
-        if (!isLocation) {
-            if (iWorkView != null) {
-                iWorkView.showNotLocation();
-            }
-            return;
-        }
-        longitude = MyApplication.getInstance().getBdLocationHelper().getLongitude();
-        latitude = MyApplication.getInstance().getBdLocationHelper().getLatitude();
-        loaction = MyApplication.getInstance().getBdLocationHelper().getName();
-        address = MyApplication.getInstance().getBdLocationHelper().getAddress();
-        if (iWorkView == null) return;
-        distance = -1;
-        iWorkView.showDistance(getDistance());
-        iWorkView.showLocation(address);
-
-    }
-
-    //获取与公司距离
-    private double getDistance() {
-        try {
-            if (ListUtils.isEmpty(locationList)) return -1;
-            for (WorkLocationModel b : locationList) {
-                String dis = BaiduMapUtil.getInstence().getDistance(
-                        new LatLng(b.getLocation().longitude, b.getLocation().latitude)
-                        , new LatLng(latitude, longitude));
-                if (StringUtil.isEmpty(dis)) continue;
-                if (distance == -1 || distance > Double.valueOf(dis)) {
-                    distance = Double.valueOf(dis);
-                    companyLocation = b;
-                }
-            }
-            return distance;
-        } catch (Exception e) {
-            return -1;
-        }
-    }
-
-
-    public void gotoLocationActivity(Activity ct) {
-        if (companyLocation == null) {
-            iWorkView.showToast(R.string.not_addr_to_select, R.color.load_error);
-            return;
-        }
-        Intent intent = new Intent(ct, SearchLocationActivity.class);
-        SearchPoiParam poiParam = new SearchPoiParam();
-        poiParam.setType(1);
-        poiParam.setTitle(MyApplication.getInstance().getResources().getString(R.string.unoffice));
-        poiParam.setRadius(300);
-        poiParam.setShowRange(companyLocation.getValidrange());
-        poiParam.setContrastLatLng(new LatLng(companyLocation.getLocation().longitude, companyLocation.getLocation().latitude));
-        poiParam.setResultCode(ADDRESS_CHANGE);
-        poiParam.setDistanceTag(MyApplication.getInstance().getResources().getString(R.string.rice));
-        intent.putExtra("data", poiParam);
-        ct.startActivityForResult(intent, ADDRESS_CHANGE);
-    }
-
-    private void getPoi() {
-        if (companyLocation == null) return;
-        //公司地址必须反过来
-        final LatLng compayLng = new LatLng(companyLocation.getLongitude(), companyLocation.getLatitude());
-        LatLng latLng = new LatLng(latitude, longitude);
-        BaiduMapUtil.getInstence().getNearInfo(500, 0, latLng,
-                "公司", new BaiduMapUtil.OnSearchPoiListener() {
-                    @Override
-                    public void result(SearchResult result) {
-                        if (result instanceof PoiResult) {
-                            List<PoiInfo> pois = ((PoiResult) result).getAllPoi();
-                            if (ListUtils.isEmpty(pois) || companyLocation == null) return;
-                            for (int i = 0; i < pois.size(); i++) {
-                                double dis = BaiduMapUtil.getInstence().distance(compayLng, pois.get(i).location);
-                                if (companyLocation.getValidrange() < dis) {
-                                    pois.remove(i);
-                                    i--;
-                                }
-                            }
-                            if (iWorkView != null) iWorkView.setPois(pois, compayLng);
-                        }
-                    }
-                });
-    }
-
-
-    /**
-     * 处理打卡签到
-     *
-     * @param isJSON
-     * @param message
-     * @param time
-     */
-    private void handlerWorkData(boolean isJSON, String message, long time) throws Exception {
-        if (!isJSON) {
-            if (iWorkView != null) {
-                iWorkView.showToast(message, R.color.load_error);
-                showModels(null, time);
-            }
-            return;
-        }
-        JSONObject object = null;
-        object = JSON.parseObject(message);
-        days = JSONUtil.getText(object, "wd_day", "day");
-        name = JSONUtil.getText(object, "wd_name", "name");
-        locationList = WorkHandlerUtil.handerLocation(object, isB2b);
-        //获取当前最近的位置信息
-        if (!ListUtils.isEmpty(locationList)) {
-            float dis = 0;
-            boolean first = true;
-            for (WorkLocationModel location : locationList) {
-                float distance = BaiduMapUtil.getInstence().autoDistance(location.getLocation());
-                if (first || dis > distance) {
-                    dis = distance;
-                    companyLocation = location;
-                }
-            }
-        } else {
-            companyLocation = null;
-        }
-
-        ArrayList<WorkModel> models = WorkHandlerUtil.handlerWorkData(object, isB2b);
-        try {
-            if (ListUtils.isEmpty(locationList) && iWorkView != null && !ListUtils.isEmpty(models))
-                iWorkView.showToast(R.string.not_addr_message, R.color.load_warning);
-            else getPoi();
-            setBaiduLocation();
-        } catch (ClassCastException e) {
-            if (e != null)
-                LogUtil.i("handlerWorkData ClassCastException=" + e.getMessage());
-        } catch (Exception e) {
-            if (e != null)
-                LogUtil.i("handlerWorkData Exception=" + e.getMessage());
-        }
-        //b2b平台接口出现异常
-        Object ifNeedSignCard = object.get("ifNeedSignCard");
-        if (ifNeedSignCard instanceof Boolean)
-            isFree = !((boolean) ifNeedSignCard);
-        else if (ifNeedSignCard instanceof String)
-            isFree = !"是".equals(ifNeedSignCard);
-        if (isFree) {
-            loadLog(null, time);
-            return;
-        }
-        if (ListUtils.isEmpty(models)) {
-            if (iWorkView != null) {
-                iWorkView.showToast(R.string.not_work_message, R.color.load_error);
-                showModels(null, time);
-            }
-            return;
-        }
-        loadLog(models, time);
-    }
-
-    /**
-     * 处理打卡签到列表,建议在线程钟使用
-     *
-     * @param isJSON  是否是json数据
-     * @param message 返回信息
-     * @param logTime 日期时间戳
-     * @throws Exception
-     */
-    private void handlerWorkLog(boolean isJSON, String message, final ArrayList<WorkModel> workModels, long logTime) throws Exception {
-        if (!isJSON || (!isFree && ListUtils.isEmpty(workModels))) {
-            showModels(workModels, logTime);
-            return;
-        }
-        JSONObject object = JSON.parseObject(message);
-        ArrayList<WorkModel> models;
-        if (!isFree) {
-            models = WorkHandlerUtil.handlerWorkLog(object, workModels);
-        } else {
-            models = WorkHandlerUtil.handlerFreeLog(object);
-        }
-        showModels(models, logTime);
-    }
-
-
-    private void showModels(List<WorkModel> models, long longTime) {
-        if (ListUtils.isEmpty(models)) {
-            WorkModelDao.getInstance().clearByDate(longTime);
-        } else {
-            WorkModelDao.getInstance().createOrUpdata(models, longTime);
-        }
-        List<WorkModel> chche = WorkModelDao.getInstance().query(true, longTime);
-        Collections.sort(chche, new Comparator<WorkModel>() {
-            @Override
-            public int compare(WorkModel lhs, WorkModel rhs) {
-                return lhs.getId() - rhs.getId();
-            }
-        });
-        iWorkView.showModel(isFree, chche);
-        iWorkView.dimssLoading();
-    }
-
-
-    private long subMitTime;
-
-    /**
-     * 判断是否符合签到
-     *
-     * @param models
-     * @return
-     */
-    private boolean isSubmitAble(ArrayList<WorkModel> models) {
-        if (ListUtils.isEmpty(models) && !isFree) {
-            if (iWorkView != null)
-                iWorkView.showToast(R.string.not_work_message, R.color.load_warning);
-            return false;
-        }
-        if (isSubmiting) {
-            if (iWorkView != null)
-                iWorkView.showToast(R.string.not_signin_agin, R.color.load_warning);
-            return false;
-        } else if (companyLocation == null || companyLocation.getValidrange() < distance) {
-            if (iWorkView != null)
-                iWorkView.showToast(R.string.too_long, R.color.load_warning);
-            return false;
-        } else if (subMitTime != 0 && (System.currentTimeMillis() - subMitTime) < (20 * 1000)) {
-            if (iWorkView != null)
-                iWorkView.showToast(R.string.not_signin_agin, R.color.load_warning);
-            return false;
-        } else if (!MyApplication.getInstance().isNetworkActive()) {
-            if (iWorkView != null)
-                iWorkView.showToast(R.string.networks_out, R.color.load_warning);
-            return false;
-        }
-        return true;
-    }
-
-
-    /********************
-     * 对外接口
-     *********************************/
-
-    @Override
-    public void start(boolean canShowTocat) {
-        // 判断当前为平台用户;
-        isB2b = ApiUtils.getApiModel() instanceof ApiPlatform;
-//        isB2b = false;
-        MyApplication.getInstance().getBdLocationHelper().requestLocation();
-        if (MyApplication.getInstance().isNetworkActive()) {
-            if (!isB2b)
-                getMacByNet();
-            loadWorkData(System.currentTimeMillis(), canShowTocat);
-        } else if (canShowTocat) {
-            iWorkView.showToast(R.string.networks_out, R.color.load_warning);
-        }
-    }
-
-
-    public void loadWorkData(long time, boolean canShowTocat) {
-        if (!MyApplication.getInstance().isNetworkActive() && canShowTocat) {
-            iWorkView.showToast(R.string.networks_out, R.color.load_warning);
-            return;
-        }
-        if (isB2b)
-            loadWorkData(time);//TODO 如果是b2b的情况就先下拉打卡,因为没有排班设计只有默认班次
-        else
-            loadWorkSet(time);
-    }
-
-
-    @Override
-    public void submit(ArrayList<WorkModel> models, String macAddress) {
-        if (isSubmitAble(models)) {
-            if (isB2b) {
-                Bundle bundle = new Bundle();
-                bundle.putParcelableArrayList("models", models);
-                signinWork(bundle, "");
-            } else if (isMacInNet) {
-                submitWork(models, macAddress);
-            } else {
-                if (iWorkView != null)
-                    iWorkView.showFristMac();
-            }
-        }
-    }
-
-    public void submitByFrist(ArrayList<WorkModel> models, String macAddress) {
-        if (isSubmitAble(models)) {
-            submitWork(models, macAddress);
-        }
-    }
-
-    /**
-     * 提交打卡
-     *
-     * @param models     班次以及打卡记录数据
-     * @param macAddress mac地址
-     */
-    private void submitWork(final ArrayList<WorkModel> models, String macAddress) {
-        subMitTime = System.currentTimeMillis();
-        if (isB2b) {
-            Bundle bundle = new Bundle();
-            bundle.putParcelableArrayList("models", models);
-            signinWork(bundle, "");
-        } else
-            validatorMac(models, macAddress);
-    }
-
-
-    /**
-     * 更改位置信息
-     *
-     * @param poi 位置信息
-     */
-    public void changPoi(PoiInfo poi) {
-        loaction = StringUtil.isEmpty(poi.name) ? "" : poi.name;//位置名称
-        address = StringUtil.isEmpty(poi.address) ? "" : poi.address;
-        latitude = poi.location.latitude;
-        longitude = poi.location.longitude;
-        if (iWorkView == null) return;
-        iWorkView.showLocation(address);
-        distance = -1;
-        iWorkView.showDistance(getDistance());
-    }
-
-
-    @Override
-    public void result(int what, boolean isJSON, String message, final Bundle bundle) {
-        try {
-            ArrayList<WorkModel> models = null;
-            if (iWorkView != null) iWorkView.dimssLoading();
-            switch (what) {
-                case LOAD_WORK_SET://获取打卡设置
-                    long t = System.currentTimeMillis();
-                    if (bundle != null) t = bundle.getLong("time");
-                    if (isJSON)
-                        WorkHandlerUtil.handlerWorkSet(JSON.parseObject(message));
-                    loadWorkData(t);
-                    break;
-                case WORK_DATA://打卡班次
-                    long time = System.currentTimeMillis();
-                    if (bundle != null) time = bundle.getLong("time");
-                    handlerWorkData(isJSON, message, time);
-                    break;
-                case WORK_LOG://打卡列表
-                    long logTime = System.currentTimeMillis();
-                    if (bundle != null) models = bundle.getParcelableArrayList("models");
-                    if (bundle != null) logTime = bundle.getLong("time");
-                    handlerWorkLog(isJSON, message, models, logTime);
-                    break;
-                case MAC_VAL://判断mac地址
-                    if (isJSON && JSON.parseObject(message).containsKey("success") &&
-                            JSON.parseObject(message).getBoolean("success")) {
-                        CommonInterface.getInstance().getCodeByNet("CardLog", new CommonInterface.OnResultListener() {
-                            @Override
-                            public void result(boolean isOk, int result, String message) {
-                                signinWork(bundle, message);
-                            }
-                        });
-                    }
-                    break;
-                case LOAD_MAC://判断是否是第一次请求数据
-                    if (isJSON) {
-                        JSONObject object = JSON.parseObject(message);
-                        if (object.containsKey("success") && object.getBoolean("success")) {
-                            //返回成功
-                            JSONArray array = object.getJSONArray("macaddress");
-                            if (array != null && array.getJSONObject(0).containsKey("MACADDRESS")) {
-                                if ("0".equals(array.getJSONObject(0).getString("MACADDRESS"))) {
-                                    //获取到新的mac地址
-                                    isMacInNet = false;
-                                } else isMacInNet = true;
-                            }
-                        }
-                    } else isMacInNet = false;
-                    break;
-                case SIGNING:
-                    //签到成功
-                    isSubmiting = false;
-                    if (isJSON && JSON.parseObject(message).containsKey("success") && JSON.parseObject(message).getBoolean("success")) {
-                        if (iWorkView != null)
-                            iWorkView.showToast(R.string.signin_ok, R.color.load_submit);
-                        if (bundle != null) models = bundle.getParcelableArrayList("models");
-                        loadLog(models, System.currentTimeMillis());
-                    } else if (iWorkView != null)
-                        iWorkView.showToast(R.string.signin_error, R.color.load_error);
-                    break;
-                default:
-                    break;
-            }
-        } catch (Exception e) {
-            if (e != null)
-                LogUtil.i("result= " + what + " " + e.getMessage());
-        }
-    }
-
-
-    @Override
-    public void error(int what, String message, Bundle bundle) {
-        try {
-            isSubmiting = false;
-            subMitTime = 0;
-            if (iWorkView != null) iWorkView.dimssLoading();
-            if (StringUtil.isInclude(message, "该设备不是考勤打卡常用设备")) {
-                if (iWorkView != null) iWorkView.showErrorMac();
-            } else if (StringUtil.isInclude(message, "设备正处于申请变更绑定阶段")) {
-                if (iWorkView != null) {
-                    long time = 0;
-                    if (bundle != null) time = bundle.getLong("time");
-                    if (time != 0 && !DateFormatUtil.long2Str(DateFormatUtil.YMD).equals(TimeUtils.s_long_2_str(time))) {
-                    } else {
-                        iWorkView.showToast(R.string.mac_changing, R.color.load_warning);
-                        iWorkView.setErrorMac(MyApplication.getInstance().getResources().getString(R.string.mac_changing));
-                    }
-                }
-            } else if (StringUtil.isInclude(message, MyApplication.getInstance().getResources().getString(R.string.mac_other))) {
-                iWorkView.showToast(R.string.mac_other, R.color.load_warning);
-                iWorkView.setErrorMac(MyApplication.getInstance().getResources().getString(R.string.mac_other));
-            } else {
-                String mes = StringUtil.getChinese(message);
-                if (!StringUtil.isEmpty(mes) && iWorkView != null)
-                    iWorkView.showToast(mes, R.color.load_warning);
-            }
-        } catch (Exception e) {
-            if (e != null) LogUtil.i("Error Exception =" + e.getMessage());
-        }
-    }
-
-    /*调转显示我的考勤*/
-    public void showMyRele(Intent intent, List<WorkModel> models) {
-        if (models instanceof ArrayList)
-            intent.putParcelableArrayListExtra("data", (ArrayList<WorkModel>) models);
-        intent.putExtra("isFree", isFree);
-        intent.putExtra("day", days);
-        intent.putExtra("name", name);
-    }
+	private final int WORK_LOG = 0x12;
+	private final int WORK_DATA = 0x11;
+	private final int MAC_VAL = 0x13;
+	private final int LOAD_MAC = 0x14;
+	private final int SIGNING = 0x15;//签到
+	private final int LOAD_WORK_SET = 0x16;//获取考勤设置
+	private final int ADDRESS_CHANGE = 0x14;//地址微调
+
+	private double distance = -1;
+
+	//本地位置
+	private double longitude;
+	private double latitude;
+	private String loaction;
+	private String address;
+
+	private List<WorkLocationModel> locationList;
+	private WorkLocationModel companyLocation;
+
+	private boolean isMacInNet = false;//服务器上是否有mac地址
+	private boolean isSubmiting = false;
+
+	private String macAddress;
+	private boolean isFree = false;
+	private String days;
+	private String name;
+
+
+	private IWorkView iWorkView;
+	private boolean isB2b;
+
+	public WorkPresenter(IWorkView iWorkView, String macAddress) {
+		if (iWorkView == null) new NullPointerException("iWorkView not be null ");
+		this.iWorkView = iWorkView;
+		this.macAddress = macAddress;
+	}
+
+	private void loadLog(ArrayList<WorkModel> models, long time) {
+		if (iWorkView != null)
+			iWorkView.showLoading();
+		String date = TimeUtils.s_long_2_str(time);
+		Map<String, Object> param = new HashMap<>();
+		String code = CommonUtil.getSharedPreferences(MyApplication.getInstance(), "erp_username");
+		param.put("currentMaster", CommonUtil.getSharedPreferences(MyApplication.getInstance(), "erp_master"));
+		if (isB2b)
+			param.put("pageNumber", 1);
+		else
+			param.put("page", 1);
+		param.put("pageSize", 1000);
+		if (!isB2b)
+			param.put("condition", "cl_emcode='" + code + "' and to_char(cl_time,'yyyy-MM-dd')='" + date + "'");
+		else
+			param.put("date", DateFormatUtil.long2Str(time, "yyyyMMdd"));
+		param.put("caller", "CardLog");
+		param.put("emcode", code);
+		param.put("master", CommonUtil.getSharedPreferences(MyApplication.getInstance(), "erp_master"));
+		Bundle bundle = new Bundle();
+		bundle.putParcelableArrayList("models", models);
+		bundle.putLong("time", time);
+		String url = isB2b ? ApiConfig.getInstance(ApiUtils.getApiModel()).getmApiBase().punch_record_url :
+				"mobile/oa/workdata.action";
+		Request request = new Request.Bulider()
+				.setUrl(url)
+				.setWhat(WORK_LOG)
+				.setMode(Request.Mode.GET)
+				.setParam(param)
+				.setBundle(bundle)
+				.bulid();
+		OAHttpHelper.getInstance().requestHttp(request, this);
+	}
+
+	//判断mac地址是否已经上传
+	private void getMacByNet() {
+		if (iWorkView != null) iWorkView.showLoading();
+		//获取网络数据
+		Map<String, Object> param = new HashMap<>();
+		param.put("macaddress", macAddress);
+		param.put("emcode", CommonUtil.getSharedPreferences(MyApplication.getInstance(), "erp_username"));
+		String url = "mobile/queryMobileMac.action";
+
+		Request request = new Request.Bulider()
+				.setUrl(url)
+				.setWhat(LOAD_MAC)
+				.setMode(Request.Mode.GET)
+				.setParam(param)
+				.bulid();
+		OAHttpHelper.getInstance().requestHttp(request, this);
+
+	}
+
+	private void validatorMac(ArrayList<WorkModel> models, String macAddress) {
+		isSubmiting = true;
+		if (iWorkView != null) iWorkView.showLoading();
+		Map<String, Object> param = new HashMap<>();
+		param.put("macAddress", macAddress);
+		param.put("emcode", CommonUtil.getSharedPreferences(MyApplication.getInstance(), "erp_username"));
+		Bundle bundle = new Bundle();
+		bundle.putParcelableArrayList("models", models);
+
+		String url = "mobile/addMobileMac.action";
+		Request request = new Request.Bulider()
+				.setUrl(url)
+				.setWhat(MAC_VAL)
+				.setMode(Request.Mode.POST)
+				.setParam(param)
+				.setBundle(bundle)
+				.bulid();
+		OAHttpHelper.getInstance().requestHttp(request, this);
+
+	}
+
+	//签到
+	private void signinWork(Bundle bundle, String code) {
+		if (iWorkView != null) iWorkView.showLoading();
+		Map<String, Object> param = new HashMap<>();
+		Map<String, Object> form = new HashMap<>();
+
+		//如果是erp就上传code
+		if (!isB2b)
+			form.put("cl_code", code);
+		if (StringUtil.isEmpty(address))
+			address = PreferenceUtils.getString("bdaddress");
+		String phone = MyApplication.getInstance().mLoginUser.getTelephone();
+		if (StringUtil.isEmpty(phone)) {
+			String userId = MyApplication.getInstance().mLoginUser.getUserId();
+			if (!StringUtil.isEmpty(userId)) {
+				User user = UserDao.getInstance().getUserByUserId(userId);
+				phone = user.getTelephone();
+			} else
+				phone = CommonUtil.getSharedPreferences(MyApplication.getInstance(), "user_phone");
+		}
+		String emCode = CommonUtil.getEmcode();
+		String emname = CommonUtil.getSharedPreferences(MyApplication.getInstance(), "erp_emname");
+		if (StringUtil.isEmpty(emname)) {
+			emname = MyApplication.getInstance().mLoginUser.getNickName().trim();
+		}
+		if (StringUtil.isEmpty(loaction))
+			loaction = PreferenceUtils.getString("bdlocation");
+		form.put("cl_address", address);//地址
+		form.put("cl_phone", phone);    //电话号码
+		form.put("cl_distance", distance);//距离
+		form.put("cl_emname", emname);  //名字
+		form.put("cl_location", loaction); //位置
+		form.put("cl_emcode", emCode);//编号 erp员工编号  b2b  enuu
+		if (isB2b) {
+			form.put("enuu", CommonUtil.getSharedPreferences(MyApplication.getInstance().getApplicationContext(), "companyEnUu"));
+			form.put("emcode", CommonUtil.getSharedPreferences(MyApplication.getInstance().getApplicationContext(), "b2b_uu"));
+		}
+		String formStore = JSONUtil.map2JSON(form);
+		param.put("formStore", formStore);
+		if (!isB2b)
+			param.put("caller", "CardLog");
+
+		String url = isB2b ? ApiConfig.getInstance(ApiUtils.getApiModel()).getmApiBase().punch_worksignin_url : "mobile/saveCardLog.action";
+		Request request = new Request.Bulider()
+				.setUrl(url)
+				.setWhat(SIGNING)
+				.setMode(Request.Mode.POST)
+				.setParam(param)
+				.setBundle(bundle)
+				.bulid();
+		OAHttpHelper.getInstance().requestHttp(request, this);
+	}
+
+
+	/*获取高级设置*/
+	private void loadWorkSet(long time) {
+		if (iWorkView != null)
+			iWorkView.showLoading();
+		//获取考勤高级设置时间请求
+		Map<String, Object> param = new HashMap<>();
+		Bundle bundle = new Bundle();
+		bundle.putLong("time", time);
+		if (!isB2b)
+			param.put("code", 1);
+		String url = isB2b ? ApiConfig.getInstance(ApiUtils.getApiModel()).getmApiBase().get_plat_senior_setting_url :
+				"/mobile/getconfigs.action";
+		Request request = new Request.Bulider()
+				.setUrl(url)
+				.setWhat(LOAD_WORK_SET)
+				.setMode(Request.Mode.GET)
+				.setParam(param)
+				.setBundle(bundle)
+				.bulid();
+		OAHttpHelper.getInstance().requestHttp(request, this);
+
+	}
+
+	/*请求班次数据*/
+	private void loadWorkData(long time) {
+		Map<String, Object> param = new HashMap<>();
+		param.put("date", DateFormatUtil.long2Str(time, "yyyyMMdd"));
+		param.put("emcode", CommonUtil.getSharedPreferences(MyApplication.getInstance(), "erp_username"));
+		Bundle bundle = new Bundle();
+		bundle.putLong("time", time);
+		String url = isB2b ? ApiConfig.getInstance(ApiUtils.getApiModel()).getmApiBase().punch_schedule_url :
+				"mobile/getWorkDate.action";
+		Request request = new Request.Bulider()
+				.setUrl(url)
+				.setWhat(WORK_DATA)
+				.setMode(Request.Mode.GET)
+				.setParam(param)
+				.setBundle(bundle)
+				.bulid();
+		OAHttpHelper.getInstance().requestHttp(request, this);
+	}
+
+	public void upDateLocation() {
+		try {
+			setBaiduLocation();
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+
+	//设置位置信息
+	private void setBaiduLocation() throws Exception {
+		boolean isLocation = MyApplication.getInstance().getBdLocationHelper().locationOk();
+		if (!isLocation) {
+			if (iWorkView != null) {
+				iWorkView.showNotLocation();
+			}
+			return;
+		}
+		longitude = MyApplication.getInstance().getBdLocationHelper().getLongitude();
+		latitude = MyApplication.getInstance().getBdLocationHelper().getLatitude();
+		loaction = MyApplication.getInstance().getBdLocationHelper().getName();
+		address = MyApplication.getInstance().getBdLocationHelper().getAddress();
+		if (iWorkView == null) return;
+		distance = -1;
+		iWorkView.showDistance(getDistance());
+		iWorkView.showLocation(address);
+
+	}
+
+	//获取与公司距离
+	private double getDistance() {
+		try {
+			if (ListUtils.isEmpty(locationList)) return -1;
+			for (WorkLocationModel b : locationList) {
+				String dis = BaiduMapUtil.getInstence().getDistance(
+						new LatLng(b.getLocation().longitude, b.getLocation().latitude)
+						, new LatLng(latitude, longitude));
+				if (StringUtil.isEmpty(dis)) continue;
+				if (distance == -1 || distance > Double.valueOf(dis)) {
+					distance = Double.valueOf(dis);
+					companyLocation = b;
+				}
+			}
+			return distance;
+		} catch (Exception e) {
+			return -1;
+		}
+	}
+
+
+	public void gotoLocationActivity(Activity ct) {
+		if (companyLocation == null) {
+			iWorkView.showToast(R.string.not_addr_to_select, R.color.load_error);
+			return;
+		}
+		Intent intent = new Intent(ct, SearchLocationActivity.class);
+		SearchPoiParam poiParam = new SearchPoiParam();
+		poiParam.setType(1);
+		poiParam.setTitle(MyApplication.getInstance().getResources().getString(R.string.unoffice));
+		poiParam.setRadius(300);
+		poiParam.setShowRange(companyLocation.getValidrange());
+		poiParam.setContrastLatLng(new LatLng(companyLocation.getLocation().longitude, companyLocation.getLocation().latitude));
+		poiParam.setResultCode(ADDRESS_CHANGE);
+		poiParam.setDistanceTag(MyApplication.getInstance().getResources().getString(R.string.rice));
+		intent.putExtra("data", poiParam);
+		ct.startActivityForResult(intent, ADDRESS_CHANGE);
+	}
+
+	private void getPoi() {
+		if (companyLocation == null) return;
+		//公司地址必须反过来
+		final LatLng compayLng = new LatLng(companyLocation.getLongitude(), companyLocation.getLatitude());
+		LatLng latLng = new LatLng(latitude, longitude);
+		BaiduMapUtil.getInstence().getNearInfo(500, 0, latLng,
+				"公司", new BaiduMapUtil.OnSearchPoiListener() {
+					@Override
+					public void result(SearchResult result) {
+						if (result instanceof PoiResult) {
+							List<PoiInfo> pois = ((PoiResult) result).getAllPoi();
+							if (ListUtils.isEmpty(pois) || companyLocation == null) return;
+							for (int i = 0; i < pois.size(); i++) {
+								double dis = BaiduMapUtil.getInstence().distance(compayLng, pois.get(i).location);
+								if (companyLocation.getValidrange() < dis) {
+									pois.remove(i);
+									i--;
+								}
+							}
+							if (iWorkView != null) iWorkView.setPois(pois, compayLng);
+						}
+					}
+				});
+	}
+
+
+	/**
+	 * 处理打卡签到
+	 *
+	 * @param isJSON
+	 * @param message
+	 * @param time
+	 */
+	private void handlerWorkData(boolean isJSON, String message, long time) throws Exception {
+		if (!isJSON) {
+			if (iWorkView != null) {
+				iWorkView.showToast(message, R.color.load_error);
+				showModels(null, time);
+			}
+			return;
+		}
+		JSONObject object = null;
+		object = JSON.parseObject(message);
+		days = JSONUtil.getText(object, "wd_day", "day");
+		name = JSONUtil.getText(object, "wd_name", "name");
+		locationList = WorkHandlerUtil.handerLocation(object, isB2b);
+		//获取当前最近的位置信息
+		if (!ListUtils.isEmpty(locationList)) {
+			float dis = 0;
+			boolean first = true;
+			for (WorkLocationModel location : locationList) {
+				float distance = BaiduMapUtil.getInstence().autoDistance(location.getLocation());
+				if (first || dis > distance) {
+					dis = distance;
+					companyLocation = location;
+				}
+			}
+		} else {
+			companyLocation = null;
+		}
+
+		ArrayList<WorkModel> models = WorkHandlerUtil.handlerWorkData(object, isB2b);
+		try {
+			if (ListUtils.isEmpty(locationList) && iWorkView != null && !ListUtils.isEmpty(models))
+				iWorkView.showToast(R.string.not_addr_message, R.color.load_warning);
+			else getPoi();
+			setBaiduLocation();
+		} catch (ClassCastException e) {
+			if (e != null)
+				LogUtil.i("handlerWorkData ClassCastException=" + e.getMessage());
+		} catch (Exception e) {
+			if (e != null)
+				LogUtil.i("handlerWorkData Exception=" + e.getMessage());
+		}
+		//b2b平台接口出现异常
+		Object ifNeedSignCard = object.get("ifNeedSignCard");
+		if (ifNeedSignCard instanceof Boolean)
+			isFree = !((boolean) ifNeedSignCard);
+		else if (ifNeedSignCard instanceof String)
+			isFree = !"是".equals(ifNeedSignCard);
+		if (isFree) {
+			loadLog(null, time);
+			return;
+		}
+		if (ListUtils.isEmpty(models)) {
+			if (iWorkView != null) {
+				iWorkView.showToast(R.string.not_work_message, R.color.load_error);
+				showModels(null, time);
+			}
+			return;
+		}
+		loadLog(models, time);
+	}
+
+	/**
+	 * 处理打卡签到列表,建议在线程钟使用
+	 *
+	 * @param isJSON  是否是json数据
+	 * @param message 返回信息
+	 * @param logTime 日期时间戳
+	 * @throws Exception
+	 */
+	private void handlerWorkLog(boolean isJSON, String message, final ArrayList<WorkModel> workModels, long logTime) throws Exception {
+		if (!isJSON || (!isFree && ListUtils.isEmpty(workModels))) {
+			showModels(workModels, logTime);
+			return;
+		}
+		JSONObject object = JSON.parseObject(message);
+		ArrayList<WorkModel> models;
+		if (!isFree) {
+			models = WorkHandlerUtil.handlerWorkLog(object, workModels);
+		} else {
+			models = WorkHandlerUtil.handlerFreeLog(object);
+		}
+		showModels(models, logTime);
+	}
+
+
+	private void showModels(List<WorkModel> models, long longTime) {
+		if (ListUtils.isEmpty(models)) {
+			WorkModelDao.getInstance().clearByDate(longTime);
+		} else {
+			WorkModelDao.getInstance().createOrUpdata(models, longTime);
+		}
+		List<WorkModel> chche = WorkModelDao.getInstance().query(true, longTime);
+		Collections.sort(chche, new Comparator<WorkModel>() {
+			@Override
+			public int compare(WorkModel lhs, WorkModel rhs) {
+				return lhs.getId() - rhs.getId();
+			}
+		});
+		iWorkView.showModel(isFree, chche);
+		iWorkView.dimssLoading();
+	}
+
+
+	private long subMitTime;
+
+	/**
+	 * 判断是否符合签到
+	 *
+	 * @param models
+	 * @return
+	 */
+	private boolean isSubmitAble(ArrayList<WorkModel> models) {
+		if (ListUtils.isEmpty(models) && !isFree) {
+			if (iWorkView != null)
+				iWorkView.showToast(R.string.not_work_message, R.color.load_warning);
+			return false;
+		}
+		if (isSubmiting) {
+			if (iWorkView != null)
+				iWorkView.showToast(R.string.not_signin_agin, R.color.load_warning);
+			return false;
+		} else if (companyLocation == null || companyLocation.getValidrange() < distance) {
+			if (iWorkView != null)
+				iWorkView.showToast(R.string.too_long, R.color.load_warning);
+			return false;
+		} else if (subMitTime != 0 && (System.currentTimeMillis() - subMitTime) < (20 * 1000)) {
+			if (iWorkView != null)
+				iWorkView.showToast(R.string.not_signin_agin, R.color.load_warning);
+			return false;
+		} else if (!MyApplication.getInstance().isNetworkActive()) {
+			if (iWorkView != null)
+				iWorkView.showToast(R.string.networks_out, R.color.load_warning);
+			return false;
+		}
+		return true;
+	}
+
+
+	/********************
+	 * 对外接口
+	 *********************************/
+
+	@Override
+	public void start(boolean canShowTocat) {
+		// 判断当前为平台用户;
+		isB2b = ApiUtils.getApiModel() instanceof ApiPlatform;
+		MyApplication.getInstance().getBdLocationHelper().requestLocation();
+		if (MyApplication.getInstance().isNetworkActive()) {
+
+//            if (!isB2b)  //TODO 去除手机mac验证
+//                getMacByNet();
+			loadWorkData(System.currentTimeMillis(), canShowTocat);
+		} else if (canShowTocat) {
+			iWorkView.showToast(R.string.networks_out, R.color.load_warning);
+		}
+	}
+
+
+	public void loadWorkData(long time, boolean canShowTocat) {
+		if (!MyApplication.getInstance().isNetworkActive() && canShowTocat) {
+			iWorkView.showToast(R.string.networks_out, R.color.load_warning);
+			return;
+		}
+		if (isB2b)
+			loadWorkData(time);//TODO 如果是b2b的情况就先下拉打卡,因为没有排班设计只有默认班次
+		else
+			loadWorkSet(time);
+	}
+
+
+	@Override
+	public void submit(ArrayList<WorkModel> models, String macAddress) {
+		if (isSubmitAble(models)) {
+			if (isB2b) {
+				Bundle bundle = new Bundle();
+				bundle.putParcelableArrayList("models", models);
+				signinWork(bundle, "");
+			} else {
+				submitWork(models, macAddress);
+			}
+//            else {
+//                if (iWorkView != null)
+//                    iWorkView.showFristMac();
+//            }
+		}
+	}
+
+	public void submitByFrist(ArrayList<WorkModel> models, String macAddress) {
+		if (isSubmitAble(models)) {
+			submitWork(models, macAddress);
+		}
+	}
+
+	/**
+	 * 提交打卡
+	 *
+	 * @param models     班次以及打卡记录数据
+	 * @param macAddress mac地址
+	 */
+	private void submitWork(final ArrayList<WorkModel> models, String macAddress) {
+		subMitTime = System.currentTimeMillis();
+		final Bundle bundle = new Bundle();
+		bundle.putParcelableArrayList("models", models);
+		if (isB2b) {
+			signinWork(bundle, "");
+		} else {
+			CommonInterface.getInstance().getCodeByNet("CardLog", new CommonInterface.OnResultListener() {
+				@Override
+				public void result(boolean isOk, int result, String message) {
+					signinWork(bundle, message);
+				}
+			});
+
+			//validatorMac(models, macAddress);//TODO 去除mac地址验证
+		}
+	}
+
+
+	/**
+	 * 更改位置信息
+	 *
+	 * @param poi 位置信息
+	 */
+	public void changPoi(PoiInfo poi) {
+		loaction = StringUtil.isEmpty(poi.name) ? "" : poi.name;//位置名称
+		address = StringUtil.isEmpty(poi.address) ? "" : poi.address;
+		latitude = poi.location.latitude;
+		longitude = poi.location.longitude;
+		if (iWorkView == null) return;
+		iWorkView.showLocation(address);
+		distance = -1;
+		iWorkView.showDistance(getDistance());
+	}
+
+
+	@Override
+	public void result(int what, boolean isJSON, String message, final Bundle bundle) {
+		try {
+			ArrayList<WorkModel> models = null;
+			if (iWorkView != null) iWorkView.dimssLoading();
+			switch (what) {
+				case LOAD_WORK_SET://获取打卡设置
+					long t = System.currentTimeMillis();
+					if (bundle != null) t = bundle.getLong("time");
+					if (isJSON)
+						WorkHandlerUtil.handlerWorkSet(JSON.parseObject(message));
+					loadWorkData(t);
+					break;
+				case WORK_DATA://打卡班次
+					long time = System.currentTimeMillis();
+					if (bundle != null) time = bundle.getLong("time");
+					handlerWorkData(isJSON, message, time);
+					break;
+				case WORK_LOG://打卡列表
+					long logTime = System.currentTimeMillis();
+					if (bundle != null) models = bundle.getParcelableArrayList("models");
+					if (bundle != null) logTime = bundle.getLong("time");
+					handlerWorkLog(isJSON, message, models, logTime);
+					break;
+				case MAC_VAL://判断mac地址
+					if (isJSON && JSON.parseObject(message).containsKey("success") &&
+							JSON.parseObject(message).getBoolean("success")) {
+						CommonInterface.getInstance().getCodeByNet("CardLog", new CommonInterface.OnResultListener() {
+							@Override
+							public void result(boolean isOk, int result, String message) {
+								signinWork(bundle, message);
+							}
+						});
+					}
+					break;
+				case LOAD_MAC://判断是否是第一次请求数据
+					if (isJSON) {
+						JSONObject object = JSON.parseObject(message);
+						if (object.containsKey("success") && object.getBoolean("success")) {
+							//返回成功
+							JSONArray array = object.getJSONArray("macaddress");
+							if (array != null && array.getJSONObject(0).containsKey("MACADDRESS")) {
+								if ("0".equals(array.getJSONObject(0).getString("MACADDRESS"))) {
+									//获取到新的mac地址
+									isMacInNet = false;
+								} else isMacInNet = true;
+							}
+						}
+					} else isMacInNet = false;
+					break;
+				case SIGNING:
+					//签到成功
+					isSubmiting = false;
+					if (isJSON && JSON.parseObject(message).containsKey("success") && JSON.parseObject(message).getBoolean("success")) {
+						if (iWorkView != null)
+							iWorkView.showToast(R.string.signin_ok, R.color.load_submit);
+						if (bundle != null) models = bundle.getParcelableArrayList("models");
+						loadLog(models, System.currentTimeMillis());
+					} else if (iWorkView != null)
+						iWorkView.showToast(R.string.signin_error, R.color.load_error);
+					break;
+				default:
+					break;
+			}
+		} catch (Exception e) {
+			if (e != null)
+				LogUtil.i("result= " + what + " " + e.getMessage());
+		}
+	}
+
+
+	@Override
+	public void error(int what, String message, Bundle bundle) {
+		try {
+			isSubmiting = false;
+			subMitTime = 0;
+			if (iWorkView != null) iWorkView.dimssLoading();
+			if (StringUtil.isInclude(message, "该设备不是考勤打卡常用设备")) {
+				if (iWorkView != null) iWorkView.showErrorMac();
+			} else if (StringUtil.isInclude(message, "设备正处于申请变更绑定阶段")) {
+				if (iWorkView != null) {
+					long time = 0;
+					if (bundle != null) time = bundle.getLong("time");
+					if (time != 0 && !DateFormatUtil.long2Str(DateFormatUtil.YMD).equals(TimeUtils.s_long_2_str(time))) {
+					} else {
+						iWorkView.showToast(R.string.mac_changing, R.color.load_warning);
+						iWorkView.setErrorMac(MyApplication.getInstance().getResources().getString(R.string.mac_changing));
+					}
+				}
+			} else if (StringUtil.isInclude(message, MyApplication.getInstance().getResources().getString(R.string.mac_other))) {
+				iWorkView.showToast(R.string.mac_other, R.color.load_warning);
+				iWorkView.setErrorMac(MyApplication.getInstance().getResources().getString(R.string.mac_other));
+			} else {
+				String mes = StringUtil.getChinese(message);
+				if (!StringUtil.isEmpty(mes) && iWorkView != null)
+					iWorkView.showToast(mes, R.color.load_warning);
+			}
+		} catch (Exception e) {
+			if (e != null) LogUtil.i("Error Exception =" + e.getMessage());
+		}
+	}
+
+	/*调转显示我的考勤*/
+	public void showMyRele(Intent intent, List<WorkModel> models) {
+		if (models instanceof ArrayList)
+			intent.putParcelableArrayListExtra("data", (ArrayList<WorkModel>) models);
+		intent.putExtra("isFree", isFree);
+		intent.putExtra("day", days);
+		intent.putExtra("name", name);
+	}
 }

+ 15 - 14
app_modular/appworks/src/main/java/com/uas/appworks/OA/erp/utils/AutoErpSigninUitl.java

@@ -98,12 +98,18 @@ public class AutoErpSigninUitl implements OnHttpResultListener {
 			CommonUtil.saveAutoLogtoLocal(getString(R.string.auto_sign_failed), "未获取到mac地址");
 			return;
 		}
+		final Bundle bundle = new Bundle();
+		bundle.putParcelable("data", model);
 		if (isB2b) {
-			Bundle bundle = new Bundle();
-			bundle.putParcelable("data", model);
 			signinWork(bundle, "");
 		} else {
-			validatorMac(model, macAddress);
+//			validatorMac(model, macAddress);  //TODO 关闭mac地址验证
+			CommonInterface.getInstance().getCodeByNet("CardLog", new CommonInterface.OnResultListener() {
+				@Override
+				public void result(boolean isOk, int result, String message) {
+					signinWork(bundle, message);
+				}
+			});
 		}
 	}
 
@@ -403,12 +409,7 @@ public class AutoErpSigninUitl implements OnHttpResultListener {
 				case MAC_VAL://判断mac地址
 					if (isJSON && JSON.parseObject(message).containsKey("success") &&
 							JSON.parseObject(message).getBoolean("success")) {
-						CommonInterface.getInstance().getCodeByNet("CardLog", new CommonInterface.OnResultListener() {
-							@Override
-							public void result(boolean isOk, int result, String message) {
-								signinWork(bundle, message);
-							}
-						});
+
 					} else {
 						CommonUtil.saveAutoLogtoLocal(getString(R.string.auto_sign_failed), message);
 					}
@@ -671,14 +672,14 @@ public class AutoErpSigninUitl implements OnHttpResultListener {
 		//取最后一个
 		JSONObject object = array.getJSONObject(array.size() - 1);
 		String time = object.getString("cl_time");//获取最后一次打卡信息,班次打卡信息
-		time = DateFormatUtil.long2Str(DateFormatUtil.str2Long(time,DateFormatUtil.YMD_HMS), DateFormatUtil.HM);//获取到的
+		time = DateFormatUtil.long2Str(DateFormatUtil.str2Long(time, DateFormatUtil.YMD_HMS), DateFormatUtil.HM);//获取到的
 		LogUtil.i("获取最后一次打卡信息,班次打卡信息=" + time);
 		if (StringUtil.isEmpty(time) || model == null) return;
-		LogUtil.i("model="+JSON.toJSONString(model));
-		LogUtil.i("AUTO_SIGN_SW="+PreferenceUtils.getBoolean(PreferenceUtils.AUTO_SIGN_SW, true));
+		LogUtil.i("model=" + JSON.toJSONString(model));
+		LogUtil.i("AUTO_SIGN_SW=" + PreferenceUtils.getBoolean(PreferenceUtils.AUTO_SIGN_SW, true));
 		if (StringUtil.isEmpty(model.getWorkSignin()) && model.getWorkStart().compareTo(time) <= 0
 				&& model.getWorkTime().compareTo(time) >= 0) {
-			LogUtil.i("11111111111111111111" );
+			LogUtil.i("11111111111111111111");
 			model.setWorkSignin(time);
 			long i = WorkModelDao.getInstance().update(model);
 			if (PreferenceUtils.getBoolean(PreferenceUtils.AUTO_SIGN_SW, true)) {
@@ -693,7 +694,7 @@ public class AutoErpSigninUitl implements OnHttpResultListener {
 			MsgBroadcast.sendLocalBroadcast(intent);
 		} else if (StringUtil.isEmpty(model.getOffSignin()) && model.getOffTime().compareTo(time) <= 0
 				&& model.getOffend().compareTo(time) >= 0) {
-			LogUtil.i("22222222222222222222222222222222" );
+			LogUtil.i("22222222222222222222222222222222");
 			model.setOffSignin(time);
 			WorkModelDao.getInstance().update(model);
 			if (PreferenceUtils.getBoolean(PreferenceUtils.AUTO_SIGN_SW, true)) {