Browse Source

外勤签到未完成

FANGLH 8 years ago
parent
commit
1855dae58b
19 changed files with 1440 additions and 150 deletions
  1. 18 3
      WeiChat/src/main/AndroidManifest.xml
  2. 2 2
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/MainActivity.java
  3. 1 1
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/crm/BusinessDetailInfoActivity.java
  4. 17 21
      WeiChat/src/main/java/com/xzjmyk/pm/activity/util/oa/AutoErpService.java
  5. 2 2
      WeiChat/src/main/java/com/xzjmyk/pm/activity/util/oa/AutoErpSigninUitl.java
  6. 2 2
      WeiChat/src/main/java/com/xzjmyk/pm/activity/util/oa/CommonUtil.java
  7. 8 0
      app_core/common/src/main/java/com/core/constant/AppConstant.java
  8. 3 3
      app_core/common/src/main/java/com/core/dao/SignAutoLogDao.java
  9. 31 1
      app_core/common/src/main/java/com/core/utils/CommonUtil.java
  10. 2 2
      app_core/common/src/main/java/com/core/utils/NotificationManage.java
  11. 1 1
      app_core/common/src/main/java/com/core/utils/OnGetDrivingRouteResult.java
  12. 2 2
      app_core/common/src/main/java/com/core/xmpp/model/SignAutoLogEntity.java
  13. 73 88
      app_modular/appworks/src/main/java/com/uas/appworks/OA/erp/activity/MissionActivity.java
  14. 4 4
      app_modular/appworks/src/main/java/com/uas/appworks/OA/erp/adapter/MissionAdapter.java
  15. 1 1
      app_modular/appworks/src/main/java/com/uas/appworks/OA/erp/imp/IMissionPresenter.java
  16. 1 1
      app_modular/appworks/src/main/java/com/uas/appworks/OA/erp/model/IMission.java
  17. 16 16
      app_modular/appworks/src/main/java/com/uas/appworks/OA/erp/presenter/MissionPresenter.java
  18. 899 0
      app_modular/appworks/src/main/java/com/uas/appworks/OA/erp/utils/AutoErpSigninUitl.java
  19. 357 0
      app_modular/appworks/src/main/java/com/uas/appworks/dao/MissionDao.java

+ 18 - 3
WeiChat/src/main/AndroidManifest.xml

@@ -599,7 +599,12 @@
             android:configChanges="orientation|keyboardHidden"
             android:label="@string/oaoutplan_title"
             android:theme="@style/OAThemeOutOffice"
-            android:windowSoftInputMode="adjustUnspecified|stateHidden" />
+            android:windowSoftInputMode="adjustUnspecified|stateHidden" >
+            <intent-filter>
+                <action android:name="com,modualr.appworks.OutofficeActivity"/>
+                <category android:name="android.intent.category.DEFAULT"/>
+            </intent-filter>
+        </activity>
         <activity
             android:name=".ui.erp.activity.oa.MeetDetailsActivity"
             android:label="@string/meet_detail"
@@ -912,7 +917,12 @@
         <activity
             android:name=".ui.erp.activity.oa.SelectRemarkActivity"
             android:label="@string/activity_visit_aims"
-            android:windowSoftInputMode="stateUnspecified|adjustNothing" />
+            android:windowSoftInputMode="stateUnspecified|adjustNothing" >
+            <intent-filter>
+                <action android:name="com.modular.appworks.SelectRemarkActivity"/>
+                <category android:name="android.intent.category.DEFAULT"/>
+            </intent-filter>
+        </activity>
         <activity
             android:name="com.uas.appworks.OA.erp.activity.FlightsActivity"
             android:label="@string/activity_flights"/>
@@ -1009,7 +1019,12 @@
         </activity>
         <activity
             android:name=".ui.erp.activity.oa.NavigationActivity"
-            android:label="@string/navigation" />
+            android:label="@string/navigation" >
+            <intent-filter>
+                <action android:name="com.modular.appworks.NavigationActivity"/>
+                <category android:name="android.intent.category.DEFAULT"/>
+            </intent-filter>
+        </activity>
         <!-- 计步功能 服务 -->
         <service
             android:name="com.uas.appme.pedometer.service.StepService"

+ 2 - 2
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/MainActivity.java

@@ -79,8 +79,8 @@ import com.uas.appcontact.listener.ImStatusListener;
 import com.uas.appcontact.ui.fragment.GroupChatFragment;
 import com.uas.appcontact.ui.fragment.ContactsFragment;
 import com.xzjmyk.pm.activity.R;
-import com.xzjmyk.pm.activity.bean.oa.SignAutoLogEntity;
-import com.xzjmyk.pm.activity.db.dao.SignAutoLogDao;
+import com.core.xmpp.model.SignAutoLogEntity;
+import com.core.dao.SignAutoLogDao;
 import com.xzjmyk.pm.activity.db.dao.WorkModelDao;
 import com.modular.login.LoginActivity;
 import com.xzjmyk.pm.activity.ui.circle.BusinessCircleFragment;

+ 1 - 1
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/crm/BusinessDetailInfoActivity.java

@@ -52,7 +52,7 @@ import com.lidroid.xutils.view.annotation.ViewInject;
 import com.uas.appworks.OA.erp.model.EmployeesModel;
 import com.xzjmyk.pm.activity.R;
 import com.xzjmyk.pm.activity.ui.erp.activity.DbfindList2Activity;
-import com.xzjmyk.pm.activity.ui.erp.activity.oa.MissionActivity;
+import com.uas.appworks.OA.erp.activity.MissionActivity;
 import com.xzjmyk.pm.activity.ui.erp.adapter.StickyListAdapter;
 import com.xzjmyk.pm.activity.ui.erp.model.list.SimpleData;
 import com.xzjmyk.pm.activity.util.baidu.OnGetDrivingRouteResult;

+ 17 - 21
WeiChat/src/main/java/com/xzjmyk/pm/activity/util/oa/AutoErpService.java

@@ -24,10 +24,12 @@ import com.core.api.wxapi.ApiUtils;
 import com.core.app.AppConfig;
 import com.core.app.MyApplication;
 import com.core.broadcast.MsgBroadcast;
+import com.core.constant.AppConstant;
 import com.core.model.MissionModel;
 import com.core.model.OAConfig;
 import com.core.model.WorkModel;
 import com.core.utils.CommonInterface;
+import com.core.utils.NotificationManage;
 import com.core.utils.TimeUtils;
 import com.uas.appme.pedometer.service.StepService;
 import com.uas.appworks.OA.erp.activity.WorkActivity;
