Browse Source

Merge branch 'HIUrgent' of https://gitlab.com/Arisono/SkWeiChat-Baidu into developer

# Conflicts:
#	WeiChat/src/main/java/com/xzjmyk/pm/activity/util/oa/AutoErpSigninUitl.java
Bitliker 8 years ago
parent
commit
1d3d33beb2
60 changed files with 1879 additions and 3540 deletions
  1. 1 1
      WeiChat/build.gradle
  2. 22 9
      WeiChat/src/main/AndroidManifest.xml
  3. 2 2
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/MainActivity.java
  4. 0 1
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/circle/BusinessCircleActivity.java
  5. 1 1
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/crm/BusinessDetailInfoActivity.java
  6. 2 1
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/datainquiry/PDFUtils.java
  7. 2 1
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/oa/OAActivity.java
  8. 1 0
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/oa/OAMainActivity.java
  9. 5 5
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/adapter/oa/WorkAdapter.java
  10. 1 1
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/presenter/WorkPresenterhi.java
  11. 0 1
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/find/FindFragment.java
  12. 18 22
      WeiChat/src/main/java/com/xzjmyk/pm/activity/util/oa/AutoErpService.java
  13. 22 22
      WeiChat/src/main/java/com/xzjmyk/pm/activity/util/oa/AutoErpSigninUitl.java
  14. 2 2
      WeiChat/src/main/java/com/xzjmyk/pm/activity/util/oa/CommonUtil.java
  15. 0 230
      WeiChat/src/main/java/com/xzjmyk/pm/activity/view/wheel/BottomPopup.java
  16. 0 304
      WeiChat/src/main/java/com/xzjmyk/pm/activity/view/wheel/ConfirmPopup.java
  17. 0 544
      WeiChat/src/main/java/com/xzjmyk/pm/activity/view/wheel/ConvertUtils.java
  18. 0 499
      WeiChat/src/main/java/com/xzjmyk/pm/activity/view/wheel/DateTimePicker.java
  19. 0 287
      WeiChat/src/main/java/com/xzjmyk/pm/activity/view/wheel/DateUtils.java
  20. 0 173
      WeiChat/src/main/java/com/xzjmyk/pm/activity/view/wheel/Popup.java
  21. 0 106
      WeiChat/src/main/java/com/xzjmyk/pm/activity/view/wheel/WheelPicker.java
  22. 8 0
      app_core/common/src/main/java/com/core/constant/AppConstant.java
  23. 3 3
      app_core/common/src/main/java/com/core/dao/SignAutoLogDao.java
  24. 31 0
      app_core/common/src/main/java/com/core/utils/CommonUtil.java
  25. 2 2
      app_core/common/src/main/java/com/core/utils/NotificationManage.java
  26. 1 1
      app_core/common/src/main/java/com/core/utils/OnGetDrivingRouteResult.java
  27. 0 111
      app_core/common/src/main/java/com/core/utils/ScreenUtils.java
  28. 0 213
      app_core/common/src/main/java/com/core/utils/timeutils/TimePicker.java
  29. 0 1
      app_core/common/src/main/java/com/core/utils/timeutils/wheel/BottomPopup.java
  30. 1 1
      app_core/common/src/main/java/com/core/utils/timeutils/wheel/DatePicker.java
  31. 0 1
      app_core/common/src/main/java/com/core/utils/timeutils/wheel/DateTimePicker.java
  32. 1 3
      app_core/common/src/main/java/com/core/utils/timeutils/wheel/LogUtils.java
  33. 1 1
      app_core/common/src/main/java/com/core/utils/timeutils/wheel/OASigninPicker.java
  34. 1 1
      app_core/common/src/main/java/com/core/utils/timeutils/wheel/OptionPicker.java
  35. 1 1
      app_core/common/src/main/java/com/core/utils/timeutils/wheel/ScreenUtils.java
  36. 1 1
      app_core/common/src/main/java/com/core/utils/timeutils/wheel/TimePicker.java
  37. 0 1
      app_core/common/src/main/java/com/core/utils/timeutils/wheel/WheelPicker.java
  38. 1 1
      app_core/common/src/main/java/com/core/utils/timeutils/wheel/WheelView.java
  39. 0 163
      app_core/common/src/main/java/com/core/widget/view/ClearEditText.java
  40. 0 616
      app_core/common/src/main/java/com/core/widget/view/WheelView.java
  41. 2 2
      app_core/common/src/main/java/com/core/xmpp/model/SignAutoLogEntity.java
  42. 3 3
      app_core/imageload/src/main/java/com/me/imageloader/transformation/GlideCircleTransform.java
  43. 2 2
      app_core/imageload/src/main/java/com/me/imageloader/utils/ScreenUtil.java
  44. 1 1
      app_modular/appme/src/main/java/com/uas/appme/settings/activity/BookingSetActivity.java
  45. 4 0
      app_modular/appworks/src/main/AndroidManifest.xml
  46. 13 14
      app_modular/appworks/src/main/java/com/uas/appworks/OA/erp/activity/ChangeMobileActivity.java
  47. 73 88
      app_modular/appworks/src/main/java/com/uas/appworks/OA/erp/activity/MissionActivity.java
  48. 47 60
      app_modular/appworks/src/main/java/com/uas/appworks/OA/erp/activity/WorkActivity.java
  49. 4 4
      app_modular/appworks/src/main/java/com/uas/appworks/OA/erp/adapter/MissionAdapter.java
  50. 312 0
      app_modular/appworks/src/main/java/com/uas/appworks/OA/erp/adapter/WorkAdapter.java
  51. 1 1
      app_modular/appworks/src/main/java/com/uas/appworks/OA/erp/imp/IMissionPresenter.java
  52. 1 1
      app_modular/appworks/src/main/java/com/uas/appworks/OA/erp/model/IMission.java
  53. 2 2
      app_modular/appworks/src/main/java/com/uas/appworks/OA/erp/presenter/IWorkPresenter.java
  54. 16 16
      app_modular/appworks/src/main/java/com/uas/appworks/OA/erp/presenter/MissionPresenter.java
  55. 8 10
      app_modular/appworks/src/main/java/com/uas/appworks/OA/erp/presenter/WorkPresenter.java
  56. 899 0
      app_modular/appworks/src/main/java/com/uas/appworks/OA/erp/utils/AutoErpSigninUitl.java
  57. 1 1
      app_modular/appworks/src/main/java/com/uas/appworks/OA/erp/utils/WifiReceiverUtil.java
  58. 1 1
      app_modular/appworks/src/main/java/com/uas/appworks/OA/erp/view/IWorkView.java
  59. 357 0
      app_modular/appworks/src/main/java/com/uas/appworks/dao/MissionDao.java
  60. 1 1
      app_third/libbdupdatesdk/src/main/res/values/bdp_update_strings.xml

+ 1 - 1
WeiChat/build.gradle

