Ver código fonte

上传draft分支

FANGLH 8 anos atrás
pai
commit
b3738eba44
69 arquivos alterados com 4303 adições e 675 exclusões
  1. 5 5
      WeiChat/META-INF/JavaUtil/ChannelUtil.java
  2. 2 0
      WeiChat/build.gradle
  3. 322 325
      WeiChat/src/main/AndroidManifest.xml
  4. 2 0
      WeiChat/src/main/java/com/xzjmyk/pm/activity/AppConfig.java
  5. 1 1
      WeiChat/src/main/java/com/xzjmyk/pm/activity/bean/oa/SelectEmUser.java
  6. 1 0
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/circle/SendShuoshuoActivity.java
  7. 2 1
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/contact/MyFriendActivity.java
  8. 446 120
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/form/SelectCalendarActivity.java
  9. 1 0
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/oa/OAActivity.java
  10. 292 0
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/secretary/BookingAddActivity.java
  11. 326 0
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/secretary/BookingDetailActivity.java
  12. 380 0
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/secretary/BookingListActivity.java
  13. 146 0
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/secretary/BookingSetActivity.java
  14. 26 0
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/secretary/DataState.java
  15. 44 0
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/secretary/MapData.java
  16. 177 10
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/secretary/SelectPContactsActivity.java
  17. 256 60
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/secretary/SelectPContactsPresenter.java
  18. 97 0
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/adapter/booking/BookAdapter.java
  19. 188 0
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/adapter/oa/SelectPCollisionAdapter.java
  20. 1 0
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/entity/SelectCollisionTurnBean.java
  21. 195 0
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/model/book/BookingModel.java
  22. 139 0
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/model/contacts/Contacts.java
  23. 24 0
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/net/HttpUtil.java
  24. 16 0
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/presenter/MessagePresenter.java
  25. 30 0
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/util/CommonUtil.java
  26. 3 0
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/util/Constants.java
  27. 101 0
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/util/ContactsUtils.java
  28. 1 1
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/util/OACheckUtil.java
  29. 35 0
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/util/StringUtils.java
  30. 5 0
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/util/oa/http/OAHttpHelper.java
  31. 9 2
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/view/CustomerScrollView.java
  32. 48 23
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/me/SettingActivity.java
  33. 28 15
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/message/MessageFragment.java
  34. 0 1
      WeiChat/src/main/java/com/xzjmyk/pm/activity/view/MyListView.java
  35. 8 4
      WeiChat/src/main/java/com/xzjmyk/pm/activity/volley/Result.java
  36. 1 1
      WeiChat/src/main/java/com/xzjmyk/pm/activity/volley/StringJsonObjectRequest.java
  37. 10 0
      WeiChat/src/main/res/anim/anim_translate_bookingprogress.xml
  38. BIN
      WeiChat/src/main/res/drawable-hdpi/icon_bg_booking_detail.9.png
  39. BIN
      WeiChat/src/main/res/drawable-xhdpi/icon_cancle3.png
  40. BIN
      WeiChat/src/main/res/drawable-xhdpi/icon_jujue.png
  41. BIN
      WeiChat/src/main/res/drawable-xhdpi/icon_jujue1.png
  42. BIN
      WeiChat/src/main/res/drawable-xhdpi/icon_queren1.png
  43. BIN
      WeiChat/src/main/res/drawable-xhdpi/icon_quxiao3.png
  44. BIN
      WeiChat/src/main/res/drawable-xhdpi/icon_send.png
  45. BIN
      WeiChat/src/main/res/drawable-xhdpi/icon_weiqueren.png
  46. BIN
      WeiChat/src/main/res/drawable-xhdpi/icon_yiqueren.png
  47. BIN
      WeiChat/src/main/res/drawable-xxhdpi/icon_bg_booking_detail1.9.png
  48. BIN
      WeiChat/src/main/res/drawable-xxhdpi/icon_share_nor.png
  49. BIN
      WeiChat/src/main/res/drawable-xxhdpi/icon_yuyue3.png
  50. 9 0
      WeiChat/src/main/res/drawable/bg_button_green_focus.xml
  51. 7 0
      WeiChat/src/main/res/drawable/bg_green_button.xml
  52. 2 2
      WeiChat/src/main/res/layout/act_sale_select_list.xml
  53. 126 0
      WeiChat/src/main/res/layout/activity_book_add.xml
  54. 198 0
      WeiChat/src/main/res/layout/activity_booking_detail.xml
  55. 89 0
      WeiChat/src/main/res/layout/activity_booking_list.xml
  56. 46 0
      WeiChat/src/main/res/layout/activity_booking_set.xml
  57. 1 0
      WeiChat/src/main/res/layout/activity_customer_list.xml
  58. 36 0
      WeiChat/src/main/res/layout/activity_setting.xml
  59. 75 0
      WeiChat/src/main/res/layout/item_booking_list.xml
  60. 12 3
      WeiChat/src/main/res/layout/item_oa_list.xml
  61. 90 0
      WeiChat/src/main/res/layout/item_select_p_active.xml
  62. 204 96
      WeiChat/src/main/res/layout/new_message_header.xml
  63. 2 1
      WeiChat/src/main/res/layout/oa_empty_list.xml
  64. 3 0
      WeiChat/src/main/res/values-en/strings.xml
  65. 6 0
      WeiChat/src/main/res/values-zh-rCN/strings.xml
  66. 4 0
      WeiChat/src/main/res/values-zh-rTW/strings.xml
  67. 1 1
      WeiChat/src/main/res/values/dimens.xml
  68. 23 2
      WeiChat/src/main/res/values/strings.xml
  69. 1 1
      WeiChat/src/main/res/values/styles.xml

+ 5 - 5
WeiChat/META-INF/JavaUtil/ChannelUtil.java

@@ -1,10 +1,5 @@
 package com.czt.util;
 
-import java.io.IOException;
-import java.util.Enumeration;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipFile;
-
 import android.content.Context;
 import android.content.SharedPreferences;
 import android.content.SharedPreferences.Editor;
@@ -13,6 +8,11 @@ import android.content.pm.PackageManager.NameNotFoundException;
 import android.preference.PreferenceManager;
 import android.text.TextUtils;
 
+import java.io.IOException;
+import java.util.Enumeration;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipFile;
+
 public class ChannelUtil {
 	
 	private static final String CHANNEL_KEY = "cztchannel";

+ 2 - 0
WeiChat/build.gradle

@@ -138,4 +138,6 @@ dependencies {
     debugCompile 'com.squareup.leakcanary:leakcanary-android:1.5'
     releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.5'
     compile files('libs/core.jar')
+
+ 
 }

Diferenças do arquivo suprimidas por serem muito extensas
+ 322 - 325
WeiChat/src/main/AndroidManifest.xml


+ 2 - 0
WeiChat/src/main/java/com/xzjmyk/pm/activity/AppConfig.java

@@ -110,6 +110,7 @@ public class AppConfig {
     /* 头像下载地址--》衍生地址 */
     public String AVATAR_ORIGINAL_PREFIX;// 头像原图前缀地址
     public String AVATAR_THUMB_PREFIX;// 头像缩略图前缀地址
+    public String APP_QUER_YUSER;// 添加联系人接口
 
     /**
      * 会改变的配置
@@ -206,6 +207,7 @@ public class AppConfig {
         config.FRIENDS_ATTENTION_DELETE = apiUrl + "friends/attention/delete";// 取消关注
         config.FRIENDS_DELETE = apiUrl + "friends/delete";// 删除好友
         config.FRIENDS_ATTENTION_ADD = apiUrl + "friends/attention/add";// 加关注
+        config.APP_QUER_YUSER = apiUrl + "user/appQueryuser";// 添加通讯录
         config.FRIENDS_BLACKLIST_DELETE = apiUrl + "friends/blacklist/delete";// 取消拉黑
 
 		/* 群聊 */

+ 1 - 1
WeiChat/src/main/java/com/xzjmyk/pm/activity/bean/oa/SelectEmUser.java

@@ -22,7 +22,7 @@ public class SelectEmUser implements Parcelable {
     private String position;//职位
     private String depart;//部门名称
 
-    private String tag;//标记,如班次名称
+    private String tag;//标记,如班次名称(当tag==“1”的时候表示是自己好友)
 
     private boolean isClick;//是否点击了
 

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

@@ -313,6 +313,7 @@ public class SendShuoshuoActivity extends BaseActivity implements View.OnClickLi
         } else if (requestCode == REQUEST_CODE_PICK_PHOTO) {// 选择一张图片,然后立即调用裁减
             if (resultCode == Activity.RESULT_OK) {
                 if (data != null && data.getData() != null) {
+                    LogUtil.d("uri:",JSON.toJSONString(data.getData()));
                     String path = CameraUtil.getImagePathFromUri(this, data.getData());
                     mPhotoList.add(path);
                     mAdapter.notifyDataSetInvalidated();

+ 2 - 1
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/contact/MyFriendActivity.java

@@ -267,8 +267,9 @@ public class MyFriendActivity extends BaseActivity {
                     mLoginUserId = MyApplication.getInstance().mLoginUser.getUserId();
                 if (isPeculiar) {
                     friends = FriendDao.getInstance().getFriends(mLoginUserId, "clickNum", 10);
-                } else
+                } else {
                     friends = FriendDao.getInstance().getFriends(mLoginUserId);
+                }
                 if (friends != null)
                     Log.i("wang", "friends size()=" + friends.size());
                 long delayTime = 200 - (startTime - System.currentTimeMillis());// 保证至少200ms的刷新过程

+ 446 - 120
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/form/SelectCalendarActivity.java

@@ -21,14 +21,17 @@ import android.widget.BaseAdapter;
 import android.widget.Button;
 import android.widget.LinearLayout;
 import android.widget.TextView;
+import android.widget.Toast;
 
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.lidroid.xutils.ViewUtils;
 import com.lidroid.xutils.view.annotation.ViewInject;
 import com.xzjmyk.pm.activity.MyApplication;
 import com.xzjmyk.pm.activity.R;
 import com.xzjmyk.pm.activity.ui.base.BaseActivity;
+import com.xzjmyk.pm.activity.ui.erp.activity.secretary.DataState;
 import com.xzjmyk.pm.activity.ui.erp.fragment.CalendarDateFragmet;
 import com.xzjmyk.pm.activity.ui.erp.model.form.Data;
 import com.xzjmyk.pm.activity.ui.erp.net.ViewUtil;
@@ -96,7 +99,7 @@ public class SelectCalendarActivity extends BaseActivity implements View.OnClick
     @ViewInject(R.id.click_btn)
     private Button click_btn;
 
-    private List<String> mTimeData = new ArrayList<>();
+    private List<DataState> mTimeData = new ArrayList<>();
     private GridDataAdapter gAdapter;
     private PagerAdapter pagerAdapter;//当前Viewpager适配器
 
@@ -126,12 +129,39 @@ public class SelectCalendarActivity extends BaseActivity implements View.OnClick
                     LogUtil.d(msg.getData().getString("result"));
                     parsedResult(msg.getData().getString("result"));
                     break;
+                case 0x06:
+                    String result;
+                    try {
+                        result = msg.getData().getString("result");
+                        parseBookTimeResult(result);
+                    } catch (Exception e) {
+                        
+                    }
+                    break;
+                case 0x07:
+                    try {
+                        result = msg.getData().getString("result");
+                        String  endtime=JSON.parseObject(result).getString("endtime");
+                        String starttime=JSON.parseObject(result).getString("starttime");
+                        if (!ListUtils.isEmpty(mTimeData)) {
+                            mTimeData.clear();
+                        }
+                        mTimeData.addAll(timeAddMuilt(starttime,endtime,15));
+                        gAdapter = new GridDataAdapter(mContext, mTimeData);
+                        gv_date_list.setAdapter(gAdapter);
+                    } catch (Exception e) {
+                        
+                    }
+                    break;
                 case Constants.APP_SOCKETIMEOUTEXCEPTION:
                     initGridData();
                     break;
             }
         }
     };
+
+ 
+
     private Boolean mWorkovertime = false;
     private String start_hour_min = "";
     private String end_hour_min = "";
@@ -140,6 +170,9 @@ public class SelectCalendarActivity extends BaseActivity implements View.OnClick
     private String first_start_time;
     private String first_end_time;
     private Boolean breastfeeding = false;
+    private int imId;
+    private int type;//0:默认erp:1:小秘书
+    private ArrayList<DataState> totals=new ArrayList<>();
 
     @Override
     public boolean onCreateOptionsMenu(Menu menu) {
@@ -231,6 +264,7 @@ public class SelectCalendarActivity extends BaseActivity implements View.OnClick
         String startDate = "";
         String endDate = "";
         if (intent != null) {
+            type=intent.getIntExtra("type",0);
             startDate = intent.getStringExtra("startDate");
             endDate = intent.getStringExtra("endDate");
             field = intent.getStringExtra("field");
@@ -284,20 +318,27 @@ public class SelectCalendarActivity extends BaseActivity implements View.OnClick
                 Log.v("v_date_end2", v_date_end.getText().toString());
                 Log.d("currentSelectDate2", currentSelectDate);
             }
+            
+          imId=intent.getIntExtra("imId",0);
         }
         initListener();
     }
 
+    @Override
+    public void onWindowFocusChanged(boolean hasFocus) {
+        super.onWindowFocusChanged(hasFocus);
+        if(imId!=0){
+            getBookingTime(imId);
+        }
+    }
+
     private void initListener() {
         ll_date_start.setOnClickListener(this);
         ll_date_end.setOnClickListener(this);
-
         ll_time_start.setOnClickListener(this);
         ll_time_end.setOnClickListener(this);
-
         //ll_date_end.setEnabled(false);//不可点击
         ll_time_end.setEnabled(false);//不可点击
-
         click_btn.setOnClickListener(this);
 
         gv_date_list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@@ -309,6 +350,10 @@ public class SelectCalendarActivity extends BaseActivity implements View.OnClick
                     ToastMessage("请先选择日期,再选择时间段!");
                     return;
                 }
+                if (!modle.clicked){
+                    ToastMessage("该时间段不能预约!");
+                    return;
+                }
                 if ((StringUtils.isEmpty(currentSelectDate) &&
                         StringUtils.isEmpty(v_date_end.getText().toString())) ||
                         (StringUtils.isEmpty(currentSelectDate) &&
@@ -362,8 +407,15 @@ public class SelectCalendarActivity extends BaseActivity implements View.OnClick
     }
 
     private void initData() {
-//        initGridData();
-        sendRequest();//获取班次信息
+       switch (type){
+           case 0:
+               sendRequest();//获取班次信息
+               break;
+           case 1:
+               getBookingTotalTime(imId);
+               //initGridData();
+               break;
+       }
         initCalender();
     }
 
@@ -433,6 +485,7 @@ public class SelectCalendarActivity extends BaseActivity implements View.OnClick
             v_date_end.setText(yeas + "-" + m + "-" + d + " " +end_hour_min);
             Log.d("Slide_date88", yeas + "-" + month + "-" + day + " " + end_hour_min);
         }
+        getBookingTime(imId);
     }
 
     /**
@@ -443,62 +496,210 @@ public class SelectCalendarActivity extends BaseActivity implements View.OnClick
         if (!ListUtils.isEmpty(mTimeData)) {
             mTimeData.clear();
         }
-        if (mWorkovertime) {
-            mTimeData.add("00:00");
-            mTimeData.add("01:00");
-            mTimeData.add("02:00");
-            mTimeData.add("03:00");
-            mTimeData.add("04:00");
-            mTimeData.add("05:00");
-            mTimeData.add("06:00");
-            mTimeData.add("07:00");
-            mTimeData.add("08:00");
-            mTimeData.add("09:00");
-            mTimeData.add("10:00");
-            mTimeData.add("11:00");
-            mTimeData.add("12:00");
-            mTimeData.add("13:00");
-            mTimeData.add("14:00");
-            mTimeData.add("15:00");
-            mTimeData.add("16:00");
-            mTimeData.add("17:00");
-            mTimeData.add("18:00");
-            mTimeData.add("19:00");
-            mTimeData.add("20:00");
-            mTimeData.add("21:00");
-            mTimeData.add("22:00");
-            mTimeData.add("23:00");
-        } else {
-            mTimeData.add("08:30");
-            mTimeData.add("09:00");
-            mTimeData.add("09:30");
-            mTimeData.add("10:00");
-            mTimeData.add("10:30");
-            mTimeData.add("11:00");
-            mTimeData.add("11:30");
-            mTimeData.add("12:00");
-            mTimeData.add("13:00");
-            mTimeData.add("13:30");
-            mTimeData.add("14:00");
-            mTimeData.add("14:30");
-            mTimeData.add("15:00");
-            mTimeData.add("15:30");
-            mTimeData.add("16:00");
-            mTimeData.add("16:30");
-            mTimeData.add("17:00");
-            mTimeData.add("17:30");
-            mTimeData.add("18:00");
-            mTimeData.add("18:30");
+        if (type==0){
+            initTimeData(30); 
+        }else{
+            initTimeData(15);
         }
         gAdapter = new GridDataAdapter(mContext, mTimeData);
         gv_date_list.setAdapter(gAdapter);
     }
 
+    private void initTimeData(int minute) {
+        if (mWorkovertime) {
+            mTimeData.addAll(timeAddMuilt("00:00","23:00",minute));
+//            DataState dataState=new DataState();
+//            dataState.setValue("00:00");
+//            dataState.setClicked(true);
+//            mTimeData.add(dataState);
+//
+//            dataState=new DataState();
+//            dataState.setValue("01:00");
+//            dataState.setClicked(true);
+//            mTimeData.add(dataState);
+//
+//            dataState=new DataState();
+//            dataState.setValue("02:00");
+//            dataState.setClicked(true);
+//            mTimeData.add(dataState);
+//
+//            dataState=new DataState();
+//            dataState.setValue("03:00");
+//            dataState.setClicked(true);
+//            mTimeData.add(dataState);
+//            
+//            dataState=new DataState();
+//            dataState.setValue("04:00");
+//            dataState.setClicked(true);
+//            mTimeData.add(dataState);
+//
+//            dataState=new DataState();
+//            dataState.setValue("05:00");
+//            dataState.setClicked(true);
+//            mTimeData.add(dataState);
+//            dataState=new DataState();
+//            dataState.setValue("06:00");
+//            dataState.setClicked(true);
+//            mTimeData.add(dataState);
+//            dataState=new DataState();
+//             dataState.setValue("07:00");
+//            dataState.setClicked(true);
+//            mTimeData.add(dataState);
+//            dataState=new DataState();
+//             dataState.setValue("08:00");
+//            dataState.setClicked(true);
+//            mTimeData.add(dataState);
+//            dataState=new DataState();
+//             dataState.setValue("09:00");
+//            dataState.setClicked(true);
+//            mTimeData.add(dataState);
+//            dataState=new DataState();
+//             dataState.setValue("10:00");
+//            dataState.setClicked(true);
+//            mTimeData.add(dataState);
+//            dataState=new DataState();
+//             dataState.setValue("11:00");
+//            dataState.setClicked(true);
+//            mTimeData.add(dataState);
+//            dataState=new DataState();
+//             dataState.setValue("12:00");
+//            dataState.setClicked(true);
+//            mTimeData.add(dataState);
+//            dataState=new DataState();
+//             dataState.setValue("13:00");
+//            dataState.setClicked(true);
+//            mTimeData.add(dataState);
+//            dataState=new DataState();
+//             dataState.setValue("14:00");
+//            dataState.setClicked(true);
+//            mTimeData.add(dataState);
+//            dataState=new DataState();
+//             dataState.setValue("15:00");
+//            dataState.setClicked(true);
+//            mTimeData.add(dataState);
+//            dataState=new DataState();
+//             dataState.setValue("16:00");
+//            dataState.setClicked(true);
+//            mTimeData.add(dataState);
+//            dataState=new DataState();
+//             dataState.setValue("17:00");
+//            dataState.setClicked(true);
+//            mTimeData.add(dataState);
+//            dataState=new DataState();
+//             dataState.setValue("18:00");
+//            dataState.setClicked(true);
+//            mTimeData.add(dataState);
+//            dataState=new DataState();
+//             dataState.setValue("19:00");
+//            dataState.setClicked(true);
+//            mTimeData.add(dataState);
+//            dataState=new DataState();
+//             dataState.setValue("20:00");
+//            dataState.setClicked(true);
+//            mTimeData.add(dataState);
+//            dataState=new DataState();
+//             dataState.setValue("21:00");
+//            dataState.setClicked(true);
+//            mTimeData.add(dataState);
+//            dataState=new DataState();
+//             dataState.setValue("22:00");
+//            dataState.setClicked(true);
+//            mTimeData.add(dataState);
+//            dataState=new DataState();
+//            dataState.setValue("23:00");
+//            dataState.setClicked(true);
+//            mTimeData.add(dataState);
+        } else {
+            
+            mTimeData.addAll(timeAddMuilt("08:30","18:30",minute));
+//            DataState dataState=new DataState();
+//            dataState.setValue("08:30");
+//            dataState.setClicked(true);
+//            mTimeData.add(dataState);
+//
+//            dataState=new DataState();
+//             dataState.setValue("09:00");
+//            dataState.setClicked(true);
+//            mTimeData.add(dataState);
+//            dataState=new DataState();
+//             dataState.setValue("09:30");
+//            dataState.setClicked(true);
+//            mTimeData.add(dataState);
+//            dataState=new DataState();
+//             dataState.setValue("10:00");
+//            dataState.setClicked(true);
+//            mTimeData.add(dataState);
+//            dataState=new DataState();
+//             dataState.setValue("10:30");
+//            dataState.setClicked(true);
+//            mTimeData.add(dataState);
+//            dataState=new DataState();
+//             dataState.setValue("11:00");
+//            dataState.setClicked(true);
+//            mTimeData.add(dataState);
+//            dataState=new DataState();
+//             dataState.setValue("11:30");
+//            dataState.setClicked(true);
+//            mTimeData.add(dataState);
+//            dataState=new DataState();
+//             dataState.setValue("12:00");
+//            dataState.setClicked(true);
+//            mTimeData.add(dataState);
+//            dataState=new DataState();
+//             dataState.setValue("13:00");
+//            dataState.setClicked(true);
+//            mTimeData.add(dataState);
+//            dataState=new DataState();
+//             dataState.setValue("13:30");
+//            dataState.setClicked(true);
+//            mTimeData.add(dataState);
+//            dataState=new DataState();
+//             dataState.setValue("14:00");
+//            dataState.setClicked(true);
+//            mTimeData.add(dataState);
+//            dataState=new DataState();
+//             dataState.setValue("14:30");
+//            dataState.setClicked(true);
+//            mTimeData.add(dataState);
+//            dataState=new DataState();
+//             dataState.setValue("15:00");
+//            dataState.setClicked(true);
+//            mTimeData.add(dataState);
+//            dataState=new DataState();
+//             dataState.setValue("15:30");
+//            dataState.setClicked(true);
+//            mTimeData.add(dataState);
+//            dataState=new DataState();
+//             dataState.setValue("16:00");
+//            dataState.setClicked(true);
+//            mTimeData.add(dataState);
+//            dataState=new DataState();
+//             dataState.setValue("16:30");
+//            dataState.setClicked(true);
+//            mTimeData.add(dataState);
+//            dataState=new DataState();
+//             dataState.setValue("17:00");
+//            dataState.setClicked(true);
+//            mTimeData.add(dataState);
+//            dataState=new DataState();
+//             dataState.setValue("17:30");
+//            dataState.setClicked(true);
+//            mTimeData.add(dataState);
+//            dataState=new DataState();
+//             dataState.setValue("18:00");
+//            dataState.setClicked(true);
+//            mTimeData.add(dataState);
+//            dataState=new DataState();
+//             dataState.setValue("18:30");
+//            dataState.setClicked(true);
+//            mTimeData.add(dataState);
+        }
+    }
+
     public void parsedResult(String result) {
         if (result == null) {
             result = "{\"ifDefaultClass\":false,\"wd_degree\":2,\"wd_earlytime\":null,\"comAddressdata\":[{\"CS_WORKADDR\":\"深圳市南山区\",\"CS_VALIDRANGE\":\"300\",\"CS_ID\":10141,\"CS_LATITUDE\":\"22.540676518856678\",\"CS_LONGITUDE\":\"113.9528745854545\",\"CS_SHORTNAME\":\"宇声数码技术公司\",\"CS_CODE\":\"2017020234\",\"CS_INNERDISTANCE\":500,\"success\":true},{\"CS_WORKADDR\":\"广东省深圳市南山区高新区科技南六路29号万德莱大厦南座6楼\",\"CS_VALIDRANGE\":\"300\",\"CS_ID\":10143,\"CS_LATITUDE\":\"22.5416028163184\",\"CS_LONGITUDE\":\"113.95309916183191\",\"CS_SHORTNAME\":\"深圳市中兴供应链有限公司\",\"CS_CODE\":\"2017020236\",\"CS_INNERDISTANCE\":500,\"success\":true}],\"count\":null,\"wd_code\":\"TEST1\",\"Class3\":{\"wd_offend\":null,\"wd_onduty\":null,\"wd_offduty\":null,\"wd_onbeg\":null},\"Class2\":{\"wd_offend\":\"20:00\",\"wd_onduty\":\"13:30\",\"wd_offduty\":\"18:00\",\"wd_onbeg\":\"13:00\"},\"wd_id\":111281,\"Class1\":{\"wd_offend\":\"12:30\",\"wd_onduty\":\"08:30\",\"wd_offduty\":\"12:00\",\"wd_onbeg\":\"07:00\"},\"wd_pcount\":null,\"wd_name\":\"测试1\",\"ifNeedSignCard\":true,\"innerdistance\":null,\"distance\":null,\"sessionId\":\"729F70FB568EF25CC7F1CEE14A0900EE\",\"comaddressset\":false,\"longitude\":null,\"latitude\":null,\"success\":true,\"wd_day\":null}";
         }
-        // List<String> mTimeData=new ArrayList<String>();
         try {
             JSONObject root = JSON.parseObject(result);
             JSONObject Class1=null;
@@ -542,56 +743,8 @@ public class SelectCalendarActivity extends BaseActivity implements View.OnClick
         } catch (Exception e) {
             e.printStackTrace();
         }
-        System.out.println(JSON.toJSON(mTimeData));
         if (ListUtils.isEmpty(mTimeData)) {
-            mTimeData.add("08:30");
-            mTimeData.add("09:00");
-            mTimeData.add("09:30");
-            mTimeData.add("10:00");
-            mTimeData.add("10:30");
-            mTimeData.add("11:00");
-            mTimeData.add("11:30");
-            mTimeData.add("12:00");
-            mTimeData.add("13:00");
-            mTimeData.add("13:30");
-            mTimeData.add("14:00");
-            mTimeData.add("14:30");
-            mTimeData.add("15:00");
-            mTimeData.add("15:30");
-            mTimeData.add("16:00");
-            mTimeData.add("16:30");
-            mTimeData.add("17:00");
-            mTimeData.add("17:30");
-            mTimeData.add("18:00");
-            mTimeData.add("18:30");
-        }
-
-        if (mWorkovertime) {
-            mTimeData.clear();
-            mTimeData.add("00:00");
-            mTimeData.add("01:00");
-            mTimeData.add("02:00");
-            mTimeData.add("03:00");
-            mTimeData.add("04:00");
-            mTimeData.add("05:00");
-            mTimeData.add("06:00");
-            mTimeData.add("07:00");
-            mTimeData.add("08:00");
-            mTimeData.add("09:00");
-            mTimeData.add("10:00");
-            mTimeData.add("11:00");
-            mTimeData.add("12:00");
-            mTimeData.add("13:00");
-            mTimeData.add("14:00");
-            mTimeData.add("15:00");
-            mTimeData.add("16:00");
-            mTimeData.add("17:00");
-            mTimeData.add("18:00");
-            mTimeData.add("19:00");
-            mTimeData.add("20:00");
-            mTimeData.add("21:00");
-            mTimeData.add("22:00");
-            mTimeData.add("23:00");
+            initTimeData(30);
         }
         gAdapter = new GridDataAdapter(MyApplication.getInstance(), mTimeData);
         gv_date_list.setAdapter(gAdapter);
@@ -604,22 +757,69 @@ public class SelectCalendarActivity extends BaseActivity implements View.OnClick
      * @param end   08:30-12:30  [首 +中间值累加半小时 + 尾]
      * @return
      */
