Browse Source

代码冲突

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

# Conflicts:
#	WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/message/MessageFragment.java
#	app_core/common/src/main/java/com/common/data/StringUtil.java
Arison 8 years ago
parent
commit
4588f9ebf9
62 changed files with 3089 additions and 1336 deletions
  1. 12 2
      WeiChat/src/main/AndroidManifest.xml
  2. 11 3
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/MainActivity.java
  3. 191 161
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/message/MessageFragment.java
  4. 2 0
      WeiChat/src/main/java/com/xzjmyk/pm/activity/util/oa/AutoErpService.java
  5. 15 32
      WeiChat/src/main/java/com/xzjmyk/pm/activity/util/oa/CommonUtil.java
  6. 61 35
      WeiChat/src/main/res/layout/fragment_new_message.xml
  7. 6 0
      app_core/common/src/main/java/com/common/data/DateFormatUtil.java
  8. 3 2
      app_core/common/src/main/java/com/common/data/StringUtil.java
  9. 34 30
      app_core/common/src/main/java/com/common/system/PermissionUtil.java
  10. 14 1
      app_core/common/src/main/java/com/core/app/Constants.java
  11. 8 9
      app_core/common/src/main/java/com/core/net/http/http/OAHttpHelper.java
  12. 18 3
      app_core/common/src/main/java/com/core/net/location/BdLocationHelper.java
  13. 1 3
      app_core/common/src/main/java/com/core/utils/CommonInterface.java
  14. 43 34
      app_core/common/src/main/java/com/core/widget/RedView.java
  15. 52 1
      app_core/common/src/main/res/layout/bsetting_activity.xml
  16. 4 4
      app_core/common/src/main/res/layout/person_setting_activity.xml
  17. 1 0
      app_core/common/src/main/res/values/attrs.xml
  18. 1 1
      app_core/message/src/main/java/com/me/message/imp/ToastCustomizedImpl.java
  19. 82 1
      app_modular/appbooking/src/main/java/com/modular/booking/activity/services/BServiceListActivity.java
  20. 1 1
      app_modular/appbooking/src/main/java/com/modular/booking/activity/services/BServiceSearchActivity.java
  21. 1 1
      app_modular/appbooking/src/main/res/layout/action_book_service_search.xml
  22. 2 0
      app_modular/appme/src/main/AndroidManifest.xml
  23. 1 1
      app_modular/appme/src/main/java/com/uas/appme/pedometer/view/PersonalPageActivity.java
  24. 14 1
      app_modular/appme/src/main/java/com/uas/appme/settings/activity/BComSetCompanyRestActivity.java
  25. 12 1
      app_modular/appme/src/main/java/com/uas/appme/settings/activity/BComSetEmployeeRestActivity.java
  26. 2 0
      app_modular/appme/src/main/java/com/uas/appme/settings/activity/BRestActivity.java
  27. 8 0
      app_modular/appme/src/main/java/com/uas/appme/settings/activity/BSettingActivity.java
  28. 244 0
      app_modular/appme/src/main/java/com/uas/appme/settings/activity/BusinessHoursSetting.java
  29. 8 7
      app_modular/appme/src/main/java/com/uas/appme/settings/activity/PersonSettingActivity.java
  30. 76 0
      app_modular/appme/src/main/res/layout/business_hours_setting_activity.xml
  31. 2 2
      app_modular/appmessages/build.gradle
  32. 131 0
      app_modular/appmessages/src/main/java/com/modular/appmessages/model/MessageHeader.java
  33. 1031 881
      app_modular/appmessages/src/main/java/com/modular/appmessages/presenter/MessagePresenter.java
  34. 1 1
      app_modular/appmessages/src/main/java/com/modular/appmessages/presenter/imp/IMessageView.java
  35. BIN
      app_modular/appmessages/src/main/res/drawable-xhdpi/icon_message_food.png
  36. BIN
      app_modular/appmessages/src/main/res/drawable-xhdpi/icon_message_hair.png
  37. BIN
      app_modular/appmessages/src/main/res/drawable-xhdpi/icon_message_hospital.png
  38. BIN
      app_modular/appmessages/src/main/res/drawable-xhdpi/icon_message_huisuo.png
  39. BIN
      app_modular/appmessages/src/main/res/drawable-xhdpi/icon_message_ktv.png
  40. BIN
      app_modular/appmessages/src/main/res/drawable-xhdpi/icon_message_sport.png
  41. BIN
      app_modular/appmessages/src/main/res/drawable-xxhdpi/icon_message_food.png
  42. BIN
      app_modular/appmessages/src/main/res/drawable-xxhdpi/icon_message_hair.png
  43. BIN
      app_modular/appmessages/src/main/res/drawable-xxhdpi/icon_message_hospital.png
  44. BIN
      app_modular/appmessages/src/main/res/drawable-xxhdpi/icon_message_huisuo.png
  45. BIN
      app_modular/appmessages/src/main/res/drawable-xxhdpi/icon_message_ktv.png
  46. BIN
      app_modular/appmessages/src/main/res/drawable-xxhdpi/icon_message_sport.png
  47. 14 0
      app_modular/appmessages/src/main/res/layout/header_message.xml
  48. 95 0
      app_modular/appmessages/src/main/res/layout/item_message_header.xml
  49. 550 0
      app_modular/appmessages/src/main/res/layout/personal_message_header.xml
  50. 1 1
      app_modular/apptasks/src/main/AndroidManifest.xml
  51. 0 61
      app_modular/apptasks/src/main/java/com/modular/apptasks/AutoTasks.java
  52. 210 0
      app_modular/apptasks/src/main/java/com/modular/apptasks/presenter/AutoPresenter.java
  53. 1 1
      app_modular/apptasks/src/main/java/com/modular/apptasks/receiver/AutoTaskReceiver.java
  54. 8 3
      app_modular/apptasks/src/main/java/com/modular/apptasks/util/AlarmUtil.java
  55. 25 23
      app_modular/apptasks/src/main/java/com/modular/apptasks/util/AutoTaskHttp.java
  56. 1 1
      app_modular/apptasks/src/main/java/com/modular/apptasks/util/ReckonAutoUtil.java
  57. 1 1
      app_modular/apputils/src/main/java/com/modular/apputils/utils/PopupWindowHelper.java
  58. 4 0
      app_modular/apputils/src/main/res/values/ids.xml
  59. 5 5
      app_modular/appworks/src/main/java/com/uas/appworks/OA/erp/activity/MissionActivity.java
  60. 67 16
      app_modular/appworks/src/main/java/com/uas/appworks/OA/erp/presenter/MissionPresenter.java
  61. 13 6
      app_modular/appworks/src/main/java/com/uas/appworks/OA/erp/utils/AutoErpSigninUitl.java
  62. 1 0
      app_modular/appworks/src/main/java/com/uas/appworks/dao/MissionDao.java

+ 12 - 2
WeiChat/src/main/AndroidManifest.xml

@@ -258,7 +258,12 @@
         <activity android:name=".ui.erp.activity.NewsTwoActivity" />
         <activity android:name=".ui.erp.activity.NewsTwoActivity" />
         <activity android:name=".ui.erp.activity.NoticesActivity" />
         <activity android:name=".ui.erp.activity.NoticesActivity" />
         <activity android:name=".ui.erp.activity.InformActivity" />
         <activity android:name=".ui.erp.activity.InformActivity" />
-        <activity android:name=".ui.platform.task.TaskActivity" />
+        <activity android:name=".ui.platform.task.TaskActivity" >
+            <intent-filter>
+                <action android:name="com.modular.task.TaskActivity" />
+                <category android:name="android.intent.category.DEFAULT" />
+            </intent-filter>
+        </activity>
         <activity android:name=".ui.erp.activity.ScheduleActivity" />
         <activity android:name=".ui.erp.activity.ScheduleActivity" />
         <activity android:name="com.modular.appmessages.activity.SubscribeDetailActivity" />
         <activity android:name="com.modular.appmessages.activity.SubscribeDetailActivity" />
         <!-- 通用的activity 加载fragment -->
         <!-- 通用的activity 加载fragment -->
@@ -913,7 +918,12 @@
                 <category android:name="android.intent.category.DEFAULT" />
                 <category android:name="android.intent.category.DEFAULT" />
             </intent-filter>
             </intent-filter>
         </activity>
         </activity>
-        <activity android:name=".ui.platform.task.TaskB2BActivity" />
+        <activity android:name=".ui.platform.task.TaskB2BActivity" >
+            <intent-filter>
+                <action android:name="com.modular.task.TaskB2BActivity" />
+                <category android:name="android.intent.category.DEFAULT" />
+            </intent-filter>
+        </activity>
         <activity android:name=".ui.platform.task.TaskAddB2BActivity">
         <activity android:name=".ui.platform.task.TaskAddB2BActivity">
             <intent-filter>
             <intent-filter>
                 <action android:name="com.modular.task.TaskAddB2BActivity" />
                 <action android:name="com.modular.task.TaskAddB2BActivity" />

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

@@ -41,6 +41,7 @@ import com.baidu.android.pushservice.PushManager;
 import com.baidu.autoupdatesdk.BDAutoUpdateSDK;
 import com.baidu.autoupdatesdk.BDAutoUpdateSDK;
 import com.baidu.autoupdatesdk.UICheckUpdateCallback;
 import com.baidu.autoupdatesdk.UICheckUpdateCallback;
 import com.common.LogUtil;
 import com.common.LogUtil;
+import com.common.config.BaseConfig;
 import com.common.data.DateFormatUtil;
 import com.common.data.DateFormatUtil;
 import com.common.data.ListUtils;
 import com.common.data.ListUtils;
 import com.common.data.StringUtil;
 import com.common.data.StringUtil;
@@ -77,6 +78,7 @@ import com.core.xmpp.dao.FriendDao;
 import com.core.xmpp.listener.AuthStateListener;
 import com.core.xmpp.listener.AuthStateListener;
 import com.core.xmpp.model.SignAutoLogEntity;
 import com.core.xmpp.model.SignAutoLogEntity;
 import com.modular.appmessages.presenter.MessagePresenter;
 import com.modular.appmessages.presenter.MessagePresenter;
+import com.modular.apptasks.presenter.AutoPresenter;
 import com.modular.login.activity.LoginActivity;
 import com.modular.login.activity.LoginActivity;
 import com.uas.appcontact.listener.ImStatusListener;
 import com.uas.appcontact.listener.ImStatusListener;
 import com.uas.appcontact.ui.fragment.ContactsFragment;
 import com.uas.appcontact.ui.fragment.ContactsFragment;