@@ -63,7 +63,7 @@ android {
  
     productFlavors {   // 友盟多渠道打包
         wandoujia {}
-        _360 {}
+//        _360 {}
         baidu {}
         xiaomi {}
         tencent {}

+ 22 - 9
WeiChat/src/main/AndroidManifest.xml

@@ -146,7 +146,7 @@
         </activity>
         <!-- 登录模块 -->
         <activity
-            android:name=".ui.account.LoginActivity"
+            android:name="com.modular.login.LoginActivity"
             android:launchMode="singleTask"
             android:windowSoftInputMode="adjustPan" />
         <activity android:name=".ui.account.LoginHistoryActivity" />
@@ -597,7 +597,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"
@@ -758,7 +763,7 @@
             android:windowSoftInputMode="adjustResize" />
 
         <activity
-            android:name=".ui.erp.activity.oa.ChangeMobileActivity"
+            android:name="com.uas.appworks.OA.erp.activity.ChangeMobileActivity"
             android:label="@string/change_mobile" />
         <activity
             android:name="com.umeng.socialize.editorpage.ShareActivity"
@@ -883,9 +888,7 @@
             android:label="@string/activity_select_aims" />
         <!-- 动态表单 -->
 
-        <activity
-            android:name=".ui.erp.activity.oa.WorkActivity"
-            android:label="@string/activity_signing" />
+
 
         <service
             android:name=".util.oa.AutoErpService"
@@ -893,7 +896,7 @@
             android:exported="true" />
 
         <activity
-            android:name=".ui.erp.activity.oa.MissionActivity"
+            android:name="com.uas.appworks.OA.erp.activity.MissionActivity"
             android:label="@string/activity_mission_plan" />
         <activity android:name=".ui.me.SpeechrecognitionActivity" />
         <activity android:name=".ui.erp.activity.oa.ErpActivity" />
@@ -908,7 +911,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" />
@@ -1012,7 +1020,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;

+ 0 - 1
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/circle/BusinessCircleActivity.java

@@ -53,7 +53,6 @@ import com.handmark.pulltorefresh.library.PullToRefreshListView;
 import com.uas.appme.other.activity.BasicInfoActivity;
 import com.nostra13.universalimageloader.core.ImageLoader;
 import com.nostra13.universalimageloader.core.assist.PauseOnScrollListener;
-import com.xzjmyk.pm.activity.R;
 import com.xzjmyk.pm.activity.adapter.PublicMessageAdapter;
 import com.xzjmyk.pm.activity.bean.circle.Comment;
 import com.xzjmyk.pm.activity.bean.circle.Praise;

+ 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;

+ 2 - 1
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/datainquiry/PDFUtils.java

@@ -56,7 +56,8 @@ public class PDFUtils {
         OkHttpClient mOkHttpClient = new OkHttpClient.Builder()
                 .sslSocketFactory(createSSLSocketFactory(), new TrustAllCerts())
                 .hostnameVerifier(new TrustAllHostnameVerifier())
-                .connectTimeout(30 * 1000, TimeUnit.SECONDS)
+                .connectTimeout(60 * 1000, TimeUnit.SECONDS)
+                .readTimeout(60 * 1000, TimeUnit.SECONDS)
                 .build();
         mOkHttpClient.newCall(mRequest).enqueue(new Callback() {
             @Override

+ 2 - 1
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/oa/OAActivity.java

@@ -49,6 +49,7 @@ import com.core.net.http.ViewUtil;
 import com.core.net.http.http.OAHttpHelper;
 import com.core.net.http.http.OnHttpResultListener;
 import com.core.net.http.http.Request;
+import com.core.selectcalendar.OACalendarView;
 import com.core.utils.CommonInterface;
 import com.core.utils.TimeUtils;
 import com.core.widget.EmptyLayout;
@@ -58,6 +59,7 @@ import com.handmark.pulltorefresh.library.PullToRefreshScrollView;
 import com.lidroid.xutils.ViewUtils;
 import com.lidroid.xutils.view.annotation.ViewInject;
 import com.uas.appworks.OA.erp.activity.ExpenseReimbursementActivity;
+import com.uas.appworks.OA.erp.activity.WorkActivity;
 import com.uas.appworks.OA.erp.activity.WorkDailyAddActivity;
 import com.uas.appworks.OA.erp.activity.form.DataFormDetailActivity;
 import com.xzjmyk.pm.activity.R;
@@ -76,7 +78,6 @@ import com.xzjmyk.pm.activity.ui.platform.task.TaskAddErpActivity;
 import com.xzjmyk.pm.activity.ui.platform.task.TaskDetailB2BActivity;
 import com.xzjmyk.pm.activity.util.oa.CommonUtil;
 import com.xzjmyk.pm.activity.util.oa.OAHttpUtil;
-import com.core.selectcalendar.OACalendarView;
 import com.xzjmyk.pm.activity.view.crouton.Crouton;
 import com.xzjmyk.pm.activity.view.crouton.Style;
 

+ 1 - 0
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/oa/OAMainActivity.java

@@ -30,6 +30,7 @@ import com.handmark.pulltorefresh.library.PullToRefreshBase;
 import com.handmark.pulltorefresh.library.PullToRefreshScrollView;
 import com.lidroid.xutils.ViewUtils;
 import com.lidroid.xutils.view.annotation.ViewInject;
+import com.uas.appworks.OA.erp.activity.WorkActivity;
 import com.uas.appworks.OA.erp.activity.WorkDailyAddActivity;
 import com.uas.appworks.OA.erp.activity.form.DataFormDetailActivity;
 import com.xzjmyk.pm.activity.R;

+ 5 - 5
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/adapter/oa/WorkAdapter.java

@@ -14,15 +14,15 @@ import android.widget.TextView;
 
 import com.common.data.CalendarUtil;
 import com.common.data.DateFormatUtil;
+import com.common.data.ListUtils;
 import com.common.data.StringUtil;
 import com.core.app.AppConfig;
-import com.xzjmyk.pm.activity.R;
-import com.xzjmyk.pm.activity.ui.erp.activity.oa.ChangeMobileActivity;
-import com.xzjmyk.pm.activity.ui.erp.activity.oa.WorkActivity;
-import com.core.model.WorkModel;
-import com.common.data.ListUtils;
 import com.core.model.OAConfig;
+import com.core.model.WorkModel;
 import com.core.utils.TimeUtils;
+import com.uas.appworks.OA.erp.activity.ChangeMobileActivity;
+import com.uas.appworks.OA.erp.activity.WorkActivity;
+import com.xzjmyk.pm.activity.R;
 
 import java.util.List;
 

+ 1 - 1
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/presenter/WorkPresenterhi.java

@@ -3,8 +3,8 @@ package com.xzjmyk.pm.activity.ui.erp.presenter;
 import android.os.Bundle;
 
 import com.core.model.WorkModel;
-import com.xzjmyk.pm.activity.ui.erp.presenter.imp.IWorkPresenter;
 import com.core.net.http.http.OnHttpResultListener;
+import com.uas.appworks.OA.erp.presenter.IWorkPresenter;
 
 import java.util.ArrayList;
 

+ 0 - 1
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/find/FindFragment.java

@@ -10,7 +10,6 @@ import android.view.MenuItem;
 import android.widget.RadioGroup;
 
 import com.xzjmyk.pm.activity.ui.circle.BusinessCircleActivity;
-import com.xzjmyk.pm.activity.R;
 import com.xzjmyk.pm.activity.ui.base.EasyFragment;
 
 public class FindFragment extends EasyFragment {

+ 18 - 22
WeiChat/src/main/java/com/xzjmyk/pm/activity/util/oa/AutoErpService.java

@@ -24,18 +24,20 @@ 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;
 import com.xzjmyk.pm.activity.R;
 import com.core.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.WorkActivity;
 import com.xzjmyk.pm.activity.ui.erp.model.book.SureBookModel;
 import com.xzjmyk.pm.activity.ui.me.TimeStatisticsActivity;
 
@@ -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();  //进行预约计划提醒操作

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

@@ -15,39 +15,39 @@ 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.broadcast.MsgBroadcast;
+import com.core.dao.UserDao;
+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.app.MyApplication;
 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.core.model.User;
-import com.core.broadcast.MsgBroadcast;
-import com.core.dao.MessageDao;
+import com.xzjmyk.pm.activity.db.dao.MessageDao;
 import com.xzjmyk.pm.activity.db.dao.MissionDao;
-import com.core.dao.UserDao;
 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.activity.oa.WorkActivity;
-import com.core.model.MissionModel;
-import com.core.model.WorkModel;
 import com.xzjmyk.pm.activity.ui.erp.presenter.MessagePresenter;
-import com.common.data.ListUtils;
-import com.core.utils.TimeUtils;
 import com.xzjmyk.pm.activity.util.baidu.BaiduMapUtil;
-import com.xzjmyk.pm.activity.util.baidu.OnGetDrivingRouteResult;
-import com.core.net.http.http.OAHttpHelper;
-import com.core.net.http.http.OnHttpResultListener;
-import com.core.net.http.http.Request;
-import com.core.api.wxapi.ApiConfig;
-import com.core.api.wxapi.ApiPlatform;
-import com.core.api.wxapi.ApiUtils;
 
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -55,8 +55,8 @@ import java.util.List;
 import java.util.Map;
 
 import static com.core.net.http.ViewUtil.ct;
-import static com.xzjmyk.pm.activity.util.oa.CommonUtil.getSharedPreferences;
 import static com.xzjmyk.pm.activity.util.oa.AutoErpService.CHANGE_WORK_TASK;
+import static com.xzjmyk.pm.activity.util.oa.CommonUtil.getSharedPreferences;
 
 /**
  * 负责签到   内外勤
@@ -259,7 +259,7 @@ public class AutoErpSigninUitl implements OnHttpResultListener {
 
     //获取打卡记录
     private void loadLog(Bundle bunder) throws Exception {
-        String date = DateFormatUtil.long2Str(DateFormatUtil.YMD);
+        String date = TimeUtils.s_long_2_str(System.currentTimeMillis());
         //获取网络数据
         Map<String, Object> param = new HashMap<>();
         String code = getSharedPreferences(MyApplication.getInstance(), "erp_username");
@@ -333,7 +333,7 @@ public class AutoErpSigninUitl implements OnHttpResultListener {
 
 
     private void loadLog(ArrayList<WorkModel> models) {
-        String date = DateFormatUtil.long2Str(DateFormatUtil.YMD);
+        String date = TimeUtils.s_long_2_str(System.currentTimeMillis());
         //获取网络数据
         Map<String, Object> param = new HashMap<>();
         String code = getSharedPreferences(MyApplication.getInstance(), "erp_username");
@@ -885,7 +885,7 @@ public class AutoErpSigninUitl implements OnHttpResultListener {
 
     //获取当前时间鱼下班时间的差
     private int getTime(String lastTime) {
-        long time = TimeUtils.f_str_2_long(DateFormatUtil.long2Str(DateFormatUtil.YMD)
+        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;

+ 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;

+ 0 - 230
WeiChat/src/main/java/com/xzjmyk/pm/activity/view/wheel/BottomPopup.java

@@ -1,230 +0,0 @@
-package com.xzjmyk.pm.activity.view.wheel;
-
-import android.app.Activity;
-import android.content.DialogInterface;
-import android.support.annotation.CallSuper;
-import android.support.annotation.StyleRes;
-import android.util.DisplayMetrics;
-import android.view.KeyEvent;
-import android.view.View;
-import android.view.ViewGroup;
-import android.view.Window;
-
-import com.common.LogUtil;
-
-
-/**
- * 底部弹窗基类
- *
- * @param <V> the type parameter
- * @author 李玉江[QQ :1023694760]
- * @since 2015/7/19
- */
-public abstract class BottomPopup<V extends View> implements DialogInterface.OnKeyListener {
-    public static final int MATCH_PARENT = ViewGroup.LayoutParams.MATCH_PARENT;
-    public static final int WRAP_CONTENT = ViewGroup.LayoutParams.WRAP_CONTENT;
-    protected Activity activity;
-    protected int screenWidthPixels;
-    protected int screenHeightPixels;
-    private Popup popup;
-    private int width = 0, height = 0;
-    private boolean isFillScreen = false;
-    private boolean isHalfScreen = false;
-    private boolean isPrepared = false;
-
-    /**
-     * Instantiates a new Bottom popup.
-     *
-     * @param activity the activity
-     */
-    public BottomPopup(Activity activity) {
-        this.activity = activity;
-        DisplayMetrics displayMetrics = ScreenUtils.displayMetrics(activity);
-        screenWidthPixels = displayMetrics.widthPixels;
-        screenHeightPixels = displayMetrics.heightPixels;
-        popup = new Popup(activity);
-        popup.setOnKeyListener(this);
-    }
-
-    /**
-     * Gets view.
-     *
-     * @return the view
-     */
-    protected abstract V makeContentView();
-
-    /**
-     * 弹出窗显示之前调用
-     */
-    private void onShowPrepare() {
-        if (isPrepared) {
-            return;
-        }
-        setContentViewBefore();
-        V view = makeContentView();
-        popup.setContentView(view);// 设置弹出窗体的布局
-        setContentViewAfter(view);
-        LogUtil.i("do something before popup show");
-        if (width == 0 && height == 0) {
-            //未明确指定宽高,优先考虑全屏再考虑半屏然后再考虑包裹内容
-            width = screenWidthPixels;
-            if (isFillScreen) {
-                height = MATCH_PARENT;
-            } else if (isHalfScreen) {
-                height = screenHeightPixels / 2;
-            } else {
-                height = WRAP_CONTENT;
-            }
-        }
-        popup.setSize(width, height);
-        isPrepared = true;
-    }
-
-    /**
-     * 固定高度为屏幕的高
-     *
-     * @param fillScreen the fill screen
-     */
-    public void setFillScreen(boolean fillScreen) {
-        isFillScreen = fillScreen;
-    }
-
-    /**
-     * 固定高度为屏幕的一半
-     *
-     * @param halfScreen the half screen
-     */
-    public void setHalfScreen(boolean halfScreen) {
-        isHalfScreen = halfScreen;
-    }
-
-    /**
-     * Sets content view before.
-     */
-    protected void setContentViewBefore() {
-    }
-
-    /**
-     * Sets content view after.
-     *
-     * @param contentView the content view
-     */
-    protected void setContentViewAfter(V contentView) {
-    }
-
-    /**
-     * Sets animation.
-     *
-     * @param animRes the anim res
-     */
-    public void setAnimationStyle(@StyleRes int animRes) {
-        popup.setAnimationStyle(animRes);
-    }
-
-    /**
-     * Sets on dismiss listener.
-     *
-     * @param onDismissListener the on dismiss listener
-     */
-    public void setOnDismissListener(DialogInterface.OnDismissListener onDismissListener) {
-        popup.setOnDismissListener(onDismissListener);
-        LogUtil.i("popup setOnDismissListener");
-    }
-
-    /**
-     * Sets size.
-     *
-     * @param width  the width
-     * @param height the height
-     */
-    public void setSize(int width, int height) {
-        // fixed: 2016/1/26 修复显示之前设置宽高无效问题
-        this.width = width;
-        this.height = height;
-    }
-
-    /**
-     * Sets width.
-     *
-     * @param width the width
-     * @see #setSize(int, int) #setSize(int, int)
-     */
-    public void setWidth(int width) {
-        this.width = width;
-    }
-
-    /**
-     * Sets height.
-     *
-     * @param height the height
-     * @see #setSize(int, int) #setSize(int, int)
-     */
-    public void setHeight(int height) {
-        this.height = height;
-    }
-
-    /**
-     * Is showing boolean.
-     *
-     * @return the boolean
-     */
-    public boolean isShowing() {
-        return popup.isShowing();
-    }
-
-    /**
-     * Show.
-     */
-    @CallSuper
-    public void show() {
-        onShowPrepare();
-        popup.show();
-        LogUtil.i("popup show");
-    }
-
-    /**
-     * Dismiss.
-     */
-    public void dismiss() {
-        popup.dismiss();
-        LogUtil.i("popup dismiss");
-    }
-
-    /**
-     * On key down boolean.
-     *
-     * @param keyCode the key code
-     * @param event   the event
-     * @return the boolean
-     */
-    public boolean onKeyDown(int keyCode, KeyEvent event) {
-        return false;
-    }
-
-    @Override
-    public final boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
-        if (event.getAction() == KeyEvent.ACTION_DOWN) {
-            return onKeyDown(keyCode, event);
-        }
-        return false;
-    }
-
-    /**
-     * Gets window.
-     *
-     * @return the window
-     */
-    public Window getWindow() {
-        return popup.getWindow();
-    }
-
-    /**
-     * Gets root view.
-     *
-     * @return the root view
-     */
-    public ViewGroup getRootView() {
-        return popup.getRootView();
-    }
-
-}

+ 0 - 304
WeiChat/src/main/java/com/xzjmyk/pm/activity/view/wheel/ConfirmPopup.java

@@ -1,304 +0,0 @@
-package com.xzjmyk.pm.activity.view.wheel;
-
-import android.app.Activity;
-import android.graphics.Color;
-import android.support.annotation.ColorInt;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.support.annotation.StringRes;
-import android.text.TextUtils;
-import android.view.Gravity;
-import android.view.View;
-import android.widget.Button;
-import android.widget.LinearLayout;
-import android.widget.RelativeLayout;
-import android.widget.TextView;
-
-
-/**
- * 带确定及取消按钮的
- *
- * @param <V> the type parameter
- * @author 李玉江[QQ:1032694760]
- * @since 2015/10/21
- */
-public abstract class ConfirmPopup<V extends View> extends BottomPopup<View> {
-    protected boolean topLineVisible = true;
-    protected int topLineColor = 0xFFDDDDDD;
-    protected int topBackgroundColor = Color.WHITE;
-    protected boolean cancelVisible = true;
-    protected CharSequence cancelText = "";
-    protected CharSequence submitText = "";
-    protected CharSequence titleText = "";
-    protected int cancelTextColor = Color.BLACK;
-    protected int submitTextColor = Color.BLACK;
-    protected int titleTextColor = Color.BLACK;
-
-    /**
-     * Instantiates a new Confirm popup.
-     *
-     * @param activity the activity
-     */
-    public ConfirmPopup(Activity activity) {
-        super(activity);
-        cancelText = activity.getString(android.R.string.cancel);
-        submitText = activity.getString(android.R.string.ok);
-    }
-
-    /**
-     * Sets top line color.
-     *
-     * @param topLineColor the top line color
-     */
-    public void setTopLineColor(@ColorInt int topLineColor) {
-        this.topLineColor = topLineColor;
-    }
-
-    /**
-     * Sets top background color.
-     *
-     * @param topBackgroundColor the top background color
-     */
-    public void setTopBackgroundColor(@ColorInt int topBackgroundColor) {
-        this.topBackgroundColor = topBackgroundColor;
-    }
-
-    /**
-     * Sets top line visible.
-     *
-     * @param topLineVisible the top line visible
-     */
-    public void setTopLineVisible(boolean topLineVisible) {
-        this.topLineVisible = topLineVisible;
-    }
-
-    /**
-     * Sets cancel visible.
-     *
-     * @param cancelVisible the cancel visible
-     */
-    public void setCancelVisible(boolean cancelVisible) {
-        this.cancelVisible = cancelVisible;
-    }
-
-    /**
-     * Sets cancel text.
-     *
-     * @param cancelText the cancel text
-     */
-    public void setCancelText(CharSequence cancelText) {
-        this.cancelText = cancelText;
-    }
-
-    /**
-     * Sets cancel text.
-     *
-     * @param textRes the text res
-     */
-    public void setCancelText(@StringRes int textRes) {
-        this.cancelText = activity.getString(textRes);
-    }
-
-    /**
-     * Sets submit text.
-     *
-     * @param submitText the submit text
-     */
-    public void setSubmitText(CharSequence submitText) {
-        this.submitText = submitText;
-    }
-
-    /**
-     * Sets submit text.
-     *
-     * @param textRes the text res
-     */
-    public void setSubmitText(@StringRes int textRes) {
-        this.submitText = activity.getString(textRes);
-    }
-
-    /**
-     * Sets title text.
-     *
-     * @param titleText the title text
-     */
-    public void setTitleText(CharSequence titleText) {
-        this.titleText = titleText;
-    }
-
-    /**
-     * Sets title text.
-     *
-     * @param textRes the text res
-     */
-    public void setTitleText(@StringRes int textRes) {
-        this.titleText = activity.getString(textRes);
-    }
-
-    /**
-     * Sets cancel text color.
-     *
-     * @param cancelTextColor the cancel text color
-     */
-    public void setCancelTextColor(@ColorInt int cancelTextColor) {
-        this.cancelTextColor = cancelTextColor;
-    }
-
-    /**
-     * Sets submit text color.
-     *
-     * @param submitTextColor the submit text color
-     */
-    public void setSubmitTextColor(@ColorInt int submitTextColor) {
-        this.submitTextColor = submitTextColor;
-    }
-
-    /**
-     * Sets title text color.
-     *
-     * @param titleTextColor the title text color
-     */
-    public void setTitleTextColor(@ColorInt int titleTextColor) {
-        this.titleTextColor = titleTextColor;
-    }
-
-    /**
-     * @see #makeHeaderView()
-     * @see #makeCenterView()
-     * @see #makeFooterView()
-     */
-    @Override
-    protected final View makeContentView() {
-        LinearLayout rootLayout = new LinearLayout(activity);
-        rootLayout.setLayoutParams(new LinearLayout.LayoutParams(MATCH_PARENT, MATCH_PARENT));
-        rootLayout.setBackgroundColor(Color.WHITE);
-        rootLayout.setOrientation(LinearLayout.VERTICAL);
-        rootLayout.setGravity(Gravity.CENTER);
-        rootLayout.setPadding(0, 0, 0, 0);
-        rootLayout.setClipToPadding(false);
-        View headerView = makeHeaderView();
-        if (headerView != null) {
-            rootLayout.addView(headerView);
-        }
-        if (topLineVisible) {
-            View lineView = new View(activity);
-            lineView.setLayoutParams(new LinearLayout.LayoutParams(MATCH_PARENT, 1));
-            lineView.setBackgroundColor(topLineColor);
-            rootLayout.addView(lineView);
-        }
-        rootLayout.addView(makeCenterView(), new LinearLayout.LayoutParams(MATCH_PARENT, 0, 1.0f));
-        View footerView = makeFooterView();
-        if (footerView != null) {
-            rootLayout.addView(footerView);
-        }
-        return rootLayout;
-    }
-
-    /**
-     * Make header view view.
-     *
-     * @return the view
-     */
-    @Nullable
-    protected View makeHeaderView() {
-        RelativeLayout topButtonLayout = new RelativeLayout(activity);
-        topButtonLayout.setLayoutParams(new RelativeLayout.LayoutParams(MATCH_PARENT, ConvertUtils.toPx(activity, 40)));
-        topButtonLayout.setBackgroundColor(topBackgroundColor);
-        topButtonLayout.setGravity(Gravity.CENTER_VERTICAL);
-
-        Button cancelButton = new Button(activity);
-        cancelButton.setVisibility(cancelVisible ? View.VISIBLE : View.GONE);
-        RelativeLayout.LayoutParams cancelButtonLayoutParams = new RelativeLayout.LayoutParams(WRAP_CONTENT, WRAP_CONTENT);
-        cancelButtonLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT, RelativeLayout.TRUE);
-        cancelButtonLayoutParams.addRule(RelativeLayout.CENTER_VERTICAL, RelativeLayout.TRUE);
-        cancelButtonLayoutParams.leftMargin = ConvertUtils.toPx(activity, 10);
-        cancelButton.setLayoutParams(cancelButtonLayoutParams);
-        cancelButton.setBackgroundColor(Color.TRANSPARENT);
-        cancelButton.setGravity(Gravity.CENTER);
-        cancelButton.setTextSize(18f);
-        if (!TextUtils.isEmpty(cancelText)) {
-            cancelButton.setText(cancelText);
-        }
-        cancelButton.setTextColor(cancelTextColor);
-        cancelButton.setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                dismiss();
-                onCancel();
-            }
-        });
-        topButtonLayout.addView(cancelButton);
-
-        TextView titleView = new TextView(activity);
-        RelativeLayout.LayoutParams titleLayoutParams = new RelativeLayout.LayoutParams(WRAP_CONTENT, WRAP_CONTENT);
-        int margin = ConvertUtils.toPx(activity, 20);
-        titleLayoutParams.leftMargin = margin;
-        titleLayoutParams.rightMargin = margin;
-        titleLayoutParams.addRule(RelativeLayout.CENTER_HORIZONTAL, RelativeLayout.TRUE);
-        titleLayoutParams.addRule(RelativeLayout.CENTER_VERTICAL, RelativeLayout.TRUE);
-        titleView.setLayoutParams(titleLayoutParams);
-        titleView.setGravity(Gravity.CENTER);
-        if (!TextUtils.isEmpty(titleText)) {
-            titleView.setText(titleText);
-        }
-        titleView.setTextColor(titleTextColor);
-        topButtonLayout.addView(titleView);
-
-        Button submitButton = new Button(activity);
-        RelativeLayout.LayoutParams submitButtonLayoutParams = new RelativeLayout.LayoutParams(WRAP_CONTENT, WRAP_CONTENT);
-        submitButtonLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, RelativeLayout.TRUE);
-        submitButtonLayoutParams.addRule(RelativeLayout.CENTER_VERTICAL, RelativeLayout.TRUE);
-        submitButtonLayoutParams.rightMargin = ConvertUtils.toPx(activity, 10);
-        submitButton.setLayoutParams(submitButtonLayoutParams);
-        submitButton.setBackgroundColor(Color.TRANSPARENT);
-        submitButton.setTextSize(18f);
-        submitButton.setGravity(Gravity.CENTER);
-        if (!TextUtils.isEmpty(submitText)) {
-            submitButton.setText(submitText);
-        }
-        submitButton.setTextColor(submitTextColor);
-        submitButton.setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                dismiss();
-                onSubmit();
-            }
-        });
-        topButtonLayout.addView(submitButton);
-
-        return topButtonLayout;
-    }
-
-    /**
-     * Init center view v.
-     *
-     * @return the v
-     */
-    @NonNull
-    protected abstract V makeCenterView();
-
-    /**
-     * Make footer view view.
-     *
-     * @return the view
-     */
-    @Nullable
-    protected View makeFooterView() {
-        return null;
-    }
-
-    /**
-     * On submit.
-     */
-    protected void onSubmit() {
-
-    }
-
-    /**
-     * On cancel.
-     */
-    protected void onCancel() {
-
-    }
-
-}

+ 0 - 544
WeiChat/src/main/java/com/xzjmyk/pm/activity/view/wheel/ConvertUtils.java