-    public static List<String> timeAddMuilt(String start, String end) {
-        List<String> result = new ArrayList<String>();
-        result.add(start);
+    public  List<DataState> timeAddMuilt(String start, String end) {
+        LogUtil.d("Test","timeAddMuilt start:");
+        List<DataState> result = new ArrayList<>();
+        DataState dataState=new DataState();
+        dataState.setValue(start);
+        dataState.setClicked(true);
+        result.add(dataState);
         int i = 0;
         while (true) {
             start = DateFormatUtil.add(DateFormatUtil.getDate4StrDate(start, "HH:mm"),
                     "HH:mm", 1 * 1 * 30 * 60 * 1000);
             if (start.compareTo(end) >= 0) {
-                result.add(end);
+                DataState dataState1=new DataState();
+                dataState1.setValue(end);
+                dataState1.setClicked(true);
+                result.add(dataState1);
                 break;
             } else {
-                result.add(start);
+                DataState dataState2=new DataState();
+                dataState2.setValue(start);
+                dataState2.setClicked(true);
+                result.add(dataState2);
             }
             i++;
         }
+        LogUtil.d("Test","timeAddMuilt end:");
+        return result;
+    }
+
 
+    /**
+     * 返回指定时间段内  循环累加半小时
+     *
+     * @param start
+     * @param end   08:30-12:30  [首 +中间值累加半小时 + 尾]
+     * @return
+     */
+    public  List<DataState> timeAddMuilt(String start, String end,int minute) {
+        LogUtil.d("Test","timeAddMuilt start:");
+        List<DataState> result = new ArrayList<>();
+        DataState dataState=new DataState();
+        dataState.setValue(start);
+        dataState.setClicked(true);
+        result.add(dataState);
+        int i = 0;
+        while (true) {
+            start = DateFormatUtil.add(DateFormatUtil.getDate4StrDate(start, "HH:mm"),
+                    "HH:mm", 1 * 1 * minute * 60 * 1000);
+            if (start.compareTo(end) >= 0) {
+                DataState dataState1=new DataState();
+                dataState1.setValue(end);
+                dataState1.setClicked(true);
+                result.add(dataState1);
+                break;
+            } else {
+                DataState dataState2=new DataState();
+                dataState2.setValue(start);
+                dataState2.setClicked(true);
+                result.add(dataState2);
+            }
+            i++;
+        }
+        LogUtil.d("Test","timeAddMuilt end:");
         return result;
     }
 
@@ -696,6 +896,35 @@ public class SelectCalendarActivity extends BaseActivity implements View.OnClick
                             ToastMessage("开始时间 请选择具体时间点!");
                             return;
                         }
+
+                        if (type==1){
+                            //类型等于小秘书的时候
+                            //判断不能跨天预约
+                            if (!v_date_end.getText().toString().substring(0,10).equals(v_date_start.getText().toString().substring(0,10))){
+                                ToastMessage("不能跨天预约!");
+                                return;
+                            }
+                            //判断时间段不能有被预约的天数
+                           String start= v_date_start.getText().toString().substring(11,16);
+                           String end=v_date_end.getText().toString().substring(11,16);
+                           List<DataState> dataStates=  timeAddMuilt(start,end,15);
+                           for (int i=0;i<dataStates.size();i++){
+                               DataState dataState=dataStates.get(i);
+                               for(int j=0;j<totals.size();j++){
+                                   DataState nData=totals.get(j);
+                                   if (dataState.getValue().equals(nData.getValue())){
+                                       ToastMessage("该时间段不能预约!");
+                                       return;
+                                   }
+                               }
+                            }
+                           
+                            //结束时间不能小于或等于开始时间
+                            if(v_date_end.getText().toString().compareTo(v_date_start.getText().toString())<=0){
+                                ToastMessage("结束时间不能小于或等于开始时间");
+                                return;
+                            }
+                        }
                         Intent intent = new Intent();
                         intent.putExtra("startDate", v_date_start.getText().toString());
                         intent.putExtra("endDate", v_date_end.getText().toString());
@@ -709,10 +938,15 @@ public class SelectCalendarActivity extends BaseActivity implements View.OnClick
                         ToastMessage("请选择开始时间和结束时间!");
                     }
                 }
+               
+                
                 break;
         }
     }
 
+    
+   
+
 
     /**
      * @desc:发送网络请求
@@ -778,11 +1012,11 @@ public class SelectCalendarActivity extends BaseActivity implements View.OnClick
     private class GridDataAdapter extends BaseAdapter {
 
         private Context ct;
-        private List<String> mData = new ArrayList<>();
+        private List<DataState> mData = new ArrayList<>();
         private LayoutInflater inflater;
-        private int selected = 0;
+        private int selected = -1;
 
-        GridDataAdapter(Context ct, List<String> data) {
+        GridDataAdapter(Context ct, List<DataState > data) {
             this.ct = ct;
             this.mData = data;
             this.inflater = LayoutInflater.from(ct);
@@ -795,7 +1029,7 @@ public class SelectCalendarActivity extends BaseActivity implements View.OnClick
 
         @Override
         public Object getItem(int position) {
-            return position;
+            return mData.get(position);
         }
 
         @Override
@@ -823,20 +1057,26 @@ public class SelectCalendarActivity extends BaseActivity implements View.OnClick
             } else {
                 modle = (ViewModle) convertView.getTag();
             }
-            modle.tv_text.setText(mData.get(position));
-            if (selected == position) {
-                modle.tv_text.setSelected(true);
-                modle.tv_text.setTextColor(mContext.getResources().getColor(R.color.white));
-            } else {
-                modle.tv_text.setSelected(false);
-                modle.tv_text.setTextColor(mContext.getResources().getColor(R.color.black));
-            }
-
+            modle.tv_text.setText(mData.get(position).getValue());
+               if (mData.get(position).isClicked()){
+                   modle.clicked=true;
+                   modle.tv_text.setTextColor(mContext.getResources().getColor(R.color.black));
+                   if (selected == position) {
+                       modle.tv_text.setSelected(true);
+                       modle.tv_text.setTextColor(mContext.getResources().getColor(R.color.white));
+                   } else {
+                       modle.tv_text.setSelected(false);
+                   }
+               }else{
+                   modle.clicked=false;
+                   modle.tv_text.setTextColor(mContext.getResources().getColor(R.color.light_gray));
+               }
             return convertView;
         }
 
         class ViewModle {
             TextView tv_text;
+            boolean clicked;
         }
     }
 
@@ -905,5 +1145,91 @@ public class SelectCalendarActivity extends BaseActivity implements View.OnClick
             }
         }
         //ToastMessage(currentSelectDate);
+        getBookingTime(imId);
+    }
+
+
+    
+    /**
+      * @desc:获取总的时间段
+      * @author:Arison on 2017/6/28
+      */
+    private void getBookingTotalTime(int imId){
+        String url = Constants.IM_BASE_URL + "user/appUsertime";
+        Map<String, Object> params = new HashMap<>();
+        params.put("token", MyApplication.getInstance().mAccessToken);
+        params.put("userid", imId);
+        LinkedHashMap<String, Object> headers = new LinkedHashMap<>();
+        headers.put("Cookie", "JSESSIONID=" + CommonUtil.getSharedPreferences(ct, "sessionId"));
+        ViewUtil.httpSendRequest(ct, url, params, mHandler, headers, 0x07, null, null, "post");
+    }
+    
+    /**
+      * @desc:获取预约时间
+      * @author:Arison on 2017/6/28
+      */
+    public void getBookingTime(int imId) {
+        String url = Constants.IM_BASE_URL + "user/appBusytime";
+        String ym;
+        if (startDate){
+            ym=DateFormatUtil.getStrDate4String(v_date_start.getText().toString().replace("-",""),"yyyyMMdd");
+        }else{
+            ym=DateFormatUtil.getStrDate4String(v_date_end.getText().toString().replace("-",""),"yyyyMMdd");
+        }
+        Map<String, Object> params = new HashMap<>();
+        params.put("token", MyApplication.getInstance().mAccessToken);
+        params.put("userid", imId);
+        params.put("yearmonth",ym);
+        LinkedHashMap<String, Object> headers = new LinkedHashMap<>();
+        headers.put("Cookie", "JSESSIONID=" + CommonUtil.getSharedPreferences(ct, "sessionId"));
+        ViewUtil.httpSendRequest(ct, url, params, mHandler, headers, 0x06, null, null, "post");
+    }
+
+
+    private void parseBookTimeResult(String result) {
+        String busytime=JSON.parseObject(result).getString("busytime");
+        JSONArray jsonArray=JSON.parseArray(busytime);
+        if (totals!=null)totals.clear();
+        if(jsonArray!=null){
+            if(jsonArray.size()!=0){
+                for (int i=0;i<jsonArray.size();i++){
+                    JSONObject object=jsonArray.getJSONObject(i);
+                    String sDate=object.getString("ab_starttime");
+                    String eDate=object.getString("ab_endtime");
+                    sDate=sDate.substring(11,16);
+                    eDate=eDate.substring(11,16);
+                    LogUtil.d("Test","时间段:"+sDate+"-"+eDate);
+                    List<DataState>  dataStates=   timeAddMuilt(sDate,eDate,15);
+                    totals.addAll(dataStates);
+                }
+                LogUtil.d("Test","被预约的时间段:"+JSON.toJSONString(totals));
+                for(int j=0;j<mTimeData.size();j++){
+                    DataState  dataState=mTimeData.get(j);
+                    mTimeData.get(j).setClicked(true);
+                    for (int n=0;n<totals.size();n++){
+                        DataState nDataState=totals.get(n);
+                        if (dataState.getValue().equals(nDataState.getValue())){
+                            dataState.setClicked(false);
+                        }
+                    }
+                }
+                gAdapter.notifyDataSetChanged();
+            }else{
+                //默认时间段:00:00-23:59
+                for (int y=0;y<mTimeData.size();y++){
+                    mTimeData.get(y).setClicked(true);
+                }
+                gAdapter.notifyDataSetChanged();
+            }
+        }else{
+            for (int y=0;y<mTimeData.size();y++){
+                mTimeData.get(y).setClicked(true);
+            }
+            gAdapter.notifyDataSetChanged();
+            //默认时间段:00:00-23:59
+        }
+        
     }
+    
+ 
 }

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

@@ -643,6 +643,7 @@ public class OAActivity extends BaseActivity implements View.OnClickListener, Wo
         meModels = util.getModelByJSON(jsonObject, "me", isCrm, true);
         otherModels = util.getModelByJSON(jsonObject, "other", isCrm, false);
         meInt = util.getTaskList(curDate, meModels);
+        LogUtil.d("Test",JSON.toJSONString(meInt)+"  model:"+JSON.toJSONString(meModels));
         otherInt = util.getTaskList(curDate, otherModels);
         OAHttpHelper.getInstance().post(new Runnable() {
             @Override

+ 292 - 0
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/secretary/BookingAddActivity.java

@@ -0,0 +1,292 @@
+package com.xzjmyk.pm.activity.ui.erp.activity.secretary;
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.Message;
+import android.view.View;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.RelativeLayout;
+import android.widget.TextView;
+
+import com.alibaba.fastjson.JSON;
+import com.xzjmyk.pm.activity.MyApplication;
+import com.xzjmyk.pm.activity.R;
+import com.xzjmyk.pm.activity.bean.oa.SelectEmUser;
+import com.xzjmyk.pm.activity.ui.erp.activity.form.SelectCalendarActivity;
+import com.xzjmyk.pm.activity.ui.erp.activity.oa.OABaseActivity;
+import com.xzjmyk.pm.activity.ui.erp.activity.oa.SelectAimActivity;
+import com.xzjmyk.pm.activity.ui.erp.entity.SelectCollisionTurnBean;
+import com.xzjmyk.pm.activity.ui.erp.model.book.BookingModel;
+import com.xzjmyk.pm.activity.ui.erp.model.oa.SelectAimModel;
+import com.xzjmyk.pm.activity.ui.erp.net.ViewUtil;
+import com.xzjmyk.pm.activity.ui.erp.presenter.imp.HttpImp;
+import com.xzjmyk.pm.activity.ui.erp.util.CommonUtil;
+import com.xzjmyk.pm.activity.ui.erp.util.Constants;
+import com.xzjmyk.pm.activity.ui.erp.util.LogUtil;
+import com.xzjmyk.pm.activity.ui.erp.util.StringUtils;
+import com.xzjmyk.pm.activity.ui.erp.util.oa.OAConfig;
+import com.xzjmyk.pm.activity.util.DateFormatUtil;
+
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+/**
+ * @desc:小秘书新增界面
+ * @author:Arison on 2017/6/22
+ */
+public class BookingAddActivity extends OABaseActivity implements HttpImp, View.OnClickListener {
+
+
+    private TextView tvBookObject;
+    private RelativeLayout companyAddRl;
+    private RelativeLayout rlObject;
+    private TextView tvBookTimes;
+    private RelativeLayout remarkRl;
+    private TextView tvBookAddress;
+    private double latitude;
+    private double longitude;
+    private int imId;
+    private String startTime;
+    private String endTime;
+    private EditText et_book_content;
+    BookingModel model;
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.activity_book_add);
+        getSupportActionBar().setTitle(getString(R.string.booking_add));
+        tvBookObject = (TextView) findViewById(R.id.tv_book_object);
+        companyAddRl = (RelativeLayout) findViewById(R.id.company_add_rl);
+        tvBookTimes = (TextView) findViewById(R.id.tv_book_times);
+        remarkRl = (RelativeLayout) findViewById(R.id.remark_rl);
+        rlObject = (RelativeLayout) findViewById(R.id.rl_object);
+        tvBookAddress = (TextView) findViewById(R.id.tv_book_address);
+        et_book_content = (EditText) findViewById(R.id.et_book_content);
+        findViewById(R.id.submit_btn).setOnClickListener(this);
+        rlObject.setOnClickListener(this);
+        companyAddRl.setOnClickListener(this);
+        remarkRl.setOnClickListener(this);
+
+        if (getIntent() != null && getIntent().getExtras() != null) {
+            model = getIntent().getExtras().getParcelable("model");
+            if (model != null) {
+                tvBookObject.setText(model.getAb_bman());
+                tvBookTimes.setText(model.getAb_starttime().substring(0, 10) + " " + model.getAb_starttime().substring(11, 16) + "-"
+                        + model.getAb_endtime().substring(11, 16));
+                tvBookAddress.setText(model.getAb_address());
+                et_book_content.setText(model.getAb_content());
+
+                longitude = Double.valueOf(model.getAb_longitude());
+                latitude = Double.valueOf(model.getAb_latitude());
+                imId = Integer.valueOf(model.getAb_bmanid());
+
+                startTime = model.getAb_starttime();
+                endTime = model.getAb_endtime();
+                
+                ((Button)findViewById(R.id.submit_btn)).setText(getString(R.string.booking_change));
+            }
+        }
+    }
+
+    private EditText getEtBookContent() {
+        return (EditText) findViewById(R.id.et_book_content);
+    }
+
+    @Override
+    public void onClick(View view) {
+        switch (view.getId()) {
+            case R.id.submit_btn:
+                if (((Button) view).getText().equals(getString(R.string.app_button_commit))) {
+                    getBookingTime();
+                } else {
+                    updateBooking();
+                }
+                break;
+            case R.id.company_add_rl://时段
+                if (imId != 0) {
+                    startActivityForResult(new Intent(mContext, SelectCalendarActivity.class)
+                                    .putExtra("startDate", DateFormatUtil.getDateTimeStr())
+                                    .putExtra("endDate", DateFormatUtil.getDateTimeStr())
+                                    .putExtra("hasMenu", false)
+                                    .putExtra("imId", imId)
+                                    .putExtra("type", 1)
+                            , 0x24);
+                } else {
+                    ToastMessage("请先选择预约对象!");
+                }
+                break;
+            case R.id.remark_rl://地址
+                Intent intent = new Intent(ct, SelectAimActivity.class);
+                startActivityForResult(intent, 0x23);
+                break;
+            case R.id.rl_object://对象
+                intent = new Intent(this, SelectPContactsActivity.class);
+                SelectCollisionTurnBean bean = new SelectCollisionTurnBean()
+                        .setTitle(getString(R.string.app_local_contacts))
+                        .setSingleAble(true)
+                        .setSelectCode(null);
+                intent.putExtra(OAConfig.MODEL_DATA, bean);
+                intent.putExtra("type", 1);
+                startActivityForResult(intent, 0x01);
+                break;
+        }
+    }
+
+    @Override
+    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+        if (data == null) return;
+        switch (requestCode) {
+            case 0x23://地址
+                SelectAimModel entity = data.getParcelableExtra("data");
+                tvBookAddress.setText(entity.getAddress());
+                if (entity.getLatLng() != null) {
+                    latitude = entity.getLatLng().latitude;
+                    longitude = entity.getLatLng().longitude;
+                }
+                break;
+            case 0x24://时间
+
+                startTime = data.getStringExtra("startDate");
+                endTime = data.getStringExtra("endDate");
+
+                String displayDate = startTime.substring(11, 16) + "-" + endTime.substring(11, 16);
+                tvBookTimes.setText(displayDate);
+
+                break;
+            case 0x01://对象
+                SelectEmUser model = data.getParcelableExtra("data");
+                imId = model.getImId();
+                tvBookObject.setText(model.getEmName());
+                break;
+        }
+
+
+    }
+
+    public void getBookingTime() {
+        if (StringUtils.isEmpty(tvBookObject.getText().toString())) {
+            ToastMessage("请选择预约对象!");
+            return;
+        }
+        if (StringUtils.isEmpty(tvBookTimes.getText().toString())) {
+            ToastMessage("请选择预约时间段!");
+            return;
+        }
+        if (StringUtils.isEmpty(tvBookAddress.getText().toString())) {
+            ToastMessage("请选择预约地址!");
+            return;
+        }
+        if (StringUtils.isEmpty(et_book_content.getText().toString())) {
+            ToastMessage("请填写预约内容!");
+            return;
+        }
+
+        String json = "{" +
+                "\"ab_bman\":\"" + tvBookObject.getText().toString() + "\"," +
+                "\"ab_bmanid\":\"" + imId + "\"," +
+                "\"ab_starttime\":\"" + startTime + "\"," +
+                "\"ab_endtime\":\"" + endTime + "\"," +
+                "\"ab_recordid\":\"" + MyApplication.getInstance().mLoginUser.getUserId() + "\"," +
+                "\"ab_recordman\":\"" + MyApplication.getInstance().mLoginUser.getNickName() + "\"," +
+                "\"ab_content\":\"" + et_book_content.getText().toString() + "\"," +
+                "\"ab_confirmstatus\":\"待确认\"," +
+                "\"ab_address\":\"" + tvBookAddress.getText().toString() + "\"," +
+                "\"ab_longitude\":\"" + longitude + "\",\n" +
+                "\"ab_latitude\":\"" + latitude + "\"" +
+                "}\n";
+        LogUtil.prinlnLongMsg("Test", json);
+        String url = Constants.IM_BASE_URL + "user/appSaveBooking";
+        Map<String, Object> params = new HashMap<>();
+        params.put("token", MyApplication.getInstance().mAccessToken);
+        params.put("map", json);
+        LinkedHashMap<String, Object> headers = new LinkedHashMap<>();
+        headers.put("Cookie", "JSESSIONID=" + CommonUtil.getSharedPreferences(ct, "sessionId"));
+        ViewUtil.httpSendRequest(ct, url, params, mHandler, headers, 0x01, null, null, "post");
+    }
+
+
+    public void updateBooking() {
+        if (StringUtils.isEmpty(tvBookObject.getText().toString())) {
+            ToastMessage("请选择预约对象!");
+            return;
+        }
+        if (StringUtils.isEmpty(tvBookTimes.getText().toString())) {
+            ToastMessage("请选择预约时间段!");
+            return;
+        }
+        if (StringUtils.isEmpty(tvBookAddress.getText().toString())) {
+            ToastMessage("请选择预约地址!");
+            return;
+        }
+        if (StringUtils.isEmpty(et_book_content.getText().toString())) {
+            ToastMessage("请填写预约内容!");
+            return;
+        }
+        showLoading();
+
+        String json = "{" +
+                "\"ab_bman\":\"" + tvBookObject.getText().toString() + "\"," +
+                "\"ab_bmanid\":\"" + imId + "\"," +
+                "\"ab_starttime\":\"" + startTime + "\"," +
+                "\"ab_endtime\":\"" + endTime + "\"," +
+                "\"ab_recordid\":\"" +model.getAb_recordid() + "\"," +
+                "\"ab_recordman\":\"" + model.getAb_recordman() + "\"," +
+                "\"ab_content\":\"" + et_book_content.getText().toString() + "\"," +
+                "\"ab_confirmstatus\":\"未确认\"," +
+                "\"ab_address\":\"" + tvBookAddress.getText().toString() + "\"," +
+                "\"ab_longitude\":\"" + longitude + "\",\n" +
+                "\"ab_latitude\":\"" + latitude + "\"" +
+                "}\n";
+        String url = Constants.IM_BASE_URL + "user/appUpdateBooking";
+        Map<String, Object> params = new HashMap<>();
+        params.put("token", MyApplication.getInstance().mAccessToken);
+        params.put("map", json);
+        params.put("id", model.getAb_id());
+        LinkedHashMap<String, Object> headers = new LinkedHashMap<>();
+        headers.put("Cookie", "JSESSIONID=" + CommonUtil.getSharedPreferences(ct, "sessionId"));
+        ViewUtil.httpSendRequest(ct, url, params, mHandler, headers, 0x02, null, null, "post");
+    }
+
+
+    private Handler mHandler = new Handler() {
+        @Override
+        public void handleMessage(Message msg) {
+            dimssLoading();
+            switch (msg.what) {
+                case 0x01:
+                    try {
+                        String resutl = JSON.parseObject(msg.getData().getString("result")).getString("result");
+                        if (resutl.equals("true")) {
+                            ToastMessage("预约成功!");
+                            startActivity(new Intent(BookingAddActivity.this, BookingListActivity.class));
+                        } else {
+                            ToastMessage("预约失败!");
+                        }
+                        dimssLoading();
+                    } catch (Exception e) {
+                        ToastMessage("预约失败!");
+                    }
+                case 0x02:
+                    try {
+                        if (JSON.parseObject(msg.getData().getString("result")).getString("result").equals("true")) {
+                            ToastMessage(getString(R.string.make_adeal_success));
+                            startActivity(new Intent(BookingAddActivity.this, BookingListActivity.class));
+                        } else {
+                            ToastMessage(getString(R.string.make_adeal_failed));
+                        }
+                    } catch (Exception e) {
+                        ToastMessage(getString(R.string.make_adeal_failed));
+                    }
+                    break;
+                case Constants.APP_SOCKETIMEOUTEXCEPTION:
+                    ToastMessage(getString(R.string.make_adeal_failed));
+                    break;
+            }
+        }
+    };
+
+}