@@ -231,6 +233,7 @@ public class MainActivity extends BaseActivity implements ImStatusListener, NetW
 
 
 
 
 	private void initPermission() {
 	private void initPermission() {
+		LogUtil.i("initPermission");
 		String[] permissions = {Manifest.permission.ACCESS_FINE_LOCATION
 		String[] permissions = {Manifest.permission.ACCESS_FINE_LOCATION
 //                ,Manifest.permission.READ_EXTERNAL_STORAGE,
 //                ,Manifest.permission.READ_EXTERNAL_STORAGE,
 //                Manifest.permission.CAMERA,
 //                Manifest.permission.CAMERA,
@@ -300,7 +303,7 @@ public class MainActivity extends BaseActivity implements ImStatusListener, NetW
 				PreferenceUtils.putInt(MainActivity.NEW_FUNCTION_NOTICE, 1);
 				PreferenceUtils.putInt(MainActivity.NEW_FUNCTION_NOTICE, 1);
 			}
 			}
 		/*	else if (checkedId == R.id.main_tab_four) {
 		/*	else if (checkedId == R.id.main_tab_four) {
-                if (mGroupChatFragment == null) {
+	            if (mGroupChatFragment == null) {
 					mGroupChatFragment = new GroupChatFragment();
 					mGroupChatFragment = new GroupChatFragment();
 				}
 				}
 				changeFragment(mGroupChatFragment, TAG_GROUP_CHAT);//群聊
 				changeFragment(mGroupChatFragment, TAG_GROUP_CHAT);//群聊
@@ -571,9 +574,11 @@ public class MainActivity extends BaseActivity implements ImStatusListener, NetW
 //        }
 //        }
 //        dbManager.closeDB();
 //        dbManager.closeDB();
 		doHiTask();
 		doHiTask();
+		autoPresenter = AutoPresenter.onCreate();
 		handler.post(new Runnable() {
 		handler.post(new Runnable() {
 			@Override
 			@Override
 			public void run() {
 			public void run() {
+				if (!BaseConfig.isDebug())
 				startService(new Intent(MainActivity.this, AutoErpService.class));
 				startService(new Intent(MainActivity.this, AutoErpService.class));
 			}
 			}
 		});
 		});
@@ -581,7 +586,7 @@ public class MainActivity extends BaseActivity implements ImStatusListener, NetW
 
 
 	}
 	}
 
 
-
+	private AutoPresenter autoPresenter;
 	private Handler handler = new Handler();
 	private Handler handler = new Handler();
 	private Runnable runnable = new MyRunnable();
 	private Runnable runnable = new MyRunnable();
 	private Boolean firstRed = true;
 	private Boolean firstRed = true;
@@ -869,6 +874,7 @@ public class MainActivity extends BaseActivity implements ImStatusListener, NetW
 		UserDao.getInstance().updateUnLineTime(MyApplication.getInstance().mLoginUser.getUserId(), time);
 		UserDao.getInstance().updateUnLineTime(MyApplication.getInstance().mLoginUser.getUserId(), time);
 	}
 	}
 
 
+
 	@Override
 	@Override
 	protected void onDestroy() {
 	protected void onDestroy() {
 		saveOfflineTime();
 		saveOfflineTime();
@@ -881,6 +887,9 @@ public class MainActivity extends BaseActivity implements ImStatusListener, NetW
 		unregisterReceiver(mUserLogInOutReceiver);
 		unregisterReceiver(mUserLogInOutReceiver);
 		screenListener.unregisterListener();
 		screenListener.unregisterListener();
 		//移除广播接收
 		//移除广播接收
+		if (autoPresenter != null) {
+			autoPresenter.onDestroy();
+		}
 		super.onDestroy();
 		super.onDestroy();
 	}
 	}
 
 
@@ -1045,7 +1054,6 @@ public class MainActivity extends BaseActivity implements ImStatusListener, NetW
 	}
 	}
 
 
 
 
-
 	private void initMsgUnReadTips(String userId) {// 初始化未读条数
 	private void initMsgUnReadTips(String userId) {// 初始化未读条数
 		// 消息未读条数累加
 		// 消息未读条数累加
 		mMsgUnReadNum = FriendDao.getInstance().getMsgUnReadNumTotal(userId);
 		mMsgUnReadNum = FriendDao.getInstance().getMsgUnReadNumTotal(userId);

+ 191 - 161
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/message/MessageFragment.java

@@ -9,11 +9,13 @@ import android.text.Editable;
 import android.view.Gravity;
 import android.view.Gravity;
 import android.view.LayoutInflater;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.View;
+import android.view.ViewGroup;
 import android.widget.AdapterView;
 import android.widget.AdapterView;
+import android.widget.BaseAdapter;
+import android.widget.ImageView;
 import android.widget.LinearLayout;
 import android.widget.LinearLayout;
-import android.widget.ListView;
 import android.widget.PopupWindow;
 import android.widget.PopupWindow;
-import android.widget.RelativeLayout;
+import android.widget.ScrollView;
 import android.widget.TextView;
 import android.widget.TextView;
 
 
 import com.common.LogUtil;
 import com.common.LogUtil;
@@ -21,26 +23,29 @@ import com.common.data.DateFormatUtil;
 import com.common.data.ListUtils;
 import com.common.data.ListUtils;
 import com.common.data.StringUtil;
 import com.common.data.StringUtil;
 import com.common.preferences.PreferenceUtils;
 import com.common.preferences.PreferenceUtils;
+import com.common.preferences.RedSpUtil;
 import com.common.system.DisplayUtil;
 import com.common.system.DisplayUtil;
 import com.core.api.wxapi.ApiPlatform;
 import com.core.api.wxapi.ApiPlatform;
 import com.core.api.wxapi.ApiUtils;
 import com.core.api.wxapi.ApiUtils;
-import com.core.app.Constants;
 import com.core.app.MyApplication;
 import com.core.app.MyApplication;
 import com.core.base.EasyFragment;
 import com.core.base.EasyFragment;
 import com.core.model.Friend;
 import com.core.model.Friend;
 import com.core.utils.CommonUtil;
 import com.core.utils.CommonUtil;
 import com.core.utils.sortlist.BaseSortModel;
 import com.core.utils.sortlist.BaseSortModel;
 import com.core.widget.DrawableCenterTextView;
 import com.core.widget.DrawableCenterTextView;
+import com.core.widget.MyListView;
+import com.core.widget.RedView;
 import com.core.widget.VoiceSearchView;
 import com.core.widget.VoiceSearchView;
 import com.core.widget.listener.EditChangeListener;
 import com.core.widget.listener.EditChangeListener;
 import com.handmark.pulltorefresh.library.PullToRefreshBase;
 import com.handmark.pulltorefresh.library.PullToRefreshBase;
-import com.handmark.pulltorefresh.library.PullToRefreshListView;
+import com.handmark.pulltorefresh.library.PullToRefreshScrollView;
 import com.lidroid.xutils.ViewUtils;
 import com.lidroid.xutils.ViewUtils;
 import com.lidroid.xutils.view.annotation.ViewInject;
 import com.lidroid.xutils.view.annotation.ViewInject;
 import com.modular.appmessages.activity.ProcessB2BActivity;
 import com.modular.appmessages.activity.ProcessB2BActivity;
 import com.modular.appmessages.activity.ProcessMsgActivity;
 import com.modular.appmessages.activity.ProcessMsgActivity;
 import com.modular.appmessages.activity.Subscription2Activity;
 import com.modular.appmessages.activity.Subscription2Activity;
 import com.modular.appmessages.adapter.MessageAdapter;
 import com.modular.appmessages.adapter.MessageAdapter;
+import com.modular.appmessages.model.MessageHeader;
 import com.modular.appmessages.presenter.MessagePresenter;
 import com.modular.appmessages.presenter.MessagePresenter;
 import com.modular.appmessages.presenter.imp.IMessageView;
 import com.modular.appmessages.presenter.imp.IMessageView;
 import com.uas.appme.pedometer.view.UURanking;
 import com.uas.appme.pedometer.view.UURanking;
@@ -63,43 +68,24 @@ public class MessageFragment extends EasyFragment implements IMessageView, View.
 
 
 	@ViewInject(R.id.message_net_set)
 	@ViewInject(R.id.message_net_set)
 	private DrawableCenterTextView message_net_set;
 	private DrawableCenterTextView message_net_set;
-	@ViewInject(R.id.pull_refresh_list)
-	private PullToRefreshListView listView;
+	@ViewInject(R.id.pullScrollView)
+	private PullToRefreshScrollView pullScrollView;
+	@ViewInject(R.id.headerLV)
+	private MyListView headerLV;
+	@ViewInject(R.id.contentLV)
+	private MyListView contentLV;
 
 
 	private Activity mContext;
 	private Activity mContext;
 	private MessagePresenter presenter;
 	private MessagePresenter presenter;
-	private MessageAdapter mAdapter = null;
+	private MessageAdapter mAdapter;
 	private PopupWindow setWindow;
 	private PopupWindow setWindow;
 	private int clickPosition = 0;
 	private int clickPosition = 0;
 	private Boolean platform;
 	private Boolean platform;
-	//    private RelativeLayout news_notice_rl;
-	private RelativeLayout subscribe_rl;
-	public static final int REQUESTCODE = 0xa1;
+
 	private Comparator<BaseSortModel<Friend>> comparator;
 	private Comparator<BaseSortModel<Friend>> comparator;
-	private TextView dingyue_num;
-	private TextView tv_dingyue_desc;
-
-	//头文件处理
-	private TextView schedule_num_tv;//审批流
-	private TextView waitting_work_num_tv;//待办工作
-	private TextView subscribe_num_tv;//我的订阅
-	private TextView booking_num_tv;//小秘书预约
-
-	private TextView schedule_content_tv;//审批流
-	private TextView waitting_work_content_tv;//待办工作
-	private TextView subscribe_content_tv;//我的订阅
-	private TextView book_content_tv;
-
-	private TextView schedule_time_tv;//审批流
-	private TextView waitting_work_time_tv;//待办工作
-	private TextView subscribe_time_tv;//我的订阅
-	private TextView book_time_tv;
-	private TextView tv_book_num;
-	private MessagePresenter.UnReaderListener unReaderListener;
-	private RelativeLayout uustep_rl;
-	private TextView uustepRedtv;
-	private View uustep_v;
 
 
+	private HeadAdapter headAdapter;
+	private MessagePresenter.UnReaderListener unReaderListener;
 
 
 	@Override
 	@Override
 	public void onAttach(Context context) {
 	public void onAttach(Context context) {
@@ -139,26 +125,25 @@ public class MessageFragment extends EasyFragment implements IMessageView, View.
 	public void onResume() {
 	public void onResume() {
 		super.onResume();
 		super.onResume();
 		presenter.loadData();
 		presenter.loadData();
-		String user = CommonUtil.getUserRole();
-		LogUtil.d(TAG,"user:"+user);
-		if (user.equals("1")||user.equals("3")) {
-			view.findViewById(R.id.schedule_rl).setVisibility(View.GONE);//审批流
-			view.findViewById(R.id.waitting_work_rl).setVisibility(View.GONE);//待办工作
-			view.findViewById(R.id.subscribe_rl).setVisibility(View.GONE);//我的订阅
-		}else{
-			view.findViewById(R.id.schedule_rl).setVisibility(View.VISIBLE);//审批流
-			view.findViewById(R.id.waitting_work_rl).setVisibility(View.VISIBLE);//待办工作
-			view.findViewById(R.id.subscribe_rl).setVisibility(View.VISIBLE);//我的订阅
-		}
-		if (PreferenceUtils.getInt(MyApplication.getInstance(), Constant.UU_STEP) == 1)
-			uustep_rl.setVisibility(View.VISIBLE);
-		else
-			uustep_rl.setVisibility(View.GONE);
+		
+//		String user = CommonUtil.getUserRole();
+//		LogUtil.d(TAG,"user:"+user);
+//		if (user.equals("1")||user.equals("3")) {
+//			view.findViewById(R.id.schedule_rl).setVisibility(View.GONE);//审批流
+//			view.findViewById(R.id.waitting_work_rl).setVisibility(View.GONE);//待办工作
+//			view.findViewById(R.id.subscribe_rl).setVisibility(View.GONE);//我的订阅
+//		}else{
+//			view.findViewById(R.id.schedule_rl).setVisibility(View.VISIBLE);//审批流
+//			view.findViewById(R.id.waitting_work_rl).setVisibility(View.VISIBLE);//待办工作
+//			view.findViewById(R.id.subscribe_rl).setVisibility(View.VISIBLE);//我的订阅
+//		}
+//		if (PreferenceUtils.getInt(MyApplication.getInstance(), Constant.UU_STEP) == 1)
+//			uustep_rl.setVisibility(View.VISIBLE);
+//		else
+//			uustep_rl.setVisibility(View.GONE);
 	}
 	}
-
+	
 	private void initEvent() {
 	private void initEvent() {
-
-
 		message_net_set.setOnClickListener(this);
 		message_net_set.setOnClickListener(this);
 		voiceSearchView.addTextChangedListener(new EditChangeListener() {
 		voiceSearchView.addTextChangedListener(new EditChangeListener() {
 			@Override
 			@Override
@@ -166,14 +151,13 @@ public class MessageFragment extends EasyFragment implements IMessageView, View.
 				presenter.search(s.toString());
 				presenter.search(s.toString());
 			}
 			}
 		});
 		});
-		//下拉刷新
-		listView.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener<ListView>() {
+		pullScrollView.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener<ScrollView>() {
 			@Override
 			@Override
-			public void onRefresh(PullToRefreshBase<ListView> refreshView) {
+			public void onRefresh(PullToRefreshBase<ScrollView> refreshView) {
 				presenter.loadData();
 				presenter.loadData();
 			}
 			}
 		});
 		});
-		listView.getRefreshableView().setOnItemClickListener(new AdapterView.OnItemClickListener() {
+		contentLV.setOnItemClickListener(new AdapterView.OnItemClickListener() {
 			@Override
 			@Override
 			public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
 			public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
 				if (mAdapter == null || ListUtils.isEmpty(mAdapter.getmFriendList()) || mAdapter.getCount() <= id || id < 0)
 				if (mAdapter == null || ListUtils.isEmpty(mAdapter.getmFriendList()) || mAdapter.getCount() <= id || id < 0)
@@ -185,8 +169,7 @@ public class MessageFragment extends EasyFragment implements IMessageView, View.
 				}
 				}
 			}
 			}
 		});
 		});
-
-		listView.getRefreshableView().setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
+		contentLV.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
 			@Override
 			@Override
 			public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
 			public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
 				if (mAdapter == null || ListUtils.isEmpty(mAdapter.getmFriendList()) || mAdapter.getCount() <= id)
 				if (mAdapter == null || ListUtils.isEmpty(mAdapter.getmFriendList()) || mAdapter.getCount() <= id)
@@ -201,67 +184,37 @@ public class MessageFragment extends EasyFragment implements IMessageView, View.
 
 
 
 
 	private void initView() {
 	private void initView() {
-		listView.getRefreshableView().addHeaderView(initHeaderView());
-		listView.setMode(PullToRefreshBase.Mode.PULL_FROM_START);
-		mAdapter = new MessageAdapter(null, mContext);
-		listView.getRefreshableView().setAdapter(mAdapter);
 		presenter = new MessagePresenter(mContext, this, unReaderListener);
 		presenter = new MessagePresenter(mContext, this, unReaderListener);
+		initHeaderView();
+		pullScrollView.setMode(PullToRefreshBase.Mode.PULL_FROM_START);
+		mAdapter = new MessageAdapter(null, mContext);
+		contentLV.setAdapter(mAdapter);
 	}
 	}
-    private static final String TAG = "MessageFragment";
-	View view;
-	private View initHeaderView() {
-		view = LayoutInflater.from(mContext).inflate(R.layout.new_message_header, null);
-		subscribe_rl = (RelativeLayout) view.findViewById(R.id.subscribe_rl);
-		schedule_num_tv = (TextView) view.findViewById(R.id.schedule_num_tv);//审批流
-		waitting_work_num_tv = (TextView) view.findViewById(R.id.waitting_work_num_tv);//待办工作
-		subscribe_num_tv = (TextView) view.findViewById(R.id.subscribe_num_tv);//我的订阅
-		booking_num_tv = (TextView) view.findViewById(R.id.booking_num_tv);//小秘书
-		tv_book_num = (TextView) view.findViewById(R.id.tv_book_num);//小秘书
-		schedule_content_tv = (TextView) view.findViewById(R.id.schedule_content_tv);//审批流
-		waitting_work_content_tv = (TextView) view.findViewById(R.id.waitting_work_content_tv);//待办工作
-		subscribe_content_tv = (TextView) view.findViewById(R.id.subscribe_content_tv);//我的订阅
-		book_content_tv = (TextView) view.findViewById(R.id.book_content_tv);//预约内容
-		schedule_time_tv = (TextView) view.findViewById(R.id.schedule_time_tv);//审批流
-		waitting_work_time_tv = (TextView) view.findViewById(R.id.waitting_work_time_tv);//待办工作
-		subscribe_time_tv = (TextView) view.findViewById(R.id.subscribe_time_tv);//我的订阅
-		book_time_tv = (TextView) view.findViewById(R.id.book_time_tv);
-		dingyue_num = (TextView) view.findViewById(R.id.tv_dingYue_num);//订阅红点
-		tv_dingyue_desc = (TextView) view.findViewById(R.id.tv_dingyue_desc);//订阅红点
-		uustepRedtv = (TextView) view.findViewById(R.id.uustep_red_tv);  //UU运动红点
-		uustep_v = view.findViewById(R.id.uustep_v);
-
-		if (PreferenceUtils.getBoolean(MyApplication.getInstance(),Constant.UU_STEP_RED))
-			uustepRedtv.setVisibility(View.GONE);
-
-		uustep_rl = (RelativeLayout) view.findViewById(R.id.uustep_rl);
-		if (CommonUtil.getSharedPreferencesBoolean(MyApplication.getInstance(), Constants.new_dingyue)) {
-			dingyue_num.setVisibility(View.GONE);
-			tv_dingyue_desc.setVisibility(View.GONE);
-		}
-		if (CommonUtil.getSharedPreferencesBoolean(MyApplication.getInstance(), Constants.SET_BOOKING)) {
-			tv_book_num.setVisibility(View.GONE);
-		}
-		view.findViewById(R.id.schedule_rl).setOnClickListener(this);//审批流
-		view.findViewById(R.id.waitting_work_rl).setOnClickListener(this);//待办工作
-		view.findViewById(R.id.subscribe_rl).setOnClickListener(this);//我的订阅
-		view.findViewById(R.id.booking_rl).setOnClickListener(this);//小秘书
-		view.findViewById(R.id.uustep_rl).setOnClickListener(this);//UU运动
-		if (platform) {
-			subscribe_rl.setVisibility(View.GONE);
-		} else {
-			subscribe_rl.setVisibility(View.VISIBLE);
-		}
-		if (PreferenceUtils.getInt(MyApplication.getInstance(), Constant.UU_STEP) == 1) {
-			uustep_rl.setVisibility(View.VISIBLE);
-			uustep_v.setVisibility(View.VISIBLE);
-		}
-		else {
-			uustep_rl.setVisibility(View.GONE);
-			uustep_v.setVisibility(View.GONE);
-		}
-		return view;
+
+	private void initHeaderView() {
+		headAdapter = new HeadAdapter(presenter.getHeaderModels());
+		headerLV.setAdapter(headAdapter);
+		headerLV.setOnItemClickListener(new AdapterView.OnItemClickListener() {
+			@Override
+			public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
+				MessageHeader model = headAdapter.getItemModel(position);
+				if (model != null) {
+					if (!model.isHideRed()) {//如果没有被隐藏,需要更新
+						model.hideRed();
+						headAdapter.notifyDataSetChanged();
+					}
+					presenter.turn2ActByHeader((Activity) ct, model);
+				}
+
+			}
+		});
 	}
 	}
 
 
+	private void showRv(String key, Object foodRv) {
+		if (foodRv != null && !StringUtil.isEmpty(key) && foodRv instanceof View) {
+			((View) foodRv).setVisibility(RedSpUtil.api().getBoolean(key, false) ? View.GONE : View.VISIBLE);
+		}
+	}
 
 
 	private void showPopupWindow() {
 	private void showPopupWindow() {
 		if (setWindow == null) initPopupWindow();
 		if (setWindow == null) initPopupWindow();
@@ -310,23 +263,18 @@ public class MessageFragment extends EasyFragment implements IMessageView, View.
 	@Override
 	@Override
 	public void onClick(View v) {
 	public void onClick(View v) {
 		switch (v.getId()) {
 		switch (v.getId()) {
-			case R.id.booking_rl:
-				startActivity(new Intent("com.modular.booking.BookingListActivity"));
-				tv_book_num.setVisibility(View.GONE);
-				CommonUtil.setSharedPreferences(MyApplication.getInstance(), Constants.SET_BOOKING, true);
-				break;
 			case R.id.message_net_set://点击无网络情况
 			case R.id.message_net_set://点击无网络情况
 				startActivity(new Intent(Settings.ACTION_SETTINGS));
 				startActivity(new Intent(Settings.ACTION_SETTINGS));
 				break;
 				break;
 			case R.id.schedule_rl://审批流
 			case R.id.schedule_rl://审批流
-				if (ApiUtils.getApiModel() instanceof ApiPlatform) {
+				if (platform) {
 					startActivity(new Intent(mContext, ProcessB2BActivity.class));
 					startActivity(new Intent(mContext, ProcessB2BActivity.class));
 				} else {
 				} else {
 					startActivity(new Intent(mContext, ProcessMsgActivity.class));
 					startActivity(new Intent(mContext, ProcessMsgActivity.class));
 				}
 				}
 				break;
 				break;
 			case R.id.waitting_work_rl://待办工作
 			case R.id.waitting_work_rl://待办工作
-				if (ApiUtils.getApiModel() instanceof ApiPlatform) {
+				if (platform) {
 					startActivity(new Intent(mContext, TaskB2BActivity.class));
 					startActivity(new Intent(mContext, TaskB2BActivity.class));
 				} else {
 				} else {
 					startActivity(new Intent(mContext, TaskActivity.class));
 					startActivity(new Intent(mContext, TaskActivity.class));
@@ -335,40 +283,32 @@ public class MessageFragment extends EasyFragment implements IMessageView, View.
 			case R.id.subscribe_rl://我的订阅
 			case R.id.subscribe_rl://我的订阅
 				presenter.setSubReadTime(DateFormatUtil.long2Str(DateFormatUtil.YMD));
 				presenter.setSubReadTime(DateFormatUtil.long2Str(DateFormatUtil.YMD));
 				startActivity(new Intent(mContext, Subscription2Activity.class));
 				startActivity(new Intent(mContext, Subscription2Activity.class));
-				CommonUtil.setSharedPreferences(MyApplication.getInstance(), Constants.new_dingyue, true);
-				dingyue_num.setVisibility(View.GONE);
-				tv_dingyue_desc.setVisibility(View.GONE);
 				break;
 				break;
 			case R.id.msg_delete_tv://删除
 			case R.id.msg_delete_tv://删除
 				break;
 				break;
 			case R.id.msg_markread_tv://标为已读
 			case R.id.msg_markread_tv://标为已读
 				break;
 				break;
-//            case R.id.notice_rl: //新闻通知
-//                Intent intent = new Intent(mContext, NoticeMenuActivity.class);
-////                intent.putExtra(NoticeMenuActivity.GONGGAO, GONGGAO_count);
-////                intent.putExtra(NoticeMenuActivity.NOTICE, NOTICE_count);
-////                intent.putExtra(NoticeMenuActivity.NES, NES_count);
-//                startActivityForResult(intent, REQUESTCODE);
-//                break;
+
 			case R.id.uustep_rl:
 			case R.id.uustep_rl:
-//				startActivity(new Intent(mContext, UUSportActivity.class));
+				//				startActivity(new Intent(mContext, UUSportActivity.class));
 				startActivity(new Intent(mContext, UURanking.class));
 				startActivity(new Intent(mContext, UURanking.class));
-				uustepRedtv.setVisibility(View.GONE);
+//				uustepRedtv.setVisibility(View.GONE);
 				PreferenceUtils.putBoolean(Constant.UU_STEP_RED, true);
 				PreferenceUtils.putBoolean(Constant.UU_STEP_RED, true);
 				break;
 				break;
 		}
 		}
-
+	
 	}
 	}
 
 
 
 
 	@Override
 	@Override
 	public void showModel(List<BaseSortModel<Friend>> models) {
 	public void showModel(List<BaseSortModel<Friend>> models) {
 		sortModels(models);
 		sortModels(models);
-		if (listView.isRefreshing())
-			listView.onRefreshComplete();
+		if (pullScrollView.isRefreshing()) {
+			pullScrollView.onRefreshComplete();
+		}
 		if (mAdapter == null) {
 		if (mAdapter == null) {
 			mAdapter = new MessageAdapter(models, mContext);
 			mAdapter = new MessageAdapter(models, mContext);
-			listView.getRefreshableView().setAdapter(mAdapter);
+			contentLV.setAdapter(mAdapter);
 		} else {
 		} else {
 			mAdapter.setmFriendList(models);
 			mAdapter.setmFriendList(models);
 			mAdapter.notifyDataSetChanged();
 			mAdapter.notifyDataSetChanged();
@@ -395,23 +335,24 @@ public class MessageFragment extends EasyFragment implements IMessageView, View.
 
 
 
 
 	@Override
 	@Override
-	public void updateHeaderView(int postion, int num, String subTitle, String time) {
-		switch (postion) {
-			case 0:
-				updateHeaderView(schedule_num_tv, schedule_content_tv, schedule_time_tv, num, subTitle, time);
-				break;
-			case 1:
-				updateHeaderView(waitting_work_num_tv, waitting_work_content_tv, waitting_work_time_tv, num, subTitle, time);
-				break;
-			case 2:
-				updateHeaderView(subscribe_num_tv, subscribe_content_tv, subscribe_time_tv, num, subTitle, time);
-				break;
-			case 4:
-				LogUtil.d("Test", "updateHeaderView:" + num);
-				updateHeaderView(booking_num_tv, book_content_tv, book_time_tv, num, subTitle, time);
-				break;
+	public void updateHeaderView(int type, int num, String subTitle, String time) {
+
+		if (headAdapter != null && !ListUtils.isEmpty(headAdapter.getModels())) {
+			boolean isUpdated = false;
+			for (MessageHeader e : headAdapter.getModels()) {
+				if (e.getType() == type) {
+					isUpdated = true;
+					e.setSubDoc(subTitle);
+					e.setRedNum(num);
+					e.setTime(time);
+				}
+			}
+			if (isUpdated) {
+				headAdapter.notifyDataSetChanged();
+			}
+
 		}
 		}
-		listView.onRefreshComplete();
+		pullScrollView.onRefreshComplete();
 	}
 	}
 
 
 	@Override
 	@Override
@@ -424,17 +365,106 @@ public class MessageFragment extends EasyFragment implements IMessageView, View.
 			}
 			}
 		}
 		}
 	}
 	}
+	
+
+	private class HeadAdapter extends BaseAdapter {
+		List<MessageHeader> models;
+
+		public HeadAdapter(List<MessageHeader> models) {
+			this.models = models;
+		}
+
+		public List<MessageHeader> getModels() {
+			return models;
+		}
+
+		public MessageHeader getItemModel(int position) {
+			if (ListUtils.getSize(models) > position) {
+				return models.get(position);
+			} else {
+				return null;
+			}
+		}
+
+
+		public void updateModel(List<MessageHeader> models) {
+			this.models = models;
+			notifyDataSetChanged();
+		}
+
+		@Override
+		public int getCount() {
+			return ListUtils.getSize(models);
+		}
 
 
+		@Override
+		public Object getItem(int position) {
+			return models.get(position);
+		}
 
 
-	private void updateHeaderView(TextView num_tv, TextView content_tv, TextView time_tv, int num, String subTitle, String time) {
-		if (num_tv != null) {
-			num_tv.setVisibility(num == 0 ? View.GONE : View.VISIBLE);
-			num_tv.setText("" + num);
+		@Override
+		public long getItemId(int position) {
+			return position;
 		}
 		}
-		if (content_tv != null)
-			content_tv.setText(StringUtil.isEmpty(subTitle) ? "" : subTitle);
-		if (time_tv != null)
-			time_tv.setText(num == 0 ? "" : (StringUtil.isEmpty(time)) ? getString(R.string.friendly_time_just_now) : time);
+
+		@Override
+		public View getView(int position, View convertView, ViewGroup parent) {
+			ViewHodler hodler = null;
+			if (convertView == null) {
+				hodler = new ViewHodler();
+				convertView = LayoutInflater.from(ct).inflate(R.layout.item_message_header, null);
+				hodler.headerImg = (ImageView) convertView.findViewById(R.id.headerImg);
+				hodler.headerNumTv = (TextView) convertView.findViewById(R.id.headerNumTv);
+				hodler.headerRv = (RedView) convertView.findViewById(R.id.headerRv);
+				hodler.titleTv = (TextView) convertView.findViewById(R.id.titleTv);
+				hodler.headerSubTv = (TextView) convertView.findViewById(R.id.headerSubTv);
+				hodler.timeTv = (TextView) convertView.findViewById(R.id.timeTv);
+				convertView.setTag(hodler);
+			} else {
+				hodler = (ViewHodler) convertView.getTag();
+			}
+			try {
+				bindData(getItemModel(position), hodler);
+			} catch (Exception e) {
+				e.printStackTrace();
+			}
+			return convertView;
+		}
+
+		private class ViewHodler {
+			ImageView headerImg;
+			TextView headerNumTv;
+			RedView headerRv;
+			TextView titleTv;
+			TextView headerSubTv;
+			TextView timeTv;
+		}
+
+		private void bindData(MessageHeader model, ViewHodler hodler) throws Exception {
+			if (model != null) {
+				hodler.headerImg.setImageResource(model.getIcon());
+				if (model.getRedNum() > 0) {
+					hodler.headerNumTv.setVisibility(View.VISIBLE);
+					hodler.headerNumTv.setText(String.valueOf(model.getRedNum()));
+				} else {
+					hodler.headerNumTv.setVisibility(View.GONE);
+					hodler.headerNumTv.setText("");
+				}
+				hodler.titleTv.setText(model.getName());
+				hodler.headerSubTv.setText(model.getSubDoc());
+				if (model.isHideRed()) {
+					hodler.headerRv.setVisibility(View.GONE);
+					hodler.timeTv.setVisibility(View.VISIBLE);
+					hodler.timeTv.setText(model.getTime());
+				} else {
+					hodler.headerRv.setVisibility(View.VISIBLE);
+					hodler.headerRv.setName(model.getRedMessage());
+					hodler.timeTv.setVisibility(View.GONE);
+				}
+			}
+		}
+
 	}
 	}
 
 
+
 }
 }

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

@@ -15,6 +15,7 @@ import android.util.Log;
 
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSON;
 import com.common.LogUtil;
 import com.common.LogUtil;
+import com.common.config.BaseConfig;
 import com.common.data.DateFormatUtil;
 import com.common.data.DateFormatUtil;
 import com.common.data.ListUtils;
 import com.common.data.ListUtils;
 import com.common.data.StringUtil;
 import com.common.data.StringUtil;
@@ -301,6 +302,7 @@ public class AutoErpService extends Service {
 	 * @throws Exception
 	 * @throws Exception
 	 */
 	 */
 	private void reckonWork() {
 	private void reckonWork() {
+		if (BaseConfig.isDebug()) return;
 		if (System.currentTimeMillis() - updateTime < 30000) {
 		if (System.currentTimeMillis() - updateTime < 30000) {
 			return;
 			return;
 		}
 		}

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

@@ -44,7 +44,6 @@ import android.widget.LinearLayout;
 import android.widget.TextView;
 import android.widget.TextView;
 import android.widget.Toast;
 import android.widget.Toast;
 
 
-import com.afollestad.materialdialogs.MaterialDialog;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONException;
 import com.alibaba.fastjson.JSONException;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.JSONObject;
@@ -54,31 +53,31 @@ import com.common.config.BaseConfig;
 import com.common.data.CalendarUtil;
 import com.common.data.CalendarUtil;
 import com.common.data.DateFormatUtil;
 import com.common.data.DateFormatUtil;
 import com.common.data.StringUtil;
 import com.common.data.StringUtil;
+import com.common.system.SystemUtil;
+import com.core.api.wxapi.ApiPlatform;
+import com.core.api.wxapi.ApiUtils;
 import com.core.app.MyApplication;
 import com.core.app.MyApplication;
+import com.core.broadcast.MsgBroadcast;
+import com.core.dao.DBManager;
+import com.core.dao.SignAutoLogDao;
+import com.core.model.B2BMsg;
 import com.core.model.Friend;
 import com.core.model.Friend;
 import com.core.model.XmppMessage;
 import com.core.model.XmppMessage;
 import com.core.utils.TimeUtils;
 import com.core.utils.TimeUtils;
+import com.core.utils.time.wheel.DateTimePicker;
+import com.core.xmpp.dao.ChatMessageDao;
+import com.core.xmpp.dao.FriendDao;
+import com.core.xmpp.listener.ChatMessageListener;
+import com.core.xmpp.model.ChatMessage;
+import com.core.xmpp.model.SignAutoLogEntity;
 import com.nostra13.universalimageloader.core.DisplayImageOptions;
 import com.nostra13.universalimageloader.core.DisplayImageOptions;
 import com.nostra13.universalimageloader.core.assist.ImageScaleType;
 import com.nostra13.universalimageloader.core.assist.ImageScaleType;
 import com.umeng.socialize.UMShareListener;
 import com.umeng.socialize.UMShareListener;
 import com.umeng.socialize.bean.SHARE_MEDIA;
 import com.umeng.socialize.bean.SHARE_MEDIA;
-import com.xzjmyk.pm.activity.BuildConfig;
 import com.xzjmyk.pm.activity.R;
 import com.xzjmyk.pm.activity.R;
-import com.core.xmpp.model.ChatMessage;
-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.core.dao.SignAutoLogDao;
 import com.xzjmyk.pm.activity.ui.erp.activity.WebViewCommActivity;
 import com.xzjmyk.pm.activity.ui.erp.activity.WebViewCommActivity;
 import com.xzjmyk.pm.activity.ui.erp.activity.WebViewLoadActivity;
 import com.xzjmyk.pm.activity.ui.erp.activity.WebViewLoadActivity;
-import com.core.dao.DBManager;
-import com.core.model.B2BMsg;
 import com.xzjmyk.pm.activity.ui.erp.view.DateTimePickerDialog;
 import com.xzjmyk.pm.activity.ui.erp.view.DateTimePickerDialog;
-import com.core.utils.time.wheel.DateTimePicker;
-import com.core.api.wxapi.ApiPlatform;
-import com.core.api.wxapi.ApiUtils;
-import com.core.xmpp.listener.ChatMessageListener;
 
 
 import java.io.File;
 import java.io.File;
 import java.io.FileNotFoundException;
 import java.io.FileNotFoundException;
@@ -1353,24 +1352,8 @@ public class CommonUtil {
      * @desc:打电话确认框
      * @desc:打电话确认框
      * @author:Arison on 2016/11/3
      * @author:Arison on 2016/11/3
      */
      */
-    public static void phoneAction(final Context mContext, final String phone) {
-        MaterialDialog dialog = new MaterialDialog.Builder(mContext).title(R.string.dialog_confim_phone).content(mContext.getString(R.string.dialog_phone) + phone)
-                .positiveText(R.string.dialog_phone_action).negativeText(R.string.common_cancel).autoDismiss(false).callback(new MaterialDialog.ButtonCallback() {
-                    @Override
-                    public void onPositive(MaterialDialog dialog) {
-                        // 用intent启动拨打电话
-                        Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + phone));
-                        mContext.startActivity(intent);
-                    }
-
-                    @Override
-                    public void onNegative(MaterialDialog dialog) {
-                        super.onNegative(dialog);
-                        dialog.dismiss();
-                    }
-                }).build();
-
-        dialog.show();
+    public static void phoneAction( Context mContext,  String phone) {
+        SystemUtil.phoneAction(mContext,phone);
     }
     }
 
 
 
 

+ 61 - 35
WeiChat/src/main/res/layout/fragment_new_message.xml

@@ -1,47 +1,73 @@
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:layout_height="match_parent"
     android:background="#ebe9e9"
     android:background="#ebe9e9"
-    android:orientation="vertical" >
-
+    xmlns:slide="http://schemas.android.com/apk/res-auto"
+    android:orientation="vertical">
 
 
     <com.core.widget.VoiceSearchView
     <com.core.widget.VoiceSearchView
         android:id="@+id/voiceSearchView"
         android:id="@+id/voiceSearchView"
         android:layout_width="match_parent"
         android:layout_width="match_parent"
-        android:layout_height="48dp" />
+        android:layout_height="48dp"/>
 
 
-    <com.core.widget.DrawableCenterTextView
-        android:id="@+id/message_net_set"
-        android:layout_width="match_parent"
-        android:layout_height="35dp"
-        android:background="#fcd8d8"
-        android:text="当前网络不可用,请检查您的网络设置"
-        android:gravity="center_vertical"
-        android:textColor="@color/black"
-        android:drawableLeft="@drawable/ic_net_noticce"
-        android:drawablePadding="10dp"
-        android:visibility="gone"/>
-
-    <com.handmark.pulltorefresh.library.PullToRefreshListView
-        xmlns:slide="http://schemas.android.com/apk/res-auto"
-        android:id="@+id/pull_refresh_list"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:dividerHeight="@dimen/line"
-        android:divider="@color/item_line"
-        android:background="@color/transparent"
-        app:ptrAnimationStyle="flip"
-        app:ptrDrawableEnd="@drawable/default_ptr_rotate"
-        app:ptrDrawableStart="@drawable/default_ptr_flip"
-        app:ptrHeaderTextColor="@color/black"
-        app:ptrMode="both"
-        app:ptrOverScroll="false"
-        app:ptrScrollingWhileRefreshingEnabled="true"
-        app:ptrShowIndicator="false"
+    <com.handmark.pulltorefresh.library.PullToRefreshScrollView
+        android:id="@+id/pullScrollView"
         slide:slideAnimationTime="200"
         slide:slideAnimationTime="200"
         slide:slideLeftAction="scroll"
         slide:slideLeftAction="scroll"
         slide:slideMode="right"
         slide:slideMode="right"
-        slide:slideRightAction="scroll"/>
+        slide:slideRightAction="scroll"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:background="@color/transparent"
+        android:divider="@color/item_line"
+        android:dividerHeight="@dimen/line"
+        slide:ptrAnimationStyle="flip"
+        slide:ptrDrawableEnd="@drawable/default_ptr_rotate"
+        slide:ptrDrawableStart="@drawable/default_ptr_flip"
+        slide:ptrHeaderTextColor="@color/black"
+        slide:ptrOverScroll="false"
+        slide:ptrScrollingWhileRefreshingEnabled="true"
+        slide:ptrShowIndicator="false">
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:orientation="vertical">
+
+
+            <com.core.widget.DrawableCenterTextView
+                android:id="@+id/message_net_set"
+                android:layout_width="match_parent"
+                android:layout_height="35dp"
+                android:background="#fcd8d8"
+                android:drawableLeft="@drawable/ic_net_noticce"
+                android:drawablePadding="10dp"
+                android:gravity="center_vertical"
+                android:text="当前网络不可用,请检查您的网络设置"
+                android:textColor="@color/black"
+                android:visibility="gone"/>
+
+            <com.core.widget.MyListView
+                android:id="@+id/headerLV"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:divider="@color/item_line"
+                android:dividerHeight="@dimen/line"/>
+
+            <View
+                android:layout_width="match_parent"
+                android:layout_height="@dimen/line"
+                android:background="@color/item_line"/>
+
+            <com.core.widget.MyListView
+                android:id="@+id/contentLV"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:divider="@color/item_line"
+                android:dividerHeight="@dimen/line"/>
+
 
 
-</LinearLayout>
+        </LinearLayout>
+    </com.handmark.pulltorefresh.library.PullToRefreshScrollView>
+</LinearLayout>

+ 6 - 0
app_core/common/src/main/java/com/common/data/DateFormatUtil.java

@@ -265,4 +265,10 @@ public class DateFormatUtil {
     }
     }
 
 
 
 
+    public static long hhmm2Long(String hhMM){
+        if (StringUtil.isEmpty(hhMM)) return 0;
+        String che = long2Str(DateFormatUtil.YMD) + " " + hhMM + ":00";//当天下班时间
+        return DateFormatUtil.str2Long(che, DateFormatUtil.YMD_HMS);
+    }
+
 }
 }

+ 3 - 2
app_core/common/src/main/java/com/common/data/StringUtil.java