@@ -1,544 +0,0 @@
-package com.xzjmyk.pm.activity.view.wheel;
-
-import android.annotation.TargetApi;
-import android.content.Context;
-import android.content.res.ColorStateList;
-import android.content.res.Resources;
-import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
-import android.graphics.Canvas;
-import android.graphics.Color;
-import android.graphics.drawable.BitmapDrawable;
-import android.graphics.drawable.ColorDrawable;
-import android.graphics.drawable.Drawable;
-import android.graphics.drawable.NinePatchDrawable;
-import android.graphics.drawable.ShapeDrawable;
-import android.graphics.drawable.StateListDrawable;
-import android.graphics.drawable.shapes.RoundRectShape;
-import android.os.Build;
-import android.util.TypedValue;
-
-import com.common.LogUtil;
-
-import java.io.BufferedReader;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.UnsupportedEncodingException;
-import java.text.DecimalFormat;
-import java.text.SimpleDateFormat;
-import java.util.Arrays;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.Locale;
-
-/**
- * 数据类型转换、单位转换
- *
- * @author 李玉江[QQ:1023694760]
- * @since 2014-4-18
- */
-public class ConvertUtils {
-    /**
-     * The constant GB.
-     */
-    public static final long GB = 1073741824;
-    /**
-     * The constant MB.
-     */
-    public static final long MB = 1048576;
-    /**
-     * The constant KB.
-     */
-    public static final long KB = 1024;
-
-    /**
-     * 转换为6位十六进制颜色代码,不含“#”
-     *
-     * @param color the color
-     * @return string string
-     */
-    public static String toColorString(int color) {
-        return toColorString(color, false);
-    }
-
-    /**
-     * 转换为6位十六进制颜色代码,不含“#”
-     *
-     * @param color        the color
-     * @param includeAlpha the include alpha
-     * @return string string
-     */
-    public static String toColorString(int color, boolean includeAlpha) {
-        String alpha = Integer.toHexString(Color.alpha(color));
-        String red = Integer.toHexString(Color.red(color));
-        String green = Integer.toHexString(Color.green(color));
-        String blue = Integer.toHexString(Color.blue(color));
-        if (alpha.length() == 1) {
-            alpha = "0" + alpha;
-        }
-        if (red.length() == 1) {
-            red = "0" + red;
-        }
-        if (green.length() == 1) {
-            green = "0" + green;
-        }
-        if (blue.length() == 1) {
-            blue = "0" + blue;
-        }
-        String colorString;
-        if (includeAlpha) {
-            colorString = alpha + red + green + blue;
-            LogUtil.i(String.format(Locale.CHINA, "%d to color string is %s", color, colorString));
-        } else {
-            colorString = red + green + blue;
-            LogUtil.i(String.format(Locale.CHINA, "%d to color string is %s%s%s%s, exclude alpha is %s", color, alpha, red, green, blue, colorString));
-        }
-        return colorString;
-    }
-
-    /**
-     * 将指定的日期转换为一定格式的字符串
-     *
-     * @param date   the date
-     * @param format the format
-     * @return string string
-     */
-    public static String toDateString(Date date, String format) {
-        SimpleDateFormat sdf = new SimpleDateFormat(format, Locale.CHINA);
-        return sdf.format(date);
-    }
-
-    /**
-     * 将当前的日期转换为一定格式的字符串
-     *
-     * @param format the format
-     * @return string string
-     */
-    public static String toDateString(String format) {
-        return toDateString(Calendar.getInstance(Locale.CHINA).getTime(), format);
-    }
-
-    /**
-     * 将指定的日期字符串转换为日期时间
-     *
-     * @param dateStr 如:2014-04-08 23:02
-     * @return date date
-     */
-    public static Date toDate(String dateStr) {
-        return DateUtils.parseDate(dateStr);
-    }
-
-    /**
-     * 将指定的日期字符串转换为时间戳
-     *
-     * @param dateStr 如:2014-04-08 23:02
-     * @return long long
-     */
-    public static long toTimemillis(String dateStr) {
-        return toDate(dateStr).getTime();
-    }
-
-    /**
-     * To string string.
-     *
-     * @param objects the objects
-     * @return the string
-     */
-    public static String toString(Object[] objects) {
-        return Arrays.deepToString(objects);
-    }
-
-    /**
-     * To string string.
-     *
-     * @param objects the objects
-     * @param tag     the tag
-     * @return the string
-     */
-    public static String toString(Object[] objects, String tag) {
-        StringBuilder sb = new StringBuilder();
-        for (Object object : objects) {
-            sb.append(object);
-            sb.append(tag);
-        }
-        return sb.toString();
-    }
-
-    /**
-     * To byte array byte [ ].
-     *
-     * @param is the is
-     * @return the byte [ ]
-     */
-    public static byte[] toByteArray(InputStream is) {
-        if (is == null) {
-            return null;
-        }
-        try {
-            ByteArrayOutputStream os = new ByteArrayOutputStream();
-            byte[] buff = new byte[100];
-            int rc = 0;
-            while ((rc = is.read(buff, 0, 100)) > 0) {
-                os.write(buff, 0, rc);
-            }
-            byte[] bytes = os.toByteArray();
-            os.close();
-            return bytes;
-        } catch (IOException e) {
-            e.printStackTrace();
-        }
-        return null;
-    }
-
-    /**
-     * To byte array byte [ ].
-     *
-     * @param bitmap the bitmap
-     * @return the byte [ ]
-     */
-    public static byte[] toByteArray(Bitmap bitmap) {
-        if (bitmap == null) {
-            return null;
-        }
-        ByteArrayOutputStream os = new ByteArrayOutputStream();
-        // 将Bitmap压缩成PNG编码,质量为100%存储,除了PNG还有很多常见格式,如jpeg等。
-        bitmap.compress(Bitmap.CompressFormat.PNG, 100, os);
-        byte[] bytes = os.toByteArray();
-        try {
-            os.close();
-        } catch (IOException e) {
-            e.printStackTrace();
-        }
-        return bytes;
-    }
-
-    /**
-     * To bitmap bitmap.
-     *
-     * @param bytes  the bytes
-     * @param width  the width
-     * @param height the height
-     * @return the bitmap
-     */
-    public static Bitmap toBitmap(byte[] bytes, int width, int height) {
-        Bitmap bitmap = null;
-        if (bytes.length != 0) {
-            try {
-                BitmapFactory.Options options = new BitmapFactory.Options();
-                // 不进行图片抖动处理
-                options.inDither = false;
-                // 设置让解码器以最佳方式解码
-                options.inPreferredConfig = null;
-                if (width > 0 && height > 0) {
-                    options.outWidth = width;
-                    options.outHeight = height;
-                }
-                bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length, options);
-            } catch (Exception e) {
-                LogUtils.error(e);
-            }
-        }
-        return bitmap;
-    }
-
-    /**
-     * To bitmap bitmap.
-     *
-     * @param bytes the bytes
-     * @return the bitmap
-     */
-    public static Bitmap toBitmap(byte[] bytes) {
-        return toBitmap(bytes, -1, -1);
-    }
-
-    /**
-     * convert Drawable to Bitmap
-     * 参考:http://kylines.iteye.com/blog/1660184
-     *
-     * @param drawable the drawable
-     * @return bitmap bitmap
-     */
-    @TargetApi(Build.VERSION_CODES.HONEYCOMB)
-    public static Bitmap toBitmap(Drawable drawable) {
-        if (drawable instanceof BitmapDrawable) {
-            return ((BitmapDrawable) drawable).getBitmap();
-        } else if (drawable instanceof ColorDrawable) {
-            //color
-            Bitmap bitmap = Bitmap.createBitmap(32, 32, Bitmap.Config.ARGB_8888);
-            if (Build.VERSION.SDK_INT >= 11) {
-                Canvas canvas = new Canvas(bitmap);
-                canvas.drawColor(((ColorDrawable) drawable).getColor());
-            }
-            return bitmap;
-        } else if (drawable instanceof NinePatchDrawable) {
-            //.9.png
-            Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(),
-                    drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
-            Canvas canvas = new Canvas(bitmap);
-            drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
-            drawable.draw(canvas);
-            return bitmap;
-        }
-        return null;
-    }
-
-    /**
-     * convert Bitmap to Drawable
-     *
-     * @param bitmap the bitmap
-     * @return drawable drawable
-     */
-    public static Drawable toDrawable(Bitmap bitmap) {
-        return bitmap == null ? null : new BitmapDrawable(null, bitmap);
-    }
-
-    /**
-     * convert Drawable to byte array
-     *
-     * @param drawable the drawable
-     * @return byte [ ]
-     */
-    public static byte[] toByteArray(Drawable drawable) {
-        return toByteArray(toBitmap(drawable));
-    }
-
-    /**
-     * convert byte array to Drawable
-     *
-     * @param bytes the bytes
-     * @return drawable drawable
-     */
-    public static Drawable toDrawable(byte[] bytes) {
-        return toDrawable(toBitmap(bytes));
-    }
-
-    /**
-     * dp转换为px
-     *
-     * @param context the context
-     * @param dpValue the dp value
-     * @return int int
-     */
-    public static int toPx(Context context, float dpValue) {
-        final float scale = context.getResources().getDisplayMetrics().density;
-        int pxValue = (int) (dpValue * scale + 0.5f);
-        LogUtils.verbose(dpValue + " dp == " + pxValue + " px");
-        return pxValue;
-    }
-
-    /**
-     * To px int.
-     *
-     * @param dpValue the dp value
-     * @return the int
-     */
-    public static int toPx(float dpValue) {
-        Resources resources = Resources.getSystem();
-        float px = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dpValue, resources.getDisplayMetrics());
-        return (int) px;
-    }
-
-    /**
-     * px转换为dp
-     *
-     * @param context the context
-     * @param pxValue the px value
-     * @return int int
-     */
-    public static int toDp(Context context, float pxValue) {
-        final float scale = context.getResources().getDisplayMetrics().density;
-        int dpValue = (int) (pxValue / scale + 0.5f);
-        LogUtils.verbose(pxValue + " px == " + dpValue + " dp");
-        return dpValue;
-    }
-
-    /**
-     * px转换为sp
-     *
-     * @param context the context
-     * @param pxValue the px value
-     * @return int int
-     */
-    public static int toSp(Context context, float pxValue) {
-        final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
-        int spValue = (int) (pxValue / fontScale + 0.5f);
-        LogUtils.verbose(pxValue + " px == " + spValue + " sp");
-        return spValue;
-    }
-
-    /**
-     * To gbk string.
-     *
-     * @param str the str
-     * @return the string
-     */
-    public static String toGbk(String str) {
-        try {
-            return new String(str.getBytes("utf-8"), "gbk");
-        } catch (UnsupportedEncodingException e) {
-            LogUtils.warn(e.getMessage());
-            return str;
-        }
-    }
-
-    /**
-     * To file size string string.
-     *
-     * @param fileSize the file size
-     * @return the string
-     */
-    public static String toFileSizeString(long fileSize) {
-        DecimalFormat df = new DecimalFormat("0.00");
-        String fileSizeString;
-        if (fileSize < KB) {
-            fileSizeString = fileSize + "B";
-        } else if (fileSize < MB) {
-            fileSizeString = df.format((double) fileSize / KB) + "K";
-        } else if (fileSize < GB) {
-            fileSizeString = df.format((double) fileSize / MB) + "M";
-        } else {
-            fileSizeString = df.format((double) fileSize / GB) + "G";
-        }
-        return fileSizeString;
-    }
-
-    /**
-     * To string string.
-     *
-     * @param is the is
-     * @return the string
-     */
-    public static String toString(InputStream is) {
-        StringBuilder sb = new StringBuilder();
-        try {
-            BufferedReader reader = new BufferedReader(new InputStreamReader(is));
-            String line = null;
-            while ((line = reader.readLine()) != null) {
-                sb.append(line);
-            }
-            is.close();
-        } catch (IOException e) {
-            LogUtils.error(e);
-        }
-        return sb.toString();
-    }
-
-    /**
-     * To round drawable shape drawable.
-     *
-     * @param color  the color
-     * @param radius the radius
-     * @return the shape drawable
-     */
-    public static ShapeDrawable toRoundDrawable(int color, int radius) {
-        int r = toPx(radius);
-        float[] outerR = new float[]{r, r, r, r, r, r, r, r};
-        RoundRectShape shape = new RoundRectShape(outerR, null, null);
-        ShapeDrawable drawable = new ShapeDrawable(shape);
-        drawable.getPaint().setColor(color);
-        return drawable;
-    }
-
-    /**
-     * 对TextView、Button等设置不同状态时其文字颜色。
-     * 参见:http://blog.csdn.net/sodino/article/details/6797821
-     * Modified by liyujiang at 2015.08.13
-     *
-     * @param normalColor  the normal color
-     * @param pressedColor the pressed color
-     * @param focusedColor the focused color
-     * @param unableColor  the unable color
-     * @return the color state list
-     */
-    public static ColorStateList toColorStateList(int normalColor, int pressedColor, int focusedColor, int unableColor) {
-        int[] colors = new int[]{pressedColor, focusedColor, normalColor, focusedColor, unableColor, normalColor};
-        int[][] states = new int[6][];
-        states[0] = new int[]{android.R.attr.state_pressed, android.R.attr.state_enabled};
-        states[1] = new int[]{android.R.attr.state_enabled, android.R.attr.state_focused};
-        states[2] = new int[]{android.R.attr.state_enabled};
-        states[3] = new int[]{android.R.attr.state_focused};
-        states[4] = new int[]{android.R.attr.state_window_focused};
-        states[5] = new int[]{};
-        return new ColorStateList(states, colors);
-    }
-
-    /**
-     * To color state list color state list.
-     *
-     * @param normalColor  the normal color
-     * @param pressedColor the pressed color
-     * @return the color state list
-     */
-    public static ColorStateList toColorStateList(int normalColor, int pressedColor) {
-        return toColorStateList(normalColor, pressedColor, pressedColor, normalColor);
-    }
-
-    /**
-     * To state list drawable state list drawable.
-     *
-     * @param normal  the normal
-     * @param pressed the pressed
-     * @param focused the focused
-     * @param unable  the unable
-     * @return the state list drawable
-     */
-    public static StateListDrawable toStateListDrawable(Drawable normal, Drawable pressed, Drawable focused, Drawable unable) {
-        StateListDrawable drawable = new StateListDrawable();
-        drawable.addState(new int[]{android.R.attr.state_pressed, android.R.attr.state_enabled}, pressed);
-        drawable.addState(new int[]{android.R.attr.state_enabled, android.R.attr.state_focused}, focused);
-        drawable.addState(new int[]{android.R.attr.state_enabled}, normal);
-        drawable.addState(new int[]{android.R.attr.state_focused}, focused);
-        drawable.addState(new int[]{android.R.attr.state_window_focused}, unable);
-        drawable.addState(new int[]{}, normal);
-        return drawable;
-    }
-
-    /**
-     * To state list drawable state list drawable.
-     *
-     * @param normalColor  the normal color
-     * @param pressedColor the pressed color
-     * @param focusedColor the focused color
-     * @param unableColor  the unable color
-     * @return the state list drawable
-     */
-    public static StateListDrawable toStateListDrawable(int normalColor, int pressedColor, int focusedColor, int unableColor) {
-        StateListDrawable drawable = new StateListDrawable();
-        Drawable normal = new ColorDrawable(normalColor);
-        Drawable pressed = new ColorDrawable(pressedColor);
-        Drawable focused = new ColorDrawable(focusedColor);
-        Drawable unable = new ColorDrawable(unableColor);
-        drawable.addState(new int[]{android.R.attr.state_pressed, android.R.attr.state_enabled}, pressed);
-        drawable.addState(new int[]{android.R.attr.state_enabled, android.R.attr.state_focused}, focused);
-        drawable.addState(new int[]{android.R.attr.state_enabled}, normal);
-        drawable.addState(new int[]{android.R.attr.state_focused}, focused);
-        drawable.addState(new int[]{android.R.attr.state_window_focused}, unable);
-        drawable.addState(new int[]{}, normal);
-        return drawable;
-    }
-
-    /**
-     * To state list drawable state list drawable.
-     *
-     * @param normal  the normal
-     * @param pressed the pressed
-     * @return the state list drawable
-     */
-    public static StateListDrawable toStateListDrawable(Drawable normal, Drawable pressed) {
-        return toStateListDrawable(normal, pressed, pressed, normal);
-    }
-
-    /**
-     * To state list drawable state list drawable.
-     *
-     * @param normalColor  the normal color
-     * @param pressedColor the pressed color
-     * @return the state list drawable
-     */
-    public static StateListDrawable toStateListDrawable(int normalColor, int pressedColor) {
-        return toStateListDrawable(normalColor, pressedColor, pressedColor, normalColor);
-    }
-
-}

+ 0 - 499
WeiChat/src/main/java/com/xzjmyk/pm/activity/view/wheel/DateTimePicker.java