+ 326 - 0
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/secretary/BookingDetailActivity.java

@@ -0,0 +1,326 @@
+package com.xzjmyk.pm.activity.ui.erp.activity.secretary;
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.Message;
+import android.util.Log;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.View;
+import android.view.animation.Animation;
+import android.view.animation.AnimationUtils;
+import android.widget.Button;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.RelativeLayout;
+import android.widget.TextView;
+
+import com.alibaba.fastjson.JSON;
+import com.xzjmyk.pm.activity.MyApplication;
+import com.xzjmyk.pm.activity.R;
+import com.xzjmyk.pm.activity.bean.oa.SelectEmUser;
+import com.xzjmyk.pm.activity.helper.AvatarHelper;
+import com.xzjmyk.pm.activity.ui.erp.activity.oa.OABaseActivity;
+import com.xzjmyk.pm.activity.ui.erp.activity.oa.SelectCollisionActivity;
+import com.xzjmyk.pm.activity.ui.erp.entity.SelectCollisionTurnBean;
+import com.xzjmyk.pm.activity.ui.erp.model.book.BookingModel;
+import com.xzjmyk.pm.activity.ui.erp.net.ViewUtil;
+import com.xzjmyk.pm.activity.ui.erp.presenter.imp.HttpImp;
+import com.xzjmyk.pm.activity.ui.erp.util.CommonUtil;
+import com.xzjmyk.pm.activity.ui.erp.util.Constants;
+import com.xzjmyk.pm.activity.ui.erp.util.LogUtil;
+import com.xzjmyk.pm.activity.ui.erp.util.StringUtils;
+import com.xzjmyk.pm.activity.ui.erp.util.oa.OAConfig;
+
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import de.hdodenhof.circleimageview.CircleImageView;
+
+
+/**
+  * @desc:预约详情
+  * @author:Arison on 2017/6/22
+  */
+public class BookingDetailActivity extends OABaseActivity implements HttpImp,View.OnClickListener {
+
+    private RelativeLayout rvTop;
+    private LinearLayout llLeft;
+    private CircleImageView ivMe;
+    private TextView tvMe;
+    private ImageView ivResultInfo;
+    private LinearLayout llRight;
+    private CircleImageView ivTarget;
+    private TextView tvTarget;
+    private TextView tvTime;
+    private TextView tvAddress;
+    private TextView tvContent;
+    private ImageView ivResult;
+    
+    private LinearLayout ll_bottom;
+    BookingModel model;
+    private boolean isMenuShuffle=false;
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.activity_booking_detail);
+
+        initView();
+    }
+
+    private void initView() {
+        getSupportActionBar().setTitle(getString(R.string.booking_title));
+        rvTop = (RelativeLayout) findViewById(R.id.rv_top);
+        llLeft = (LinearLayout) findViewById(R.id.ll_left);
+        ivMe = (CircleImageView) findViewById(R.id.iv_me);
+        tvMe = (TextView) findViewById(R.id.tv_me);
+        ivResultInfo = (ImageView) findViewById(R.id.iv_resultInfo);
+        llRight = (LinearLayout) findViewById(R.id.ll_right);
+        ivTarget = (CircleImageView) findViewById(R.id.iv_target);
+        tvTarget = (TextView) findViewById(R.id.tv_target);
+        tvTime = (TextView) findViewById(R.id.tv_time);
+        tvAddress = (TextView) findViewById(R.id.tv_address);
+        tvContent = (TextView) findViewById(R.id.tv_content);
+        ivResult = (ImageView) findViewById(R.id.iv_result);
+        ll_bottom= (LinearLayout) findViewById(R.id.ll_bottom);
+        findViewById(R.id.bt_change).setOnClickListener(this);
+        findViewById(R.id.bt_cancle).setOnClickListener(this);
+
+        Animation animation= AnimationUtils.loadAnimation(this, R.anim.anim_translate_bookingprogress);
+        
+        
+      
+       
+        
+        
+        if (getIntent()!=null){
+            model=getIntent().getExtras().getParcelable("model");
+            boolean isShared=getIntent().getExtras().getBoolean("isShared");
+            tvTime.setText(model.getAb_starttime().substring(11,16)+"-"+
+                    model.getAb_endtime().substring(11,16));
+            tvAddress.setText(model.getAb_address());
+            tvContent.setText(model.getAb_content());
+            AvatarHelper.getInstance().display(model.getAb_bmanid(), ivTarget, true, true);
+            AvatarHelper.getInstance().display(model.getAb_recordid(), ivMe, true, true);
+            ivResultInfo.clearAnimation();
+            ll_bottom.setVisibility(View.GONE);
+         
+            if ("已拒绝".equals(model.getAb_confirmstatus())){
+                ivResult.setImageDrawable(mContext. getResources().getDrawable(R.drawable.icon_jujue1));
+                ivResultInfo.setImageDrawable(mContext. getResources().getDrawable(R.drawable.icon_jujue));
+            }
+            if("未确认".equals(model.getAb_confirmstatus())){
+                ivResult.setImageDrawable(mContext. getResources().getDrawable(R.drawable.icon_weiqueren));
+                ivResultInfo.setImageDrawable(mContext. getResources().getDrawable(R.drawable.icon_send));
+                //开启动画
+                ll_bottom.setVisibility(View.VISIBLE);
+                ivResultInfo.startAnimation(animation);
+                if( MyApplication.getInstance().mLoginUser.getUserId().equals(model.getAb_recordid())){
+                    ((Button)findViewById(R.id.bt_change)).setText("变更");
+                    ((Button)findViewById(R.id.bt_cancle)).setText("取消");
+                }else{
+                    ((Button)findViewById(R.id.bt_change)).setText("确认");
+                    ((Button)findViewById(R.id.bt_cancle)).setText("拒绝");
+                }
+            }
+            if("已确认".equals(model.getAb_confirmstatus())){
+                ivResult.setImageDrawable(mContext. getResources().getDrawable(R.drawable.icon_yiqueren));
+                ivResultInfo.setImageDrawable(mContext. getResources().getDrawable(R.drawable.icon_queren1));
+                isMenuShuffle=true;
+                if( MyApplication.getInstance().mLoginUser.getUserId().equals(model.getAb_recordid())){
+                    ((Button)findViewById(R.id.bt_change)).setText("变更");
+                    ((Button)findViewById(R.id.bt_cancle)).setText("取消");
+                  
+                }else{
+                    ll_bottom.setVisibility(View.GONE);
+                }
+            }
+            if("已取消".equals(model.getAb_confirmstatus())){
+                ivResult.setImageDrawable(mContext. getResources().getDrawable(R.drawable.icon_quxiao3));
+                ivResultInfo.setImageDrawable(mContext. getResources().getDrawable(R.drawable.icon_cancle3));
+               
+            }
+            //共享状态
+            if (isShared){
+                tvTarget.setText(model.getAb_bman());
+                tvMe.setText(model.getAb_recordman());
+                ll_bottom.setVisibility(View.GONE);
+            }else{
+                if ( MyApplication.getInstance().mLoginUser.getUserId().equals(model.getAb_recordid())){
+                    //我是发起人
+                    tvMe.setText(getString(R.string.me));
+                    tvTarget.setText(model.getAb_bman());
+                }else{
+                    //被约 
+                    tvTarget.setText(getString(R.string.me));
+                    tvMe.setText(model.getAb_recordman());
+                }
+            }
+        
+        }
+    }
+
+    @Override
+    public void onClick(View view) {
+        switch (view.getId()) {
+            case R.id.bt_change:
+                updateBookingState((Button)view);
+                break;
+            case R.id.bt_cancle:
+                updateBookingState((Button)view);
+                break;
+        }
+    }
+
+    @Override
+    public boolean onPrepareOptionsMenu(Menu menu) {
+        Log.e("isMenuShuffle",isMenuShuffle + "");
+        if(isMenuShuffle)
+        {
+            menu.findItem(R.id.app_about).setVisible(true);
+        }else
+        {
+            menu.findItem(R.id.app_about).setVisible(false);
+        }
+        return super.onPrepareOptionsMenu(menu);
+    }
+
+    @Override
+    public boolean onCreateOptionsMenu(Menu menu) {
+        getMenuInflater().inflate(R.menu.menu_about, menu);
+        return true;
+    }
+
+    @Override
+    public boolean onOptionsItemSelected(MenuItem item) {
+        switch (item.getItemId()) {
+            case R.id.app_about:
+               Intent intent = new Intent(ct, SelectCollisionActivity.class);
+                SelectCollisionTurnBean bean = new SelectCollisionTurnBean()
+                        .setTitle(getString(R.string.select_doman))
+                        .setSingleAble(false);
+                intent.putExtra(OAConfig.MODEL_DATA, bean);
+                startActivityForResult(intent, 0x02);
+                break;
+            case android.R.id.home:
+                onBackPressed();
+                break;
+        }
+        return true;
+    }
+    
+    public void updateBookingState(Button button){
+        showLoading();
+        String map="{\"ab_confirmstatus \":\"已确认\",\"ab_bmanid\":\""+model.getAb_bmanid()+"\"}";
+       if (button.getText().equals("变更")){
+           Bundle bundle=new Bundle();
+           bundle.putParcelable("model",model);
+           startActivity(new Intent(mContext,BookingAddActivity.class)
+                   .putExtras(bundle));
+           return;
+       }
+        if (button.getText().equals("确认")){
+            map="{\"ab_confirmstatus \":\"已确认\",\"ab_bmanid\":\""+model.getAb_bmanid()+"\"}";
+        }
+        if (button.getText().equals("拒绝")){
+            map="{\"ab_confirmstatus \":\"已拒绝\",\"ab_bmanid\":\""+model.getAb_bmanid()+"\"}";
+        }
+        if (button.getText().equals("取消")){
+            map="{\"ab_confirmstatus\":\"已取消\",\"ab_sharestatus\":\"未共享\",\"ab_bmanid\":\"" + model.getAb_bmanid() + "\"}";
+        }
+        String url = Constants.IM_BASE_URL + "user/appUpdateBooking";
+        Map<String, Object> params = new HashMap<>();
+        params.put("token", MyApplication.getInstance().mAccessToken);
+        params.put("map", map);
+        params.put("id", model.getAb_id());
+        LinkedHashMap<String, Object> headers = new LinkedHashMap<>();
+        headers.put("Cookie", "JSESSIONID=" + CommonUtil.getSharedPreferences(ct, "sessionId"));
+        ViewUtil.httpSendRequest(ct, url, params, mHandler, headers, 0x01, null, null, "post");
+    }
+    
+     private Handler mHandler=new Handler(){
+             @Override
+             public void handleMessage(Message msg) {
+                 dimssLoading();
+                 switch (msg.what){
+                     case 0x01:
+                         try {
+                             if (JSON.parseObject(msg.getData().getString("result")).getString("result").equals("true")){
+                                 ToastMessage(getString(R.string.make_adeal_success));
+                                 startActivity(new Intent(BookingDetailActivity.this,BookingListActivity.class));
+                             }else{
+                                 ToastMessage(getString(R.string.make_adeal_failed));
+                             }
+                         } catch (Exception e) {
+                             ToastMessage(getString(R.string.make_adeal_failed));
+                         }
+                         break;
+                     case 0x02:
+                       
+                         try {
+                             if (JSON.parseObject(msg.getData().getString("result")).getString("result").equals("true")){
+                                 ToastMessage(getString(R.string.make_adeal_success));
+                               //  startActivity(new Intent(BookingDetailActivity.this,BookingListActivity.class));
+                             }else{
+                                 ToastMessage(getString(R.string.make_adeal_failed));
+                             }
+                         } catch (Exception e) {
+                             ToastMessage(getString(R.string.make_adeal_failed));
+                         }
+                         break;
+                     case Constants.APP_SOCKETIMEOUTEXCEPTION:
+                         ToastMessage(getString(R.string.make_adeal_failed));
+                         break;
+                 }
+             }
+         };
+
+    @Override
+    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+        if (data==null)return;
+        switch (requestCode){
+            case 0x02:
+                try {
+                    List<SelectEmUser> employeesList = data.getParcelableArrayListExtra("data");
+                    LogUtil.d("Test",JSON.toJSONString(employeesList));
+                    StringBuilder stringBuilder=new StringBuilder("");
+                    for(int i=0;i<employeesList.size();i++){
+                        if (i==employeesList.size()-1){
+                            stringBuilder.append(employeesList.get(i).getImId());
+                        }else{
+                            stringBuilder.append(employeesList.get(i).getImId());
+                            stringBuilder.append(",");
+                        }
+                    }
+                    LogUtil.d("Test",stringBuilder.toString());
+                    LogUtil.d("Test",model.getAb_id());
+                    if (!StringUtils.isEmpty(stringBuilder.toString())&&!StringUtils.isEmpty(model.getAb_id())){
+                        shareBooking(model.getAb_id(),stringBuilder.toString());
+                    }else {
+                        ToastMessage("共享失败!");
+                    }
+                } catch (Exception e) {
+                    
+                }
+                break;
+        }
+    }
+    
+    
+    public void shareBooking(String id,String imids){
+        showLoading();
+        String map="{\"ab_bmanid\":\"" + model.getAb_bmanid() + "\",\"as_planid\":\""+id+"\",\"as_userids\":\""+imids+"\"}";
+        String url = Constants.IM_BASE_URL + "user/appSharePlan";
+        Map<String, Object> params = new HashMap<>();
+        params.put("token", MyApplication.getInstance().mAccessToken);
+        params.put("map", map);
+//        params.put("id", model.getAb_id());
+        LinkedHashMap<String, Object> headers = new LinkedHashMap<>();
+        headers.put("Cookie", "JSESSIONID=" + CommonUtil.getSharedPreferences(ct, "sessionId"));
+        ViewUtil.httpSendRequest(ct, url, params, mHandler, headers, 0x02, null, null, "post");
+    }
+}

+ 380 - 0
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/secretary/BookingListActivity.java

@@ -0,0 +1,380 @@
+package com.xzjmyk.pm.activity.ui.erp.activity.secretary;
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.Message;
+import android.support.v4.view.ViewPager;
+import android.view.KeyEvent;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.View;
+import android.widget.AdapterView;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.lidroid.xutils.ViewUtils;
+import com.lidroid.xutils.view.annotation.ViewInject;
+import com.xzjmyk.pm.activity.MyApplication;
+import com.xzjmyk.pm.activity.R;
+import com.xzjmyk.pm.activity.ui.MainActivity;
+import com.xzjmyk.pm.activity.ui.erp.activity.oa.OABaseActivity;
+import com.xzjmyk.pm.activity.ui.erp.activity.setting.SelectLanguageActivity;
+import com.xzjmyk.pm.activity.ui.erp.adapter.booking.BookAdapter;
+import com.xzjmyk.pm.activity.ui.erp.adapter.oa.OACalenderViewPagerAdapter;
+import com.xzjmyk.pm.activity.ui.erp.model.book.BookingModel;
+import com.xzjmyk.pm.activity.ui.erp.net.ViewUtil;
+import com.xzjmyk.pm.activity.ui.erp.presenter.imp.HttpImp;
+import com.xzjmyk.pm.activity.ui.erp.util.CommonUtil;
+import com.xzjmyk.pm.activity.ui.erp.util.Constants;
+import com.xzjmyk.pm.activity.ui.erp.util.ListUtils;
+import com.xzjmyk.pm.activity.ui.erp.view.CustomerScrollView;
+import com.xzjmyk.pm.activity.ui.erp.view.EmptyLayout;
+import com.xzjmyk.pm.activity.util.DateFormatUtil;
+import com.xzjmyk.pm.activity.util.TimeUtils;
+import com.xzjmyk.pm.activity.view.MyListView;
+import com.xzjmyk.pm.activity.view.OACalendarView;
+
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.Set;
+
+public class BookingListActivity extends OABaseActivity implements HttpImp,View.OnClickListener {
+    
+    @ViewInject(R.id.tv_book_me)
+    TextView tv_book_me;
+    @ViewInject(R.id.tv_book_shared)
+    TextView tv_book_shared;
+    @ViewInject(R.id.yeas_tv)
+    TextView yeas_tv;
+    @ViewInject(R.id.day_tv)
+    TextView day_tv;
+    @ViewInject(R.id.week_tv)
+    TextView week_tv;
+    @ViewInject(R.id.viewPager)
+    ViewPager viewPager;
+    @ViewInject(R.id.lv_book)
+    MyListView lv_book;
+    @ViewInject(R.id.sv_top)
+    CustomerScrollView sv_top;
+
+    private EmptyLayout emptyLayout;
+    private Date curDate;
+    private int posItem;
+    
+    private ArrayList<BookingModel> mDatas=new ArrayList<>();
+    private BookAdapter mAdapter;
+    private OACalendarView calendarView;
+    private OACalenderViewPagerAdapter pagerAdapter;//当前Viewpager适配器
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.activity_booking_list);
+        getSupportActionBar().setTitle(getString(R.string.booking_menu));
+        ViewUtils.inject(this);
+        initView();
+        initEvent();
+      
+        
+    }
+
+    @Override
+    protected void onResume() {
+        super.onResume();
+        initData();
+    }
+
+    @Override
+    public boolean onCreateOptionsMenu(Menu menu) {
+        getMenuInflater().inflate(R.menu.menu_nearby, menu);
+        return super.onCreateOptionsMenu(menu);
+    }
+
+    @Override
+    public boolean onOptionsItemSelected(MenuItem item) {
+        if (item.getItemId() == R.id.search) {
+            startActivity(new Intent(mContext, BookingAddActivity.class));
+        }
+        return super.onOptionsItemSelected(item);
+
+    }
+    private void initEvent() {
+       tv_book_me.setOnClickListener(this);
+       tv_book_shared.setOnClickListener(this);
+        viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
+            @Override
+            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
+            }
+
+            @Override
+            public void onPageSelected(int position) {
+                Calendar c = Calendar.getInstance();
+                c.setTime(curDate);
+                int day = c.get(Calendar.DAY_OF_MONTH);
+                calendarView = pagerAdapter.getmViews().get(position);
+                setCalenderOnClicklistener();
+                posItem = position;
+                if (day <= 0) return;  // update:2017-4-21-11:06 这里day未获取到闪退了 已做判空处理
+                calendarView.setDownIndex(day);
+                curDate = calendarView.getDownDate();
+                setDateTag(curDate);
+                loadListData();
+//                if (CommonUtil.isNetWorkConnected(getApplication())) {
+//                    loadNetData(TimeUtils.ym_format.format(curDate));
+//                }
+
+            }
+
+            @Override
+            public void onPageScrollStateChanged(int state) {
+            }
+        });
+        
+        lv_book.setOnItemClickListener(new AdapterView.OnItemClickListener() {
+            @Override
+            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
+                BookAdapter.ViewHolder viewHolder= (BookAdapter.ViewHolder) view.getTag();
+                Bundle bundle=new Bundle();
+                bundle.putParcelable("model",viewHolder.model);
+                bundle.putBoolean("isShared",tv_book_shared.isSelected());
+                startActivity(new Intent(mContext,BookingDetailActivity.class)
+                .putExtras(bundle)
+                );
+            }
+        });
+
+
+  
+    }
+
+    private void initData() {
+   
+        setDateTag(new Date());
+        loadListData();
+    }
+
+    private void initView() {
+        tv_book_me.setSelected(true);
+        curDate = new Date(System.currentTimeMillis());
+        posItem = OACalenderViewPagerAdapter.MAX_NUM / 2;
+        //设置为空显示列表
+        emptyLayout = new EmptyLayout(ct, lv_book);
+        emptyLayout.setShowLoadingButton(false);
+        emptyLayout.setShowEmptyButton(false);
+        emptyLayout.setShowErrorButton(false);
+        emptyLayout.setEmptyViewRes(R.layout.oa_empty_list);
+        
+        LinearLayout.LayoutParams linearParams = (LinearLayout.LayoutParams) viewPager.getLayoutParams(); // 取控件mGrid当前的布局参数   搜索
+        linearParams.height = (getResources().getDisplayMetrics().heightPixels * 1 / 3);// 当控件的高强制设成50象素
+        viewPager.setLayoutParams(linearParams); // 使设置好的布局参数应用到控件myGrid
+        pagerAdapter = new OACalenderViewPagerAdapter(ct);
+        viewPager.setAdapter(pagerAdapter);
+        viewPager.setCurrentItem(OACalenderViewPagerAdapter.MAX_NUM / 2);
+        mAdapter=new BookAdapter(mContext,mDatas);
+        lv_book.setAdapter(mAdapter);
+    }
+
+    @Override
+    public void onClick(View v) {
+        switch (v.getId()){
+            case R.id.tv_book_me:
+                tv_book_shared.setSelected(false);
+                tv_book_me.setSelected(true);
+                if (mAdapter!=null) {
+                    mAdapter.setType(1);
+                }
+                loadListData();
+                
+                break;
+            case R.id.tv_book_shared:
+                tv_book_shared.setSelected(true);
+                tv_book_me.setSelected(false);
+                if (mAdapter!=null) {
+                    mAdapter.setType(2);
+                }
+                loadListData();
+               
+                break;
+        }
+    }
+
+    private void setDateTag(Date date) {
+        Calendar c = Calendar.getInstance();
+        c.setTime(date);
+        int yeas = c.get(Calendar.YEAR);
+        int month = c.get(Calendar.MONTH) + 1;
+        int day = c.get(Calendar.DAY_OF_MONTH);
+        yeas_tv.setText(yeas + "年" + month + "月");
+        day_tv.setText(day + "日");
+        week_tv.setText(TimeUtils.getWeek(TimeUtils.s_format.format(date)));
+    }
+
+    private void setCalenderOnClicklistener() {
+        if (calendarView == null && pagerAdapter != null && pagerAdapter.getmViews() != null) {
+            calendarView = pagerAdapter.getmViews().get(posItem);
+        }
+        if (calendarView != null)
+            calendarView.setDateListener(new OACalendarView.OnSelectDateListener() {
+                @Override
+                public void result(Date date) {
+                    curDate = date;
+                    setDateTag(date);
+                    loadListData();
+                   // setAdapterBeans();
+                }
+            });
+    }
+
+
+   
+    @Override
+    public void onWindowFocusChanged(boolean hasFocus) {
+        super.onWindowFocusChanged(hasFocus);
+        //setCalenderOnClicklistener();
+    }
+    
+    
+    private void loadListData(){
+        showLoading();
+        String url = Constants.IM_BASE_URL + "user/appBookingList";
+        Map<String, Object> params = new HashMap<>();
+        params.put("token", MyApplication.getInstance().mAccessToken);
+        params.put("userid", MyApplication.getInstance().mLoginUser.getUserId());
+        params.put("yearmonth", DateFormatUtil.getStrDate4Date(curDate,"yyyyMM"));
+        LinkedHashMap<String, Object> headers = new LinkedHashMap<>();
+        headers.put("Cookie", "JSESSIONID=" + CommonUtil.getSharedPreferences(ct, "sessionId"));
+        ViewUtil.httpSendRequest(ct, url, params, mHandler, headers, 0x01, null, null, "post");
+    }
+    
+    
+     private Handler mHandler=new Handler(){
+             @Override
+             public void handleMessage(Message msg) {
+                 dimssLoading();
+                 setCalenderOnClicklistener();
+                 switch (msg.what){
+                     case 0x01:
+                         try {
+                             String result=msg.getData().getString("result");
+                             if(!ListUtils.isEmpty(mDatas)){
+                                 mDatas.clear();
+                             }
+                             if (JSON.parseObject(result).getString("resultMsg")!=null){
+                                 ToastMessage(JSON.parseObject(result).getString("resultMsg"));
+                                 emptyLayout.showEmpty();
+                                 return;
+                             }
+                             if (tv_book_me.isSelected()){
+                                 JSONArray jsonArray= JSON.parseArray(JSON.parseObject(result).getString("bookinglist"));
+                                 if (jsonArray!=null){
+                                     Set<Integer> tags = new HashSet<>();
+                                     for (int i=0;i<jsonArray.size();i++){
+                                         JSONObject object=jsonArray.getJSONObject(i);
+                                         BookingModel model=new BookingModel();
+                                         model.setAb_address(object.getString("ab_address"));
+                                         model.setAb_bman(object.getString("ab_bman"));
+                                         model.setAb_bmanid(object.getString("ab_bmanid"));
+                                         model.setAb_confirmstatus(object.getString("ab_confirmstatus"));
+                                         model.setAb_content(object.getString("ab_content"));
+                                         model.setAb_endtime(object.getString("ab_endtime"));
+                                         model.setAb_id(object.getString("ab_id"));
+                                         model.setAb_latitude(object.getString("ab_latitude"));
+                                         model.setAb_longitude(object.getString("ab_longitude"));
+                                         model.setAb_recorddate(object.getString("ab_recorddate"));
+                                         model.setAb_recordid(object.getString("ab_recordid"));
+                                         model.setAb_recordman(object.getString("ab_recordman"));
+                                         model.setAb_sharestatus(object.getString("ab_sharestatus"));
+                                         model.setAb_starttime(object.getString("ab_starttime"));
+                                         tags.add(Integer.valueOf(model.getAb_starttime().substring(8,10)));
+                                         if (model.getAb_starttime().contains(DateFormatUtil.getStrDate4Date(curDate,"yyyy-MM-dd")))
+                                         {
+                                             mDatas.add(model);
+                                         }
+                                     }
+                                     if (mAdapter!=null){
+                                         mAdapter.notifyDataSetChanged();
+                                     }else{
+                                         mAdapter=new BookAdapter(mContext,mDatas);
+                                         lv_book.setAdapter(mAdapter);
+                                     }
+                                     calendarView.setDecoratDays(tags);
+                                     if (mDatas.size()==0){
+                                         emptyLayout.showEmpty();
+                                     }
+                                 }
+                             }else{
+                                 JSONArray jsonArray= JSON.parseArray(JSON.parseObject(result).getString("sharelist"));
+                                 if (jsonArray!=null){
+                                     Set<Integer> tags = new HashSet<>();
+                                     for (int i=0;i<jsonArray.size();i++){
+                                         JSONObject object=jsonArray.getJSONObject(i);
+                                         BookingModel model=new BookingModel();
+                                         model.setAb_address(object.getString("ab_address"));
+                                         model.setAb_bman(object.getString("ab_bman"));
+                                         model.setAb_bmanid(object.getString("ab_bmanid"));
+                                         model.setAb_confirmstatus(object.getString("ab_confirmstatus"));
+                                         model.setAb_content(object.getString("ab_content"));
+                                         model.setAb_endtime(object.getString("ab_endtime"));
+                                         model.setAb_id(object.getString("ab_id"));
+                                         model.setAb_latitude(object.getString("ab_latitude"));
+                                         model.setAb_longitude(object.getString("ab_longitude"));
+                                         model.setAb_recorddate(object.getString("ab_recorddate"));
+                                         model.setAb_recordid(object.getString("ab_recordid"));
+                                         model.setAb_recordman(object.getString("ab_recordman"));
+                                         model.setAb_sharestatus(object.getString("ab_sharestatus"));
+                                         model.setAb_starttime(object.getString("ab_starttime"));
+                                         tags.add(Integer.valueOf(model.getAb_starttime().substring(8,10)));
+                                         if (model.getAb_starttime().contains(DateFormatUtil.getStrDate4Date(curDate,"yyyy-MM-dd")))
+                                         {
+                                             mDatas.add(model);
+                                         }
+                                     }
+                                     if (mAdapter!=null){
+                                         mAdapter.notifyDataSetChanged();
+                                     }else{
+                                         mAdapter=new BookAdapter(mContext,mDatas);
+                                         lv_book.setAdapter(mAdapter);
+                                     }
+                                     calendarView.setDecoratDays(tags);
+                                     if (mDatas.size()==0){
+                                         emptyLayout.showEmpty();
+                                     }
+                                 }
+                             }
+                          
+                         } catch (Exception e) {
+                             
+                         }
+                         break;
+                     case Constants.APP_SOCKETIMEOUTEXCEPTION:
+                         String result=msg.getData().getString("result");
+                         ToastMessage(result);
+                         break;
+                 }
+             }
+         };
+
+    @Override
+    public boolean onKeyDown(int keyCode, KeyEvent event) {
+        if ((keyCode == KeyEvent.KEYCODE_BACK)) {
+            Intent it = new Intent(BookingListActivity.this,MainActivity.class);
+           // it.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
+            startActivity(it);
+            overridePendingTransition(R.anim.anim_activity_out, R.anim.anim_activity_in);
+            finish();
+            return super.onKeyDown(keyCode, event);
+        } else {
+            return super.onKeyDown(keyCode, event);
+        }
+
+    }
+}