@@ -39,8 +39,9 @@ public class StringUtil {
 
 
 	/* 是否是手机号 */
 	/* 是否是手机号 */
 	public static boolean isMobileNumber(String mobiles) {
 	public static boolean isMobileNumber(String mobiles) {
-		Matcher mat = Pattern.compile("^[1][3,5,7,8][0-9]\\d{8}$").matcher(mobiles);
-		return mat.matches();
+//		Matcher mat = Pattern.compile("^[1][3,5,7,8][0-9]\\\\d{8}$").matcher(mobiles);
+//		return mat.matches();
+		return true;
 	}
 	}
 
 
 	public static boolean isEmpty(String input) {
 	public static boolean isEmpty(String input) {

+ 34 - 30
app_core/common/src/main/java/com/common/system/PermissionUtil.java

@@ -7,6 +7,8 @@ import android.os.Build;
 import android.support.v4.app.ActivityCompat;
 import android.support.v4.app.ActivityCompat;
 import android.support.v4.content.ContextCompat;
 import android.support.v4.content.ContextCompat;
 
 
+import com.common.LogUtil;
+
 /**
 /**
  * android6.0以上权限控制
  * android6.0以上权限控制
  * 使用:
  * 使用:
@@ -18,34 +20,36 @@ import android.support.v4.content.ContextCompat;
  * permission.RECORD_AUDIO//录音权限
  * permission.RECORD_AUDIO//录音权限
  */
  */
 public class PermissionUtil {
 public class PermissionUtil {
-    public static final int DEFAULT_REQUEST = 0x31;
-
-
-    // 判断权限集合
-    public static boolean lacksPermissions(Context context, String... permissions) {
-        if (Build.VERSION.SDK_INT >= 23) {
-            for (String permission : permissions) {
-                if (lacksPermission(context, permission)) {
-                    return true;
-                }
-            }
-        } else {
-            PackageManager pm = context.getPackageManager();
-            for (String permission : permissions)
-                if (pm.checkPermission(permission, context.getPackageName()) == PackageManager.PERMISSION_GRANTED)
-                    return true;
-        }
-        return false;
-    }
-
-    // 判断是否缺少权限
-    private static boolean lacksPermission(Context context, String permission) {
-        return ContextCompat.checkSelfPermission(context, permission) ==
-                PackageManager.PERMISSION_DENIED;
-    }
-
-
-    public static void requestPermission(Activity ct, int requestCode, String... permissions) {
-        ActivityCompat.requestPermissions(ct, permissions, requestCode);
-    }
+	public static final int DEFAULT_REQUEST = 0x31;
+
+
+	// 判断权限集合
+	public static boolean lacksPermissions(Context context, String... permissions) {
+		if (Build.VERSION.SDK_INT >= 23) {
+			for (String permission : permissions) {
+				if (lacksPermission(context, permission)) {
+					return true;
+				}
+			}
+		} else {
+			PackageManager pm = context.getPackageManager();
+			for (String permission : permissions)
+				if (pm.checkPermission(permission, context.getPackageName()) == PackageManager.PERMISSION_GRANTED)
+					return true;
+		}
+		return false;
+	}
+
+	// 判断是否缺少权限
+	private static boolean lacksPermission(Context context, String permission) {
+		int status = ContextCompat.checkSelfPermission(context, permission);
+		LogUtil.i("permission="+permission);
+		LogUtil.i("status="+status);
+		return status == PackageManager.PERMISSION_DENIED;
+	}
+
+
+	public static void requestPermission(Activity ct, int requestCode, String... permissions) {
+		ActivityCompat.requestPermissions(ct, permissions, requestCode);
+	}
 }
 }

+ 14 - 1
app_core/common/src/main/java/com/core/app/Constants.java

@@ -314,7 +314,6 @@ public class Constants {
 	public final static int FIRST_MSG_REQUEST = 17022801;
 	public final static int FIRST_MSG_REQUEST = 17022801;
 
 
 	//新功能红点
 	//新功能红点
-	public final static String new_dingyue = "dingyue";
 	public final static String new_signin = "signin";
 	public final static String new_signin = "signin";
 	public final static String new_signout = "signout";
 	public final static String new_signout = "signout";
 	public final static String new_oa = "oa_menu";
 	public final static String new_oa = "oa_menu";
@@ -328,6 +327,20 @@ public class Constants {
 	public final static String SET_BOOKING_TIME = "set_booking_time";
 	public final static String SET_BOOKING_TIME = "set_booking_time";
 	public final static String SET_BOOKING = "set_booking";
 	public final static String SET_BOOKING = "set_booking";
 	public final static String SET_CALL = "set_call";
 	public final static String SET_CALL = "set_call";
+	
+	public final static String MESSAGE_YUYUE = "message_yuyue";
+	public final static String MESSAGE_RUN = "message_run";
+	public final static String MESSAGE_DINGYUE = "message_dingyue";
+
+	public final static String MESSAGE_FOOD = "message_food";
+	public final static String MESSAGE_HAIR = "message_hair";
+	public final static String MESSAGE_KTV = "message_ktv";
+	public final static String MESSAGE_SPORT = "message_sport";
+	public final static String MESSAGE_CLUB = "message_club";
+	public final static String MESSAGE_HOSPITAL = "message_hospital";
+	
+	
+	
 
 
 	public final static String NEW_FUNCTION_NOTICE = "NEWFUNCTIONNOTICE";
 	public final static String NEW_FUNCTION_NOTICE = "NEWFUNCTIONNOTICE";
 	public final static String NEW_EXPENSE_REIMBURSEMENT_NOTICE = "NEWEXPENSEREIMBURSEMENTNOTICE";
 	public final static String NEW_EXPENSE_REIMBURSEMENT_NOTICE = "NEWEXPENSEREIMBURSEMENTNOTICE";

+ 8 - 9
app_core/common/src/main/java/com/core/net/http/http/OAHttpHelper.java

@@ -6,6 +6,7 @@ import android.os.Looper;
 import android.os.Message;
 import android.os.Message;
 
 
 import com.common.LogUtil;
 import com.common.LogUtil;
+import com.common.config.BaseConfig;
 import com.common.data.JSONUtil;
 import com.common.data.JSONUtil;
 import com.common.data.StringUtil;
 import com.common.data.StringUtil;
 import com.core.api.wxapi.ApiConfig;
 import com.core.api.wxapi.ApiConfig;
@@ -13,7 +14,6 @@ import com.core.api.wxapi.ApiModel;
 import com.core.api.wxapi.ApiPlatform;
 import com.core.api.wxapi.ApiPlatform;
 import com.core.api.wxapi.ApiUtils;
 import com.core.api.wxapi.ApiUtils;
 import com.core.app.Constants;
 import com.core.app.Constants;
-import com.core.app.MyApplication;
 import com.core.net.http.ViewUtil;
 import com.core.net.http.ViewUtil;
 import com.core.utils.CommonUtil;
 import com.core.utils.CommonUtil;
 
 
@@ -123,27 +123,26 @@ public class OAHttpHelper extends Handler {
         Message message = Message.obtain();
         Message message = Message.obtain();
         message.setData(bundle);
         message.setData(bundle);
         Request.Mode mode = getMode(request);
         Request.Mode mode = getMode(request);
-        ViewUtil.httpSendRequest(MyApplication.getInstance(), url, request.getParam(), this, null, request.getWhat(), message, bundle, mode == Request.Mode.GET ? "get" : "post");
+        ViewUtil.httpSendRequest(BaseConfig.getContext(), url, request.getParam(), this, null, request.getWhat(), message, bundle, mode == Request.Mode.GET ? "get" : "post");
     }
     }
 
 
     private void loadERP(Request request, OnHttpResultListener listener) throws Exception {
     private void loadERP(Request request, OnHttpResultListener listener) throws Exception {
         LinkedHashMap<String, Object> headers = getHeaders(request);
         LinkedHashMap<String, Object> headers = getHeaders(request);
-        headers.put("Cookie", "JSESSIONID=" + CommonUtil.getSharedPreferences(MyApplication.getInstance(), "sessionId"));
-        String url = CommonUtil.getSharedPreferences(MyApplication.getInstance(), "erp_baseurl") + request.getUrl();
-//        String url = "http://192.168.253.65:8080/ERP//" + request.getUrl();
+        headers.put("Cookie", "JSESSIONID=" + CommonUtil.getSharedPreferences(BaseConfig.getContext(), "sessionId"));
+        String url = CommonUtil.getAppBaseUrl(BaseConfig.getContext()) + request.getUrl();
         Bundle bundle = getBundle(request);
         Bundle bundle = getBundle(request);
         if (listener != null)
         if (listener != null)
             bundle.putSerializable("listener", listener);
             bundle.putSerializable("listener", listener);
         Message message = Message.obtain();
         Message message = Message.obtain();
         message.setData(bundle);
         message.setData(bundle);
         Request.Mode mode = getMode(request);
         Request.Mode mode = getMode(request);
-        ViewUtil.httpSendRequest(MyApplication.getInstance(), url, request.getParam(), this, headers, request.getWhat(), message, bundle, mode == Request.Mode.GET ? "get" : "post");
+        ViewUtil.httpSendRequest(BaseConfig.getContext(), url, request.getParam(), this, headers, request.getWhat(), message, bundle, mode == Request.Mode.GET ? "get" : "post");
     }
     }
 
 
     private void loadB2B(Request request, OnHttpResultListener listener) throws Exception {
     private void loadB2B(Request request, OnHttpResultListener listener) throws Exception {
         Map<String, Object> param = getParam(request);
         Map<String, Object> param = getParam(request);
-        param.put("enuu", CommonUtil.getSharedPreferences(MyApplication.getInstance().getApplicationContext(), "companyEnUu"));
-        param.put("emcode", CommonUtil.getSharedPreferences(MyApplication.getInstance().getApplicationContext(), "b2b_uu"));
+        param.put("enuu", CommonUtil.getSharedPreferences(BaseConfig.getContext(), "companyEnUu"));
+        param.put("emcode", CommonUtil.getEmcode( ));
         LinkedHashMap<String, Object> headers = getHeaders(request);
         LinkedHashMap<String, Object> headers = getHeaders(request);
         headers.put("Cookie", "JSESSIONID=" + ApiConfig.getInstance(ApiUtils.getApiModel()).getmApiBase().getCookie());
         headers.put("Cookie", "JSESSIONID=" + ApiConfig.getInstance(ApiUtils.getApiModel()).getmApiBase().getCookie());
         Bundle bundle = getBundle(request);
         Bundle bundle = getBundle(request);
@@ -153,7 +152,7 @@ public class OAHttpHelper extends Handler {
         message.setData(bundle);
         message.setData(bundle);
         int what = request.getWhat();
         int what = request.getWhat();
         Request.Mode mode = getMode(request);
         Request.Mode mode = getMode(request);
-        ViewUtil.httpSendRequest(MyApplication.getInstance(), request.getUrl(), param, this, headers, what, message, bundle, mode == Request.Mode.GET ? "get" : "post");
+        ViewUtil.httpSendRequest(BaseConfig.getContext(), request.getUrl(), param, this, headers, what, message, bundle, mode == Request.Mode.GET ? "get" : "post");
     }
     }
 
 
     private Map<String, Object> getParam(Request request) throws Exception {
     private Map<String, Object> getParam(Request request) throws Exception {

+ 18 - 3
app_core/common/src/main/java/com/core/net/location/BdLocationHelper.java

@@ -4,7 +4,6 @@ import android.content.Context;
 import android.content.Intent;
 import android.content.Intent;
 import android.support.v4.content.LocalBroadcastManager;
 import android.support.v4.content.LocalBroadcastManager;
 
 
-import com.alibaba.fastjson.JSON;
 import com.baidu.location.BDLocation;
 import com.baidu.location.BDLocation;
 import com.baidu.location.BDLocationListener;
 import com.baidu.location.BDLocationListener;
 import com.baidu.location.LocationClient;
 import com.baidu.location.LocationClient;
@@ -91,6 +90,13 @@ public class BdLocationHelper {
 	 * 重新定位
 	 * 重新定位
 	 **/
 	 **/
 	public void requestLocation() {
 	public void requestLocation() {
+		requestLocation(null);
+	}
+
+	public void requestLocation(OnReceiveListener onReceiveListener) {
+		if (onReceiveListener != null) {
+			this.onReceiveListener = onReceiveListener;
+		}
 		if (mLocationClient == null) return;
 		if (mLocationClient == null) return;
 		if (!mLocationClient.isStarted()) {
 		if (!mLocationClient.isStarted()) {
 			mFaildCount = 0;
 			mFaildCount = 0;
@@ -100,7 +106,6 @@ public class BdLocationHelper {
 		}
 		}
 	}
 	}
 
 
-
 	private BDLocationListener mLocationListener = new BDLocationListener() {
 	private BDLocationListener mLocationListener = new BDLocationListener() {
 		@Override
 		@Override
 		public void onReceiveLocation(BDLocation location) {
 		public void onReceiveLocation(BDLocation location) {
@@ -121,6 +126,8 @@ public class BdLocationHelper {
 				|| location.getLocType() == BDLocation.TypeOffLineLocation//离线定位(未验证离线定位的有效性)
 				|| location.getLocType() == BDLocation.TypeOffLineLocation//离线定位(未验证离线定位的有效性)
 				) {
 				) {
 			//定位成功
 			//定位成功
+			mLocationClient.stop();
+			LogUtil.i("定位成功" + location.getLocType());
 			locationOk = true;
 			locationOk = true;
 			latLng = new LatLng(location.getLatitude(), location.getLongitude());
 			latLng = new LatLng(location.getLatitude(), location.getLongitude());
 			this.location = location.getLocationDescribe();
 			this.location = location.getLocationDescribe();
@@ -133,10 +140,13 @@ public class BdLocationHelper {
 			if (!StringUtil.isEmpty(address))
 			if (!StringUtil.isEmpty(address))
 				PreferenceUtils.putString("bdaddress", address);
 				PreferenceUtils.putString("bdaddress", address);
 			errorMessage = "";
 			errorMessage = "";
-			LogUtil.i(JSON.toJSONString(this));
 			//发送广播
 			//发送广播
 			broadcast.putExtra(Constants.ACTION_LOCATION_CHANGE, locationOk);
 			broadcast.putExtra(Constants.ACTION_LOCATION_CHANGE, locationOk);
 			LocalBroadcastManager.getInstance(BaseConfig.getContext()).sendBroadcast(broadcast);
 			LocalBroadcastManager.getInstance(BaseConfig.getContext()).sendBroadcast(broadcast);
+			if (onReceiveListener != null) {
+				onReceiveListener.receive(latLng, this.location, address);
+				onReceiveListener = null;
+			}
 		} else {
 		} else {
 			//统一为定位失败
 			//统一为定位失败
 			locationOk = false;
 			locationOk = false;
@@ -226,5 +236,10 @@ public class BdLocationHelper {
 		errorMessage = null;
 		errorMessage = null;
 	}
 	}
 
 
+	private OnReceiveListener onReceiveListener;
+
+	public interface OnReceiveListener {
+		void receive(LatLng latLng, String location, String address);
+	}
 }
 }
 
 

+ 1 - 3
app_core/common/src/main/java/com/core/utils/CommonInterface.java

@@ -179,8 +179,7 @@ public class CommonInterface implements OnHttpResultListener {
         param.put("id", id);
         param.put("id", id);
         String url = isB2b ? ApiConfig.getInstance(ApiUtils.getApiModel()).getmApiBase().updateOutplanStatus : "mobile/mobileplanUpdate.action";
         String url = isB2b ? ApiConfig.getInstance(ApiUtils.getApiModel()).getmApiBase().updateOutplanStatus : "mobile/mobileplanUpdate.action";
         if (isB2b)
         if (isB2b)
-            param.put("statuscode", isDone ? "done" : "CHECKOUT");//TODO done使用小写
-
+            param.put("statuscode", isDone ? "done" : "CHECKOUT");
         Request request = new Request.Bulider()
         Request request = new Request.Bulider()
                 .setWhat(END_MISSION)
                 .setWhat(END_MISSION)
                 .setUrl(url)
                 .setUrl(url)
@@ -188,7 +187,6 @@ public class CommonInterface implements OnHttpResultListener {
                 .setMode(Request.Mode.POST)
                 .setMode(Request.Mode.POST)
                 .bulid();
                 .bulid();
         OAHttpHelper.getInstance().requestHttp(request, this);
         OAHttpHelper.getInstance().requestHttp(request, this);
-
     }
     }
 
 
     //获取打卡数据
     //获取打卡数据

+ 43 - 34
app_core/common/src/main/java/com/core/widget/RedView.java

@@ -17,38 +17,47 @@ import com.core.app.R;
 
 
 public class RedView extends RelativeLayout {
 public class RedView extends RelativeLayout {
 
 
-    private TextView nameTv;
-    private TextView numTv;
-    private ImageView redImg;
-
-    public RedView(Context context) {
-        this(context, null);
-    }
-
-    public RedView(Context context, AttributeSet attrs) {
-        super(context, attrs);
-        LayoutInflater.from(context).inflate(R.layout.inclue_comon_red, this);
-        nameTv = (TextView) findViewById(R.id.nameTv);
-        numTv = (TextView) findViewById(R.id.numTv);
-        redImg = (ImageView) findViewById(R.id.redImg);
-        TypedArray ta = getContext().obtainStyledAttributes(attrs, R.styleable.RedView);
-        try {
-            String text = ta.getString(R.styleable.RedView_text);
-            if (!StringUtil.isEmpty(text)) {
-                nameTv.setText(text);
-            } else {
-                nameTv.setText("");
-            }
-            int num = ta.getInteger(R.styleable.RedView_image, 0);
-            if (num > 0) {
-                numTv.setText(String.valueOf(num));
-            } else {
-                numTv.setText("");
-            }
-            int image = ta.getResourceId(R.styleable.RedView_image, R.drawable.kaoqintongji);
-            redImg.setImageResource(image);
-        } finally {
-            ta.recycle();
-        }
-    }
+	private TextView nameTv;
+	private TextView numTv;
+	private ImageView redImg;
+
+	public RedView(Context context) {
+		this(context, null);
+	}
+
+	public RedView(Context context, AttributeSet attrs) {
+		super(context, attrs);
+		LayoutInflater.from(context).inflate(R.layout.inclue_comon_red, this);
+		nameTv = (TextView) findViewById(R.id.nameTv);
+		numTv = (TextView) findViewById(R.id.numTv);
+		redImg = (ImageView) findViewById(R.id.redImg);
+		TypedArray ta = getContext().obtainStyledAttributes(attrs, R.styleable.RedView);
+		try {
+			String text = ta.getString(R.styleable.RedView_text);
+			setName(text);
+			int num = ta.getInteger(R.styleable.RedView_image, 0);
+			if (num > 0) {
+				numTv.setText(String.valueOf(num));
+			} else {
+				numTv.setText("");
+			}
+			boolean showImage = ta.getBoolean(R.styleable.RedView_showImage, true);
+			if (showImage) {
+				int image = ta.getResourceId(R.styleable.RedView_image, R.drawable.kaoqintongji);
+				redImg.setImageResource(image);
+			} else {
+				redImg.setVisibility(GONE);
+			}
+		} finally {
+			ta.recycle();
+		}
+	}
+
+	public void setName(String message) {
+		if (StringUtil.isEmpty(message)) {
+			nameTv.setText("");
+		}else{
+			nameTv.setText(message);
+		}
+	}
 }
 }

+ 52 - 1
app_core/common/src/main/res/layout/bsetting_activity.xml

@@ -208,7 +208,58 @@
             android:layout_centerVertical="true"
             android:layout_centerVertical="true"
             android:background="@drawable/oa_next"
             android:background="@drawable/oa_next"
             android:contentDescription="@string/app_name" />
             android:contentDescription="@string/app_name" />
-
     </RelativeLayout>
     </RelativeLayout>
 
 
+    <RelativeLayout
+        android:id="@+id/business_hours_rl"
+        style="@style/IMTbleLine"
+        android:background="@drawable/selector_me_menu_item_bg">
+        <View
+            android:layout_alignParentBottom="true"
+            android:layout_width="match_parent"
+            android:layout_height="@dimen/line"
+            android:background="@color/item_line" />
+        <TextView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_centerVertical="true"
+            android:gravity="center"
+            android:text="设置营业时间"
+            android:textColor="@color/black"
+            android:textSize="14sp" />
+        <ImageView
+            android:layout_width="@dimen/next_width"
+            android:layout_height="@dimen/next_height"
+            android:layout_alignParentRight="true"
+            android:layout_centerVertical="true"
+            android:background="@drawable/oa_next"
+            android:contentDescription="@string/app_name" />
+        Business hours
+    </RelativeLayout>
+    <RelativeLayout
+        android:id="@+id/booking_timetype_rl"
+        style="@style/IMTbleLine"
+        android:background="@drawable/selector_me_menu_item_bg">
+        <View
+            android:layout_alignParentBottom="true"
+            android:layout_width="match_parent"
+            android:layout_height="@dimen/line"
+            android:background="@color/item_line" />
+        <TextView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_centerVertical="true"
+            android:gravity="center"
+            android:text="设置预约时间类型"
+            android:textColor="@color/black"
+            android:textSize="14sp" />
+        <ImageView
+            android:layout_width="@dimen/next_width"
+            android:layout_height="@dimen/next_height"
+            android:layout_alignParentRight="true"
+            android:layout_centerVertical="true"
+            android:background="@drawable/oa_next"
+            android:contentDescription="@string/app_name" />
+        Business hours
+    </RelativeLayout>
 </LinearLayout>
 </LinearLayout>

+ 4 - 4
app_core/common/src/main/res/layout/person_setting_activity.xml

@@ -102,7 +102,7 @@
                     android:layout_alignParentRight="true"
                     android:layout_alignParentRight="true"
                     android:layout_centerVertical="true"
                     android:layout_centerVertical="true"
                     android:background="@null"
                     android:background="@null"
-                    android:hint="请选择(必选)"
+                    android:hint="@string/common_select_not_must"
                     android:textSize="15sp"
                     android:textSize="15sp"
                     android:gravity="center_vertical|right"
                     android:gravity="center_vertical|right"
                     />
                     />
@@ -133,11 +133,11 @@
                     android:layout_alignParentRight="true"
                     android:layout_alignParentRight="true"
                     android:layout_centerVertical="true"
                     android:layout_centerVertical="true"
                     android:background="@null"
                     android:background="@null"
-                    android:hint="@string/common_input"
+                    android:hint="@string/common_input1"
                     android:textSize="15sp"
                     android:textSize="15sp"
                     android:gravity="center_vertical|right"
                     android:gravity="center_vertical|right"
                     whatever:testType="regexp"
                     whatever:testType="regexp"
-                    whatever:customRegexp="^[A-Za-z\u4e00-\u9fa5]{1,8}+$"
+                    whatever:customRegexp="^[A-Za-z\u4e00-\u9fa5]{0,8}+$"
                     whatever:testErrorString="姓名只能为8个字符之内的中、英文"
                     whatever:testErrorString="姓名只能为8个字符之内的中、英文"
                    />
                    />
             </RelativeLayout>
             </RelativeLayout>
@@ -200,7 +200,7 @@
                     android:layout_centerVertical="true"
                     android:layout_centerVertical="true"
                     android:background="@null"
                     android:background="@null"
                     android:layout_toRightOf="@+id/email_tv"
                     android:layout_toRightOf="@+id/email_tv"
-                    android:hint="@string/common_input"
+                    android:hint="@string/common_input1"
                     android:textSize="15sp"
                     android:textSize="15sp"
                     android:gravity="center_vertical|right"
                     android:gravity="center_vertical|right"
                     whatever:testType="regexp"
                     whatever:testType="regexp"

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

@@ -111,6 +111,7 @@
         <attr name="text" format="string" />
         <attr name="text" format="string" />
         <attr name="image" format="reference" />
         <attr name="image" format="reference" />
         <attr name="num" format="integer" />
         <attr name="num" format="integer" />
+        <attr name="showImage" format="boolean" />
     </declare-styleable>
     </declare-styleable>
 
 
     <!--end gongpengming-->
     <!--end gongpengming-->

+ 1 - 1
app_core/message/src/main/java/com/me/message/imp/ToastCustomizedImpl.java

@@ -20,8 +20,8 @@ import android.widget.TextView;
 import android.widget.Toast;
 import android.widget.Toast;
 
 
 import com.me.message.interfacepack.CustomizedToast;
 import com.me.message.interfacepack.CustomizedToast;
+import com.me.message.supertoasts.R;
 import com.me.message.utils.Utils;
 import com.me.message.utils.Utils;
-import com.umano.message.supertoasts.R;
 
 
 import java.util.Timer;
 import java.util.Timer;
 import java.util.TimerTask;
 import java.util.TimerTask;

+ 82 - 1
app_modular/appbooking/src/main/java/com/modular/booking/activity/services/BServiceListActivity.java

@@ -2,8 +2,14 @@ package com.modular.booking.activity.services;
 
 
 import android.content.Intent;
 import android.content.Intent;
 import android.os.Bundle;
 import android.os.Bundle;
+import android.support.v7.app.ActionBar;
+import android.text.Editable;
+import android.text.TextUtils;
+import android.text.TextWatcher;
+import android.view.LayoutInflater;
 import android.view.View;
 import android.view.View;
 import android.widget.AdapterView;
 import android.widget.AdapterView;
+import android.widget.ImageView;
 
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONArray;
@@ -15,8 +21,12 @@ import com.common.data.ListUtils;
 import com.core.app.Constants;
 import com.core.app.Constants;
 import com.core.app.MyApplication;
 import com.core.app.MyApplication;
 import com.core.base.OABaseActivity;
 import com.core.base.OABaseActivity;
+import com.core.interfac.OnVoiceCompleteListener;
 import com.core.utils.BaiduMapUtil;
 import com.core.utils.BaiduMapUtil;
+import com.core.utils.CommonUtil;
 import com.core.utils.DistanceUtils;
 import com.core.utils.DistanceUtils;
+import com.core.utils.ToastUtil;
+import com.core.widget.ClearEditText;
 import com.core.widget.EmptyLayout;
 import com.core.widget.EmptyLayout;
 import com.core.widget.VoiceSearchView;
 import com.core.widget.VoiceSearchView;
 import com.handmark.pulltorefresh.library.PullToRefreshListView;
 import com.handmark.pulltorefresh.library.PullToRefreshListView;
@@ -65,8 +75,79 @@ public class BServiceListActivity extends OABaseActivity {
         emptyLayout=new EmptyLayout(mContext,mListView.getRefreshableView());
         emptyLayout=new EmptyLayout(mContext,mListView.getRefreshableView());
         mListAdapter=new ItemBserviceListAdapter(mContext,modelList);
         mListAdapter=new ItemBserviceListAdapter(mContext,modelList);
         mListView.setAdapter(mListAdapter);
         mListView.setAdapter(mListAdapter);
+
+        initSearchView();
     }
     }
- 
+
+    private ImageView mBackImageView, mVoiceImageView;
+    private ClearEditText mSearchEditText;
+    private EmptyLayout mEmptyLayout;
+    private void initSearchView() {
+        View view = LayoutInflater.from(ct).inflate(R.layout.action_book_service_search, null);
+        mBackImageView = (ImageView) view.findViewById(R.id.book_service_search_back);
+        mVoiceImageView = (ImageView) view.findViewById(R.id.book_service_search_voice_iv);
+        mSearchEditText = (ClearEditText) view.findViewById(R.id.book_service_search_et);
+        ActionBar bar = this.getSupportActionBar();
+        bar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
+        bar.setCustomView(view);
+        mBackImageView.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                finish();
+            }
+        });
+        mVoiceImageView.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                CommonUtil.getVoiceText(ct, mSearchEditText, new OnVoiceCompleteListener() {
+                    @Override
+                    public void onVoiceComplete() {
+                        ToastUtil.showToast(BServiceListActivity.this, "语音输入完毕");
+                    }
+                });
+            }
+        });
+
+        mEmptyLayout = new EmptyLayout(this, mListView.getRefreshableView());
+        mEmptyLayout.setShowEmptyButton(false);
+        mEmptyLayout.setShowErrorButton(false);
+        mEmptyLayout.setShowLoadingButton(false);
+
+        mSearchEditText.addTextChangedListener(new TextWatcher() {
+            @Override
+            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
+
+            }
+
+            @Override
+            public void onTextChanged(CharSequence s, int start, int before, int count) {
+
+            }
+
+            @Override
+            public void afterTextChanged(Editable s) {
+                if (!TextUtils.isEmpty(s.toString())){
+                    if (!ListUtils.isEmpty(modelList)){
+                        List<SBListModel> tempList=new ArrayList<>();
+                        for (int i = 0; i <modelList.size() ; i++) {
+                            if (modelList.get(i).getName().contains(s.toString())){
+                                tempList.add(modelList.get(i));
+                            }
+                        }
+                        if (ListUtils.isEmpty(tempList))  mEmptyLayout.showEmpty();
+                        LogUtil.d(TAG,"tempList:"+JSON.toJSONString(tempList.toString()));
+                        mListAdapter.setObjects(tempList);
+                        mListAdapter.notifyDataSetChanged();
+
+                    }
+                }else{
+                    mListAdapter.setObjects(modelList);
+                    mListAdapter.notifyDataSetChanged();
+                }
+            }
+        });
+    }
+
     private void initEvent() {
     private void initEvent() {
         mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
         mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
             @Override
             @Override

+ 1 - 1
app_modular/appbooking/src/main/java/com/modular/booking/activity/services/BServiceSearchActivity.java

@@ -91,6 +91,7 @@ public class BServiceSearchActivity extends OABaseActivity implements View.OnCli
                            tempList.add(mBServiceList.get(i));
                            tempList.add(mBServiceList.get(i));
                         }
                         }
                     }
                     }
+                    if (ListUtils.isEmpty(tempList)) mEmptyLayout.showEmpty();
                     LogUtil.d(TAG,"tempList:"+JSON.toJSONString(tempList.toString()));
                     LogUtil.d(TAG,"tempList:"+JSON.toJSONString(tempList.toString()));
                     mBserviceListAdapter.setObjects(tempList);
                     mBserviceListAdapter.setObjects(tempList);
                     mBserviceListAdapter.notifyDataSetChanged();
                     mBserviceListAdapter.notifyDataSetChanged();
@@ -220,7 +221,6 @@ public class BServiceSearchActivity extends OABaseActivity implements View.OnCli
             CommonUtil.getVoiceText(this, mSearchEditText, new OnVoiceCompleteListener() {
             CommonUtil.getVoiceText(this, mSearchEditText, new OnVoiceCompleteListener() {
                 @Override
                 @Override
                 public void onVoiceComplete() {
                 public void onVoiceComplete() {
-                    // TODO: 2017/9/30 语音输入后开始搜索
                     ToastUtil.showToast(BServiceSearchActivity.this, "语音输入完毕");
                     ToastUtil.showToast(BServiceSearchActivity.this, "语音输入完毕");
                 }
                 }
             });
             });

+ 1 - 1
app_modular/appbooking/src/main/res/layout/action_book_service_search.xml

@@ -29,7 +29,7 @@
             android:background="@drawable/search_input"
             android:background="@drawable/search_input"
             android:drawableLeft="@drawable/search"
             android:drawableLeft="@drawable/search"
             android:drawableRight="@drawable/search_clear"
             android:drawableRight="@drawable/search_clear"
-            android:hint="@string/search"
+            android:hint="请输入餐厅/会所等名称"
             android:imeOptions="actionSearch"
             android:imeOptions="actionSearch"
             android:inputType="text"
             android:inputType="text"
             android:paddingRight="26dp"
             android:paddingRight="26dp"

+ 2 - 0
app_modular/appme/src/main/AndroidManifest.xml

@@ -65,5 +65,7 @@
             android:label="@string/more"/>
             android:label="@string/more"/>
         <activity android:name=".settings.activity.BSetComRestListActivity"
         <activity android:name=".settings.activity.BSetComRestListActivity"
             android:label="@string/more"/>
             android:label="@string/more"/>
+        <activity android:name=".settings.activity.BusinessHoursSetting"
+            android:label="设置营业时间"/>
     </application>
     </application>
 </manifest>
 </manifest>

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

@@ -142,7 +142,7 @@ public class PersonalPageActivity extends BaseActivity implements View.OnClickLi
                 if (o.toString().contains("com.mysql.jdbc.exceptions.jdbc4") || (o.toString().contains("resultCode") && o.toString().contains("resultMsg"))){
                 if (o.toString().contains("com.mysql.jdbc.exceptions.jdbc4") || (o.toString().contains("resultCode") && o.toString().contains("resultMsg"))){
                     appStepsPost++;
                     appStepsPost++;
 
 
-                    if (appStepsPost < 3)
+                    if (appStepsPost < 10)
                         initData();
                         initData();
                     else
                     else
                         ToastMessage("网络慢,请稍后再试");
                         ToastMessage("网络慢,请稍后再试");

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

@@ -18,6 +18,7 @@ import com.common.data.CalendarUtil;
 import com.common.data.DateFormatUtil;
 import com.common.data.DateFormatUtil;
 import com.common.data.JSONUtil;
 import com.common.data.JSONUtil;
 import com.common.data.ListUtils;
 import com.common.data.ListUtils;
+import com.common.data.StringUtil;
 import com.core.app.MyApplication;
 import com.core.app.MyApplication;
 import com.core.base.BaseActivity;
 import com.core.base.BaseActivity;
 import com.core.utils.CommonUtil;
 import com.core.utils.CommonUtil;
@@ -98,9 +99,21 @@ public class BComSetCompanyRestActivity extends BaseActivity implements View.OnC
             mList.add(model);
             mList.add(model);
             myAdapter.notifyDataSetChanged();
             myAdapter.notifyDataSetChanged();
         }else if (v.getId() == R.id.save_bt){
         }else if (v.getId() == R.id.save_bt){
+            if (!CommonUtil.isNetWorkConnected(ct)) {
+                ToastMessage(getString(R.string.common_notlinknet));
+                return;
+            }
             LogUtil.prinlnLongMsg("mList", JSON.toJSONString(mList));
             LogUtil.prinlnLongMsg("mList", JSON.toJSONString(mList));
             if (ListUtils.isEmpty(mList)) return;
             if (ListUtils.isEmpty(mList)) return;
-            doSave(mList);
+
+            for (int i = 0; i < mList.size(); i++) {
+                if (StringUtil.isEmpty(mList.get(i).getSc_date())){
+                    ToastMessage("请输入完整休息日期");
+                    break;
+                }
+                if (i==mList.size()-1)
+                    doSave(mList);
+            }
         }
         }
     }
     }
 
 

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

@@ -161,9 +161,20 @@ public class BComSetEmployeeRestActivity extends BaseActivity implements View.On
             mList.add(model);
             mList.add(model);
             myAdapter.notifyDataSetChanged();
             myAdapter.notifyDataSetChanged();
         }else if (v.getId() == R.id.save_bt){
         }else if (v.getId() == R.id.save_bt){
+            if (!CommonUtil.isNetWorkConnected(ct)) {
+                ToastMessage(getString(R.string.common_notlinknet));
+                return;
+            }
             LogUtil.prinlnLongMsg("mList", JSON.toJSONString(mList));
             LogUtil.prinlnLongMsg("mList", JSON.toJSONString(mList));
             if (ListUtils.isEmpty(mList)) return;
             if (ListUtils.isEmpty(mList)) return;
-            doSave(mList);
+            for (int i = 0; i < mList.size(); i++) {
+                if (StringUtil.isEmpty(mList.get(i).getSf_username()) || StringUtil.isEmpty(mList.get(i).getSf_date())){
+                    ToastMessage("请输入完整姓名/休息日期");
+                    break;
+                }
+                if (i==mList.size()-1)
+                    doSave(mList);
+            }
         }
         }
     }
     }
 
 

+ 2 - 0
app_modular/appme/src/main/java/com/uas/appme/settings/activity/BRestActivity.java

@@ -5,6 +5,7 @@ import android.os.Bundle;
 import android.support.v7.widget.DefaultItemAnimator;
 import android.support.v7.widget.DefaultItemAnimator;
 import android.support.v7.widget.RecyclerView;
 import android.support.v7.widget.RecyclerView;
 import android.view.View;
 import android.view.View;
+import android.widget.Toast;
 
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONArray;
@@ -222,6 +223,7 @@ public class BRestActivity extends BaseActivity implements BRestAdapter.OnItemCl
 							ToastMessage(o.toString());
 							ToastMessage(o.toString());
 							if (JSONUtil.getBoolean(o.toString(), "result")) {
 							if (JSONUtil.getBoolean(o.toString(), "result")) {
 								setResult(20);
 								setResult(20);
+								Toast.makeText(ct,getString(R.string.update_success),Toast.LENGTH_LONG).show();
 								finish();
 								finish();
 							}
 							}
 						}
 						}

+ 8 - 0
app_modular/appme/src/main/java/com/uas/appme/settings/activity/BSettingActivity.java

@@ -87,6 +87,12 @@ public class BSettingActivity extends BaseActivity implements View.OnClickListen
             startActivity(new Intent(ct,BSettingLocationActivity.class)
             startActivity(new Intent(ct,BSettingLocationActivity.class)
                     .putExtra("sc_industry",sc_industry)
                     .putExtra("sc_industry",sc_industry)
                     .putExtra("sc_industrycode",sc_industrycode));
                     .putExtra("sc_industrycode",sc_industrycode));
+        }else if (v.getId() == R.id.business_hours_rl){
+            startActivity(new Intent(ct,BusinessHoursSetting.class)
+            .putExtra("setType",1));
+        }else if (v.getId() == R.id.booking_timetype_rl){
+            startActivity(new Intent(ct,BusinessHoursSetting.class)
+                    .putExtra("setType",2));
         }
         }
     }
     }
 
 