@@ -1,499 +0,0 @@
-package com.xzjmyk.pm.activity.view.wheel;
-
-import android.app.Activity;
-import android.support.annotation.IntDef;
-import android.support.annotation.NonNull;
-import android.text.TextUtils;
-import android.view.Gravity;
-import android.view.View;
-import android.widget.LinearLayout;
-import android.widget.TextView;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.Collections;
-import java.util.Comparator;
-
-/**
- * Created by Dong on 2016/5/13.
- * 年月日 时分秒
- */
-public class DateTimePicker extends WheelPicker {
-
-    /**
-     * 年月日
-     */
-    public static final int YEAR_MONTH_DAY = 0;
-    /**
-     * 年月
-     */
-    public static final int YEAR_MONTH = 1;
-    /**
-     * 月日
-     */
-    public static final int MONTH_DAY = 2;
-
-    /**
-     * 24小时
-     */
-    public static final int HOUR_OF_DAY = 3;
-    /**
-     * 12小时
-     */
-    public static final int HOUR = 4;
-
-    private ArrayList<String> years = new ArrayList<String>();
-    private ArrayList<String> months = new ArrayList<String>();
-    private ArrayList<String> days = new ArrayList<String>();
-    private String yearLabel = "年", monthLabel = "月", dayLabel = "日";
-    private int selectedYearIndex = 0, selectedMonthIndex = 0, selectedDayIndex = 0;
-    private String hourLabel = "时", minuteLabel = "分";
-    private String selectedHour = "", selectedMinute = "";
-    private OnDateTimePickListener onDateTimePickListener;
-    private int mode;
-
-
-    @IntDef(flag = false, value = {YEAR_MONTH_DAY, YEAR_MONTH, MONTH_DAY, HOUR_OF_DAY, HOUR})
-    @Retention(RetentionPolicy.SOURCE)
-    public @interface Mode {
-    }
-
-    public DateTimePicker(Activity activity, @Mode int mode) {
-        super(activity);
-        textSize = 16;//年月日时分,比较宽,设置字体小一点才能显示完整
-        this.mode = mode;
-        for (int i = 2000; i <= 2050; i++) {
-            years.add(String.valueOf(i));
-        }
-        for (int i = 1; i <= 12; i++) {
-            months.add(DateUtils.fillZero(i));
-        }
-        for (int i = 1; i <= 31; i++) {
-            days.add(DateUtils.fillZero(i));
-        }
-        selectedHour = DateUtils.fillZero(Calendar.getInstance().get(Calendar.HOUR_OF_DAY));
-        selectedMinute = DateUtils.fillZero(Calendar.getInstance().get(Calendar.MINUTE));
-    }
-
-    @NonNull
-    @Override
-    protected View makeCenterView() {
-        LinearLayout layout = new LinearLayout(activity);
-        layout.setOrientation(LinearLayout.HORIZONTAL);
-        layout.setGravity(Gravity.CENTER);
-        WheelView yearView = new WheelView(activity.getBaseContext());
-        yearView.setLayoutParams(new LinearLayout.LayoutParams(WRAP_CONTENT, WRAP_CONTENT));
-        yearView.setTextSize(textSize);
-        yearView.setTextColor(textColorNormal, textColorFocus);
-        yearView.setLineVisible(lineVisible);
-        yearView.setLineColor(lineColor);
-        yearView.setOffset(offset);
-        layout.addView(yearView);
-        TextView yearTextView = new TextView(activity);
-        yearTextView.setLayoutParams(new LinearLayout.LayoutParams(WRAP_CONTENT, WRAP_CONTENT));
-        yearTextView.setTextSize(textSize);
-        yearTextView.setTextColor(textColorFocus);
-        if (!TextUtils.isEmpty(yearLabel)) {
-            yearTextView.setText(yearLabel);
-        }
-        layout.addView(yearTextView);
-
-        WheelView monthView = new WheelView(activity.getBaseContext());
-        monthView.setLayoutParams(new LinearLayout.LayoutParams(WRAP_CONTENT, WRAP_CONTENT));
-        monthView.setTextSize(textSize);
-        monthView.setTextColor(textColorNormal, textColorFocus);
-        monthView.setLineVisible(lineVisible);
-        monthView.setLineColor(lineColor);
-        monthView.setOffset(offset);
-        layout.addView(monthView);
-        TextView monthTextView = new TextView(activity);
-        monthTextView.setLayoutParams(new LinearLayout.LayoutParams(WRAP_CONTENT, WRAP_CONTENT));
-        monthTextView.setTextSize(textSize);
-        monthTextView.setTextColor(textColorFocus);
-        if (!TextUtils.isEmpty(monthLabel)) {
-            monthTextView.setText(monthLabel);
-        }
-        layout.addView(monthTextView);
-
-        final WheelView dayView = new WheelView(activity.getBaseContext());
-        dayView.setLayoutParams(new LinearLayout.LayoutParams(WRAP_CONTENT, WRAP_CONTENT));
-        dayView.setTextSize(textSize);
-        dayView.setTextColor(textColorNormal, textColorFocus);
-        dayView.setLineVisible(lineVisible);
-        dayView.setLineColor(lineColor);
-        dayView.setOffset(offset);
-        layout.addView(dayView);
-        TextView dayTextView = new TextView(activity);
-        dayTextView.setLayoutParams(new LinearLayout.LayoutParams(WRAP_CONTENT, WRAP_CONTENT));
-        dayTextView.setTextSize(textSize);
-        dayTextView.setTextColor(textColorFocus);
-        if (!TextUtils.isEmpty(dayLabel)) {
-            dayTextView.setText(dayLabel);
-        }
-        layout.addView(dayTextView);
-
-        WheelView hourView = new WheelView(activity);
-        hourView.setLayoutParams(new LinearLayout.LayoutParams(WRAP_CONTENT, WRAP_CONTENT));
-        hourView.setTextSize(textSize);
-        hourView.setTextColor(textColorNormal, textColorFocus);
-        hourView.setLineVisible(lineVisible);
-        hourView.setLineColor(lineColor);
-        layout.addView(hourView);
-        TextView hourTextView = new TextView(activity);
-        hourTextView.setLayoutParams(new LinearLayout.LayoutParams(WRAP_CONTENT, WRAP_CONTENT));
-        hourTextView.setTextSize(textSize);
-        hourTextView.setTextColor(textColorFocus);
-        if (!TextUtils.isEmpty(hourLabel)) {
-            hourTextView.setText(hourLabel);
-        }
-        layout.addView(hourTextView);
-
-        WheelView minuteView = new WheelView(activity);
-        minuteView.setLayoutParams(new LinearLayout.LayoutParams(WRAP_CONTENT, WRAP_CONTENT));
-        minuteView.setTextSize(textSize);
-        minuteView.setTextColor(textColorNormal, textColorFocus);
-        minuteView.setLineVisible(lineVisible);
-        minuteView.setLineColor(lineColor);
-        minuteView.setOffset(offset);
-        layout.addView(minuteView);
-
-        TextView minuteTextView = new TextView(activity);
-        minuteTextView.setLayoutParams(new LinearLayout.LayoutParams(WRAP_CONTENT, WRAP_CONTENT));
-        minuteTextView.setTextSize(textSize);
-        minuteTextView.setTextColor(textColorFocus);
-        if (!TextUtils.isEmpty(minuteLabel)) {
-            minuteTextView.setText(minuteLabel);
-        }
-        layout.addView(minuteTextView);
-
-        if (mode == YEAR_MONTH) {
-            dayView.setVisibility(View.GONE);
-            dayTextView.setVisibility(View.GONE);
-        } else if (mode == MONTH_DAY) {
-            yearView.setVisibility(View.GONE);
-            yearTextView.setVisibility(View.GONE);
-        }
-
-        if (mode == YEAR_MONTH_DAY){
-            hourView.setVisibility(View.GONE);
-            minuteView.setVisibility(View.GONE);
-            hourTextView.setVisibility(View.GONE);
-            minuteTextView.setVisibility(View.GONE);
-        }
-
-        if (mode != MONTH_DAY) {
-            if (!TextUtils.isEmpty(yearLabel)) {
-                yearTextView.setText(yearLabel);
-            }
-            if (selectedYearIndex == 0) {
-                yearView.setItems(years);
-            } else {
-                yearView.setItems(years, selectedYearIndex);
-            }
-            yearView.setOnWheelViewListener(new WheelView.OnWheelViewListener() {
-                @Override
-                public void onSelected(boolean isUserScroll, int selectedIndex, String item) {
-                    selectedYearIndex = selectedIndex;
-                    //需要根据年份及月份动态计算天数
-                    days.clear();
-                    int maxDays = DateUtils.calculateDaysInMonth(stringToYearMonthDay(item), stringToYearMonthDay(months.get(selectedMonthIndex)));
-                    for (int i = 1; i <= maxDays; i++) {
-                        days.add(DateUtils.fillZero(i));
-                    }
-                    if (selectedDayIndex >= maxDays) {
-                        //年或月变动时,保持之前选择的日不动:如果之前选择的日是之前年月的最大日,则日自动为该年月的最大日
-                        selectedDayIndex = days.size() - 1;
-                    }
-                    dayView.setItems(days, selectedDayIndex);
-                }
-            });
-        }
-        if (!TextUtils.isEmpty(monthLabel)) {
-            monthTextView.setText(monthLabel);
-        }
-        if (selectedMonthIndex == 0) {
-            monthView.setItems(months);
-        } else {
-            monthView.setItems(months, selectedMonthIndex);
-        }
-        monthView.setOnWheelViewListener(new WheelView.OnWheelViewListener() {
-            @Override
-            public void onSelected(boolean isUserScroll, int selectedIndex, String item) {
-                selectedMonthIndex = selectedIndex;
-                if (mode != YEAR_MONTH) {
-                    //年月日或年月模式下,需要根据年份及月份动态计算天数
-                    days.clear();
-                    int maxDays = DateUtils.calculateDaysInMonth(stringToYearMonthDay(years.get(selectedYearIndex)), stringToYearMonthDay(item));
-                    for (int i = 1; i <= maxDays; i++) {
-                        days.add(DateUtils.fillZero(i));
-                    }
-                    if (selectedDayIndex >= maxDays) {
-                        //年或月变动时,保持之前选择的日不动:如果之前选择的日是之前年月的最大日,则日自动为该年月的最大日
-                        selectedDayIndex = days.size() - 1;
-                    }
-                    dayView.setItems(days, selectedDayIndex);
-                }
-            }
-        });
-        if (mode != YEAR_MONTH) {
-            if (!TextUtils.isEmpty(dayLabel)) {
-                dayTextView.setText(dayLabel);
-            }
-            if (selectedDayIndex == 0) {
-                dayView.setItems(days);
-            } else {
-                dayView.setItems(days, selectedDayIndex);
-            }
-            dayView.setOnWheelViewListener(new WheelView.OnWheelViewListener() {
-                @Override
-                public void onSelected(boolean isUserScroll, int selectedIndex, String item) {
-                    selectedDayIndex = selectedIndex;
-                }
-            });
-        }
-
-        ArrayList<String> hours = new ArrayList<String>();
-        if (mode == HOUR) {
-            for (int i = 1; i <= 12; i++) {
-                hours.add(DateUtils.fillZero(i));
-            }
-        } else {
-            for (int i = 0; i < 24; i++) {
-                hours.add(DateUtils.fillZero(i));
-            }
-        }
-        hourView.setItems(hours, selectedHour);
-        ArrayList<String> minutes = new ArrayList<String>();
-        for (int i = 0; i < 60; i++) {
-            minutes.add(DateUtils.fillZero(i));
-        }
-        minuteView.setItems(minutes, selectedMinute);
-        hourView.setOnWheelViewListener(new WheelView.OnWheelViewListener() {
-            @Override
-            public void onSelected(boolean isUserScroll, int selectedIndex, String item) {
-                selectedHour = item;
-            }
-        });
-        minuteView.setOnWheelViewListener(new WheelView.OnWheelViewListener() {
-            @Override
-            public void onSelected(boolean isUserScroll, int selectedIndex, String item) {
-                selectedMinute = item;
-            }
-        });
-
-        return layout;
-    }
-
-    @Override
-    protected void onSubmit() {
-        if (onDateTimePickListener != null) {
-            String year = getSelectedYear();
-            String month = getSelectedMonth();
-            String day = getSelectedDay();
-            switch (mode) {
-                case YEAR_MONTH:
-                    ((OnYearMonthPickListener) onDateTimePickListener).onDateTimePicked(year, month, selectedHour, selectedMinute);
-                    break;
-                case MONTH_DAY:
-                    ((OnMonthDayPickListener) onDateTimePickListener).onDateTimePicked(month, day, selectedHour, selectedMinute);
-                    break;
-                default:
-                    ((OnYearMonthDayTimePickListener) onDateTimePickListener).onDateTimePicked(year, month, day, selectedHour, selectedMinute);
-                    break;
-            }
-        }
-    }
-
-    /**
-     * Gets selected year.
-     *
-     * @return the selected year
-     */
-    public String getSelectedYear() {
-        return years.get(selectedYearIndex);
-    }
-
-    /**
-     * Gets selected month.
-     *
-     * @return the selected month
-     */
-    public String getSelectedMonth() {
-        return months.get(selectedMonthIndex);
-    }
-
-    /**
-     * Gets selected day.
-     *
-     * @return the selected day
-     */
-    public String getSelectedDay() {
-        return days.get(selectedDayIndex);
-    }
-
-    private int stringToYearMonthDay(String text) {
-        if (text.startsWith("0")) {
-            //截取掉前缀0以便转换为整数
-            text = text.substring(1);
-        }
-        return Integer.parseInt(text);
-    }
-
-    /**
-     * Sets label.
-     *
-     * @param yearLabel  the year label
-     * @param monthLabel the month label
-     * @param dayLabel   the day label
-     */
-    public void setLabel(String yearLabel, String monthLabel, String dayLabel, String hourLabel, String minuteLabel) {
-        this.yearLabel = yearLabel;
-        this.monthLabel = monthLabel;
-        this.dayLabel = dayLabel;
-        this.hourLabel = hourLabel;
-        this.minuteLabel = minuteLabel;
-    }
-
-    /**
-     * Sets range.
-     *
-     * @param startYear the start year
-     * @param endYear   the end year
-     */
-    public void setRange(int startYear, int endYear) {
-        years.clear();
-        for (int i = startYear; i <= endYear; i++) {
-            years.add(String.valueOf(i));
-        }
-    }
-
-    private int findItemIndex(ArrayList<String> items, int item) {
-        //折半查找有序元素的索引
-        int index = Collections.binarySearch(items, item, new Comparator<Object>() {
-            @Override
-            public int compare(Object lhs, Object rhs) {
-                String lhsStr = lhs.toString();
-                String rhsStr = rhs.toString();
-                lhsStr = lhsStr.startsWith("0") ? lhsStr.substring(1) : lhsStr;
-                rhsStr = rhsStr.startsWith("0") ? rhsStr.substring(1) : rhsStr;
-                return Integer.parseInt(lhsStr) - Integer.parseInt(rhsStr);
-            }
-        });
-        if (index < 0) {
-            index = 0;
-        }
-        return index;
-    }
-
-    /**
-     * @param year
-     * @param month
-     * @param day
-     * @param hour
-     * @param minute
-     */
-    public void setSelectedItem(int year, int month, int day, int hour, int minute) {
-        selectedYearIndex = findItemIndex(years, year);
-        selectedMonthIndex = findItemIndex(months, month);
-        selectedDayIndex = findItemIndex(days, day);
-        if (hour < 10) {
-            selectedHour = "0" + String.valueOf(hour);
-        } else {
-            selectedHour = String.valueOf(hour);
-        }
-        if (minute < 10) {
-            selectedMinute = "0" + String.valueOf(minute);
-        } else {
-            selectedMinute = String.valueOf(minute);
-        }
-    }
-
-    /**
-     * @param year
-     * @param month
-     * @param day
-     */
-    public void setSelectedItem(int year, int month, int day) {
-        selectedYearIndex = findItemIndex(years, year);
-        selectedMonthIndex = findItemIndex(months, month);
-        selectedDayIndex = findItemIndex(days, day);
-    }
-
-
-    /**
-     * Sets selected item.
-     *
-     * @param yearOrMonth the year or month
-     * @param monthOrDay  the month or day
-     */
-    public void setSelectedItem(int yearOrMonth, int monthOrDay) {
-        if (mode == MONTH_DAY) {
-            selectedMonthIndex = findItemIndex(months, yearOrMonth);
-            selectedDayIndex = findItemIndex(days, monthOrDay);
-        } else {
-            selectedYearIndex = findItemIndex(years, yearOrMonth);
-            selectedMonthIndex = findItemIndex(months, monthOrDay);
-        }
-    }
-
-
-    /**
-     * The interface On DateTime pick listener.
-     */
-    protected interface OnDateTimePickListener {
-
-    }
-
-    /**
-     * The interface On year month day pick listener.
-     */
-    public interface OnYearMonthDayTimePickListener extends OnDateTimePickListener {
-
-        /**
-         * On date picked.
-         *
-         * @param year  the year
-         * @param month the month
-         * @param day   the day
-         */
-        void onDateTimePicked(String year, String month, String day, String hour, String minute);
-
-    }
-
-    /**
-     * The interface On year month pick listener.
-     */
-    public interface OnYearMonthPickListener extends OnDateTimePickListener {
-
-        /**
-         * On date picked.
-         *
-         * @param year  the year
-         * @param month the month
-         */
-        void onDateTimePicked(String year, String month, String hour, String minute);
-
-    }
-
-    /**
-     * The interface On month day pick listener.
-     */
-    public interface OnMonthDayPickListener extends OnDateTimePickListener {
-
-        /**
-         * On date picked.
-         *
-         * @param month the month
-         * @param day   the day
-         */
-        void onDateTimePicked(String month, String day, String hour, String minute);
-
-    }
-
-    public void setOnDateTimePickListener(OnDateTimePickListener listener) {
-        this.onDateTimePickListener = listener;
-    }
-
-}

+ 0 - 287
WeiChat/src/main/java/com/xzjmyk/pm/activity/view/wheel/DateUtils.java

@@ -1,287 +0,0 @@
-package com.xzjmyk.pm.activity.view.wheel;
-
-import android.annotation.SuppressLint;
-import android.support.annotation.NonNull;
-
-import java.text.SimpleDateFormat;
-import java.util.Arrays;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.List;
-import java.util.Locale;
-
-/**
- * 日期时间工具类
- *
- * @author 李玉江[QQ:1023694760]
- * @since 2015/8/5
- */
-public class DateUtils extends android.text.format.DateUtils {
-
-    /**
-     * The enum Difference mode.
-     */
-    public enum DifferenceMode {
-        Second,
-        Minute,
-        Hour,
-        Day
-    }
-
-    /**
-     * Calculate different second long.
-     *
-     * @param startDate the start date
-     * @param endDate   the end date
-     * @return the long
-     */
-    public static long calculateDifferentSecond(Date startDate, Date endDate) {
-        return calculateDifference(startDate, endDate, DifferenceMode.Second);
-    }
-
-    /**
-     * Calculate different minute long.
-     *
-     * @param startDate the start date
-     * @param endDate   the end date
-     * @return the long
-     */
-    public static long calculateDifferentMinute(Date startDate, Date endDate) {
-        return calculateDifference(startDate, endDate, DifferenceMode.Minute);
-    }
-
-    /**
-     * Calculate different hour long.
-     *
-     * @param startDate the start date
-     * @param endDate   the end date
-     * @return the long
-     */
-    public static long calculateDifferentHour(Date startDate, Date endDate) {
-        return calculateDifference(startDate, endDate, DifferenceMode.Hour);
-    }
-
-    /**
-     * Calculate different day long.
-     *
-     * @param startDate the start date
-     * @param endDate   the end date
-     * @return the long
-     */
-    public static long calculateDifferentDay(Date startDate, Date endDate) {
-        return calculateDifference(startDate, endDate, DifferenceMode.Day);
-    }
-
-    /**
-     * Calculate different second long.
-     *
-     * @param startTimeMillis the start time millis
-     * @param endTimeMillis   the end time millis
-     * @return the long
-     */
-    public static long calculateDifferentSecond(long startTimeMillis, long endTimeMillis) {
-        return calculateDifference(startTimeMillis, endTimeMillis, DifferenceMode.Second);
-    }
-
-    /**
-     * Calculate different minute long.
-     *
-     * @param startTimeMillis the start time millis
-     * @param endTimeMillis   the end time millis
-     * @return the long
-     */
-    public static long calculateDifferentMinute(long startTimeMillis, long endTimeMillis) {
-        return calculateDifference(startTimeMillis, endTimeMillis, DifferenceMode.Minute);
-    }
-
-    /**
-     * Calculate different hour long.
-     *
-     * @param startTimeMillis the start time millis
-     * @param endTimeMillis   the end time millis
-     * @return the long
-     */
-    public static long calculateDifferentHour(long startTimeMillis, long endTimeMillis) {
-        return calculateDifference(startTimeMillis, endTimeMillis, DifferenceMode.Hour);
-    }
-
-    /**
-     * Calculate different day long.
-     *
-     * @param startTimeMillis the start time millis
-     * @param endTimeMillis   the end time millis
-     * @return the long
-     */
-    public static long calculateDifferentDay(long startTimeMillis, long endTimeMillis) {
-        return calculateDifference(startTimeMillis, endTimeMillis, DifferenceMode.Day);
-    }
-
-    /**
-     * Calculate difference long.
-     *
-     * @param startTimeMillis the start time millis
-     * @param endTimeMillis   the end time millis
-     * @param mode            the mode
-     * @return the long
-     */
-    public static long calculateDifference(long startTimeMillis, long endTimeMillis, DifferenceMode mode) {
-        return calculateDifference(new Date(startTimeMillis), new Date(endTimeMillis), mode);
-    }
-
-    /**
-     * Calculate difference long.
-     *
-     * @param startDate the start date
-     * @param endDate   the end date
-     * @param mode      the mode
-     * @return the long
-     */
-    public static long calculateDifference(Date startDate, Date endDate, DifferenceMode mode) {
-        long[] different = calculateDifference(startDate, endDate);
-        if (mode.equals(DifferenceMode.Minute)) {
-            return different[2];
-        } else if (mode.equals(DifferenceMode.Hour)) {
-            return different[1];
-        } else if (mode.equals(DifferenceMode.Day)) {
-            return different[0];
-        } else {
-            return different[3];
-        }
-    }
-
-    /**
-     * Calculate difference long [ ].
-     *
-     * @param startDate the start date
-     * @param endDate   the end date
-     * @return the long [ ]
-     */
-    public static long[] calculateDifference(Date startDate, Date endDate) {
-        return calculateDifference(endDate.getTime() - startDate.getTime());
-    }
-
-    /**
-     * Calculate difference long [ ].
-     *
-     * @param differentMilliSeconds the different milli seconds
-     * @return the long [ ]
-     */
-    public static long[] calculateDifference(long differentMilliSeconds) {
-        long secondsInMilli = 1000;//1s==1000ms
-        long minutesInMilli = secondsInMilli * 60;
-        long hoursInMilli = minutesInMilli * 60;
-        long daysInMilli = hoursInMilli * 24;
-        long elapsedDays = differentMilliSeconds / daysInMilli;
-        differentMilliSeconds = differentMilliSeconds % daysInMilli;
-        long elapsedHours = differentMilliSeconds / hoursInMilli;
-        differentMilliSeconds = differentMilliSeconds % hoursInMilli;
-        long elapsedMinutes = differentMilliSeconds / minutesInMilli;
-        differentMilliSeconds = differentMilliSeconds % minutesInMilli;
-        long elapsedSeconds = differentMilliSeconds / secondsInMilli;
-        LogUtils.debug(String.format(Locale.CHINA, "different: %d ms, %d days, %d hours, %d minutes, %d seconds",
-                differentMilliSeconds, elapsedDays, elapsedHours, elapsedMinutes, elapsedSeconds));
-        return new long[]{elapsedDays, elapsedHours, elapsedMinutes, elapsedSeconds};
-    }
-
-    /**
-     * Calculate days in month int.
-     *
-     * @param month the month
-     * @return the int
-     */
-    public static int calculateDaysInMonth(int month) {
-        return calculateDaysInMonth(0, month);
-    }
-
-    /**
-     * Calculate days in month int.
-     *
-     * @param year  the year
-     * @param month the month
-     * @return the int
-     */
-    public static int calculateDaysInMonth(int year, int month) {
-        // 添加大小月月份并将其转换为list,方便之后的判断
-        String[] bigMonths = {"1", "3", "5", "7", "8", "10", "12"};
-        String[] littleMonths = {"4", "6", "9", "11"};
-        List<String> bigList = Arrays.asList(bigMonths);
-        List<String> littleList = Arrays.asList(littleMonths);
-        // 判断大小月及是否闰年,用来确定"日"的数据
-        if (bigList.contains(String.valueOf(month))) {
-            return 31;
-        } else if (littleList.contains(String.valueOf(month))) {
-            return 30;
-        } else {
-            if (year <= 0) {
-                return 29;
-            }
-            // 是否闰年
-            if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
-                return 29;
-            } else {
-                return 28;
-            }
-        }
-    }
-
-    /**
-     * 月日时分秒,0-9前补0
-     *
-     * @param number the number
-     * @return the string
-     */
-    @NonNull
-    public static String fillZero(int number) {
-        return number < 10 ? "0" + number : "" + number;
-    }
-
-    /**
-     * 功能:判断日期是否和当前date对象在同一天。
-     * 参见:http://www.cnblogs.com/myzhijie/p/3330970.html
-     *
-     * @param date 比较的日期
-     * @return boolean 如果在返回true,否则返回false。
-     * @author 沙琪玛 QQ:862990787 Aug 21, 2013 7:15:53 AM
-     */
-    public static boolean isSameDay(Date date) {
-        if (date == null) {
-            throw new IllegalArgumentException("date is null");
-        }
-        Calendar nowCalendar = Calendar.getInstance();
-        Calendar newCalendar = Calendar.getInstance();
-        newCalendar.setTime(date);
-        return (nowCalendar.get(Calendar.ERA) == newCalendar.get(Calendar.ERA) &&
-                nowCalendar.get(Calendar.YEAR) == newCalendar.get(Calendar.YEAR) &&
-                nowCalendar.get(Calendar.DAY_OF_YEAR) == newCalendar.get(Calendar.DAY_OF_YEAR));
-    }
-
-    /**
-     * 将yyyy-MM-dd HH:mm:ss字符串转换成日期<br/>
-     *
-     * @param dateStr    时间字符串
-     * @param dataFormat 当前时间字符串的格式。
-     * @return Date 日期 ,转换异常时返回null。
-     */
-    public static Date parseDate(String dateStr, String dataFormat) {
-        try {
-            @SuppressLint("SimpleDateFormat")
-            SimpleDateFormat dateFormat = new SimpleDateFormat(dataFormat);
-            Date date = dateFormat.parse(dateStr);
-            return new Date(date.getTime());
-        } catch (Exception e) {
-            LogUtils.warn(e);
-            return null;
-        }
-    }
-
-    /**
-     * 将yyyy-MM-dd HH:mm:ss字符串转换成日期<br/>
-     *
-     * @param dateStr yyyy-MM-dd HH:mm:ss字符串
-     * @return Date 日期 ,转换异常时返回null。
-     */
-    public static Date parseDate(String dateStr) {
-        return parseDate(dateStr, "yyyy-MM-dd HH:mm:ss");
-    }
-
-}