@@ -49,12 +51,6 @@ import static com.common.preferences.PreferenceUtils.getBoolean;
  * 自动Erp服务,开启线程
  */
 public class AutoErpService extends Service {
-    public static final String UPDATA_ERP_CHANGE = "com.app.home.update";//更新账套信息
-    public static final String CHANGE_WORK_TASK = "CHANGE_WORK_TASK";//自动打卡任务变更
-    public static final String CHANGE_MISSION_TASK = "CHANGE_MISSION_TASK";//自动外勤任务变更
-    public static final String INIT_MISSION_TASK = "INIT_MISSION_TASK";//初始化外勤签到任务
-    public static final String DEPOSIT_NOTICE_TASK = "DEPOSIT_NOTICE_TASK";//预约计划提醒任务
-
     public final int STATUS_SIGNING = 0x11;//自动打卡
     public final int STATUS_WORK_ALARM = 0x12;//上班提醒
     public final int STATUS_OFF_ALARM = 0x13;//下班提醒
@@ -84,11 +80,11 @@ public class AutoErpService extends Service {
     private boolean canDNotice = false;
 
     private final String[] flags = {
-            CHANGE_WORK_TASK,//
-            CHANGE_MISSION_TASK,//
-            INIT_MISSION_TASK,//初始化外勤签到任务
-            UPDATA_ERP_CHANGE,//更换公司
-            DEPOSIT_NOTICE_TASK,//预约计划提醒任务
+            AppConstant.CHANGE_WORK_TASK,//
+            AppConstant.CHANGE_MISSION_TASK,//
+            AppConstant.INIT_MISSION_TASK,//初始化外勤签到任务
+            AppConstant.UPDATA_ERP_CHANGE,//更换公司
+            AppConstant.DEPOSIT_NOTICE_TASK,//预约计划提醒任务
             MsgBroadcast.ACTION_MSG_COMPANY_UPDATE//切换账套
     };
 
@@ -130,7 +126,7 @@ public class AutoErpService extends Service {
         public void onReceive(Context context, Intent intent) {
             try {
                 if (intent == null || StringUtil.isEmpty(intent.getAction())) return;
-                else if (intent.getAction().equals(UPDATA_ERP_CHANGE)
+                else if (intent.getAction().equals(AppConstant.UPDATA_ERP_CHANGE)
                         || intent.getAction().equals(MsgBroadcast.ACTION_MSG_COMPANY_UPDATE)) {//账套变更,重新刷新数据,初始化任务
                     log(intent.getAction());
                     String falg = intent.getStringExtra("falg");
@@ -139,25 +135,25 @@ public class AutoErpService extends Service {
                         CommonInterface.getInstance().judgeManager(null);
                         init();
                     }
-                } else if (intent.getAction().equals(CHANGE_WORK_TASK)) {//自动打卡任务变更
-                    log(CHANGE_WORK_TASK);
-                    canWork = intent.getBooleanExtra(CHANGE_WORK_TASK, true);//获取是否开启任务
+                } else if (intent.getAction().equals(AppConstant.CHANGE_WORK_TASK)) {//自动打卡任务变更
+                    log(AppConstant.CHANGE_WORK_TASK);
+                    canWork = intent.getBooleanExtra(AppConstant.CHANGE_WORK_TASK, true);//获取是否开启任务
                     if (canWork && !isWorkRuning) {
                         startWorkTask();
                     } else if (!working)
                         workIter = 0;
-                } else if (intent.getAction().equals(CHANGE_MISSION_TASK)) {//自动外勤任务开启变更
-                    log(CHANGE_MISSION_TASK);
-                    canMission = intent.getBooleanExtra(CHANGE_MISSION_TASK, true);
+                } else if (intent.getAction().equals(AppConstant.CHANGE_MISSION_TASK)) {//自动外勤任务开启变更
+                    log(AppConstant.CHANGE_MISSION_TASK);
+                    canMission = intent.getBooleanExtra(AppConstant.CHANGE_MISSION_TASK, true);
                     log("canMission=" + canMission);
                     if (canMission && !isMissionRuning) {
                         startMissionTask();
                     } else if (!missioning)
                         missionIter = 0;
-                } else if (intent.getAction().equals(INIT_MISSION_TASK)) {
+                } else if (intent.getAction().equals(AppConstant.INIT_MISSION_TASK)) {
                     initMission();
-                } else if (intent.getAction().equals(DEPOSIT_NOTICE_TASK)) {
-                    canDNotice = intent.getBooleanExtra(DEPOSIT_NOTICE_TASK, true);
+                } else if (intent.getAction().equals(AppConstant.DEPOSIT_NOTICE_TASK)) {
+                    canDNotice = intent.getBooleanExtra(AppConstant.DEPOSIT_NOTICE_TASK, true);
                     log("canDNotice=" + canDNotice);
                     if (canDNotice && !isDNoticeRuning) {
                         startDNoticeTask();  //进行预约计划提醒操作

+ 2 - 2
WeiChat/src/main/java/com/xzjmyk/pm/activity/util/oa/AutoErpSigninUitl.java

@@ -36,18 +36,18 @@ import com.core.net.http.http.OnHttpResultListener;
 import com.core.net.http.http.Request;
 import com.core.net.location.BdLocationHelper;
 import com.core.utils.CommonInterface;
+import com.core.utils.OnGetDrivingRouteResult;
 import com.core.utils.TimeUtils;
 import com.core.utils.WorkHandlerUtil;
+import com.uas.appworks.OA.erp.activity.MissionActivity;
 import com.uas.appworks.OA.erp.activity.WorkActivity;
 import com.xzjmyk.pm.activity.R;
 import com.xzjmyk.pm.activity.db.dao.MessageDao;
 import com.xzjmyk.pm.activity.db.dao.MissionDao;
 import com.xzjmyk.pm.activity.db.dao.WorkModelDao;
 import com.xzjmyk.pm.activity.ui.MainActivity;
-import com.xzjmyk.pm.activity.ui.erp.activity.oa.MissionActivity;
 import com.xzjmyk.pm.activity.ui.erp.presenter.MessagePresenter;
 import com.xzjmyk.pm.activity.util.baidu.BaiduMapUtil;
-import com.xzjmyk.pm.activity.util.baidu.OnGetDrivingRouteResult;
 
 import java.util.ArrayList;
 import java.util.HashMap;

+ 2 - 2
WeiChat/src/main/java/com/xzjmyk/pm/activity/util/oa/CommonUtil.java

@@ -65,11 +65,11 @@ import com.umeng.socialize.bean.SHARE_MEDIA;
 import com.xzjmyk.pm.activity.BuildConfig;
 import com.xzjmyk.pm.activity.R;
 import com.core.xmpp.model.ChatMessage;
-import com.xzjmyk.pm.activity.bean.oa.SignAutoLogEntity;
+import com.core.xmpp.model.SignAutoLogEntity;
 import com.core.broadcast.MsgBroadcast;
 import com.core.xmpp.dao.ChatMessageDao;
 import com.core.xmpp.dao.FriendDao;
-import com.xzjmyk.pm.activity.db.dao.SignAutoLogDao;
+import com.core.dao.SignAutoLogDao;
 import com.xzjmyk.pm.activity.ui.erp.activity.WebViewCommActivity;
 import com.xzjmyk.pm.activity.ui.erp.activity.WebViewLoadActivity;
 import com.core.dao.DBManager;

+ 8 - 0
app_core/common/src/main/java/com/core/constant/AppConstant.java

@@ -58,4 +58,12 @@ public class AppConstant {
     public static final String UPHEAD = "UPHEAD";
     public  static  final  String BAIDU_PUSH = "BAIDU_PUSH";
     public static final String FRIEND = "friend";
+
+
+    public static final String UPDATA_ERP_CHANGE = "com.app.home.update";//更新账套信息
+    public static final String CHANGE_WORK_TASK = "CHANGE_WORK_TASK";//自动打卡任务变更
+    public static final String CHANGE_MISSION_TASK = "CHANGE_MISSION_TASK";//自动外勤任务变更
+    public static final String INIT_MISSION_TASK = "INIT_MISSION_TASK";//初始化外勤签到任务
+    public static final String DEPOSIT_NOTICE_TASK = "DEPOSIT_NOTICE_TASK";//预约计划提醒任务
+
 }

+ 3 - 3
WeiChat/src/main/java/com/xzjmyk/pm/activity/db/dao/SignAutoLogDao.java → app_core/common/src/main/java/com/core/dao/SignAutoLogDao.java

@@ -1,12 +1,12 @@
-package com.xzjmyk.pm.activity.db.dao;
+package com.core.dao;
 
 import android.content.ContentValues;
 import android.database.Cursor;
 import android.database.SQLException;
 import android.database.sqlite.SQLiteDatabase;
 
-import com.xzjmyk.pm.activity.bean.oa.SignAutoLogEntity;
 import com.core.db.DatabaseManager;
+import com.core.xmpp.model.SignAutoLogEntity;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -71,7 +71,7 @@ public class SignAutoLogDao {
             }
             stepDb.setTransactionSuccessful();
             stepDb.endTransaction();
-        } catch (android.database.SQLException e) {
+        } catch (SQLException e) {
             e.printStackTrace();
         }catch (Exception e){
             e.printStackTrace();

+ 31 - 1
app_core/common/src/main/java/com/core/utils/CommonUtil.java

@@ -14,15 +14,18 @@ import android.os.Environment;
 import android.os.Looper;
 import android.provider.MediaStore;
 import android.text.TextUtils;
+import android.util.Log;
 import android.widget.Toast;
 
 import com.afollestad.materialdialogs.MaterialDialog;
-import com.core.app.R;
 import com.common.data.StringUtil;
 import com.common.file.PropertiesUtil;
 import com.core.api.wxapi.ApiPlatform;
 import com.core.api.wxapi.ApiUtils;
 import com.core.app.MyApplication;
+import com.core.app.R;
+import com.core.dao.SignAutoLogDao;
+import com.core.xmpp.model.SignAutoLogEntity;
 import com.umeng.socialize.UMShareListener;
 import com.umeng.socialize.bean.SHARE_MEDIA;
 
@@ -515,4 +518,31 @@ public class CommonUtil {
         }
         return 0;
     }
+
+
+    /**
+     * Created by FANGlh on 2017/5/9.
+     * function:日志保存本地通用方法
+     * aa_type; //操作类型 打卡签到or外勤签到
+     * aa_location; // 当前位置
+     * aa_remark; //  失败原因
+     * aa_date; // 时间
+     * aa_telephone; // 手机
+     */
+
+    public static void saveAutoLogtoLocal(String aa_type, String aa_remark) {
+        String aa_date = TimeUtils.f_long_2_str(System.currentTimeMillis());
+        String aa_location = MyApplication.getInstance().getBdLocationHelper().getAddress();
+        String aa_telephone = CommonUtil.getSharedPreferences(MyApplication.getInstance(), "user_phone");
+        Log.i("aa_date,aa_tel", aa_date + "," + aa_telephone);
+
+        SignAutoLogEntity signAutoLogEntity = new SignAutoLogEntity();
+        signAutoLogEntity.setAa_type(aa_type);
+        signAutoLogEntity.setAa_location(aa_location);
+        signAutoLogEntity.setAa_remark(aa_remark);
+        signAutoLogEntity.setAa_date(aa_date);
+        signAutoLogEntity.setAa_telephone(aa_telephone);
+        SignAutoLogDao.addNewData(signAutoLogEntity);
+    }
+
 }

+ 2 - 2
WeiChat/src/main/java/com/xzjmyk/pm/activity/util/oa/NotificationManage.java → app_core/common/src/main/java/com/core/utils/NotificationManage.java

@@ -1,4 +1,4 @@
-package com.xzjmyk.pm.activity.util.oa;
+package com.core.utils;
 
 import android.app.Activity;
 import android.app.Notification;
@@ -11,7 +11,7 @@ import android.support.v7.app.NotificationCompat;
 
 import com.common.data.StringUtil;
 import com.core.app.MyApplication;
-import com.xzjmyk.pm.activity.R;
+import com.core.app.R;
 
 /**
  * 通知工具类

+ 1 - 1
WeiChat/src/main/java/com/xzjmyk/pm/activity/util/baidu/OnGetDrivingRouteResult.java → app_core/common/src/main/java/com/core/utils/OnGetDrivingRouteResult.java

@@ -1,4 +1,4 @@
-package com.xzjmyk.pm.activity.util.baidu;
+package com.core.utils;
 
 import com.baidu.mapapi.search.route.BikingRouteResult;
 import com.baidu.mapapi.search.route.OnGetRoutePlanResultListener;

+ 2 - 2
WeiChat/src/main/java/com/xzjmyk/pm/activity/bean/oa/SignAutoLogEntity.java → app_core/common/src/main/java/com/core/xmpp/model/SignAutoLogEntity.java

@@ -1,4 +1,4 @@
-package com.xzjmyk.pm.activity.bean.oa;
+package com.core.xmpp.model;
 
 import com.alibaba.fastjson.annotation.JSONField;
 
@@ -6,7 +6,7 @@ import com.alibaba.fastjson.annotation.JSONField;
  * Created by FANGlh on 2017/5/9.
  * function:  打卡签到or外勤签到失败缓存本地数据实体类
  */
-public class SignAutoLogEntity  {
+public class SignAutoLogEntity {
     @JSONField  // @JSONField是fastjson中的一个注解。在属性头上加上这个注解中,在对对象进行json转换时,该属性,将不会参与格式化。
     private int id; // 数据中分配id
 

+ 73 - 88
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/oa/MissionActivity.java → app_modular/appworks/src/main/java/com/uas/appworks/OA/erp/activity/MissionActivity.java

@@ -1,4 +1,4 @@
-package com.xzjmyk.pm.activity.ui.erp.activity.oa;
+package com.uas.appworks.OA.erp.activity;
 
 import android.content.BroadcastReceiver;
 import android.content.Context;
@@ -29,31 +29,27 @@ import com.core.app.MyApplication;
 import com.core.base.OABaseActivity;
 import com.core.model.MissionModel;
 import com.core.net.location.BdLocationHelper;
+import com.core.utils.BaiduMapUtil;
+import com.core.utils.OnGetDrivingRouteResult;
 import com.core.utils.TimeUtils;
+import com.core.utils.helper.PopupWindowHelper;
+import com.core.utils.timeutils.wheel.DateTimePicker;
+import com.core.widget.view.model.SelectAimModel;
 import com.lidroid.xutils.ViewUtils;
-import com.lidroid.xutils.view.annotation.ViewInject;
-import com.uas.appworks.OA.erp.activity.MissionSetActivity;
+import com.me.appworks.R;
+import com.uas.appworks.OA.erp.adapter.MissionAdapter;
+import com.uas.appworks.OA.erp.imp.IMissionPresenter;
+import com.uas.appworks.OA.erp.model.IMission;
+import com.uas.appworks.OA.erp.presenter.MissionPresenter;
 import com.uas.appworks.OA.erp.utils.MostLinearLayoutManager;
-import com.xzjmyk.pm.activity.R;
-import com.xzjmyk.pm.activity.ui.erp.adapter.MissionAdapter;
-import com.core.widget.view.model.SelectAimModel;
-import com.xzjmyk.pm.activity.ui.erp.presenter.MissionPresenter;
-import com.xzjmyk.pm.activity.ui.erp.presenter.imp.IMission;
-import com.xzjmyk.pm.activity.ui.erp.presenter.imp.IMissionPresenter;
-import com.xzjmyk.pm.activity.util.baidu.BaiduMapUtil;
-import com.xzjmyk.pm.activity.util.baidu.OnGetDrivingRouteResult;
-import com.core.utils.helper.PopupWindowHelper;
-import com.xzjmyk.pm.activity.view.wheel.DateTimePicker;
 
 import java.util.List;
 
-import static com.xzjmyk.pm.activity.util.baidu.BaiduMapUtil.getInstence;
 
 /**
  * 外勤打卡
  */
 public class MissionActivity extends OABaseActivity implements View.OnClickListener, IMission, MissionAdapter.OnitemClickListener {
-    @ViewInject(R.id.recycler)
     private RecyclerView recycler;
     public int position;//调转指针
     private IMissionPresenter presenter;
@@ -124,6 +120,7 @@ public class MissionActivity extends OABaseActivity implements View.OnClickListe
 
     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);
@@ -148,7 +145,7 @@ public class MissionActivity extends OABaseActivity implements View.OnClickListe
         } else {
             if (flag == 1) {
                 //启动手动外勤
-                Intent intent = new Intent(ct, OutofficeActivity.class);
+                Intent intent = new Intent("com,modualr.appworks.OutofficeActivity");
                 intent.putExtra(AppConfig.IS_ADMIN, true);//上传管理员状态
                 startActivity(intent);
                 finish();
@@ -190,20 +187,17 @@ public class MissionActivity extends OABaseActivity implements View.OnClickListe
 
     @Override
     public void onClick(View view) {
-        switch (view.getId()) {
-            case R.id.additem_tv:
-                if (!ListUtils.isEmpty(adapter.getModels())) {
-                    addEntity(adapter.getModels());
-                    adapter.notifyItemInserted(adapter.getModels().size() - 1);
-                }
-                break;
-            case R.id.click_btn:
-                if (!locationOk) {
-                    showNotLocation();
-                    return;
-                }
-                presenter.submit(adapter.getModels());
-                break;
+        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());
         }
     }
 
@@ -212,65 +206,56 @@ public class MissionActivity extends OABaseActivity implements View.OnClickListe
     public void click(final int position, MissionModel model, View view) {
         Intent intent = null;
         MissionActivity.this.position = position;
-        switch (view.getId()) {
-            case R.id.item_company_tv://选择公司名称
-                if (model == null || model.getStatus() == 1) return;
-                intent = new Intent(ct, SelectAimActivity.class);
-                startActivityForResult(intent, 0x20);
-                break;
-
-            case 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) {
+        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;
 
-                                }
-                            }
-                        }).setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
-                            @Override
-                            public void onClick(DialogInterface dialogInterface, int i) {
+                                adapter.getModels().remove(position);
+                                adapter.notifyItemRemoved(position);
+                                adapter.notifyItemRangeChanged(position, adapter.getModels().size());
+                            } catch (Exception e) {
 
                             }
-                        }).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());
-                }
+                        }
+                    }).setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
+                        @Override
+                        public void onClick(DialogInterface dialogInterface, int i) {
 
-                break;
-            case R.id.item_reckontime_tv://预计到达时间
-                if (model == null || model.getStatus() == 1) return;
-                showDateDialog();
-                break;
-            case R.id.item_remark_tv:
-                if (model == null || model.getStatus() == 1) return;
-                intent = new Intent(ct, SelectRemarkActivity.class);
-                startActivityForResult(intent, 0x23);
-
-                break;
-            case R.id.navigation_tv:
-                intent = new Intent(ct, NavigationActivity.class);
-                intent.putExtra("toLocation", model.getLatLng());
-                startActivityForResult(intent, 0x23);
-                break;
+                        }
+                    }).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);
         }
     }
 