@@ -97,5 +103,7 @@ public class BSettingActivity extends BaseActivity implements View.OnClickListen
         findViewById(R.id.employeerest_rl).setOnClickListener(this);
         findViewById(R.id.employeerest_rl).setOnClickListener(this);
         findViewById(R.id.companyrest_rl).setOnClickListener(this);
         findViewById(R.id.companyrest_rl).setOnClickListener(this);
         findViewById(R.id.batchplace_rl).setOnClickListener(this);
         findViewById(R.id.batchplace_rl).setOnClickListener(this);
+        findViewById(R.id.business_hours_rl).setOnClickListener(this);
+        findViewById(R.id.booking_timetype_rl).setOnClickListener(this);
     }
     }
 }
 }

+ 244 - 0
app_modular/appme/src/main/java/com/uas/appme/settings/activity/BusinessHoursSetting.java

@@ -0,0 +1,244 @@
+package com.uas.appme.settings.activity;
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.view.View;
+import android.widget.Button;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import com.alibaba.fastjson.JSON;
+import com.common.LogUtil;
+import com.common.data.DateFormatUtil;
+import com.common.data.JSONUtil;
+import com.common.data.StringUtil;
+import com.core.app.MyApplication;
+import com.core.base.BaseActivity;
+import com.core.utils.CommonUtil;
+import com.core.widget.view.selectcalendar.SelectCalendarActivity;
+import com.me.network.app.http.HttpClient;
+import com.me.network.app.http.Method;
+import com.me.network.app.http.rx.ResultListener;
+import com.me.network.app.http.rx.ResultSubscriber;
+import com.uas.appme.R;
+import com.uas.appme.settings.Constant.Constant;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Created by FANGlh on 2017/10/23.
+ * function:
+ */
+
+public class BusinessHoursSetting extends BaseActivity implements View.OnClickListener {
+    private TextView mTvStartTime;
+    private TextView mTvEndTime;
+    private Button mSubmitBtn;
+    private LinearLayout set_hour_ll;
+    private LinearLayout set_booktype_ll;
+    private TextView period_tv;
+    private TextView timpoint_tv;
+    private int sc_booktype = -1;
+    private int setType;
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.business_hours_setting_activity);
+        initView();
+        initData();
+    }
+
+
+
+    private void initView() {
+        setType = getIntent().getIntExtra("setType",-1);
+
+        mTvStartTime = (TextView) findViewById(R.id.tv_startTime);
+        mTvEndTime = (TextView) findViewById(R.id.tv_endTime);
+        mSubmitBtn = (Button) findViewById(R.id.submit_btn);
+
+        mTvStartTime.setOnClickListener(this);
+        mTvEndTime.setOnClickListener(this);
+        mSubmitBtn.setOnClickListener(this);
+
+        set_hour_ll = (LinearLayout)findViewById(R.id.set_hour_ll);
+        set_booktype_ll = (LinearLayout)findViewById(R.id.set_booktype_ll);
+
+        period_tv = (TextView) findViewById(R.id.period_tv);
+        period_tv.setOnClickListener(this);
+
+        timpoint_tv = (TextView) findViewById(R.id.timpoint_tv);
+        timpoint_tv.setOnClickListener(this);
+
+        if (setType == 1){
+            getSupportActionBar().setTitle("设置营业时间");
+            set_hour_ll.setVisibility(View.VISIBLE);
+            set_booktype_ll.setVisibility(View.GONE);
+        }else if (setType == 2){
+            getSupportActionBar().setTitle("设置预约时间类型");
+            set_hour_ll.setVisibility(View.GONE);
+            set_booktype_ll.setVisibility(View.VISIBLE);
+        }
+    }
+
+    @Override
+    public void onClick(View v) {
+
+        if (v.getId() == R.id.submit_btn){
+            if (!CommonUtil.isNetWorkConnected(ct)){
+                ToastMessage(getString(R.string.common_notlinknet));
+                return;
+            }
+            if (setType == 1)
+                doSaveBHours();
+            else if (setType == 2)
+                doSaveTimeType();
+        }else if (v.getId() == R.id.tv_startTime){
+            startActivityForResult(new Intent(mContext, SelectCalendarActivity.class)
+                            .putExtra("startDate", DateFormatUtil.long2Str(DateFormatUtil.YMD_HMS))
+                            .putExtra("endDate", DateFormatUtil.long2Str(DateFormatUtil.YMD_HMS))
+                            .putExtra("hasMenu", false)
+                            .putExtra("type", 2)
+                    , 0x24);
+        }else if (v.getId() == R.id.tv_endTime){
+            startActivityForResult(new Intent(mContext, SelectCalendarActivity.class)
+                            .putExtra("startDate", DateFormatUtil.long2Str(DateFormatUtil.YMD_HMS))
+                            .putExtra("endDate", DateFormatUtil.long2Str(DateFormatUtil.YMD_HMS))
+                            .putExtra("hasMenu", false)
+                            .putExtra("type", 2)
+                    , 0x24);
+        }else if (v.getId() == R.id.period_tv){
+            sc_booktype = 1;
+            period_tv.setBackgroundResource(R.color.aqua);
+            timpoint_tv.setBackgroundResource(R.color.white);
+        }else if (v.getId() == R.id.timpoint_tv){
+            sc_booktype = 0;
+            period_tv.setBackgroundResource(R.color.white);
+            timpoint_tv.setBackgroundResource(R.color.aqua);
+        }
+    }
+
+    private void doSaveTimeType() {
+        if (sc_booktype == -1){
+            ToastMessage("请选择预约时间类型");
+            return;
+        }
+        Map<String,Object> param = new HashMap<>();
+        param.put("sc_uu",Constant.BASE_COMPANYID);
+        param.put("sc_booktype",sc_booktype);
+
+        LogUtil.prinlnLongMsg("appStoreUpdate",JSONUtil.map2JSON(param));
+        HttpClient httpClient = new HttpClient.Builder(Constant.BASE_BOOKING_SETTING_URL).isDebug(true).build(true);
+        httpClient.Api().send(new HttpClient.Builder()
+                .url("user/appStoreUpdate")
+                .add("map", JSONUtil.map2JSON(param))
+                .add("token", MyApplication.getInstance().mAccessToken)
+                .method(Method.POST)
+                .build(),new ResultSubscriber<>(new ResultListener<Object>() {
+            @Override
+            public void onResponse(Object o) {
+                try {
+                    if (!JSONUtil.validate(o.toString()) || o == null) return;
+                    LogUtil.prinlnLongMsg("appStoreUpdate", o.toString()+"");
+                    //{"result":"true"}
+                    if (o.toString().contains("result") && JSON.parseObject(o.toString()).getBooleanValue("result")){
+                        Toast.makeText(ct,getString(R.string.save_success),Toast.LENGTH_LONG).show();
+                        finish();
+                    }
+
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+            }
+        }));
+    }
+
+    @Override
+    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+        if (data == null) return;
+        switch (requestCode) {
+            case 0x24://时间
+                String   startTime = data.getStringExtra("startDate");
+                String   endTime = data.getStringExtra("endDate");
+//                String displayDate = startTime.substring(11, 16) + "-" + endTime.substring(11, 16);
+//                tvBookTimes.setText(displayDate);
+                mTvStartTime.setText(startTime);
+                mTvEndTime.setText(endTime);
+                break;
+
+        }
+    }
+
+    //获取是否之前有设置的时间
+    private void initData() {
+        if (setType == 2) return;
+        HttpClient httpClient = new HttpClient.Builder(Constant.BASE_BOOKING_SETTING_URL).isDebug(true).build(true);
+        httpClient.Api().send(new HttpClient.Builder()
+                .url("user/appCompanyAdmin")
+                .add("companyid",Constant.BASE_COMPANYID)
+                .add("token", MyApplication.getInstance().mAccessToken)
+                .add("userid",MyApplication.getInstance().mLoginUser.getUserId())
+                .method(Method.GET)
+                .build(),new ResultSubscriber<>(new ResultListener<Object>() {
+            @Override
+            public void onResponse(Object o) {
+                try {
+                    if (!JSONUtil.validate(o.toString()) || o == null) return;
+                    LogUtil.prinlnLongMsg("appCompanyAdmin", o.toString()+"");
+// {"endtime":"17:00","result":"1","starttime":"10:00","url":"http://113.105.74.140:8081/u/123/100123/201709/o/ab6d93f74f9b4ec7a06f7dbfd725ec38.png"}
+
+                    if (o.toString().contains("starttime"))
+                        mTvStartTime.setText(JSON.parseObject(o.toString()).getString("starttime")+"");
+                    if (o.toString().contains("endtime"))
+                        mTvEndTime.setText(JSON.parseObject(o.toString()).getString("endtime"));
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+
+            }
+        }));
+    }
+    private void doSaveBHours() {
+        if (StringUtil.isEmpty(mTvStartTime.getText().toString())||
+                StringUtil.isEmpty(mTvEndTime.getText().toString())){
+            ToastMessage("时间段不能为空!");
+            return;
+        }
+        if (mTvStartTime.getText().toString().compareTo(mTvEndTime.getText().toString())>=0){
+            ToastMessage(getString(R.string.not_time_start_biger_end));
+            return;
+        }
+        Map<String,Object> param = new HashMap<>();
+        param.put("sc_uu",Constant.BASE_COMPANYID);
+        param.put("sc_starttime",mTvStartTime.getText().toString());
+        param.put("sc_endtime",mTvEndTime.getText().toString());
+
+        LogUtil.prinlnLongMsg("appStoreUpdate",JSONUtil.map2JSON(param));
+        HttpClient httpClient = new HttpClient.Builder(Constant.BASE_BOOKING_SETTING_URL).isDebug(true).build(true);
+        httpClient.Api().send(new HttpClient.Builder()
+                .url("user/appStoreUpdate")
+                .add("map", JSONUtil.map2JSON(param))
+                .add("token", MyApplication.getInstance().mAccessToken)
+                .method(Method.POST)
+                .build(),new ResultSubscriber<>(new ResultListener<Object>() {
+            @Override
+            public void onResponse(Object o) {
+                try {
+                    if (!JSONUtil.validate(o.toString()) || o == null) return;
+                    LogUtil.prinlnLongMsg("appStoreUpdate", o.toString()+"");
+                    //{"result":"true"}
+                    if (o.toString().contains("result") && JSON.parseObject(o.toString()).getBooleanValue("result")){
+                        Toast.makeText(ct,getString(R.string.save_success),Toast.LENGTH_LONG).show();
+                        finish();
+                    }
+
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+            }
+        }));
+    }
+}

+ 8 - 7
app_modular/appme/src/main/java/com/uas/appme/settings/activity/PersonSettingActivity.java

@@ -217,14 +217,15 @@ public class PersonSettingActivity extends BaseActivity implements View.OnClickL
 
 
     private void saveJudge() {
     private void saveJudge() {
         if (mUserNameTv.testValidity() && mUserSexTv.testValidity()
         if (mUserNameTv.testValidity() && mUserSexTv.testValidity()
-                && mUserJobTv.testValidity() &&
-                mUserTelTv.testValidity()&& mUserEmailTv.testValidity()
-                ){
-            if (mUserEmailTv.getText().toString().contains("@")){
+                && mUserTelTv.testValidity()){
+            if (!StringUtil.isEmpty(mUserEmailTv.getText().toString())) {
+                if (mUserEmailTv.getText().toString().contains("@")){
+                    saveRequest();
+                }else {
+                    ToastMessage(getString(com.uas.appcontact.R.string.Please_imput_the_correct_email_format));
+                }
+            }else
                 saveRequest();
                 saveRequest();
-            }else {
-                ToastMessage(getString(com.uas.appcontact.R.string.Please_imput_the_correct_email_format));
-            }
 
 
         }
         }
     }
     }

+ 76 - 0
app_modular/appme/src/main/res/layout/business_hours_setting_activity.xml

@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical"
+    >
+      <LinearLayout
+          android:id="@+id/set_hour_ll"
+          android:layout_width="match_parent"
+          android:layout_height="wrap_content"
+          android:padding="20dp"
+          android:orientation="horizontal"
+          >
+          <TextView
+              android:layout_width="wrap_content"
+              android:layout_height="wrap_content" 
+              android:layout_gravity="center_vertical"
+              android:text="@string/booking_times"/>
+          <TextView
+              android:id="@+id/tv_startTime"
+              android:layout_width="wrap_content"
+              android:layout_height="wrap_content"
+              android:layout_gravity="center_vertical"
+              style="@style/crm_business_btn"
+              android:text="00:00"/>
+          <TextView
+              android:id="@+id/tv_endTime"
+              android:layout_width="wrap_content"
+              android:layout_height="wrap_content"
+              android:layout_gravity="center_vertical"
+              style="@style/crm_business_btn"
+              android:text="23:59"/>
+      </LinearLayout>
+
+    <LinearLayout
+        android:id="@+id/set_booktype_ll"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:padding="20dp"
+        android:orientation="horizontal">
+        <TextView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_gravity="center_vertical"
+            android:text="预约时间类型"/>
+        <TextView
+            android:id="@+id/period_tv"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_gravity="center_vertical"
+            style="@style/crm_business_btn"
+            android:text="按时间段"
+            android:gravity="center"/>
+        <TextView
+            android:id="@+id/timpoint_tv"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_gravity="center_vertical"
+            style="@style/crm_business_btn"
+            android:text="按时间点"
+            android:gravity="center"/>
+    </LinearLayout>
+    <Button
+            android:id="@+id/submit_btn"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="20dp"
+            android:layout_marginLeft="20dp"
+            android:layout_marginRight="20dp"
+            android:background="@drawable/bg_bule_btn"
+            android:padding="10dp"
+            android:text="@string/app_button_commit"
+            android:textColor="@color/white"
+            android:textSize="@dimen/text_main" />
+</LinearLayout>

+ 2 - 2
app_modular/appmessages/build.gradle

@@ -24,8 +24,8 @@ dependencies {
     testCompile deps.junit
     testCompile deps.junit
     compile deps.appcompatV7
     compile deps.appcompatV7
     compile deps.recyclerviewV7
     compile deps.recyclerviewV7
-    compile project(':common')
-    compile project(':network')
+    compile project(':apputils')
     compile project(':appworks')
     compile project(':appworks')
+    compile project(':appbooking')
 
 
 }
 }

+ 131 - 0
app_modular/appmessages/src/main/java/com/modular/appmessages/model/MessageHeader.java

@@ -0,0 +1,131 @@
+package com.modular.appmessages.model;
+
+import com.common.data.StringUtil;
+import com.common.preferences.RedSpUtil;
+
+/**
+ * Created by Bitliker on 2017/10/19.
+ */
+
+public class MessageHeader {
+	/**
+	 * 1.个人版本的服务预约预约类型
+	 * 2.服务预约主页
+	 * 3.uu运动
+	 * 4.审批流
+	 * 5.代办工作
+	 * 6.订阅号
+	 */
+	private int type;//根据类型来决定要调转的界面
+	private int icon;
+	private int redNum;
+	private boolean hideRed;
+	private String name;
+	private String subDoc;
+	private String redKey;
+	private String redMessage;
+	private String time;
+	private String tag;
+
+	public MessageHeader(String name) {
+		this.name = name;
+	}
+
+	public MessageHeader setTime(String time) {
+		this.time = time;
+		return this;
+	}
+
+	public MessageHeader setTag(String tag) {
+		this.tag = tag;
+		return this;
+	}
+
+	public MessageHeader setRedMessage(String redMessage) {
+		this.redMessage = redMessage;
+		return this;
+	}
+
+	public MessageHeader setType(int type) {
+		this.type = type;
+		return this;
+	}
+
+
+	public MessageHeader setIcon(int icon) {
+		this.icon = icon;
+		return this;
+	}
+
+	public MessageHeader setRedNum(int redNum) {
+		this.redNum = redNum;
+		return this;
+	}
+
+	public MessageHeader setName(String name) {
+		this.name = name;
+		return this;
+	}
+
+	public MessageHeader setSubDoc(String subDoc) {
+		this.subDoc = subDoc;
+		return this;
+	}
+
+	public void hideRed() {
+		if (redKey != null) {
+			RedSpUtil.api().put(redKey, true);
+			this.hideRed = true;
+		}
+	}
+
+	public MessageHeader setRedKey(String redKey) {
+		this.redKey = redKey;
+		if (StringUtil.isEmpty(redKey)) {
+			this.hideRed = true;
+		} else {
+			this.hideRed = RedSpUtil.api().getBoolean(redKey, false);
+		}
+		return this;
+	}
+
+	public int getIcon() {
+		return icon;
+	}
+
+	public int getRedNum() {
+		return redNum;
+	}
+
+	public String getName() {
+		return name == null ? "" : name;
+	}
+
+	public String getSubDoc() {
+		return subDoc == null ? "" : subDoc;
+	}
+
+	public String getRedKey() {
+		return redKey;
+	}
+
+	public boolean isHideRed() {
+		return hideRed;
+	}
+
+	public int getType() {
+		return type;
+	}
+
+	public String getRedMessage() {
+		return redMessage == null ? "" : redMessage;
+	}
+
+	public String getTime() {
+		return time == null ? "" : time;
+	}
+
+	public String getTag() {
+		return tag == null ? "" : tag;
+	}
+}

+ 1031 - 881
app_modular/appmessages/src/main/java/com/modular/appmessages/presenter/MessagePresenter.java

@@ -25,6 +25,7 @@ import com.core.api.wxapi.ApiConfig;
 import com.core.api.wxapi.ApiPlatform;
 import com.core.api.wxapi.ApiPlatform;
 import com.core.api.wxapi.ApiUtils;
 import com.core.api.wxapi.ApiUtils;
 import com.core.app.AppConstant;
 import com.core.app.AppConstant;
+import com.core.app.Constants;
 import com.core.app.MyApplication;
 import com.core.app.MyApplication;
 import com.core.broadcast.MsgBroadcast;
 import com.core.broadcast.MsgBroadcast;
 import com.core.dao.MessageDao;
 import com.core.dao.MessageDao;
@@ -43,13 +44,20 @@ import com.core.utils.sortlist.BaseSortModel;
 import com.core.utils.sortlist.PingYinUtil;
 import com.core.utils.sortlist.PingYinUtil;
 import com.core.xmpp.dao.ChatMessageDao;
 import com.core.xmpp.dao.ChatMessageDao;
 import com.core.xmpp.dao.FriendDao;
 import com.core.xmpp.dao.FriendDao;
+import com.modular.appmessages.R;
 import com.modular.appmessages.activity.MsgsSecondCommonActivity;
 import com.modular.appmessages.activity.MsgsSecondCommonActivity;
+import com.modular.appmessages.activity.ProcessB2BActivity;
+import com.modular.appmessages.activity.ProcessMsgActivity;
+import com.modular.appmessages.activity.Subscription2Activity;
 import com.modular.appmessages.activity.UUHelperActivity;
 import com.modular.appmessages.activity.UUHelperActivity;
 import com.modular.appmessages.db.SubsDao;
 import com.modular.appmessages.db.SubsDao;
+import com.modular.appmessages.model.MessageHeader;
 import com.modular.appmessages.model.SubMessage;
 import com.modular.appmessages.model.SubMessage;
 import com.modular.appmessages.model.SubscriptionMessage;
 import com.modular.appmessages.model.SubscriptionMessage;
 import com.modular.appmessages.presenter.imp.IMessageView;
 import com.modular.appmessages.presenter.imp.IMessageView;
 import com.modular.appmessages.util.ApprovalUtil;
 import com.modular.appmessages.util.ApprovalUtil;
+import com.modular.booking.activity.services.BServiceListActivity;
+import com.modular.booking.model.SBMenuModel;
 
 
 import java.util.ArrayList;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Collections;