+ 0 - 173
WeiChat/src/main/java/com/xzjmyk/pm/activity/view/wheel/Popup.java

@@ -1,173 +0,0 @@
-package com.xzjmyk.pm.activity.view.wheel;
-
-import android.content.Context;
-import android.content.DialogInterface;
-import android.graphics.Color;
-import android.graphics.drawable.ColorDrawable;
-import android.support.annotation.CallSuper;
-import android.support.annotation.StyleRes;
-import android.view.Gravity;
-import android.view.View;
-import android.view.ViewGroup;
-import android.view.Window;
-import android.widget.FrameLayout;
-
-import com.common.LogUtil;
-import com.xzjmyk.pm.activity.R;
-
-
-/**
- * 弹窗
- *
- * @author 李玉江[QQ :1023694760]
- * @see android.widget.PopupWindow
- * @since 2015-10-19
- */
-public class Popup {
-    private android.app.Dialog dialog;
-    private FrameLayout contentLayout;
-
-    /**
-     * Instantiates a new Popup.
-     *
-     * @param context the context
-     */
-    public Popup(Context context) {
-        init(context);
-    }
-
-    private void init(Context context) {
-        contentLayout = new FrameLayout(context);
-        contentLayout.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
-        contentLayout.setFocusable(true);
-        contentLayout.setFocusableInTouchMode(true);
-        dialog = new android.app.Dialog(context);
-        dialog.setCanceledOnTouchOutside(true);//触摸屏幕取消窗体
-        dialog.setCancelable(true);//按返回键取消窗体
-        Window window = dialog.getWindow();
-        window.setGravity(Gravity.BOTTOM);//位于屏幕底部
-        window.setWindowAnimations(R.style.Animation_Popup);
-        window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
-        //android.util.AndroidRuntimeException: requestFeature() must be called before adding content
-        window.requestFeature(Window.FEATURE_NO_TITLE);
-        window.setContentView(contentLayout);
-    }
-
-    /**
-     * Gets context.
-     *
-     * @return the context
-     */
-    public Context getContext() {
-        return contentLayout.getContext();
-    }
-
-    /**
-     * Sets animation.
-     *
-     * @param animRes the anim res
-     */
-    public void setAnimationStyle(@StyleRes int animRes) {
-        Window window = dialog.getWindow();
-        window.setWindowAnimations(animRes);
-    }
-
-    /**
-     * Is showing boolean.
-     *
-     * @return the boolean
-     */
-    public boolean isShowing() {
-        return dialog.isShowing();
-    }
-
-    /**
-     * Show.
-     */
-    @CallSuper
-    public void show() {
-        dialog.show();
-    }
-
-    /**
-     * Dismiss.
-     */
-    @CallSuper
-    public void dismiss() {
-        dialog.dismiss();
-    }
-
-    /**
-     * Sets content view.
-     *
-     * @param view the view
-     */
-    public void setContentView(View view) {
-        contentLayout.removeAllViews();
-        contentLayout.addView(view);
-    }
-
-    /**
-     * Gets content view.
-     *
-     * @return the content view
-     */
-    public View getContentView() {
-        return contentLayout.getChildAt(0);
-    }
-
-    /**
-     * Sets size.
-     *
-     * @param width  the width
-     * @param height the height
-     */
-    public void setSize(int width, int height) {
-        LogUtil.i(String.format("will set popup width/height to: %s/%s", width, height));
-        ViewGroup.LayoutParams params = contentLayout.getLayoutParams();
-        if (params == null) {
-            params = new ViewGroup.LayoutParams(width, height);
-        } else {
-            params.width = width;
-            params.height = height;
-        }
-        contentLayout.setLayoutParams(params);
-    }
-
-    /**
-     * Sets on dismiss listener.
-     *
-     * @param onDismissListener the on dismiss listener
-     */
-    public void setOnDismissListener(DialogInterface.OnDismissListener onDismissListener) {
-        dialog.setOnDismissListener(onDismissListener);
-    }
-
-    /**
-     * Sets on key listener.
-     *
-     * @param onKeyListener the on key listener
-     */
-    public void setOnKeyListener(DialogInterface.OnKeyListener onKeyListener) {
-        dialog.setOnKeyListener(onKeyListener);
-    }
-
-    /**
-     * Gets window.
-     *
-     * @return the window
-     */
-    public Window getWindow() {
-        return dialog.getWindow();
-    }
-
-    /**
-     * Gets root view.
-     *
-     * @return the root view
-     */
-    public ViewGroup getRootView() {
-        return contentLayout;
-    }
-
-}

+ 0 - 106
WeiChat/src/main/java/com/xzjmyk/pm/activity/view/wheel/WheelPicker.java

@@ -1,106 +0,0 @@
-package com.xzjmyk.pm.activity.view.wheel;
-
-import android.app.Activity;
-import android.support.annotation.ColorInt;
-import android.support.annotation.IntRange;
-import android.view.View;
-
-
-/**
- * 滑轮选择器
- *
- * @author 李玉江[QQ :1032694760]
- * @version 2015 /12/22
- */
-public abstract class WheelPicker extends ConfirmPopup<View> {
-    /**
-     * The Text size.
-     */
-    protected int textSize = WheelView.TEXT_SIZE;
-    /**
-     * The Text color normal.
-     */
-    protected int textColorNormal = WheelView.TEXT_COLOR_NORMAL;
-    /**
-     * The Text color focus.
-     */
-    protected int textColorFocus = WheelView.TEXT_COLOR_FOCUS;
-    /**
-     * The Line color.
-     */
-    protected int lineColor = WheelView.LINE_COLOR;
-    /**
-     * The Line visible.
-     */
-    protected boolean lineVisible = true;
-    /**
-     * The Offset.
-     */
-    protected int offset = WheelView.OFF_SET;
-
-    /**
-     * Instantiates a new Wheel picker.
-     *
-     * @param activity the activity
-     */
-    public WheelPicker(Activity activity) {
-        super(activity);
-    }
-
-    /**
-     * Sets text size.
-     *
-     * @param textSize the text size
-     */
-    public void setTextSize(int textSize) {
-        this.textSize = textSize;
-    }
-
-    /**
-     * Sets text color.
-     *
-     * @param textColorFocus  the text color focus
-     * @param textColorNormal the text color normal
-     */
-    public void setTextColor(@ColorInt int textColorFocus, @ColorInt int textColorNormal) {
-        this.textColorFocus = textColorFocus;
-        this.textColorNormal = textColorNormal;
-    }
-
-    /**
-     * Sets text color.
-     *
-     * @param textColor the text color
-     */
-    public void setTextColor(@ColorInt int textColor) {
-        this.textColorFocus = textColor;
-    }
-
-    /**
-     * Sets line visible.
-     *
-     * @param lineVisible the line visible
-     */
-    public void setLineVisible(boolean lineVisible) {
-        this.lineVisible = lineVisible;
-    }
-
-    /**
-     * Sets line color.
-     *
-     * @param lineColor the line color
-     */
-    public void setLineColor(@ColorInt int lineColor) {
-        this.lineColor = lineColor;
-    }
-
-    /**
-     * Sets offset.
-     *
-     * @param offset the offset
-     */
-    public void setOffset(@IntRange(from = 1, to = 4) int offset) {
-        this.offset = offset;
-    }
-
-}

+ 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 - 0
app_core/common/src/main/java/com/core/utils/CommonUtil.java

@@ -15,6 +15,7 @@ import android.os.Handler;
 import android.os.Looper;
 import android.provider.MediaStore;
 import android.text.TextUtils;
+import android.util.Log;
 import android.view.inputmethod.InputMethodManager;
 import android.widget.EditText;
 import android.widget.Toast;
@@ -26,6 +27,9 @@ 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.core.app.R;
 import com.umeng.socialize.UMShareListener;
 import com.umeng.socialize.bean.SHARE_MEDIA;
 
@@ -520,6 +524,33 @@ public class CommonUtil {
     }
 
 
+    /**
+     * 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;

+ 0 - 111
app_core/common/src/main/java/com/core/utils/ScreenUtils.java

@@ -1,111 +0,0 @@
-package com.core.utils;
-
-import android.app.Activity;
-import android.content.Context;
-import android.util.DisplayMetrics;
-import android.view.Window;
-import android.view.WindowManager;
-
-/**
- * 获取屏幕宽高等信息、全屏切换、保持屏幕常亮、截屏等
- *
- * @author liyujiang[QQ:1032694760]
- * @since 2015/11/26
- */
-public final class ScreenUtils {
-    private static boolean isFullScreen = false;
-
-    /**
-     * Display metrics display metrics.
-     *
-     * @param context the context
-     * @return the display metrics
-     */
-    public static DisplayMetrics displayMetrics(Context context) {
-        DisplayMetrics dm = new DisplayMetrics();
-        WindowManager windowManager = (WindowManager) context
-                .getSystemService(Context.WINDOW_SERVICE);
-        windowManager.getDefaultDisplay().getMetrics(dm);
-//        LogUtils.verbose("screen width=" + dm.widthPixels + "px, screen height=" + dm.heightPixels
-//                + "px, densityDpi=" + dm.densityDpi + ", density=" + dm.density);
-        return dm;
-    }
-
-    /**
-     * Width pixels int.
-     *
-     * @param context the context
-     * @return the int
-     */
-    public static int widthPixels(Context context) {
-        return displayMetrics(context).widthPixels;
-    }
-
-    /**
-     * Height pixels int.
-     *
-     * @param context the context
-     * @return the int
-     */
-    public static int heightPixels(Context context) {
-        return displayMetrics(context).heightPixels;
-    }
-
-    /**
-     * Density float.
-     *
-     * @param context the context
-     * @return the float
-     */
-    public static float density(Context context) {
-        return displayMetrics(context).density;
-    }
-
-    /**
-     * Density dpi int.
-     *
-     * @param context the context
-     * @return the int
-     */
-    public static int densityDpi(Context context) {
-        return displayMetrics(context).densityDpi;
-    }
-
-    /**
-     * Is full screen boolean.
-     *
-     * @return the boolean
-     */
-    public static boolean isFullScreen() {
-        return isFullScreen;
-    }
-
-    /**
-     * Toggle full displayMetrics.
-     *
-     * @param activity the activity
-     */
-    public static void toggleFullScreen(Activity activity) {
-        Window window = activity.getWindow();
-        int flagFullscreen = WindowManager.LayoutParams.FLAG_FULLSCREEN;
-        if (isFullScreen) {
-            window.clearFlags(flagFullscreen);
-            isFullScreen = false;
-        } else {
-            window.setFlags(flagFullscreen, flagFullscreen);
-            isFullScreen = true;
-        }
-    }
-
-    /**
-     * 保持屏幕常亮
-     *
-     * @param activity the activity
-     */
-    public static void keepBright(Activity activity) {
-        //需在setContentView前调用
-        int keepScreenOn = WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;
-        activity.getWindow().setFlags(keepScreenOn, keepScreenOn);
-    }
-
-}

+ 0 - 213
app_core/common/src/main/java/com/core/utils/timeutils/TimePicker.java

@@ -1,213 +0,0 @@
-package com.core.utils.timeutils;
-
-import android.app.Activity;
-import android.support.annotation.IntDef;
-import android.support.annotation.NonNull;
-import android.text.TextUtils;
-import android.view.Gravity;
-import android.view.View;
-import android.widget.LinearLayout;
-import android.widget.TextView;
-
-import com.core.utils.timeutils.wheel.DateUtils;
-import com.core.utils.timeutils.wheel.WheelPicker;
-import com.core.widget.view.WheelView;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.util.ArrayList;
-import java.util.Calendar;
-
-/**
- * 时间选择器
- *
- * @author 李玉江[QQ :1032694760]
- * @since 2015/12/14
- */
-public class TimePicker extends WheelPicker {
-    /**
-     * 24小时
-     */
-    public static final int HOUR_OF_DAY = 0;
-    /**
-     * 12小时
-     */
-    public static final int HOUR = 1;
-    private OnTimePickListener onTimePickListener;
-    private int mode;
-    private String hourLabel = "时", minuteLabel = "分";
-    private String selectedHour = "", selectedMinute = "";
-
-    /**
-     * 安卓开发应避免使用枚举类(enum),因为相比于静态常量enum会花费两倍以上的内存。
-     * http://developer.android.com/training/articles/memory.html#Overhead
-     */
-    @IntDef(flag = false, value = {HOUR_OF_DAY, HOUR})
-    @Retention(RetentionPolicy.SOURCE)
-    public @interface Mode {
-    }
-
-    /**
-     * Instantiates a new Time picker.
-     *
-     * @param activity the activity
-     */
-    public TimePicker(Activity activity) {
-        this(activity, HOUR_OF_DAY);
-    }
-
-    /**
-     * Instantiates a new Time picker.
-     *
-     * @param activity the activity
-     * @param mode     the mode
-     * @see #HOUR_OF_DAY
-     * @see #HOUR
-     */
-    public TimePicker(Activity activity, @Mode int mode) {
-        super(activity);
-        this.mode = mode;
-        selectedHour = DateUtils.fillZero(Calendar.getInstance().get(Calendar.HOUR_OF_DAY));
-        selectedMinute = DateUtils.fillZero(Calendar.getInstance().get(Calendar.MINUTE));
-    }
-
-    /**
-     * Sets label.
-     *
-     * @param hourLabel   the hour label
-     * @param minuteLabel the minute label
-     */
-    public void setLabel(String hourLabel, String minuteLabel) {
-        this.hourLabel = hourLabel;
-        this.minuteLabel = minuteLabel;
-    }
-
-    /**
-     * Sets selected item.
-     *
-     * @param hour   the hour
-     * @param minute the minute
-     */
-    public void setSelectedItem(int hour, int minute) {
-        selectedHour = (hour < 10 ? "0" : "") + hour;
-        selectedMinute = (minute < 10 ? "0" : "") + minute;
-    }
-
-    /**
-     * Sets on time pick listener.
-     *
-     * @param listener the listener
-     */
-    public void setOnTimePickListener(OnTimePickListener listener) {
-        this.onTimePickListener = listener;
-    }
-
-    @Override
-    @NonNull
-    protected View makeCenterView() {
-        LinearLayout layout = new LinearLayout(activity);
-        layout.setOrientation(LinearLayout.HORIZONTAL);
-        layout.setGravity(Gravity.CENTER);
-        WheelView hourView = new WheelView(activity);
-        hourView.setLayoutParams(new LinearLayout.LayoutParams(WRAP_CONTENT, WRAP_CONTENT));
-        hourView.setTextSize(textSize);
-        hourView.setTextColor(textColorNormal, textColorFocus);
-        hourView.setLineVisible(lineVisible);
-        hourView.setLineColor(lineColor);
-        layout.addView(hourView);
-        TextView hourTextView = new TextView(activity);
-        hourTextView.setLayoutParams(new LinearLayout.LayoutParams(WRAP_CONTENT, WRAP_CONTENT));
-        hourTextView.setTextSize(textSize);
-        hourTextView.setTextColor(textColorFocus);
-        if (!TextUtils.isEmpty(hourLabel)) {
-            hourTextView.setText(hourLabel);
-        }
-        layout.addView(hourTextView);
-        WheelView minuteView = new WheelView(activity);
-        minuteView.setLayoutParams(new LinearLayout.LayoutParams(WRAP_CONTENT, WRAP_CONTENT));
-        minuteView.setTextSize(textSize);
-        minuteView.setTextColor(textColorNormal, textColorFocus);
-        minuteView.setLineVisible(lineVisible);
-        minuteView.setLineColor(lineColor);
-        minuteView.setOffset(offset);
-        layout.addView(minuteView);
-        TextView minuteTextView = new TextView(activity);
-        minuteTextView.setLayoutParams(new LinearLayout.LayoutParams(WRAP_CONTENT, WRAP_CONTENT));
-        minuteTextView.setTextSize(textSize);
-        minuteTextView.setTextColor(textColorFocus);
-        if (!TextUtils.isEmpty(minuteLabel)) {
-            minuteTextView.setText(minuteLabel);
-        }
-        layout.addView(minuteTextView);
-        ArrayList<String> hours = new ArrayList<String>();
-        if (mode == HOUR) {
-            for (int i = 1; i <= 12; i++) {
-                hours.add(DateUtils.fillZero(i));
-            }
-        } else {
-            for (int i = 0; i < 24; i++) {
-                hours.add(DateUtils.fillZero(i));
-            }
-        }
-        hourView.setItems(hours, selectedHour);
-        ArrayList<String> minutes = new ArrayList<String>();
-        for (int i = 0; i < 60; i++) {
-            minutes.add(DateUtils.fillZero(i));
-        }
-        minuteView.setItems(minutes, selectedMinute);
-        hourView.setOnWheelViewListener(new WheelView.OnWheelViewListener() {
-            @Override
-            public void onSelected(boolean isUserScroll, int selectedIndex, String item) {
-                selectedHour = item;
-            }
-        });
-        minuteView.setOnWheelViewListener(new WheelView.OnWheelViewListener() {
-            @Override
-            public void onSelected(boolean isUserScroll, int selectedIndex, String item) {
-                selectedMinute = item;
-            }
-        });
-        return layout;
-    }
-
-    @Override
-    public void onSubmit() {
-        if (onTimePickListener != null) {
-            onTimePickListener.onTimePicked(selectedHour, selectedMinute);
-        }
-    }
-
-    /**
-     * Gets selected hour.
-     *
-     * @return the selected hour
-     */
-    public String getSelectedHour() {
-        return selectedHour;
-    }
-
-    /**
-     * Gets selected minute.
-     *
-     * @return the selected minute
-     */
-    public String getSelectedMinute() {
-        return selectedMinute;
-    }
-
-    /**
-     * The interface On time pick listener.
-     */
-    public interface OnTimePickListener {
-
-        /**
-         * On time picked.
-         *
-         * @param hour   the hour
-         * @param minute the minute
-         */
-        void onTimePicked(String hour, String minute);
-
-    }
-
-}