+ 146 - 0
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/secretary/BookingSetActivity.java

@@ -0,0 +1,146 @@
+package com.xzjmyk.pm.activity.ui.erp.activity.secretary;
+
+import android.content.Context;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.Message;
+import android.view.View;
+import android.widget.Button;
+import android.widget.TextView;
+
+import com.alibaba.fastjson.JSON;
+import com.lidroid.xutils.ViewUtils;
+import com.lidroid.xutils.view.annotation.ViewInject;
+import com.xzjmyk.pm.activity.MyApplication;
+import com.xzjmyk.pm.activity.R;
+import com.xzjmyk.pm.activity.ui.erp.activity.oa.OABaseActivity;
+import com.xzjmyk.pm.activity.ui.erp.net.ViewUtil;
+import com.xzjmyk.pm.activity.ui.erp.presenter.imp.HttpImp;
+import com.xzjmyk.pm.activity.ui.erp.util.CommonUtil;
+import com.xzjmyk.pm.activity.ui.erp.util.Constants;
+import com.xzjmyk.pm.activity.view.wheel.TimePicker;
+
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+/**
+ * @desc:设置时间段
+ * @author:Arison on 2017/6/26
+ */
+public class BookingSetActivity extends OABaseActivity implements HttpImp, View.OnClickListener {
+
+    @ViewInject(R.id.submit_btn)
+    private Button submit_btn;
+    @ViewInject(R.id.tv_endTime)
+    private TextView tv_endTime;
+    @ViewInject(R.id.tv_startTime)
+    private TextView tv_startTime;
+    private final int what_getTime = 0;
+    private final int what_setTime = 1;
+
+    private Handler mHandler = new Handler() {
+        @Override
+        public void handleMessage(Message msg) {
+            switch (msg.what) {
+                case what_getTime:
+                 //{"endtime":"23:59","starttime":"00:00"}
+                    String result;
+                    try {
+                        result = msg.getData().getString("result");
+                        String starttime=JSON.parseObject(result).getString("starttime");
+                        String endtime=JSON.parseObject(result).getString("endtime");
+                        tv_startTime.setText(starttime);
+                        tv_endTime.setText(endtime);
+                    } finally {
+                        
+                    }
+                    break;
+                case what_setTime:
+                    try {
+                       result=msg.getData().getString("result");
+                        if ("true".equals(JSON.parseObject(result).getString("result"))){
+                            ToastMessage(getString(R.string.save_ok));
+                        }
+                    } catch (Exception e) {
+                        
+                    }
+                    break;
+            }
+        }
+    };
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.activity_booking_set);
+        ViewUtils.inject(this);
+        getSupportActionBar().setTitle(getString(R.string.booking_time_set));
+        tv_startTime.setOnClickListener(this);
+        tv_endTime.setOnClickListener(this);
+        submit_btn.setOnClickListener(this);
+        initData();
+    }
+
+
+    protected void initData() {
+        getBookingTime();
+    }
+
+    @Override
+    public void onClick(View v) {
+        switch (v.getId()) {
+            case R.id.submit_btn:
+                setBookingTime();
+                break;
+            case R.id.tv_startTime:
+                showDateDialog(mContext, tv_startTime, 01, 00);
+                break;
+            case R.id.tv_endTime:
+                showDateDialog(mContext, tv_endTime, 23, 59);
+                break;
+        }
+    }
+
+
+    private void showDateDialog(Context ct, final TextView tv, int hh, int minth) {
+        TimePicker picker = new TimePicker(this, TimePicker.HOUR_OF_DAY);
+        picker.setSelectedItem(hh, minth);
+        picker.setOnTimePickListener(new TimePicker.OnTimePickListener() {
+            @Override
+            public void onTimePicked(String hour, String minute) {
+                String time = hour + ":" + minute;
+                tv.setText(time);
+            }
+        });
+        picker.show();
+    }
+
+
+    public void getBookingTime() {
+        String url = Constants.IM_BASE_URL + "user/appUsertime";
+        Map<String, Object> params = new HashMap<>();
+        params.put("token", MyApplication.getInstance().mAccessToken);
+        params.put("userid", MyApplication.getInstance().mLoginUser.getUserId());
+        LinkedHashMap<String, Object> headers = new LinkedHashMap<>();
+        headers.put("Cookie", "JSESSIONID=" + CommonUtil.getSharedPreferences(ct, "sessionId"));
+        ViewUtil.httpSendRequest(ct, url, params, mHandler, headers, what_getTime, null, null, "post");
+    }
+
+    public void setBookingTime() {
+        String url = Constants.IM_BASE_URL + "user/appTimeSet";
+        Map<String, Object> params = new HashMap<>();
+        MapData data = new MapData();
+        data.setAt_userid(MyApplication.getInstance().mLoginUser.getUserId());
+        data.setAt_username(MyApplication.getInstance().mLoginUser.getNickName());
+        data.setAt_startdate(tv_startTime.getText().toString());
+        data.setAt_enddate(tv_endTime.getText().toString());
+        params.put("token", MyApplication.getInstance().mAccessToken);
+        params.put("map", JSON.toJSONString(data));
+        LinkedHashMap<String, Object> headers = new LinkedHashMap<>();
+        headers.put("Cookie", "JSESSIONID=" + CommonUtil.getSharedPreferences(ct, "sessionId"));
+        ViewUtil.httpSendRequest(ct, url, params, mHandler, headers, what_setTime, null, null, "post");
+    }
+
+
+}

+ 26 - 0
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/secretary/DataState.java

@@ -0,0 +1,26 @@
+package com.xzjmyk.pm.activity.ui.erp.activity.secretary;
+
+/**
+ * Created by Arison on 2017/6/27.
+ */
+
+public class DataState {
+    String value;
+    boolean isClicked;
+
+    public String getValue() {
+        return value;
+    }
+
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    public boolean isClicked() {
+        return isClicked;
+    }
+
+    public void setClicked(boolean clicked) {
+        isClicked = clicked;
+    }
+}

+ 44 - 0
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/secretary/MapData.java

@@ -0,0 +1,44 @@
+package com.xzjmyk.pm.activity.ui.erp.activity.secretary;
+
+/**
+ * Created by Arison on 2017/6/26.
+ */
+
+public class MapData {
+    public  String at_userid;
+    public  String at_username;
+    public  String at_startdate;
+    public  String at_enddate;
+
+    public String getAt_userid() {
+        return at_userid;
+    }
+
+    public void setAt_userid(String at_userid) {
+        this.at_userid = at_userid;
+    }
+
+    public String getAt_username() {
+        return at_username;
+    }
+
+    public void setAt_username(String at_username) {
+        this.at_username = at_username;
+    }
+
+    public String getAt_startdate() {
+        return at_startdate;
+    }
+
+    public void setAt_startdate(String at_startdate) {
+        this.at_startdate = at_startdate;
+    }
+
+    public String getAt_enddate() {
+        return at_enddate;
+    }
+
+    public void setAt_enddate(String at_enddate) {
+        this.at_enddate = at_enddate;
+    }
+}

+ 177 - 10
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/secretary/SelectPContactsActivity.java

@@ -1,7 +1,14 @@
 package com.xzjmyk.pm.activity.ui.erp.activity.secretary;
 
+import android.Manifest;
+import android.content.pm.PackageManager;
 import android.os.Bundle;
+import android.support.annotation.NonNull;
+import android.text.Editable;
+import android.view.View;
+import android.widget.AdapterView;
 import android.widget.CheckBox;
+import android.widget.CompoundButton;
 import android.widget.ListView;
 import android.widget.RelativeLayout;
 import android.widget.TextView;
@@ -13,11 +20,18 @@ import com.xzjmyk.pm.activity.bean.oa.SelectEmUser;
 import com.xzjmyk.pm.activity.sortlist.BaseSortModel;
 import com.xzjmyk.pm.activity.sortlist.SideBar;
 import com.xzjmyk.pm.activity.ui.erp.activity.oa.OABaseActivity;
-import com.xzjmyk.pm.activity.ui.erp.adapter.oa.SelectCollisionAdapter;
+import com.xzjmyk.pm.activity.ui.erp.adapter.oa.SelectPCollisionAdapter;
+import com.xzjmyk.pm.activity.ui.erp.entity.EditChangeListener;
 import com.xzjmyk.pm.activity.ui.erp.entity.SelectCollisionTurnBean;
 import com.xzjmyk.pm.activity.ui.erp.presenter.imp.ISelectActiveView;
+import com.xzjmyk.pm.activity.ui.erp.util.ListUtils;
+import com.xzjmyk.pm.activity.ui.erp.util.LogUtil;
+import com.xzjmyk.pm.activity.ui.erp.util.StringUtils;
+import com.xzjmyk.pm.activity.ui.erp.util.oa.OAConfig;
 import com.xzjmyk.pm.activity.ui.erp.view.EmptyLayout;
 import com.xzjmyk.pm.activity.ui.erp.view.VoiceSearchView;
+import com.xzjmyk.pm.activity.util.PermissionUtil;
+import com.xzjmyk.pm.activity.util.ToastUtil;
 
 import java.util.List;
 
@@ -26,7 +40,7 @@ import java.util.List;
  * 选择手机本地通讯录联系人
  */
 
-public class SelectPContactsActivity extends OABaseActivity implements ISelectActiveView {
+public class SelectPContactsActivity extends OABaseActivity implements ISelectActiveView, SelectPCollisionAdapter.OnStatusClickListener {
 
     @ViewInject(R.id.recyclerview)
     private ListView listView;
@@ -45,13 +59,13 @@ public class SelectPContactsActivity extends OABaseActivity implements ISelectAc
     @ViewInject(R.id.all_sure_cb)
     private CheckBox all_sure_cb;
 
-    private SelectCollisionAdapter adapter;
+    private SelectPCollisionAdapter adapter;
     private SelectPContactsPresenter presenter;
     private int allSelect = 0;
     private boolean isClickCb = true;
     private EmptyLayout emptyLayout;
     private SelectCollisionTurnBean selectBean;
-    
+
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
@@ -61,38 +75,191 @@ public class SelectPContactsActivity extends OABaseActivity implements ISelectAc
         initView();
     }
 
+    @Override
+    protected void onResume() {
+        super.onResume();
+        String[] permissions = {Manifest.permission.READ_CONTACTS};
+        if (PermissionUtil.lacksPermissions(ct, permissions)) {
+            PermissionUtil.requestPermission(this, PermissionUtil.DEFAULT_REQUEST, permissions);
+        } else {
+            presenter.start(selectBean, getType());
+        }
+    }
+
+    @Override
+    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
+        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
+        if (requestCode == PermissionUtil.DEFAULT_REQUEST) {
+            if (grantResults.length != 1 || grantResults[0] != PackageManager.PERMISSION_GRANTED) {
+                //TODO 没有获取到权限
+                LogUtil.i("没有获取到权限");
+                ToastUtil.showToast(ct,R.string.not_system_permission);
+            } else {
+                LogUtil.i("已经用户赋予权限获取到权限");
+                presenter.start(selectBean, getType());
+            }
+        }
+    }
+
+    private int getType() {
+        if (getIntent() != null) {
+            return getIntent().getIntExtra("type", 0);
+        } else {
+            return 0;
+        }
+    }
+
     private void initView() {
-        
+        emptyLayout = new EmptyLayout(ct, listView);
+        emptyLayout.setShowLoadingButton(false);
+        emptyLayout.setShowEmptyButton(false);
+        emptyLayout.setShowErrorButton(false);
+        emptyLayout.setEmptyViewRes(R.layout.view_empty);
+        sidebar.setTextView(text_dialog);
+        presenter = new SelectPContactsPresenter(this);
+        if (getIntent() != null) {
+            selectBean = getIntent().getParcelableExtra(OAConfig.MODEL_DATA);
+            if (selectBean == null) {
+                LogUtil.i("selectBean == null");
+                new NullPointerException("selectBean cannot be Null");
+            } else if (!StringUtils.isEmpty(selectBean.getTitle()))
+                getSupportActionBar().setTitle(selectBean.getTitle());
+            select_rl.setVisibility(selectBean.isSingleAble() ? View.GONE : View.VISIBLE);
+        } else {
+            LogUtil.i("selectBean == null");
+            new NullPointerException("Intent cannot be Null");
+        }
+
+
     }
 
 
     private void initEvent() {
-        
+        voiceSearchView.addTextChangedListener(new EditChangeListener() {
+            @Override
+            public void afterTextChanged(Editable s) {
+                //TODO 搜索
+                presenter.search(s);
+            }
+        });
+        findViewById(R.id.sure_tv).setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View view) {
+                presenter.sure(SelectPContactsActivity.this);
+            }
+        });
+        sidebar.setOnTouchingLetterChangedListener(new SideBar.OnTouchingLetterChangedListener() {
+            @Override
+            public void onTouchingLetterChanged(String s) {
+                // 该字母首次出现的位置
+                if ("↑".equals(s)) {
+                    listView.setSelection(0);
+                    return;
+                }
+                int position = adapter.getPositionForSection(s.charAt(0));
+                if (position != -1) {
+                    listView.setSelection(position);
+                }
+            }
+
+            @Override
+            public void onTouchingUp() {
+            }
+        });
+        all_sure_cb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
+            @Override
+            public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
+                if (isClickCb) {
+                    if (adapter == null) return;
+                    presenter.changeChecked(b, adapter.getListData());
+                    all_sure_cb.setText(b ? R.string.cancel_select_all : R.string.select_all);
+                }
+                isClickCb = true;
+            }
+        });
+        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
+            @Override
+            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
+                if (adapter == null) return;
+                if (selectBean.isSingleAble()) {
+                    if (ListUtils.isEmpty(adapter.getListData()) || position >= adapter.getListData().size()) {
+                        return;
+                    }
+                    presenter.sureSingle(SelectPContactsActivity.this, adapter.getListData().get(position).bean);
+                } else {
+                    boolean isClicked = !adapter.getListData().get(position).isClick();
+                    setSelectNumber(isClicked);
+                    adapter.getListData().get(position).setClick(isClicked);
+                    adapter.notifyDataSetChanged();
+                }
+            }
+        });
     }
 
 
     @Override
     public void addExist(String firstLetter) {
-        
+        sidebar.addExist(firstLetter);
     }
 
     @Override
     public void showModel(List<BaseSortModel<SelectEmUser>> models) {
-
+        adapter = new SelectPCollisionAdapter(models, this);
+        listView.setAdapter(adapter);
+        if (ListUtils.isEmpty(models)) {
+            emptyLayout.showEmpty();
+            sidebar.setVisibility(View.GONE);
+            select_rl.setVisibility(View.GONE);
+        } else {
+            sidebar.setVisibility(View.VISIBLE);
+            if (!selectBean.isSingleAble())
+                select_rl.setVisibility(View.VISIBLE);
+        }
     }
 
     @Override
     public void showNumber(int number) {
-
+        allSelect = number;
+        mumber_tv.setText(getString(R.string.selected) + number + " " + selectBean.getSelectType());
     }
 
     @Override
     public void showSureText(String text) {
-
+        sure_tv.setText(text);
     }
 
     @Override
     public void isAllClicked(boolean clickAll) {
+        if (clickAll) {
+            isClickCb = false;
+            all_sure_cb.setChecked(clickAll);
+        }
+        all_sure_cb.setText(clickAll ? R.string.cancel_select_all : R.string.select_all);
+    }
+
+    /**
+     * 点击后
+     *
+     * @param isClicked 点击后是否为选中状态
+     */
+    private void setSelectNumber(boolean isClicked) {
+        allSelect += isClicked ? 1 : -1;
+        if (allSelect < 0)
+            allSelect = 0;
+        if (!isClicked && all_sure_cb.isChecked()) {
+            isClickCb = false;
+            all_sure_cb.setChecked(false);
+            all_sure_cb.setText(R.string.select_all);
+        } else if (isClicked && !all_sure_cb.isChecked() && !ListUtils.isEmpty(adapter.getListData()) && allSelect == adapter.getListData().size()) {
+            isClickCb = false;
+            all_sure_cb.setChecked(true);
+            all_sure_cb.setText(R.string.cancel_select_all);
+        }
+        mumber_tv.setText(getString(R.string.selected) + allSelect + " " + selectBean.getSelectType());
+    }
 
+    @Override
+    public void onClick(SelectEmUser user, int position, String message) {
+        presenter.onClickStatus(user, position, message);
     }
 }

+ 256 - 60
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/secretary/SelectPContactsPresenter.java

@@ -1,35 +1,48 @@
 package com.xzjmyk.pm.activity.ui.erp.activity.secretary;
 
 import android.content.Intent;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
 import android.text.Editable;
 import android.text.TextUtils;
 import android.util.Log;
 
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.android.volley.AuthFailureError;
+import com.android.volley.Request;
+import com.android.volley.Response;
+import com.android.volley.VolleyError;
+import com.xzjmyk.pm.activity.MyApplication;
 import com.xzjmyk.pm.activity.R;
+import com.xzjmyk.pm.activity.bean.AddAttentionResult;
+import com.xzjmyk.pm.activity.bean.Friend;
 import com.xzjmyk.pm.activity.bean.oa.SelectEmUser;
+import com.xzjmyk.pm.activity.db.dao.FriendDao;
 import com.xzjmyk.pm.activity.sortlist.BaseComparator;
 import com.xzjmyk.pm.activity.sortlist.BaseSortModel;
 import com.xzjmyk.pm.activity.sortlist.PingYinUtil;
 import com.xzjmyk.pm.activity.ui.base.BaseActivity;
-import com.xzjmyk.pm.activity.ui.erp.db.DBManager;
-import com.xzjmyk.pm.activity.ui.erp.entity.EmployeesEntity;
 import com.xzjmyk.pm.activity.ui.erp.entity.SelectCollisionTurnBean;
+import com.xzjmyk.pm.activity.ui.erp.model.contacts.Contacts;
 import com.xzjmyk.pm.activity.ui.erp.presenter.imp.ISelectActiveView;
 import com.xzjmyk.pm.activity.ui.erp.util.CommonUtil;
+import com.xzjmyk.pm.activity.ui.erp.util.ContactsUtils;
+import com.xzjmyk.pm.activity.ui.erp.util.JsonValidator;
 import com.xzjmyk.pm.activity.ui.erp.util.ListUtils;
+import com.xzjmyk.pm.activity.ui.erp.util.LogUtil;
+import com.xzjmyk.pm.activity.ui.erp.util.OACheckUtil;
 import com.xzjmyk.pm.activity.ui.erp.util.StringUtils;
-import com.xzjmyk.pm.activity.ui.erp.util.oa.CommonInterface;
-import com.xzjmyk.pm.activity.ui.erp.util.oa.CompanyHandlerInfoUtil;
 import com.xzjmyk.pm.activity.ui.erp.util.oa.http.OAHttpHelper;
 import com.xzjmyk.pm.activity.ui.tool.ThreadPool;