@@ -64,889 +72,1031 @@ import java.util.Map;
  */
  */
 
 
 public class MessagePresenter implements OnHttpResultListener {
 public class MessagePresenter implements OnHttpResultListener {
-    private final int LOAD_EMNEWS = 0x11;
-    private final int LOAD_SUBS = 0x12;
-    private final int LOAD_PROCESS = 0x13;
-    private final int LOAD_TASK = 0x14;
-    private final int LOAD_EMNEWS_DETAILS = 0x15;
-    private final int LOAD_B2B_COUNT = 0x16;//获取b2b的审批和任务数量
-    private final int LOAD_BOOKING = 0x17;//小秘书红点
-
-
-    private String SUB_READ_TIME;//订阅好点击阅读时间
-
-    private List<BaseSortModel<Friend>> mFriendList;
-    private Comparator<BaseSortModel<Friend>> erpComparator;
-    private IMessageView iMessageView;
-    private Activity ct;
-    private String subReadTime;//订阅号点击时间
-
-    private String filter;//搜索数据
-    private int emnewsNum, subsNum, processNum, taskNum, bookingNum, uuHelperNum;//红点消息分类数量
-    private String[] RECEIVER_LIST = {ConnectivityManager.CONNECTIVITY_ACTION, OAConfig.AUTO_SIGIN_ALART, MsgBroadcast.ACTION_MSG_COMPANY_UPDATE, "com.app.home.update"
-            , MsgBroadcast.ACTION_MSG_UI_UPDATE};
-    private BroadcastReceiver dataChangeReceiver = new BroadcastReceiver() {
-        @Override
-        public void onReceive(Context context, Intent intent) {
-            String action = intent.getAction();
-            if (StringUtil.isEmpty(action)) return;
-            if (action.equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
-                iMessageView.changeNet(SystemUtil.isNetWorkConnected(MyApplication.getInstance()));
-            } else if (OAConfig.AUTO_SIGIN_ALART.equals(action)) {
-                loadNews(isB2b);//获取消息
-            } else if (action.equals("com.app.home.update") || action.equals(MsgBroadcast.ACTION_MSG_COMPANY_UPDATE)
-                    || action.equals(MsgBroadcast.ACTION_MSG_UI_UPDATE)) {
-                loadData();
-            }
-        }
-    };
-    private boolean isB2b;
-
-
-    public MessagePresenter(Activity ct, IMessageView iMessageView, UnReaderListener unReaderListener) {
-        this.ct = ct;
-        this.unReaderListener = unReaderListener;
-        mFriendList = new ArrayList<>();
-        if (iMessageView == null)
-            new NullPointerException("IMessageView not be null");
-        this.iMessageView = iMessageView;
-        if (RECEIVER_LIST != null && RECEIVER_LIST.length > 0) {
-            IntentFilter dateFilter = new IntentFilter();
-            for (String f : RECEIVER_LIST)
-                dateFilter.addAction(f);
-            LocalBroadcastManager.getInstance(ct).registerReceiver(dataChangeReceiver, dateFilter);
-        }
-    }
-
-    public void loadData() {
-        isB2b = ApiUtils.getApiModel() instanceof ApiPlatform;
-        if (isB2b) {
-            if ("1".equals(com.core.utils.CommonUtil.getUserRole())) {
-                //个人用户
-                loadBookingNewNum();//预约红点接口
-                saveErp2DB(null);
-            } else {
-                loadB2bNewsCount();
-            }
-
-        } else {
-            SUB_READ_TIME = CommonUtil.getMaster() + "SUB_READ_TIME";//订阅好点击阅读时间
-            subReadTime = PreferenceUtils.getString(SUB_READ_TIME);
-            if ("1".equals(com.core.utils.CommonUtil.getUserRole())) {
-                //个人用户
-                LogUtil.d("roamer", "个人用户消息加载!");
-                loadBookingNewNum();//预约红点接口
-
-            } else {
-                loadTaskData();//获取任务接口
-                loadProcessToDo();//获取审批流接口
-                loadSubData();
-                loadBookingNewNum();//预约红点接口
-
-            }
-            loadNews(isB2b);//获取消息
-        }
-
-    }
-
-    private void loadB2bNewsCount() {
-        String url = ApiConfig.getInstance(ApiUtils.getApiModel()).getmApiBase().getTaskCounts;
-        Request request = new Request.Bulider()
-                .setParam(new HashMap<String, Object>())
-                .setUrl(url)
-                .setMode(Request.Mode.GET)
-                .setWhat(LOAD_B2B_COUNT)
-                .bulid();
-        OAHttpHelper.getInstance().requestHttp(request, this);
-    }
-
-
-    /**
-     * 获取订阅号消息接口
-     */
-    private void loadSubData() {
-        //获取网络数据
-        Map<String, Object> param = new HashMap<>();
-        param.put("count", 100);
-        param.put("condition", "where to_char(createdate_,'yyyymmdd')='" + DateFormatUtil.long2Str("yyyyMMdd") + "'");
-        param.put("sessionId", CommonUtil.getSharedPreferences(ct, "sessionId"));
-
-        Request request = new Request.Bulider()
-                .setParam(param)
-                .setUrl("common/desktop/subs/getSubs.action")
-                .setMode(Request.Mode.GET)
-                .setWhat(LOAD_SUBS)
-                .bulid();
-        OAHttpHelper.getInstance().requestHttp(request, this);
-    }
-
-    /**
-     * 获取消息红点提醒接口
-     *
-     * @param isB2b
-     */
-    private void loadNews(boolean isB2b) {
-        Map<String, Object> param = new HashMap<>();
-        if (isB2b) {
-            param.put("venduu", CommonUtil.getSharedPreferences(MyApplication.getInstance().getApplicationContext(), "companyEnUu"));
-            param.put("vendUseruu", CommonUtil.getSharedPreferences(MyApplication.getInstance().getApplicationContext(), "b2b_uu"));
-        } else
-            param.put("emcode", CommonUtil.getEmcode());
-        String url = isB2b ? ApiConfig.getInstance(ApiUtils.getApiModel()).getmApiBase().releaseCount : "mobile/queryEmNews.action";
-        Request request = new Request.Bulider()
-                .setParam(param)
-                .setUrl(url)
-                .setMode(Request.Mode.GET)
-                .setWhat(LOAD_EMNEWS)
-                .bulid();
-        OAHttpHelper.getInstance().requestHttp(request, this);
-
-    }
-
-    /**
-     * 获取消息详细信息接口
-     *
-     * @param type     消息类型
-     * @param isReaded 是否是阅读全部,如果不是就是删除全部
-     */
-    private void loadEmNewsDetails(String type, boolean isReaded) {
-        if (isB2b) {
-            return;
-        }
-        Map<String, Object> param = new HashMap<>();
-        param.put("emcode", CommonUtil.getSharedPreferences(ct, "erp_username"));
-        param.put("type", type);
-        Bundle bundle = new Bundle();
-        bundle.putString("type", type);
-        bundle.putBoolean("isReaded", isReaded);
-
-        Request request = new Request.Bulider()
-                .setParam(param)
-                .setUrl("mobile/queryEmNewsDetails.action")
-                .setMode(Request.Mode.GET)
-                .setBundle(bundle)
-                .setWhat(LOAD_EMNEWS_DETAILS)
-                .bulid();
-        OAHttpHelper.getInstance().requestHttp(request, this);
-    }
-
-    private void postReadNews(String ids) {
-        Map<String, Object> param = new HashMap<>();
-        param.put("ids", ids);
-        String url = ApiConfig.getInstance(ApiUtils.getApiModel()).getmApiBase().countBack;
-        Request request = new Request.Bulider()
-                .setParam(param)
-                .setUrl(url)
-                .setMode(Request.Mode.POST)
-                .setBundle(null)
-                .setWhat(LOAD_EMNEWS_DETAILS)
-                .bulid();
-        OAHttpHelper.getInstance().requestHttp(request, this);
-    }
-
-    /**
-     * 获取获取任务接口
-     */
-    private void loadTaskData() {
-        //获取网络数据
-        Map<String, Object> param = new HashMap<>();
-        param.put("_noc", 1);
-        param.put("page", 1);
-        param.put("pageSize", 100);
-        param.put("status", "");
-        param.put("caller", "ResourceAssignment");
-        String em_code = CommonUtil.getSharedPreferences(ct, "erp_username");
-        String emName = CommonUtil.getSharedPreferences(ct, "erp_emname");
-        String condition =
-                "((ra_resourcecode='" + em_code + "' and  ra_status='进行中')" +
-                        " or ( recorder='" + emName + "' and ra_status='待确认'))" +
-                        " and nvl(class,' ')<>'projecttask'";
-        param.put("condition", condition);
-        Request request = new Request.Bulider()
-                .setParam(param)
-                .setUrl("common/datalist/data.action")
-                .setMode(Request.Mode.GET)
-                .setBundle(null)
-                .setWhat(LOAD_TASK)
-                .bulid();
-        OAHttpHelper.getInstance().requestHttp(request, this);
-
-    }
-
-    /**
-     * @desc:审批流接口
-     * @author:Arison on 2016/11/15
-     */
-    private void loadProcessToDo() {
-        Map<String, Object> param = new HashMap<>();
-        param.put("count", "1000");
-        param.put("page", 1);//默认获取第一页
-
-        Request request = new Request.Bulider()
-                .setParam(param)
-                .setUrl("common/desktop/process/toDo.action")
-                .setMode(Request.Mode.GET)
-                .setBundle(null)
-                .setWhat(LOAD_PROCESS)
-                .bulid();
-        OAHttpHelper.getInstance().requestHttp(request, this);
-    }
-
-
-    private void loadBookingNewNum() {
-        Map<String, Object> param = new HashMap<>();
-        param.put("token", MyApplication.getInstance().mAccessToken);
-        param.put("userid", MyApplication.getInstance().mLoginUser.getUserId());//默认获取第一页
-
-        Request request = new Request.Bulider()
-                .setParam(param)
-                .setUrl("user/appCount")
-                .setMode(Request.Mode.GET)
-                .setBundle(null)
-                .setWhat(LOAD_BOOKING)
-                .bulid();
-        OAHttpHelper.getInstance().requestHttp(request, 1, this);
-    }
-
-    @Override
-    public void result(int what, boolean isJSON, String message, Bundle bundle) {
-        if (!isJSON) {
-            //TODO 返回数据错误
-            return;
-        }
-        JSONObject object = JSON.parseObject(message);
-        switch (what) {
-            case LOAD_BOOKING:
-                //{"count":"1"}
-                bookingNum = Integer.valueOf(object.getString("count"));
-                iMessageView.updateHeaderView(4, Integer.valueOf(object.getString("count")), "",
-                        DateFormatUtil.long2Str(DateFormatUtil.YMD_HMS));
-                updateForUnReader();
-                break;
-            case LOAD_EMNEWS:
-                if (!object.containsKey("listdata")) {
-                    handlerNewsFormErp(new JSONArray());
-                    return;
-                }
-                String ids = object.getString("ids");
-                if (!StringUtil.isEmpty(ids))
-                    postReadNews(ids);
-                JSONArray array = object.getJSONArray("listdata");
-                handlerNewsFormErp(array);
-                break;
-            case LOAD_SUBS://获取订阅号接口
-                handlerSub(object);
-                break;
-            case LOAD_PROCESS://获取审批流接口
-                handlerProcess(object);
-                break;
-            case LOAD_TASK://获取任务接口
-                handlerTask(object);
-                break;
-            case LOAD_EMNEWS_DETAILS:
-                String type = bundle.getString("type");
-                boolean isReaded = bundle.getBoolean("isReaded");
-                JSONArray msgsArray = object.getJSONArray("listdata");
-                if (!ListUtils.isEmpty(msgsArray)) {
-                    handleMsgsArray(type, msgsArray);
-                }
-                handlerEndOfReadOrDelete(type, isReaded);
-                break;
-            case LOAD_B2B_COUNT:
-                if (object.containsKey("processcount")) {
-                    processNum = JSONUtil.getInt(object, "processcount");
-                    String title = JSONUtil.getText(object, "lastProcess");
-                    long time = JSONUtil.getTime(object, "lastProcessTime") / 1000;
-                    if (time == 0) time = System.currentTimeMillis() / 1000;
-                    iMessageView.updateHeaderView(0, processNum, title, TimeUtils.getFriendlyTimeDesc(ct, (int) time));
-                    updateForUnReader();
-                }
-                if (object.containsKey("taskcount")) {
-                    taskNum = JSONUtil.getInt(object, "taskcount");
-                    String title = JSONUtil.getText(object, "lasttask");
-                    long time = JSONUtil.getTime(object, "lasttaskTime") / 1000;
-                    if (time == 0) time = System.currentTimeMillis() / 1000;
-                    String taskTime = TimeUtils.getFriendlyTimeDesc(ct, (int) time);
-                    iMessageView.updateHeaderView(1, taskNum, title, taskTime);
-                    updateForUnReader();
-                }
-
-                break;
-        }
-    }
-
-
-    @Override
-    public void error(int what, String message, Bundle bundle) {
-
-    }
-
-
-    /**
-     * 处理获取网络获取到的数据,先更新本地数据库,再加载本地数据库
-     *
-     * @param msgsArray
-     */
-    private void handleMsgsArray(String type, JSONArray msgsArray) {
-        JSONObject object = null;
-        final List<MessageModel> models = new ArrayList<>();
-        MessageModel model = null;
-        for (int i = 0; i < msgsArray.size(); i++) {
-            try {
-                object = msgsArray.getJSONObject(i);
-                model = new MessageModel();
-                model.setId(object.getInteger("id"));
-                model.setTitle(object.getString("title"));
-                model.setSubTitle(object.getString("subTitle"));
-                model.setTime(DateFormatUtil.long2Str(JSONUtil.getTime(object, "createTime"), "yyyy-MM-dd HH:mm"));
-                model.setHierarchy(1);
-                model.setType(type);
-                model.setCount(1);
-                models.add(model);
-            } catch (Exception e) {
-                e.printStackTrace();
-            }
-        }
-        ThreadUtil.getInstance().addTask(new Runnable() {
-            @Override
-            public void run() {
-                MessageDao.getInstance().createOrinstart(models);
-            }
-        });
-    }
-
-    /**
-     * 处理任务相关数据
-     *
-     * @param object
-     */
-    private void handlerTask(JSONObject object) {
-        taskNum = 0;
-        String subTitle = null;
-        String time = null;
-        if (object != null && object.containsKey("data")) {
-            JSONArray array = object.getJSONArray("data");
-            taskNum = array.size();
-            if (!ListUtils.isEmpty(array)) {
-                subTitle = array.getJSONObject(0).getString("ra_taskname");
-                time = array.getJSONObject(0).getString("ra_startdate");
-            } else {
-                subTitle = "";
-                time = "";
-            }
-        }
-        String taskTime = TimeUtils.getFriendlyTimeDesc(ct, (int) (TimeUtils.f_str_2_long(time) / 1000));
-        iMessageView.updateHeaderView(1, taskNum, subTitle, taskTime);
-        updateForUnReader();
-    }
-
-    /**
-     * 处理审批了相关数据
-     *
-     * @param object
-     */
-    private void handlerProcess(JSONObject object) {
-        JSONArray itemArray = object.getJSONArray("data");
-        if (!ListUtils.isEmpty(itemArray))
-            itemArray = ApprovalUtil.sortJsonArray(itemArray);
-        String subTitle = null;
-        long time = 0;
-        if (!ListUtils.isEmpty(itemArray)) {
-            processNum = itemArray.size();
-            if (processNum > 0) {
-                subTitle = itemArray.getJSONObject(0).getString("JP_LAUNCHERNAME") + "的"
-                        + itemArray.getJSONObject(0).getString("JP_NAME");
-                time = JSONUtil.getTime(itemArray.getJSONObject(0), "JP_LAUNCHTIME", "JP_REMINDDATE");
-            }
-        } else {
-            processNum = 0;
-        }
-        String taskTime = TimeUtils.getFriendlyTimeDesc(ct, (int) (time / 1000));
-        iMessageView.updateHeaderView(0, processNum, subTitle, taskTime);
-        updateForUnReader();
-    }
-
-    private void handlerSub(final JSONObject object) {
-        if (!StringUtil.isEmpty(subReadTime) && subReadTime.compareTo(DateFormatUtil.long2Str(DateFormatUtil.YMD)) >= 0) {
-            showsubsNum(0, "", "");
-            return;
-        }
-        List<SubscriptionMessage> messages = null;
-        int num = 0;
-        if (object.containsKey("data")) {
-            messages = JSON.parseArray(object.getJSONArray("data").toJSONString(), SubscriptionMessage.class);
-            if (ListUtils.isEmpty(messages)) {
-                showsubsNum(0, "", "");
-                return;
-            }
-            for (SubscriptionMessage e : messages) {
-                if (e.getSTATUS_() == 0)
-                    num += 1;
-            }
-        }
-        showsubsNum(num, messages.get(0).getTITLE_(), messages.get(0).getCREATEDATE_());
-    }
-
-    private void showsubsNum(int num, String title, String time) {
-        subsNum = num;
-        updateForUnReader();
-        iMessageView.updateHeaderView(2, num, num > 0 ? title : "", time);
-    }
-
-    private void saveSubs2Db(JSONObject o) throws Exception {
-        JSONArray array = o.getJSONArray("data");
-        if (ListUtils.isEmpty(array)) return;
-        SubMessage message = null;
-        JSONObject object = null;
-        List<SubMessage> chche = new ArrayList<>();
-        message = new SubMessage();
-        message.setDate(DateFormatUtil.long2Str(DateFormatUtil.YMD));
-        message.setRead(true);
-        message.setStatus(0);
-        chche.add(message);
-        for (int i = 0; i < array.size(); i++) {
-            object = array.getJSONObject(i);
-            message = new SubMessage();
-            message.setCreateTime(object.getLong("CREATEDATE_"));
-            int status = object.getInteger("STATUS_");
-            message.setStatus(i == 0 ? 1 : 2);
-            message.setTitle(object.getString("TITLE_"));
-            message.setSubTitle(object.getString("SUMDATA_"));
-            message.setRead(status == 0 ? false : true);
-            message.setId(object.getInteger("ID_"));
-            message.setNumId(object.getInteger("NUM_ID_"));
-            message.setInstanceId(object.getInteger("INSTANCE_ID_"));
-            if (message.getCreateTime() == 0) continue;
-            message.setDate(TimeUtils.s_long_2_str(message.getCreateTime()));
-            chche.add(message);
-        }
-        if (ListUtils.isEmpty(chche)) return;
-        SubsDao.getInstance().createOrUpdata(chche);
-    }
-
-    /**
-     * 处理消息红点消息
-     *
-     * @param array
-     */
-    private void handlerNewsFormErp(JSONArray array) {
-        if (ListUtils.isEmpty(array)) {
-            saveErp2DB(null);
-            return;
-        }
-        JSONObject object = null;
-        List<MessageModel> models = new ArrayList<>();
-        MessageModel model = null;
-        for (int i = 0; i < array.size(); i++) {
-            object = array.getJSONObject(i);
-            model = new MessageModel();
-            model.setTitle(object.getString("title"));
-            model.setSubTitle(object.getString("lastMessage"));
-            model.setTime(DateFormatUtil.long2Str(JSONUtil.getTime(object, "lastTime"), "yyyy-MM-dd HH:mm"));
-            model.setType(object.getString("type"));
-            if (object.containsKey("count") && object.get("count") != null)
-                model.setCount(object.getInteger("count"));
-            if (StringUtil.isEmpty(model.getTitle()) || StringUtil.isEmpty(model.getSubTitle()))
-                continue;
+	private final int LOAD_EMNEWS = 0x11;
+	private final int LOAD_SUBS = 0x12;
+	private final int LOAD_PROCESS = 0x13;
+	private final int LOAD_TASK = 0x14;
+	private final int LOAD_EMNEWS_DETAILS = 0x15;
+	private final int LOAD_B2B_COUNT = 0x16;//获取b2b的审批和任务数量
+	private final int LOAD_BOOKING = 0x17;//小秘书红点
+
+
+	private String SUB_READ_TIME;//订阅好点击阅读时间
+
+	private List<BaseSortModel<Friend>> mFriendList;
+	private Comparator<BaseSortModel<Friend>> erpComparator;
+	private IMessageView iMessageView;
+	private Activity ct;
+	private String subReadTime;//订阅号点击时间
+
+	private String filter;//搜索数据
+	private int emnewsNum, subsNum, processNum, taskNum, bookingNum, uuHelperNum;//红点消息分类数量
+	private String[] RECEIVER_LIST = {ConnectivityManager.CONNECTIVITY_ACTION, OAConfig.AUTO_SIGIN_ALART, MsgBroadcast.ACTION_MSG_COMPANY_UPDATE, "com.app.home.update"
+			, MsgBroadcast.ACTION_MSG_UI_UPDATE};
+	private BroadcastReceiver dataChangeReceiver = new BroadcastReceiver() {
+		@Override
+		public void onReceive(Context context, Intent intent) {
+			String action = intent.getAction();
+			if (StringUtil.isEmpty(action)) return;
+			if (action.equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
+				iMessageView.changeNet(SystemUtil.isNetWorkConnected(MyApplication.getInstance()));
+			} else if (OAConfig.AUTO_SIGIN_ALART.equals(action)) {
+				loadNews(isB2b);//获取消息
+			} else if (action.equals("com.app.home.update") || action.equals(MsgBroadcast.ACTION_MSG_COMPANY_UPDATE)
+					|| action.equals(MsgBroadcast.ACTION_MSG_UI_UPDATE)) {
+				loadData();
+			}
+		}
+	};
+	private boolean isB2b;
+
+
+	public MessagePresenter(Activity ct, IMessageView iMessageView, UnReaderListener unReaderListener) {
+		this.ct = ct;
+		this.unReaderListener = unReaderListener;
+		mFriendList = new ArrayList<>();
+		if (iMessageView == null)
+			new NullPointerException("IMessageView not be null");
+		this.iMessageView = iMessageView;
+		if (RECEIVER_LIST != null && RECEIVER_LIST.length > 0) {
+			IntentFilter dateFilter = new IntentFilter();
+			for (String f : RECEIVER_LIST)
+				dateFilter.addAction(f);
+			LocalBroadcastManager.getInstance(ct).registerReceiver(dataChangeReceiver, dateFilter);
+		}
+	}
+
+	public void loadData() {
+		isB2b = ApiUtils.getApiModel() instanceof ApiPlatform;
+		if (isB2b) {
+			if ("1".equals(com.core.utils.CommonUtil.getUserRole())) {
+				//个人用户
+				loadBookingNewNum();//预约红点接口
+				saveErp2DB(null);
+			} else {
+				loadB2bNewsCount();
+			}
+
+		} else {
+			SUB_READ_TIME = CommonUtil.getMaster() + "SUB_READ_TIME";//订阅好点击阅读时间
+			subReadTime = PreferenceUtils.getString(SUB_READ_TIME);
+			if ("1".equals(com.core.utils.CommonUtil.getUserRole())) {
+				//个人用户
+				LogUtil.d("roamer", "个人用户消息加载!");
+				loadBookingNewNum();//预约红点接口
+
+			} else {
+				loadTaskData();//获取任务接口
+				loadProcessToDo();//获取审批流接口
+				loadSubData();
+				loadBookingNewNum();//预约红点接口
+
+			}
+			loadNews(isB2b);//获取消息
+		}
+
+	}
+
+	private void loadB2bNewsCount() {
+		String url = ApiConfig.getInstance(ApiUtils.getApiModel()).getmApiBase().getTaskCounts;
+		Request request = new Request.Bulider()
+				.setParam(new HashMap<String, Object>())
+				.setUrl(url)
+				.setMode(Request.Mode.GET)
+				.setWhat(LOAD_B2B_COUNT)
+				.bulid();
+		OAHttpHelper.getInstance().requestHttp(request, this);
+	}
+
+
+	/**
+	 * 获取订阅号消息接口
+	 */
+	private void loadSubData() {
+		//获取网络数据
+		Map<String, Object> param = new HashMap<>();
+		param.put("count", 100);
+		param.put("condition", "where to_char(createdate_,'yyyymmdd')='" + DateFormatUtil.long2Str("yyyyMMdd") + "'");
+		param.put("sessionId", CommonUtil.getSharedPreferences(ct, "sessionId"));
+
+		Request request = new Request.Bulider()
+				.setParam(param)
+				.setUrl("common/desktop/subs/getSubs.action")
+				.setMode(Request.Mode.GET)
+				.setWhat(LOAD_SUBS)
+				.bulid();
+		OAHttpHelper.getInstance().requestHttp(request, this);
+	}
+
+	/**
+	 * 获取消息红点提醒接口
+	 *
+	 * @param isB2b
+	 */
+	private void loadNews(boolean isB2b) {
+		Map<String, Object> param = new HashMap<>();
+		if (isB2b) {
+			param.put("venduu", CommonUtil.getSharedPreferences(MyApplication.getInstance().getApplicationContext(), "companyEnUu"));
+			param.put("vendUseruu", CommonUtil.getSharedPreferences(MyApplication.getInstance().getApplicationContext(), "b2b_uu"));
+		} else
+			param.put("emcode", CommonUtil.getEmcode());
+		String url = isB2b ? ApiConfig.getInstance(ApiUtils.getApiModel()).getmApiBase().releaseCount : "mobile/queryEmNews.action";
+		Request request = new Request.Bulider()
+				.setParam(param)
+				.setUrl(url)
+				.setMode(Request.Mode.GET)
+				.setWhat(LOAD_EMNEWS)
+				.bulid();
+		OAHttpHelper.getInstance().requestHttp(request, this);
+
+	}
+
+	/**
+	 * 获取消息详细信息接口
+	 *
+	 * @param type     消息类型
+	 * @param isReaded 是否是阅读全部,如果不是就是删除全部
+	 */
+	private void loadEmNewsDetails(String type, boolean isReaded) {
+		if (isB2b) {
+			return;
+		}
+		Map<String, Object> param = new HashMap<>();
+		param.put("emcode", CommonUtil.getSharedPreferences(ct, "erp_username"));
+		param.put("type", type);
+		Bundle bundle = new Bundle();
+		bundle.putString("type", type);
+		bundle.putBoolean("isReaded", isReaded);
+
+		Request request = new Request.Bulider()
+				.setParam(param)
+				.setUrl("mobile/queryEmNewsDetails.action")
+				.setMode(Request.Mode.GET)
+				.setBundle(bundle)
+				.setWhat(LOAD_EMNEWS_DETAILS)
+				.bulid();
+		OAHttpHelper.getInstance().requestHttp(request, this);
+	}
+
+	private void postReadNews(String ids) {
+		Map<String, Object> param = new HashMap<>();
+		param.put("ids", ids);
+		String url = ApiConfig.getInstance(ApiUtils.getApiModel()).getmApiBase().countBack;
+		Request request = new Request.Bulider()
+				.setParam(param)
+				.setUrl(url)
+				.setMode(Request.Mode.POST)
+				.setBundle(null)
+				.setWhat(LOAD_EMNEWS_DETAILS)
+				.bulid();
+		OAHttpHelper.getInstance().requestHttp(request, this);
+	}
+
+	/**
+	 * 获取获取任务接口
+	 */
+	private void loadTaskData() {
+		//获取网络数据
+		Map<String, Object> param = new HashMap<>();
+		param.put("_noc", 1);
+		param.put("page", 1);
+		param.put("pageSize", 100);
+		param.put("status", "");
+		param.put("caller", "ResourceAssignment");
+		String em_code = CommonUtil.getSharedPreferences(ct, "erp_username");
+		String emName = CommonUtil.getSharedPreferences(ct, "erp_emname");
+		String condition =
+				"((ra_resourcecode='" + em_code + "' and  ra_status='进行中')" +
+						" or ( recorder='" + emName + "' and ra_status='待确认'))" +
+						" and nvl(class,' ')<>'projecttask'";
+		param.put("condition", condition);
+		Request request = new Request.Bulider()
+				.setParam(param)
+				.setUrl("common/datalist/data.action")
+				.setMode(Request.Mode.GET)
+				.setBundle(null)
+				.setWhat(LOAD_TASK)
+				.bulid();
+		OAHttpHelper.getInstance().requestHttp(request, this);
+
+	}
+
+	/**
+	 * @desc:审批流接口
+	 * @author:Arison on 2016/11/15
+	 */
+	private void loadProcessToDo() {
+		Map<String, Object> param = new HashMap<>();
+		param.put("count", "1000");
+		param.put("page", 1);//默认获取第一页
+
+		Request request = new Request.Bulider()
+				.setParam(param)
+				.setUrl("common/desktop/process/toDo.action")
+				.setMode(Request.Mode.GET)
+				.setBundle(null)
+				.setWhat(LOAD_PROCESS)
+				.bulid();
+		OAHttpHelper.getInstance().requestHttp(request, this);
+	}
+
+
+	private void loadBookingNewNum() {
+		Map<String, Object> param = new HashMap<>();
+		param.put("token", MyApplication.getInstance().mAccessToken);
+		param.put("userid", MyApplication.getInstance().mLoginUser.getUserId());//默认获取第一页
+
+		Request request = new Request.Bulider()
+				.setParam(param)
+				.setUrl("user/appCount")
+				.setMode(Request.Mode.GET)
+				.setBundle(null)
+				.setWhat(LOAD_BOOKING)
+				.bulid();
+		OAHttpHelper.getInstance().requestHttp(request, 1, this);
+	}
+
+	@Override
+	public void result(int what, boolean isJSON, String message, Bundle bundle) {
+		if (!isJSON) {
+			//TODO 返回数据错误
+			return;
+		}
+		JSONObject object = JSON.parseObject(message);
+		switch (what) {
+			case LOAD_BOOKING:
+				//{"count":"1"}
+				bookingNum = Integer.valueOf(object.getString("count"));
+				iMessageView.updateHeaderView(2, Integer.valueOf(object.getString("count")), "",
+						DateFormatUtil.long2Str(DateFormatUtil.YMD_HMS));
+				updateForUnReader();
+				break;
+			case LOAD_EMNEWS:
+				if (!object.containsKey("listdata")) {
+					handlerNewsFormErp(new JSONArray());
+					return;
+				}
+				String ids = object.getString("ids");
+				if (!StringUtil.isEmpty(ids))
+					postReadNews(ids);
+				JSONArray array = object.getJSONArray("listdata");
+				handlerNewsFormErp(array);
+				break;
+			case LOAD_SUBS://获取订阅号接口
+				handlerSub(object);
+				break;
+			case LOAD_PROCESS://获取审批流接口
+				handlerProcess(object);
+				break;
+			case LOAD_TASK://获取任务接口
+				handlerTask(object);
+				break;
+			case LOAD_EMNEWS_DETAILS:
+				String type = bundle.getString("type");
+				boolean isReaded = bundle.getBoolean("isReaded");
+				JSONArray msgsArray = object.getJSONArray("listdata");
+				if (!ListUtils.isEmpty(msgsArray)) {
+					handleMsgsArray(type, msgsArray);
+				}
+				handlerEndOfReadOrDelete(type, isReaded);
+				break;
+			case LOAD_B2B_COUNT:
+				if (object.containsKey("processcount")) {
+					processNum = JSONUtil.getInt(object, "processcount");
+					String title = JSONUtil.getText(object, "lastProcess");
+					long time = JSONUtil.getTime(object, "lastProcessTime") / 1000;
+					if (time == 0) time = System.currentTimeMillis() / 1000;
+					iMessageView.updateHeaderView(4, processNum, title, TimeUtils.getFriendlyTimeDesc(ct, (int) time));
+					updateForUnReader();
+				}
+				if (object.containsKey("taskcount")) {
+					taskNum = JSONUtil.getInt(object, "taskcount");
+					String title = JSONUtil.getText(object, "lasttask");
+					long time = JSONUtil.getTime(object, "lasttaskTime") / 1000;
+					if (time == 0) time = System.currentTimeMillis() / 1000;
+					String taskTime = TimeUtils.getFriendlyTimeDesc(ct, (int) time);
+					iMessageView.updateHeaderView(5, taskNum, title, taskTime);
+					updateForUnReader();
+				}
+
+				break;
+		}
+	}
+
+
+	@Override
+	public void error(int what, String message, Bundle bundle) {
+
+	}
+
+
+	/**
+	 * 处理获取网络获取到的数据,先更新本地数据库,再加载本地数据库
+	 *
+	 * @param msgsArray
+	 */
+	private void handleMsgsArray(String type, JSONArray msgsArray) {
+		JSONObject object = null;
+		final List<MessageModel> models = new ArrayList<>();
+		MessageModel model = null;
+		for (int i = 0; i < msgsArray.size(); i++) {
+			try {
+				object = msgsArray.getJSONObject(i);
+				model = new MessageModel();
+				model.setId(object.getInteger("id"));
+				model.setTitle(object.getString("title"));
+				model.setSubTitle(object.getString("subTitle"));
+				model.setTime(DateFormatUtil.long2Str(JSONUtil.getTime(object, "createTime"), "yyyy-MM-dd HH:mm"));
+				model.setHierarchy(1);
+				model.setType(type);
+				model.setCount(1);
+				models.add(model);
+			} catch (Exception e) {
+				e.printStackTrace();
+			}
+		}
+		ThreadUtil.getInstance().addTask(new Runnable() {
+			@Override
+			public void run() {
+				MessageDao.getInstance().createOrinstart(models);
+			}
+		});
+	}
+
+	/**
+	 * 处理任务相关数据
+	 *
+	 * @param object
+	 */
+	private void handlerTask(JSONObject object) {
+		taskNum = 0;
+		String subTitle = null;
+		String time = null;
+		if (object != null && object.containsKey("data")) {
+			JSONArray array = object.getJSONArray("data");
+			taskNum = array.size();
+			if (!ListUtils.isEmpty(array)) {
+				subTitle = array.getJSONObject(0).getString("ra_taskname");
+				time = array.getJSONObject(0).getString("ra_startdate");
+			} else {
+				subTitle = "";
+				time = "";
+			}
+		}
+		String taskTime = TimeUtils.getFriendlyTimeDesc(ct, (int) (TimeUtils.f_str_2_long(time) / 1000));
+		iMessageView.updateHeaderView(5, taskNum, subTitle, taskTime);
+		updateForUnReader();
+	}
+
+	/**
+	 * 处理审批了相关数据
+	 *
+	 * @param object
+	 */
+	private void handlerProcess(JSONObject object) {
+		JSONArray itemArray = object.getJSONArray("data");
+		if (!ListUtils.isEmpty(itemArray))
+			itemArray = ApprovalUtil.sortJsonArray(itemArray);
+		String subTitle = null;
+		long time = 0;
+		if (!ListUtils.isEmpty(itemArray)) {
+			processNum = itemArray.size();
+			if (processNum > 0) {
+				subTitle = itemArray.getJSONObject(0).getString("JP_LAUNCHERNAME") + "的"
+						+ itemArray.getJSONObject(0).getString("JP_NAME");
+				time = JSONUtil.getTime(itemArray.getJSONObject(0), "JP_LAUNCHTIME", "JP_REMINDDATE");
+			}
+		} else {
+			processNum = 0;
+		}
+		String taskTime = TimeUtils.getFriendlyTimeDesc(ct, (int) (time / 1000));
+		iMessageView.updateHeaderView(4, processNum, subTitle, taskTime);
+		updateForUnReader();
+	}
+
+	private void handlerSub(final JSONObject object) {
+		if (!StringUtil.isEmpty(subReadTime) && subReadTime.compareTo(DateFormatUtil.long2Str(DateFormatUtil.YMD)) >= 0) {
+			showsubsNum(0, "", "");
+			return;
+		}
+		List<SubscriptionMessage> messages = null;
+		int num = 0;
+		if (object.containsKey("data")) {
+			messages = JSON.parseArray(object.getJSONArray("data").toJSONString(), SubscriptionMessage.class);
+			if (ListUtils.isEmpty(messages)) {
+				showsubsNum(0, "", "");
+				return;
+			}
+			for (SubscriptionMessage e : messages) {
+				if (e.getSTATUS_() == 0)
+					num += 1;
+			}
+		}
+		showsubsNum(num, messages.get(0).getTITLE_(), messages.get(0).getCREATEDATE_());
+	}
+
+	private void showsubsNum(int num, String title, String time) {
+		subsNum = num;
+		updateForUnReader();
+		iMessageView.updateHeaderView(6, num, num > 0 ? title : "", time);
+	}
+
+	private void saveSubs2Db(JSONObject o) throws Exception {
+		JSONArray array = o.getJSONArray("data");
+		if (ListUtils.isEmpty(array)) return;
+		SubMessage message = null;
+		JSONObject object = null;
+		List<SubMessage> chche = new ArrayList<>();
+		message = new SubMessage();
+		message.setDate(DateFormatUtil.long2Str(DateFormatUtil.YMD));
+		message.setRead(true);
+		message.setStatus(0);
+		chche.add(message);
+		for (int i = 0; i < array.size(); i++) {
+			object = array.getJSONObject(i);
+			message = new SubMessage();
+			message.setCreateTime(object.getLong("CREATEDATE_"));
+			int status = object.getInteger("STATUS_");
+			message.setStatus(i == 0 ? 1 : 2);
+			message.setTitle(object.getString("TITLE_"));
+			message.setSubTitle(object.getString("SUMDATA_"));
+			message.setRead(status == 0 ? false : true);
+			message.setId(object.getInteger("ID_"));
+			message.setNumId(object.getInteger("NUM_ID_"));
+			message.setInstanceId(object.getInteger("INSTANCE_ID_"));
+			if (message.getCreateTime() == 0) continue;
+			message.setDate(TimeUtils.s_long_2_str(message.getCreateTime()));
+			chche.add(message);
+		}
+		if (ListUtils.isEmpty(chche)) return;
+		SubsDao.getInstance().createOrUpdata(chche);
+	}
+
+	/**
+	 * 处理消息红点消息
+	 *
+	 * @param array
+	 */
+	private void handlerNewsFormErp(JSONArray array) {
+		if (ListUtils.isEmpty(array)) {
+			saveErp2DB(null);
+			return;
+		}
+		JSONObject object = null;
+		List<MessageModel> models = new ArrayList<>();
+		MessageModel model = null;
+		for (int i = 0; i < array.size(); i++) {
+			object = array.getJSONObject(i);
+			model = new MessageModel();
+			model.setTitle(object.getString("title"));
+			model.setSubTitle(object.getString("lastMessage"));
+			model.setTime(DateFormatUtil.long2Str(JSONUtil.getTime(object, "lastTime"), "yyyy-MM-dd HH:mm"));
+			model.setType(object.getString("type"));
+			if (object.containsKey("count") && object.get("count") != null)
+				model.setCount(object.getInteger("count"));
+			if (StringUtil.isEmpty(model.getTitle()) || StringUtil.isEmpty(model.getSubTitle()))
+				continue;
 //            if (model.getSubTitle().length() > 100)
 //            if (model.getSubTitle().length() > 100)
 //                model.setSubTitle(model.getSubTitle().substring(0, 18));
 //                model.setSubTitle(model.getSubTitle().substring(0, 18));
-            models.add(model);
-        }
-        saveErp2DB(models);
-    }
-
-    /**
-     * 保存erp数据到数据库
-     *
-     * @param models
-     */
-    private void saveErp2DB(final List<MessageModel> models) {
-        LogUtil.i("saveErp2DB");
-        new Thread(new Runnable() {
-            @Override
-            public void run() {
-                if (!ListUtils.isEmpty(models))
-                    MessageDao.getInstance().createOrinstart(models, true);
-                final List<BaseSortModel<Friend>> chche = loadDataByImAsync();//loadDataByImAsync()
-                OAHttpHelper.getInstance().post(new Runnable() {
-                    @Override
-                    public void run() {
-                        if (mFriendList == null) mFriendList = new ArrayList<>();
-                        mFriendList.clear();
-                        if (chche != null)
-                            mFriendList.addAll(chche);
-                        showByEndIm();
-                    }
-                });
-            }
-        }).start();
-    }
-
-    /**
-     * 通过返回数据,转变成相对应列表数据
-     *
-     * @param lastTime
-     * @return
-     */
-    private int getErpTime(String lastTime) {
-        if (StringUtil.isEmpty(lastTime)) {
-            return 0;
-        } else {
-            return (int) (DateFormatUtil.str2Long(lastTime, "yyyy-MM-dd HH:mm") / 1000);
-        }
-    }
-
-    /**
-     * 获取索引,用于排序
-     *
-     * @param mode
-     */
-    private final void setSortCondition(BaseSortModel<Friend> mode) throws Exception {
-        Friend friend = mode.getBean();
-        if (friend == null) {
-            return;
-        }
-        String name = friend.getShowName();
-        String wholeSpell = PingYinUtil.getPingYin(name);
-        if (!TextUtils.isEmpty(wholeSpell)) {
-            String firstLetter = Character.toString(wholeSpell.charAt(0));
-            mode.setWholeSpell(wholeSpell);
-            mode.setFirstLetter(firstLetter);
-            mode.setSimpleSpell(PingYinUtil.converterToFirstSpell(name));
-        } else {// 如果全拼为空,理论上是一种错误情况,因为这代表着昵称为空
-            mode.setWholeSpell("#");
-            mode.setFirstLetter("#");
-            mode.setSimpleSpell("#");
-        }
-    }
-
-
-    /**
-     * 异步请求加载新的筛选条件的数据
-     * <p/>
-     * 是下拉刷新,还是上拉加载
-     */
-    private List<BaseSortModel<Friend>> loadDataByImAsync() {
-        try {
-            String mLoginUserId = MyApplication.getInstance().mLoginUser.getUserId();
-            List<Friend> friends = FriendDao.getInstance().getNearlyFriendMsg(mLoginUserId);
-            List<MessageModel> model = MessageDao.getInstance().queryFirstFloor();
-            List<UUHelperModel> uuHelperModels = UUHelperDao.getInstance().getAllModels();
-            setFriendName(friends, mLoginUserId);
-            return handlerErpAndIm(friends, model, uuHelperModels);
-        } catch (Exception e) {
-            e.printStackTrace();
-            return null;
-        }
-    }
-
-    private void showByEndIm() {
-        iMessageView.clearSearch();
-        iMessageView.showModel(mFriendList);
-        updateForUnReader();
-    }
-
-    /**
-     * 整合erp和im消息内容
-     *
-     * @param friends
-     * @param models
-     */
-    private List<BaseSortModel<Friend>> handlerErpAndIm(List<Friend> friends, List<MessageModel> models, List<UUHelperModel> uuHelperItems) throws Exception {
-        if (friends == null) friends = new ArrayList<>();
-        List<BaseSortModel<Friend>> chche = new ArrayList<>();
-        emnewsNum = 0;
-        //处理消息数据库的数据
-        if (!ListUtils.isEmpty(models)) {
-            for (MessageModel m : models) {
-                Friend friend = new Friend();
-                friend.setNickName(m.getTitle());
-                friend.setContent(m.getSubTitle());
-                friend.setTimeSend(getErpTime(m.getTime()));
-                friend.setType(XmppMessage.TYPE_ERP);
-                friend.setDescription(m.getType());
-                friend.set_id(m.getId());
-                friend.setClickNum(m.getCount());
-                friend.setPhone(m.getReadTime());
-                int count = m.isReaded() ? 0 : m.getCount();
-                emnewsNum += count;
-                friend.setUnReadNum(count);
-                friends.add(friend);
-            }
-        }
-        if (!ListUtils.isEmpty(uuHelperItems)) {
-            Friend friend = new Friend();
-            friend.setNickName("UU 助手");
-            friend.setType(XmppMessage.TYPE_UUHELPER);
-            UUHelperModel lastModel = null;
-            int unReadUnm = 0;
-            for (UUHelperModel model : uuHelperItems) {
-                if (!model.isReaded()) {
-                    lastModel = model;
-                    unReadUnm++;
-                }
-            }
-            friend.setClickNum(unReadUnm);
-            uuHelperNum = unReadUnm;
-            friend.setUnReadNum(unReadUnm);
-            if (lastModel != null) {
-                friend.set_id(lastModel.getId());
-                friend.setTimeSend((int) (lastModel.getTimeSend() / 1000));
-                friend.setContent(lastModel.getTitle());
-            } else {
-                friend.setContent("");
-            }
-            friends.add(friend);
-        }
-        //处理im数据库和消息列表合并后的数据
-        if (friends != null && friends.size() > 0) {
-            for (int i = 0; i < friends.size(); i++) {
-                BaseSortModel<Friend> mode = new BaseSortModel<>();
-                mode.setBean(friends.get(i));
-                setSortCondition(mode);
-                chche.add(mode);
-            }
-        }
-        if (erpComparator == null) {
-            erpComparator = new Comparator<BaseSortModel<Friend>>() {
-                public int compare(BaseSortModel<Friend> s1, BaseSortModel<Friend> s2) {
-                    return (s1.getBean().getTimeSend() - s2.getBean().getTimeSend());
-                }
-            };
-        }
-        Collections.sort(chche, erpComparator);
-        return chche;
-    }
-
-    private void setFriendName(List<Friend> friends, String id) {
-        List<Friend> f = FriendDao.getInstance().getFriends(id);
-        if (friends == null) return;
-        for (int i = 0; i < friends.size(); i++) {
-            for (int j = 0; j < f.size(); j++) {
-                if (friends.get(i).get_id() == f.get(j).get_id()) {
-                    friends.get(i).setNickName(f.get(j).getNickName());
-                    friends.get(i).setRemarkName(f.get(j).getRemarkName());
-                    break;
-                }
-            }
-        }
-    }
-
-    /**
-     * 删除该类型文件
-     *
-     * @param position
-     */
-    public void deleteListByType(int position) {
-        if (ListUtils.isEmpty(mFriendList) || mFriendList.size() < position || position < 0) return;
-        Friend friend = mFriendList.get(position).getBean();
-        if (friend.getType() == XmppMessage.TYPE_ERP) {
-            if (!"kpi".equals(friend.getDescription()))
-                loadEmNewsDetails(friend.getDescription(), false);
-            else {
-                MessageDao.getInstance().deleteBytype(friend.getDescription());
-                loadData();
-            }
-        } else if (friend.getType() == XmppMessage.TYPE_UUHELPER) {
-            UUHelperDao.getInstance().deleteData(-1);
-            if (!ListUtils.isEmpty(mFriendList) && mFriendList.size() > position) {
-                mFriendList.remove(position);
-                iMessageView.showModel(mFriendList);
-            }
-        } else {
-            deleteByIm(friend, position);
-        }
-    }
-
-    /**
-     * 阅读该类型文件
-     *
-     * @param position
-     */
-    public void readerAllByType(int position) {
-        if (ListUtils.isEmpty(mFriendList) || mFriendList.size() < position) return;
-        Friend friend = mFriendList.get(position).getBean();
-        if (friend.getType() == XmppMessage.TYPE_ERP) {
-            loadEmNewsDetails(friend.getDescription(), true);
+			models.add(model);
+		}
+		saveErp2DB(models);
+	}
+
+	/**
+	 * 保存erp数据到数据库
+	 *
+	 * @param models
+	 */
+	private void saveErp2DB(final List<MessageModel> models) {
+		LogUtil.i("saveErp2DB");
+		new Thread(new Runnable() {
+			@Override
+			public void run() {
+				if (!ListUtils.isEmpty(models))
+					MessageDao.getInstance().createOrinstart(models, true);
+				final List<BaseSortModel<Friend>> chche = loadDataByImAsync();//loadDataByImAsync()
+				OAHttpHelper.getInstance().post(new Runnable() {
+					@Override
+					public void run() {
+						if (mFriendList == null) mFriendList = new ArrayList<>();
+						mFriendList.clear();
+						if (chche != null)
+							mFriendList.addAll(chche);
+						showByEndIm();
+					}
+				});
+			}
+		}).start();
+	}
+
+	/**
+	 * 通过返回数据,转变成相对应列表数据
+	 *
+	 * @param lastTime
+	 * @return
+	 */
+	private int getErpTime(String lastTime) {
+		if (StringUtil.isEmpty(lastTime)) {
+			return 0;
+		} else {
+			return (int) (DateFormatUtil.str2Long(lastTime, "yyyy-MM-dd HH:mm") / 1000);
+		}
+	}
+
+	/**
+	 * 获取索引,用于排序
+	 *
+	 * @param mode
+	 */
+	private final void setSortCondition(BaseSortModel<Friend> mode) throws Exception {
+		Friend friend = mode.getBean();
+		if (friend == null) {
+			return;
+		}
+		String name = friend.getShowName();
+		String wholeSpell = PingYinUtil.getPingYin(name);
+		if (!TextUtils.isEmpty(wholeSpell)) {
+			String firstLetter = Character.toString(wholeSpell.charAt(0));
+			mode.setWholeSpell(wholeSpell);
+			mode.setFirstLetter(firstLetter);
+			mode.setSimpleSpell(PingYinUtil.converterToFirstSpell(name));
+		} else {// 如果全拼为空,理论上是一种错误情况,因为这代表着昵称为空
+			mode.setWholeSpell("#");
+			mode.setFirstLetter("#");
+			mode.setSimpleSpell("#");
+		}
+	}
+
+
+	/**
+	 * 异步请求加载新的筛选条件的数据
+	 * <p/>
+	 * 是下拉刷新,还是上拉加载
+	 */
+	private List<BaseSortModel<Friend>> loadDataByImAsync() {
+		try {
+			String mLoginUserId = MyApplication.getInstance().mLoginUser.getUserId();
+			List<Friend> friends = FriendDao.getInstance().getNearlyFriendMsg(mLoginUserId);
+			List<MessageModel> model = MessageDao.getInstance().queryFirstFloor();
+			List<UUHelperModel> uuHelperModels = UUHelperDao.getInstance().getAllModels();
+			setFriendName(friends, mLoginUserId);
+			return handlerErpAndIm(friends, model, uuHelperModels);
+		} catch (Exception e) {
+			e.printStackTrace();
+			return null;
+		}
+	}
+
+	private void showByEndIm() {
+		iMessageView.clearSearch();
+		iMessageView.showModel(mFriendList);
+		updateForUnReader();
+	}
+
+	/**
+	 * 整合erp和im消息内容
+	 *
+	 * @param friends
+	 * @param models
+	 */
+	private List<BaseSortModel<Friend>> handlerErpAndIm(List<Friend> friends, List<MessageModel> models, List<UUHelperModel> uuHelperItems) throws Exception {
+		if (friends == null) friends = new ArrayList<>();
+		List<BaseSortModel<Friend>> chche = new ArrayList<>();
+		emnewsNum = 0;
+		//处理消息数据库的数据
+		if (!ListUtils.isEmpty(models)) {
+			for (MessageModel m : models) {
+				Friend friend = new Friend();
+				friend.setNickName(m.getTitle());
+				friend.setContent(m.getSubTitle());
+				friend.setTimeSend(getErpTime(m.getTime()));
+				friend.setType(XmppMessage.TYPE_ERP);
+				friend.setDescription(m.getType());
+				friend.set_id(m.getId());
+				friend.setClickNum(m.getCount());
+				friend.setPhone(m.getReadTime());
+				int count = m.isReaded() ? 0 : m.getCount();
+				emnewsNum += count;
+				friend.setUnReadNum(count);
+				friends.add(friend);
+			}
+		}
+		if (!ListUtils.isEmpty(uuHelperItems)) {
+			Friend friend = new Friend();
+			friend.setNickName("UU 助手");
+			friend.setType(XmppMessage.TYPE_UUHELPER);
+			UUHelperModel lastModel = null;
+			int unReadUnm = 0;
+			for (UUHelperModel model : uuHelperItems) {
+				if (!model.isReaded()) {
+					lastModel = model;
+					unReadUnm++;
+				}
+			}
+			friend.setClickNum(unReadUnm);
+			uuHelperNum = unReadUnm;
+			friend.setUnReadNum(unReadUnm);
+			if (lastModel != null) {
+				friend.set_id(lastModel.getId());
+				friend.setTimeSend((int) (lastModel.getTimeSend() / 1000));
+				friend.setContent(lastModel.getTitle());
+			} else {
+				friend.setContent("");
+			}
+			friends.add(friend);
+		}
+		//处理im数据库和消息列表合并后的数据
+		if (friends != null && friends.size() > 0) {
+			for (int i = 0; i < friends.size(); i++) {
+				BaseSortModel<Friend> mode = new BaseSortModel<>();
+				mode.setBean(friends.get(i));
+				setSortCondition(mode);
+				chche.add(mode);
+			}
+		}
+		if (erpComparator == null) {
+			erpComparator = new Comparator<BaseSortModel<Friend>>() {
+				public int compare(BaseSortModel<Friend> s1, BaseSortModel<Friend> s2) {
+					return (s1.getBean().getTimeSend() - s2.getBean().getTimeSend());
+				}
+			};
+		}
+		Collections.sort(chche, erpComparator);
+		return chche;
+	}
+
+	private void setFriendName(List<Friend> friends, String id) {
+		List<Friend> f = FriendDao.getInstance().getFriends(id);
+		if (friends == null) return;
+		for (int i = 0; i < friends.size(); i++) {
+			for (int j = 0; j < f.size(); j++) {
+				if (friends.get(i).get_id() == f.get(j).get_id()) {
+					friends.get(i).setNickName(f.get(j).getNickName());
+					friends.get(i).setRemarkName(f.get(j).getRemarkName());
+					break;
+				}
+			}
+		}
+	}
+
+	/**
+	 * 删除该类型文件
+	 *
+	 * @param position
+	 */
+	public void deleteListByType(int position) {
+		if (ListUtils.isEmpty(mFriendList) || mFriendList.size() < position || position < 0) return;
+		Friend friend = mFriendList.get(position).getBean();
+		if (friend.getType() == XmppMessage.TYPE_ERP) {
+			if (!"kpi".equals(friend.getDescription()))
+				loadEmNewsDetails(friend.getDescription(), false);
+			else {
+				MessageDao.getInstance().deleteBytype(friend.getDescription());
+				loadData();
+			}
+		} else if (friend.getType() == XmppMessage.TYPE_UUHELPER) {
+			UUHelperDao.getInstance().deleteData(-1);
+			if (!ListUtils.isEmpty(mFriendList) && mFriendList.size() > position) {
+				mFriendList.remove(position);
+				iMessageView.showModel(mFriendList);
+			}
+		} else {
+			deleteByIm(friend, position);
+		}
+	}
+
+	/**
+	 * 阅读该类型文件
+	 *
+	 * @param position
+	 */
+	public void readerAllByType(int position) {
+		if (ListUtils.isEmpty(mFriendList) || mFriendList.size() < position) return;
+		Friend friend = mFriendList.get(position).getBean();
+		if (friend.getType() == XmppMessage.TYPE_ERP) {
+			loadEmNewsDetails(friend.getDescription(), true);
 //            MessageDao.getInstance().upStatusByType(friend.getDescription(), true);
 //            MessageDao.getInstance().upStatusByType(friend.getDescription(), true);
 //            loadData();
 //            loadData();
-        } else if (friend.getType() == XmppMessage.TYPE_UUHELPER) {
-            UUHelperDao.getInstance().updateRead();
-        } else {
-            if (friend.getUnReadNum() > 0) {
-                MsgBroadcast.broadcastMsgNumUpdate(ct, false, friend.getUnReadNum());
-                friend.setUnReadNum(0);
-                iMessageView.showModel(mFriendList);
-            }
-        }
-    }
-
-    private void handlerEndOfReadOrDelete(String type, boolean isReaded) {
-        if (isReaded) {
-            MessageDao.getInstance().upStatusByType(type, true);
-        } else {
-            MessageDao.getInstance().deleteBytype(type);
-        }
-        loadData();
-    }
-
-    /**
-     * 计算搜索显示新的内容
-     *
-     * @param
-     */
-    public void search(String filter) {
-        this.filter = filter;
-        List<BaseSortModel<Friend>> chcheShow = new ArrayList<>();
-        if (!ListUtils.isEmpty(mFriendList)) {
-            for (int i = 0; i < mFriendList.size(); i++) {
-                BaseSortModel<Friend> mode = mFriendList.get(i);
-                // 获取筛选的数据
-                if (canShowbyFilter(mode)) {
-                    chcheShow.add(mode);
-                }
-
-            }
-        }
-        iMessageView.showModel(chcheShow);
-    }
-
-    private boolean canShowbyFilter(BaseSortModel<Friend> mode) {
-        if (TextUtils.isEmpty(filter) || mode.getSimpleSpell().startsWith(filter) || mode.getWholeSpell().startsWith(filter)
-                || mode.getBean().getShowName().startsWith(filter)) return true;
-        return false;
-
-    }
-
-
-    private void deleteByIm(Friend friend, int position) {
-        String mLoginUserId = MyApplication.getInstance().mLoginUser.getUserId();
-        if (friend.getRoomFlag() == 0) {
-            if (friend.getUnReadNum() > 0) {
-                MsgBroadcast.broadcastMsgNumUpdate(ct, false, friend.getUnReadNum());
-            }
-            BaseSortModel<Friend> mode = mFriendList.get(position);
-            mFriendList.remove(mode);
-            // 如果是普通的人,从好友表中删除最后一条消息的记录,这样就不会查出来了
-            FriendDao.getInstance().resetFriendMessage(mLoginUserId, friend.getUserId());
-            // 消息表中删除
-            ChatMessageDao.getInstance().deleteMessageTable(mLoginUserId, friend.getUserId());
-        } else {
-            deleteFriend(mLoginUserId, mFriendList.get(position));
-        }
-        iMessageView.showModel(mFriendList);
-    }
-
-    private void deleteFriend(final String loginUserId, final BaseSortModel<Friend> sortFriend) {
-        Friend friend = sortFriend.getBean();
-        if (friend.getUnReadNum() > 0) {
-            MsgBroadcast.broadcastMsgNumUpdate(ct, false, friend.getUnReadNum());
-        }
-        mFriendList.remove(sortFriend);
-        // 删除这个房间
-        FriendDao.getInstance().deleteFriend(loginUserId, friend.getUserId());
-        // 消息表中删除
-        ChatMessageDao.getInstance().deleteMessageTable(loginUserId, friend.getUserId());
-        if (this.unReaderListener != null) {
-            this.unReaderListener.exitMucChat(friend.getUserId());
-        }
-    }
-
-    /**
-     * 计算调转到那个界面
-     *
-     * @param mContext
-     * @param position
-     */
-    public void turn2NextAct(Activity mContext, int position) throws Exception {
-        Friend friend = mFriendList.get(position).getBean();
-        if (friend == null) {
-            return;
-        }
-        if (friend.getType() == XmppMessage.TYPE_ERP) {
-            //消息
-            turn2ERp(friend);
-            return;
-        } else if (friend.getType() == XmppMessage.TYPE_UUHELPER) {
-            ct.startActivity(new Intent(ct, UUHelperActivity.class));
-            UUHelperDao.getInstance().updateRead();
-            return;
-        }
-        if (friend.getRoomFlag() == 0) {
-            if (friend.getUserId().equals(Friend.ID_NEW_FRIEND_MESSAGE)) {// 新朋友消息
-                mContext.startActivity(new Intent("com.modular.appcontact.NewFriendActivity"));
-            } else {
-                Intent intent = new Intent("com.modular.message.ChatActivity");
-                intent.putExtra(AppConstant.FRIEND, friend);
-                mContext.startActivity(intent);
-            }
-        } else {
-            Intent intent = new Intent("com.modular.message.MucChatActivity");
-            intent.putExtra(AppConstant.EXTRA_USER_ID, friend.getUserId());
-            intent.putExtra(AppConstant.EXTRA_NICK_NAME, friend.getNickName());
-            intent.putExtra(AppConstant.EXTRA_IS_GROUP_CHAT, true);
-            mContext.startActivity(intent);
-        }
-        //将红点去除
-        if (friend.getUnReadNum() > 0) {
-            MsgBroadcast.broadcastMsgNumUpdate(mContext, false, friend.getUnReadNum());
-            friend.setUnReadNum(0);
-        }
-    }
-
-    /**
-     * 调转到对应ERP相关知会里面去
-     *
-     * @param friend
-     */
-    private void turn2ERp(Friend friend) {
-        String description = friend.getDescription();
-        if (StringUtil.isEmpty(description)) return;
-        Intent intent = new Intent(ct, MsgsSecondCommonActivity.class);
-        intent.putExtra("type", description);
-        intent.putExtra("title", friend.getNickName());
-        intent.putExtra("newmsgs", friend.getClickNum());
-        intent.putExtra("emcode", CommonUtil.getSharedPreferences(ct, "erp_username"));
-        if ("kpi".equals(description.trim()))
-            intent.putExtra("readTime", TimeUtils.f_long_2_str(System.currentTimeMillis()));
-        else
-            intent.putExtra("readTime", friend.getPhone());
-        ct.startActivity(intent);
-        MessageDao.getInstance().upStatus(friend.get_id(), friend.getDescription(), true);
-    }
-
-
-    /*跟新未读红点信息*/
-    private void updateForUnReader() {
-        int num = subsNum + processNum + uuHelperNum + emnewsNum + taskNum + bookingNum;
-        if (this.unReaderListener != null) {
-            this.unReaderListener.setUnReader(num);
-        }
-    }
-
-
-    public void setSubReadTime(String subReadTime) {
-        PreferenceUtils.putString(SUB_READ_TIME, subReadTime);
-        subsNum = 0;
-        updateForUnReader();
-        //TODO 判断订阅有没有新消息没读
-        iMessageView.updateHeaderView(2, subsNum, "", "");
-        this.subReadTime = subReadTime;
-    }
-
-    public void onDestroyView(Context mContext) {
-        try {
-            mContext.unregisterReceiver(dataChangeReceiver);
-        } catch (Exception e) {
-
-        }
-    }
-
-    private UnReaderListener unReaderListener;
-
-    public interface UnReaderListener {
-        void setUnReader(int number);
-
-        void exitMucChat(String userId);
-    }
+		} else if (friend.getType() == XmppMessage.TYPE_UUHELPER) {
+			UUHelperDao.getInstance().updateRead();
+		} else {
+			if (friend.getUnReadNum() > 0) {
+				MsgBroadcast.broadcastMsgNumUpdate(ct, false, friend.getUnReadNum());
+				friend.setUnReadNum(0);
+				iMessageView.showModel(mFriendList);
+			}
+		}
+	}
+
+	private void handlerEndOfReadOrDelete(String type, boolean isReaded) {
+		if (isReaded) {
+			MessageDao.getInstance().upStatusByType(type, true);
+		} else {
+			MessageDao.getInstance().deleteBytype(type);
+		}
+		loadData();
+	}
+
+	/**
+	 * 计算搜索显示新的内容
+	 *
+	 * @param
+	 */
+	public void search(String filter) {
+		this.filter = filter;
+		List<BaseSortModel<Friend>> chcheShow = new ArrayList<>();
+		if (!ListUtils.isEmpty(mFriendList)) {
+			for (int i = 0; i < mFriendList.size(); i++) {
+				BaseSortModel<Friend> mode = mFriendList.get(i);
+				// 获取筛选的数据
+				if (canShowbyFilter(mode)) {
+					chcheShow.add(mode);
+				}
+
+			}
+		}
+		iMessageView.showModel(chcheShow);
+	}
+
+	private boolean canShowbyFilter(BaseSortModel<Friend> mode) {
+		if (TextUtils.isEmpty(filter) || mode.getSimpleSpell().startsWith(filter) || mode.getWholeSpell().startsWith(filter)
+				|| mode.getBean().getShowName().startsWith(filter)) return true;
+		return false;
+
+	}
+
+
+	private void deleteByIm(Friend friend, int position) {
+		String mLoginUserId = MyApplication.getInstance().mLoginUser.getUserId();
+		if (friend.getRoomFlag() == 0) {
+			if (friend.getUnReadNum() > 0) {
+				MsgBroadcast.broadcastMsgNumUpdate(ct, false, friend.getUnReadNum());
+			}
+			BaseSortModel<Friend> mode = mFriendList.get(position);
+			mFriendList.remove(mode);
+			// 如果是普通的人,从好友表中删除最后一条消息的记录,这样就不会查出来了
+			FriendDao.getInstance().resetFriendMessage(mLoginUserId, friend.getUserId());
+			// 消息表中删除
+			ChatMessageDao.getInstance().deleteMessageTable(mLoginUserId, friend.getUserId());
+		} else {
+			deleteFriend(mLoginUserId, mFriendList.get(position));
+		}
+		iMessageView.showModel(mFriendList);
+	}
+
+	private void deleteFriend(final String loginUserId, final BaseSortModel<Friend> sortFriend) {
+		Friend friend = sortFriend.getBean();
+		if (friend.getUnReadNum() > 0) {
+			MsgBroadcast.broadcastMsgNumUpdate(ct, false, friend.getUnReadNum());
+		}
+		mFriendList.remove(sortFriend);
+		// 删除这个房间
+		FriendDao.getInstance().deleteFriend(loginUserId, friend.getUserId());
+		// 消息表中删除
+		ChatMessageDao.getInstance().deleteMessageTable(loginUserId, friend.getUserId());
+		if (this.unReaderListener != null) {
+			this.unReaderListener.exitMucChat(friend.getUserId());
+		}
+	}
+
+	/**
+	 * 计算调转到那个界面
+	 *
+	 * @param mContext
+	 * @param position
+	 */
+	public void turn2NextAct(Activity mContext, int position) throws Exception {
+		Friend friend = mFriendList.get(position).getBean();
+		if (friend == null) {
+			return;
+		}
+		if (friend.getType() == XmppMessage.TYPE_ERP) {
+			//消息
+			turn2ERp(friend);
+			return;
+		} else if (friend.getType() == XmppMessage.TYPE_UUHELPER) {
+			ct.startActivity(new Intent(ct, UUHelperActivity.class));
+			UUHelperDao.getInstance().updateRead();
+			return;
+		}
+		if (friend.getRoomFlag() == 0) {
+			if (friend.getUserId().equals(Friend.ID_NEW_FRIEND_MESSAGE)) {// 新朋友消息
+				mContext.startActivity(new Intent("com.modular.appcontact.NewFriendActivity"));
+			} else {
+				Intent intent = new Intent("com.modular.message.ChatActivity");
+				intent.putExtra(AppConstant.FRIEND, friend);
+				mContext.startActivity(intent);
+			}
+		} else {
+			Intent intent = new Intent("com.modular.message.MucChatActivity");
+			intent.putExtra(AppConstant.EXTRA_USER_ID, friend.getUserId());
+			intent.putExtra(AppConstant.EXTRA_NICK_NAME, friend.getNickName());
+			intent.putExtra(AppConstant.EXTRA_IS_GROUP_CHAT, true);
+			mContext.startActivity(intent);
+		}
+		//将红点去除
+		if (friend.getUnReadNum() > 0) {
+			MsgBroadcast.broadcastMsgNumUpdate(mContext, false, friend.getUnReadNum());
+			friend.setUnReadNum(0);
+		}
+	}
+
+	/**
+	 * 调转到对应ERP相关知会里面去
+	 *
+	 * @param friend
+	 */
+	private void turn2ERp(Friend friend) {
+		String description = friend.getDescription();
+		if (StringUtil.isEmpty(description)) return;
+		Intent intent = new Intent(ct, MsgsSecondCommonActivity.class);
+		intent.putExtra("type", description);
+		intent.putExtra("title", friend.getNickName());
+		intent.putExtra("newmsgs", friend.getClickNum());
+		intent.putExtra("emcode", CommonUtil.getSharedPreferences(ct, "erp_username"));
+		if ("kpi".equals(description.trim()))
+			intent.putExtra("readTime", TimeUtils.f_long_2_str(System.currentTimeMillis()));
+		else
+			intent.putExtra("readTime", friend.getPhone());
+		ct.startActivity(intent);
+		MessageDao.getInstance().upStatus(friend.get_id(), friend.getDescription(), true);
+	}
+
+
+	/*跟新未读红点信息*/
+	private void updateForUnReader() {
+		int num = subsNum + processNum + uuHelperNum + emnewsNum + taskNum + bookingNum;
+		if (this.unReaderListener != null) {
+			this.unReaderListener.setUnReader(num);
+		}
+	}
+
+
+	public void setSubReadTime(String subReadTime) {
+		PreferenceUtils.putString(SUB_READ_TIME, subReadTime);
+		subsNum = 0;
+		updateForUnReader();
+		//TODO 判断订阅有没有新消息没读
+		iMessageView.updateHeaderView(6, subsNum, "", "");
+		this.subReadTime = subReadTime;
+	}
+
+	public void onDestroyView(Context mContext) {
+		try {
+			mContext.unregisterReceiver(dataChangeReceiver);
+		} catch (Exception e) {
+
+		}
+	}
+
+	private UnReaderListener unReaderListener;
+
+	public interface UnReaderListener {
+		void setUnReader(int number);
+
+		void exitMucChat(String userId);
+	}
+
+
+	public List<MessageHeader> getHeaderModels() {
+		List<MessageHeader> models = new ArrayList<>();
+		MessageHeader model = null;
+		if (CommonUtil.getUserRole().equals("1")) {//个人用户
+			model = new MessageHeader(StringUtil.getMessage(R.string.booking_menu));
+			model.setIcon(R.drawable.icon_yuyue3);
+			model.setSubDoc("");
+			model.setRedKey(Constants.MESSAGE_YUYUE);
+			model.setType(2);
+			model.setTag("");
+			models.add(model);
+
+			model = new MessageHeader("餐饮");
+			model.setIcon(R.drawable.icon_food);
+			model.setSubDoc("美味齐全");
+			model.setRedKey(Constants.MESSAGE_FOOD);
+			model.setType(1);
+			model.setTag("10003");
+			models.add(model);
+
+			model = new MessageHeader("美容美发");
+			model.setIcon(R.drawable.icon_hair);
+			model.setSubDoc("时尚潮流");
+			model.setRedKey(Constants.MESSAGE_HAIR);
+			model.setType(1);
+			model.setTag("10004");
+			models.add(model);
+
+			model = new MessageHeader("KTV");
+			model.setIcon(R.drawable.icon_ktv);
+			model.setSubDoc("音乐节");
+			model.setRedKey(Constants.MESSAGE_KTV);
+			model.setType(1);
+			model.setTag("10006");
+			models.add(model);
+
+			model = new MessageHeader("运动健身");
+			model.setIcon(R.drawable.icon_sport);
+			model.setSubDoc("hi起来");
+			model.setRedKey(Constants.MESSAGE_SPORT);
+			model.setType(1);
+			model.setTag("10002");
+			models.add(model);
+
+			model = new MessageHeader("会所");
+			model.setIcon(R.drawable.icon_club);
+			model.setSubDoc("预约有优惠");
+			model.setRedKey(Constants.MESSAGE_CLUB);
+			model.setType(1);
+			model.setTag("10005");
+			models.add(model);
+
+			model = new MessageHeader("医院挂号");
+			model.setIcon(R.drawable.icon_hospital);
+			model.setSubDoc("您的健康助手");
+			model.setRedKey(Constants.MESSAGE_HOSPITAL);
+			model.setType(1);
+			model.setTag("10001");
+			models.add(model);
+		} else {
+			model = new MessageHeader(StringUtil.getMessage(R.string.msg_approval));
+			model.setIcon(R.drawable.home_image_01_u);
+			model.setSubDoc("");
+			model.setRedKey("");
+			model.setType(4);
+			model.setTag("");
+			models.add(model);
+
+			model = new MessageHeader(StringUtil.getMessage(R.string.msg_work));
+			model.setIcon(R.drawable.daibangongzuo);
+			model.setSubDoc("");
+			model.setRedKey("");
+			model.setType(5);
+			model.setTag("");
+			models.add(model);
+
+			model = new MessageHeader(StringUtil.getMessage(R.string.msg_subscribe));
+			model.setIcon(R.drawable.tingyue);
+			model.setSubDoc("");
+			model.setRedKey(Constants.MESSAGE_DINGYUE);
+			model.setRedMessage(StringUtil.getMessage(R.string.msg_subscribe_data));
+			model.setType(6);
+			model.setTag("");
+			models.add(model);
+		}
+
+		model = new MessageHeader(StringUtil.getMessage(R.string.set_sport));
+		model.setIcon(R.drawable.uu_run);
+		model.setSubDoc("");
+		model.setRedKey(Constants.MESSAGE_RUN);
+		model.setType(3);
+		model.setTag("");
+		models.add(model);
+		return models;
+	}
+
+
+	public void turn2ActByHeader(Activity ct, MessageHeader model) {
+		Intent intent = null;
+		switch (model.getType()) {
+			case 1://个人版本的服务预约预约类型
+				SBMenuModel menuModel = new SBMenuModel();
+				menuModel.setUrl("");
+				menuModel.setCode(model.getTag());
+				menuModel.setIcon(model.getIcon());
+				menuModel.setDesc(model.getSubDoc());
+				menuModel.setTitle(model.getName());
+				intent = new Intent(ct, BServiceListActivity.class);
+				intent.putExtra("SBMenuModel", menuModel);
+				ct.startActivity(intent);
+				break;
+			case 2://服务预约主页
+				ct.startActivity(new Intent("com.modular.booking.BookingListActivity"));
+				break;
+			case 3://uu运动
+//				ct.startActivity(new Intent(ct, UUSportActivity.class));
+				ct.startActivity(new Intent("com.modular.appme.UURanking"));
+				break;
+			case 4:
+				if (isB2b) {
+					ct.startActivity(new Intent(ct, ProcessB2BActivity.class));
+				} else {
+					ct.startActivity(new Intent(ct, ProcessMsgActivity.class));
+				}
+				break;
+			case 5:
+				if (isB2b) {
+					ct.startActivity(new Intent("com.modular.task.TaskB2BActivity"));
+				} else {
+					ct.startActivity(new Intent("com.modular.task.TaskActivity"));
+				}
+				break;
+			case 6:
+				setSubReadTime(DateFormatUtil.long2Str(DateFormatUtil.YMD));
+				ct.startActivity(new Intent(ct, Subscription2Activity.class));
+				break;
+
+
+		}
+	}
 }
 }