+ 0 - 1
app_core/common/src/main/java/com/core/utils/timeutils/wheel/BottomPopup.java

@@ -11,7 +11,6 @@ import android.view.ViewGroup;
 import android.view.Window;
 
 import com.common.LogUtil;
-import com.core.utils.ScreenUtils;
 
 
 /**

+ 1 - 1
WeiChat/src/main/java/com/xzjmyk/pm/activity/view/wheel/DatePicker.java → app_core/common/src/main/java/com/core/utils/timeutils/wheel/DatePicker.java

@@ -1,4 +1,4 @@
-package com.xzjmyk.pm.activity.view.wheel;
+package com.core.utils.timeutils.wheel;
 
 import android.app.Activity;
 import android.support.annotation.IntDef;

+ 0 - 1
app_core/common/src/main/java/com/core/utils/timeutils/wheel/DateTimePicker.java

@@ -9,7 +9,6 @@ import android.view.View;
 import android.widget.LinearLayout;
 import android.widget.TextView;
 
-import com.core.widget.view.WheelView;
 
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;

+ 1 - 3
WeiChat/src/main/java/com/xzjmyk/pm/activity/view/wheel/LogUtils.java → app_core/common/src/main/java/com/core/utils/timeutils/wheel/LogUtils.java

@@ -1,12 +1,10 @@
-package com.xzjmyk.pm.activity.view.wheel;
+package com.core.utils.timeutils.wheel;
 
 import android.os.Debug;
 import android.os.Environment;
 import android.text.TextUtils;
 import android.util.Log;
 
-import com.core.app.AppConfig;
-
 import java.io.File;
 import java.io.PrintWriter;
 import java.io.StringWriter;

+ 1 - 1
WeiChat/src/main/java/com/xzjmyk/pm/activity/view/wheel/OASigninPicker.java → app_core/common/src/main/java/com/core/utils/timeutils/wheel/OASigninPicker.java

@@ -1,4 +1,4 @@
-package com.xzjmyk.pm.activity.view.wheel;
+package com.core.utils.timeutils.wheel;
 
 import android.app.Activity;
 import android.support.annotation.IntDef;

+ 1 - 1
WeiChat/src/main/java/com/xzjmyk/pm/activity/view/wheel/OptionPicker.java → app_core/common/src/main/java/com/core/utils/timeutils/wheel/OptionPicker.java

@@ -1,4 +1,4 @@
-package com.xzjmyk.pm.activity.view.wheel;
+package com.core.utils.timeutils.wheel;
 
 import android.app.Activity;
 import android.support.annotation.NonNull;

+ 1 - 1
WeiChat/src/main/java/com/xzjmyk/pm/activity/view/wheel/ScreenUtils.java → app_core/common/src/main/java/com/core/utils/timeutils/wheel/ScreenUtils.java

@@ -1,4 +1,4 @@
-package com.xzjmyk.pm.activity.view.wheel;
+package com.core.utils.timeutils.wheel;
 
 import android.app.Activity;
 import android.content.Context;

+ 1 - 1
WeiChat/src/main/java/com/xzjmyk/pm/activity/view/wheel/TimePicker.java → app_core/common/src/main/java/com/core/utils/timeutils/wheel/TimePicker.java

@@ -1,4 +1,4 @@
-package com.xzjmyk.pm.activity.view.wheel;
+package com.core.utils.timeutils.wheel;
 
 import android.app.Activity;
 import android.support.annotation.IntDef;

+ 0 - 1
app_core/common/src/main/java/com/core/utils/timeutils/wheel/WheelPicker.java

@@ -5,7 +5,6 @@ import android.support.annotation.ColorInt;
 import android.support.annotation.IntRange;
 import android.view.View;
 
-import com.core.widget.view.WheelView;
 
 
 /**

+ 1 - 1
WeiChat/src/main/java/com/xzjmyk/pm/activity/view/wheel/WheelView.java → app_core/common/src/main/java/com/core/utils/timeutils/wheel/WheelView.java

@@ -1,4 +1,4 @@
-package com.xzjmyk.pm.activity.view.wheel;
+package com.core.utils.timeutils.wheel;
 
 import android.app.Activity;
 import android.content.Context;

+ 0 - 163
app_core/common/src/main/java/com/core/widget/view/ClearEditText.java

@@ -1,163 +0,0 @@
-package com.core.widget.view;
-
-import android.content.Context;
-import android.graphics.drawable.Drawable;
-import android.support.v4.view.MotionEventCompat;
-import android.text.Editable;
-import android.text.TextUtils;
-import android.text.TextWatcher;
-import android.util.AttributeSet;
-import android.view.MotionEvent;
-import android.view.View;
-import android.view.View.OnFocusChangeListener;
-import android.view.animation.Animation;
-import android.view.animation.CycleInterpolator;
-import android.view.animation.TranslateAnimation;
-import android.widget.EditText;
-
-import com.core.app.R;
-
-
-public class ClearEditText extends EditText implements OnFocusChangeListener, TextWatcher {
-	/**
-	 * 删除按钮的引用
-	 */
-	private Drawable mClearDrawable;
-	private boolean mFocusClear = false;
-
-	public ClearEditText(Context context) {
-		this(context, null);
-	}
-
-	public ClearEditText(Context context, AttributeSet attrs) {
-		this(context, attrs, android.R.attr.editTextStyle);
-	}
-
-	public ClearEditText(Context context, AttributeSet attrs, int defStyle) {
-		super(context, attrs, defStyle);
-		init();
-	}
-
-	private void init() {
-		// 获取EditText的DrawableRight,假如没有设置我们就使用默认的图片
-		mClearDrawable = getCompoundDrawables()[2];
-		if (mClearDrawable == null) {
-			mClearDrawable = getResources().getDrawable(R.drawable.search_clear);
-		}
-		mClearDrawable.setBounds(0, 0, mClearDrawable.getIntrinsicWidth(), mClearDrawable.getIntrinsicHeight());
-		setClearIconVisible(false);
-		setOnFocusChangeListener(this);
-		addTextChangedListener(this);
-	}
-
-	/**
-	 * 因为我们不能直接给EditText设置点击事件,所以我们用记住我们按下的位置来模拟点击事件 当我们按下的位置 在 EditText的宽度 - 图标到控件右边的间距 - 图标的宽度 和 EditText的宽度 - 图标到控件右边的间距之间我们就算点击了图标,竖直方向没有考虑
-	 */
-	@Override
-	public boolean onTouchEvent(MotionEvent event) {
-		int action = MotionEventCompat.getActionMasked(event);
-		if (action == MotionEvent.ACTION_DOWN) {
-			if (!TextUtils.isEmpty(getError())) {
-				setError(null, null);
-				setClearIconVisible(getText().length() > 0);
-				return false;
-			}
-		}
-
-		if (getCompoundDrawables()[2] != null) {
-			if (event.getAction() == MotionEvent.ACTION_UP) {
-				boolean touchable = event.getX() > (getWidth() - getPaddingRight() - mClearDrawable.getIntrinsicWidth())
-						&& (event.getX() < ((getWidth() - getPaddingRight())));
-				if (touchable) {
-					this.setText("");
-				}
-			}
-		}
-
-		return super.onTouchEvent(event);
-	}
-
-	/**
-	 * 当ClearEditText焦点发生变化的时候,判断里面字符串长度设置清除图标的显示与隐藏
-	 */
-	@Override
-	public void onFocusChange(View v, boolean hasFocus) {
-		if (mFocusClear) {
-			if (hasFocus) {
-				setClearIconVisible(getText().length() > 0);
-			} else {
-				setClearIconVisible(false);
-			}
-		}
-	}
-
-	/**
-	 * 当焦点改变的时候,显示或者隐藏Clear icon
-	 */
-	public void setFocusClear(boolean focusClear) {
-		mFocusClear = focusClear;
-	}
-
-	/**
-	 * 设置清除图标的显示与隐藏,调用setCompoundDrawables为EditText绘制上去
-	 * 
-	 * @param visible
-	 */
-	protected void setClearIconVisible(boolean visible) {
-		if (visible) {
-			if (!TextUtils.isEmpty(getError())) {
-				setError(null);
-			}
-		}
-		if (visible) {
-			if (mFocusClear && !hasFocus()) {
-				visible = false;
-			}
-		}
-		Drawable right = visible ? mClearDrawable : null;
-		if (getCompoundDrawables()[2] != right) {
-			setCompoundDrawables(getCompoundDrawables()[0], getCompoundDrawables()[1], null, getCompoundDrawables()[3]);
-		}
-		setCompoundDrawables(getCompoundDrawables()[0], getCompoundDrawables()[1], right, getCompoundDrawables()[3]);
-	}
-
-	/**
-	 * 当输入框里面内容发生变化的时候回调的方法
-	 */
-	@Override
-	public void onTextChanged(CharSequence s, int start, int count, int after) {
-		setClearIconVisible(s.length() > 0);
-	}
-
-	@Override
-	public void beforeTextChanged(CharSequence s, int start, int count, int after) {
-
-	}
-
-	@Override
-	public void afterTextChanged(Editable s) {
-
-	}
-
-	/**
-	 * 设置晃动动画
-	 */
-	public void setShakeAnimation() {
-		this.setAnimation(shakeAnimation(5));
-	}
-
-	/**
-	 * 晃动动画
-	 * 
-	 * @param counts
-	 *            1秒钟晃动多少下
-	 * @return
-	 */
-	public static Animation shakeAnimation(int counts) {
-		Animation translateAnimation = new TranslateAnimation(0, 10, 0, 0);
-		translateAnimation.setInterpolator(new CycleInterpolator(counts));
-		translateAnimation.setDuration(1000);
-		return translateAnimation;
-	}
-
-}

+ 0 - 616
app_core/common/src/main/java/com/core/widget/view/WheelView.java

@@ -1,616 +0,0 @@
-package com.core.widget.view;
-
-import android.app.Activity;
-import android.content.Context;
-import android.graphics.Canvas;
-import android.graphics.ColorFilter;
-import android.graphics.Paint;
-import android.graphics.drawable.Drawable;
-import android.os.Build;
-import android.support.annotation.ColorInt;
-import android.support.annotation.IntRange;
-import android.text.TextUtils;
-import android.util.AttributeSet;
-import android.view.Gravity;
-import android.view.MotionEvent;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.LinearLayout;
-import android.widget.ScrollView;
-import android.widget.TextView;
-
-import java.util.ArrayList;
-import java.util.List;
-
-
-/**
- * 基于原版(https://github.com/wangjiegulu/WheelView)作了一下修改:
- * 去掉回弹阴影
- * 修正以便支持联动效果
- * 可设置颜色
- * 设置文字大小
- * 分隔线是否可见
- * 初始设置选中选项
- *
- * @author 李玉江[QQ:1023694760]
- * @since 2015/12/17
- */
-public class WheelView extends ScrollView {
-    /**
-     * The constant TEXT_SIZE.
-     */
-    public static final int TEXT_SIZE = 20;
-    /**
-     * The constant TEXT_COLOR_FOCUS.
-     */
-    public static final int TEXT_COLOR_FOCUS = 0XFF0288CE;
-    /**
-     * The constant TEXT_COLOR_NORMAL.
-     */
-    public static final int TEXT_COLOR_NORMAL = 0XFFBBBBBB;
-    /**
-     * The constant LINE_COLOR.
-     */
-    public static final int LINE_COLOR = 0XFF83CDE6;
-    /**
-     * The constant OFF_SET.
-     */
-    public static final int OFF_SET = 1;
-    private static final int DELAY = 50;
-
-    private Context context;
-    private LinearLayout views;
-    private List<String> items = new ArrayList<String>();
-    private int offset = OFF_SET; // 偏移量(需要在最前面和最后面补全)
-
-    private int displayItemCount; // 每页显示的数量
-
-    private int selectedIndex = OFF_SET;
-    private int initialY;
-
-    private Runnable scrollerTask = new ScrollerTask();
-    private int itemHeight = 0;
-    private int[] selectedAreaBorder;//获取选中区域的边界
-    private OnWheelViewListener onWheelViewListener;
-
-    private Paint paint;
-    private int viewWidth;
-    private int textSize = TEXT_SIZE;
-    private int textColorNormal = TEXT_COLOR_NORMAL;
-    private int textColorFocus = TEXT_COLOR_FOCUS;
-    private int lineColor = LINE_COLOR;
-    private boolean lineVisible = true;
-    private boolean isUserScroll = false;//是否用户手动滚动
-    private float previousY = 0;//记录按下时的Y坐标
-
-    /**
-     * Instantiates a new Wheel view.
-     *
-     * @param context the context
-     */
-    public WheelView(Context context) {
-        super(context);
-        init(context);
-    }
-
-    /**
-     * Instantiates a new Wheel view.
-     *
-     * @param context the context
-     * @param attrs   the attrs
-     */
-    public WheelView(Context context, AttributeSet attrs) {
-        super(context, attrs);
-        init(context);
-    }
-
-    /**
-     * Instantiates a new Wheel view.
-     *
-     * @param context  the context
-     * @param attrs    the attrs
-     * @param defStyle the def style
-     */
-    public WheelView(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
-        init(context);
-    }
-
-    private void init(Context context) {
-        this.context = context;
-
-        // 2015/12/15 去掉ScrollView的阴影
-        setFadingEdgeLength(0);
-        if (Build.VERSION.SDK_INT >= 9) {
-            setOverScrollMode(OVER_SCROLL_NEVER);
-        }
-
-        setVerticalScrollBarEnabled(false);
-
-        views = new LinearLayout(context);
-        views.setOrientation(LinearLayout.VERTICAL);
-        addView(views);
-    }
-
-    private void startScrollerTask() {
-        initialY = getScrollY();
-        postDelayed(scrollerTask, DELAY);
-    }
-
-    private void initData() {
-        displayItemCount = offset * 2 + 1;
-
-        // 2015/12/15 添加此句才可以支持联动效果
-        views.removeAllViews();
-
-        for (String item : items) {
-            views.addView(createView(item));
-        }
-
-        // 2016/1/15 焦点文字颜色高亮位置,逆推“int position = y / itemHeight + offset”
-        refreshItemView(itemHeight * (selectedIndex - offset));
-    }
-
-    private TextView createView(String item) {
-        TextView tv = new TextView(context);
-        tv.setLayoutParams(new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
-        tv.setSingleLine(true);
-        tv.setEllipsize(TextUtils.TruncateAt.END);
-        tv.setText(item);
-        tv.setTextSize(textSize);
-        tv.setGravity(Gravity.CENTER);
-        int padding = dip2px(15);
-        tv.setPadding(padding, padding, padding, padding);
-        if (0 == itemHeight) {
-            itemHeight = getViewMeasuredHeight(tv);
-//            LogUtils.debug(this, "itemHeight: " + itemHeight);
-            views.setLayoutParams(new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, itemHeight * displayItemCount));
-            LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) this.getLayoutParams();
-            setLayoutParams(new LinearLayout.LayoutParams(lp.width, itemHeight * displayItemCount));
-        }
-        return tv;
-    }
-
-
-    private void refreshItemView(int y) {
-        int position = y / itemHeight + offset;
-        int remainder = y % itemHeight;
-        int divided = y / itemHeight;
-
-        if (remainder == 0) {
-            position = divided + offset;
-        } else {
-            if (remainder > itemHeight / 2) {
-                position = divided + offset + 1;
-            }
-        }
-
-        int childSize = views.getChildCount();
-        for (int i = 0; i < childSize; i++) {
-            TextView itemView = (TextView) views.getChildAt(i);
-            if (null == itemView) {
-                return;
-            }
-            // 2015/12/15 可设置颜色
-            if (position == i) {
-                itemView.setTextColor(textColorFocus);
-            } else {
-                itemView.setTextColor(textColorNormal);
-            }
-        }
-    }
-
-    private int[] obtainSelectedAreaBorder() {
-        if (null == selectedAreaBorder) {
-            selectedAreaBorder = new int[2];
-            selectedAreaBorder[0] = itemHeight * offset;
-            selectedAreaBorder[1] = itemHeight * (offset + 1);
-        }
-        return selectedAreaBorder;
-    }
-
-    /**
-     * 选中回调
-     */
-    private void onSelectedCallBack() {
-        if (null != onWheelViewListener) {
-            // 2015/12/25 真实的index应该忽略偏移量
-            onWheelViewListener.onSelected(isUserScroll, selectedIndex - offset, items.get(selectedIndex));
-        }
-    }
-
-    private int dip2px(float dpValue) {
-        final float scale = context.getResources().getDisplayMetrics().density;
-        return (int) (dpValue * scale + 0.5f);
-    }
-
-    private int getViewMeasuredHeight(View view) {
-        int width = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED);
-        int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
-        view.measure(width, expandSpec);
-        return view.getMeasuredHeight();
-    }
-
-    @Override
-    public void setBackground(Drawable background) {
-        setBackgroundDrawable(background);
-    }
-
-    @SuppressWarnings("deprecation")
-    @Override
-    public void setBackgroundDrawable(Drawable background) {
-        if (viewWidth == 0) {
-            viewWidth = ((Activity) context).getWindowManager().getDefaultDisplay().getWidth();
-//            LogUtils.debug(this, "viewWidth: " + viewWidth);
-        }
-
-        // 2015/12/22 可设置分隔线是否可见
-        if (!lineVisible) {
-            return;
-        }
-
-        if (null == paint) {
-            paint = new Paint();
-            paint.setColor(lineColor);
-            paint.setStrokeWidth(dip2px(1f));
-        }
-
-        background = new Drawable() {
-            @Override
-            public void draw(Canvas canvas) {
-                int[] areaBorder = obtainSelectedAreaBorder();
-                canvas.drawLine(viewWidth / 6, areaBorder[0], viewWidth * 5 / 6, areaBorder[0], paint);
-                canvas.drawLine(viewWidth / 6, areaBorder[1], viewWidth * 5 / 6, areaBorder[1], paint);
-            }
-
-            @Override
-            public void setAlpha(int alpha) {
-
-            }
-
-            @Override
-            public void setColorFilter(ColorFilter cf) {
-
-            }
-
-            @Override
-            public int getOpacity() {
-                return 0;
-            }
-        };
-        super.setBackgroundDrawable(background);
-    }
-
-    @Override
-    protected void onScrollChanged(int l, int t, int oldl, int oldt) {
-        super.onScrollChanged(l, t, oldl, oldt);
-        refreshItemView(t);
-    }
-
-    @Override
-    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
-        super.onSizeChanged(w, h, oldw, oldh);
-//        LogUtils.debug(this, "w: " + w + ", h: " + h + ", oldw: " + oldw + ", oldh: " + oldh);
-        viewWidth = w;
-        setBackgroundDrawable(null);
-    }
-
-    @Override
-    public void fling(int velocityY) {
-        super.fling(velocityY / 3);
-    }
-
-    @Override
-    public boolean onTouchEvent(MotionEvent ev) {
-        switch (ev.getAction()) {
-            case MotionEvent.ACTION_DOWN:
-                previousY = ev.getY();
-                break;
-            case MotionEvent.ACTION_UP:
-//                LogUtils.debug(this, String.format("items=%s, offset=%s", items.size(), offset));
-//                LogUtils.debug(this, "selectedIndex=" + selectedIndex);
-                float delta = ev.getY() - previousY;
-//                LogUtils.debug(this, "delta=" + delta);
-                if (selectedIndex == offset && delta > 0) {
-                    //滑动到第一项时,若继续向下滑动,则自动跳到最后一项
-                    setSelectedIndex(items.size() - offset * 2 - 1);
-                } else if (selectedIndex == items.size() - offset - 1 && delta < 0) {
-                    //滑动到最后一项时,若继续向上滑动,则自动跳到第一项
-                    setSelectedIndex(0);
-                } else {
-                    isUserScroll = true;
-                    startScrollerTask();
-                }
-                break;
-        }
-        return super.onTouchEvent(ev);
-    }
-
-    private void _setItems(List<String> list) {
-        items.clear();
-        items.addAll(list);
-
-        // 前面和后面补全
-        for (int i = 0; i < offset; i++) {
-            items.add(0, "");
-            items.add("");
-        }
-
-        initData();
-
-    }
-
-    /**
-     * Sets items.
-     *
-     * @param list the list
-     */
-    public void setItems(List<String> list) {
-        _setItems(list);
-        // 2015/12/25 初始化时设置默认选中项
-        setSelectedIndex(0);
-    }
-
-    /**
-     * Sets items.
-     *
-     * @param list  the list
-     * @param index the index
-     */
-    public void setItems(List<String> list, int index) {
-        _setItems(list);
-        setSelectedIndex(index);
-    }
-
-    /**
-     * Sets items.
-     *
-     * @param list the list
-     * @param item the item
-     */
-    public void setItems(List<String> list, String item) {
-        _setItems(list);
-        setSelectedItem(item);
-    }
-
-    /**
-     * Gets text size.
-     *
-     * @return the text size
-     */
-    public int getTextSize() {
-        return textSize;
-    }
-
-    /**
-     * Sets text size.
-     *
-     * @param textSize the text size
-     */
-    public void setTextSize(int textSize) {
-        this.textSize = textSize;
-    }
-
-    /**
-     * Gets text color.
-     *
-     * @return the text color
-     */
-    public int getTextColor() {
-        return textColorFocus;
-    }
-
-    /**
-     * Sets text color.
-     *
-     * @param textColorNormal the text color normal
-     * @param textColorFocus  the text color focus
-     */
-    public void setTextColor(@ColorInt int textColorNormal, @ColorInt int textColorFocus) {
-        this.textColorNormal = textColorNormal;
-        this.textColorFocus = textColorFocus;
-    }
-
-    /**
-     * Sets text color.
-     *
-     * @param textColor the text color
-     */
-    public void setTextColor(@ColorInt int textColor) {
-        this.textColorFocus = textColor;
-    }
-
-    /**
-     * Is line visible boolean.
-     *
-     * @return the boolean
-     */
-    public boolean isLineVisible() {
-        return lineVisible;
-    }
-
-    /**
-     * Sets line visible.
-     *
-     * @param lineVisible the line visible
-     */
-    public void setLineVisible(boolean lineVisible) {
-        this.lineVisible = lineVisible;
-    }
-
-    /**
-     * Gets line color.
-     *
-     * @return the line color
-     */
-    public int getLineColor() {
-        return lineColor;
-    }
-
-    /**
-     * Sets line color.
-     *
-     * @param lineColor the line color
-     */
-    public void setLineColor(@ColorInt int lineColor) {
-        this.lineColor = lineColor;
-    }
-
-    /**
-     * Gets offset.
-     *
-     * @return the offset
-     */
-    public int getOffset() {
-        return offset;
-    }
-
-    /**
-     * Sets offset.
-     *
-     * @param offset the offset
-     */
-    public void setOffset(@IntRange(from = 1, to = 4) int offset) {
-        if (offset < 1 || offset > 4) {
-            throw new IllegalArgumentException("Offset must between 1 and 4");
-        }
-        this.offset = offset;
-    }
-
-    /**
-     * 从0开始计数,所有项包括偏移量
-     *
-     * @param index
-     */
-    private void setSelectedIndex(@IntRange(from = 0) final int index) {
-        isUserScroll = false;
-        this.post(new Runnable() {
-            @Override
-            public void run() {
-                //滚动到选中项的位置
-                smoothScrollTo(0, index * itemHeight);
-                //选中这一项的值
-                selectedIndex = index + offset;
-                onSelectedCallBack();
-            }
-        });
-    }
-
-    /**
-     * Sets selected item.
-     *
-     * @param item the item
-     */
-    public void setSelectedItem(String item) {
-        for (int i = 0; i < items.size(); i++) {
-            if (items.get(i).equals(item)) {
-                //调用_setItems(List)时额外添加了offset个占位符到items里,需要忽略占位符所占的位
-                setSelectedIndex(i - offset);
-                break;
-            }
-        }
-    }
-
-    /**
-     * Use {@link #getSelectedItem()} instead
-     */
-    @Deprecated
-    public String getSeletedItem() {
-        return getSelectedItem();
-    }
-
-    /**
-     * Gets selected item.
-     *
-     * @return the selected item
-     */
-    public String getSelectedItem() {
-        return items.get(selectedIndex);
-    }
-
-    /**
-     * Use {@link #getSelectedIndex()} instead
-     */
-    @Deprecated
-    public int getSeletedIndex() {
-        return getSelectedIndex();
-    }
-
-    /**
-     * Gets selected index.
-     *
-     * @return the selected index
-     */
-    public int getSelectedIndex() {
-        return selectedIndex - offset;
-    }
-
-    /**
-     * Sets on wheel view listener.
-     *
-     * @param onWheelViewListener the on wheel view listener
-     */
-    public void setOnWheelViewListener(OnWheelViewListener onWheelViewListener) {
-        this.onWheelViewListener = onWheelViewListener;
-    }
-
-    /**
-     * The interface On wheel view listener.
-     */
-    public interface OnWheelViewListener {
-        /**
-         * On selected.
-         *
-         * @param isUserScroll  the is user scroll
-         * @param selectedIndex the selected index
-         * @param item          the item
-         */
-        void onSelected(boolean isUserScroll, int selectedIndex, String item);
-    }
-
-    private class ScrollerTask implements Runnable {
-
-        @Override
-        public void run() {
-            // 2015/12/17 java.lang.ArithmeticException: divide by zero
-            if (itemHeight == 0) {
-//                LogUtils.debug(this, "itemHeight is zero");
-                return;
-            }
-            int newY = getScrollY();
-            if (initialY - newY == 0) { // stopped
-                final int remainder = initialY % itemHeight;
-                final int divided = initialY / itemHeight;
-//                LogUtils.debug(this, "initialY: " + initialY + ", remainder: " + remainder + ", divided: " + divided);
-                if (remainder == 0) {
-                    selectedIndex = divided + offset;
-                    onSelectedCallBack();
-                } else {
-                    if (remainder > itemHeight / 2) {
-                        post(new Runnable() {
-                            @Override
-                            public void run() {
-                                smoothScrollTo(0, initialY - remainder + itemHeight);
-                                selectedIndex = divided + offset + 1;
-                                onSelectedCallBack();
-                            }
-                        });
-                    } else {
-                        post(new Runnable() {
-                            @Override
-                            public void run() {
-                                smoothScrollTo(0, initialY - remainder);
-                                selectedIndex = divided + offset;
-                                onSelectedCallBack();
-                            }
-                        });
-                    }
-                }
-            } else {
-                startScrollerTask();
-            }
-        }
-
-    }
-
-}