+import com.xzjmyk.pm.activity.volley.ObjectResult;
+import com.xzjmyk.pm.activity.volley.Result;
+import com.xzjmyk.pm.activity.volley.StringJsonObjectRequest;
 
 import java.util.ArrayList;
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 /**
  * Created by Arison on 2017/6/19.
@@ -41,21 +54,60 @@ public class SelectPContactsPresenter {
     private List<BaseSortModel<SelectEmUser>> allList;
     private BaseComparator<SelectEmUser> mBaseComparator;
     private SelectCollisionTurnBean selectBean;
-    
-    public SelectPContactsPresenter(ISelectActiveView iSelectActiveView){
-        if (iSelectActiveView==null)throw  new NullPointerException("iSelectActiveView is Null");
-        this.iSelectActiveView=iSelectActiveView;
+
+    public SelectPContactsPresenter(ISelectActiveView iSelectActiveView) {
+        if (iSelectActiveView == null) throw new NullPointerException("iSelectActiveView is Null");
+        this.iSelectActiveView = iSelectActiveView;
     }
 
 
-    public void start(SelectCollisionTurnBean selectBean) {
+    public void start(SelectCollisionTurnBean selectBean, int type) {
         if (selectBean == null) {
             new NullPointerException("Intent cannot be Null");
         }
         this.selectBean = selectBean;
         allList = new ArrayList<>();
         mBaseComparator = new BaseComparator<>();
-        initdata();
+        switch (type) {
+            case 0:
+                initdata();
+                break;
+            case 1:
+                //UU好友
+                loadDataForFriend();
+                break;
+        }
+
+    }
+
+    private void loadDataForFriend() {
+        iSelectActiveView.showLoading();
+        ThreadPool.getThreadPool().addTask(new Runnable() {
+            @Override
+            public void run() {
+                String mLoginUserId = MyApplication.getInstance().mLoginUser.getUserId();
+                List<Friend> friends = FriendDao.getInstance().getFriends(mLoginUserId);
+                handlerFriendData(friends);
+            }
+        });
+    }
+
+    private void handlerFriendData(List<Friend> employees) {
+        if (ListUtils.isEmpty(employees)) return;//TODO 请求下来时候数据为空
+        SelectEmUser user = null;
+        List<SelectEmUser> users = new ArrayList<>();
+        for (Friend e : employees) {
+            user = new SelectEmUser();
+            user.setDefaultorid(0);
+            user.setDepart(e.getDepart());
+            user.setEmName(e.getNickName());
+            user.setImId(Integer.valueOf(e.getUserId()));
+            user.setEmCode(e.getEmCode());
+            user.setPosition(e.getPosition());
+            user.setEmId(e.get_id());
+            users.add(user);
+        }
+        setUser2Sort(users, false);
     }
 
     private void initdata() {
@@ -68,9 +120,18 @@ public class SelectPContactsPresenter {
             setUser2Sort(selects, true);
     }
 
+    public void onClickStatus(SelectEmUser user, int position, String message) {
+        LogUtil.i("onClickStatus");
+        if (OACheckUtil.isEmpty(message)) return;
+        if (MyApplication.getInstance().getString(R.string.add).equals(message)) {
+            addUser(user, position);
+        } else if (MyApplication.getInstance().getString(R.string.invite).equals(message)) {
+            invite(user, position);
+        }
+    }
+
     public void changeChecked(boolean b, List<BaseSortModel<SelectEmUser>> listData) {
         if (ListUtils.isEmpty(listData)) {
-            //TODO
         } else {
             for (int i = 0; i < listData.size(); i++) {
                 listData.get(i).setClick(b);
@@ -145,13 +206,16 @@ public class SelectPContactsPresenter {
             @Override
             public void run() {
                 try {
-                    final List<EmployeesEntity> employees = getEmListByDB();
+                    final List<Contacts> contactsList = ContactsUtils.getContacts();
                     OAHttpHelper.getInstance().post(new Runnable() {
                         @Override
                         public void run() {
-                            if (ListUtils.isEmpty(employees))
-                                loadDataByNet();
-                            else handlerLoadData(employees);
+                            ThreadPool.getThreadPool().addTask(new Runnable() {
+                                @Override
+                                public void run() {
+                                    handlerLoadData(contactsList);
+                                }
+                            });
                         }
                     });
                 } catch (Exception e) {
@@ -163,33 +227,6 @@ public class SelectPContactsPresenter {
         });
     }
 
-    private List<EmployeesEntity> getEmListByDB() throws Exception {
-        DBManager manager = new DBManager();
-        String master = CommonUtil.getMaster();
-        List<EmployeesEntity> emList = null;
-        if (!StringUtils.isEmpty(master)) {
-            emList = manager.select_getEmployee(new String[]{master}, "whichsys=?");
-        }
-        manager.closeDB();
-        return emList;
-    }
-
-    private void loadDataByNet() {
-        CommonInterface.getInstance().loadCompanyData(new CommonInterface.OnResultListener() {
-            @Override
-            public void result(@NonNull boolean success, @NonNull int what, @Nullable String message) {
-                try {
-                    if (success) {
-                        JSONObject object = JSON.parseObject(message);
-                        List<EmployeesEntity> employees = CompanyHandlerInfoUtil.getEmployees(object);
-                        handlerLoadData(employees);
-                    } else handerError(message);
-                } catch (Exception e) {
-                    e.printStackTrace();
-                }
-            }
-        });
-    }
 
     private void handerError(String message) {
         iSelectActiveView.dimssLoading();
@@ -197,26 +234,28 @@ public class SelectPContactsPresenter {
             iSelectActiveView.showToast(message, R.color.load_warning);
     }
 
-    private void handlerLoadData(List<EmployeesEntity> employees) {
+    private void handlerLoadData(List<Contacts> employees) {
         if (ListUtils.isEmpty(employees)) return;//TODO 请求下来时候数据为空
         SelectEmUser user = null;
         List<SelectEmUser> users = new ArrayList<>();
-        for (EmployeesEntity e : employees) {
+        for (Contacts e : employees) {
             user = new SelectEmUser();
-            user.setDefaultorid(e.getEm_defaultorid());
-            user.setDepart(e.getEM_DEPART());
-            user.setEmName(e.getEM_NAME());
-            user.setImId(e.getEm_IMID());
-            user.setEmCode(e.getEM_CODE());
-            user.setPosition(e.getEM_POSITION());
-            user.setEmId(e.getEM_ID());
+            user.setDefaultorid(0);
+            user.setDepart("");
+            user.setEmName(e.getName());
+            user.setImId(0);
+            user.setEmCode("");
+            user.setPosition(e.getPhone() != null ? e.getPhone() : "");
+            user.setEmId(0);
             users.add(user);
         }
         setUser2Sort(users, false);
     }
 
+    int numSelect;
+
     private void setUser2Sort(List<SelectEmUser> list, boolean isClickAll) {
-        int numSelect = 0;
+        numSelect = 0;
         for (SelectEmUser e : list) {
             BaseSortModel<SelectEmUser> mode = new BaseSortModel<>();
             if (isSelected(isClickAll, selectBean.getSelectCode(), e.getEmCode())) {
@@ -231,15 +270,17 @@ public class SelectPContactsPresenter {
             allList.add(mode);
         }
         Collections.sort(allList, mBaseComparator);
-        //计算全部数据完成
-        iSelectActiveView.dimssLoading();
-        iSelectActiveView.showNumber(numSelect);
-        iSelectActiveView.isAllClicked(numSelect == allList.size());
-        iSelectActiveView.showModel(allList);
+        OAHttpHelper.getInstance().post(new Runnable() {
+            @Override
+            public void run() {
+                appMobileContact(allList);
+            }
+        });
+
     }
 
     private boolean isSelected(boolean isClickAll, String SelectCode, String emCode) {
-        return !isClickAll && !StringUtils.isEmpty(SelectCode) && StringUtils.isInclude(SelectCode , emCode);
+        return !isClickAll && !StringUtils.isEmpty(SelectCode) && StringUtils.isInclude(SelectCode, emCode);
     }
 
     /**
@@ -276,6 +317,161 @@ public class SelectPContactsPresenter {
         return StringUtils.isEmpty(str) ? "" : str;
     }
 
+    public void appMobileContact(final List<BaseSortModel<SelectEmUser>> models) {
+        if (ListUtils.isEmpty(models)) return;
+        String myUserId = MyApplication.getInstance().mLoginUser.getUserId();
+        StringBuilder builder = new StringBuilder();
+        for (BaseSortModel<SelectEmUser> u : models) {
+            SelectEmUser user = u.getBean();
+            if (!StringUtils.isEmpty(user.getPosition()))
+                builder.append(user.getPosition().trim().replaceAll(" ", "") + ",");
+        }
+        OACheckUtil.removieLast(builder);
+        HashMap<String, String> params = new HashMap<>();
+        params.put("token", MyApplication.getInstance().mAccessToken);
+        params.put("userid", myUserId);
+        params.put("telephones", builder.toString());
+        LogUtil.i(" mConfig.APP_MOBILE_CONTACT=" + MyApplication.getInstance().getConfig().APP_QUER_YUSER);
+        LogUtil.i("map=" + StringUtils.mapToJsons(params));
+        StringJsonObjectRequest<String> request = new StringJsonObjectRequest<String>(
+                MyApplication.getInstance().getConfig().APP_QUER_YUSER, new Response.ErrorListener() {
+            @Override
+            public void onErrorResponse(VolleyError arg0) {
+//                ToastUtil.showErrorNet(MyApplication.getInstance());
+                showModel(models);
+            }
+        }, new StringJsonObjectRequest.Listener<String>() {
+            @Override
+            public void onResponse(ObjectResult<String> result) {
+                String message = result.toString();
+                if (!OACheckUtil.isEmpty(message)) {
+                    hanlderAppQueryuserInThread(message);
+                }
+            }
+        }, String.class, params);
+        MyApplication.getInstance().getFastVolley().addDefaultRequest("Volley", request);
+    }
+
+    private void hanlderAppQueryuserInThread(String message) {
+        if (new JsonValidator().validate(message)) {
+            JSONObject object = JSON.parseObject(message);
+            String resultData = object.getString("resultData");
+            object = object.parseObject(resultData);
+            String user = object.getString("user");
+            JSONArray array = JSON.parseArray(user);
+            LogUtil.i("array=" + array);
+            if (!ListUtils.isEmpty(array)) {
+                JSONObject o = null;
+                for (int i = 0; i < array.size(); i++) {
+                    o = array.getJSONObject(i);
+                    String telephone = OACheckUtil.getJson2Text(o, "telephone");
+                    String isfriend = OACheckUtil.getJson2Text(o, "isfriend");
+                    int _id = OACheckUtil.getJsonIntager(o, "_id");
+                    for (BaseSortModel<SelectEmUser> baseSortModel : allList) {
+                        if (isSamePerson(baseSortModel.getBean(), telephone)) {
+                            baseSortModel.getBean().setTag(isfriend);
+                            baseSortModel.getBean().setImId(_id);
+                        }
+                    }
+                }
+            }
+        }
+        //计算全部数据完成
+        showModel(allList);
+    }
+
+    private boolean isSamePerson(SelectEmUser user, String telephone) {
+        if (user == null || OACheckUtil.isEmpty(telephone) || OACheckUtil.isEmpty(user.getPosition()))
+            return false;
+        if (user.getPosition().replaceAll(" ", "").equals(telephone))
+            return true;
+        return false;
+    }
+
+    private void showModel(List<BaseSortModel<SelectEmUser>> allList) {
+        iSelectActiveView.dimssLoading();
+        iSelectActiveView.showNumber(numSelect);
+        iSelectActiveView.isAllClicked(numSelect == allList.size());
+        iSelectActiveView.showModel(allList);
+
+    }
+
 
+    //TODO 添加好友
+    private void addUser(final SelectEmUser user, final int position) {
+        LogUtil.i("addUser");
+        if (user == null) {
+            return;
+        }
+        iSelectActiveView.showLoading();
+        HashMap<String, String> params = new HashMap<String, String>();
+        params.put("access_token", MyApplication.getInstance().mAccessToken);
+        params.put("toUserId", String.valueOf(user.getImId()));
+        StringJsonObjectRequest<AddAttentionResult> request = new StringJsonObjectRequest<AddAttentionResult>(
+                MyApplication.getInstance().getConfig().FRIENDS_ATTENTION_ADD, new Response.ErrorListener() {
+            @Override
+            public void onErrorResponse(VolleyError arg0) {
+                iSelectActiveView.dimssLoading();
+            }
+        }, new StringJsonObjectRequest.Listener<AddAttentionResult>() {
+            @Override
+            public void onResponse(ObjectResult<AddAttentionResult> result) {
+                iSelectActiveView.dimssLoading();
+                boolean success = Result.defaultParser(MyApplication.getInstance(), result, true);
+                String message = result.toString();
+                LogUtil.i("success=" + success);
+                LogUtil.i("message=" + message);
+                if (success) {
+                    iSelectActiveView.showToast(R.string.add_attention_succ, R.color.load_submit);
+                    if (ListUtils.getSize(allList) > position && allList.get(position).getBean().getImId() == user.getImId()) {
+                        //进行确认是同一个人,防止线程出现的适配器和管理器数据不同步问题
+                        allList.get(position).getBean().setTag("1");
+                        showModel(allList);
+                    }
+                }
+            }
+        }, AddAttentionResult.class, params);
+        MyApplication.getInstance().getFastVolley().addDefaultRequest("Volley", request);
+    }
+
+    private void invite(SelectEmUser user, int position) {
+        LogUtil.i("invite");
+        final String name = CommonUtil.getName();
+        final String phone = user.getPosition().trim().replaceAll(" ","");
+        if (!com.xzjmyk.pm.activity.util.StringUtils.isMobileNumber(phone)) {
+            iSelectActiveView.showToast("选择人员电话号码为空或是格式不正确", R.color.load_submit);
+            return;
+        }
+        StringJsonObjectRequest<AddAttentionResult> request = new StringJsonObjectRequest<AddAttentionResult>(
+                Request.Method.POST, "http://message.ubtob.com/sms/send", new Response.ErrorListener() {
+            @Override
+            public void onErrorResponse(VolleyError arg0) {
+                iSelectActiveView.dimssLoading();
+            }
+        }, new StringJsonObjectRequest.Listener<AddAttentionResult>() {
+            @Override
+            public void onResponse(ObjectResult<AddAttentionResult> result) {
+                String message = result.toString();
+                iSelectActiveView.showToast("短信发送成功", R.color.load_submit);
+                LogUtil.i("message=" + message);
+            }
+        }, AddAttentionResult.class, null) {
+            @Override
+            public byte[] getBody() throws AuthFailureError {
+                String param = "{\"receiver\":\"" + phone + "\",\"params\":[\"" + name + "\"],\"templateId\":\"4b60e18b-de2e-410f-9de1-819265d9e636\"}";
+                LogUtil.i("param=" + param);
+                return param.getBytes();
+            }
+
+            @Override
+            public Map<String, String> getHeaders() {
+                HashMap<String, String> headers = new HashMap<String, String>();
+                headers.put("Accept", "application/json");
+                headers.put("Content-Type", "application/json; charset=UTF-8");
+                return headers;
+            }
+        };
+        MyApplication.getInstance().getFastVolley().addDefaultRequest("Volley", request);
+    }
 
 }

+ 97 - 0
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/adapter/booking/BookAdapter.java

@@ -0,0 +1,97 @@
+package com.xzjmyk.pm.activity.ui.erp.adapter.booking;
+
+import android.content.Context;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.BaseAdapter;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.xzjmyk.pm.activity.R;
+import com.xzjmyk.pm.activity.ui.erp.model.book.BookingModel;
+
+import java.util.ArrayList;
+
+/**
+ * Created by Arison on 2017/6/23.
+ */
+
+public class BookAdapter extends BaseAdapter {
+    
+    private Context ct;
+    private int type=1;
+    private ArrayList<BookingModel> datas=new ArrayList<>();
+    
+    public BookAdapter(Context ct,ArrayList<BookingModel> data){
+        this.ct=ct;
+        this.datas=data;
+    }
+
+    public int getType() {
+        return type;
+    }
+
+    public void setType(int type) {
+        this.type = type;
+    }
+
+    @Override
+    public int getCount() {
+        return datas!=null?datas.size():0;
+    }
+
+    @Override
+    public Object getItem(int position) {
+        return   datas.get(position);
+    }
+
+    @Override
+    public long getItemId(int position) {
+        return position;
+    }
+
+    @Override
+    public View getView(int position, View convertView, ViewGroup parent) {
+        ViewHolder holder = null;
+        if (convertView == null) {
+            holder = new ViewHolder();
+            convertView = LayoutInflater.from(ct).inflate(R.layout.item_booking_list, null);
+            holder.status_img = (ImageView) convertView.findViewById(R.id.status_img);
+            holder.share_img = (ImageView) convertView.findViewById(R.id.iv_share);
+            holder.title_tv = (TextView) convertView.findViewById(R.id.title_tv);
+            holder.status_tv = (TextView) convertView.findViewById(R.id.status_tv);
+            holder.address_tv = (TextView) convertView.findViewById(R.id.address_tv);
+            holder.handler_tv = (TextView) convertView.findViewById(R.id.handler_tv);
+            convertView.setTag(holder);
+        } else {
+            holder = (ViewHolder) convertView.getTag();
+        }
+        try {
+            BookingModel model=datas.get(position);
+            holder.model=model;
+            holder.title_tv.setText(model.getAb_starttime().substring(11,16)+"-"+
+            model.getAb_endtime().substring(11,16));
+            holder.status_tv.setText(model.getAb_confirmstatus());
+            if(model.getAb_confirmstatus().equals("已确认")){
+                holder.share_img.setVisibility(View.VISIBLE);
+            }else{
+                holder.share_img.setVisibility(View.GONE);
+            }
+            if (type==2){
+                holder.handler_tv.setText(model.getAb_recordman()+"-"+model.getAb_bman());
+            }else{
+                holder.handler_tv.setText(model.getAb_bman());
+            }
+         
+        } catch (Exception e) {
+        }
+        return convertView;
+    }
+
+    public class ViewHolder {
+        public ImageView status_img,share_img;
+        public TextView title_tv, status_tv, address_tv, handler_tv;
+        public BookingModel model;
+    }
+}

+ 188 - 0
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/adapter/oa/SelectPCollisionAdapter.java

@@ -0,0 +1,188 @@
+package com.xzjmyk.pm.activity.ui.erp.adapter.oa;
+
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.BaseAdapter;
+import android.widget.CheckBox;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.xzjmyk.pm.activity.MyApplication;
+import com.xzjmyk.pm.activity.R;
+import com.xzjmyk.pm.activity.bean.oa.SelectEmUser;
+import com.xzjmyk.pm.activity.helper.AvatarHelper;
+import com.xzjmyk.pm.activity.sortlist.BaseSortModel;
+import com.xzjmyk.pm.activity.ui.base.BaseActivity;
+import com.xzjmyk.pm.activity.ui.erp.util.ListUtils;
+import com.xzjmyk.pm.activity.ui.erp.util.LogUtil;
+import com.xzjmyk.pm.activity.ui.erp.util.OACheckUtil;
+import com.xzjmyk.pm.activity.ui.erp.util.StringUtils;
+
+import java.util.List;
+
+import static com.xzjmyk.pm.activity.R.id.status_tv;
+
+/**
+ * Created by Bitliker on 2017/2/14.
+ */
+
+public class SelectPCollisionAdapter extends BaseAdapter {
+    private List<BaseSortModel<SelectEmUser>> listData;
+    private BaseActivity act;
+
+    public SelectPCollisionAdapter(List<BaseSortModel<SelectEmUser>> listData, OnStatusClickListener onStatusClickListener) {
+        this.onStatusClickListener = onStatusClickListener;
+        this.listData = listData;
+    }
+
+    public List<BaseSortModel<SelectEmUser>> getListData() {
+        return listData;
+    }
+
+    public void setListData(List<BaseSortModel<SelectEmUser>> listData) {
+        this.listData = listData;
+    }
+
+    @Override
+    public int getCount() {
+        return ListUtils.isEmpty(listData) ? 0 : listData.size();
+    }
+
+    @Override
+    public Object getItem(int position) {
+        return listData.get(position);
+    }
+
+    @Override
+    public long getItemId(int position) {
+        return position;
+    }
+
+    @Override
+    public View getView(int position, View convertView, ViewGroup parent) {
+        ViewHolder holder = null;
+        if (convertView == null) {
+            holder = new ViewHolder();
+            convertView = LayoutInflater.from(MyApplication.getInstance()).
+                    inflate(R.layout.item_select_p_active, parent, false);
+            holder.tag_tv = (TextView) convertView.findViewById(R.id.tag_tv);
+            holder.name_tv = (TextView) convertView.findViewById(R.id.name_tv);
+            holder.sub_tv = (TextView) convertView.findViewById(R.id.sub_tv);
+            holder.status_tv = (TextView) convertView.findViewById(status_tv);
+            holder.cb = (CheckBox) convertView.findViewById(R.id.cb);
+            holder.head_img = (ImageView) convertView.findViewById(R.id.head_img);
+            holder.tag_view = convertView.findViewById(R.id.tag_view);
+            convertView.setTag(holder);
+        } else {
+            holder = (ViewHolder) convertView.getTag();
+        }
+        onBindViewHolder(holder, position);
+        return convertView;
+
+    }
+
+    public void onBindViewHolder(final ViewHolder holder, final int position) {
+        final BaseSortModel<SelectEmUser> model = listData.get(position);
+        // 如果当前位置等于该分类首字母的Char的位置 ,则认为是第一次出现
+        int section = getSectionForPosition(position);
+        if (position == getPositionForSection(section)) {
+            holder.tag_tv.setVisibility(View.VISIBLE);
+            holder.tag_view.setVisibility(View.VISIBLE);
+            holder.tag_tv.setText(model.getFirstLetter());
+        } else {
+            holder.tag_tv.setVisibility(View.GONE);
+            holder.tag_view.setVisibility(View.GONE);
+        }
+        final SelectEmUser user = model.getBean();
+        holder.cb.setChecked(model.isClick());
+        AvatarHelper.getInstance().display(user.getImId() + "", holder.head_img, true, false);//设定为每次刷新都会去删除缓存重新获取数据
+        holder.name_tv.setText(user.getEmName());
+        holder.sub_tv.setText((StringUtils.isEmpty(user.getDepart()) ? "" : (user.getDepart() + ">"))
+                + " " + (StringUtils.isEmpty(user.getPosition()) ? "" : user.getPosition()));
+        int bgRid;
+        int status;
+        int textColor;
+        if (user.getImId() == 0) {//邀请注册
+            status = R.string.invite;
+            bgRid = R.drawable.bg_green_button;
+            textColor = R.color.white;
+        } else if (OACheckUtil.isEmpty(user.getTag()) || "0".equals(user.getTag())) {//添加好友
+            status = R.string.add;
+            bgRid = R.drawable.bg_blue_button;
+            textColor = R.color.white;
+        } else {
+            status = R.string.added;
+            textColor = R.color.text_hine;
+            bgRid = 0;
+        }
+        if (bgRid != 0) {
+            holder.status_tv.setBackgroundResource(bgRid);
+        } else {
+            holder.status_tv.setBackgroundResource(0);
+        }
+        if (status != 0)
+            holder.status_tv.setText(status);
+        if (textColor != 0)
+            holder.status_tv.setTextColor(MyApplication.getInstance().getResources().getColor(textColor));
+
+        holder.status_tv.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                if (v instanceof TextView) {
+                    String message = ((TextView) v).getText().toString();
+                    LogUtil.i("message=" + message);
+                    LogUtil.i("position=" + position);
+                    LogUtil.i("user=" + user.getEmName());
+                    if (onStatusClickListener != null && !OACheckUtil.isEmpty(message) && !message.equals(MyApplication.getInstance().getString(R.string.added))) {
+                        onStatusClickListener.onClick(user, position, message);
+                    }
+                }
+            }
+        });
+        holder.cb.setFocusable(false);
+        holder.cb.setClickable(false);
+    }
+
+    /**
+     * 根据分类的首字母的Char ascii值获取其第一次出现该首字母的位置
+     */
+    public int getPositionForSection(int section) {
+        for (int i = 0; i < listData.size(); i++) {
+            String sortStr = listData.get(i).getFirstLetter();
+            char firstChar = sortStr.toUpperCase().charAt(0);
+            if (firstChar == section) {
+                return i;
+            }
+        }
+        return -1;
+    }
+
+    /**
+     * 根据ListView的当前位置获取分类的首字母的Char ascii值
+     */
+    public int getSectionForPosition(int position) {
+        return listData.get(position).getFirstLetter().charAt(0);
+    }
+
+
+    class ViewHolder {
+        TextView tag_tv,
+                name_tv,
+                sub_tv,
+                status_tv;
+        CheckBox cb;
+        ImageView head_img;
+        View tag_view;
+    }
+
+    private OnStatusClickListener onStatusClickListener;
+
+    public void setOnStatusClickListener(OnStatusClickListener onStatusClickListener) {
+        this.onStatusClickListener = onStatusClickListener;
+    }
+
+    public interface OnStatusClickListener {
+        void onClick(SelectEmUser user, int position, String message);
+    }
+}

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