+ 1 - 1
app_modular/appmessages/src/main/java/com/modular/appmessages/presenter/imp/IMessageView.java

@@ -15,7 +15,7 @@ public interface IMessageView  {
 
 
     void clearSearch();
     void clearSearch();
 
 
-    void updateHeaderView(int postion, int num, String subTitle,String time);
+    void updateHeaderView(int type, int num, String subTitle,String time);
 
 
     void changeNet(boolean workConnected);
     void changeNet(boolean workConnected);
 }
 }

BIN
app_modular/appmessages/src/main/res/drawable-xhdpi/icon_message_food.png


BIN
app_modular/appmessages/src/main/res/drawable-xhdpi/icon_message_hair.png


BIN
app_modular/appmessages/src/main/res/drawable-xhdpi/icon_message_hospital.png


BIN
app_modular/appmessages/src/main/res/drawable-xhdpi/icon_message_huisuo.png


BIN
app_modular/appmessages/src/main/res/drawable-xhdpi/icon_message_ktv.png


BIN
app_modular/appmessages/src/main/res/drawable-xhdpi/icon_message_sport.png


BIN
app_modular/appmessages/src/main/res/drawable-xxhdpi/icon_message_food.png


BIN
app_modular/appmessages/src/main/res/drawable-xxhdpi/icon_message_hair.png