+ 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
 

+ 3 - 3
app_core/imageload/src/main/java/com/me/imageloader/transformation/GlideCircleTransform.java

@@ -13,7 +13,7 @@ import android.graphics.RectF;
 
 import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool;
 import com.bumptech.glide.load.resource.bitmap.BitmapTransformation;
-import com.me.imageloader.utils.ScreenUtils;
+import com.me.imageloader.utils.ScreenUtil;
 
 /**
  * @desc:自定义BitmapTransformation来实现圆形图片加载
@@ -35,7 +35,7 @@ public class GlideCircleTransform extends BitmapTransformation {
     public GlideCircleTransform(Context context, float borderWidth, int borderColor) {
         super(context);
         mBorderWidth = Resources.getSystem().getDisplayMetrics().density * borderWidth;
-        mBorderWidth = ScreenUtils.dip2px( borderWidth);
+        mBorderWidth = ScreenUtil.dip2px( borderWidth);
         mBorderPaint = new Paint();
         mBorderPaint.setDither(true);
         mBorderPaint.setAntiAlias(true);
@@ -47,7 +47,7 @@ public class GlideCircleTransform extends BitmapTransformation {
     public GlideCircleTransform(Context context, float borderWidth, int borderColor, int heightPX, int widthPx) {
         super(context);
         mBorderWidth = Resources.getSystem().getDisplayMetrics().density * borderWidth;
-        mBorderWidth = ScreenUtils.dip2px(borderWidth);
+        mBorderWidth = ScreenUtil.dip2px(borderWidth);
         mBorderPaint = new Paint();
         mBorderPaint.setDither(true);
         mBorderPaint.setAntiAlias(true);

+ 2 - 2
app_core/imageload/src/main/java/com/me/imageloader/utils/ScreenUtils.java → app_core/imageload/src/main/java/com/me/imageloader/utils/ScreenUtil.java

@@ -9,10 +9,10 @@ import java.lang.reflect.Field;
 
 /**
  * 屏幕相关工具类
- * 
+ *
  * Created by Arison on 2017/5/23.
  */