@@ -343,7 +328,7 @@ public class MissionActivity extends OABaseActivity implements View.OnClickListe
             if (!isAuto && !(ApiUtils.getApiModel() instanceof ApiPlatform)) {
                 if (flag == 1) {
                     //启动手动外勤
-                    Intent intent = new Intent(ct, OutofficeActivity.class);
+                    Intent intent = new Intent("com,modualr.appworks.OutofficeActivity");
                     intent.putExtra(AppConfig.IS_ADMIN, true);
                     startActivity(intent);
                     finish();
@@ -370,7 +355,7 @@ public class MissionActivity extends OABaseActivity implements View.OnClickListe
         adapter.getModels().get(position).setVisitcount(1 + entity.getTimes());
         if (entity.getLatLng() != null) {
             adapter.getModels().get(position).setLatLng(entity.getLatLng());
-            adapter.getModels().get(position).setDistance(getInstence().distance(adapter.getModels().get(position).getLatLng()
+            adapter.getModels().get(position).setDistance(BaiduMapUtil.getInstence().distance(adapter.getModels().get(position).getLatLng()
                     , new LatLng(MyApplication.getInstance().getBdLocationHelper().getLatitude(),
                             MyApplication.getInstance().getBdLocationHelper().getLongitude())));
         }
@@ -392,7 +377,7 @@ public class MissionActivity extends OABaseActivity implements View.OnClickListe
      * @update by 2017/1/11
      */
     private void setEndTime(LatLng location, final double dis) {
-        getInstence().getDrivingRoute(MyApplication.getInstance().getBdLocationHelper().getLocation(), location,
+        BaiduMapUtil.getInstence().getDrivingRoute(MyApplication.getInstance().getBdLocationHelper().getLocation(), location,
                 new OnGetDrivingRouteResult() {
                     @Override
                     public void onGetDrivingRouteResult(DrivingRouteResult drivingRouteResult) {

+ 4 - 4
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/adapter/MissionAdapter.java → app_modular/appworks/src/main/java/com/uas/appworks/OA/erp/adapter/MissionAdapter.java

@@ -1,4 +1,4 @@
-package com.xzjmyk.pm.activity.ui.erp.adapter;
+package com.uas.appworks.OA.erp.adapter;
 
 import android.support.v7.widget.RecyclerView;
 import android.util.Log;
@@ -9,12 +9,12 @@ import android.widget.CompoundButton;
 import android.widget.RadioButton;
 import android.widget.TextView;
 
+import com.common.data.ListUtils;
 import com.common.data.StringUtil;
-import com.xzjmyk.pm.activity.R;
 import com.core.base.BaseActivity;
 import com.core.model.MissionModel;
-import com.common.data.ListUtils;
-import com.xzjmyk.pm.activity.util.baidu.BaiduMapUtil;
+import com.core.utils.BaiduMapUtil;
+import com.me.appworks.R;
 
 import java.text.DecimalFormat;
 import java.util.List;

+ 1 - 1
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/presenter/imp/IMissionPresenter.java → app_modular/appworks/src/main/java/com/uas/appworks/OA/erp/imp/IMissionPresenter.java

@@ -1,4 +1,4 @@
-package com.xzjmyk.pm.activity.ui.erp.presenter.imp;
+package com.uas.appworks.OA.erp.imp;
 
 import android.content.Intent;
 

+ 1 - 1
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/presenter/imp/IMission.java → app_modular/appworks/src/main/java/com/uas/appworks/OA/erp/model/IMission.java

@@ -1,4 +1,4 @@
-package com.xzjmyk.pm.activity.ui.erp.presenter.imp;
+package com.uas.appworks.OA.erp.model;
 
 import com.core.base.HttpImp;
 import com.core.model.MissionModel;

+ 16 - 16
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/presenter/MissionPresenter.java → app_modular/appworks/src/main/java/com/uas/appworks/OA/erp/presenter/MissionPresenter.java

@@ -1,4 +1,4 @@
-package com.xzjmyk.pm.activity.ui.erp.presenter;
+package com.uas.appworks.OA.erp.presenter;
 
 import android.content.Context;
 import android.content.Intent;
@@ -8,34 +8,34 @@ import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.common.data.JSONUtil;
+import com.common.data.ListUtils;
 import com.common.data.StringUtil;
 import com.common.preferences.PreferenceUtils;
+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.MyApplication;
-import com.xzjmyk.pm.activity.R;
 import com.core.broadcast.MsgBroadcast;
-import com.xzjmyk.pm.activity.db.dao.MissionDao;
+import com.core.constant.AppConstant;
 import com.core.model.MissionModel;
-import com.xzjmyk.pm.activity.ui.erp.presenter.imp.IMission;
-import com.xzjmyk.pm.activity.ui.erp.presenter.imp.IMissionPresenter;
-import com.xzjmyk.pm.activity.util.oa.CommonUtil;
-import com.common.data.ListUtils;
-import com.xzjmyk.pm.activity.util.oa.AutoErpService;
-import com.core.utils.WorkHandlerUtil;
 import com.core.net.http.http.OAHttpHelper;
 import com.core.net.http.http.OnHttpResultListener;
 import com.core.net.http.http.Request;
+import com.core.utils.BaiduMapUtil;
+import com.core.utils.CommonUtil;
 import com.core.utils.TimeUtils;
-import com.core.api.wxapi.ApiConfig;
-import com.core.api.wxapi.ApiPlatform;
-import com.core.api.wxapi.ApiUtils;
+import com.core.utils.WorkHandlerUtil;
+import com.me.appworks.R;
+import com.uas.appworks.OA.erp.imp.IMissionPresenter;
+import com.uas.appworks.OA.erp.model.IMission;
+import com.uas.appworks.dao.MissionDao;
 
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
-import static com.xzjmyk.pm.activity.util.baidu.BaiduMapUtil.getInstence;
 
 
 /**
@@ -205,7 +205,7 @@ public class MissionPresenter implements IMissionPresenter, OnHttpResultListener
         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", getInstence().getDistance(entity.getLatLng()));
+        params.put("mpd_distance", BaiduMapUtil.getInstence().getDistance(entity.getLatLng()));
         params.put("mpd_arrivedate", entity.getVisitTime());
         if (!isB2b)
             params.put("mpd_mpid", id);
@@ -401,8 +401,8 @@ public class MissionPresenter implements IMissionPresenter, OnHttpResultListener
                                 boolean saveOk = MissionDao.getInstance().updataOrCreate(entity);
                                 if (saveOk) {
                                     Intent intent = new Intent();
-                                    intent.setAction(AutoErpService.CHANGE_MISSION_TASK);
-                                    intent.putExtra(AutoErpService.CHANGE_MISSION_TASK, true);
+                                    intent.setAction(AppConstant.CHANGE_MISSION_TASK);
+                                    intent.putExtra(AppConstant.CHANGE_MISSION_TASK, true);
                                     MsgBroadcast.sendLocalBroadcast(intent);
                                 }
                             }

+ 899 - 0
app_modular/appworks/src/main/java/com/uas/appworks/OA/erp/utils/AutoErpSigninUitl.java

@@ -0,0 +1,899 @@
+package com.uas.appworks.OA.erp.utils;
+
+import android.content.Context;
+import android.content.Intent;
+import android.os.Bundle;
+import android.support.v4.content.LocalBroadcastManager;
+import android.util.Log;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baidu.mapapi.model.LatLng;
+import com.baidu.mapapi.search.route.DrivingRouteLine;
+import com.baidu.mapapi.search.route.DrivingRouteResult;
+import com.common.LogUtil;
+import com.common.data.DateFormatUtil;
+import com.common.data.JSONUtil;
+import com.common.data.ListUtils;
+import com.common.data.StringUtil;
+import com.common.preferences.PreferenceUtils;
+import com.common.system.SystemUtil;
+import com.common.thread.ThreadUtil;
+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.MyApplication;
+import com.core.app.R;
+import com.core.broadcast.MsgBroadcast;
+import com.core.constant.AppConstant;
+import com.core.dao.UserDao;
+import com.core.dao.work.WorkModelDao;
+import com.core.model.MissionModel;
+import com.core.model.OAConfig;
+import com.core.model.User;
+import com.core.model.WorkModel;
+import com.core.net.http.http.OAHttpHelper;
+import com.core.net.http.http.OnHttpResultListener;
+import com.core.net.http.http.Request;
+import com.core.net.location.BdLocationHelper;
+import com.core.utils.BaiduMapUtil;
+import com.core.utils.CommonInterface;
+import com.core.utils.CommonUtil;
+import com.core.utils.NotificationManage;
+import com.core.utils.OnGetDrivingRouteResult;
+import com.core.utils.TimeUtils;
+import com.core.utils.WorkHandlerUtil;
+import com.uas.appworks.OA.erp.activity.MissionActivity;
+import com.uas.appworks.OA.erp.activity.WorkActivity;
+import com.uas.appworks.dao.MissionDao;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import static com.core.constant.AppConstant.CHANGE_WORK_TASK;
+import static com.core.net.http.ViewUtil.ct;
+import static com.core.utils.CommonUtil.getSharedPreferences;
+
+/**
+ * 负责签到   内外勤
+ * Created by Bitliker on 2016/12/20.
+ */
+public class AutoErpSigninUitl implements OnHttpResultListener {
+
+    private final int MAC_VAL = 0x11;//判断mac地址
+    private final int SIGNING = 0x12;//内勤签到
+    private final int LOAD_WORKLOG = 0x13;//打卡列表
+    private final int SIGNIN_MISSION = 0x14;//外勤签到
+    private final int HAVE_OUT_PLAN = 0x15;//还有未拜访外勤计划
+    private final int WORK_DATA = 0x16;//内勤列表
+    private final int WORK_LOG = 0x17;//下拉列表时候的获取打卡列表
+    private final int LOAD_PLAN = 0x18;
+    private final int LOAD_WORK_SET = 0x21;//获取打卡高级设置
+    private boolean isB2b;
+    private NotificationManage notificationManage;
+
+    public AutoErpSigninUitl() {
+        notificationManage = new NotificationManage();
+        isB2b = ApiUtils.getApiModel() instanceof ApiPlatform;
+    }
+
+    /**
+     * 签到内勤
+     *
+     * @param model 签到班次对象
+     */
+    public void signinWork(WorkModel model) {
+        //1.判读mac地址是否符合     3.签到
+        if (!MyApplication.getInstance().isNetworkActive()) {
+           CommonUtil.saveAutoLogtoLocal(getString(R.string.auto_sign_failed), getString(R.string.common_notlinknet));
+            return;
+        }
+        String macAddress = SystemUtil.getMac(MyApplication.getInstance());
+        if (StringUtil.isEmpty(macAddress)) {
+           CommonUtil.saveAutoLogtoLocal(getString(R.string.auto_sign_failed), "未获取到mac地址");
+            return;
+        }
+        if (isB2b) {
+            Bundle bundle = new Bundle();
+            bundle.putParcelable("data", model);
+            signinWork(bundle, "");
+        } else {
+            validatorMac(model, macAddress);
+        }
+    }
+
+    /**
+     * 签到外勤
+     *
+     * @param model 签到对象
+     */
+    public void signinMission(MissionModel model) {
+        if (model == null) return;
+        if (!MyApplication.getInstance().isNetworkActive()) {
+            notificationManage.sendNotification(ct, R.string.out_net_signin, MissionActivity.class);
+            CommonUtil.saveAutoLogtoLocal(getString(R.string.auto_outplan_failed), getString(R.string.common_notlinknet));
+            return;
+        }
+        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);
+    }
+
+    /*判断mac地址是否符合*/
+    private void validatorMac(WorkModel model, String macAddress) {
+        Map<String, Object> param = new HashMap<>();
+        param.put("macAddress", macAddress);
+        param.put("emcode", getSharedPreferences(MyApplication.getInstance(), "erp_username"));
+        Bundle bundle = new Bundle();
+        bundle.putParcelable("data", model);
+        String url = "mobile/addMobileMac.action";
+        Request request = new Request.Bulider()
+                .setBundle(bundle)
+                .setMode(Request.Mode.POST)
+                .setParam(param)
+                .setUrl(url)
+                .setWhat(MAC_VAL)
+                .bulid();
+        OAHttpHelper.getInstance().requestHttp(request, this);
+    }
+
+    //签到
+    private void signinWork(Bundle bunder, String code) {
+        Context ct = MyApplication.getInstance();
+        Map<String, Object> param = new HashMap<>();
+        Map<String, Object> form = new HashMap<>();
+        if (!isB2b)
+            form.put("cl_code", code);
+        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 = getSharedPreferences(MyApplication.getInstance(), "user_phone");
+        }
+        form.put("cl_phone", phone);
+        form.put("cl_emcode", getSharedPreferences(ct, "erp_username"));
+        String emname = getSharedPreferences(ct, "erp_emname");
+        if (StringUtil.isEmpty(emname)) {
+            emname = MyApplication.getInstance().mLoginUser.getNickName().trim();
+        }
+        form.put("cl_emname", emname);
+        boolean isp = isPlay(form);
+        if (!isp) {
+            return;//不符合打卡
+        }
+        if (isB2b) {
+            form.put("enuu", getSharedPreferences(MyApplication.getInstance().getApplicationContext(), "companyEnUu"));
+            form.put("emcode", getSharedPreferences(MyApplication.getInstance().getApplicationContext(), "b2b_uu"));
+        } else
+            param.put("caller", "CardLog");
+
+        String formStore = JSONUtil.map2JSON(form);
+        param.put("formStore", formStore);
+        param.put("emcode", getSharedPreferences(ct, "erp_username"));
+        String url = isB2b ? ApiConfig.getInstance(ApiUtils.getApiModel()).getmApiBase().punch_worksignin_url :
+                "mobile/saveCardLog.action";
+        Request request = new Request.Bulider()
+                .setBundle(bunder)
+                .setMode(Request.Mode.POST)
+                .setParam(param)
+                .setUrl(url)
+                .setWhat(SIGNING)
+                .bulid();
+        OAHttpHelper.getInstance().requestHttp(request, this);
+
+    }
+
+
+    /*判断是否符合打卡*/
+    private boolean isPlay(Map<String, Object> form) {
+        try {
+            //判断是否符合打卡
+            BdLocationHelper helper = MyApplication.getInstance().getBdLocationHelper();
+            String address = helper.getAddress();
+            if (StringUtil.isEmpty(address))
+                address = PreferenceUtils.getString("bdaddress");
+            form.put("cl_address", address);
+            form.put("cl_location", "android " + MyApplication.getInstance().getString(R.string.auto_work_signin_log));
+//            int comDistance = PreferenceUtils.getInt("distance", 0);
+            float distance = BaiduMapUtil.getInstence().getDistance();
+            if (distance == 0) {
+                //TODO 规定地址<实际地址  不符合
+                //判断是否有外勤
+                boolean isOutPlan = PreferenceUtils.getBoolean(AppConfig.HAVE_OUT_PLAN, false);
+                if (!isOutPlan) {
+                    //TODO 没有自动外勤
+                }
+                return false;
+            } else {
+                form.put("cl_distance", distance);
+                return true;
+            }
+        } catch (NullPointerException e) {
+            return false;
+        } catch (Exception e) {
+            return false;
+        }
+    }
+
+    //获取打卡记录
+    private void loadLog(Bundle bunder) throws Exception {
+        String date = TimeUtils.s_long_2_str(System.currentTimeMillis());
+        //获取网络数据
+        Map<String, Object> param = new HashMap<>();
+        String code = getSharedPreferences(MyApplication.getInstance(), "erp_username");
+        param.put("currentMaster", getSharedPreferences(MyApplication.getInstance(), "erp_master"));
+        if (isB2b) {
+            param.put("pageNumber", 1);
+            param.put("date", DateFormatUtil.long2Str(System.currentTimeMillis(), "yyyyMMdd"));
+        } else {
+            param.put("page", 1);
+            param.put("condition", "cl_emcode='" + code + "' and to_char(cl_time,'yyyy-MM-dd')='" + date + "'");
+        }
+        param.put("pageSize", 100);
+        param.put("caller", "CardLog");
+        param.put("emcode", code);
+        param.put("master", getSharedPreferences(MyApplication.getInstance(), "erp_master"));
+
+        String url = isB2b ? ApiConfig.getInstance(ApiUtils.getApiModel()).getmApiBase().punch_record_url :
+                "mobile/oa/workdata.action";
+        Request request = new Request.Bulider()
+                .setBundle(bunder)
+                .setMode(Request.Mode.GET)
+                .setParam(param)
+                .setUrl(url)
+                .setWhat(LOAD_WORKLOG)
+                .bulid();
+        OAHttpHelper.getInstance().requestHttp(request, this);
+    }
+
+    //获取是否有外勤计划
+    public void loadIsMission(MissionModel model) {
+        Map<String, Object> param = new HashMap<>();
+        param.put("emcode", getSharedPreferences(MyApplication.getInstance(), "erp_username"));
+        Bundle bunder = new Bundle();
+        bunder.putParcelable("data", model);
+        String url = "mobile/yesornoplan.action";
+        Request request = new Request.Bulider()
+                .setParam(param)
+                .setBundle(bunder)
+                .setUrl(url)
+                .setWhat(HAVE_OUT_PLAN)
+                .setMode(Request.Mode.GET)
+                .bulid();
+        OAHttpHelper.getInstance().requestHttp(request, this);
+    }
+
+
+    /*****************
+     * 下拉列表
+     ***********************/
+    /**
+     * 下拉内勤数据
+     */
+    public void loadWorkData() {
+        Map<String, Object> param = new HashMap<>();
+        param.put("date", DateFormatUtil.long2Str("yyyyMMdd"));
+        param.put("emcode", getSharedPreferences(MyApplication.getInstance(), "erp_username"));
+        Bundle bundle = new Bundle();
+
+        String url = isB2b ? ApiConfig.getInstance(ApiUtils.getApiModel()).getmApiBase().punch_schedule_url :
+                "mobile/getWorkDate.action";
+        Request request = new Request.Bulider()
+                .setBundle(bundle)
+                .setMode(Request.Mode.GET)
+                .setParam(param)
+                .setUrl(url)
+                .setWhat(WORK_DATA)
+                .bulid();
+        OAHttpHelper.getInstance().requestHttp(request, this);
+
+    }
+
+
+    private void loadLog(ArrayList<WorkModel> models) {
+        String date = TimeUtils.s_long_2_str(System.currentTimeMillis());
+        //获取网络数据
+        Map<String, Object> param = new HashMap<>();
+        String code = getSharedPreferences(MyApplication.getInstance(), "erp_username");
+        param.put("currentMaster", getSharedPreferences(MyApplication.getInstance(), "erp_master"));
+        if (isB2b) {
+            param.put("date", DateFormatUtil.long2Str(System.currentTimeMillis(), "yyyyMMdd"));
+            param.put("pageNumber", 1);
+        } else {
+            param.put("condition", "cl_emcode='" + code + "' and to_char(cl_time,'yyyy-MM-dd')='" + date + "'");
+            param.put("page", 1);
+        }
+        param.put("pageSize", 100);
+        param.put("caller", "CardLog");
+        param.put("emcode", code);
+        param.put("master", getSharedPreferences(MyApplication.getInstance(), "erp_master"));
+        Bundle bundle = new Bundle();
+        bundle.putParcelableArrayList("models", models);
+
+        String url = isB2b ? ApiConfig.getInstance(ApiUtils.getApiModel()).getmApiBase().punch_record_url :
+                "mobile/oa/workdata.action";
+        Request request = new Request.Bulider()
+                .setBundle(bundle)
+                .setMode(Request.Mode.GET)
+                .setParam(param)
+                .setUrl(url)
+                .setWhat(WORK_LOG)
+                .bulid();
+        OAHttpHelper.getInstance().requestHttp(request, this);
+    }
+
+    public void loadWorkSet() {
+        //获取考勤高级设置时间请求
+        Map<String, Object> param = new HashMap<>();
+        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()
+                .setMode(Request.Mode.GET)
+                .setParam(param)
+                .setUrl(url)
+                .setWhat(LOAD_WORK_SET)
+                .bulid();
+        OAHttpHelper.getInstance().requestHttp(request, this);
+    }
+
+    //获取外勤计划列表
+    public void loadMissionPlan() {
+        Map<String, Object> param = new HashMap<>();
+        param.put("emcode", getSharedPreferences(MyApplication.getInstance(), "erp_username"));
+        String url = isB2b ? ApiConfig.getInstance(ApiUtils.getApiModel()).getmApiBase().getOutPlan :
+                "mobile/mobileoutplan.action";
+        Request request = new Request.Bulider()
+                .setMode(Request.Mode.GET)
+                .setParam(param)
+                .setUrl(url)
+                .setWhat(LOAD_PLAN)
+                .bulid();
+        OAHttpHelper.getInstance().requestHttp(request, this);
+    }
+
+    @Override
+    public void result(int what, boolean isJSON, String message, final Bundle bundle) {
+        try {
+            switch (what) {
+                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);
+                    }
+                    break;
+                case SIGNING:
+                    String subtitle = MyApplication.getInstance().getBdLocationHelper().getName();
+                    if (PreferenceUtils.getBoolean(PreferenceUtils.AUTO_SIGN_SW, true)) {
+                        boolean saveOk = MessageDao.getInstance().instartSignin(getString(R.string.auto_work_signin_alert),
+                                StringUtil.isEmpty(subtitle) ? getString(R.string.uu_auto_work_signined_up) : subtitle);
+                        if (saveOk) {
+                            Intent intent = new Intent(MessagePresenter.AUTO_SIGIN_ALART);
+                            LocalBroadcastManager.getInstance(MyApplication.getInstance()).sendBroadcast(intent);
+                        }
+                    }
+                    loadLog(bundle);
+                    break;
+                case LOAD_WORKLOG://签到后保存到打卡数据库里面
+                    if (isJSON && JSON.parseObject(message).containsKey("listdata")) {
+                        saveSignin2DB(bundle, JSON.parseObject(message).getJSONArray("listdata"));
+                    }
+                    break;
+                case SIGNIN_MISSION:
+                    if (isJSON) {
+                        if (JSON.parseObject(message).containsKey("success") && JSON.parseObject(message).getBoolean("success")) {
+                            //成功  更新数据库
+                            if (bundle == null) return;
+                            MissionModel mission = bundle.getParcelable("data");
+                            if (mission == null) return;
+                            updataMissonDB(mission);
+                        }
+                    }
+                    break;
+                case HAVE_OUT_PLAN:
+                    if (!isJSON) return;
+                    JSONObject object = JSON.parseObject(message);
+                    if (!object.containsKey("success") || !object.getBoolean("success")) return;
+                    if (object.containsKey("isOffline")) {
+                        int isOffline = Integer.valueOf(object.getString("isOffline"));
+                        //当判断到外勤计划为有值  1.外勤计划有  2.自动外勤
+                        if (bundle != null && bundle.getParcelable("data") != null) {
+                            MissionModel model = bundle.getParcelable("data");
+                            if (model == null) {
+                                LogUtil.i("model==null");
+                                return;
+                            }
+                            boolean saveOk = MissionDao.getInstance().updata(model);
+                            if (isOffline > 0) {//还有外勤计划
+                                if (saveOk)
+                                    notificationManage.sendNotification(MyApplication.getInstance(),
+                                            model.getCompanyName() + MyApplication.getInstance().getString(R.string.success_signin_down_mission), MissionActivity.class);
+                            } else {//没有外勤计划
+                                endMission(model, saveOk);
+                                List<MissionModel> models = MissionDao.getInstance().queryByEnCode();
+                                if (ListUtils.isEmpty(models) || !isMoreMission(models))
+                                    endOfMission();
+
+                            }
+                        }
+                    }
+                case WORK_DATA://打卡班次
+                    handlerWorkData(isJSON, message);
+                    break;
+                case WORK_LOG://
+                    ArrayList<WorkModel> models = null;
+                    if (bundle != null) models = bundle.getParcelableArrayList("models");
+                    handlerWorkLog(isJSON, message, models);
+                    break;
+                case LOAD_PLAN:
+                    JSONArray array = null;
+                    if (isJSON && JSON.parseObject(message).get("data") instanceof JSONArray) {
+                        array = JSON.parseObject(message).getJSONArray("data");
+                    } else if (JSON.parseObject(message).get("success") instanceof JSONArray) {
+                        array = JSON.parseObject(message).getJSONArray("success");
+                    }
+                    handlerData(array);
+                    break;
+
+                case LOAD_WORK_SET:
+                    if (isJSON) {
+                        handlerWorkSet(JSON.parseObject(message));
+                    }
+                    break;
+                default:
+                    break;
+            }
+        } catch (Exception e) {
+            if (e != null) {
+                LogUtil.i("result=" + e.getMessage());
+                CommonUtil.saveAutoLogtoLocal(getString(R.string.app_monitor_log), e.getMessage());
+            }
+        }
+    }
+
+    boolean isErrorMac;
+
+    @Override
+    public void error(int what, String message, Bundle bundle) {
+        if (!StringUtil.isEmpty(message)) {
+            String msg = null;
+            if (StringUtil.isInclude(message, MyApplication.getInstance().getString(R.string.is_not_common_device))) {
+                msg = MyApplication.getInstance().getString(R.string.is_not_common_device_not_signin);
+                CommonUtil.saveAutoLogtoLocal(getString(R.string.auto_sign_failed), msg);
+            } else if (StringUtil.isInclude(message, "设备正处于申请变更绑定阶段")) {
+                msg = MyApplication.getInstance().getString(R.string.is_changeing_not_signin);
+                CommonUtil.saveAutoLogtoLocal(getString(R.string.auto_sign_failed), msg);
+            } else if (StringUtil.isInclude(message, "该设备已被他人绑定")) {
+                msg = MyApplication.getInstance().getString(R.string.is_binded_other_not_signin);
+                CommonUtil.saveAutoLogtoLocal(getString(R.string.auto_sign_failed), msg);
+            } else if (what == SIGNIN_MISSION) {
+                try {
+                    Intent intent = new Intent();
+                    intent.putExtra(AppConstant.CHANGE_MISSION_TASK, true);
+                    intent.setAction(AppConstant.CHANGE_MISSION_TASK);
+                    MsgBroadcast.sendLocalBroadcast(intent);
+                    if (!StringUtil.isEmpty(message))
+                     CommonUtil.saveAutoLogtoLocal(getString(R.string.auto_outplan_failed), message);
+                } catch (Exception e) {
+                }
+            }
+            if (!StringUtil.isEmpty(msg))
+                 CommonUtil.saveAutoLogtoLocal(getString(R.string.app_monitor_log), msg);
+            if (!isErrorMac && !StringUtil.isEmpty(msg)) {
+                isErrorMac = true;
+                notificationManage.sendNotification(MyApplication.getInstance(), msg, WorkActivity.class);
+            }
+        }
+    }
+
+    /**
+     * 外勤签到签退处理
+     * 1.签退:status==1&&离开范围之内==》mission.setStatus(2) ,先把状态设置位2在传进来签退
+     * 2.签到:在范围之内,status不做任何改变 传进来签到
+     *
+     * @param mission 传进来的对象
+     * @throws Exception
+     */
+
+    private void updataMissonDB(MissionModel mission) throws Exception {
+        //更新数据库
+        if (mission == null) return;//如果数据库没有,一般不会出现这样的情况
+        if (StringUtil.isEmpty(mission.getRealTime()))
+            mission.setRealTime(TimeUtils.f_long_2_str(System.currentTimeMillis()));
+        else mission.setRealLeave(TimeUtils.f_long_2_str(System.currentTimeMillis()));
+        String title = "";
+        String subTitle = "";
+        if (mission.getStatus() == 2) {//签退
+            title = MyApplication.getInstance().getString(R.string.auto_mission_alert);
+            if (StringUtil.isEmpty(mission.getCompanyName()))
+                subTitle = MyApplication.getInstance().getString(R.string.uu_auto_signined_down);
+            else
+                subTitle = MyApplication.getInstance().getString(R.string.visit) + mission.getCompanyName() + getString(R.string.success_signin_down);
+
+            CommonInterface.getInstance().endMission(mission.getId(), false);
+            loadIsMission(mission);
+        } else {//签到
+            if (mission.getStatus() < 1) {
+                title = getString(R.string.auto_mission_alert);
+                if (StringUtil.isEmpty(mission.getCompanyName()))
+                    subTitle = getString(R.string.uu_auto_signined_up);
+                else
+                    subTitle = getString(R.string.visit) + mission.getCompanyName() + getString(R.string.success_signin_up);
+                mission.setStatus(1);//说明没有打过卡
+                boolean saveOk = MissionDao.getInstance().updata(mission);
+                if (saveOk)//XXX公司自动外勤签到成功
+                    notificationManage.sendNotification(MyApplication.getInstance(), mission.getCompanyName()
+                                    + getString(R.string.success_signin_up_mission),
+                            MissionActivity.class);
+            }
+        }
+        MissionDao.getInstance().updata(mission);
+        if (!StringUtil.isEmpty(title) && !StringUtil.isEmpty(subTitle))
+            MessageDao.getInstance().instartSignin(title, subTitle);
+    }
+
+    /**
+     * 外勤签退后判断时候还有外勤计划,如果没有,判断是否符合返回公司  返回提示请返回公司签到
+     *
+     * @param model
+     * @param saveOk
+     * @throws Exception
+     */
+    private void endMission(final MissionModel model, final boolean saveOk) throws Exception {
+        float longitude = PreferenceUtils.getFloat("longitude");
+        float latitude = PreferenceUtils.getFloat("latitude");
+        BaiduMapUtil.getInstence().getDrivingRoute(MyApplication.getInstance().
+                getBdLocationHelper().getLocation(), new LatLng(latitude, longitude), new OnGetDrivingRouteResult() {
+            @Override
+            public void onGetDrivingRouteResult(DrivingRouteResult drivingRouteResult) {
+                List<DrivingRouteLine> list = drivingRouteResult.getRouteLines();
+                if (ListUtils.isEmpty(list)) {//获取路线列表为空
+                    if (saveOk)
+                        notificationManage.sendNotification(MyApplication.getInstance(), getString(R.string.to) + model.getCompanyName() + getString(R.string.success_signin_down_mission),
+                                MissionActivity.class);
+                    return;
+                }
+                int minTime = 0;
+                for (DrivingRouteLine e : list) {
+                    if (minTime == 0 || minTime > e.getDuration()) {
+                        minTime = e.getDuration();
+                    }
+                }
+                LogUtil.i("最短时间为" + minTime);
+                //获取使用时间为。。。。
+                //当前时间
+                List<WorkModel> models = WorkModelDao.getInstance().query(true);
+                if (ListUtils.isEmpty(models)) {
+                    LogUtil.i("数据库中的班次为空的");
+                    if (saveOk)
+                        notificationManage.sendNotification(MyApplication.getInstance(), getString(R.string.to) + model.getCompanyName() + getString(R.string.success_signin_down_mission),
+                                MissionActivity.class);
+                    return;
+                }
+                String lastTime = null;
+                for (WorkModel e : models) {
+                    if (StringUtil.isEmpty(e.getOffTime())) continue;
+                    if (StringUtil.isEmpty(lastTime) || e.getOffTime().compareTo(lastTime) > 0)
+                        lastTime = e.getOffTime();
+                }
+                if (StringUtil.isEmpty(lastTime)) {
+                    if (saveOk)
+                        notificationManage.sendNotification(MyApplication.getInstance(), getString(R.string.to) + model.getCompanyName() + getString(R.string.success_signin_down_mission),
+                                MissionActivity.class);
+                    return;
+                }
+                int time = getTime(lastTime);
+                LogUtil.i("与下班时间相差" + time);
+                int deTime = PreferenceUtils.getInt(AppConfig.AUTO_MISSION_TIME, 10);
+                if ((minTime + deTime * 60) < time) {
+                    notificationManage.sendNotification(MyApplication.getInstance(),
+                            R.string.success_signin_down_can_back, MainActivity.class);
+                } else {
+                    Log.i("gongpengming", "时间不符合");
+                    if (saveOk)
+                        notificationManage.sendNotification(MyApplication.getInstance(),
+                                R.string.success_signin_down_task_ok, MissionActivity.class);
+                }
+            }
+        });
+    }
+
+    //保存到数据库
+    private void saveSignin2DB(Bundle bundle, JSONArray array) throws Exception {
+        WorkModel model = null;
+        if (bundle != null && bundle.getParcelable("data") != null) {
+            model = bundle.getParcelable("data");
+        } else {
+            List<WorkModel> models = WorkModelDao.getInstance().query(false);
+            if (ListUtils.isEmpty(models)) return;
+            String time = DateFormatUtil.long2Str(System.currentTimeMillis(), "HH:mm");
+            for (WorkModel m : models) {
+                //当前时间位于该班次之间
+                if (m.getWorkStart().compareTo(time) < 0 && m.getOffend().compareTo(time) > 0) {
+                    model = m;
+                    break;
+                }
+            }
+        }
+        //取最后一个
+        JSONObject object = array.getJSONObject(array.size() - 1);
+        String time = object.getString("cl_time");//获取最后一次打卡信息,班次打卡信息
+        time = DateFormatUtil.formatChange(time, DateFormatUtil.HM);//获取到的
+        if (StringUtil.isEmpty(time) || model == null) return;
+
+        if (StringUtil.isEmpty(model.getWorkSignin()) && model.getWorkStart().compareTo(time) <= 0
+                && model.getWorkTime().compareTo(time) >= 0) {
+            model.setWorkSignin(time);
+            long i = WorkModelDao.getInstance().update(model);
+            if (PreferenceUtils.getBoolean(PreferenceUtils.AUTO_SIGN_SW, true))
+                notificationManage.sendNotification(MyApplication.getInstance(),
+                        R.string.auto_signin, WorkActivity.class);
+            boolean b = hasMore();
+            if (!b) {
+                //TODO 关闭任务
+                Intent intent = new Intent();
+                intent.setAction(CHANGE_WORK_TASK);
+                intent.putExtra(CHANGE_WORK_TASK, false);
+                MsgBroadcast.sendLocalBroadcast(intent);
+            }
+        } else if (StringUtil.isEmpty(model.getOffSignin()) && model.getOffTime().compareTo(time) <= 0
+                && model.getOffend().compareTo(time) >= 0) {
+            model.setOffSignin(time);
+            WorkModelDao.getInstance().update(model);
+            if (PreferenceUtils.getBoolean(PreferenceUtils.AUTO_SIGN_SW, true))
+                notificationManage.sendNotification(MyApplication.getInstance(),
+                        R.string.auto_signin, WorkActivity.class);
+            boolean b = hasMore();
+            if (!b) {
+                Intent intent = new Intent();
+                intent.setAction(CHANGE_WORK_TASK);
+                intent.putExtra(CHANGE_WORK_TASK, false);
+                MsgBroadcast.sendLocalBroadcast(intent);
+            }
+        }
+    }
+
+    private boolean hasMore() {
+        List<WorkModel> models = WorkModelDao.getInstance().query(false);
+        if (ListUtils.isEmpty(models)) return false;
+        else {
+            for (WorkModel m : models) {
+                if (StringUtil.isEmpty(m.getWorkSignin()) || StringUtil.isEmpty(m.getOffSignin()))
+                    return true;
+            }
+        }
+        return false;
+    }
+
+
+    /**
+     * 处理打卡签到
+     *
+     * @param isJSON
+     * @param message
+     */
+    private void handlerWorkData(boolean isJSON, String message) throws Exception {
+        if (!isJSON)
+            return;
+        JSONObject object = JSON.parseObject(message);
+        ArrayList<WorkModel> models = WorkHandlerUtil.handlerWorkData(object, isB2b);
+        WorkHandlerUtil.handerLocation(object, isB2b);
+        if (ListUtils.isEmpty(models)) {
+            return;
+        }
+        loadLog(models);
+    }
+
+
+    /**
+     * 处理打卡签到列表,建议在线程钟使用
+     *
+     * @param isJSON     是否是json数据
+     * @param message    返回信息
+     * @param workModels 获取班次信息时候的数据
+     * @throws Exception
+     */
+    private void handlerWorkLog(boolean isJSON, String message, ArrayList<WorkModel> workModels) throws Exception {
+        if (!isJSON || ListUtils.isEmpty(workModels)) {
+            saveDb(workModels);
+            return;
+        }
+        JSONObject object = JSON.parseObject(message);
+        ArrayList<WorkModel> models = WorkHandlerUtil.handlerWorkLog(object, workModels);
+        saveDb(models);
+    }
+
+
+    private void saveDb(final List<WorkModel> models) {
+        if (!ListUtils.isEmpty(models)) {
+            ThreadUtil.getInstance().addTask(new Runnable() {
+                @Override
+                public void run() {
+                    boolean saveOK = WorkModelDao.getInstance().createOrUpdata(models, System.currentTimeMillis());
+                    if (saveOK) {
+                        OAHttpHelper.getInstance().post(new Runnable() {
+                            @Override
+                            public void run() {
+                                Intent intent = new Intent();
+                                intent.putExtra(CHANGE_WORK_TASK, true);
+                                intent.setAction(CHANGE_WORK_TASK);//保存到数据库成功,开启
+                                MsgBroadcast.sendLocalBroadcast(intent);
+                            }
+                        });
+                    }
+                }
+            });
+        }
+    }
+
+    /**
+     * 第一次进来应用会请求一次数据,并把数据保存到数据库中,保存成功后发送广播,更新轮询
+     * 解析处理外勤计划列表并保存到数据库
+     *
+     * @param array
+     */
+    private void handlerData(JSONArray array) throws Exception {
+        if (ListUtils.isEmpty(array)) {
+            ThreadUtil.getInstance().addTask(new Runnable() {
+                @Override
+                public void run() {
+                    List<MissionModel> models = MissionDao.getInstance().queryByEnCode();
+                    if (!ListUtils.isEmpty(models)) {
+                        OAHttpHelper.getInstance().post(new Runnable() {
+                            @Override
+                            public void run() {
+                                Intent intent = new Intent();
+                                intent.putExtra(AppConstant.CHANGE_MISSION_TASK, true);
+                                intent.setAction(AppConstant.CHANGE_MISSION_TASK);
+                                MsgBroadcast.sendLocalBroadcast(intent);
+                            }
+                        });
+
+                    }
+                }
+            });
+        } 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)) {
+                LogUtil.i("保存到数据库成功");
+                ThreadUtil.getInstance().addTask(new Runnable() {
+                    @Override
+                    public void run() {
+                        boolean saveOk = false;
+                        try {
+                            saveOk = MissionDao.getInstance().updataOrCreate(entities);
+                            if (!saveOk)
+                                saveOk = !ListUtils.isEmpty(MissionDao.getInstance().queryByEnCode());
+                        } catch (Exception e) {
+
+                        }
+                        if (saveOk) {
+                            CommonUtil.saveAutoLogtoLocal(getString(R.string.app_start_log), getString(R.string.app_outplan_running));
+                            //TODO 保存异常数据库
+                            OAHttpHelper.getInstance().post(new Runnable() {
+                                @Override
+                                public void run() {
+                                    Intent intent = new Intent();
+                                    intent.putExtra(AutoErpService.CHANGE_MISSION_TASK, true);
+                                    intent.setAction(AutoErpService.CHANGE_MISSION_TASK);
+                                    MsgBroadcast.sendLocalBroadcast(intent);
+                                    LogUtil.i("发送广播成功");
+                                }
+                            });
+                        }
+                    }
+                });
+            }
+        }
+    }
+
+
+    private void handlerWorkSet(JSONObject o) {
+        try {
+            WorkHandlerUtil.handlerWorkSet(o);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        if (OAConfig.autosign)
+            loadWorkData();
+        else
+            try {
+                //如果不是自动打卡和提醒,清空数据库今天的数据
+                WorkModelDao.getInstance().clearByDate(System.currentTimeMillis());
+            } catch (Exception e) {
+                if (e != null)
+                    LogUtil.i("initNet Exception=" + e.getMessage());
+            }
+    }
+
+    private boolean isMoreMission(List<MissionModel> models) {
+        for (MissionModel e : models) {
+            if (e.getType() != 1) {
+                LogUtil.i("返回正确");
+                return true;
+            }
+        }
+        return false;
+    }
+
+    private void endOfMission() {
+        Intent intent = new Intent();
+        intent.setAction(AppConstant.CHANGE_MISSION_TASK);
+        intent.putExtra(AppConstant.CHANGE_MISSION_TASK, false);
+        MsgBroadcast.sendLocalBroadcast(intent);
+    }
+
+    //获取当前时间鱼下班时间的差
+    private int getTime(String lastTime) {
+        long time = TimeUtils.f_str_2_long(TimeUtils.s_long_2_str(System.currentTimeMillis())
+                + " " + lastTime + ":00");
+        long time2 = time - System.currentTimeMillis();
+        if (time < 0) return 0;
+        return (int) (time2 / 1000);
+    }
+
+    private String getString(int id) {
+        return MyApplication.getInstance().getString(id);
+    }
+
+}

+ 357 - 0
app_modular/appworks/src/main/java/com/uas/appworks/dao/MissionDao.java

@@ -0,0 +1,357 @@
+package com.uas.appworks.dao;
+
+import android.content.ContentValues;
+import android.database.Cursor;
+import android.database.SQLException;
+import android.database.sqlite.SQLiteDatabase;
+import android.util.Log;
+
+import com.baidu.mapapi.model.LatLng;
+import com.common.LogUtil;
+import com.common.data.ListUtils;
+import com.common.data.StringUtil;
+import com.core.api.wxapi.ApiPlatform;
+import com.core.api.wxapi.ApiUtils;
+import com.core.app.AppConfig;
+import com.core.app.MyApplication;
+import com.core.db.DatabaseManager;
+import com.core.model.MissionModel;
+import com.core.utils.CommonUtil;
+import com.core.utils.TimeUtils;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 外勤计划数据库管理
+ * 对外接口
+ * 1.添加或修改单个数据、添加或修改多个数据(其中所有录入不包含status)
+ * 2.修改状态、修改签到时间
+ * 3.查询当天数据
+ * <p>
+ * <p>
+ * Created by Bitliker on 2016/11/28.
+ */
+
+public class MissionDao {
+
+    private String tibleName = "mission";
+    private static MissionDao instance;
+
+    public static MissionDao getInstance() {
+        if (instance == null) {
+            synchronized (MissionDao.class) {
+                instance = new MissionDao();
+            }
+        }
+        return instance;
+    }
+
+    public MissionDao() {
+    }
+
+
+    /**
+     * 修改状态
+     *
+     * @param id     id
+     * @param status 状态值
+     * @return
+     */
+    public boolean upStatus(int id, int status) {
+        SQLiteDatabase db = null;
+        long i = 0;
+        try {
+            String master = getMaster();
+            String emcode = getEmcode();
+            if (StringUtil.isEmpty(master) || StringUtil.isEmpty(emcode)) return false;
+            db = DatabaseManager.getInstance().openDatabase();
+            ContentValues values = new ContentValues();
+            values.put("status", status);
+            String where = "master=? and emcode=? and id=? ";
+            String[] whereArgs = {master, emcode, String.valueOf(id)};
+            i = db.update(tibleName, values, where, whereArgs);
+        } catch (SQLException e) {
+            show("SQLException=" + e.getMessage());
+        } catch (Exception e) {
+            show("Exception=" + e.getMessage());
+        } finally {
+            if (db != null)
+                DatabaseManager.getInstance().closeDatabase();
+            return i > 0;
+        }
+    }
+
+    //获取当天全部数据
+    public List<MissionModel> queryByEnCode() {
+        SQLiteDatabase db = null;
+        Cursor cursor = null;
+        List<MissionModel> missions = null;
+        try {
+            String master = getMaster();
+            String emcode = getEmcode();
+            String date = TimeUtils.s_long_2_str(System.currentTimeMillis());
+            if (StringUtil.isEmpty(master) || StringUtil.isEmpty(emcode)) return missions;
+            db = DatabaseManager.getInstance().openDatabase();
+            String[] columns = {"id", "company",
+                    "companyAddr", "latitude",
+                    "longitude", "visittime",
+                    "realvisitTime", "realLeaveTime",
+                    "status", "distance",
+                    "location", "recorddate",
+                    "remark", "type"};
+            String selection = "master =? and emcode=? and date=?";
+            String[] selecttionArg = {master, emcode, date};
+            cursor = db.query(tibleName, columns, selection, selecttionArg, null, null, null);
+            MissionModel mission = null;
+            missions = new ArrayList<>();
+            while (cursor.moveToNext()) {
+                mission = new MissionModel();
+                mission.setId(cursor.getInt(0));
+                mission.setCompanyName(cursor.getString(1));
+                mission.setCompanyAddr(cursor.getString(2));
+                double latitude = cursor.getDouble(3);
+                double longitude = cursor.getDouble(4);
+                if (latitude > 0 && longitude > 0)
+                    mission.setLatLng(new LatLng(latitude, longitude));
+                mission.setVisitTime(cursor.getString(5));
+                mission.setRealTime(cursor.getString(6));
+                mission.setRealLeave(cursor.getString(7));
+                mission.setStatus(cursor.getInt(8));
+                mission.setDistance(cursor.getDouble(9));
+                mission.setLocation(cursor.getString(10));
+                mission.setRecorddate(cursor.getString(11));
+                mission.setRemark(cursor.getString(12));
+                mission.setType(cursor.getInt(13));
+                missions.add(mission);
+            }
+            cursor.close();
+        } catch (SQLException e) {
+            show("SQLException=" + e.getMessage());
+        } catch (Exception e) {
+            show("Exception=" + e.getMessage());
+        } finally {
+            if (db != null)
+                DatabaseManager.getInstance().closeDatabase();
+            return missions;
+        }
+    }
+
+    public boolean updataOrCreate(MissionModel mission) {
+        if (mission == null || StringUtil.isEmpty(mission.getVisitTime())) return false;
+        show("updataOrCreate");
+        SQLiteDatabase db = null;
+        long i = 0;
+        try {
+            String master = getMaster();
+            String emcode = getEmcode();
+            if (StringUtil.isEmpty(master) || StringUtil.isEmpty(emcode)) return false;
+            db = DatabaseManager.getInstance().openDatabase();
+            ContentValues values = null;
+            show("MissionPlanEntity");
+            //对象为空或是拜访时间没有情况下不插入数据库
+            values = new ContentValues();
+            values.put("id", mission.getId());
+            values.put("master", master);
+            values.put("emcode", emcode);
+            values.put("company", mission.getCompanyName());
+            values.put("companyAddr", mission.getCompanyAddr());
+            if (mission.getLatLng() != null) {
+                values.put("latitude", mission.getLatLng().latitude);
+                values.put("longitude", mission.getLatLng().longitude);
+            }
+            values.put("visittime", mission.getVisitTime());
+            values.put("realvisitTime", mission.getRealTime());
+            values.put("realLeaveTime", mission.getRealLeave());
+            values.put("distance", mission.getDistance());
+            values.put("location", mission.getLocation());
+            values.put("remark", mission.getRemark());
+            values.put("recorddate", mission.getRecorddate());
+            values.put("date", getDateByString(mission.getVisitTime()));//拜访日期
+            i = db.insert(tibleName, "status", values);
+            if (i == -1) {
+                String where = "master=? and emcode=? and id=? ";
+                String[] whereArgs = {master, emcode, String.valueOf(mission.getId())};
+                i = db.update(tibleName, values, where, whereArgs);
+                show("update i=" + i);
+            }
+            show("i====" + i);
+        } catch (SQLException e) {
+            show("SQLException=" + e.getMessage());
+        } catch (Exception e) {
+            show("Exception=" + e.getMessage());
+        } finally {
+            if (db != null)
+                DatabaseManager.getInstance().closeDatabase();
+            return i > 0;
+        }
+    }
+
+    public boolean updataOrCreate(List<MissionModel> entities) {
+        if (ListUtils.isEmpty(entities)) return false;
+        show("updataOrCreate");
+        SQLiteDatabase db = null;
+        long i = 0;
+        try {
+            String master = getMaster();
+            String emcode = getEmcode();
+            if (StringUtil.isEmpty(master) || StringUtil.isEmpty(emcode)) return false;
+            db = DatabaseManager.getInstance().openDatabase();
+            db.beginTransaction();//开启事务
+            ContentValues values = null;
+            for (MissionModel mission : entities) {
+                show("MissionPlanEntity");
+                //对象为空或是拜访时间没有情况下不插入数据库
+                if (mission == null || StringUtil.isEmpty(mission.getVisitTime())) {
+                    continue;
+                }
+                values = new ContentValues();
+                values.put("id", mission.getId());
+                values.put("master", master);
+                values.put("emcode", emcode);
+                values.put("company", mission.getCompanyName());
+                values.put("companyAddr", mission.getCompanyAddr());
+                if (mission.getLatLng() != null) {
+                    values.put("latitude", mission.getLatLng().latitude);
+                    values.put("longitude", mission.getLatLng().longitude);
+                }
+                values.put("visittime", mission.getVisitTime());
+                values.put("realvisitTime", mission.getRealTime());
+                values.put("realLeaveTime", mission.getRealLeave());
+                values.put("distance", mission.getDistance());
+                values.put("location", mission.getLocation());
+                values.put("remark", mission.getRemark());
+                values.put("type", mission.getType());
+                values.put("recorddate", mission.getRecorddate());
+                values.put("date", getDateByString(mission.getVisitTime()));//拜访日期
+                i = db.insert(tibleName, "status", values);
+                if (i == -1) {
+                    String where = "master=? and emcode=? and id=? ";
+                    String[] whereArgs = {master, emcode, String.valueOf(mission.getId())};
+                    i = db.update(tibleName, values, where, whereArgs);
+                    show("update i=" + i);
+                }
+                show("i====" + i);
+            }
+            db.setTransactionSuccessful();
+        } catch (SQLException e) {
+            show("SQLException=" + e.getMessage());
+        } catch (Exception e) {
+            show("Exception=" + e.getMessage());
+        } finally {
+            db.endTransaction();
+            if (db != null)
+                DatabaseManager.getInstance().closeDatabase();
+            return i > 0;
+        }
+    }
+
+    //更新
+    public boolean updata(MissionModel mission) {
+        SQLiteDatabase db = null;
+        long i = 0;
+        try {
+            String master = getMaster();
+            String emcode = getEmcode();
+            if (StringUtil.isEmpty(master) || StringUtil.isEmpty(emcode)) return false;
+            db = DatabaseManager.getInstance().openDatabase();
+            ContentValues values = new ContentValues();
+            if (mission.getLatLng() != null) {
+                values.put("latitude", mission.getLatLng().latitude);
+                values.put("longitude", mission.getLatLng().longitude);
+            }
+            values.put("visittime", mission.getVisitTime());
+            values.put("realvisitTime", mission.getRealTime());
+            values.put("realLeaveTime", mission.getRealLeave());
+            values.put("status", mission.getStatus());
+            String where = "master=? and emcode=? and id=? ";
+            String[] whereArgs = {master, emcode, String.valueOf(mission.getId())};
+            i = db.update(tibleName, values, where, whereArgs);
+        } catch (SQLException e) {
+            show("SQLException=" + e.getMessage());
+        } catch (Exception e) {
+            show("Exception=" + e.getMessage());
+        } finally {
+            if (db != null)
+                DatabaseManager.getInstance().closeDatabase();
+            return i > 0;
+        }
+    }
+
+
+
+
+    private String getDateByString(String date) {
+        if (StringUtil.isEmpty(date)) return "";
+        return TimeUtils.s_long_2_str(TimeUtils.f_str_2_long(date));
+    }
+
+    public boolean clearAll(long date) {
+        LogUtil.i("clearAll");
+        SQLiteDatabase db = null;
+        boolean clearOk = false;
+        try {
+            String master = getMaster();
+            String emcode = getEmcode();
+            if (StringUtil.isEmpty(master) || StringUtil.isEmpty(emcode)) return false;
+            db = DatabaseManager.getInstance().openDatabase();
+            String where = "master=? and emcode=? and date<=?";
+            String[] whereArg = {master, emcode, TimeUtils.s_long_2_str(date)};
+            int i = db.delete(tibleName, where, whereArg);
+            clearOk = i > 0;
+        } catch (SQLException e) {
+            if (e != null)
+                show("clearAll SQLException" + e.getMessage());
+        } catch (Exception e) {
+            if (e != null)
+                show("clearAll Exception" + e.getMessage());
+        } finally {
+            DatabaseManager.getInstance().closeDatabase();
+            return clearOk;
+        }
+    }
+
+
+    private String getMaster() {
+        boolean isB2b = ApiUtils.getApiModel() instanceof ApiPlatform;
+        String master = isB2b ? CommonUtil.getSharedPreferences(MyApplication.getInstance().getApplicationContext(), "companyEnUu") : CommonUtil.getSharedPreferences(MyApplication.getInstance(), "erp_master");
+        return master;
+
+    }
+
+    private String getEmcode() {
+        boolean isB2b = ApiUtils.getApiModel() instanceof ApiPlatform;
+        String emcode = isB2b ? CommonUtil.getSharedPreferences(MyApplication.getInstance().getApplicationContext(), "b2b_uu") : CommonUtil.getSharedPreferences(MyApplication.getInstance(), "erp_username");
+        return emcode;
+    }
+
+    public boolean hasMoreMision() {
+        SQLiteDatabase db = null;
+        boolean clearOk = false;
+        try {
+            String master = getMaster();
+            String emcode = getEmcode();
+            if (StringUtil.isEmpty(master) || StringUtil.isEmpty(emcode)) return false;
+            db = DatabaseManager.getInstance().openDatabase();
+            String[] columns = {"realvisitTime,realLeaveTime"};
+            String selecttion = "master =? and emcode=? and date=? and ( realvisitTime is null or realLeaveTime is null)";
+            String[] selectArg = {master, emcode, TimeUtils.s_long_2_str(System.currentTimeMillis())};
+            Cursor c = db.query(tibleName, columns, selecttion, selectArg, null, null, null);
+            clearOk = c.moveToNext();
+        } catch (SQLException e) {
+            if (e != null)
+                show("clearAll SQLException" + e.getMessage());
+        } catch (Exception e) {
+            if (e != null)
+                show("clearAll Exception" + e.getMessage());
+        } finally {
+            DatabaseManager.getInstance().closeDatabase();
+            return clearOk;
+        }
+    }
+
+    private void show(String str) {
+        if (StringUtil.isEmpty(str) || !AppConfig.DEBUG) return;
+        Log.i("gongpengming", str);
+    }
+}