BIN
app_modular/appmessages/src/main/res/drawable-xxhdpi/icon_message_hospital.png


BIN
app_modular/appmessages/src/main/res/drawable-xxhdpi/icon_message_huisuo.png


BIN
app_modular/appmessages/src/main/res/drawable-xxhdpi/icon_message_ktv.png


BIN
app_modular/appmessages/src/main/res/drawable-xxhdpi/icon_message_sport.png


+ 14 - 0
app_modular/appmessages/src/main/res/layout/header_message.xml

@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:focusableInTouchMode="true">
+
+    <com.core.widget.MyListView
+        android:id="@+id/headerLV"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:divider="@color/item_line"
+        android:dividerHeight="@dimen/line"
+        android:focusableInTouchMode="false"/>
+</RelativeLayout>

+ 95 - 0
app_modular/appmessages/src/main/res/layout/item_message_header.xml

@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+                xmlns:app="http://schemas.android.com/apk/res-auto"
+                android:layout_width="match_parent"
+                android:layout_height="@dimen/item_height"
+                android:background="@drawable/selector_me_menu_item_bg"
+                android:descendantFocusability="blocksDescendants"
+                android:minHeight="@dimen/item_height"
+                android:paddingLeft="15dp"
+                android:paddingRight="15dp">
+
+    <FrameLayout
+        android:id="@+id/headerFl"
+        android:layout_width="57dp"
+        android:layout_height="65dp"
+        android:layout_centerVertical="true">
+
+        <ImageView
+            android:id="@+id/headerImg"
+            android:layout_width="@dimen/item_img_height"
+            android:layout_height="@dimen/item_img_width"
+            android:layout_gravity="center_vertical"
+            android:background="@color/transparent"
+            android:contentDescription="@string/app_name"
+            android:padding="1dp"
+            android:src="@drawable/icon_message_huisuo"/>
+
+        <TextView
+            android:id="@+id/headerNumTv"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_gravity="top|right"
+            android:background="@drawable/tab_unread_bg"
+            android:gravity="center"
+            android:text="999"
+            android:textColor="@android:color/white"
+            android:textSize="10.0dp"
+            android:visibility="gone"/>
+    </FrameLayout>
+
+    <RelativeLayout
+        android:id="@+id/headerContactRl"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:layout_centerVertical="true"
+        android:layout_marginLeft="3dp"
+        android:layout_toRightOf="@id/headerFl"
+        android:gravity="center_vertical">
+
+        <com.core.widget.RedView
+            android:id="@+id/headerRv"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_alignParentRight="true"
+            android:layout_marginRight="8dp"
+            app:showImage="false"
+            android:visibility="gone"
+            app:text=""/>
+
+        <TextView
+            android:id="@+id/timeTv"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_alignParentRight="true"
+            android:layout_marginRight="8dp"
+            android:visibility="gone"
+            />
+
+        <TextView
+            android:id="@+id/titleTv"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_toLeftOf="@+id/schedule_time_tv"
+            android:ellipsize="end"
+            android:lines="1"
+            android:text="会所"
+            android:textColor="@color/text_main"
+            android:textSize="16sp"/>
+
+
+        <TextView
+            android:id="@+id/headerSubTv"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_below="@id/titleTv"
+            android:layout_marginTop="8dp"
+            android:layout_toLeftOf="@+id/schedule_time_tv"
+            android:ellipsize="end"
+            android:lines="1"
+            android:text="预约有优惠"
+            android:textColor="@color/text_hine"
+            android:textSize="14sp"/>
+    </RelativeLayout>
+
+</RelativeLayout>

+ 550 - 0
app_modular/appmessages/src/main/res/layout/personal_message_header.xml

@@ -0,0 +1,550 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+              xmlns:app="http://schemas.android.com/apk/res-auto"
+              android:id="@+id/personalLL"
+              android:layout_width="match_parent"
+              android:layout_height="match_parent"
+              android:orientation="vertical"
+              android:visibility="gone">
+
+    <RelativeLayout
+        android:id="@+id/foodRl"
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/item_height"
+        android:background="@drawable/selector_me_menu_item_bg"
+        android:descendantFocusability="blocksDescendants"
+        android:minHeight="@dimen/item_height"
+        android:paddingLeft="15dp"
+        android:paddingRight="15dp">
+
+        <FrameLayout
+            android:id="@+id/foodFl"
+            android:layout_width="57dp"
+            android:layout_height="65dp"
+            android:layout_centerVertical="true">
+
+            <ImageView
+                android:id="@+id/foodImg"
+                android:layout_width="@dimen/item_img_height"
+                android:layout_height="@dimen/item_img_width"
+                android:layout_gravity="center_vertical"
+                android:background="@color/transparent"
+                android:contentDescription="@string/app_name"
+                android:padding="1dp"
+                android:src="@drawable/icon_message_food"/>
+
+            <TextView
+                android:id="@+id/foodNumTv"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_gravity="top|right"
+                android:background="@drawable/tab_unread_bg"
+                android:gravity="center"
+                android:text="999"
+                android:textColor="@android:color/white"
+                android:textSize="10.0dp"
+                android:visibility="gone"/>
+        </FrameLayout>
+
+        <RelativeLayout
+            android:id="@+id/foodContactRl"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:layout_centerVertical="true"
+            android:layout_marginLeft="3dp"
+            android:layout_toRightOf="@id/foodFl"
+            android:gravity="center_vertical">
+
+            <com.core.widget.RedView
+                android:id="@+id/foodRv"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_alignParentRight="true"
+                android:layout_marginRight="8dp"
+                app:showImage="false"
+                app:text=""/>
+
+            <TextView
+                android:id="@+id/foodTv"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_toLeftOf="@+id/schedule_time_tv"
+                android:ellipsize="end"
+                android:lines="1"
+                android:text="餐饮"
+                android:textColor="@color/text_main"
+                android:textSize="16sp"/>
+
+
+            <TextView
+                android:id="@+id/foodSubTv"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_below="@id/foodTv"
+                android:layout_marginTop="8dp"
+                android:layout_toLeftOf="@+id/schedule_time_tv"
+                android:ellipsize="end"
+                android:lines="1"
+                android:text="美味齐全"
+                android:textColor="@color/text_hine"
+                android:textSize="14sp"/>
+        </RelativeLayout>
+
+    </RelativeLayout>
+
+    <View
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/line"
+        android:background="@color/item_line"/>
+
+    <RelativeLayout
+        android:id="@+id/hairRl"
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/item_height"
+        android:background="@drawable/selector_me_menu_item_bg"
+        android:descendantFocusability="blocksDescendants"
+        android:minHeight="@dimen/item_height"
+        android:paddingLeft="15dp"
+        android:paddingRight="15dp">
+
+        <FrameLayout
+            android:id="@+id/hairFl"
+            android:layout_width="57dp"
+            android:layout_height="65dp"
+            android:layout_centerVertical="true">
+
+            <ImageView
+                android:id="@+id/hairImg"
+                android:layout_width="@dimen/item_img_height"
+                android:layout_height="@dimen/item_img_width"
+                android:layout_gravity="center_vertical"
+                android:background="@color/transparent"
+                android:contentDescription="@string/app_name"
+                android:padding="1dp"
+                android:src="@drawable/icon_message_hair"/>
+
+            <TextView
+                android:id="@+id/hairNumTv"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_gravity="top|right"
+                android:background="@drawable/tab_unread_bg"
+                android:gravity="center"
+                android:text="999"
+                android:textColor="@android:color/white"
+                android:textSize="10.0dp"
+                android:visibility="gone"/>
+        </FrameLayout>
+
+        <RelativeLayout
+            android:id="@+id/hairContactRl"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:layout_centerVertical="true"
+            android:layout_marginLeft="3dp"
+            android:layout_toRightOf="@id/hairFl"
+            android:gravity="center_vertical">
+
+            <com.core.widget.RedView
+                android:id="@+id/hairRv"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_alignParentRight="true"
+                android:layout_marginRight="8dp"
+                app:showImage="false"
+                app:text=""/>
+
+            <TextView
+                android:id="@+id/hairTv"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_toLeftOf="@+id/schedule_time_tv"
+                android:ellipsize="end"
+                android:lines="1"
+                android:text="美容美发"
+                android:textColor="@color/text_main"
+                android:textSize="16sp"/>
+
+
+            <TextView
+                android:id="@+id/hairSubTv"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_below="@id/hairTv"
+                android:layout_marginTop="8dp"
+                android:layout_toLeftOf="@+id/schedule_time_tv"
+                android:ellipsize="end"
+                android:lines="1"
+                android:text="时尚潮流"
+                android:textColor="@color/text_hine"
+                android:textSize="14sp"/>
+        </RelativeLayout>
+
+    </RelativeLayout>
+
+    <View
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/line"
+        android:background="@color/item_line"/>
+
+    <RelativeLayout
+        android:id="@+id/ktvRl"
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/item_height"
+        android:background="@drawable/selector_me_menu_item_bg"
+        android:descendantFocusability="blocksDescendants"
+        android:minHeight="@dimen/item_height"
+        android:paddingLeft="15dp"
+        android:paddingRight="15dp">
+
+        <FrameLayout
+            android:id="@+id/ktvFl"
+            android:layout_width="57dp"
+            android:layout_height="65dp"
+            android:layout_centerVertical="true">
+
+            <ImageView
+                android:id="@+id/ktvImg"
+                android:layout_width="@dimen/item_img_height"
+                android:layout_height="@dimen/item_img_width"
+                android:layout_gravity="center_vertical"
+                android:background="@color/transparent"
+                android:contentDescription="@string/app_name"
+                android:padding="1dp"
+                android:src="@drawable/icon_message_ktv"/>
+
+            <TextView
+                android:id="@+id/ktvNumTv"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_gravity="top|right"
+                android:background="@drawable/tab_unread_bg"
+                android:gravity="center"
+                android:text="999"
+                android:textColor="@android:color/white"
+                android:textSize="10.0dp"
+                android:visibility="gone"/>
+        </FrameLayout>
+
+        <RelativeLayout
+            android:id="@+id/ktvContactRl"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:layout_centerVertical="true"
+            android:layout_marginLeft="3dp"
+            android:layout_toRightOf="@id/ktvFl"
+            android:gravity="center_vertical">
+
+            <com.core.widget.RedView
+                android:id="@+id/ktvRv"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_alignParentRight="true"
+                android:layout_marginRight="8dp"
+                app:showImage="false"
+                app:text=""/>
+
+            <TextView
+                android:id="@+id/ktvTv"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_toLeftOf="@+id/schedule_time_tv"
+                android:ellipsize="end"
+                android:lines="1"
+                android:text="KTV"
+                android:textColor="@color/text_main"
+                android:textSize="16sp"/>
+
+
+            <TextView
+                android:id="@+id/ktvSubTv"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_below="@id/ktvTv"
+                android:layout_marginTop="8dp"
+                android:layout_toLeftOf="@+id/schedule_time_tv"
+                android:ellipsize="end"
+                android:lines="1"
+                android:text="音乐节"
+                android:textColor="@color/text_hine"
+                android:textSize="14sp"/>
+        </RelativeLayout>
+
+    </RelativeLayout>
+
+    <View
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/line"
+        android:background="@color/item_line"/>
+
+    <RelativeLayout
+        android:id="@+id/sportRl"
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/item_height"
+        android:background="@drawable/selector_me_menu_item_bg"
+        android:descendantFocusability="blocksDescendants"
+        android:minHeight="@dimen/item_height"
+        android:paddingLeft="15dp"
+        android:paddingRight="15dp">
+
+        <FrameLayout
+            android:id="@+id/sportFl"
+            android:layout_width="57dp"
+            android:layout_height="65dp"
+            android:layout_centerVertical="true">
+
+            <ImageView
+                android:id="@+id/sportImg"
+                android:layout_width="@dimen/item_img_height"
+                android:layout_height="@dimen/item_img_width"
+                android:layout_gravity="center_vertical"
+                android:background="@color/transparent"
+                android:contentDescription="@string/app_name"
+                android:padding="1dp"
+                android:src="@drawable/icon_message_sport"/>
+
+            <TextView
+                android:id="@+id/sportNumTv"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_gravity="top|right"
+                android:background="@drawable/tab_unread_bg"
+                android:gravity="center"
+                android:text="999"
+                android:textColor="@android:color/white"
+                android:textSize="10.0dp"
+                android:visibility="gone"/>
+        </FrameLayout>
+
+        <RelativeLayout
+            android:id="@+id/sportContactRl"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:layout_centerVertical="true"
+            android:layout_marginLeft="3dp"
+            android:layout_toRightOf="@id/sportFl"
+            android:gravity="center_vertical">
+
+            <com.core.widget.RedView
+                android:id="@+id/sportRv"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_alignParentRight="true"
+                android:layout_marginRight="8dp"
+                app:showImage="false"
+                app:text=""/>
+
+            <TextView
+                android:id="@+id/sportTv"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_toLeftOf="@+id/schedule_time_tv"
+                android:ellipsize="end"
+                android:lines="1"
+                android:text="运动健身"
+                android:textColor="@color/text_main"
+                android:textSize="16sp"/>
+
+
+            <TextView
+                android:id="@+id/sportSubTv"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_below="@id/sportTv"
+                android:layout_marginTop="8dp"
+                android:layout_toLeftOf="@+id/schedule_time_tv"
+                android:ellipsize="end"
+                android:lines="1"
+                android:text="hi起来"
+                android:textColor="@color/text_hine"
+                android:textSize="14sp"/>
+        </RelativeLayout>
+
+    </RelativeLayout>
+
+    <View
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/line"
+        android:background="@color/item_line"/>
+
+    <RelativeLayout
+        android:id="@+id/clubRl"
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/item_height"
+        android:background="@drawable/selector_me_menu_item_bg"
+        android:descendantFocusability="blocksDescendants"
+        android:minHeight="@dimen/item_height"
+        android:paddingLeft="15dp"
+        android:paddingRight="15dp">
+
+        <FrameLayout
+            android:id="@+id/clubFl"
+            android:layout_width="57dp"
+            android:layout_height="65dp"
+            android:layout_centerVertical="true">
+
+            <ImageView
+                android:id="@+id/clubImg"
+                android:layout_width="@dimen/item_img_height"
+                android:layout_height="@dimen/item_img_width"
+                android:layout_gravity="center_vertical"
+                android:background="@color/transparent"
+                android:contentDescription="@string/app_name"
+                android:padding="1dp"
+                android:src="@drawable/icon_message_huisuo"/>
+
+            <TextView
+                android:id="@+id/clubNumTv"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_gravity="top|right"
+                android:background="@drawable/tab_unread_bg"
+                android:gravity="center"
+                android:text="999"
+                android:textColor="@android:color/white"
+                android:textSize="10.0dp"
+                android:visibility="gone"/>
+        </FrameLayout>
+
+        <RelativeLayout
+            android:id="@+id/clubContactRl"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:layout_centerVertical="true"
+            android:layout_marginLeft="3dp"
+            android:layout_toRightOf="@id/clubFl"
+            android:gravity="center_vertical">
+
+            <com.core.widget.RedView
+                android:id="@+id/clubRv"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_alignParentRight="true"
+                android:layout_marginRight="8dp"
+                app:showImage="false"
+                app:text=""/>
+
+            <TextView
+                android:id="@+id/clubTv"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_toLeftOf="@+id/schedule_time_tv"
+                android:ellipsize="end"
+                android:lines="1"
+                android:text="会所"
+                android:textColor="@color/text_main"
+                android:textSize="16sp"/>
+
+
+            <TextView
+                android:id="@+id/clubSubTv"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_below="@id/clubTv"
+                android:layout_marginTop="8dp"
+                android:layout_toLeftOf="@+id/schedule_time_tv"
+                android:ellipsize="end"
+                android:lines="1"
+                android:text="预约有优惠"
+                android:textColor="@color/text_hine"
+                android:textSize="14sp"/>
+        </RelativeLayout>
+
+    </RelativeLayout>
+
+    <View
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/line"
+        android:background="@color/item_line"/>
+
+
+    <RelativeLayout
+        android:id="@+id/hospitalRl"
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/item_height"
+        android:background="@drawable/selector_me_menu_item_bg"
+        android:descendantFocusability="blocksDescendants"
+        android:minHeight="@dimen/item_height"
+        android:paddingLeft="15dp"
+        android:paddingRight="15dp">
+
+        <FrameLayout
+            android:id="@+id/hospitalFl"
+            android:layout_width="57dp"
+            android:layout_height="65dp"
+            android:layout_centerVertical="true">
+
+            <ImageView
+                android:id="@+id/hospitalImg"
+                android:layout_width="@dimen/item_img_height"
+                android:layout_height="@dimen/item_img_width"
+                android:layout_gravity="center_vertical"
+                android:background="@color/transparent"
+                android:contentDescription="@string/app_name"
+                android:padding="1dp"
+                android:src="@drawable/icon_message_hospital"/>
+
+            <TextView
+                android:id="@+id/hospitalNumTv"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_gravity="top|right"
+                android:background="@drawable/tab_unread_bg"
+                android:gravity="center"
+                android:text="999"
+                android:textColor="@android:color/white"
+                android:textSize="10.0dp"
+                android:visibility="gone"/>
+        </FrameLayout>
+
+        <RelativeLayout
+            android:id="@+id/hospitalContactRl"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:layout_centerVertical="true"
+            android:layout_marginLeft="3dp"
+            android:layout_toRightOf="@id/hospitalFl"
+            android:gravity="center_vertical">
+
+            <com.core.widget.RedView
+                android:id="@+id/hospitalRv"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_alignParentRight="true"
+                android:layout_marginRight="8dp"
+                app:showImage="false"
+                app:text=""/>
+
+            <TextView
+                android:id="@+id/hospitalTv"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_toLeftOf="@+id/schedule_time_tv"
+                android:ellipsize="end"
+                android:lines="1"
+                android:text="医院挂号"
+                android:textColor="@color/text_main"
+                android:textSize="16sp"/>
+
+
+            <TextView
+                android:id="@+id/hospitalSubTv"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_below="@id/hospitalTv"
+                android:layout_marginTop="8dp"
+                android:layout_toLeftOf="@+id/schedule_time_tv"
+                android:ellipsize="end"
+                android:lines="1"
+                android:text="您的健康助手"
+                android:textColor="@color/text_hine"
+                android:textSize="14sp"/>
+        </RelativeLayout>
+
+    </RelativeLayout>
+
+    <View
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/line"
+        android:background="@color/item_line"/>
+</LinearLayout>

+ 1 - 1
app_modular/apptasks/src/main/AndroidManifest.xml

@@ -7,7 +7,7 @@
         android:label="@string/app_name"
         android:label="@string/app_name"
         android:supportsRtl="true">
         android:supportsRtl="true">
         <receiver
         <receiver
-            android:name=".service.AutoTaskReceiver"
+            android:name=".receiver.AutoTaskReceiver"
             android:enabled="true"
             android:enabled="true"
             android:exported="true">
             android:exported="true">
             <intent-filter>
             <intent-filter>

+ 0 - 61
app_modular/apptasks/src/main/java/com/modular/apptasks/AutoTasks.java

@@ -1,61 +0,0 @@
-package com.modular.apptasks;
-
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-
-import com.core.utils.CommonInterface;
-import com.modular.apptasks.service.AutoTaskHttp;
-
-/**
- * Created by Bitliker on 2017/9/29.
- */
-
-public class AutoTasks {
-	private static AutoTasks instance;
-	private AutoTaskHttp taskHttp;
-	public static AutoTasks getInstance() {
-		AutoTasks inst = instance;
-		if (inst == null) {
-			synchronized (AutoTasks.class) {
-				inst = instance;
-				if (inst == null) {
-					inst = new AutoTasks();
-					instance = inst;
-				}
-			}
-		}
-		return inst;
-	}
-
-	private AutoTasks() {
-
-	}
-
-	//初始化时候
-	public void initTask() {
-		initMission();
-	}
-
-	/**
-	 * 初始化外勤
-	 * 1.先获取网络的外勤,获取到网络的外勤数据以后在保存到数据库
-	 */
-	private void initMission() {
-		CommonInterface.getInstance().getOutSetInfo(new CommonInterface.OnResultListener() {
-			@Override
-			public void result(@NonNull boolean success, @NonNull int what, @Nullable String message) {
-				if (success){
-					getTaskHttp().loadMissionPlan();
-				}
-			}
-		});
-	}
-
-
-	public AutoTaskHttp getTaskHttp() {
-		if (taskHttp==null){
-			taskHttp=new AutoTaskHttp();
-		}
-		return taskHttp;
-	}
-}

+ 210 - 0
app_modular/apptasks/src/main/java/com/modular/apptasks/presenter/AutoPresenter.java