@@ -23,6 +23,7 @@ public class SelectCollisionTurnBean implements Parcelable {
     private int resultCode = 0x20;//返回的code
     private boolean singleAble = false;//是否单选
     private List<SelectEmUser> selectList;
+    
 
     public SelectCollisionTurnBean() {
 

+ 195 - 0
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/model/book/BookingModel.java

@@ -0,0 +1,195 @@
+package com.xzjmyk.pm.activity.ui.erp.model.book;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+
+/**
+ * 预约列表实体类
+ * Created by Arison on 2017/6/27.
+ */
+public class BookingModel implements Parcelable {
+    
+    private String ab_address;
+    private String ab_bman;
+    private String ab_bmanid;
+    private String ab_confirmstatus;
+    private String ab_content;
+    private String ab_endtime;
+    private String ab_id;
+    private String ab_latitude;
+    private String ab_longitude;
+    private String ab_recorddate;
+    private String ab_recordid;
+    private String ab_recordman;
+    private String ab_sharestatus;
+    private String ab_starttime;
+    
+    
+  
+    public void setAb_address(String ab_address) {
+        this.ab_address = ab_address;
+    }
+
+    public String getAb_address() {
+        return ab_address;
+    }
+
+    public void setAb_bman(String ab_bman) {
+        this.ab_bman = ab_bman;
+    }
+
+    public String getAb_bman() {
+        return ab_bman;
+    }
+
+    public void setAb_bmanid(String ab_bmanid) {
+        this.ab_bmanid = ab_bmanid;
+    }
+
+    public String getAb_bmanid() {
+        return ab_bmanid;
+    }
+
+    public void setAb_confirmstatus(String ab_confirmstatus) {
+        this.ab_confirmstatus = ab_confirmstatus;
+    }
+
+    public String getAb_confirmstatus() {
+        return ab_confirmstatus;
+    }
+
+    public void setAb_content(String ab_content) {
+        this.ab_content = ab_content;
+    }
+
+    public String getAb_content() {
+        return ab_content;
+    }
+
+    public void setAb_endtime(String ab_endtime) {
+        this.ab_endtime = ab_endtime;
+    }
+
+    public String getAb_endtime() {
+        return ab_endtime;
+    }
+
+    public void setAb_id(String ab_id) {
+        this.ab_id = ab_id;
+    }
+
+    public String getAb_id() {
+        return ab_id;
+    }
+
+    public void setAb_latitude(String ab_latitude) {
+        this.ab_latitude = ab_latitude;
+    }
+
+    public String getAb_latitude() {
+        return ab_latitude;
+    }
+
+    public void setAb_longitude(String ab_longitude) {
+        this.ab_longitude = ab_longitude;
+    }
+
+    public String getAb_longitude() {
+        return ab_longitude;
+    }
+
+    public String getAb_recorddate() {
+        return ab_recorddate;
+    }
+
+    public void setAb_recorddate(String ab_recorddate) {
+        this.ab_recorddate = ab_recorddate;
+    }
+
+    public void setAb_recordid(String ab_recordid) {
+        this.ab_recordid = ab_recordid;
+    }
+
+    public String getAb_recordid() {
+        return ab_recordid;
+    }
+
+    public void setAb_recordman(String ab_recordman) {
+        this.ab_recordman = ab_recordman;
+    }
+
+    public String getAb_recordman() {
+        return ab_recordman;
+    }
+
+    public void setAb_sharestatus(String ab_sharestatus) {
+        this.ab_sharestatus = ab_sharestatus;
+    }
+
+    public String getAb_sharestatus() {
+        return ab_sharestatus;
+    }
+
+    public void setAb_starttime(String ab_starttime) {
+        this.ab_starttime = ab_starttime;
+    }
+
+    public String getAb_starttime() {
+        return ab_starttime;
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    @Override
+    public void writeToParcel(Parcel dest, int flags) {
+        dest.writeString(this.ab_address);
+        dest.writeString(this.ab_bman);
+        dest.writeString(this.ab_bmanid);
+        dest.writeString(this.ab_confirmstatus);
+        dest.writeString(this.ab_content);
+        dest.writeString(this.ab_endtime);
+        dest.writeString(this.ab_id);
+        dest.writeString(this.ab_latitude);
+        dest.writeString(this.ab_longitude);
+        dest.writeString(this.ab_recorddate);
+        dest.writeString(this.ab_recordid);
+        dest.writeString(this.ab_recordman);
+        dest.writeString(this.ab_sharestatus);
+        dest.writeString(this.ab_starttime);
+    }
+
+    public BookingModel() {
+    }
+
+    protected BookingModel(Parcel in) {
+        this.ab_address = in.readString();
+        this.ab_bman = in.readString();
+        this.ab_bmanid = in.readString();
+        this.ab_confirmstatus = in.readString();
+        this.ab_content = in.readString();
+        this.ab_endtime = in.readString();
+        this.ab_id = in.readString();
+        this.ab_latitude = in.readString();
+        this.ab_longitude = in.readString();
+        this.ab_recorddate = in.readString();
+        this.ab_recordid = in.readString();
+        this.ab_recordman = in.readString();
+        this.ab_sharestatus = in.readString();
+        this.ab_starttime = in.readString();
+    }
+
+    public static final Creator<BookingModel> CREATOR = new Creator<BookingModel>() {
+        @Override
+        public BookingModel createFromParcel(Parcel source) {
+            return new BookingModel(source);
+        }
+
+        @Override
+        public BookingModel[] newArray(int size) {
+            return new BookingModel[size];
+        }
+    };
+}

+ 139 - 0
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/model/contacts/Contacts.java

@@ -0,0 +1,139 @@
+package com.xzjmyk.pm.activity.ui.erp.model.contacts;
+
+/**
+ * Created by Arison on 2017/6/19.
+ */
+
+import android.os.Parcel;
+import android.os.Parcelable;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author Administrator
+ * @功能:联系人
+ */
+public class Contacts implements Parcelable {
+    public int id;
+    public int rawid;
+    public String name = "未填写";//姓名
+    public String nickname;//昵称
+    public String phone;
+    public List<String> phones = new ArrayList<>();//多个手机人号码
+    public String phoneAddress;
+    public boolean ischecked;
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getNickname() {
+        return nickname;
+    }
+
+    public void setNickname(String nickname) {
+        this.nickname = nickname;
+    }
+
+    public String getPhone() {
+        return phone;
+    }
+
+    public void setPhone(String phone) {
+        this.phone = phone;
+    }
+
+    public String getPhoneAddress() {
+        return phoneAddress;
+    }
+
+    public void setPhoneAddress(String phoneAddress) {
+        this.phoneAddress = phoneAddress;
+    }
+
+    public List<String> getPhones() {
+        return phones;
+    }
+
+    public void setPhones(List<String> phones) {
+        this.phones = phones;
+    }
+
+    public int getId() {
+        return id;
+    }
+
+    public void setId(int id) {
+        this.id = id;
+    }
+
+    public int getRawid() {
+        return rawid;
+    }
+
+    public void setRawid(int rawid) {
+        this.rawid = rawid;
+    }
+
+    public boolean isIschecked() {
+        return ischecked;
+    }
+
+    public void setIschecked(boolean ischecked) {
+        this.ischecked = ischecked;
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    public Contacts() {
+
+    }
+
+    @Override
+    public void writeToParcel(Parcel dest, int flags) {
+        /*将Person的成员写入Parcel, 
+         * 注:Parcel中的数据是按顺序写入和读取的,即先被写入的就会先被读取出来 
+         */
+        dest.writeInt(id);
+        dest.writeInt(rawid);
+        dest.writeString(name);
+        dest.writeString(phone);
+        dest.writeString(nickname);
+        //dest.writeStringList(phones); //报错 
+        dest.writeString(phoneAddress);
+        dest.writeByte((byte) (ischecked ? 1 : 0));
+    }
+
+    //该静态域是必须要有的,而且名字必须是CREATOR,否则会出错  
+    public static final Parcelable.Creator<Contacts> CREATOR =
+            new Parcelable.Creator<Contacts>() {
+
+                @Override
+                public Contacts createFromParcel(Parcel source) {
+                    //从Parcel读取通过writeToParcel方法写入的Person的相关成员信息  
+                    Contacts contacts = new Contacts();
+                    contacts.id = source.readInt();
+                    contacts.rawid = source.readInt();
+                    contacts.name = source.readString();
+                    contacts.phone = source.readString();
+                    contacts.nickname = source.readString();
+                    //contacts.phones=source.readStringList();
+                    contacts.phoneAddress = source.readString();
+                    contacts.ischecked = source.readByte() != 0;
+                    return contacts;
+                }
+
+                @Override
+                public Contacts[] newArray(int size) {
+                    return new Contacts[size];
+                }
+            };
+}

+ 24 - 0
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/net/HttpUtil.java

@@ -2,7 +2,9 @@ package com.xzjmyk.pm.activity.ui.erp.net;
 
 import android.util.Log;
 
+import com.xzjmyk.pm.activity.ui.erp.util.LogUtil;
 import com.xzjmyk.pm.activity.ui.erp.util.ObjectUtils;
+import com.xzjmyk.pm.activity.ui.erp.util.StringUtils;
 import com.xzjmyk.pm.activity.ui.erp.util.hmac.HmacUtils;
 
 import org.apache.http.HttpResponse;
@@ -14,6 +16,7 @@ import org.apache.http.conn.ssl.AllowAllHostnameVerifier;
 import org.apache.http.conn.ssl.SSLSocketFactory;
 import org.apache.http.entity.StringEntity;
 import org.apache.http.impl.client.DefaultHttpClient;
+import org.apache.http.message.BasicHeader;
 import org.apache.http.message.BasicNameValuePair;
 import org.apache.http.protocol.HTTP;
 
@@ -39,6 +42,8 @@ import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Set;
 
+import static com.loopj.android.http.RequestParams.APPLICATION_JSON;
+
 
 /**
  * @author :Administrator   2015年12月16日 上午11:09:31
@@ -99,6 +104,11 @@ public class HttpUtil {
             Map<String, Object> params,
             LinkedHashMap<String, Object> headers,
             boolean sign) throws Exception {
+        if (url.contains("sms/send")) {
+            return httpPostWithJSON(url, StringUtils.mapToJson(params));
+
+        }
+
         SSLSocketFactory.getSocketFactory().setHostnameVerifier(new AllowAllHostnameVerifier());
         DefaultHttpClient httpClient = MyHttpClient.getNewHttpClient();
         HttpResponse response = null;
@@ -134,6 +144,20 @@ public class HttpUtil {
         }
     }
 
+    public static Response httpPostWithJSON(String url, String json) throws Exception {
+        // 将JSON进行UTF-8编码,以便传输中文
+        String encoderJson = URLEncoder.encode(json, HTTP.UTF_8);
+        LogUtil.i("json=" + json);
+        DefaultHttpClient httpClient = new DefaultHttpClient();
+        HttpPost httpPost = new HttpPost(url);
+        httpPost.addHeader(HTTP.CONTENT_TYPE, APPLICATION_JSON);
+        StringEntity se = new StringEntity(encoderJson);
+//        se.setContentType(HTTP.CONTENT_TYPE_TEXT_JSON);
+        se.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, APPLICATION_JSON));
+        httpPost.setEntity(se);
+        HttpResponse response = httpClient.execute(httpPost);
+        return Response.getResponse(response);
+    }
 
     public static Response sendPostRequest(
             String url,

+ 16 - 0
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/presenter/MessagePresenter.java

@@ -64,6 +64,7 @@ public class MessagePresenter implements OnHttpResultListener {
     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;//小秘书红点
     public static final String AUTO_SIGIN_ALART = "AUTO_SIGIN_ALART";
 
     private String SUB_READ_TIME;//订阅好点击阅读时间
@@ -266,6 +267,21 @@ public class MessagePresenter implements OnHttpResultListener {
         OAHttpHelper.getInstance().requestHttp(request, this);
     }
 
+    
+    private void loadBookingNewNum(){
+        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);
+    }
 
     @Override
     public void result(int what, boolean isJSON, String message, Bundle bundle) {

+ 30 - 0
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/util/CommonUtil.java

@@ -637,6 +637,12 @@ public class CommonUtil {
         return dateString;
     }
 
+    public static String getStringDate(Long date,String dateFormat) {
+        SimpleDateFormat formatter = new SimpleDateFormat(dateFormat);
+        String dateString = formatter.format(date);
+        return dateString;
+    }
+
     /**
      * @author Administrator
      * @功能:判断sd卡的存在
@@ -1285,6 +1291,30 @@ public class CommonUtil {
         }
     }
 
+    /**
+     * 弹出选择时间框,并显示在指定TextView上
+     *
+     * @param context
+     * @param textView
+     */
+    public static void showDataPickDialog(Context context, final TextView textView, final String dateFormat) {
+        if (datePickDialog == null) {
+            datePickDialog = new DateTimePickerDialog(context, System.currentTimeMillis());
+        }
+
+        datePickDialog.setOnDateTimeSetListener(new DateTimePickerDialog.OnDateTimeSetListener() {
+            public void OnDateTimeSet(AlertDialog dia, long date) {
+                textView.setText(CommonUtil.getStringDate(date,dateFormat));
+                /** @注释:保证 初始化当前时间 */
+                datePickDialog = null;
+            }
+        });
+
+        if (!datePickDialog.isShowing()) {
+            datePickDialog.show();
+        }
+    }
+
     /**
      * 去除集合中相同元素
      *

+ 3 - 0
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/util/Constants.java

@@ -278,6 +278,8 @@ public class Constants {
         String baseUrl = CommonUtil.getSharedPreferences(ct, "erp_baseurl");
         return baseUrl;
     }
+    
+    public static String IM_BASE_URL="http://113.105.74.140:8092/";
 
     /**
      * @desc:常量
@@ -314,6 +316,7 @@ public class Constants {
     public final static String SET_SIGN_AUTO="set_sign_auto";
     public final static String SET_SIGN_IN="set_sign_in";
     public final static String SET_SIGN_LANGUAGE="set_sign_language";
+    public final static String SET_BOOKING_TIME="set_booking_time";
     
 
     public final static String NEW_FUNCTION_NOTICE = "NEWFUNCTIONNOTICE";

+ 101 - 0
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/util/ContactsUtils.java

@@ -0,0 +1,101 @@
+package com.xzjmyk.pm.activity.ui.erp.util;
+
+import android.content.ContentResolver;
+import android.database.Cursor;
+import android.provider.ContactsContract;
+import android.util.Log;
+
+import com.alibaba.fastjson.JSON;
+import com.xzjmyk.pm.activity.MyApplication;
+import com.xzjmyk.pm.activity.ui.erp.model.contacts.Contacts;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 处理本地通讯录工具类
+ * Created by Arison on 2017/6/19.
+ */
+
+public class ContactsUtils {
+
+    //查询所有联系人  
+   
+    public static List<Contacts> getContacts() {
+        List<Contacts> contacts = new ArrayList<>();
+        ContentResolver resolver = MyApplication.getInstance().getContentResolver();
+        Cursor idCursor = resolver.query(
+                ContactsContract.Contacts.CONTENT_URI,
+                new String[]{
+                        android.provider.ContactsContract.Contacts._ID
+                },
+                null, null, null);
+        while (idCursor.moveToNext()) { //空指针
+            Contacts contact = new Contacts();
+            //获取到raw_contacts表中的id  
+            int id = idCursor.getInt(0);
+            String idstr = idCursor.getString(idCursor.getColumnIndex(android.provider.ContactsContract.Contacts._ID));
+            contact.setId(id);
+            //根据获取到的ID查询data表中的数据  
+            //Uri  uri = Uri.parse("content://com.android.contacts/contacts/" + id + "/data");
+            Cursor dataCursor = resolver.query(
+                    android.provider.ContactsContract.Data.CONTENT_URI,
+//                    new String[]{
+//                            android.provider.ContactsContract.Data.DATA1,
+//                            android.provider.ContactsContract.Data.MIMETYPE,
+//                            android.provider.ContactsContract.Data.RAW_CONTACT_ID}
+                           null ,
+                    android.provider.ContactsContract.Data.CONTACT_ID + "=" + idstr,
+                    null, null);
+            while (dataCursor.moveToNext()) {
+                Log.i("rawid", "-------------\n");
+                String data = dataCursor.getString(dataCursor.getColumnIndex(android.provider.ContactsContract.Data.DATA1));
+                String mimetype = dataCursor.getString(
+                        dataCursor.getColumnIndex(android.provider.ContactsContract.Data.MIMETYPE));
+                int rawid = dataCursor.getInt(2);
+                contact.setRawid(rawid);
+                Log.i("rawid", "某联系人下:" + rawid + "");
+                if (mimetype.contains("/name")) {
+                    contact.setName(data);
+                }
+                if (mimetype.equals(ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)){
+                    int phoneType = dataCursor.getInt(dataCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE));
+                    contact.getPhones().add(data);
+                    //手机号
+                    if(phoneType == ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE){
+                        String mobile = dataCursor.getString(dataCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
+                        contact.setPhone(mobile);
+                    }
+                    //住宅
+                    if(phoneType == ContactsContract.CommonDataKinds.Phone.TYPE_HOME){
+                        if (StringUtils.isEmpty(contact.getPhone())){
+                            String mobile = dataCursor.getString(dataCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
+                            contact.setPhone(mobile);
+                        }
+                    }
+                    //单位
+                    if(phoneType == ContactsContract.CommonDataKinds.Phone.TYPE_WORK){
+                        if (StringUtils.isEmpty(contact.getPhone())){
+                            String mobile = dataCursor.getString(dataCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
+                            contact.setPhone(mobile);
+                        }
+                    }
+                    //其它
+                    if (StringUtils.isEmpty(contact.getPhone())){
+                        //String mobile = dataCursor.getString(dataCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.number));
+                        contact.setPhone(data);
+                    }
+                }
+                 if (mimetype.contains("/nickname")) {
+                    contact.setNickname(data);
+                }
+            
+            }
+            contacts.add(contact);
+            dataCursor.close();
+        }
+        idCursor.close();
+        LogUtil.prinlnLongMsg("Test", JSON.toJSONString(contacts));
+        return contacts;
+    }
+}

+ 1 - 1
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/util/OACheckUtil.java

@@ -39,7 +39,7 @@ public class OACheckUtil {
         return "";
     }
 
-    private static String replaceAll(String message) {
+    public static String replaceAll(String message) {
         boolean isfist = false;
         StringBuilder sp = new StringBuilder();
         if (message != null && message.length() > 0)

+ 35 - 0
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/util/StringUtils.java

@@ -330,6 +330,41 @@ public class StringUtils {
         return builder.toString();
     }
 
+    public static String map2Json(Map<String, String> map) {
+        if (map == null) return "";
+        StringBuilder builder = new StringBuilder("{\n");
+        for (Map.Entry<String, String> e : map.entrySet()) {
+            builder.append("\"" + e.getKey() + "\":");
+            if (e.getValue() instanceof String || e.getValue() instanceof CharSequence) {
+                builder.append("\"" + e.getValue() + "\",\n");
+            } else {
+                builder.append(e.getValue() + ",\n");
+            }
+        }
+        builder.deleteCharAt(builder.length() - 1);
+        builder.deleteCharAt(builder.length() - 1);
+        builder.append("\n}");
+        return builder.toString();
+    }
+
+    public static String mapToJsons(Map<String, String> map) {
+        if (map == null) return "";
+        StringBuilder builder = new StringBuilder("{\n");
+        for (Map.Entry<String, String> e : map.entrySet()) {
+            builder.append("\"" + e.getKey() + "\":");
+            if (e.getValue() instanceof String || e.getValue() instanceof CharSequence) {
+                builder.append("\"" + e.getValue() + "\",\n");
+            } else {
+                builder.append(e.getValue() + ",\n");
+            }
+        }
+        builder.deleteCharAt(builder.length() - 1);
+        builder.deleteCharAt(builder.length() - 1);
+        builder.append("\n}");
+        return builder.toString();
+    }
+
+
     public static String mapToJson(List<Map<String, Object>> maps) {
         if (ListUtils.isEmpty(maps)) return "";
         StringBuilder builder = new StringBuilder("[\n");

+ 5 - 0
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/util/oa/http/OAHttpHelper.java

@@ -83,6 +83,11 @@ public class OAHttpHelper extends Handler {
                 LogUtil.d(e.getMessage());
         }
     }
+    
+    
+    private void loadIM(Request request, OnHttpResultListener listener)throws Exception {
+        
+    }
 
     private void loadERP(Request request, OnHttpResultListener listener) throws Exception {
         LinkedHashMap<String, Object> headers = getHeaders(request);

+ 9 - 2
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/view/CustomerScrollView.java

@@ -1,6 +1,7 @@
 package com.xzjmyk.pm.activity.ui.erp.view;
 
 import android.content.Context;
+import android.graphics.Rect;
 import android.os.Handler;
 import android.util.AttributeSet;
 import android.view.MotionEvent;
@@ -19,8 +20,8 @@ public class CustomerScrollView extends ScrollView {
     private boolean handleStop = false;
     private int eachStep = 0;
 
-    private static final int MAX_SCROLL_HEIGHT = 600;// 最大滑动距离
-    private static final float SCROLL_RATIO = 0.4f;// 阻尼系数,越小阻力就越大
+    private static final int MAX_SCROLL_HEIGHT = 300;// 最大滑动距离
+    private static final float SCROLL_RATIO = 0.5f;// 阻尼系数,越小阻力就越大
 
     public CustomerScrollView(Context context) {
         super(context);
@@ -125,4 +126,10 @@ public class CustomerScrollView extends ScrollView {
 
         ;
     };
+
+    //重写ScrollView  
+    @Override
+    protected int computeScrollDeltaToGetChildRectOnScreen(Rect rect) {
+        return 0;
+    }
 }

+ 48 - 23
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/me/SettingActivity.java

@@ -42,17 +42,19 @@ import com.xzjmyk.pm.activity.helper.LoginHelper;
 import com.xzjmyk.pm.activity.sp.UserSp;
 import com.xzjmyk.pm.activity.ui.MainActivity;
 import com.xzjmyk.pm.activity.ui.base.ActionBackActivity;
-import com.xzjmyk.pm.activity.ui.erp.activity.me.FeedbackActivity;
 import com.xzjmyk.pm.activity.ui.erp.activity.oa.FlightsActivity;
 import com.xzjmyk.pm.activity.ui.erp.activity.oa.MissionSetActivity;
 import com.xzjmyk.pm.activity.ui.erp.activity.oa.MyRuleSetActivity;
+import com.xzjmyk.pm.activity.ui.erp.activity.secretary.BookingSetActivity;
+import com.xzjmyk.pm.activity.ui.erp.activity.secretary.SelectPContactsActivity;
 import com.xzjmyk.pm.activity.ui.erp.activity.setting.SelectLanguageActivity;
 import com.xzjmyk.pm.activity.ui.erp.entity.InAndExitTimeEntity;
+import com.xzjmyk.pm.activity.ui.erp.entity.SelectCollisionTurnBean;
 import com.xzjmyk.pm.activity.ui.erp.net.ViewUtil;
 import com.xzjmyk.pm.activity.ui.erp.util.CommonUtil;
 import com.xzjmyk.pm.activity.ui.erp.util.Constants;
+import com.xzjmyk.pm.activity.ui.erp.util.oa.OAConfig;
 import com.xzjmyk.pm.activity.ui.erp.view.SwitchView;
-import com.xzjmyk.pm.activity.ui.tool.WebViewActivity;
 import com.xzjmyk.pm.activity.util.DisplayUtil;
 import com.xzjmyk.pm.activity.util.GetFileSizeUtil;
 import com.xzjmyk.pm.activity.util.PreferenceUtils;
@@ -70,13 +72,13 @@ import java.io.File;
  * 设置
  */
 public class SettingActivity extends ActionBackActivity implements View.OnClickListener {
-    
+
     private Button mExitBtn;
     private TextView mCacheTv;
     @ViewInject(R.id.uas_website_tv)
     private TextView uas_website_tv;
-    
-    
+
+
     @ViewInject(R.id.tv_menu_setting)
     private TextView tv_menu_setting;
 
@@ -96,10 +98,12 @@ public class SettingActivity extends ActionBackActivity implements View.OnClickL
     @ViewInject(R.id.tv_sign_new)
     private TextView tv_sign_new;
     @ViewInject(R.id.tv_language_new)
-    private TextView  tv_language_new;
- 
+    private TextView tv_language_new;
+    @ViewInject(R.id.tv_booking_new)
+    private TextView tv_booking_new;
+
     @ViewInject(R.id.language_us_rl)
-    private RelativeLayout  language_us_rl;
+    private RelativeLayout language_us_rl;
 
     @ViewInject(R.id.uu_step_im)
     private ImageView uu_step_im;
@@ -116,6 +120,9 @@ public class SettingActivity extends ActionBackActivity implements View.OnClickL
     private RelativeLayout speech_recognition_rl;
     @ViewInject(R.id.new_step_rl)
     private RelativeLayout new_step_rl;
+    @ViewInject(R.id.booking_set_rl)
+    private RelativeLayout booking_set_rl;
+
     private ProgressDialog dialog;
     private RelativeLayout share_rl;
     private String newStep_service_name = "com.xzjmyk.pm.newpedo.service.StepService";
@@ -233,21 +240,24 @@ public class SettingActivity extends ActionBackActivity implements View.OnClickL
                 startActivity(new Intent(mContext, NewStepActivity.class));
             }
         });
-        
-       tv_menu_setting.setVisibility(CommonUtil.getSharedPreferencesBoolean(this, Constants.NEW_UURUN, false) ? View.GONE : View.VISIBLE);
-       tv_signauto_new.setVisibility(CommonUtil.getSharedPreferencesBoolean(this, Constants.SET_SIGN_AUTO, false) ? View.GONE : View.VISIBLE);
-       tv_sign_new.setVisibility(CommonUtil.getSharedPreferencesBoolean(this, Constants.SET_SIGN_IN, false) ? View.GONE : View.VISIBLE);
+
+        booking_set_rl.setOnClickListener(this);
+
+        tv_menu_setting.setVisibility(CommonUtil.getSharedPreferencesBoolean(this, Constants.NEW_UURUN, false) ? View.GONE : View.VISIBLE);
+        tv_signauto_new.setVisibility(CommonUtil.getSharedPreferencesBoolean(this, Constants.SET_SIGN_AUTO, false) ? View.GONE : View.VISIBLE);
+        tv_sign_new.setVisibility(CommonUtil.getSharedPreferencesBoolean(this, Constants.SET_SIGN_IN, false) ? View.GONE : View.VISIBLE);
         tv_language_new.setVisibility(CommonUtil.getSharedPreferencesBoolean(this, Constants.SET_SIGN_LANGUAGE, false) ? View.GONE : View.VISIBLE);
-        
-        
+        tv_booking_new.setVisibility(CommonUtil.getSharedPreferencesBoolean(this, Constants.SET_BOOKING_TIME, false) ? View.GONE : View.VISIBLE);
+
+
         speech_recognition_rl.setOnClickListener(this);
         sign_in_rl.setOnClickListener(this);
         sign_out_rl.setOnClickListener(this);
         language_us_rl.setOnClickListener(this);
-        
-        if (ApiUtils.getApiModel() instanceof ApiPlatform){
+
+        if (ApiUtils.getApiModel() instanceof ApiPlatform) {
             language_us_rl.setVisibility(View.GONE);
-        }else{
+        } else {
             language_us_rl.setVisibility(View.VISIBLE);
         }
     }
@@ -311,6 +321,11 @@ public class SettingActivity extends ActionBackActivity implements View.OnClickL
     @Override
     public void onClick(View v) {
         switch (v.getId()) {
+            case R.id.booking_set_rl:
+                startActivity(new Intent(this, BookingSetActivity.class));
+                CommonUtil.setSharedPreferences(this, Constants.SET_BOOKING_TIME, true);
+                tv_booking_new.setVisibility(View.GONE);
+                break;
             case R.id.language_us_rl:
                 startActivity(new Intent(this, SelectLanguageActivity.class));
                 CommonUtil.setSharedPreferences(this, Constants.SET_SIGN_LANGUAGE, true);
@@ -325,7 +340,7 @@ public class SettingActivity extends ActionBackActivity implements View.OnClickL
                 Intent intent = new Intent(mContext, MissionSetActivity.class);
                 intent.putExtra(AppConfig.IS_ADMIN, PreferenceUtils.getBoolean(AppConfig.IS_ADMIN, false));
                 startActivity(intent);
-                CommonUtil.setSharedPreferences(this, Constants.SET_SIGN_AUTO,true);
+                CommonUtil.setSharedPreferences(this, Constants.SET_SIGN_AUTO, true);
                 tv_signauto_new.setVisibility(View.GONE);
                 break;
             case R.id.new_step_rl:
@@ -340,11 +355,21 @@ public class SettingActivity extends ActionBackActivity implements View.OnClickL
                 showclearDialog();
                 break;
             case R.id.use_help_rl: {  // 用户反馈
-                intent = new Intent(mContext, FeedbackActivity.class);
-                intent.putExtra("type", 1);
-                intent.putExtra(WebViewActivity.EXTRA_URL, mConfig.help_url);
-                intent.putExtra(WebViewActivity.EXTRA_TITLE, getString(R.string.use_help));
-                startActivity(intent);
+                //注意权限
+                intent = new Intent(this, SelectPContactsActivity.class);
+                SelectCollisionTurnBean bean = new SelectCollisionTurnBean()
+                        .setTitle(getString(R.string.app_local_contacts))
+                        .setSingleAble(true)
+                        .setSelectCode(null);
+                intent.putExtra(OAConfig.MODEL_DATA, bean);
+                intent.putExtra("type",0);
+                startActivityForResult(intent, 0x01);
+
+//                intent = new Intent(mContext, FeedbackActivity.class);
+//                intent.putExtra("type", 1);
+//                intent.putExtra(WebViewActivity.EXTRA_URL, mConfig.help_url);
+//                intent.putExtra(WebViewActivity.EXTRA_TITLE, getString(R.string.use_help));
+//                startActivity(intent);
             }
             break;
             case R.id.about_us_rl:// 关于我们

+ 28 - 15
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/message/MessageFragment.java

@@ -27,6 +27,7 @@ import com.xzjmyk.pm.activity.ui.base.EasyFragment;
 import com.xzjmyk.pm.activity.ui.erp.activity.TaskActivity;
 import com.xzjmyk.pm.activity.ui.erp.activity.message.ProcessB2BActivity;
 import com.xzjmyk.pm.activity.ui.erp.activity.message.ProcessMsgActivity;
+import com.xzjmyk.pm.activity.ui.erp.activity.secretary.BookingListActivity;
 import com.xzjmyk.pm.activity.ui.erp.adapter.MessageAdapter;
 import com.xzjmyk.pm.activity.ui.erp.entity.EditChangeListener;
 import com.xzjmyk.pm.activity.ui.erp.presenter.MessagePresenter;
@@ -53,7 +54,6 @@ import java.util.List;
 /**
  * Created by Bitliker on 2017/3/1.
  */
-
 public class MessageFragment extends EasyFragment implements IMessageView,   View.OnClickListener {
 
     @ViewInject(R.id.voiceSearchView)
@@ -77,6 +77,23 @@ public class MessageFragment extends EasyFragment implements IMessageView,   Vie
     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;
+
+
     @Override
     public void onAttach(Context context) {
         super.onAttach(context);
@@ -172,14 +189,18 @@ public class MessageFragment extends EasyFragment implements IMessageView,   Vie
         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);//小秘书
+        
         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);//订阅红点
@@ -190,6 +211,7 @@ public class MessageFragment extends EasyFragment implements IMessageView,   Vie
         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.notice_rl).setOnClickListener(this); //新闻通知
@@ -251,7 +273,9 @@ public class MessageFragment extends EasyFragment implements IMessageView,   Vie
     @Override
     public void onClick(View v) {
         switch (v.getId()) {
-
+            case R.id.booking_rl:
+                startActivity(new Intent(mContext,BookingListActivity.class));
+                break;
             case R.id.message_net_set://点击无网络情况
                 startActivity(new Intent(Settings.ACTION_SETTINGS));
                 break;
@@ -325,18 +349,7 @@ public class MessageFragment extends EasyFragment implements IMessageView,   Vie
     }
 
 
-    //头文件处理
-    private TextView schedule_num_tv;//审批流
-    private TextView waitting_work_num_tv;//待办工作
-    private TextView subscribe_num_tv;//我的订阅
-
-    private TextView schedule_content_tv;//审批流
-    private TextView waitting_work_content_tv;//待办工作
-    private TextView subscribe_content_tv;//我的订阅
-
-    private TextView schedule_time_tv;//审批流
-    private TextView waitting_work_time_tv;//待办工作
-    private TextView subscribe_time_tv;//我的订阅
+ 
 
     @Override
     public void updateHeaderView(int postion, int num, String subTitle,String time) {

+ 0 - 1
WeiChat/src/main/java/com/xzjmyk/pm/activity/view/MyListView.java

@@ -22,6 +22,5 @@ public class MyListView extends ListView {
 	public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
 		int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
 		super.onMeasure(widthMeasureSpec, expandSpec);
-//		super.onMeasure(widthMeasureSpec,heightMeasureSpec);
 	}
 }

+ 8 - 4
WeiChat/src/main/java/com/xzjmyk/pm/activity/volley/Result.java

@@ -133,10 +133,14 @@ public class Result {
     }
 
     private static void showResultToast(Context context, Result result) {
-        if (TextUtils.isEmpty(result.resultMsg)) {
-            Toast.makeText(context, context.getString(R.string.data_exception), Toast.LENGTH_SHORT).show();
-        } else {
-            Toast.makeText(context, result.resultMsg, Toast.LENGTH_SHORT).show();
+        try {
+            if (TextUtils.isEmpty(result.resultMsg)) {
+                Toast.makeText(context, context.getString(R.string.data_exception), Toast.LENGTH_SHORT).show();
+            } else {
+                Toast.makeText(context, result.resultMsg, Toast.LENGTH_SHORT).show();
+            }
+        } catch (Exception e) {
+
         }
     }
 

+ 1 - 1
WeiChat/src/main/java/com/xzjmyk/pm/activity/volley/StringJsonObjectRequest.java

@@ -116,7 +116,7 @@ public class StringJsonObjectRequest<T> extends Request<String> {
         if (mGzipEnable) {
             Map<String, String> headers = new HashMap<String, String>();
             headers.put("Charset", "UTF-8");
-            headers.put("Content-Type", "application/x-javascript");
+            headers.put("Content-Type", "application/json");
             headers.put("Accept-Encoding", "gzip,deflate");
             if (mParams != null) {
                 headers.put("Cookie", "JSESSIONID=" + mParams.get("sessionId"));

+ 10 - 0
WeiChat/src/main/res/anim/anim_translate_bookingprogress.xml

@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<translate xmlns:android="http://schemas.android.com/apk/res/android"
+    android:fromXDelta="0"
+    android:toXDelta="40%p"
+    android:fromYDelta="0"
+    android:toYDelta="0"
+    android:duration="2000"
+    android:repeatCount="infinite"
+    android:fillBefore="true">
+</translate>  

BIN
WeiChat/src/main/res/drawable-hdpi/icon_bg_booking_detail.9.png


BIN
WeiChat/src/main/res/drawable-xhdpi/icon_cancle3.png


BIN
WeiChat/src/main/res/drawable-xhdpi/icon_jujue.png


BIN
WeiChat/src/main/res/drawable-xhdpi/icon_jujue1.png


BIN
WeiChat/src/main/res/drawable-xhdpi/icon_queren1.png


BIN
WeiChat/src/main/res/drawable-xhdpi/icon_quxiao3.png


BIN
WeiChat/src/main/res/drawable-xhdpi/icon_send.png


BIN
WeiChat/src/main/res/drawable-xhdpi/icon_weiqueren.png


BIN
WeiChat/src/main/res/drawable-xhdpi/icon_yiqueren.png


BIN
WeiChat/src/main/res/drawable-xxhdpi/icon_bg_booking_detail1.9.png


BIN
WeiChat/src/main/res/drawable-xxhdpi/icon_share_nor.png


BIN
WeiChat/src/main/res/drawable-xxhdpi/icon_yuyue3.png


+ 9 - 0
WeiChat/src/main/res/drawable/bg_button_green_focus.xml

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
+    <item>
+        <shape>
+            <solid android:color="@color/light_green"/>
+            <corners android:radius="5dip"/>
+        </shape>
+    </item>
+</layer-list>

+ 7 - 0
WeiChat/src/main/res/drawable/bg_green_button.xml

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:drawable="@drawable/bg_button_green_focus" android:state_pressed="true"/>
+    <item android:drawable="@drawable/bg_button_green_focus" android:state_enabled="true"/>
+    <item android:drawable="@drawable/bg_button_invalid" android:state_enabled="false"/>
+    <item android:drawable="@drawable/bg_button_normal"/>
+</selector>

+ 2 - 2
WeiChat/src/main/res/layout/act_sale_select_list.xml

@@ -10,6 +10,7 @@
         android:id="@+id/voiceSearchView"
         android:layout_width="match_parent"
         android:layout_height="48dp" />
+
     <View
         android:id="@+id/view_v1"
         android:layout_width="match_parent"
@@ -17,8 +18,7 @@
         android:layout_below="@id/top"
         android:background="#E6E6E6"
         android:divider="@drawable/bg_bar"
-        android:visibility="gone"
-        />
+        android:visibility="gone" />
 
     <com.handmark.pulltorefresh.library.PullToRefreshListView
         android:id="@+id/lv_sale_list"

+ 126 - 0
WeiChat/src/main/res/layout/activity_book_add.xml

@@ -0,0 +1,126 @@
+<?xml version="1.0" encoding="utf-8"?>
+<ScrollView 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:background="@color/hine_bg"
+    tools:context="com.xzjmyk.pm.activity.ui.erp.activity.crm.AddBusinessActivity">
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:background="@color/hine_bg"
+        android:orientation="vertical">
+
+        <RelativeLayout
+            android:id="@+id/rl_object"
+            style="@style/item_menu">
+
+            <TextView
+                style="@style/item_menu_tag"
+                android:gravity="center_vertical"
+                android:text="@string/booking_object" />
+
+            <TextView
+                android:id="@+id/tv_book_object"
+                style="@style/item_menu_input"
+                android:layout_toRightOf="@id/company_tag"
+                android:drawablePadding="6dp"
+                android:drawableRight="@drawable/oa_next"
+                android:hint="@string/common_select" />
+        </RelativeLayout>
+
+        <RelativeLayout
+            android:id="@+id/company_add_rl"
+            style="@style/item_menu">
+
+            <TextView
+
+                style="@style/item_menu_tag"
+                android:gravity="center_vertical"
+                android:text="@string/times"
+                android:textColor="@color/hintColor" />
+
+            <TextView
+                android:id="@+id/tv_book_times"
+                style="@style/item_menu_input"
+                android:layout_toRightOf="@id/company_add_tag"
+                android:drawableRight="@drawable/oa_next"
+                android:textColor="@color/hintColor" />
+        </RelativeLayout>
+
+        <RelativeLayout
+            android:id="@+id/remark_rl"
+            style="@style/item_menu">
+
+            <TextView
+                style="@style/item_menu_tag"
+                android:layout_alignParentLeft="true"
+                android:layout_alignParentStart="true"
+                android:layout_alignParentTop="true"
+                android:gravity="center_vertical"
+                android:text="@string/address" />
+
+            <TextView
+                android:id="@+id/tv_book_address"
+                style="@style/item_menu_input"
+                android:layout_toRightOf="@id/remark_tag"
+                android:drawablePadding="6dp"
+                android:drawableRight="@drawable/oa_next"
+                android:hint="@string/common_select_not_must" />
+        </RelativeLayout>
+
+        <View
+            android:layout_width="match_parent"
+            android:layout_height="30dp" />
+
+
+        <RelativeLayout
+            style="@style/form_relative_customer"
+            android:layout_height="30dp"
+            android:background="@color/white">
+
+            <TextView
+                android:layout_width="wrap_content"
+                android:layout_height="match_parent"
+                android:layout_marginLeft="10dp"
+                android:gravity="center_vertical"
+                android:text="@string/booking_content" />
+        </RelativeLayout>
+
+        <EditText
+            android:id="@+id/et_book_content"
+            android:layout_width="match_parent"
+            android:layout_height="100dp"
+            android:layout_marginBottom="10dp"
+            android:background="@color/white"
+            android:gravity="top"
+            android:hint="@string/common_input"
+            android:paddingLeft="10dp"
+            android:textSize="15sp" />
+
+
+        <RelativeLayout
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:layout_marginBottom="30dp"
+            android:layout_marginTop="60dp">
+
+            <Button
+                android:id="@+id/submit_btn"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_alignParentBottom="true"
+                android:layout_marginBottom="10dp"
+                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" />
+        </RelativeLayout>
+    </LinearLayout>
+
+
+</ScrollView>

+ 198 - 0
WeiChat/src/main/res/layout/activity_booking_detail.xml

@@ -0,0 +1,198 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout  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">
+    <com.xzjmyk.pm.activity.ui.erp.view.CustomerScrollView
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:fillViewport="true"
+        tools:context="com.xzjmyk.pm.activity.ui.erp.activity.secretary.BookingDetailActivity">
+
+        <RelativeLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content">
+
+            <RelativeLayout
+                android:id="@+id/rv_top"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_alignParentTop="true">
+
+                <LinearLayout
+                    android:id="@+id/ll_left"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:orientation="vertical"
+                    android:padding="15dp">
+
+                    <de.hdodenhof.circleimageview.CircleImageView
+                        android:id="@+id/iv_me"
+                        android:layout_width="70dp"
+                        android:layout_height="70dp"
+                        android:src="@drawable/defaultpic" />
+
+                    <TextView
+                        android:id="@+id/tv_me"
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content"
+                        android:gravity="center"
+                        android:padding="5dp"
+                        android:text="@string/me" />
+                </LinearLayout>
+                <!--
+       android:layout_toLeftOf="@+id/ll_right"
+                android:layout_toRightOf="@+id/ll_left"-->
+                <ImageView
+                    android:id="@+id/iv_resultInfo"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_centerInParent="true"
+                    android:layout_toRightOf="@+id/ll_left"
+                    android:layout_toLeftOf="@+id/ll_right"
+                    android:scaleType="fitStart"
+                    android:src="@drawable/icon_send" />
+
+                <LinearLayout
+                    android:id="@+id/ll_right"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_alignParentRight="true"
+                    android:orientation="vertical"
+                    android:padding="15dp">
+
+                    <de.hdodenhof.circleimageview.CircleImageView
+                        android:id="@+id/iv_target"
+                        android:layout_width="70dp"
+                        android:layout_height="70dp"
+                        android:layout_alignParentTop="true"
+                        android:src="@drawable/defaultpic" />
+
+                    <TextView
+                        android:id="@+id/tv_target"
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content"
+                        android:gravity="center"
+                        android:padding="5dp"
+                        android:text="@string/me" />
+                </LinearLayout>
+
+            </RelativeLayout>
+
+
+            <LinearLayout
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_below="@+id/rv_top"
+                android:layout_margin="15dp"
+                android:background="@drawable/icon_bg_booking_detail1"
+                android:orientation="vertical">
+
+                <LinearLayout
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:orientation="horizontal"
+                    android:padding="7dp">
+
+                    <TextView
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:layout_marginLeft="20dp"
+                        android:text="@string/booking_time" />
+
+                    <TextView
+                        android:id="@+id/tv_time"
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:layout_marginLeft="10dp"
+                        android:text="***************"
+                        android:textColor="@color/black" />
+                </LinearLayout>
+
+                <LinearLayout
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:orientation="horizontal"
+                    android:padding="7dp">
+
+                    <TextView
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:layout_marginLeft="20dp"
+                        android:text="@string/booking_address" />
+
+                    <TextView
+                        android:id="@+id/tv_address"
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:layout_marginLeft="10dp"
+                        android:text="*****************"
+                        android:textColor="@color/black" />
+                </LinearLayout>
+
+                <LinearLayout
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:orientation="horizontal"
+                    android:padding="7dp">
+
+                    <TextView
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:layout_marginLeft="20dp"
+                        android:text="@string/booking_content" />
+
+                    <TextView
+                        android:id="@+id/tv_content"
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:layout_marginLeft="10dp"
+                        android:text="###########################################
+###########################################################################"
+                        android:textColor="@color/black" />
+                </LinearLayout>
+
+                <ImageView
+                    android:id="@+id/iv_result"
+                    android:layout_width="70dp"
+                    android:layout_height="70dp"
+                    android:layout_margin="10dp"
+                    android:layout_gravity="right"
+                    android:src="@drawable/icon_jujue1" />
+            </LinearLayout>
+
+     
+
+
+        </RelativeLayout>
+    </com.xzjmyk.pm.activity.ui.erp.view.CustomerScrollView>
+    <LinearLayout
+        android:id="@+id/ll_bottom"
+        android:layout_width="match_parent"
+        android:layout_height="50dp"
+        android:layout_alignParentBottom="true"
+        android:orientation="horizontal"
+        android:weightSum="2">
+
+        <Button
+            android:id="@+id/bt_change"
+            android:layout_width="0dp"
+            android:layout_height="match_parent"
+            android:layout_weight="1"
+            android:background="@drawable/select_weixin_list_item"
+            android:text="@string/booking_change" />
+
+        <View style="@style/app_line_v_1dp"></View>
+
+        <Button
+            android:id="@+id/bt_cancle"
+            android:layout_width="0dp"
+            android:layout_height="match_parent"
+            android:layout_alignParentEnd="true"
+            android:layout_alignParentRight="true"
+            android:layout_alignTop="@+id/linearLayout"
+            android:layout_weight="1"
+            android:background="@drawable/select_weixin_list_item"
+            android:text="@string/cancel" />
+    </LinearLayout>
+</RelativeLayout>

+ 89 - 0
WeiChat/src/main/res/layout/activity_booking_list.xml

@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="utf-8"?>
+<com.xzjmyk.pm.activity.ui.erp.view.CustomerScrollView xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:id="@+id/sv_top"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:fillViewport="true"
+    android:descendantFocusability="blocksDescendants"
+    tools:context="com.xzjmyk.pm.activity.ui.erp.activity.secretary.BookingListActivity">
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:orientation="vertical">
+        <!--top layout-->
+        <LinearLayout
+            style="@style/crm_ll_card"
+            android:layout_height="wrap_content"
+            android:orientation="horizontal"
+            android:weightSum="2">
+
+            <TextView
+                android:id="@+id/tv_book_me"
+                style="@style/TextView_Basic"
+                android:layout_weight="1"
+                android:background="@drawable/shape_brounds_bottom"
+                android:gravity="center"
+                android:padding="10dp"
+                android:text="@string/booking_me" />
+
+            <View style="@style/app_line_v_1dp" />
+
+            <TextView
+                android:id="@+id/tv_book_shared"
+                style="@style/TextView_Basic"
+                android:layout_weight="1"
+                android:background="@drawable/shape_brounds_bottom"
+                android:gravity="center"
+                android:padding="10dp"
+                android:text="@string/booking_shared" />
+        </LinearLayout>
+        <!--年月日布局-->
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="35dp"
+            android:layout_gravity="center_horizontal"
+            android:gravity="center">
+
+            <TextView
+                android:id="@+id/yeas_tv"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:textColor="@color/text_main"
+                android:textSize="@dimen/text_main" />
+
+            <TextView
+                android:id="@+id/day_tv"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:textColor="@color/text_main"
+                android:textSize="@dimen/text_main" />
+
+            <TextView
+                android:id="@+id/week_tv"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginLeft="10dp"
+                android:textColor="@color/text_main"
+                android:textSize="@dimen/text_main" />
+        </LinearLayout>
+
+        <android.support.v4.view.ViewPager
+            android:id="@+id/viewPager"
+            android:layout_width="match_parent"
+            android:layout_height="230dp" />
+
+        <View
+            android:layout_width="match_parent"
+            android:layout_height="2px"
+            android:background="@color/item_line" />
+
+        <com.xzjmyk.pm.activity.view.MyListView
+            android:id="@+id/lv_book"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:divider="@color/item_line"
+            android:dividerHeight="2px" />
+    </LinearLayout>
+</com.xzjmyk.pm.activity.ui.erp.view.CustomerScrollView>

+ 46 - 0
WeiChat/src/main/res/layout/activity_booking_set.xml

@@ -0,0 +1,46 @@
+<?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"
+    tools:context="com.xzjmyk.pm.activity.ui.erp.activity.secretary.BookingSetActivity">
+      <LinearLayout
+          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>  
+    
+    <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>

+ 1 - 0
WeiChat/src/main/res/layout/activity_customer_list.xml

@@ -77,6 +77,7 @@
             android:text="@string/un_deal"
             android:gravity="center"
             android:padding="10dp"
+      
             android:background="@drawable/shape_brounds_bottom"
             style="@style/TextView_Basic"
             android:id="@+id/tv_count_unend" />

+ 36 - 0
WeiChat/src/main/res/layout/activity_setting.xml

@@ -253,6 +253,42 @@
                     android:textColor="@android:color/white"
                     android:textSize="10.0dip" />
             </RelativeLayout>
+            <View
+                android:layout_width="match_parent"
+                android:layout_height="@dimen/line"
+                android:background="@color/item_line" />
+
+            <RelativeLayout
+                android:id="@+id/booking_set_rl"
+                style="@style/IMTbleLine"
+                android:background="@drawable/selector_me_menu_item_bg">
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_centerVertical="true"
+                    android:gravity="center"
+                    android:text="@string/booking_time_set"
+                    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" />
+                <TextView
+                    android:id="@+id/tv_booking_new"
+                    android:layout_width="10dp"
+                    android:layout_height="10dp"
+                    android:layout_alignTop="@+id/tv_oa"
+                    android:layout_centerVertical="true"
+                    android:layout_marginRight="10dp"
+                    android:layout_alignParentRight="true"
+                    android:background="@drawable/hongdian"
+                    android:textColor="@android:color/white"
+                    android:textSize="10.0dip" />
+            </RelativeLayout>
             <!--清除缓存-->
             <View
                 android:layout_width="match_parent"

+ 75 - 0
WeiChat/src/main/res/layout/item_booking_list.xml

@@ -0,0 +1,75 @@
+<?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="wrap_content"
+    android:background="@drawable/selector_oa_itembg"
+    android:descendantFocusability="blocksDescendants"
+    android:padding="10dp">
+
+    <ImageView
+        android:id="@+id/status_img"
+        android:layout_width="50dp"
+        android:layout_height="50dp"
+        android:visibility="gone"
+        android:layout_alignParentRight="true"
+        android:layout_centerVertical="true"
+        android:src="@drawable/oa_doit" />
+
+    <LinearLayout
+        android:id="@+id/title_ll"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:orientation="horizontal">
+
+        <TextView
+            android:id="@+id/title_tv"
+            android:layout_width="0dp"
+            android:layout_height="wrap_content"
+            android:layout_weight="1"
+            android:ellipsize="end"
+            android:lines="1"
+            android:text="*****"
+            android:textColor="@color/text_main"
+            android:textSize="@dimen/text_main" />
+       <ImageView
+           android:id="@+id/iv_share"
+           android:layout_width="wrap_content"
+           android:layout_height="wrap_content" 
+           android:background="@drawable/icon_share_nor"/> 
+        
+        <TextView
+            android:id="@+id/status_tv"
+            android:layout_width="70dp"
+            android:layout_height="match_parent"
+            android:layout_toRightOf="@+id/title_tv"
+            android:textColor="@color/green"
+            android:ellipsize="end"
+            android:text="*****"
+            android:gravity="right"
+            android:lines="1" />
+
+    </LinearLayout>
+
+    <TextView
+        android:id="@+id/address_tv"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_below="@id/title_ll"
+        android:layout_marginRight="70dp"
+        android:visibility="gone"
+        android:layout_marginTop="10dp"
+        android:ellipsize="end"
+        android:text="*****"
+        android:lines="1" />
+
+    <TextView
+        android:id="@+id/handler_tv"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_below="@id/address_tv"
+        android:layout_marginRight="70dp"
+        android:text="*****"
+        android:layout_marginTop="10dp"
+        android:ellipsize="end"
+        android:lines="1" />
+</RelativeLayout>

+ 12 - 3
WeiChat/src/main/res/layout/item_oa_list.xml

@@ -1,7 +1,7 @@
 <?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:layout_height="wrap_content"
     android:background="@drawable/selector_oa_itembg"
     android:descendantFocusability="blocksDescendants"
     android:padding="10dp">
@@ -27,15 +27,22 @@
             android:layout_weight="1"
             android:ellipsize="end"
             android:lines="1"
+            android:text="*****"
             android:textColor="@color/text_main"
             android:textSize="@dimen/text_main" />
-
+       <ImageView
+           android:id="@+id/iv_share"
+           android:layout_width="wrap_content"
+           android:layout_height="wrap_content" 
+           android:background="@drawable/icon_share_nor"/> 
+        
         <TextView
             android:id="@+id/status_tv"
             android:layout_width="70dp"
-            android:layout_height="wrap_content"
+            android:layout_height="match_parent"
             android:layout_toRightOf="@+id/title_tv"
             android:ellipsize="end"
+            android:text="*****"
             android:gravity="right"
             android:lines="1" />
 
@@ -49,6 +56,7 @@
         android:layout_marginRight="70dp"
         android:layout_marginTop="10dp"
         android:ellipsize="end"
+        android:text="*****"
         android:lines="1" />
 
     <TextView
@@ -57,6 +65,7 @@
         android:layout_height="wrap_content"
         android:layout_below="@id/address_tv"
         android:layout_marginRight="70dp"
+        android:text="*****"
         android:layout_marginTop="10dp"
         android:ellipsize="end"
         android:lines="1" />

+ 90 - 0
WeiChat/src/main/res/layout/item_select_p_active.xml

@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+              android:layout_width="match_parent"
+              android:layout_height="wrap_content"
+              android:background="@drawable/selector_me_menu_item_bg"
+              android:orientation="vertical">
+
+
+    <TextView
+        android:id="@+id/tag_tv"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:paddingBottom="5dp"
+        android:paddingLeft="10dp"
+        android:paddingTop="5dp"
+        android:textColor="@color/text_hine"/>
+
+    <View
+        android:id="@+id/tag_view"
+        android:layout_width="match_parent"
+        android:layout_height="2px"
+        android:background="@color/item_line"/>
+
+    <RelativeLayout
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/item_height"
+        android:padding="10dp">
+
+        <CheckBox
+            android:id="@+id/cb"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_centerVertical="true"
+            android:layout_marginRight="8dp"
+            android:button="@drawable/oa_checkbox"
+            android:focusableInTouchMode="false"
+            android:visibility="gone"/>
+
+        <ImageView
+            android:id="@+id/head_img"
+            android:layout_width="40dp"
+            android:layout_height="40dp"
+            android:layout_marginRight="8dp"
+            android:layout_toRightOf="@id/cb"
+            android:padding="5dp"
+            android:src="@drawable/default_ptr_flip"/>
+
+        <TextView
+            android:id="@+id/name_tv"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginBottom="2dp"
+            android:layout_toRightOf="@id/head_img"
+            android:text="陈虎"
+            android:textColor="@color/text_main"
+            android:textSize="15sp"/>
+
+        <TextView
+            android:id="@+id/sub_tv"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_below="@+id/name_tv"
+            android:layout_toEndOf="@+id/head_img"
+            android:layout_toRightOf="@+id/head_img"
+            android:text="优软产品规划部>部长"
+            android:textColor="@color/text_hine"
+            android:textSize="12sp"/>
+
+        <FrameLayout
+            android:layout_width="90dp"
+            android:layout_height="40dp"
+            android:layout_alignParentRight="true"
+            android:layout_alignTop="@+id/name_tv"
+            android:layout_centerVertical="true"
+            android:layout_marginRight="8dp"
+            android:gravity="center"
+            >
+
+            <TextView
+                android:id="@+id/status_tv"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_gravity="center"
+                android:gravity="center"
+                android:padding="5dp"
+                android:text="@string/added"
+                android:textColor="@color/text_hine"/>
+        </FrameLayout>
+    </RelativeLayout>
+</LinearLayout>

+ 204 - 96
WeiChat/src/main/res/layout/new_message_header.xml

@@ -40,7 +40,7 @@
                 android:gravity="center"
                 android:text="999"
                 android:textColor="@android:color/white"
-                android:textSize="10.0dip"
+                android:textSize="10.0dp"
                 android:visibility="gone" />
         </FrameLayout>
 
@@ -55,7 +55,7 @@
 
             <TextView
                 android:id="@+id/schedule_name_tv"
-                android:layout_width="fill_parent"
+                android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:layout_toLeftOf="@+id/schedule_time_tv"
                 android:ellipsize="end"
@@ -74,7 +74,7 @@
 
             <TextView
                 android:id="@+id/schedule_content_tv"
-                android:layout_width="fill_parent"
+                android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:layout_below="@id/schedule_name_tv"
                 android:layout_marginTop="8dp"
@@ -128,9 +128,8 @@
                 android:gravity="center"
                 android:text="999"
                 android:textColor="@android:color/white"
-                android:textSize="10.0dip"
-                android:visibility="gone"
-                />
+                android:textSize="10.0dp"
+                android:visibility="gone" />
         </FrameLayout>
 
         <RelativeLayout
@@ -144,7 +143,7 @@
 
             <TextView
                 android:id="@+id/waitting_work_name_tv"
-                android:layout_width="fill_parent"
+                android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:layout_toLeftOf="@+id/waitting_work_time_tv"
                 android:ellipsize="end"
@@ -163,7 +162,7 @@
 
             <TextView
                 android:id="@+id/waitting_work_content_tv"
-                android:layout_width="fill_parent"
+                android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:layout_alignParentLeft="true"
                 android:layout_alignParentStart="true"
@@ -216,7 +215,7 @@
                 android:background="@drawable/tab_unread_bg"
                 android:gravity="center"
                 android:textColor="@android:color/white"
-                android:textSize="10.0dip"
+                android:textSize="10.0dp"
                 android:visibility="gone" />
         </FrameLayout>
 
@@ -230,46 +229,48 @@
 
             <TextView
                 android:id="@+id/nick_name_tv"
-                android:layout_width="fill_parent"
+                android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:layout_toLeftOf="@+id/time_tv"
                 android:ellipsize="end"
                 android:text="@string/msg_subscribe"
                 android:textColor="@color/text_main"
                 android:textSize="16sp" />
+
             <TextView
                 android:id="@+id/tv_dingyue_desc"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
-                android:text="@string/msg_subscribe_data"
                 android:layout_below="@+id/subscribe_time_tv"
                 android:layout_toLeftOf="@+id/tv_dingYue_num"
-                android:layout_toStartOf="@+id/tv_dingYue_num" />
+                android:layout_toStartOf="@+id/tv_dingYue_num"
+                android:text="@string/msg_subscribe_data" />
+
             <TextView
                 android:id="@+id/tv_dingYue_num"
                 android:layout_width="10dp"
                 android:layout_height="10dp"
-                android:layout_gravity="top|right"
                 android:layout_alignParentRight="true"
+                android:layout_gravity="top|right"
                 android:background="@drawable/hongdian"
                 android:gravity="center"
                 android:text=""
                 android:textColor="@android:color/white"
-                android:textSize="10.0dip"
-                />
+                android:textSize="10.0dp" />
+
             <TextView
                 android:id="@+id/subscribe_time_tv"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
                 android:layout_alignParentRight="true"
                 android:ellipsize="end"
-                android:visibility="gone"
                 android:textColor="@color/text_hine"
-                android:textSize="14sp" />
+                android:textSize="14sp"
+                android:visibility="gone" />
 
             <TextView
                 android:id="@+id/subscribe_content_tv"
-                android:layout_width="fill_parent"
+                android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:layout_below="@id/nick_name_tv"
                 android:layout_marginTop="8dp"
@@ -281,85 +282,192 @@
 
     </RelativeLayout>
 
+    <View
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/line"
+        android:layout_marginLeft="10dp"
+        android:layout_marginRight="10dp"
+        android:background="@color/item_line" />
+
+    <RelativeLayout
+        android:id="@+id/booking_rl"
+        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/head_booking"
+            android:layout_width="57dp"
+            android:layout_height="64dp"
+            android:layout_centerVertical="true">
+
+            <ImageView
+                
+                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_yuyue3" />
+
+            <TextView
+                android:id="@+id/booking_num_tv"
+                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:textColor="@android:color/white"
+                android:textSize="10.0dp"
+                android:visibility="gone" />
+        </FrameLayout>
+
+        <RelativeLayout
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:layout_centerVertical="true"
+            android:layout_marginLeft="3dp"
+            android:layout_toRightOf="@id/head_booking"
+            android:gravity="center_vertical">
+
+            <TextView
+                android:id="@+id/book_name_tv"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_toLeftOf="@+id/time_tv"
+                android:ellipsize="end"
+                android:text="@string/booking_menu"
+                android:textColor="@color/text_main"
+                android:textSize="16sp" />
+
+            <TextView
+                android:id="@+id/tv_book_desc"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_below="@+id/book_time_tv"
+                android:layout_toLeftOf="@+id/tv_book_num"
+                android:layout_toStartOf="@+id/tv_book_num"
+                android:text="@string/msg_subscribe_data" />
+
+            <TextView
+                android:id="@+id/tv_book_num"
+                android:layout_width="10dp"
+                android:layout_height="10dp"
+                android:layout_alignParentRight="true"
+                android:layout_gravity="top|right"
+                android:background="@drawable/hongdian"
+                android:gravity="center"
+                android:text=""
+                android:textColor="@android:color/white"
+                android:textSize="10.0dp" />
+
+            <TextView
+                android:id="@+id/book_time_tv"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_alignParentRight="true"
+                android:ellipsize="end"
+                android:textColor="@color/text_hine"
+                android:textSize="14sp"
+                android:visibility="gone" />
+
+            <TextView
+                android:id="@+id/book_content_tv"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_below="@id/book_name_tv"
+                android:layout_marginTop="8dp"
+                android:ellipsize="end"
+                android:lines="1"
+                android:textColor="@color/text_hine"
+                android:textSize="14sp" />
+        </RelativeLayout>
+
+    </RelativeLayout>
+    <!--<RelativeLayout-->
+    <!--android:id="@+id/notice_rl"-->
+    <!--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">-->
+    <!--&lt;!&ndash;android:background="@color/item_color1"&ndash;&gt;-->
+    <!--<FrameLayout-->
+    <!--android:id="@+id/notice_head_area"-->
+    <!--android:layout_width="57dp"-->
+    <!--android:layout_height="64dp"-->
+    <!--android:layout_centerVertical="true">-->
+
+    <!--<ImageView-->
+    <!--android:id="@+id/notice_avatar_img"-->
+    <!--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/home_image_03_u"/>-->
+
+    <!--<TextView-->
+    <!--android:id="@+id/notice_num_tv"-->
+    <!--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:textColor="@android:color/white"-->
+    <!--android:textSize="10.0dp"-->
+    <!--android:visibility="gone"/>-->
+    <!--</FrameLayout>-->
+
     <!--<RelativeLayout-->
-        <!--android:id="@+id/notice_rl"-->
-        <!--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">-->
-        <!--&lt;!&ndash;android:background="@color/item_color1"&ndash;&gt;-->
-        <!--<FrameLayout-->
-            <!--android:id="@+id/notice_head_area"-->
-            <!--android:layout_width="57dp"-->
-            <!--android:layout_height="64dp"-->
-            <!--android:layout_centerVertical="true">-->
-
-            <!--<ImageView-->
-                <!--android:id="@+id/notice_avatar_img"-->
-                <!--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/home_image_03_u" />-->
-
-            <!--<TextView-->
-                <!--android:id="@+id/notice_num_tv"-->
-                <!--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:textColor="@android:color/white"-->
-                <!--android:textSize="10.0dip"-->
-                <!--android:visibility="gone" />-->
-        <!--</FrameLayout>-->
-
-        <!--<RelativeLayout-->
-            <!--android:id="@+id/notice_content"-->
-            <!--android:layout_width="match_parent"-->
-            <!--android:layout_height="match_parent"-->
-            <!--android:layout_centerVertical="true"-->
-            <!--android:layout_marginLeft="3dp"-->
-            <!--android:layout_toRightOf="@id/notice_head_area"-->
-            <!--android:gravity="center_vertical">-->
-
-            <!--<TextView-->
-                <!--android:id="@+id/notice_name_tv"-->
-                <!--android:layout_width="fill_parent"-->
-                <!--android:layout_height="wrap_content"-->
-                <!--android:layout_toLeftOf="@+id/notice_time_tv"-->
-                <!--android:ellipsize="end"-->
-                <!--android:singleLine="true"-->
-                <!--android:text="新闻通知"-->
-                <!--android:textColor="@color/text_main"-->
-                <!--android:textSize="16sp" />-->
-
-            <!--<TextView-->
-                <!--android:id="@+id/notice_time_tv"-->
-                <!--android:layout_width="wrap_content"-->
-                <!--android:layout_height="wrap_content"-->
-                <!--android:layout_alignParentRight="true"-->
-                <!--android:ellipsize="end"-->
-                <!--android:singleLine="true"-->
-                <!--android:textColor="@color/text_hine"-->
-                <!--android:textSize="14sp" />-->
-
-            <!--<TextView-->
-                <!--android:id="@+id/notice_content_tv"-->
-                <!--android:layout_width="fill_parent"-->
-                <!--android:layout_height="wrap_content"-->
-                <!--android:layout_below="@id/notice_name_tv"-->
-                <!--android:layout_marginTop="8dp"-->
-                <!--android:ellipsize="end"-->
-                <!--android:singleLine="true"-->
-                <!--android:textColor="@color/text_hine"-->
-                <!--android:textSize="14sp" />-->
-        <!--</RelativeLayout>-->
+    <!--android:id="@+id/notice_content"-->
+    <!--android:layout_width="match_parent"-->
+    <!--android:layout_height="match_parent"-->
+    <!--android:layout_centerVertical="true"-->
+    <!--android:layout_marginLeft="3dp"-->
+    <!--android:layout_toRightOf="@id/notice_head_area"-->
+    <!--android:gravity="center_vertical">-->
+
+    <!--<TextView-->
+    <!--android:id="@+id/notice_name_tv"-->
+    <!--android:layout_width="match_parent"-->
+    <!--android:layout_height="wrap_content"-->
+    <!--android:layout_toLeftOf="@+id/notice_time_tv"-->
+    <!--android:ellipsize="end"-->
+    <!--android:singleLine="true"-->
+    <!--android:text="新闻通知"-->
+    <!--android:textColor="@color/text_main"-->
+    <!--android:textSize="16sp"/>-->
+
+    <!--<TextView-->
+    <!--android:id="@+id/notice_time_tv"-->
+    <!--android:layout_width="wrap_content"-->
+    <!--android:layout_height="wrap_content"-->
+    <!--android:layout_alignParentRight="true"-->
+    <!--android:ellipsize="end"-->
+    <!--android:singleLine="true"-->
+    <!--android:textColor="@color/text_hine"-->
+    <!--android:textSize="14sp"/>-->
+
+    <!--<TextView-->
+    <!--android:id="@+id/notice_content_tv"-->
+    <!--android:layout_width="match_parent"-->
+    <!--android:layout_height="wrap_content"-->
+    <!--android:layout_below="@id/notice_name_tv"-->
+    <!--android:layout_marginTop="8dp"-->
+    <!--android:ellipsize="end"-->
+    <!--android:singleLine="true"-->
+    <!--android:textColor="@color/text_hine"-->
+    <!--android:textSize="14sp"/>-->
+    <!--</RelativeLayout>-->
 
     <!--</RelativeLayout>-->
 </LinearLayout>

+ 2 - 1
WeiChat/src/main/res/layout/oa_empty_list.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
-    android:layout_height="wrap_content"
+    android:layout_height="match_parent"
     android:background="#EBE9E9"
     android:orientation="vertical">
 
@@ -13,6 +13,7 @@
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:layout_gravity="center"
+        android:layout_centerInParent="true"
         android:src="@drawable/oa_empty" />
 
 </LinearLayout>

+ 3 - 0
WeiChat/src/main/res/values-en/strings.xml

@@ -1405,6 +1405,9 @@
     <string name = "select_money_type"> Please select the currency </string>
     <string name = "add_cost_details"> Please add consumption details </string>
     <string name="sure_delete_this_details">Are you sure you want to delete the consumption details? </string>
+
+    <!--本地通讯录-->
+    <string name="app_local_contacts">手机通讯录</string>
     <string name = "input_cost_name"> Enter the consumption detail name </string>
     <string name = "add_cost_details1"> add a consumption detail </string>
     <string name="invoice">Invoice</string>

+ 6 - 0
WeiChat/src/main/res/values-zh-rCN/strings.xml

@@ -1506,6 +1506,9 @@
     <string name="select_cost_type">请选择报销类型</string>
     <string name="select_money_type">请选择币种</string>
     <string name="add_cost_details">请增加消费明细</string>
+
+    <!--本地通讯录-->
+    <string name="app_local_contacts">手机通讯录</string>
     <string name="sure_delete_this_details">确定删除该条消费明细?</string>
 
     <string name="replay_text">回复<xliff:g id="nick_name">%1$s</xliff:g>:</string>
@@ -1516,4 +1519,7 @@
     <string name="add_cost_details1">添加消费明细</string>
     <string name="invoice">发票</string>
     <string name="please_add_image">请添加图片</string>
+    <string name="added">已添加</string>
+    <string name="invite">邀请注册</string>
+    <string name="add">添加</string>
 </resources>

+ 4 - 0
WeiChat/src/main/res/values-zh-rTW/strings.xml

@@ -1506,6 +1506,10 @@
     <string name="comment_count">評論數(<xliff:g id="count">%1$d</xliff:g>)</string>
     <string name="count_down">倒數計時:</string>
     <string name="recording_completed">錄製完成</string>
+
+
+    <!--本地通讯录-->
+    <string name="app_local_contacts">手機通訊錄</string>
     <string name="input_cost_name">請輸入消費明細名稱</string>
     <string name="add_cost_details1">添加消費明細</string>
     <string name="invoice">發票</string>

+ 1 - 1
WeiChat/src/main/res/values/dimens.xml

@@ -22,7 +22,7 @@
     <dimen name="oa_statistics_date_minheight">30dp</dimen>
     <!-- end oa 考勤统计页面-->
     <dimen name="next_width">10.0dip</dimen>
-    <dimen name="line">2px</dimen>
+    <dimen name="line">1px</dimen>
     <dimen name="line_big">7.0dip</dimen>
     <dimen name="line_min">2.0dip</dimen>
     <dimen name="next_height">15.0dip</dimen>

+ 23 - 2
WeiChat/src/main/res/values/strings.xml

@@ -104,6 +104,7 @@
     <string name="save">保存</string>
     <string name="prompt_title">提示</string>
     <string name="search">搜索</string>
+    <string name="temporarily_no_data">暂时没有数据</string>
     <string name="sure">确定</string>
     <string name="cancel">取消</string>
     <string name="saveing">保存中&#8230;</string>
@@ -1772,7 +1773,7 @@
     <string name="c_point">·</string>
     <string name="c_equal">完成</string>
 
-    
+
     <!--login-->
     <string name="login_success_erp">UAS验证成功!</string>
     <string name="login_success_b2b">验证B2B成功!</string>
@@ -1782,7 +1783,7 @@
     <string name="login_progress_b2b">正在验证B2B...</string>
     <string name="login_progress_erp">正在验证UAS...</string>
     <string name="login_company_select">选择公司</string>
-    
+
     <string name="Amount_of_money">金额</string>
     <string name="all_Amount_of_money">总金额</string>
     <string name="type">类型</string>
@@ -1817,4 +1818,24 @@
 
     <string name="selector_permission_error">权限错误,无法正常工作!</string>
     <string name="ablum_list">相册列表</string>
+
+    <!--本地通讯录-->
+    <string name="app_local_contacts">手机通讯录</string>
+    <!--UU小秘书-->
+    <string name="booking_menu">预约小秘书</string>
+    <string name="booking_title">预约详情</string>
+    <string name="booking_time">时间</string>
+    <string name="booking_address">地址</string>
+    <string name="booking_content">内容</string>
+    <string name="booking_change">变更</string>
+    <string name="booking_object">对象</string>
+
+    <string name="booking_me">我的预约</string>
+    <string name="booking_shared">共享预约</string>
+    <string name="booking_time_set">预约时间段设置</string>
+    <string name="booking_times">时间段:</string>
+
+    <string name="booking_add">预约计划</string>
+
+
 </resources>

+ 1 - 1
WeiChat/src/main/res/values/styles.xml

@@ -946,7 +946,7 @@
         <item name="android:layout_height">match_parent</item>
         <item name="android:layout_marginTop">10dp</item>
         <item name="android:layout_marginBottom">10dp</item>
-        <item name="android:background">@color/black</item>
+        <item name="android:background">@color/gray_light</item>
     </style>
 
     <!--横线-->

Alguns arquivos não foram mostrados porque muitos arquivos mudaram nesse diff