-public class ScreenUtils {
+public class ScreenUtil {
 
     public static int dip2px( float dpValue) {
         final float scale = Utils.getContext().getResources().getDisplayMetrics().density;

+ 1 - 1
app_modular/appme/src/main/java/com/uas/appme/settings/activity/BookingSetActivity.java

@@ -18,7 +18,7 @@ import com.core.base.OABaseActivity;
 import com.core.net.http.ViewUtil;
 import com.core.selectcalendar.SelectCalendarActivity;
 import com.core.utils.CommonUtil;
-import com.core.utils.timeutils.TimePicker;
+import com.core.utils.timeutils.wheel.TimePicker;
 import com.core.widget.view.imp.HttpImp;
 import com.lidroid.xutils.ViewUtils;
 import com.me.appme.R;

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

@@ -31,5 +31,9 @@
             android:hardwareAccelerated="false"
             android:launchMode="singleTask"
             android:windowSoftInputMode="adjustPan" />
+
+        <activity
+            android:name="com.uas.appworks.OA.erp.activity.WorkActivity"
+            android:label="@string/activity_signing" />
     </application>
 </manifest>

+ 13 - 14
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/oa/ChangeMobileActivity.java → app_modular/appworks/src/main/java/com/uas/appworks/OA/erp/activity/ChangeMobileActivity.java

@@ -1,4 +1,4 @@
-package com.xzjmyk.pm.activity.ui.erp.activity.oa;
+package com.uas.appworks.OA.erp.activity;
 
 import android.content.Intent;
 import android.os.Bundle;
@@ -24,21 +24,19 @@ import com.core.api.wxapi.ApiUtils;
 import com.core.app.Constants;
 import com.core.app.MyApplication;
 import com.core.base.BaseActivity;
+import com.core.dao.work.WorkModelDao;
 import com.core.model.SelectBean;
 import com.core.model.WorkModel;
 import com.core.net.http.ViewUtil;
 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.CommonUtil;
 import com.core.utils.TimeUtils;
 import com.core.utils.ToastUtil;
+import com.core.widget.crouton.Crouton;
 import com.core.widget.view.Activity.SelectActivity;
-import com.lidroid.xutils.ViewUtils;
-import com.lidroid.xutils.view.annotation.ViewInject;
-import com.xzjmyk.pm.activity.R;
-import com.xzjmyk.pm.activity.db.dao.WorkModelDao;
-import com.xzjmyk.pm.activity.util.oa.CommonUtil;
-import com.xzjmyk.pm.activity.view.crouton.Crouton;
+import com.me.appworks.R;
 
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -53,15 +51,10 @@ import java.util.regex.Pattern;
  * Created by pengminggong on 2016/10/26.
  */
 public class ChangeMobileActivity extends BaseActivity {
-    @ViewInject(R.id.mac_tv)
     private TextView mac_tv;
-    @ViewInject(R.id.title_tv)
     private TextView title_tv;
-    @ViewInject(R.id.sum_tag)
     private TextView sum_tag;
-    @ViewInject(R.id.sum_tv)
     private EditText sum_tv;
-    @ViewInject(R.id.exit_btn)
     private Button exit_btn;
 
     private int type;
@@ -158,7 +151,6 @@ public class ChangeMobileActivity extends BaseActivity {
             type = getIntent().getIntExtra("type", 1);
             tag = getIntent().getStringExtra("tag");
         }
-        ViewUtils.inject(this);
         initView();
     }
 
@@ -183,7 +175,14 @@ public class ChangeMobileActivity extends BaseActivity {
 
     private boolean submiting = false;
 
-    private void initView() {
+    private void initView(){
+
+        mac_tv = (TextView) findViewById(R.id.mac_tv);
+        title_tv = (TextView) findViewById(R.id.title_tv);
+        sum_tag = (TextView) findViewById(R.id.sum_tag);
+        sum_tv = (EditText) findViewById(R.id.sum_tv);
+        exit_btn = (Button) findViewById(R.id.exit_btn);
+
         String title;
         String sumTag;
         int actionTitle;

+ 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) {

+ 47 - 60
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/oa/WorkActivity.java → app_modular/appworks/src/main/java/com/uas/appworks/OA/erp/activity/WorkActivity.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;
@@ -33,19 +33,14 @@ import com.core.app.MyApplication;
 import com.core.base.OABaseActivity;
 import com.core.model.WorkModel;
 import com.core.net.location.BdLocationHelper;
+import com.core.widget.crouton.Crouton;
 import com.lidroid.xutils.ViewUtils;
-import com.lidroid.xutils.view.annotation.ViewInject;
-import com.uas.appworks.OA.erp.activity.FlightsActivity;
-import com.uas.appworks.OA.erp.activity.MyRuleSetActivity;
-import com.uas.appworks.OA.erp.activity.OfficeAddressSettingsActivity;
-import com.uas.appworks.OA.erp.activity.SignSeniorSettingActivity;
-import com.xzjmyk.pm.activity.R;
-import com.xzjmyk.pm.activity.ui.erp.adapter.oa.WorkAdapter;
-import com.xzjmyk.pm.activity.ui.erp.presenter.WorkPresenter;
-import com.xzjmyk.pm.activity.ui.erp.presenter.imp.IWorkView;
-import com.xzjmyk.pm.activity.util.oa.WifiReceiverUtil;
-import com.xzjmyk.pm.activity.view.crouton.Crouton;
-import com.xzjmyk.pm.activity.view.wheel.OASigninPicker;
+import com.me.appworks.R;
+import com.uas.appworks.OA.erp.adapter.WorkAdapter;
+import com.uas.appworks.OA.erp.presenter.WorkPresenter;
+import com.core.utils.timeutils.wheel.OASigninPicker;
+import com.uas.appworks.OA.erp.utils.WifiReceiverUtil;
+import com.uas.appworks.OA.erp.view.IWorkView;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -61,19 +56,12 @@ public class WorkActivity extends OABaseActivity implements View.OnClickListener
     public static final int ALLEGEDLY = 0x16;
     private final int PHONE_CHANGE = 0x15;
     private final int ADDRESS_CHANGE = 0x14;
-    @ViewInject(R.id.listview)
     private RecyclerView listview;//列表
-    @ViewInject(R.id.office_addr)
     private TextView office_addr;//当前位置
-    @ViewInject(R.id.unoffice_mm)
     private TextView unoffice_mm;//距离
-    @ViewInject(R.id.date_tv)
     private TextView date_tv;//当前日期
-    @ViewInject(R.id.line)
     private View line;//当前日期
-    @ViewInject(R.id.empty_rl)
     private RelativeLayout empty_rl;//当前日期
-    @ViewInject(R.id.empty_tv)
     private TextView empty_tv;//当前日期
 
     private PopupWindow setWindow = null;//
@@ -100,10 +88,8 @@ public class WorkActivity extends OABaseActivity implements View.OnClickListener
 
     @Override
     public boolean onOptionsItemSelected(MenuItem item) {
-        switch (item.getItemId()) {
-            case R.id.title:
-                showPopupWindow();
-                break;
+        if (item.getItemId() == R.id.title){
+            showPopupWindow();
         }
         return super.onOptionsItemSelected(item);
     }
@@ -135,6 +121,15 @@ public class WorkActivity extends OABaseActivity implements View.OnClickListener
     private void initView() {
         getSupportActionBar().setTitle(R.string.activity_signing);
         isAdmin = getIntent() == null ? false : getIntent().getBooleanExtra(AppConfig.IS_ADMIN, false);
+
+
+        listview = (RecyclerView) findViewById(R.id.listview);
+        office_addr = (TextView) findViewById(R.id.office_addr);
+        unoffice_mm = (TextView) findViewById(R.id.unoffice_mm);
+        line = findViewById(R.id.line);
+        empty_rl = (RelativeLayout) findViewById(R.id.empty_rl);
+        date_tv = (TextView) findViewById(R.id.date_tv);
+
         selectTime = System.currentTimeMillis();
         getMac();
         presenter = new WorkPresenter(this, macAddress);
@@ -265,43 +260,35 @@ public class WorkActivity extends OABaseActivity implements View.OnClickListener
     @Override
     public void onClick(View view) {
         Intent intent = null;
-        switch (view.getId()) {
-            case R.id.signin_btn:
-                if (isSubmitAble()) {
-                    isShowTocstAble = true;
-                    presenter.submit((ArrayList<WorkModel>) adapter.getModels(), macAddress);
-                }
-                break;
-            case R.id.date_tv:
-                isShowTocstAble = true;
-                showDateDialog();
-                break;
-            case R.id.unoffice_:
+
+        if (view.getId() == R.id.signin_btn){
+            if (isSubmitAble()) {
                 isShowTocstAble = true;
-                presenter.gotoLocationActivity(WorkActivity.this);
-                break;
-            case R.id.super_setting_tv:
-                startActivityForResult(new Intent(ct, SignSeniorSettingActivity.class), 0x12);
-                closePopupWindow();
-                break;
-            case R.id.work_setting_tv:
-                intent = new Intent(ct, FlightsActivity.class);
-                startActivityForResult(intent, 0x12);
-                closePopupWindow();
-                break;
-            case R.id.office_addr_setting_tv:
-                startActivityForResult(new Intent(ct, OfficeAddressSettingsActivity.class), 0x12);
-                closePopupWindow();
-                break;
-            case R.id.my_rule_setting_tv:
-                intent = new Intent(ct, MyRuleSetActivity.class);
-                presenter.showMyRele(intent, adapter.getModels());
-                startActivity(intent);
-                closePopupWindow();
-                break;
-            case R.id.cancel_tv:
-                closePopupWindow();
-                break;
+                presenter.submit((ArrayList<WorkModel>) adapter.getModels(), macAddress);
+            }
+        }else if (view.getId() == R.id.date_tv){
+            isShowTocstAble = true;
+            showDateDialog();
+        }else if (view.getId() == R.id.unoffice_){
+            isShowTocstAble = true;
+            presenter.gotoLocationActivity(WorkActivity.this);
+        }else if (view.getId() == R.id.super_setting_tv){
+            startActivityForResult(new Intent(ct, SignSeniorSettingActivity.class), 0x12);
+            closePopupWindow();
+        }else if (view.getId() == R.id.work_setting_tv){
+            intent = new Intent(ct, FlightsActivity.class);
+            startActivityForResult(intent, 0x12);
+            closePopupWindow();
+        }else if (view.getId() == R.id.office_addr_setting_tv){
+            startActivityForResult(new Intent(ct, OfficeAddressSettingsActivity.class), 0x12);
+            closePopupWindow();
+        }else if (view.getId() == R.id.my_rule_setting_tv){
+            intent = new Intent(ct, MyRuleSetActivity.class);
+            presenter.showMyRele(intent, adapter.getModels());
+            startActivity(intent);
+            closePopupWindow();
+        }else if (view.getId() ==  R.id.cancel_tv){
+            closePopupWindow();
         }
     }
 

+ 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;

+ 312 - 0
app_modular/appworks/src/main/java/com/uas/appworks/OA/erp/adapter/WorkAdapter.java

@@ -0,0 +1,312 @@
+package com.uas.appworks.OA.erp.adapter;
+
+import android.content.Context;
+import android.content.Intent;
+import android.support.v7.widget.RecyclerView;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.RelativeLayout;
+import android.widget.TextView;
+
+import com.common.data.CalendarUtil;
+import com.common.data.DateFormatUtil;
+import com.common.data.ListUtils;
+import com.common.data.StringUtil;
+import com.core.app.AppConfig;
+import com.core.model.OAConfig;
+import com.core.model.WorkModel;
+import com.core.utils.TimeUtils;
+import com.me.appworks.R;
+import com.uas.appworks.OA.erp.activity.ChangeMobileActivity;
+import com.uas.appworks.OA.erp.activity.WorkActivity;
+
+import java.util.List;
+
+/**
+ * Created by Bitliker on 2016/12/5.
+ */
+
+public class WorkAdapter extends RecyclerView.Adapter<WorkAdapter.ViewHoler> {
+    private final String NONCLASS;
+    private final String LATETIME;
+    private final String OVERLATETIME;
+    private final String EARLYOFF;
+
+    private List<WorkModel> models;
+    private Context ct;
+    private boolean isToday;
+    private String newTime;
+    private long seletTime;
+    private boolean isFreeWork = false;//是否是自由打卡
+
+    public WorkAdapter(Context ct) {
+        this.ct = ct;
+        NONCLASS = ct.getString(R.string.sign_Absenteeism);
+        LATETIME = ct.getString(R.string.sign_late);
+        OVERLATETIME = ct.getString(R.string.over_latetime);
+        EARLYOFF = ct.getString(R.string.sign_leave);
+        isToday = true;
+        newTime = DateFormatUtil.long2Str(System.currentTimeMillis(), "HH:mm");
+    }
+
+    public List<WorkModel> getModels() {
+        return models;
+    }
+
+    public void setModels(boolean isToday, boolean isFreeWork, long seletTime, List<WorkModel> models) {
+        this.models = models;
+        this.isFreeWork = isFreeWork;
+        this.isToday = isToday;
+        this.seletTime = seletTime;
+        newTime = DateFormatUtil.long2Str(System.currentTimeMillis(), "HH:mm");
+        notifyDataSetChanged();
+    }
+
+    @Override
+    public WorkAdapter.ViewHoler onCreateViewHolder(ViewGroup parent, int viewType) {
+        ViewHoler holer = new ViewHoler(LayoutInflater.from(ct).inflate(R.layout.item_works, parent, false));
+        return holer;
+    }
+
+    @Override
+    public void onBindViewHolder(WorkAdapter.ViewHoler holder, int position) {
+        try {
+            WorkModel model = models.get(position);
+            if (isFreeWork) {
+                holder.free_context.setVisibility(View.VISIBLE);
+                holder.work_context.setVisibility(View.GONE);
+                bindFreeView(holder, model, position);
+            } else {
+                holder.free_context.setVisibility(View.GONE);
+                holder.work_context.setVisibility(View.VISIBLE);
+                bindWorkView(holder, model, (position == models.size() - 1));
+            }
+        } catch (ClassCastException e) {
+            if (e != null)
+                log("onBindViewHolder ClassCastException=" + e.getMessage());
+        } catch (Exception e) {
+            if (e != null)
+                log("onBindViewHolder Exception=" + e.getMessage());
+        }
+    }
+
+    private void bindFreeView(WorkAdapter.ViewHoler holder, final WorkModel model, int position) {
+        holder.free_work_tag.setText(position % 2 == 0 ? ct.getString(R.string.work_signin) : ct.getString(R.string.unwork_signin));
+        holder.free_work_time.setText(model.getWorkTime());
+    }
+
+    private void bindWorkView(WorkAdapter.ViewHoler holder, final WorkModel model, boolean isFinal) {
+        holder.work_time.setText("  " + getNull(model.getWorkTime()));
+        holder.work_signin.setText("  " + getNull(model.getWorkSignin()));
+        holder.off_time.setText("  " + getNull(model.getOffTime()));
+        holder.off_signin.setText("  " + getNull(model.getOffSignin()));
+        //处理迟到、早退、缺勤
+        String workTag = getWorkTag(model);
+        if (StringUtil.isEmpty(workTag)) {
+            holder.work_tag.setVisibility(View.GONE);
+            holder.work_supple.setVisibility(View.GONE);
+        } else {//TODO 进入申述
+            bindTag(true, workTag, model, holder);
+        }
+        String offTag = getOffTag(model, isFinal);
+        if (StringUtil.isEmpty(offTag)) {
+            holder.off_tag.setVisibility(View.GONE);
+            holder.off_supple.setVisibility(View.GONE);
+        } else {//TODO 进入申述
+            bindTag(false, offTag, model, holder);
+        }
+    }
+
+
+    @Override
+    public int getItemCount() {
+        return ListUtils.isEmpty(models) ? 0 : models.size();
+    }
+
+    public class ViewHoler extends RecyclerView.ViewHolder {
+        TextView work_time,
+                work_signin,
+                off_time,
+                off_signin,
+                work_tag,//上班迟到标识
+                free_work_tag,//上班打卡  下班打卡
+                free_work_time,//上下班打卡时间
+                off_tag;//上班迟到标识
+        ImageView
+                off_supple,
+                work_supple;
+        RelativeLayout work_context;//
+        LinearLayout free_context;//
+
+        public ViewHoler(View itemView) {
+            super(itemView);
+            work_time = (TextView) itemView.findViewById(R.id.work_time);
+            work_signin = (TextView) itemView.findViewById(R.id.work_signin);
+            off_time = (TextView) itemView.findViewById(R.id.off_time);
+            off_signin = (TextView) itemView.findViewById(R.id.off_signin);
+            work_tag = (TextView) itemView.findViewById(R.id.work_tag);
+            off_tag = (TextView) itemView.findViewById(R.id.off_tag);
+            free_work_tag = (TextView) itemView.findViewById(R.id.free_work_tag);
+            free_work_time = (TextView) itemView.findViewById(R.id.free_work_time);
+            off_supple = (ImageView) itemView.findViewById(R.id.off_supple);
+            work_supple = (ImageView) itemView.findViewById(R.id.work_supple);
+            work_context = (RelativeLayout) itemView.findViewById(R.id.work_context);
+            free_context = (LinearLayout) itemView.findViewById(R.id.free_context);
+
+        }
+    }
+
+    private void bindTag(final boolean isWork, String tag, final WorkModel model, ViewHoler holder) {
+        TextView tag_tv = isWork ? holder.work_tag : holder.off_tag;
+        ImageView supple_img = isWork ? holder.work_supple : holder.off_supple;
+        tag_tv.setText(tag);
+        tag_tv.setVisibility(View.VISIBLE);
+        if (NONCLASS.equals(tag)) {
+            int suppleReid = R.drawable.btn_shensu;
+            supple_img.setVisibility(View.VISIBLE);
+            String allegedly = isWork ? model.getWorkAllegedly() : model.getOffAllegedly();
+            if (!StringUtil.isEmpty(allegedly)) {
+                supple_img.setOnClickListener(null);
+                TextView signin_tv = isWork ? holder.work_signin : holder.off_signin;
+                signin_tv.setText("");
+                suppleReid = R.drawable.allegedlying;
+            } else {
+                supple_img.setOnClickListener(new View.OnClickListener() {
+                    @Override
+                    public void onClick(View view) {
+                        if (!StringUtil.isEmpty(isWork ? model.getWorkAllegedly() : model.getOffAllegedly()))
+                            return;
+                        Intent intent = new Intent(ct, ChangeMobileActivity.class);
+                        intent.putExtra("type", 2);
+                        if (seletTime > 0)
+                            intent.putExtra("date", TimeUtils.s_long_2_str(seletTime));
+                        intent.putExtra("tag", isWork ? model.getWorkTime() : model.getOffTime());
+                        intent.putExtra("macAddress", getTimeForHHmm(isWork ? model.getWorkTime() : model.getOffTime()));
+                        intent.putExtra("model", model);
+                        intent.putExtra("isWork", isWork);
+                        if (ct instanceof WorkActivity)
+                            ((WorkActivity) ct).startActivityForResult(intent, WorkActivity.ALLEGEDLY);
+                        else
+                            ct.startActivity(intent);
+                    }
+                });
+            }
+            supple_img.setImageResource(suppleReid);
+        } else {
+            supple_img.setVisibility(View.GONE);
+        }
+    }
+
+    /**
+     * 获取上班签到的状态
+     *
+     * @param model
+     * @return
+     */
+
+    private String getWorkTag(WorkModel model) {
+        if (StringUtil.isEmpty(model.getWorkTime())) return "";
+        if (isToday) {//是今天
+            if (StringUtil.isEmpty(model.getWorkSignin())) {
+                if (!model.isNextDay() && getWorkEndOrOffStart(model.getWorkTime(), true).compareTo(newTime) < 0) {
+                    //矿工 当前时间在上班结束时间或是下班打卡存在
+                    return NONCLASS;
+                } else return "";
+            } else {
+                if (getForAddMin(model.getWorkTime(), OAConfig.latetime).compareTo(model.getWorkSignin()) < 0//迟到时间之后
+                        && getForAddMin(model.getWorkTime(), OAConfig.overlatetime).compareTo(model.getWorkSignin()) >= 0) {
+                    //迟到   迟到之后  严重迟到之前
+                    return LATETIME;
+                } else if (getForAddMin(model.getWorkTime(), OAConfig.overlatetime).compareTo(model.getWorkSignin()) < 0//迟到时间之后
+                        && getWorkEndOrOffStart(model.getWorkTime(), true).compareTo(model.getWorkSignin()) >= 0) {
+                    //严重迟到  严重迟到之后   矿工之前
+                    return OVERLATETIME;
+                } else return "";
+            }
+        } else {//是昨天及以前的
+            if (StringUtil.isEmpty(model.getWorkSignin()))
+                return NONCLASS;
+            else if (getForAddMin(model.getWorkTime(), OAConfig.latetime).compareTo(model.getWorkSignin()) < 0
+                    && getForAddMin(model.getWorkTime(), OAConfig.overlatetime).compareTo(model.getWorkSignin()) >= 0) {
+                //迟到  迟到时间getForAddMin(model.getWorkTime(), AutoMemoryUtil.latetime) 到严重迟到时间之间
+                return LATETIME;
+            } else if (getForAddMin(model.getWorkTime(), OAConfig.overlatetime).compareTo(model.getWorkSignin()) < 0
+                    && getWorkEndOrOffStart(model.getWorkTime(), true).compareTo(model.getWorkSignin()) >= 0) {
+                //严重迟到 严重迟到时间到矿工之间
+                return OVERLATETIME;
+            } else {
+                return "";
+            }
+        }
+    }
+
+
+    /**
+     * 下班只显示早退和矿工
+     * 早退:下班开始时间到早退时间之间
+     * 矿工:非今天没有签到记录为矿工  今天有签到记录不会显示矿工
+     *
+     * @param model
+     * @param isFinal
+     * @return
+     */
+    private String getOffTag(WorkModel model, boolean isFinal) {
+        if (StringUtil.isEmpty(model.getOffTime())) return "";
+        if (!StringUtil.isEmpty(model.getOffSignin())) {
+            if (getForAddMin(model.getOffTime(), -OAConfig.earlyoff).compareTo(model.getOffSignin()) > 0
+                    && getWorkEndOrOffStart(model.getOffTime(), false).compareTo(model.getOffSignin()) <= 0) {
+                //早退  下班开始时间到早退时间之间
+                return EARLYOFF;
+            }
+            return "";
+        } else if (!isToday) {
+            return NONCLASS;
+        } else if (!model.isNextDay() && !isFinal && !StringUtil.isEmpty(model.getOffend()) && model.getOffend().compareTo(newTime) < 0) {
+            return NONCLASS;
+        } else return "";
+    }
+
+
+    //当前时间
+    private String getWorkEndOrOffStart(String hhmm, boolean iswork) {
+        if (OAConfig.nonclass == 0)
+            OAConfig.nonclass = 90;
+        String time = getForAddMin(hhmm, iswork ? OAConfig.nonclass : -OAConfig.nonclass);
+        if (iswork && time.compareTo(hhmm) < 0)//上跨天
+            return "23:59";
+        else
+            return time;
+    }
+
+    private String getForAddMin(String hhmm, int time) {
+        long f_time = TimeUtils.f_str_2_long(TimeUtils.s_long_2_str(System.currentTimeMillis()) +
+                " " + hhmm + ":00");
+        f_time += time * 60000;
+        return DateFormatUtil.long2Str(f_time, "HH:mm");
+    }
+
+    private String getTimeForHHmm(String hhmm) {
+        if (StringUtil.isEmpty(hhmm)) return "";
+        return TimeUtils.s_long_2_str(seletTime) + " " + CalendarUtil.getWeek(seletTime) + " " + hhmm;
+    }
+
+    private String getNull(String str) {
+        if (StringUtil.isEmpty(str)) return "";
+        return str;
+    }
+
+    private void log(String message) {
+        try {
+            if (!AppConfig.DEBUG || StringUtil.isEmpty(message)) return;
+            Log.i("gongpengming", message);
+        } catch (Exception e) {
+
+        }
+    }
+
+
+}

+ 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;

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

@@ -1,4 +1,4 @@
-package com.xzjmyk.pm.activity.ui.erp.presenter.imp;
+package com.uas.appworks.OA.erp.presenter;
 
 import com.core.model.WorkModel;
 
@@ -11,7 +11,7 @@ import java.util.ArrayList;
 public interface IWorkPresenter {
 
 
-    void start( boolean canShowTocat);
+    void start(boolean canShowTocat);
 
 //    void loadWorkData(long time);//下拉班次,只有打卡界面才有
 

+ 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);
                                 }
                             }

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

@@ -1,4 +1,4 @@
-package com.xzjmyk.pm.activity.ui.erp.presenter;
+package com.uas.appworks.OA.erp.presenter;
 
 import android.app.Activity;
 import android.content.Intent;
@@ -22,23 +22,22 @@ import com.core.api.wxapi.ApiPlatform;
 import com.core.api.wxapi.ApiUtils;
 import com.core.app.MyApplication;
 import com.core.dao.UserDao;
+import com.core.dao.work.WorkModelDao;
 import com.core.model.User;
 import com.core.model.WorkLocationModel;
 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.utils.BaiduMapUtil;
 import com.core.utils.CommonInterface;
+import com.core.utils.CommonUtil;
 import com.core.utils.TimeUtils;
 import com.core.utils.WorkHandlerUtil;
-import com.core.widget.view.model.SearchPoiParam;
-import com.xzjmyk.pm.activity.R;
-import com.xzjmyk.pm.activity.db.dao.WorkModelDao;
 import com.core.widget.view.Activity.SearchLocationActivity;
-import com.xzjmyk.pm.activity.ui.erp.presenter.imp.IWorkPresenter;
-import com.xzjmyk.pm.activity.ui.erp.presenter.imp.IWorkView;
-import com.xzjmyk.pm.activity.util.baidu.BaiduMapUtil;
-import com.xzjmyk.pm.activity.util.oa.CommonUtil;
+import com.core.widget.view.model.SearchPoiParam;
+import com.me.appworks.R;
+import com.uas.appworks.OA.erp.view.IWorkView;
 
 import java.util.ArrayList;
 import java.util.Collections;
@@ -47,7 +46,6 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
-import static com.xzjmyk.pm.activity.util.baidu.BaiduMapUtil.getInstence;
 
 /**
  * 班次管理器
@@ -294,7 +292,7 @@ public class WorkPresenter implements OnHttpResultListener, IWorkPresenter {
         try {
             if (ListUtils.isEmpty(locationList)) return -1;
             for (WorkLocationModel b : locationList) {
-                String dis = getInstence().getDistance(
+                String dis =  BaiduMapUtil.getInstence().getDistance(
                         new LatLng(b.getLocation().longitude, b.getLocation().latitude)
                         , new LatLng(latitude, longitude));
                 if (StringUtil.isEmpty(dis)) continue;

+ 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(AppConstant.CHANGE_MISSION_TASK, true);
+                                    intent.setAction(AppConstant.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);
+    }
+
+}

+ 1 - 1
WeiChat/src/main/java/com/xzjmyk/pm/activity/util/oa/WifiReceiverUtil.java → app_modular/appworks/src/main/java/com/uas/appworks/OA/erp/utils/WifiReceiverUtil.java

@@ -1,4 +1,4 @@
-package com.xzjmyk.pm.activity.util.oa;
+package com.uas.appworks.OA.erp.utils;
 
 import android.content.BroadcastReceiver;
 import android.content.Context;

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

@@ -1,4 +1,4 @@
-package com.xzjmyk.pm.activity.ui.erp.presenter.imp;
+package com.uas.appworks.OA.erp.view;
 
 import com.baidu.mapapi.model.LatLng;
 import com.baidu.mapapi.search.core.PoiInfo;

+ 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);
+    }
+}

+ 1 - 1
app_third/libbdupdatesdk/src/main/res/values/bdp_update_strings.xml

@@ -1,5 +1,5 @@
 <resources>
-
+<!--百度自动更新的情况-->
     <string name="bdp_update_request_net_error">网络错误,请重试</string>
     <string name="bdp_update_title_download">发现新版本</string>
     <string name="bdp_update_title_install">发现新版本安装包</string>