@@ -0,0 +1,210 @@
+package com.modular.apptasks.presenter;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.support.v4.content.LocalBroadcastManager;
+
+import com.baidu.mapapi.model.LatLng;
+import com.common.LogUtil;
+import com.common.config.BaseConfig;
+import com.common.data.DateFormatUtil;
+import com.common.data.ListUtils;
+import com.common.data.StringUtil;
+import com.common.thread.ThreadUtil;
+import com.core.app.AppConstant;
+import com.core.app.MyApplication;
+import com.core.dao.work.WorkModelDao;
+import com.core.model.WorkModel;
+import com.core.net.http.http.OAHttpHelper;
+import com.core.net.location.BdLocationHelper;
+import com.core.utils.BaiduMapUtil;
+import com.modular.apptasks.util.AlarmUtil;
+import com.uas.appworks.OA.erp.utils.AutoErpSigninUitl;
+
+import java.util.List;
+
+/**
+ * 创建新的自动任务管理类,由MainActivity控制,和MainActivity生命周期同步
+ * 1.定时任务由服务的循环变成Alarm模式,节约电
+ * Created by Bitliker on 2017/10/11.
+ */
+public class AutoPresenter {
+
+	private final String[] flags = {
+			AppConstant.CHANGE_WORK_TASK,//
+			AppConstant.UPDATA_ERP_CHANGE//切换账套
+	};
+
+	public static AutoPresenter onCreate() {
+		return new AutoPresenter();
+	}
+
+	private AutoErpSigninUitl signinUitl;
+
+	private AutoPresenter() {
+		signinUitl = new AutoErpSigninUitl();
+		initBroadcast();
+		initTask();
+	}
+
+
+	public void onDestroy() {
+		LocalBroadcastManager.getInstance(BaseConfig.getContext()).unregisterReceiver(updateReceiver);
+	}
+
+	private void initTask() {
+		reckonWork(true);
+	}
+
+	/* 初始化广播	 */
+	private void initBroadcast() {
+		IntentFilter filter = new IntentFilter();
+		if (flags != null && flags.length > 0) {
+			for (String e : flags)
+				filter.addAction(e);
+		}
+		LocalBroadcastManager.getInstance(BaseConfig.getContext()).registerReceiver(updateReceiver, filter);
+	}
+
+	private BroadcastReceiver updateReceiver = new BroadcastReceiver() {
+		@Override
+		public void onReceive(Context context, Intent intent) {
+			if (intent == null || StringUtil.isEmpty(intent.getAction())) return;
+			LogUtil.i("onReceive=" + intent.getAction());
+			switch (intent.getAction()) {
+				case AppConstant.CHANGE_WORK_TASK:
+					//判断是否开启任务
+					if (intent.getBooleanExtra(AppConstant.CHANGE_WORK_TASK, true)) {
+						reckonWork(false);
+					}
+					break;
+				case AppConstant.UPDATA_ERP_CHANGE:
+					initTask();
+					break;
+
+			}
+		}
+	};
+
+
+	/*计算打开*/
+	private void reckonWork(final boolean loadAble) {
+		ThreadUtil.getInstance().addTask(new Runnable() {
+			@Override
+			public void run() {
+				reckonWorkThread(loadAble);
+			}
+		});
+	}
+
+	/**
+	 * 尽最少的计算,判断时候需要打卡或是下一次打卡的时间戳
+	 *
+	 * @param loadAble
+	 */
+	private void reckonWorkThread(boolean loadAble) {
+		List<WorkModel> models = WorkModelDao.getInstance().queryAuto();
+		if (!ListUtils.isEmpty(models)) {
+			String newHHMM = DateFormatUtil.long2Str(DateFormatUtil.HM);
+			for (WorkModel m : models) {
+				if (satisfyModelThread(newHHMM, m)) {
+					LogUtil.i("break;break;break;");
+					break;
+				}
+			}
+		} else if (loadAble) {
+			OAHttpHelper.getInstance().post(new Runnable() {
+				@Override
+				public void run() {
+					signinUitl.loadWorkSet();
+				}
+			});
+		}
+	}
+
+
+	/*判断班次是否符合打卡或是提交定时任务*/
+	private boolean satisfyModelThread(String newHHMM, WorkModel model) {
+		//1.判断上班(打卡条件:在上班开始时间到上班时间可以打卡)
+		//1.1 判断上班有没有打卡
+		if (StringUtil.isEmpty(model.getWorkSignin())) {
+			//1.2 判断当前时间是否在上班结束时间之前,当属于该范围,可以为他打卡
+			if (newHHMM.compareTo(model.getWorkTime()) <= 0) {
+				//1.3 判断当前时间在上班开始时间之后,符合打卡==》前往打卡
+				if (newHHMM.compareTo(model.getWorkStart()) >= 0) {
+					saveWorkLogThread(true, model);
+					return true;
+				} else {//当前时间在上班开始时间之前,需要定闹铃==》前往闹铃
+					pushAlarmThread(true, model);
+					return true;
+				}
+
+			}//如果不符合,需要计算下班范围
+		}
+		//2.判断下班
+		//2.1 判断下班有没有打卡
+		if (StringUtil.isEmpty(model.getOffSignin())) {
+			//2.2 判断当前时间是否在下班结束范围之内,当属于该范围,可以为他打卡
+			if (newHHMM.compareTo(model.getOffend()) <= 0) {
+				//1.3 判断当前时间在下班时间之后,符合打卡==》前往打卡
+				if (newHHMM.compareTo(model.getOffTime()) >= 0) {
+					saveWorkLogThread(false, model);
+					return true;
+				} else {
+					pushAlarmThread(false, model);
+					return true;
+				}
+			}
+		}
+		return false;
+	}
+
+	/*符合条件,进行判断距离和打卡操作*/
+	private void saveWorkLogThread(final boolean isWork, final WorkModel model) {
+		LogUtil.i("符合打卡时间");
+		MyApplication.getInstance().getBdLocationHelper().requestLocation(new BdLocationHelper.OnReceiveListener() {
+			@Override
+			public void receive(LatLng latLng, String location, String address) {
+				//判断是否符合打卡
+				if (BaiduMapUtil.getInstence().isInWorkPlce()) {
+					signinUitl.signinWork(model);
+				} else {
+					//不符合打卡情况下,去判断下一次打卡时间
+					ThreadUtil.getInstance().addTask(new Runnable() {
+						@Override
+						public void run() {
+							pushAlarmThread(isWork, model);
+						}
+					});
+				}
+			}
+		});
+	}
+
+	/*提交定时任务*/
+	private void pushAlarmThread(boolean isWork, WorkModel model) {
+		long nextTime = 0;
+		long startTime = 0;
+		long endTime = 0;
+		if (isWork) {
+			long workStart = DateFormatUtil.hhmm2Long(model.getWorkStart());
+			long workTime = DateFormatUtil.hhmm2Long(model.getWorkTime());
+			startTime = Math.max(workStart, workTime - 1000 * 30 * 60);
+			endTime = workTime;
+		} else {
+			startTime = DateFormatUtil.hhmm2Long(model.getOffTime());
+			endTime = startTime + 1000 * 30 * 60;
+		}
+		while (startTime <= endTime) {
+			if (startTime > System.currentTimeMillis()) {
+				nextTime = startTime;
+				break;
+			}
+			startTime += 5 * 60 * 1000;
+		}
+		AlarmUtil.startAlarm(AlarmUtil.ID_WORK, AlarmUtil.ACTION_WORK, nextTime);
+	}
+
+}

+ 1 - 1
app_modular/apptasks/src/main/java/com/modular/apptasks/service/AutoTaskReceiver.java → app_modular/apptasks/src/main/java/com/modular/apptasks/receiver/AutoTaskReceiver.java

@@ -1,4 +1,4 @@
-package com.modular.apptasks.service;
+package com.modular.apptasks.receiver;
 
 
 import android.content.BroadcastReceiver;
 import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Context;

+ 8 - 3
app_modular/apptasks/src/main/java/com/modular/apptasks/util/AlarmUtil.java

@@ -9,7 +9,7 @@ import android.os.Build;
 import com.common.LogUtil;
 import com.common.LogUtil;
 import com.common.config.BaseConfig;
 import com.common.config.BaseConfig;
 import com.common.data.DateFormatUtil;
 import com.common.data.DateFormatUtil;
-import com.modular.apptasks.service.AutoTaskReceiver;
+import com.modular.apptasks.receiver.AutoTaskReceiver;
 
 
 /**
 /**
  * AlarmManager.ELAPSED_REALTIME 表示闹钟在手机睡眠状态下不可用,该状态下闹钟使用相对时间(相对于系统启动开始),状态值为3;
  * AlarmManager.ELAPSED_REALTIME 表示闹钟在手机睡眠状态下不可用,该状态下闹钟使用相对时间(相对于系统启动开始),状态值为3;
@@ -22,8 +22,13 @@ import com.modular.apptasks.service.AutoTaskReceiver;
 
 
 public class AlarmUtil {
 public class AlarmUtil {
 
 
-	public  static final int ID_WORK=101;
-	public  static final String ACTION_WORK="action_work";
+	/*打卡定时任务*/
+	public static final int ID_WORK = 101;
+	public static final String ACTION_WORK = "action_work";
+
+	/*外勤定时任务*/
+	public static final int ID_MISSION = 102;
+	public static final String ACTION_MISSION = "action_mission";
 
 
 	/**
 	/**
 	 * 使用闹钟模式开启定时任务,定时回调
 	 * 使用闹钟模式开启定时任务,定时回调

+ 25 - 23
app_modular/apptasks/src/main/java/com/modular/apptasks/service/AutoTaskHttp.java → app_modular/apptasks/src/main/java/com/modular/apptasks/util/AutoTaskHttp.java

@@ -1,8 +1,12 @@
-package com.modular.apptasks.service;
+package com.modular.apptasks.util;
 
 
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONArray;
 import com.common.LogUtil;
 import com.common.LogUtil;
-import com.core.model.MissionModel;
+import com.core.api.wxapi.ApiConfig;
+import com.core.api.wxapi.ApiPlatform;
+import com.core.api.wxapi.ApiUtils;
+import com.core.net.http.http.OAHttpHelper;
+import com.core.net.http.http.Request;
 import com.core.utils.CommonUtil;
 import com.core.utils.CommonUtil;
 import com.modular.apputils.listener.OnSmartHttpListener;
 import com.modular.apputils.listener.OnSmartHttpListener;
 import com.modular.apputils.network.Failure;
 import com.modular.apputils.network.Failure;
@@ -10,13 +14,8 @@ import com.modular.apputils.network.Parameter;
 import com.modular.apputils.network.SmartHttpClient;
 import com.modular.apputils.network.SmartHttpClient;
 import com.modular.apputils.network.Success;
 import com.modular.apputils.network.Success;
 
 
-import java.util.List;
-
-import rx.Observable;
-import rx.Subscriber;
-import rx.android.schedulers.AndroidSchedulers;
-import rx.functions.Action1;
-import rx.schedulers.Schedulers;
+import java.util.HashMap;
+import java.util.Map;
 
 
 /**
 /**
  * Created by Bitliker on 2017/9/29
  * Created by Bitliker on 2017/9/29
@@ -27,6 +26,23 @@ public class AutoTaskHttp implements OnSmartHttpListener {
 	private final int SIGNIN_MISSION = 22;//外勤签到
 	private final int SIGNIN_MISSION = 22;//外勤签到
 	private final int HAVE_OUT_PLAN = 23;//还有未拜访外勤计划
 	private final int HAVE_OUT_PLAN = 23;//还有未拜访外勤计划
 
 
+	private final int LOAD_WORK_SET = 24;//获取打卡设置
+	private boolean isB2b;
+
+	public AutoTaskHttp() {
+		isB2b = ApiUtils.getApiModel() instanceof ApiPlatform;
+	}
+
+	/*获取打卡设置*/
+	public void loadWorkSet() {
+		String action = isB2b ? ApiConfig.getInstance(ApiUtils.getApiModel()).getmApiBase().get_plat_senior_setting_url :
+				"mobile/getconfigs.action";
+		Parameter.Builder builder = new Parameter.Builder().setAction(action).record(LOAD_WORK_SET);
+		if (!isB2b) {
+			builder.add("code", 1);
+		}
+		SmartHttpClient.api().get(builder.build(), this);
+	}
 
 
 	//获取外勤计划列表
 	//获取外勤计划列表
 	public void loadMissionPlan() {
 	public void loadMissionPlan() {
@@ -59,20 +75,6 @@ public class AutoTaskHttp implements OnSmartHttpListener {
 
 
 
 
 	private void handlerData(final JSONArray array) {
 	private void handlerData(final JSONArray array) {
-		Observable.create(new Observable.OnSubscribe<List<MissionModel>>() {
-			@Override
-			public void call(Subscriber<? super List<MissionModel>> subscriber) {
-
-
-			}
-		}).observeOn(Schedulers.newThread())
-				.subscribeOn(AndroidSchedulers.mainThread())
-				.subscribe(new Action1<List<MissionModel>>() {
-					@Override
-					public void call(List<MissionModel> missionModel) {
-
-					}
-				});
 
 
 
 
 	}
 	}

+ 1 - 1
app_modular/apptasks/src/main/java/com/modular/apptasks/util/ReckonAutoUtil.java

@@ -108,7 +108,7 @@ public class ReckonAutoUtil {
 	 * @param w 计算班次
 	 * @param w 计算班次
 	 * @return
 	 * @return
 	 */
 	 */
-	private boolean satisfyNextSignin(WorkModel w) {
+	public boolean satisfyNextSignin(WorkModel w) {
 		if (StringUtil.isEmpty(w.getOffend()) || StringUtil.isEmpty(w.getWorkStart()))
 		if (StringUtil.isEmpty(w.getOffend()) || StringUtil.isEmpty(w.getWorkStart()))
 			return false;
 			return false;
 		String newHHMM = DateFormatUtil.long2Str(DateFormatUtil.HM);
 		String newHHMM = DateFormatUtil.long2Str(DateFormatUtil.HM);

+ 1 - 1
app_modular/apputils/src/main/java/com/modular/apputils/utils/PopupWindowHelper.java

@@ -107,7 +107,7 @@ public class PopupWindowHelper {
 				DisplayUtil.backgroundAlpha(ct, 1f);
 				DisplayUtil.backgroundAlpha(ct, 1f);
 			}
 			}
 		});
 		});
-		if (onFindLikerListener != null && 0 > 1) {
+		if (onFindLikerListener != null) {
 			view.findViewById(R.id.select_erp).setVisibility(View.VISIBLE);
 			view.findViewById(R.id.select_erp).setVisibility(View.VISIBLE);
 			view.findViewById(R.id.select_erp).setOnClickListener(new View.OnClickListener() {
 			view.findViewById(R.id.select_erp).setOnClickListener(new View.OnClickListener() {
 				@Override
 				@Override

+ 4 - 0
app_modular/apputils/src/main/res/values/ids.xml

@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <item name="tag_key" type="id"></item>
+</resources>

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

@@ -104,10 +104,10 @@ public class MissionActivity extends OABaseActivity implements View.OnClickListe
 				item.setVisible(false);
 				item.setVisible(false);
 			}
 			}
 		}
 		}
-		MenuItem sign = menu.getItem(1);
-		if (sign.getItemId() == R.id.sign) {
-			sign.setVisible(false);
-		}
+//		MenuItem sign = menu.getItem(1);
+//		if (sign.getItemId() == R.id.sign) {
+//			sign.setVisible(false);
+//		}
 		return super.onCreateOptionsMenu(menu);
 		return super.onCreateOptionsMenu(menu);
 	}
 	}
 
 
@@ -202,7 +202,7 @@ public class MissionActivity extends OABaseActivity implements View.OnClickListe
 	public void showFinds(List<SelectBean> models) {
 	public void showFinds(List<SelectBean> models) {
 		Intent intent = new Intent(this, SelectActivity.class)
 		Intent intent = new Intent(this, SelectActivity.class)
 				.putExtra("type", 2)
 				.putExtra("type", 2)
-				.putExtra("title", getString(R.string.select_location))
+				.putExtra("title", getString(R.string.login_company_select))
 				.putParcelableArrayListExtra("data", (ArrayList<? extends Parcelable>) models);
 				.putParcelableArrayListExtra("data", (ArrayList<? extends Parcelable>) models);
 		startActivityForResult(intent, NUMBER_SELECT);
 		startActivityForResult(intent, NUMBER_SELECT);
 	}
 	}

+ 67 - 16
app_modular/appworks/src/main/java/com/uas/appworks/OA/erp/presenter/MissionPresenter.java

@@ -52,6 +52,7 @@ public class MissionPresenter implements IMissionPresenter, OnHttpResultListener
 	private final int SAVE_ADDRESS = 0x13;
 	private final int SAVE_ADDRESS = 0x13;
 	private final int SIGNIN_MISSION = 0x17;
 	private final int SIGNIN_MISSION = 0x17;
 	private final int FIND_LIKER = 0x18;
 	private final int FIND_LIKER = 0x18;
+	private final int END_MISSION = 0x19;
 	private IMission iMission;
 	private IMission iMission;
 	private boolean isB2b;
 	private boolean isB2b;
 	private MissionModel modelIntent;
 	private MissionModel modelIntent;
@@ -115,15 +116,15 @@ public class MissionPresenter implements IMissionPresenter, OnHttpResultListener
 		if (isSubmiting) return;
 		if (isSubmiting) return;
 		List<MissionModel> plans = new ArrayList<>();
 		List<MissionModel> plans = new ArrayList<>();
 		for (MissionModel e : models) {
 		for (MissionModel e : models) {
-			LogUtil.i(JSON.toJSONString(e));
-			LogUtil.i("_________________________");
+			LogUtil.i("==" + JSON.toJSONString(e));
 			if (e.getStatus() != 0) {
 			if (e.getStatus() != 0) {
 				plans.add(e);
 				plans.add(e);
 			}
 			}
 		}
 		}
 		MissionModel mission = reckonMission(plans);//判断
 		MissionModel mission = reckonMission(plans);//判断
-		if (mission != null) {
-			//TODO 打卡
+		if (mission == null) {
+			iMission.showToast("无可签到签退的计划", R.color.load_error);
+		} else {
 			LogUtil.i(JSON.toJSONString(mission));
 			LogUtil.i(JSON.toJSONString(mission));
 			signinMission(mission);
 			signinMission(mission);
 		}
 		}
@@ -362,8 +363,11 @@ public class MissionPresenter implements IMissionPresenter, OnHttpResultListener
 		if (!ListUtils.isEmpty(models)) {
 		if (!ListUtils.isEmpty(models)) {
 			if (iMission != null) {
 			if (iMission != null) {
 				iMission.dimssLoading();
 				iMission.dimssLoading();
-				for (int i = 0; i < models.size(); i++)
-					models.get(i).setStatus(1);
+				for (int i = 0; i < models.size(); i++) {
+					if (models.get(i).getStatus() == 0) {
+						models.get(i).setStatus(1);
+					}
+				}
 				if (modelIntent != null) {
 				if (modelIntent != null) {
 					modelIntent.setStatus(0);
 					modelIntent.setStatus(0);
 					models.add(modelIntent);
 					models.add(modelIntent);
@@ -383,6 +387,7 @@ public class MissionPresenter implements IMissionPresenter, OnHttpResultListener
 
 
 	//获取外勤计划列表
 	//获取外勤计划列表
 	public void loadMissionPlan() {
 	public void loadMissionPlan() {
+		iMission.showLoading();
 		Map<String, Object> param = new HashMap<>();
 		Map<String, Object> param = new HashMap<>();
 		param.put("emcode", CommonUtil.getSharedPreferences(MyApplication.getInstance(), "erp_username"));
 		param.put("emcode", CommonUtil.getSharedPreferences(MyApplication.getInstance(), "erp_username"));
 
 
@@ -414,12 +419,16 @@ public class MissionPresenter implements IMissionPresenter, OnHttpResultListener
 		OAHttpHelper.getInstance().requestHttp(request, this);
 		OAHttpHelper.getInstance().requestHttp(request, this);
 	}
 	}
 
 
+	private boolean submiting = false;
+
 	public void signinMission(MissionModel model) {
 	public void signinMission(MissionModel model) {
 		if (model == null) return;
 		if (model == null) return;
 		if (!MyApplication.getInstance().isNetworkActive()) {
 		if (!MyApplication.getInstance().isNetworkActive()) {
 			iMission.showToast(R.string.networks_out, R.color.load_error);
 			iMission.showToast(R.string.networks_out, R.color.load_error);
 			return;
 			return;
 		}
 		}
+		if (submiting) return;
+		submiting = true;
 		iMission.showLoading();
 		iMission.showLoading();
 		Map<String, Object> param = new HashMap<>();
 		Map<String, Object> param = new HashMap<>();
 		Map<String, Object> formStore = new HashMap<>();
 		Map<String, Object> formStore = new HashMap<>();
@@ -428,8 +437,7 @@ public class MissionPresenter implements IMissionPresenter, OnHttpResultListener
 		String address = MyApplication.getInstance().getBdLocationHelper().getAddress();
 		String address = MyApplication.getInstance().getBdLocationHelper().getAddress();
 		if (StringUtil.isEmpty(address))
 		if (StringUtil.isEmpty(address))
 			address = model.getCompanyAddr();
 			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 remark = model.getStatus() == 2 ? "手动外勤签退" : "手动外勤签到";
 		String location = model.getCompanyName();
 		String location = model.getCompanyName();
 		if (StringUtil.isEmpty(location) || isB2b)
 		if (StringUtil.isEmpty(location) || isB2b)
 			location = MyApplication.getInstance().getBdLocationHelper().getName();
 			location = MyApplication.getInstance().getBdLocationHelper().getName();
@@ -461,6 +469,32 @@ public class MissionPresenter implements IMissionPresenter, OnHttpResultListener
 		OAHttpHelper.getInstance().requestHttp(request, this);
 		OAHttpHelper.getInstance().requestHttp(request, this);
 	}
 	}
 
 
+	/**
+	 * 更新外勤计划状态
+	 *
+	 * @param mission 外勤id
+	 * @param isDone  是否已完成,否则未签退
+	 */
+	public void endMission(MissionModel mission, boolean isDone) {
+		if (mission == null) return;
+		boolean isB2b = ApiUtils.getApiModel() instanceof ApiPlatform;
+		Map<String, Object> param = new HashMap<>();
+		param.put("id", mission.getId());
+		String url = isB2b ? ApiConfig.getInstance(ApiUtils.getApiModel()).getmApiBase().updateOutplanStatus : "mobile/mobileplanUpdate.action";
+		if (isB2b)
+			param.put("statuscode", isDone ? "done" : "CHECKOUT");
+		Bundle bundle = new Bundle();
+		bundle.putParcelable("data", mission);
+		Request request = new Request.Bulider()
+				.setWhat(END_MISSION)
+				.setUrl(url)
+				.setBundle(bundle)
+				.setParam(param)
+				.setMode(Request.Mode.POST)
+				.bulid();
+		OAHttpHelper.getInstance().requestHttp(request, this);
+	}
+
 	@Override
 	@Override
 	public void result(int what, boolean isJSON, String message, Bundle bundle) {
 	public void result(int what, boolean isJSON, String message, Bundle bundle) {
 		try {
 		try {
@@ -475,6 +509,7 @@ public class MissionPresenter implements IMissionPresenter, OnHttpResultListener
 							array = object.getJSONArray("success");
 							array = object.getJSONArray("success");
 						}
 						}
 						handlerData(array);
 						handlerData(array);
+						submiting = false;
 						break;
 						break;
 					case SAVE_PLAN:
 					case SAVE_PLAN:
 						isSubmiting = false;
 						isSubmiting = false;
@@ -525,14 +560,31 @@ public class MissionPresenter implements IMissionPresenter, OnHttpResultListener
 						}
 						}
 						break;
 						break;
 					case SIGNIN_MISSION:
 					case SIGNIN_MISSION:
-						if (JSON.parseObject(message).containsKey("success") && JSON.parseObject(message).getBoolean("success")) {
+						if (JSONUtil.getBoolean(message, "success")) {
 							//成功  更新数据库
 							//成功  更新数据库
-//							if (bundle == null) return;
-//							MissionModel mission = bundle.getParcelable("data");
-//							if (mission == null) return;
-							iMission.showToast("手动签到成功", R.color.load_error);
-							loadMissionPlan();
+							if (bundle != null) {
+								MissionModel mission = bundle.getParcelable("data");
+								if (mission != null) {
+									if (mission.getStatus() == 2) {//签退
+										iMission.showToast("手动签退成功", R.color.load_error);
+										endMission(mission, false);
+									} else {
+										iMission.showToast("手动签到成功", R.color.load_error);
+										loadMissionPlan();
+									}
+								}
+							}
+						}
+						break;
+					case END_MISSION:
+						if (bundle != null) {
+							MissionModel mission = bundle.getParcelable("data");
+							if (mission != null) {
+								mission.setStatus(2);
+								MissionDao.getInstance().updata(mission);
+							}
 						}
 						}
+						loadMissionPlan();
 						break;
 						break;
 					case FIND_LIKER:
 					case FIND_LIKER:
 						if (isJSON) {
 						if (isJSON) {
@@ -549,7 +601,6 @@ public class MissionPresenter implements IMissionPresenter, OnHttpResultListener
 								}
 								}
 							}
 							}
 						}
 						}
-
 						break;
 						break;
 				}
 				}
 			}
 			}
@@ -624,7 +675,7 @@ public class MissionPresenter implements IMissionPresenter, OnHttpResultListener
 			return minBean;
 			return minBean;
 		}
 		}
 		for (MissionModel e : list) {
 		for (MissionModel e : list) {
-			if (!timeAllowMission(e)) continue;//时间上不符合该外勤签到或签退
+//			if (!timeAllowMission(e)) continue;//时间上不符合该外勤签到或签退
 			if (e.getLatLng() == null) continue;//定位不存在
 			if (e.getLatLng() == null) continue;//定位不存在
 			//获取当前与目的地的距离
 			//获取当前与目的地的距离
 			float distance = BaiduMapUtil.getInstence().autoDistance(e.getLatLng());
 			float distance = BaiduMapUtil.getInstence().autoDistance(e.getLatLng());

+ 13 - 6
app_modular/appworks/src/main/java/com/uas/appworks/OA/erp/utils/AutoErpSigninUitl.java

@@ -82,12 +82,18 @@ public class AutoErpSigninUitl implements OnHttpResultListener {
 		isB2b = ApiUtils.getApiModel() instanceof ApiPlatform;
 		isB2b = ApiUtils.getApiModel() instanceof ApiPlatform;
 	}
 	}
 
 
+	private boolean signWorking = false;
+
 	/**
 	/**
 	 * 签到内勤
 	 * 签到内勤
 	 *
 	 *
 	 * @param model 签到班次对象
 	 * @param model 签到班次对象
 	 */
 	 */
 	public void signinWork(WorkModel model) {
 	public void signinWork(WorkModel model) {
+		if (signWorking) {
+			return;
+		}
+		signWorking = true;
 		//1.判读mac地址是否符合     3.签到
 		//1.判读mac地址是否符合     3.签到
 		if (!MyApplication.getInstance().isNetworkActive()) {
 		if (!MyApplication.getInstance().isNetworkActive()) {
 			CommonUtil.saveAutoLogtoLocal(getString(R.string.auto_sign_failed), getString(R.string.common_notlinknet));
 			CommonUtil.saveAutoLogtoLocal(getString(R.string.auto_sign_failed), getString(R.string.common_notlinknet));
@@ -409,7 +415,12 @@ public class AutoErpSigninUitl implements OnHttpResultListener {
 				case MAC_VAL://判断mac地址
 				case MAC_VAL://判断mac地址
 					if (isJSON && JSON.parseObject(message).containsKey("success") &&
 					if (isJSON && JSON.parseObject(message).containsKey("success") &&
 							JSON.parseObject(message).getBoolean("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 {
 					} else {
 						CommonUtil.saveAutoLogtoLocal(getString(R.string.auto_sign_failed), message);
 						CommonUtil.saveAutoLogtoLocal(getString(R.string.auto_sign_failed), message);
 					}
 					}
@@ -429,6 +440,7 @@ public class AutoErpSigninUitl implements OnHttpResultListener {
 				case LOAD_WORKLOG://签到后保存到打卡数据库里面
 				case LOAD_WORKLOG://签到后保存到打卡数据库里面
 					if (isJSON && JSON.parseObject(message).containsKey("listdata")) {
 					if (isJSON && JSON.parseObject(message).containsKey("listdata")) {
 						saveSignin2DB(bundle, JSON.parseObject(message).getJSONArray("listdata"));
 						saveSignin2DB(bundle, JSON.parseObject(message).getJSONArray("listdata"));
+						signWorking = false;
 					}
 					}
 					break;
 					break;
 				case SIGNIN_MISSION:
 				case SIGNIN_MISSION:
@@ -673,13 +685,9 @@ public class AutoErpSigninUitl implements OnHttpResultListener {
 		JSONObject object = array.getJSONObject(array.size() - 1);
 		JSONObject object = array.getJSONObject(array.size() - 1);
 		String time = object.getString("cl_time");//获取最后一次打卡信息,班次打卡信息
 		String time = object.getString("cl_time");//获取最后一次打卡信息,班次打卡信息
 		time = DateFormatUtil.long2Str(DateFormatUtil.str2Long(time, DateFormatUtil.YMD_HMS), DateFormatUtil.HM);//获取到的
 		time = DateFormatUtil.long2Str(DateFormatUtil.str2Long(time, DateFormatUtil.YMD_HMS), DateFormatUtil.HM);//获取到的
-		LogUtil.i("获取最后一次打卡信息,班次打卡信息=" + time);
 		if (StringUtil.isEmpty(time) || model == null) return;
 		if (StringUtil.isEmpty(time) || model == null) return;
-		LogUtil.i("model=" + JSON.toJSONString(model));
-		LogUtil.i("AUTO_SIGN_SW=" + PreferenceUtils.getBoolean(PreferenceUtils.AUTO_SIGN_SW, true));
 		if (StringUtil.isEmpty(model.getWorkSignin()) && model.getWorkStart().compareTo(time) <= 0
 		if (StringUtil.isEmpty(model.getWorkSignin()) && model.getWorkStart().compareTo(time) <= 0
 				&& model.getWorkTime().compareTo(time) >= 0) {
 				&& model.getWorkTime().compareTo(time) >= 0) {
-			LogUtil.i("11111111111111111111");
 			model.setWorkSignin(time);
 			model.setWorkSignin(time);
 			long i = WorkModelDao.getInstance().update(model);
 			long i = WorkModelDao.getInstance().update(model);
 			if (PreferenceUtils.getBoolean(PreferenceUtils.AUTO_SIGN_SW, true)) {
 			if (PreferenceUtils.getBoolean(PreferenceUtils.AUTO_SIGN_SW, true)) {
@@ -694,7 +702,6 @@ public class AutoErpSigninUitl implements OnHttpResultListener {
 			MsgBroadcast.sendLocalBroadcast(intent);
 			MsgBroadcast.sendLocalBroadcast(intent);
 		} else if (StringUtil.isEmpty(model.getOffSignin()) && model.getOffTime().compareTo(time) <= 0
 		} else if (StringUtil.isEmpty(model.getOffSignin()) && model.getOffTime().compareTo(time) <= 0
 				&& model.getOffend().compareTo(time) >= 0) {
 				&& model.getOffend().compareTo(time) >= 0) {
-			LogUtil.i("22222222222222222222222222222222");
 			model.setOffSignin(time);
 			model.setOffSignin(time);
 			WorkModelDao.getInstance().update(model);
 			WorkModelDao.getInstance().update(model);
 			if (PreferenceUtils.getBoolean(PreferenceUtils.AUTO_SIGN_SW, true)) {
 			if (PreferenceUtils.getBoolean(PreferenceUtils.AUTO_SIGN_SW, true)) {

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

@@ -198,6 +198,7 @@ public class MissionDao {
             if (StringUtil.isEmpty(master) || StringUtil.isEmpty(emcode)) return false;
             if (StringUtil.isEmpty(master) || StringUtil.isEmpty(emcode)) return false;
             db = DatabaseManager.getInstance().openDatabase();
             db = DatabaseManager.getInstance().openDatabase();
             db.beginTransaction();//开启事务
             db.beginTransaction();//开启事务
+            
             ContentValues values = null;
             ContentValues values = null;
             for (MissionModel mission : entities) {
             for (MissionModel mission : entities) {
                 show("MissionPlanEntity");
                 show("MissionPlanEntity");