Преглед на файлове

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

# Conflicts:
#	app_core/common/src/main/assets/work_menu.json
RaoMeng преди 7 години
родител
ревизия
6b95735b46
променени са 46 файла, в които са добавени 1033 реда и са изтрити 176 реда
  1. 1 1
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/crm/ClientActivity.java
  2. 0 3
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/oa/SelectAimActivity.java
  3. 2 4
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/me/MeFragment.java
  4. 5 5
      WeiChat/version.properties
  5. 1 11
      app_core/common/src/main/assets/work_menu.json
  6. BIN
      app_core/common/src/main/res/drawable-hdpi/ic_work_card.png
  7. BIN
      app_core/common/src/main/res/drawable-hdpi/icon_crm_contact.png
  8. BIN
      app_core/common/src/main/res/drawable-hdpi/icon_menu_my_scheduler.png
  9. BIN
      app_core/common/src/main/res/drawable-xhdpi/ic_work_card.png
  10. BIN
      app_core/common/src/main/res/drawable-xhdpi/icon_menu_my_scheduler.png
  11. BIN
      app_core/common/src/main/res/drawable-xxhdpi/ic_work_card.png
  12. BIN
      app_core/common/src/main/res/drawable-xxhdpi/icon_menu_my_scheduler.png
  13. 37 37
      app_core/common/src/main/res/layout/fragment_me.xml
  14. 1 0
      app_core/common/src/main/res/values-zh-rCN/strings.xml
  15. 1 0
      app_core/common/src/main/res/values/strings.xml
  16. 1 1
      app_modular/appcontact/src/main/java/com/uas/appcontact/ui/fragment/ContactsFragment.java
  17. 2 1
      app_modular/appme/src/main/AndroidManifest.xml
  18. 56 16
      app_modular/appme/src/main/java/com/uas/appme/other/activity/WorkCardActivity.java
  19. 2 2
      app_modular/appme/src/main/java/com/uas/appme/settings/activity/SettingActivity.java
  20. BIN
      app_modular/appme/src/main/res/drawable-hdpi/bg_work_card_head.png
  21. BIN
      app_modular/appme/src/main/res/drawable-xhdpi/bg_work_card_head.png
  22. BIN
      app_modular/appme/src/main/res/drawable-xxhdpi/bg_work_card_head.png
  23. 79 8
      app_modular/appme/src/main/res/layout/activity_work_card.xml
  24. 1 0
      app_modular/appmessages/src/main/java/com/modular/appmessages/model/MessageHeader.java
  25. 74 2
      app_modular/appmessages/src/main/java/com/modular/appmessages/presenter/MessagePresenter.java
  26. 11 12
      app_modular/apputils/src/main/java/com/modular/apputils/presenter/BillPresenter.java
  27. 21 0
      app_modular/apputils/src/main/java/com/modular/apputils/utils/ImageViewUtils.java
  28. 9 0
      app_modular/apputils/src/main/java/com/modular/apputils/utils/TestStr.java
  29. 2 0
      app_modular/appworks/src/main/AndroidManifest.xml
  30. 4 5
      app_modular/appworks/src/main/java/com/uas/appworks/CRM/erp/activity/BusinessDetailActivty.java
  31. 35 31
      app_modular/appworks/src/main/java/com/uas/appworks/CRM/erp/presenter/SelectAimPresenter.java
  32. 5 5
      app_modular/appworks/src/main/java/com/uas/appworks/OA/platform/activity/BusinessTravelActivity.java
  33. 7 5
      app_modular/appworks/src/main/java/com/uas/appworks/OA/platform/adapter/BusinessTravelAdapter.java
  34. 6 1
      app_modular/appworks/src/main/java/com/uas/appworks/adapter/CustomerCareListAdapter.java
  35. 562 0
      app_modular/appworks/src/main/java/com/uas/appworks/crm3_0/activity/BillInputBindActivity.java
  36. 21 1
      app_modular/appworks/src/main/java/com/uas/appworks/crm3_0/activity/ContactsDetialActivity.java
  37. 1 0
      app_modular/appworks/src/main/java/com/uas/appworks/crm3_0/activity/ContactsListActivity.java
  38. 17 1
      app_modular/appworks/src/main/java/com/uas/appworks/crm3_0/activity/CustomerManageActivity.java
  39. 16 3
      app_modular/appworks/src/main/java/com/uas/appworks/crm3_0/adapter/ContactLocalSortAdapter.java
  40. 21 8
      app_modular/appworks/src/main/java/com/uas/appworks/crm3_0/adapter/ContactSortAdapter.java
  41. 4 2
      app_modular/appworks/src/main/java/com/uas/appworks/crm3_0/fragment/ContactsListFragment.java
  42. 1 0
      app_modular/appworks/src/main/java/com/uas/appworks/crm3_0/fragment/LocalContactsListFragment.java
  43. 18 4
      app_modular/appworks/src/main/java/com/uas/appworks/crm3_0/fragment/ViewPagerLazyFragment.java
  44. 4 4
      app_modular/appworks/src/main/java/com/uas/appworks/utils/TravelUtils.java
  45. 3 2
      app_modular/appworks/src/main/res/layout/activity_customer_manage.xml
  46. 2 1
      app_modular/appworks/src/main/res/layout/item_contacts_me.xml

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

@@ -489,7 +489,7 @@ public class ClientActivity extends BaseActivity implements View.OnClickListener
 
     @Override
     public boolean onCreateOptionsMenu(Menu menu) {
-//        getMenuInflater().inflate(R.menu.menu_crm, menu);
+        getMenuInflater().inflate(R.menu.menu_crm, menu);
         return true;
     }
 

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

@@ -43,7 +43,6 @@ public class SelectAimActivity extends OABaseActivity implements ISelectAim {
     private SelectAimAdapter adapter;
     private SelectAimPresenter presenter;
 
-    private String lastInput = "";
 
 
     @Override
@@ -75,8 +74,6 @@ public class SelectAimActivity extends OABaseActivity implements ISelectAim {
             public void afterTextChanged(Editable s) {
                 String input = s.toString();
                 input = input.replaceAll(" ", "").replaceAll("\n", "");
-                if (lastInput.equals(input)) return;
-                lastInput = input;
                 presenter.seachByKey(input);
             }
         });

+ 2 - 4
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/me/MeFragment.java

@@ -315,10 +315,8 @@ public class MeFragment extends EasyFragment implements View.OnClickListener, On
         });
         findViewById(R.id.my_data_rl).setOnClickListener(this);
         View workCardRl = findViewById(R.id.workCardRl);
-        if (BaseConfig.isDebug()) {
-            workCardRl.setVisibility(View.VISIBLE);
-            workCardRl.setOnClickListener(this);
-        }
+        workCardRl.setVisibility(View.VISIBLE);
+        workCardRl.setOnClickListener(this);
         findViewById(R.id.my_friend_rl).setOnClickListener(this);
         findViewById(R.id.my_space_rl).setOnClickListener(this);
         findViewById(R.id.local_video_rl).setOnClickListener(this);

+ 5 - 5
WeiChat/version.properties

@@ -1,5 +1,5 @@
-#Sat Oct 13 17:08:49 CST 2018
-debugName=901
-versionName=651
-debugCode=901
-versionCode=191
+#Thu Oct 18 17:22:43 CST 2018
+debugName=932
+versionName=645
+debugCode=932
+versionCode=195

+ 1 - 11
app_core/common/src/main/assets/work_menu.json

@@ -268,7 +268,7 @@
         "isLocalMenu": true,
         "menuName": "str_work_customer_manage",
         "menuIcon": "ic_work_customer_manage",
-        "menuActivity": "com.modular.work.crm3_0.activity.CustomerManageActivity",
+        "menuActivity": "com.modular.crm.CustomerListActivity",
         "menuTag": "local_customer_manage",
         "menuUrl": "",
         "caller": "",
@@ -303,16 +303,6 @@
         "menuUrl": "",
         "caller": "",
         "isHide": false
-      },
-      {
-        "isLocalMenu": true,
-        "menuName": "客户拜访",
-        "menuIcon": "local_customer_visit",
-        "menuActivity": "com.modular.work.crm3_0.activity.CustomerVisitActivity",
-        "menuTag": "local_customer_visit",
-        "menuUrl": "",
-        "caller": "",
-        "isHide": false
       }
     ]
   },

BIN
app_core/common/src/main/res/drawable-hdpi/ic_work_card.png


BIN
app_core/common/src/main/res/drawable-hdpi/icon_crm_contact.png


BIN
app_core/common/src/main/res/drawable-hdpi/icon_menu_my_scheduler.png


BIN
app_core/common/src/main/res/drawable-xhdpi/ic_work_card.png


BIN
app_core/common/src/main/res/drawable-xhdpi/icon_menu_my_scheduler.png


BIN
app_core/common/src/main/res/drawable-xxhdpi/ic_work_card.png


BIN
app_core/common/src/main/res/drawable-xxhdpi/icon_menu_my_scheduler.png


+ 37 - 37
app_core/common/src/main/res/layout/fragment_me.xml

@@ -470,7 +470,44 @@
                 android:background="@drawable/oa_next"
                 android:contentDescription="@string/app_name" />
         </RelativeLayout>
+        <RelativeLayout
+            android:id="@+id/workCardRl"
+            android:layout_width="match_parent"
+            android:layout_height="50dp"
+            android:background="@drawable/selector_item_white_pass"
+            android:paddingLeft="@dimen/padding"
+            android:visibility="visible"
+            android:paddingTop="@dimen/padding">
+
+            <View
+                android:layout_width="match_parent"
+                android:layout_height="@dimen/line"
+                android:layout_alignParentBottom="true"
+                android:background="@color/item_line" />
+
+
+            <TextView
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_centerVertical="true"
+                android:drawableLeft="@drawable/ic_work_card"
+                android:drawablePadding="10dp"
+                android:gravity="center"
+                android:text="电子工牌"
+                android:textColor="#333333"
+                android:textSize="15sp" />
+
+            <ImageView
+                android:layout_width="@dimen/next_width"
+                android:layout_height="@dimen/next_height"
+                android:layout_alignParentRight="true"
+                android:layout_centerVertical="true"
+                android:layout_marginRight="8dp"
+                android:background="@drawable/oa_next"
+                android:contentDescription="@string/app_name" />
+
 
+        </RelativeLayout>
         <RelativeLayout
             android:id="@+id/setting_rl"
             android:layout_width="match_parent"
@@ -626,44 +663,7 @@
                 android:background="@drawable/oa_next"
                 android:contentDescription="@string/app_name" />
         </RelativeLayout>
-        <RelativeLayout
-            android:id="@+id/workCardRl"
-            android:layout_width="match_parent"
-            android:layout_height="50dp"
-            android:background="@drawable/selector_item_white_pass"
-            android:paddingLeft="@dimen/padding"
-            android:visibility="gone"
-            android:paddingTop="@dimen/padding">
-
-            <View
-                android:layout_width="match_parent"
-                android:layout_height="@dimen/line"
-                android:layout_alignParentBottom="true"
-                android:background="@color/item_line" />
 
-
-            <TextView
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:layout_centerVertical="true"
-                android:drawableLeft="@drawable/icon_uu_setting"
-                android:drawablePadding="10dp"
-                android:gravity="center"
-                android:text="电子工牌"
-                android:textColor="#333333"
-                android:textSize="15sp" />
-
-            <ImageView
-                android:layout_width="@dimen/next_width"
-                android:layout_height="@dimen/next_height"
-                android:layout_alignParentRight="true"
-                android:layout_centerVertical="true"
-                android:layout_marginRight="8dp"
-                android:background="@drawable/oa_next"
-                android:contentDescription="@string/app_name" />
-
-
-        </RelativeLayout>
     </LinearLayout>
 
 </ScrollView>

+ 1 - 0
app_core/common/src/main/res/values-zh-rCN/strings.xml

@@ -1575,6 +1575,7 @@
 
     <string name="str_customer_relationship">客户关系管理</string>
     <string name="str_work_business_manage">商机管理</string>
+    <string name="str_work_customer_link">联系人</string>
     <string name="str_work_customer_manage">客户管理</string>
     <string name="str_work_customer_visit">客户拜访</string>
     <string name="str_work_sales_data">销售看板</string>

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

@@ -1916,6 +1916,7 @@
 
     <string name="str_customer_relationship">客户关系管理</string>
     <string name="str_work_business_manage">商机管理</string>
+    <string name="str_work_customer_link">联系人</string>
     <string name="str_work_customer_manage">客户管理</string>
     <string name="str_work_customer_visit">客户拜访</string>
     <string name="str_work_sales_data">销售看板</string>

+ 1 - 1
app_modular/appcontact/src/main/java/com/uas/appcontact/ui/fragment/ContactsFragment.java

@@ -465,7 +465,7 @@ public class ContactsFragment extends SupportToolBarFragment
         if (ListUtils.isEmpty(allDatas)) return;
         showDatas = new ArrayList<>();
         for (BaseSortModel<Friend> e : allDatas) {
-            String text = e.getBean().getShowName() + e.getBean().getDepart() + e.getBean().getPosition() + e.getBean().getPhone();
+            String text = e.getBean().getShowName() + e.getBean().getPhone();
             if (StringUtil.isInclude(text, str)) {
                 showDatas.add(e);
             }

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

@@ -121,7 +121,8 @@
         <!-- <activity android:name=".settings.activity.PayTestActivity"></activity> -->
 
         <activity android:name=".settings.activity.SystemAdminActivity" />
-        <activity android:name=".other.activity.WorkCardActivity" />
+        <activity android:name=".other.activity.WorkCardActivity"
+            android:label="电子工牌"/>
         <activity android:name=".settings.activity.FontSizeActivity"
 
             android:launchMode="singleTask">

+ 56 - 16
app_modular/appme/src/main/java/com/uas/appme/other/activity/WorkCardActivity.java

@@ -3,24 +3,36 @@ package com.uas.appme.other.activity;
 import android.graphics.Bitmap;
 import android.os.Bundle;
 import android.widget.ImageView;
+import android.widget.TextView;
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baidu.aip.excep.utils.Base64Util;
+import com.common.LogUtil;
+import com.common.config.BaseConfig;
 import com.common.data.JSONUtil;
 import com.common.data.ListUtils;
 import com.core.base.BaseActivity;
 import com.core.utils.CommonUtil;
+import com.me.imageloader.ImageLoaderUtil;
 import com.modular.apputils.listener.OnSmartHttpListener;
 import com.modular.apputils.network.Parameter;
 import com.modular.apputils.network.Tags;
+import com.modular.apputils.utils.ImageViewUtils;
+import com.modular.apputils.utils.TestStr;
 import com.modular.apputils.utils.UUHttpHelper;
 import com.uas.appme.R;
 
+import de.hdodenhof.circleimageview.CircleImageView;
+
 public class WorkCardActivity extends BaseActivity {
     private ImageView logoIv;
-    private ImageView headIv;
+    private TextView companyNameTv;
+    private TextView nameTv;
+    private TextView emCodeTv;
+    private TextView positionTv;
+    private CircleImageView headIv;
 
     private UUHttpHelper mUUHttpHelper;
 
@@ -34,41 +46,69 @@ public class WorkCardActivity extends BaseActivity {
     private void initView() {
         mUUHttpHelper = new UUHttpHelper(CommonUtil.getAppBaseUrl(ct));
         logoIv = (ImageView) findViewById(R.id.logoIv);
-        headIv = (ImageView) findViewById(R.id.headIv);
+        companyNameTv = (TextView) findViewById(R.id.companyNameTv);
+        nameTv = (TextView) findViewById(R.id.nameTv);
+        emCodeTv = (TextView) findViewById(R.id.emCodeTv);
+        positionTv = (TextView) findViewById(R.id.positionTv);
+        headIv = (CircleImageView) findViewById(R.id.headIv);
+
+
         loadData();
     }
 
     private void loadData() {
         mUUHttpHelper.requestCompanyHttp(new Parameter.Builder()
-                .url("mobile/oa/getLabourCardInfor.action")
-                .addParams("emcode",CommonUtil.getEmcode())
+                        .url("mobile/oa/getLabourCardInfor.action")
+                        .addParams("emcode", CommonUtil.getEmcode())
                 , new OnSmartHttpListener() {
                     @Override
                     public void onSuccess(int what, String message, Tags tag) throws Exception {
-                        JSONObject object= JSON.parseObject(message);
-                        JSONArray mLabourCardInfors= JSONUtil.getJSONArray(object,"LabourCardInfor");
+                        JSONObject object = JSON.parseObject(message);
+                        JSONArray mLabourCardInfors = JSONUtil.getJSONArray(object, "LabourCardInfor");
                         if (!ListUtils.isEmpty(mLabourCardInfors)) {
                             handlerData(mLabourCardInfors.getJSONObject(0));
+                        }else{
+                            handlerData(new JSONObject());
                         }
                     }
 
                     @Override
                     public void onFailure(int what, String message, Tags tag) throws Exception {
-
+                        handlerData(new JSONObject());
                     }
                 });
+
+        //TODO 测试数据
+        if (BaseConfig.isDebug()) {
+            JSONObject object = JSON.parseObject(TestStr.LABOUR_CARD_INFOR);
+            JSONArray mLabourCardInfors = JSONUtil.getJSONArray(object, "LabourCardInfor");
+            if (!ListUtils.isEmpty(mLabourCardInfors)) {
+                handlerData(mLabourCardInfors.getJSONObject(0));
+            }
+        }
     }
 
-    private void handlerData( JSONObject mLabourCardInfor ){
-        String em_photourl=JSONUtil.getText(mLabourCardInfor,"EM_PHOTOURL");
-        String em_name=JSONUtil.getText(mLabourCardInfor,"EM_NAME");
-        String em_code=JSONUtil.getText(mLabourCardInfor,"EM_CODE");
-        String em_sex=JSONUtil.getText(mLabourCardInfor,"EM_SEX");
-        String em_mobile=JSONUtil.getText(mLabourCardInfor,"EM_MOBILE");
-        String em_position=JSONUtil.getText(mLabourCardInfor,"EM_POSITION");
-        String en_logo=JSONUtil.getText(mLabourCardInfor,"EN_LOGO");
+
+    private void handlerData(JSONObject mLabourCardInfor) {
+        String em_cop = JSONUtil.getText(mLabourCardInfor, "EM_COP");
+        String em_photourl = JSONUtil.getText(mLabourCardInfor, "EM_PHOTOURL");
+        String em_name = JSONUtil.getText(mLabourCardInfor, "EM_NAME");
+        String em_code = JSONUtil.getText(mLabourCardInfor, "EM_CODE");
+        String em_sex = JSONUtil.getText(mLabourCardInfor, "EM_SEX");
+        String em_mobile = JSONUtil.getText(mLabourCardInfor, "EM_MOBILE");
+        String em_position = JSONUtil.getText(mLabourCardInfor, "EM_DEPART");
+        String en_logo = JSONUtil.getText(mLabourCardInfor, "EN_LOGO");
+
+        companyNameTv.setText(em_cop);
+        nameTv.setText(em_name);
+        emCodeTv.setText("ID " + em_code);
+        positionTv.setText(em_position);
+        positionTv.setText(em_position);
+        String headUrl = ImageViewUtils.getErpImageUrl(em_photourl);
+        LogUtil.i("gong", "headUrl=" + headUrl);
+        ImageLoaderUtil.getInstance().loadImage(headUrl, headIv);
         Bitmap logoMap = Base64Util.base64ToBitmap(en_logo);
-        if (logoMap!=null){
+        if (logoMap != null) {
             logoIv.setImageBitmap(logoMap);
         }
     }

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

@@ -425,8 +425,8 @@ public class SettingActivity extends SupportToolBarActivity implements View.OnCl
             intent.putExtra(AppConstant.EXTRA_TITLE, getString(R.string.use_help));
             startActivity(intent);
         } else if (v.getId() == R.id.about_us_rl) {
-            //startActivity(new Intent(mContext, AboutActivity.class));
-           startActivity(new Intent("com.modular.work.ContactsListActivity"));
+            startActivity(new Intent(mContext, AboutActivity.class));
+          // startActivity(new Intent("com.modular.work.ContactsListActivity"));
         } else if (v.getId() == R.id.share_rl) {
             share();
         } else if (v.getId() == R.id.rl_app_update) {

BIN
app_modular/appme/src/main/res/drawable-hdpi/bg_work_card_head.png


BIN
app_modular/appme/src/main/res/drawable-xhdpi/bg_work_card_head.png


BIN
app_modular/appme/src/main/res/drawable-xxhdpi/bg_work_card_head.png


+ 79 - 8
app_modular/appme/src/main/res/layout/activity_work_card.xml

@@ -2,24 +2,95 @@
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
+    android:background="@color/white"
     android:orientation="vertical">
 
 
     <ImageView
         android:id="@+id/logoIv"
-        android:layout_width="match_parent"
-        android:layout_height="50dp" />
+        android:layout_width="wrap_content"
+        android:layout_height="55dp"
+        android:layout_marginLeft="@dimen/padding"
+        android:layout_marginTop="@dimen/paddingMin" />
 
     <TextView
+        android:id="@+id/companyNameTv"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
+        android:layout_marginTop="@dimen/padding"
         android:gravity="center"
-        android:text="深圳优软科技有限公司"
+        android:textColor="#FF2B88AF"
         android:textSize="20sp" />
 
-    <ImageView
-        android:id="@+id/headIv"
-        android:layout_width="80dp"
-        android:layout_gravity="center"
-        android:layout_height="80dp" />
+
+    <FrameLayout
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:layout_marginTop="@dimen/paddingMax">
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:layout_marginTop="74dp"
+            android:background="#FF2B88AF"
+            android:gravity="center_horizontal"
+            android:orientation="vertical"
+            android:paddingTop="90dp">
+
+            <TextView
+                android:id="@+id/nameTv"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:textColor="@color/white"
+                android:textSize="15sp" />
+
+            <TextView
+                android:id="@+id/emCodeTv"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="@dimen/padding"
+                android:textColor="@color/white"
+                android:textSize="15sp" />
+
+            <TextView
+                android:id="@+id/positionTv"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="@dimen/padding"
+                android:textColor="@color/white"
+                android:textSize="15sp" />
+
+            <View
+                android:layout_width="0dp"
+                android:layout_height="0dp"
+                android:layout_weight="1" />
+
+            <View
+                android:layout_width="match_parent"
+                android:layout_height="1dp"
+                android:visibility="gone"
+                android:background="#F7F8F8" />
+
+            <TextView
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginBottom="@dimen/padding"
+                android:layout_marginTop="@dimen/paddingMin"
+                android:visibility="gone"
+                android:text="英唐智慧   全球共享"
+                android:textColor="@color/white"
+                android:textSize="12sp" />
+        </LinearLayout>
+
+
+        <de.hdodenhof.circleimageview.CircleImageView
+            android:id="@+id/headIv"
+            android:layout_width="140dp"
+            android:layout_height="140dp"
+            android:padding="@dimen/paddingMin"
+            android:layout_gravity="center_horizontal"
+            android:background="@drawable/bg_work_card_head" />
+
+
+    </FrameLayout>
 </LinearLayout>

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

@@ -16,6 +16,7 @@ public class MessageHeader {
      * 5.代办工作
      * 6.订阅号
      * 7.一元捐
+     * 21.我的日程
      */
     private int type;//根据类型来决定要调转的界面
     private int icon;

+ 74 - 2
app_modular/appmessages/src/main/java/com/modular/appmessages/presenter/MessagePresenter.java

@@ -58,13 +58,18 @@ import com.modular.appmessages.model.MessageNew;
 import com.modular.appmessages.model.SubMessage;
 import com.modular.appmessages.presenter.imp.IMessageView;
 import com.modular.appmessages.util.ApprovalUtil;
+import com.modular.apputils.listener.OnSmartHttpListener;
+import com.modular.apputils.network.Parameter;
+import com.modular.apputils.network.Tags;
 import com.modular.apputils.utils.SignUtils;
 import com.modular.apputils.utils.SwitchUtil;
+import com.modular.apputils.utils.UUHttpHelper;
 import com.modular.apputils.utils.VoiceUtils;
 import com.modular.booking.activity.services.BServiceListActivity;
 import com.modular.booking.model.SBMenuModel;
 import com.uas.appworks.OA.platform.activity.BusinessTravelActivity;
 import com.uas.appworks.OA.platform.activity.PurchaseDetailsActivity;
+import com.uas.appworks.activity.ScheduleActivity;
 
 import java.util.ArrayList;
 import java.util.Collections;
@@ -88,6 +93,7 @@ public class MessagePresenter implements OnHttpResultListener {
     private final int LOAD_BOOKING = 0x17;//小秘书红点
     private final int LOAD_REAL_TIME = 0x18;
     private final int IS_COMPANY_ADMIN = 0x19;
+    private final int LOAD_SCHEDULE = 0x20;//获取日程数据
 
     public static final int REAL_TIME_FORM = 7;
     public static final int BUSINESS_STATISTICS = 8;
@@ -101,7 +107,7 @@ public class MessagePresenter implements OnHttpResultListener {
     private String subReadTime;//订阅号点击时间
 
     private String filter;//搜索数据
-    private int emnewsNum, subsNum, processNum, taskNum, bookingNum, uuHelperNum;//红点消息分类数量
+    private int emnewsNum, subsNum, processNum, taskNum, bookingNum, uuHelperNum, scheduleNum;//红点消息分类数量
     private String[] RECEIVER_LIST = {ConnectivityManager.CONNECTIVITY_ACTION, OAConfig.AUTO_SIGIN_ALART, MsgBroadcast.ACTION_MSG_COMPANY_UPDATE, "com.app.home.update"
             , MsgBroadcast.ACTION_MSG_UI_UPDATE};
     private BroadcastReceiver dataChangeReceiver = new BroadcastReceiver() {
@@ -155,6 +161,9 @@ public class MessagePresenter implements OnHttpResultListener {
             loadProcessToDo();//获取审批流接口
             loadSubData();
             loadNews(isB2b);//获取消息
+            if (!isB2b) {
+                loadSchedule();
+            }
         } else if (role.equals("3")) {//B2b用户
             isB2b = true;
             loadB2bNewsCount();
@@ -251,9 +260,48 @@ public class MessagePresenter implements OnHttpResultListener {
                 .setWhat(LOAD_EMNEWS)
                 .bulid();
         OAHttpHelper.getInstance().requestHttp(request, this);
+    }
+
+    /**
+     * 获取日程
+     */
+    private void loadSchedule() {
+        if (mUUHttpHelper == null) {
+            mUUHttpHelper = new UUHttpHelper(CommonUtil.getSchedulerBaseUrl());
+        }
+        String sessionId= CommonUtil.getSharedPreferences(ct, "sessionId");
+        mUUHttpHelper.requestHttp(new Parameter.Builder()
+                .url("schedule/getSchedule")
+                .addParams("imid", MyApplication.getInstance().getLoginUserId())
+                .addParams("uasUrl", CommonUtil.getAppBaseUrl(ct))
+                .addParams("emcode", CommonUtil.getEmcode())
+                .addParams("master", CommonUtil.getMaster())
+                .addParams("sessionId",sessionId)
+                .addSuperHeaders("Cookie", "JSESSIONID=" + sessionId)
+                .record(LOAD_SCHEDULE), mOnSmartHttpListener);
 
     }
 
+    private UUHttpHelper mUUHttpHelper;
+    private OnSmartHttpListener mOnSmartHttpListener = new OnSmartHttpListener() {
+        @Override
+        public void onSuccess(int what, String message, Tags tag) throws Exception {
+            JSONObject object = JSON.parseObject(message);
+            switch (what) {
+                case LOAD_SCHEDULE:
+                    if (JSONUtil.getBoolean(object, "success")) {
+                        int unRead = JSONUtil.getInt(object, "data");
+                        showScheduleNum(unRead);
+                    }
+                    break;
+            }
+        }
+
+        @Override
+        public void onFailure(int what, String message, Tags tag) throws Exception {
+
+        }
+    };
 
     private void postReadNews(String ids) {
         Map<String, Object> param = new HashMap<>();
@@ -422,6 +470,10 @@ public class MessagePresenter implements OnHttpResultListener {
                 } else if ("1".equals(result)) {
                     iMessageView.updateHeaderView(BUSINESS_STATISTICS, 1, "", "");
                 }
+                break;
+            case LOAD_SCHEDULE:
+                //TODO 获取日程数据
+                break;
             default:
                 break;
         }
@@ -551,6 +603,12 @@ public class MessagePresenter implements OnHttpResultListener {
         iMessageView.updateHeaderView(6, num, num > 0 ? title : "", time);
     }
 
+    private void showScheduleNum(int num) {
+        scheduleNum = num;
+        updateForUnReader();
+        iMessageView.updateHeaderView(21, num, num > 0 ? "你有新的日程" : "", "");
+    }
+
     private void saveSubs2Db(JSONObject o) throws Exception {
         JSONArray array = o.getJSONArray("data");
         if (ListUtils.isEmpty(array)) return;
@@ -1035,7 +1093,7 @@ public class MessagePresenter implements OnHttpResultListener {
 
     /*跟新未读红点信息*/
     private void updateForUnReader() {
-        int num = subsNum + processNum + uuHelperNum + emnewsNum + taskNum + bookingNum;
+        int num = subsNum + processNum + uuHelperNum + emnewsNum + taskNum + bookingNum + scheduleNum;
         if (this.unReaderListener != null) {
             this.unReaderListener.setUnReader(num);
         }
@@ -1128,6 +1186,16 @@ public class MessagePresenter implements OnHttpResultListener {
             models.addAll(getErpHeader());
         }
 
+        if (1 == 1) {
+            MessageNew h = new MessageNew();
+            MessageHeader model = new MessageHeader(StringUtil.getMessage(R.string.my_scheduler));
+            model.setIcon(R.drawable.icon_menu_my_scheduler);
+            model.setSubDoc("");
+            model.setType(21);
+            model.setRedKey("my_scheduler");
+            h.setT(model);
+            models.add(h);
+        }
         if (PreferenceUtils.getInt("UUSTEP", -1) == 1) {
             //显示UU运动
             MessageNew h = new MessageNew();
@@ -1364,6 +1432,10 @@ public class MessagePresenter implements OnHttpResultListener {
                 intent = new Intent(ct, PurchaseDetailsActivity.class).putExtra(Constants.FLAG.EXTRA_B2B_LIST_STATE, "待回复");
                 ct.startActivity(intent);
                 break;
+            case 21:
+                intent = new Intent(ct, ScheduleActivity.class);
+                ct.startActivity(intent);
+                break;
             default:
                 break;
         }

+ 11 - 12
app_modular/apputils/src/main/java/com/modular/apputils/presenter/BillPresenter.java

@@ -3,8 +3,6 @@ package com.modular.apputils.presenter;
 import android.content.Context;
 import android.content.Intent;
 import android.text.TextUtils;
-import android.util.Log;
-import android.util.SparseArray;
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
@@ -14,12 +12,8 @@ import com.common.data.DateFormatUtil;
 import com.common.data.JSONUtil;
 import com.common.data.ListUtils;
 import com.common.data.StringUtil;
-import com.common.data.TextUtil;
-import com.common.ui.ImageUtil;
 import com.core.app.Constants;
-import com.core.app.MyApplication;
 import com.core.model.SelectBean;
-import com.core.net.http.ViewUtil;
 import com.core.utils.CommonUtil;
 import com.core.widget.view.Activity.SelectActivity;
 import com.lidroid.xutils.HttpUtils;
@@ -28,17 +22,13 @@ import com.lidroid.xutils.http.RequestParams;
 import com.lidroid.xutils.http.ResponseInfo;
 import com.lidroid.xutils.http.callback.RequestCallBack;
 import com.lidroid.xutils.http.client.HttpRequest;
-import com.me.network.app.http.HttpClient;
 import com.me.network.app.http.Method;
-import com.me.network.app.http.rx.Result2Listener;
-import com.me.network.app.http.rx.ResultSubscriber;
 import com.modular.apputils.R;
 import com.modular.apputils.listener.OnSmartHttpListener;
 import com.modular.apputils.model.BillGroupModel;
 import com.modular.apputils.network.Parameter;
 import com.modular.apputils.network.Tags;
 import com.modular.apputils.presenter.imp.IBill;
-import com.modular.apputils.utils.TestDataUtils;
 
 import java.io.File;
 import java.io.Serializable;
@@ -84,6 +74,10 @@ public class BillPresenter extends BaseNetPresenter implements OnSmartHttpListen
     public int getFormId() {
         return mId;
     }
+    
+    public void setmId(int mId) {
+        this.mId = mId;
+    }
 
     public String getStatusField() {
         return statusField;
@@ -330,12 +324,12 @@ public class BillPresenter extends BaseNetPresenter implements OnSmartHttpListen
                 break;
             case SAVE_AND_SUBMIT:
                 if (JSONUtil.getBoolean(jsonObject, "success")) {
-                    if (mId<=0){
+                    if (mId <= 0) {
                         int keyvalue = JSONUtil.getInt(jsonObject, "keyvalue");
                         String formcode = JSONUtil.getText(jsonObject, "formcode");
                         judgeApproval(keyvalue, formcode);
                         iBill.showToast(R.string.save_success);
-                    }else{
+                    } else {
                         judgeApproval(mId, "");
                         iBill.showToast(R.string.save_success);
                     }
@@ -591,6 +585,11 @@ public class BillPresenter extends BaseNetPresenter implements OnSmartHttpListen
         }
         if ((type.equals("D") || type.equals("T")) && TextUtils.isEmpty(defValue)) {
             defValue = DateFormatUtil.long2Str(System.currentTimeMillis() + 1000 * 10 * 60, DateFormatUtil.YMD_HMS);
+            if (caption.contains("生日")) {
+                String day = DateFormatUtil.long2Str(System.currentTimeMillis(), DateFormatUtil.YMD);
+                mBillModel.setValue(day);
+                mBillModel.setDisplay(defValue);
+            }
         }
         mBillModel.setFindFunctionName(findFunctionName);
         mBillModel.setCaption(caption);

+ 21 - 0
app_modular/apputils/src/main/java/com/modular/apputils/utils/ImageViewUtils.java

@@ -0,0 +1,21 @@
+package com.modular.apputils.utils;
+
+import com.core.app.MyApplication;
+import com.core.utils.CommonUtil;
+
+public class ImageViewUtils {
+
+    public static String getErpImageUrl(String path) {
+        return CommonUtil.getAppBaseUrl(MyApplication.getInstance()) + "common/download.action?path=" + path + "&sessionId=" +
+                CommonUtil.getSharedPreferences(MyApplication.getInstance(), "sessionId") +
+                "&sessionUser=" + CommonUtil.getSharedPreferences(MyApplication.getInstance(), "erp_username") +
+                "&master=" + CommonUtil.getSharedPreferences(MyApplication.getInstance(), "erp_master");
+    }
+
+    public static String getErpImageUrl(int id) {
+        return CommonUtil.getAppBaseUrl(MyApplication.getInstance()) + "common/downloadbyId.action?id=" + id + "&sessionId=" +
+                CommonUtil.getSharedPreferences(MyApplication.getInstance(), "sessionId") +
+                "&sessionUser=" + CommonUtil.getSharedPreferences(MyApplication.getInstance(), "erp_username") +
+                "&master=" + CommonUtil.getSharedPreferences(MyApplication.getInstance(), "erp_master");
+    }
+}

Файловите разлики са ограничени, защото са твърде много
+ 9 - 0
app_modular/apputils/src/main/java/com/modular/apputils/utils/TestStr.java


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

@@ -583,6 +583,8 @@
         <activity android:name=".activity.businessManage.BusinessCompanyListActivity" />
         <activity android:name=".activity.businessManage.businessChangeStage.BusinessChangeStageActivity" />
         <activity android:name=".activity.businessManage.BusinessBillInputActivity" />
+        
+        <activity android:name=".crm3_0.activity.BillInputBindActivity"/>
     </application>
 
 </manifest>

+ 4 - 5
app_modular/appworks/src/main/java/com/uas/appworks/CRM/erp/activity/BusinessDetailActivty.java

@@ -43,7 +43,6 @@ import com.handmark.pulltorefresh.library.PullToRefreshBase;
 import com.handmark.pulltorefresh.library.PullToRefreshListView;
 import com.uas.appworks.CRM.erp.model.Business;
 import com.uas.appworks.R;
-import com.uas.appworks.activity.businessManage.businessDetailActivity.BusinessDetailNewActivity;
 
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -130,14 +129,14 @@ public class BusinessDetailActivty extends BaseActivity {
         mlist.setOnItemClickListener(new AdapterView.OnItemClickListener() {
             @Override
             public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
-                /*final BussinessDetailAdapter.OldViewHolder holder = (BussinessDetailAdapter.OldViewHolder) view.getTag();
+                final BussinessDetailAdapter.OldViewHolder holder = (BussinessDetailAdapter.OldViewHolder) view.getTag();
                 startActivity(new Intent(BusinessDetailActivty.this, BusinessDetailInfoActivity.class)
                         .putExtra("type", holder.type)
                         .putExtra("formCondition", formCondition + "=" + holder.bc_id)
                         .putExtra("gridCondition", gridCondition + "=" + holder.bc_id)
                         .putExtra("id", holder.bc_id)
-                );*/
-                try {
+                );
+                /*try {
                     int itemAtPosition = (int) parent.getItemIdAtPosition(position);
                     Business business = mData.get(itemAtPosition);
                     startActivity(new Intent(mContext, BusinessDetailNewActivity.class)
@@ -148,7 +147,7 @@ public class BusinessDetailActivty extends BaseActivity {
                             .putExtra(Constants.FLAG.COMMON_WHICH_PAGE, "businessCompany"));
                 } catch (Exception e) {
 
-                }
+                }*/
             }
         });
 

+ 35 - 31
app_modular/appworks/src/main/java/com/uas/appworks/CRM/erp/presenter/SelectAimPresenter.java

@@ -8,6 +8,7 @@ import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baidu.mapapi.model.LatLng;
 import com.baidu.mapapi.search.core.PoiInfo;
+import com.common.LogUtil;
 import com.common.data.ListUtils;
 import com.common.data.StringUtil;
 import com.core.api.wxapi.ApiConfig;
@@ -41,7 +42,7 @@ public class SelectAimPresenter implements OnHttpResultListener {
     private ISelectAim iSelectAim;
     private final int LOAD = 0x11;
     private final int LOAD_CUSTOMER = 0x12;//拜访计划客户名称数据
-    private List<SelectAimModel> models=new ArrayList<>();//从服务其返回的数据列表
+    private List<SelectAimModel> models = new ArrayList<>();//从服务其返回的数据列表
     private List<SelectAimModel> keyList;//搜索企业筛选的人员
     private int seachMapType = 0;//下拉百度地图数据类型  1.获取附近数据  2.获取全国数据  2.获取城市数据
     private String keyWork;
@@ -70,6 +71,11 @@ public class SelectAimPresenter implements OnHttpResultListener {
 
     public void seachByKey(String keyWork) {
         this.keyWork = keyWork;
+        if (keyList == null) {
+            keyList = new ArrayList<>();
+        } else {
+            keyList.clear();
+        }
         if (ListUtils.isEmpty(models)) {
             if (StringUtil.isEmpty(keyWork)) {
                 loadNeer();
@@ -82,23 +88,21 @@ public class SelectAimPresenter implements OnHttpResultListener {
                     m.setFirst(false);
                 iSelectAim.showModel(models);
                 return;
-            }
-            if (keyList == null)
-                keyList = new ArrayList<>();
-            else
-                keyList.clear();
-            boolean isFirst = true;
-            for (SelectAimModel e : models) {
-                if (isIncude(keyWork, e)) {
-                    if (isFirst) {
-                        e.setFirst(true);
-                        isFirst = false;
-                    } else
-                        e.setFirst(isFirst);
-                    keyList.add(e);
+            } else {
+                boolean isFirst = true;
+                for (SelectAimModel e : models) {
+                    if (isIncude(keyWork, e)) {
+                        if (isFirst) {
+                            e.setFirst(true);
+                            isFirst = false;
+                        } else
+                            e.setFirst(isFirst);
+                        keyList.add(e);
+                    }
                 }
+                loadDataByChina();
             }
-            loadDataByChina();
+
         }
 
     }
@@ -176,14 +180,15 @@ public class SelectAimPresenter implements OnHttpResultListener {
     //下载全国数据
     private void loadDataByChina() {
         seachMapType = 2;
-        LocationNeerHelper.getInstance().searchByInput(MyApplication.getInstance(),"中国",keyWork,0,mOnSearchLocationListener);
+        LocationNeerHelper.getInstance().searchByInput(MyApplication.getInstance(), "中国", keyWork, 0, mOnSearchLocationListener);
     }
 
     //下载本城市数据
     private void loadDataByCity() {
         seachMapType = 3;
-        LocationNeerHelper.getInstance().searchByInput(MyApplication.getInstance(),null,keyWork,0,mOnSearchLocationListener);
+        LocationNeerHelper.getInstance().searchByInput(MyApplication.getInstance(), null, keyWork, 0, mOnSearchLocationListener);
     }
+
     private OnSearchLocationListener mOnSearchLocationListener = new OnSearchLocationListener() {
         @Override
         public void onCallBack(boolean isSuccess, List<UASLocation> locations) {
@@ -191,9 +196,7 @@ public class SelectAimPresenter implements OnHttpResultListener {
                 for (SelectAimModel e : models)
                     e.setFirst(false);
                 iSelectAim.showModel(models);
-                return;
-            }
-            if (!isSuccess) {
+            } else if (!isSuccess) {
                 if (seachMapType == 1) {
                     loadDataByChina();
                     return;
@@ -205,13 +208,16 @@ public class SelectAimPresenter implements OnHttpResultListener {
                     return;
                 }
             } else {
+                if (seachMapType==1&&!StringUtil.isEmpty(keyWork)){
+                    return;
+                }
                 SelectAimModel model = null;
                 boolean isFirst = true;
                 List<PoiInfo> chches = new ArrayList<>();
-                for (UASLocation e: locations)
-                {
+                for (UASLocation e : locations) {
                     chches.add(ModelChangeUtils.location2PoiInfo(e));
                 }
+                List<SelectAimModel> chchesModels=new ArrayList<>();
                 for (int i = 0; i < chches.size(); i++) {
                     if (StringUtil.isEmpty(chches.get(i).name) || StringUtil.isEmpty(chches.get(i).address))
                         continue;
@@ -226,15 +232,15 @@ public class SelectAimPresenter implements OnHttpResultListener {
                     } else {
                         model.setFirst(false);
                     }
-                    models.add(model);
+                    chchesModels.add(model);
                 }
-                if (ListUtils.isEmpty(models)) {
+                if (ListUtils.isEmpty(chchesModels)) {
                     showEmpty();
                 } else {
                     List<SelectAimModel> show = new ArrayList<>();
                     if (!ListUtils.isEmpty(keyList))
                         show.addAll(keyList);
-                    show.addAll(models);
+                    show.addAll(chchesModels);
                     iSelectAim.showModel(show);
                 }
             }
@@ -243,8 +249,6 @@ public class SelectAimPresenter implements OnHttpResultListener {
     };
 
 
-
-
     @Override
     public void result(int what, boolean isJSON, String message, Bundle bundle) {
         if (isJSON && (what == LOAD || what == LOAD_CUSTOMER)) {
@@ -288,7 +292,6 @@ public class SelectAimPresenter implements OnHttpResultListener {
                 model.setAddress(object.getString(address));
                 model.setTimes(object.getInteger(md_visitcount));
                 model.setName(object.getString(company));
-                //TODO id先不要
 //                model.seti(object.getInteger("MD_ID"));
                 model.setType(2);
                 float longitude = object.getFloatValue(md_longitude);
@@ -332,7 +335,6 @@ public class SelectAimPresenter implements OnHttpResultListener {
                 model.setName(object.getString("CU_NAME"));
                 model.setObject(JSON.toJSONString(object));
                 model.setTimes(-1);
-                //TODO id先不要
 //                model.seti(object.getInteger("MD_ID"));
                 model.setType(2);
                 models.add(model);
@@ -378,7 +380,9 @@ public class SelectAimPresenter implements OnHttpResultListener {
 
     private boolean isIncude(String key, SelectAimModel model) {
         String text = model.getAddress() + model.getTime() + model.getName();
-        return StringUtil.isInclude(text, key);
+        boolean isInclude = StringUtil.isInclude(text, key);
+        LogUtil.i("gong", "isIncude=" + "\n text=" + text + "\n key=" + key + " ==" + isInclude);
+        return isInclude;
     }
 
     private void log(String message) {

+ 5 - 5
app_modular/appworks/src/main/java/com/uas/appworks/OA/platform/activity/BusinessTravelActivity.java

@@ -83,7 +83,7 @@ public class BusinessTravelActivity extends BaseNetActivity implements OnSmartHt
     @Override
     public boolean onOptionsItemSelected(MenuItem item) {
         if (R.id.addTravel == item.getItemId()) {
-            TravelUtils.showSelect(ct, appkey, appSceret, new BusinessTravel());
+            TravelUtils.showSelect(ct,cusCode, appkey, appSceret, new BusinessTravel());
         }
         return super.onOptionsItemSelected(item);
     }
@@ -146,11 +146,11 @@ public class BusinessTravelActivity extends BaseNetActivity implements OnSmartHt
         public void onClick(View view) {
             int id=view.getId();
             if (R.id.clickAir == id) {
-                TravelUtils.reserve(ct, appkey, appSceret, getLeaderModel(BusinessTravel.AIR));
+                TravelUtils.reserve(ct,cusCode, appkey, appSceret, getLeaderModel(BusinessTravel.AIR));
             } else if (R.id.clickHotel == id) {
-                TravelUtils.reserve(ct, appkey, appSceret, getLeaderModel(BusinessTravel.HOTEL));
+                TravelUtils.reserve(ct,cusCode, appkey, appSceret, getLeaderModel(BusinessTravel.HOTEL));
             } else if (R.id.clickTrain == id) {
-                TravelUtils.reserve(ct, appkey, appSceret, getLeaderModel(BusinessTravel.TRAIN));
+                TravelUtils.reserve(ct,cusCode, appkey, appSceret, getLeaderModel(BusinessTravel.TRAIN));
             }
         }
     };
@@ -269,7 +269,7 @@ public class BusinessTravelActivity extends BaseNetActivity implements OnSmartHt
 
     private void setAdapter(List<BusinessTravel> models) {
         if (mAdapter == null) {
-            mAdapter = new BusinessTravelAdapter(ct, appkey, appSceret, models);
+            mAdapter = new BusinessTravelAdapter(ct,cusCode, appkey, appSceret, models);
             mRecyclerView.addItemDecoration(new SpaceItemDecoration(10));
             mRecyclerView.setLayoutManager(new LinearLayoutManager(ct));
             mRecyclerView.setAdapter(mAdapter);

+ 7 - 5
app_modular/appworks/src/main/java/com/uas/appworks/OA/platform/adapter/BusinessTravelAdapter.java

@@ -34,11 +34,13 @@ public class BusinessTravelAdapter extends RecyclerView.Adapter<RecyclerView.Vie
     private List<BusinessTravel> models;
     private String currentName;
     private String appkey = null;
+    private String cusCode = null;
     private String appSceret = null;
 
-    public BusinessTravelAdapter(Context ct, String appkey, String appSceret, List<BusinessTravel> models) {
+    public BusinessTravelAdapter(Context ct, String cusCode, String appkey,String appSceret, List<BusinessTravel> models) {
         this.ct = ct;
         this.appkey = appkey;
+        this.cusCode = cusCode;
         this.appSceret = appSceret;
         this.models = models;
         this.currentName = CommonUtil.getName();
@@ -367,13 +369,13 @@ public class BusinessTravelAdapter extends RecyclerView.Adapter<RecyclerView.Vie
             notifyItemChanged(position);
         } else if (R.id.doneTv == id || R.id.subRl == id || R.id.addMoreTv == id) {
             BusinessTravel model = (BusinessTravel) v.getTag(R.id.tag_key);
-            TravelUtils.reserve(ct, appkey, appSceret, model);
+            TravelUtils.reserve(ct,cusCode, appkey, appSceret, model);
         } else if (R.id.clickAir == id) {
-            TravelUtils.reserve(ct, appkey, appSceret, getLeaderModel(BusinessTravel.AIR));
+            TravelUtils.reserve(ct, cusCode,appkey, appSceret, getLeaderModel(BusinessTravel.AIR));
         } else if (R.id.clickHotel == id) {
-            TravelUtils.reserve(ct, appkey, appSceret, getLeaderModel(BusinessTravel.HOTEL));
+            TravelUtils.reserve(ct,cusCode, appkey, appSceret, getLeaderModel(BusinessTravel.HOTEL));
         } else if (R.id.clickTrain == id) {
-            TravelUtils.reserve(ct, appkey, appSceret, getLeaderModel(BusinessTravel.TRAIN));
+            TravelUtils.reserve(ct,cusCode, appkey, appSceret, getLeaderModel(BusinessTravel.TRAIN));
         }
     }
 

+ 6 - 1
app_modular/appworks/src/main/java/com/uas/appworks/adapter/CustomerCareListAdapter.java

@@ -49,7 +49,12 @@ public class CustomerCareListAdapter extends EasyBaseAdapter {
                 StringBuilder subTitleBuilder=new StringBuilder(DateFormatUtil.long2Str(time,DateFormatUtil.MD));
                 subTitleBuilder.append(" | 农历  "+new Lunar(new Date(time)).toString());
                 mViewHolder.subTitleTv.setText(subTitleBuilder.toString());
-                mViewHolder.tagTv.setText(String.valueOf(DateFormatUtil.differentDays(time,System.currentTimeMillis()))+"天");
+                String tag="今";
+                int day=DateFormatUtil.differentDays(System.currentTimeMillis(),time);
+                if (day!=0){
+                    tag=String.valueOf(day)+"天";
+                }
+                mViewHolder.tagTv.setText(tag);
             }
             view.setTag(mViewHolder);
         } else {

+ 562 - 0
app_modular/appworks/src/main/java/com/uas/appworks/crm3_0/activity/BillInputBindActivity.java

@@ -0,0 +1,562 @@
+package com.uas.appworks.crm3_0.activity;
+
+import android.app.Activity;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.net.Uri;
+import android.os.Build;
+import android.os.Bundle;
+import android.os.Handler;
+import android.support.v7.widget.DividerItemDecoration;
+import android.support.v7.widget.LinearLayoutManager;
+import android.support.v7.widget.RecyclerView;
+import android.text.TextUtils;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.View;
+import android.widget.LinearLayout;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.common.LogUtil;
+import com.common.data.CalendarUtil;
+import com.common.data.JSONUtil;
+import com.common.data.ListUtils;
+import com.common.data.StringUtil;
+import com.common.file.FileUtils;
+import com.common.ui.CameraUtil;
+import com.core.app.Constants;
+import com.core.app.MyApplication;
+import com.core.base.OABaseActivity;
+import com.core.model.SelectBean;
+import com.core.utils.StatusBarUtil;
+import com.core.utils.ToastUtil;
+import com.core.utils.time.wheel.DateTimePicker;
+import com.core.widget.view.Activity.ImgFileListActivity;
+import com.core.widget.view.Activity.SelectActivity;
+import com.modular.apputils.R;
+import com.modular.apputils.activity.BillDetailsActivity;
+import com.modular.apputils.activity.BillListActivity;
+import com.modular.apputils.activity.SelectNetAcitivty;
+import com.modular.apputils.adapter.BillAdapter;
+import com.modular.apputils.model.BillGroupModel;
+import com.modular.apputils.model.BillListConfig;
+import com.modular.apputils.presenter.BillPresenter;
+import com.modular.apputils.presenter.imp.IBill;
+
+import java.io.File;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
+
+/**
+ * 动态表单单据录入界面,后续会尽量关闭修改,添加拓展功能
+ */
+public class BillInputBindActivity extends OABaseActivity implements IBill, BillAdapter.OnAdapterListener {
+    public final int REQUESTCODE_C = 0x11;
+    public final int REQUESTCODE_DB_FIND = 0x12;
+    public final int REQUESTCODE_ENCLOSURE = 0x13;
+    public final int REQUESTCODE_C_NET = 0x14;
+    public final int REQUESTCODE_ENCLOSURE_LOW = 0x15;
+    public final int REQUEST_CODE_CAPTURE_PHOTO = 0x16;
+
+    public RecyclerView mRecyclerView;
+    public BillPresenter mBillPresenter;
+    public BillAdapter mBillAdapter;
+    private String mListCondition;
+    public int selectPosition = -1;//当前选择调转界面的index,本来不想添加全局变量的,没有办法
+    private HashMap<String, String> dbFindCondition;
+    private String phone;
+    private String name;
+
+    //TODO 重写方法实现自定义的 BillPresenter,必须继承于BillPresenter
+    public BillPresenter newBillPresenter() {
+        return new BillPresenter(this, this);
+    }
+
+    //TODO 重写方法实现自定义的 BillAdapter,必须继承于BillAdapter
+    public BillAdapter newBillAdapter(List<BillGroupModel> groupModels) {
+        return new BillAdapter(ct, groupModels, this);
+    }
+
+    //TODO  重写方法实现自定义的 提交完成后处理
+    public void commitSuccess(final int keyValue, String code) {
+        ToastMessage("提交成功!");
+        new Handler().postDelayed(new Runnable() {
+            @Override
+            public void run() {
+                if (mContext == null) return;
+                //使用新界面
+                startActivity(new Intent(ct, BillDetailsActivity.class)
+                        .putExtra(Constants.Intents.CALLER, mBillPresenter.getFormCaller())
+                        .putExtra(Constants.Intents.TITLE, getToolBarTitle())
+                        .putExtra(Constants.Intents.ID, keyValue));
+//                startActivity(new Intent("com.modular.form.erp.activity.CommonDocDetailsActivity")
+//                        .putExtra("caller", mBillPresenter.getFormCaller())
+//                        .putExtra("keyValue", keyValue)
+//                        .putExtra("update", "1")
+//                        .putExtra("title", getToolBarTitle())
+//                        .putExtra("statusKey", mBillPresenter.getStatusField())
+//                        .putExtra("status", "已提交"));
+                finish();
+                overridePendingTransition(R.anim.anim_activity_in, R.anim.anim_activity_out);
+            }
+        }, 2000);
+    }
+
+    //TODO  重写方法实现自定义的初始化
+    public void init() {
+        Intent intent = getIntent();
+        if (intent != null) {
+            Serializable mSerializable = intent.getSerializableExtra(Constants.Intents.DB_FIND_CONDITION);
+            if (mSerializable != null && mSerializable instanceof HashMap) {
+                dbFindCondition = (HashMap<String, String>) mSerializable;
+            }
+        }
+        mBillPresenter = newBillPresenter();
+        mBillPresenter.start(getIntent());
+        if (getIntent() != null) {
+            mListCondition = getIntent().getStringExtra(Constants.Intents.LIST_CONDITION);
+            phone=getIntent().getStringExtra("phone");
+            name=getIntent().getStringExtra("name");
+        }
+        if (TextUtils.isEmpty(mListCondition)) {
+            mListCondition = "1=1";
+        }
+
+      
+    }
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.activity_bill_input);
+        initView();
+        init();
+    }
+
+    @Override
+    public boolean onCreateOptionsMenu(Menu menu) {
+        getMenuInflater().inflate(R.menu.menu_bill_input, menu);
+        return super.onCreateOptionsMenu(menu);
+    }
+
+
+    @Override
+    public boolean onOptionsItemSelected(MenuItem item) {
+        if (item.getItemId() == R.id.saveAndSubmit) {
+            mBillPresenter.saveAndSubmit(mBillAdapter.getBillGroupModels());
+        } else if (item.getItemId() == R.id.list) {
+            toDataFormList();
+        }
+        return super.onOptionsItemSelected(item);
+    }
+
+    public void toDataFormList() {
+        ArrayList<BillListConfig> billListConfigs = new ArrayList<>();
+        BillListConfig mBillListConfig = new BillListConfig();
+        mBillListConfig.setTitle("");
+        mBillListConfig.setCaller(mBillPresenter.getFormCaller());
+        mBillListConfig.setCondition(mListCondition);
+        billListConfigs.add(mBillListConfig);
+        startActivity(new Intent(ct, BillListActivity.class)
+                .putExtra(Constants.Intents.CONFIG, billListConfigs)
+                .putExtra(Constants.Intents.TITLE, getToolBarTitle())
+                .putExtra(Constants.Intents.DETAILS_CLASS, BillDetailsActivity.class)
+        );
+//        startActivity(new Intent("com.modular.work.OA.erp.activity.form.FormListSelectActivity")
+//                .putExtra("caller", mBillPresenter.getFormCaller())
+//                .putExtra("statusKey", mBillPresenter.getStatusField())//传状态key
+//                .putExtra("title", getToolBarTitle()));
+
+    }
+
+
+    private void initView() {
+        mRecyclerView = findViewById(R.id.mRecyclerView);
+        mRecyclerView.setLayoutManager(new LinearLayoutManager(ct));
+        mRecyclerView.addItemDecoration(new DividerItemDecoration(ct, LinearLayout.VERTICAL));
+        if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.KITKAT) {
+            final View mRootLL = findViewById(R.id.mRootLL);
+            mRootLL.post(new Runnable() {
+                @Override
+                public void run() {
+                    int top = StatusBarUtil.getStatusBarHeight(ct);
+                    mRootLL.setTranslationY(-top);
+                }
+            });
+        }
+    }
+
+    @Override
+    public void setAdapter(List<BillGroupModel> groupModels) {
+        if (mBillAdapter == null) {
+            mBillAdapter = newBillAdapter(groupModels);
+            mRecyclerView.setAdapter(mBillAdapter);
+        } else {
+            mBillAdapter.setBillGroupModels(groupModels);
+            mBillAdapter.notifyDataSetChanged();
+        }
+
+        updateItemsValue(name,phone);
+    }
+
+
+    @Override
+    public void updateFileOk() {
+        dimssLoading();
+        mBillPresenter.saveAndSubmit(mBillAdapter.getBillGroupModels());
+    }
+
+    @Override
+    public void toSelect(int position, BillGroupModel.BillModel model) {
+        if (TextUtils.isEmpty(model.getType())) return;
+        if (!ListUtils.isEmpty(model.getLocalDatas())) {
+            //本地数据不为空的情况下
+            selectByLocal(position, model);
+        } else {
+            //本地数据为空,获取网络数据
+            switch (model.getType()) {
+                case "C"://单项选择
+                    getComboValue(position, model);
+                    break;
+                case "D"://日期选择
+                case "T"://时间选择
+                    showDateDialog(!model.getCaption().contains("生日"), position);
+                    break;
+                case "SF":
+                case "DF":
+                    //DBFind 选择
+                    findBydbFind(model);
+                    break;
+                case "MF":
+                    break;
+
+            }
+        }
+    }
+
+    @Override
+    public void toEnclosureSelect(int position, BillGroupModel.BillModel model) {
+        selectPosition = position;
+        if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT) {
+            toSelectEnclosure();
+        } else {
+            showSelectPictureDialog(model);
+        }
+    }
+
+
+    private void toSelectEnclosure() {
+        Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
+        intent.setType("*/*");//无类型限制
+        intent.addCategory(Intent.CATEGORY_OPENABLE);
+        startActivityForResult(intent, REQUESTCODE_ENCLOSURE);
+    }
+
+    private void toSelectEnclosure(BillGroupModel.BillModel model) {
+        Intent intent = new Intent(ct, ImgFileListActivity.class);
+        intent.putExtra("MAX_SIZE", 9);
+        intent.putExtra("CURRENT_SIZE", ListUtils.getSize(model.getLocalDatas()));
+        startActivityForResult(intent, REQUESTCODE_ENCLOSURE_LOW);
+    }
+
+    private void showSelectPictureDialog(final BillGroupModel.BillModel model) {
+        String[] items = new String[]{getString(R.string.c_take_picture), getString(R.string.c_photo_album)};
+        android.app.AlertDialog.Builder builder = new android.app.AlertDialog.Builder(this).setSingleChoiceItems(items, 0,
+                new DialogInterface.OnClickListener() {
+                    @Override
+                    public void onClick(DialogInterface dialog, int which) {
+                        if (which == 0) {
+                            try {
+                                takePhoto();
+                            } catch (Exception e) {
+                                String message = e.getMessage();
+                                if (!StringUtil.isEmpty(message) && message.contains("Permission")) {
+                                    ToastUtil.showToast(ct, R.string.not_system_permission);
+                                }
+                            }
+                        } else {
+                            toSelectEnclosure(model);
+                        }
+                        dialog.dismiss();
+                    }
+                });
+        builder.show();
+    }
+
+    private Uri mNewPhotoUri;
+
+    private void takePhoto() throws Exception {
+        Uri mNewPhotoUri = CameraUtil.getOutputMediaFileUri(mContext, MyApplication.getInstance().mLoginUser.getUserId(), CameraUtil.MEDIA_TYPE_IMAGE);
+        if (mNewPhotoUri != null) {
+            CameraUtil.captureImage((Activity) ct,
+                    mNewPhotoUri,
+                    REQUEST_CODE_CAPTURE_PHOTO);
+        } else {
+            ToastUtil.showToast(this, "uri is null");
+        }
+    }
+
+    public void getComboValue(int position, BillGroupModel.BillModel model) {
+        HashMap param = new HashMap<>();
+        param.put("caller", mBillPresenter.getFormCaller());
+        param.put("field", model.getField());
+        Bundle bundle = new Bundle();
+        bundle.putSerializable("param", param);
+        Intent intent = new Intent(ct, SelectActivity.class);
+        intent.putExtra("type", 1);
+        intent.putExtra("reid", R.style.OAThemeMeet);
+        intent.putExtras(bundle);
+        intent.putExtra("key", "combdatas");
+        intent.putExtra("showKey", "DISPLAY");
+        intent.putExtra("action", "mobile/common/getComboValue.action");
+        intent.putExtra("title", model.getCaption());
+        intent.putExtra("id", position);//需要把zum
+        startActivityForResult(intent, REQUESTCODE_C_NET);
+    }
+
+    /**
+     * 选择日期
+     */
+    public void showDateDialog(final boolean needTime, final int position) {
+        DateTimePicker picker = new DateTimePicker(this, needTime ? DateTimePicker.HOUR_OF_DAY : DateTimePicker.YEAR_MONTH_DAY);
+        picker.setRange(CalendarUtil.getYear() - 100, CalendarUtil.getYear() + 20);
+        if (needTime) {
+            picker.setSelectedItem(CalendarUtil.getYear(), CalendarUtil.getMonth(), CalendarUtil.getDay(), CalendarUtil.getHour(), CalendarUtil.getMinute());
+        } else {
+            picker.setSelectedItem(CalendarUtil.getYear(), CalendarUtil.getMonth(), CalendarUtil.getDay());
+        }
+        picker.setOnDateTimePickListener(new DateTimePicker.OnYearMonthDayTimePickListener() {
+            @Override
+            public void onDateTimePicked(String year, String month, String day, String hour, String minute) {
+                String date = year + "-" + month + "-" + day;
+                String dateTime = date + " " + hour + ":" + minute + ":00";
+                mBillAdapter.updateBillModelValues(position, needTime ? dateTime : date, dateTime);
+            }
+        });
+
+        picker.show();
+    }
+
+    /**
+     * dbfind 查找
+     *
+     * @param model
+     */
+    public void findBydbFind(BillGroupModel.BillModel model) {
+        String gridCaller = "";
+        String fieldKey = model.getField();
+        BillGroupModel mGroupModel = mBillAdapter.getBillGroupModel(model.getGroupIndex());
+        boolean isForm = mGroupModel == null || mGroupModel.isForm();
+        if (!isForm && !StringUtil.isEmpty(model.getFindFunctionName())) {
+            String[] mFindFunctionNames = model.getFindFunctionName().split("\\|");
+            if (mFindFunctionNames != null && mFindFunctionNames.length > 1) {
+                gridCaller = mFindFunctionNames[0];
+//                fieldKey = mFindFunctionNames[1];
+            }
+        }
+        String mCondition = "";
+        if (dbFindCondition != null && dbFindCondition.containsKey(fieldKey)) {
+            mCondition = dbFindCondition.get(fieldKey);
+        }
+        startActivityForResult(new Intent(ct, SelectNetAcitivty.class)
+                        .putExtra("fieldKey", fieldKey)
+                        .putExtra("caller", mBillPresenter.getFormCaller())
+                        .putExtra("gCaller", gridCaller)
+                        .putExtra("mCondition", mCondition)
+                        .putExtra("isDevice", false)
+                        .putExtra("isForm", isForm)
+                        .putExtra("groupId", model.getGroupIndex())
+                , REQUESTCODE_DB_FIND);
+    }
+
+    /**
+     * 选择本地数据选项
+     *
+     * @param position 索引
+     * @param model    点击对象
+     */
+    public void selectByLocal(int position, BillGroupModel.BillModel model) {
+        ArrayList<SelectBean> beans = new ArrayList<>();
+        SelectBean bean;
+        for (BillGroupModel.LocalData localData : model.getLocalDatas()) {
+            bean = new SelectBean();
+            bean.setJson(localData.display);
+            bean.setShowName(localData.value);
+            bean.setName(localData.value);
+            bean.setIndex(position);
+            beans.add(bean);
+        }
+        Intent intent = new Intent(ct, SelectActivity.class);
+        intent.putExtra("type", 2);
+        intent.putParcelableArrayListExtra("data", beans);
+        intent.putExtra("title", model.getCaption());
+        startActivityForResult(intent, REQUESTCODE_C);
+    }
+
+    @Override
+    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+        super.onActivityResult(requestCode, resultCode, data);
+        if (data == null) return;
+        switch (requestCode) {
+            case REQUESTCODE_C_NET:
+                SelectBean mSelectBeanC = data.getParcelableExtra("data");
+                int position = data.getIntExtra("id", -1);
+                if (mSelectBeanC != null && position >= 0) {
+                    String display = StringUtil.isEmpty(mSelectBeanC.getName()) ? "" : mSelectBeanC.getName();
+                    String value = StringUtil.isEmpty(mSelectBeanC.getName()) ? "" : mSelectBeanC.getName();
+                    mBillAdapter.updateBillModelValues(position, value, display);
+                }
+                break;
+            case REQUESTCODE_C:
+                mSelectBeanC = data.getParcelableExtra("data");
+                if (mSelectBeanC != null) {
+                    position = mSelectBeanC.getIndex();
+                    String value = StringUtil.isEmpty(mSelectBeanC.getShowName()) ? "" : mSelectBeanC.getShowName();
+                    String display = StringUtil.isEmpty(mSelectBeanC.getJson()) ? "" : mSelectBeanC.getJson();
+                    mBillAdapter.updateBillModelValues(position, value, display);
+                }
+                break;
+            case REQUESTCODE_DB_FIND:
+                String json = data.getStringExtra("data");
+                int groupIndex = data.getIntExtra("groupId", 0);
+                handlerSelectDbFind(JSON.parseObject(json), groupIndex);
+                break;
+            case 0x22:
+                SelectBean d = data.getParcelableExtra("data");
+                if (d == null) return;
+                String name = StringUtil.isEmpty(d.getName()) ? "" : d.getName();
+                String jsonObject = StringUtil.isEmpty(d.getJson()) ? "" : d.getJson();
+                LogUtil.i("gong", "json=" + jsonObject);
+                mBillPresenter.getEmnameByReturn(name, jsonObject);
+                break;
+            case REQUESTCODE_ENCLOSURE:
+                if (resultCode == Activity.RESULT_OK) {
+                    String path;
+                    Uri uri = data.getData();
+                    if ("file".equalsIgnoreCase(uri.getScheme())) {//使用第三方应用打开
+                        path = uri.getPath();
+                    } else if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT) {//4.4以后
+                        path = FileUtils.getPath(this, uri);
+                    } else {//4.4以下下系统调用方法
+                        path = FileUtils.getRealPathFromURI(this, uri);
+                    }
+                    LogUtil.i("gong", "uri=" + uri.toString());
+                    File file = null;
+                    if (!TextUtils.isEmpty(path)) {
+                        file = new File(path);
+                    }
+                    if (file != null && file.exists() && file.isFile()) {
+                        String value = file.getName();
+                        String display = path;
+                        mBillAdapter.addBillModelData(selectPosition, value, display);
+                        selectPosition = -1;
+                    }
+
+                }
+            case REQUEST_CODE_CAPTURE_PHOTO:
+                if (resultCode == Activity.RESULT_OK) {
+                    if (mNewPhotoUri != null) {
+                        String value = mNewPhotoUri.getPath();
+                        String display = value;
+                        mBillAdapter.addBillModelData(selectPosition, value, display);
+                        selectPosition = -1;
+                    } else {
+                        ToastUtil.showToast(this, R.string.c_take_picture_failed);
+                    }
+                }
+                break;
+            case REQUESTCODE_ENCLOSURE_LOW:
+                List<String> filePaths = data.getStringArrayListExtra("files");
+                if (!ListUtils.isEmpty(filePaths)) {
+                    File file = null;
+                    List<BillGroupModel.LocalData> localDatas = new ArrayList<>();
+                    for (String filePath : filePaths) {
+                        if (!TextUtils.isEmpty(filePath)) {
+                            file = new File(filePath);
+                        }
+                        if (file != null && file.exists() && file.isFile()) {
+                            BillGroupModel.LocalData localData = new BillGroupModel.LocalData();
+                            localData.value = file.getName();
+                            localData.display = filePath;
+                            localDatas.add(localData);
+                        }
+                    }
+                    mBillAdapter.addBillModelData(selectPosition, localDatas);
+                    selectPosition = -1;
+                }
+                break;
+        }
+    }
+
+    protected void handlerSelectDbFind(JSONObject object, int groupId) {
+        try {
+            mBillPresenter.setmId(Integer.valueOf(object.getString("cu_id")));
+            LogUtil.d("Arison", "groupId:" + groupId + " object:" + object.toJSONString());
+            BillGroupModel mBillGroupModel = mBillAdapter.getBillGroupModel(groupId);
+            if (mBillGroupModel != null) {
+                if (!ListUtils.isEmpty(mBillGroupModel.getShowBillFields())) {
+                    for (BillGroupModel.BillModel e : mBillGroupModel.getShowBillFields()) {
+                        if (object.containsKey(e.getField())) {
+                            e.setValue(JSONUtil.getText(object, e.getField()));
+                        }
+                    }
+                }
+                if (!ListUtils.isEmpty(mBillGroupModel.getHideBillFields())) {
+                    for (BillGroupModel.BillModel e : mBillGroupModel.getHideBillFields()) {
+                        if (object.containsKey(e.getField())) {
+                            e.setValue(JSONUtil.getText(object, e.getField()));
+                        }
+                    }
+                }
+            }
+            mBillAdapter.notifyDataSetChanged();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+
+
+//    关联客户
+    protected void updateItemsValue(String name,String phone) {
+        try {
+            List<BillGroupModel>  groupModels=  mBillAdapter.getBillGroupModels();
+            if (groupModels.size()>2){
+                for (int i=2;i<groupModels.size();i++){
+                    groupModels.remove(i);
+                }
+            }
+
+            BillGroupModel mBillGroupModel=groupModels.get(1);//第一个明细
+            LogUtil.d("arison","BillGroupModel:"+JSON.toJSONString(mBillGroupModel));
+            if (!ListUtils.isEmpty(mBillGroupModel.getShowBillFields())) {
+                for (BillGroupModel.BillModel e : mBillGroupModel.getShowBillFields()) {
+                    if ("ct_name".equals(e.getField())) {
+                        e.setValue(name);
+                    }
+                    if ("ct_mobile".equals(e.getField())) {
+                        e.setValue(phone);
+                    }
+                }
+    
+                for (BillGroupModel.BillModel e : mBillGroupModel.getHideBillFields()) {
+                    if ("ct_id".equals(e.getField())) {
+                        e.setValue("0");
+                    }
+                    //ct_cuid
+    //                if ("ct_mobile".equals(e.getField())) {
+    //                    e.setValue("13266699268");
+    //                }
+                }
+            }
+
+            mBillAdapter.notifyDataSetChanged();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+}

+ 21 - 1
app_modular/appworks/src/main/java/com/uas/appworks/crm3_0/activity/ContactsDetialActivity.java

@@ -223,7 +223,27 @@ public class ContactsDetialActivity extends BaseActivity implements OnItemsButto
       findViewById(R.id.tv_timeout).setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View view) {
-              
+              if (!ListUtils.isEmpty(pData)){
+                  String phones = "";
+                  for (int i = 0; i < pData.size(); i++) {
+                      if (!StringUtil.isEmpty(pData.get(i).getValue())) {
+                          if (i == pData.size() - 1) {
+                              phones = phones + pData.get(i).getValue();
+                          } else {
+                              phones = phones + pData.get(i).getValue() + "/";
+                          }
+                      }else{
+                          ToastMessage("请输入手机号!");
+                          return;
+                      }
+                  }
+              }
+              startActivity(new Intent(mContext,BillInputBindActivity.class)
+                      .putExtra(com.core.app.Constants.Intents.CALLER, "Contact")
+                      .putExtra(com.core.app.Constants.Intents.TITLE, "客户联系人")
+                      .putExtra("phone",pData.get(0).getValue())
+                      .putExtra("name",getEtName().getText().toString())
+                      .putExtra(com.core.app.Constants.Intents.ID, 0));
           }
       });
         

+ 1 - 0
app_modular/appworks/src/main/java/com/uas/appworks/crm3_0/activity/ContactsListActivity.java

@@ -44,6 +44,7 @@ public class ContactsListActivity extends BaseActivity implements  ContactsLocal
      private ContactsListFragment fragmentMeList,fragmentCusList;
      private LocalContactsListFragment localContactsListFragment;
      private MenuVoiceSearchView mVoiceSearchView;
+    
      
      
 

+ 17 - 1
app_modular/appworks/src/main/java/com/uas/appworks/crm3_0/activity/CustomerManageActivity.java

@@ -15,6 +15,7 @@ import android.widget.AdapterView;
 import android.widget.ImageView;
 import android.widget.ListView;
 import android.widget.PopupWindow;
+import android.widget.ScrollView;
 import android.widget.SimpleAdapter;
 import android.widget.TextView;
 
@@ -29,6 +30,8 @@ import com.core.utils.CommonUtil;
 import com.core.utils.time.wheel.DatePicker;
 import com.core.widget.MyListView;
 import com.core.widget.view.MyGridView;
+import com.handmark.pulltorefresh.library.PullToRefreshBase;
+import com.handmark.pulltorefresh.library.PullToRefreshScrollView;
 import com.modular.apputils.activity.BillDetailsActivity;
 import com.modular.apputils.activity.BillInputActivity;
 import com.modular.apputils.activity.BillListActivity;
@@ -66,6 +69,7 @@ public class CustomerManageActivity extends OABaseActivity implements ICustomerM
     private TextView customerCareRefTimeTv;
     private MyListView customerCareLv;
     private ImageView customerCareRefIv;
+    private PullToRefreshScrollView mPullToRefreshScrollView;
 
     private CustomerManagePresenter mCustomerManagePresenter = null;
 
@@ -104,6 +108,7 @@ public class CustomerManageActivity extends OABaseActivity implements ICustomerM
         customerCareRefTimeTv = findViewById(R.id.customerCareRefTimeTv);
         customerCareLv = findViewById(R.id.customerCareLv);
         customerCareRefIv = findViewById(R.id.customerCareRefIv);
+        mPullToRefreshScrollView = findViewById(R.id.mPullToRefreshScrollView);
 
         addGridView = (MyGridView) findViewById(R.id.addGridView);
 
@@ -135,6 +140,14 @@ public class CustomerManageActivity extends OABaseActivity implements ICustomerM
         customerCareRefIv.setOnClickListener(mOnClickListener);
         visitTv.setOnClickListener(mOnClickListener);
         visitRefIv.setOnClickListener(mOnClickListener);
+        mPullToRefreshScrollView.setMode(PullToRefreshBase.Mode.PULL_FROM_START);
+        mPullToRefreshScrollView.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener<ScrollView>() {
+            @Override
+            public void onRefresh(PullToRefreshBase<ScrollView> refreshView) {
+                mCustomerManagePresenter.loadAllData();
+            }
+        });
+
         addGridView.setAdapter(new EasyBaseAdapter(ct, getAddItems()) {
             @Override
             public View bindView(View view, int position, EasyBaseModel model) {
@@ -442,6 +455,7 @@ public class CustomerManageActivity extends OABaseActivity implements ICustomerM
 
     @Override
     public void setShowCustomerAdapter(List<EasyBaseModel> models) {
+        mPullToRefreshScrollView.onRefreshComplete();
         showCustomerRefIv.setAnimation(null);
         showCustomerRefTimeTv.setText(DateFormatUtil.long2Str(DateFormatUtil.YMD_HMS));
         if (showCustomerAdapter == null) {
@@ -491,6 +505,7 @@ public class CustomerManageActivity extends OABaseActivity implements ICustomerM
 
     @Override
     public void setForgetCustomerAdapter(List<EasyBaseModel> models) {
+        mPullToRefreshScrollView.onRefreshComplete();
         forgetCustomerRefIv.setAnimation(null);
         forgetCustomerRefTimeTv.setText(DateFormatUtil.long2Str(DateFormatUtil.YMD_HMS));
         if (mCustomerForgetAdapter == null) {
@@ -503,7 +518,7 @@ public class CustomerManageActivity extends OABaseActivity implements ICustomerM
 
     @Override
     public void setCustomerCareAdapter(List<EasyBaseModel> models) {
-
+        mPullToRefreshScrollView.onRefreshComplete();
         customerCareRefIv.setAnimation(null);
         customerCareRefTimeTv.setText(DateFormatUtil.long2Str(DateFormatUtil.YMD_HMS));
         if (mCustomerCareAdapter == null) {
@@ -516,6 +531,7 @@ public class CustomerManageActivity extends OABaseActivity implements ICustomerM
 
     @Override
     public void setVisitAdapter(List<EasyBaseModel> models) {
+        mPullToRefreshScrollView.onRefreshComplete();
         visitRefIv.setAnimation(null);
         visitRefTimeTv.setText(DateFormatUtil.long2Str(DateFormatUtil.YMD_HMS));
         if (mVisitAdapter == null) {

+ 16 - 3
app_modular/appworks/src/main/java/com/uas/appworks/crm3_0/adapter/ContactLocalSortAdapter.java

@@ -5,13 +5,15 @@ import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.BaseAdapter;
+import android.widget.FrameLayout;
 import android.widget.ImageView;
 import android.widget.SectionIndexer;
 import android.widget.TextView;
 
 import com.common.data.StringUtil;
 import com.common.system.SystemUtil;
-import com.core.utils.NotifyUtils;
+import com.core.app.MyApplication;
+import com.core.utils.ToastUtil;
 import com.core.utils.sortlist.BaseSortModel;
 import com.core.utils.sortlist.PingYinUtil;
 import com.uas.appcontact.model.contacts.ContactsModel;
@@ -34,6 +36,15 @@ public class ContactLocalSortAdapter extends BaseAdapter implements SectionIndex
     private boolean isRefeshed;
     private Map<Integer, String> isLog;
 
+    private FrameLayout frameLayout;
+
+    public FrameLayout getFrameLayout() {
+        return frameLayout;
+    }
+
+    public void setFrameLayout(FrameLayout frameLayout) {
+        this.frameLayout = frameLayout;
+    }
 
     public ContactLocalSortAdapter(Context context, List<BaseSortModel<ContactsModel>> sortFriends) {
         mContext = context;
@@ -112,10 +123,12 @@ public class ContactLocalSortAdapter extends BaseAdapter implements SectionIndex
                     if (matcher.matches()) {
                         SystemUtil.phoneAction(mContext, model.getPhone());
                     } else {
-                        NotifyUtils.ToastMessage(mContext,mContext.getString(R.string.not_format_phone));
+                      //  NotifyUtils.ToastMessage(mContext,mContext.getString(R.string.not_format_phone));
+                        ToastUtil.showToast(MyApplication.getInstance(),mContext.getString(R.string.not_format_phone));
                     }
                 } else {
-                    NotifyUtils.ToastMessage(mContext,mContext.getString(R.string.not_phone));
+                   // NotifyUtils.ToastMessage(mContext,mContext.getString(R.string.not_phone));
+                    ToastUtil.showToast(MyApplication.getInstance(),mContext.getString(R.string.not_format_phone));
                 }
             }
         });

+ 21 - 8
app_modular/appworks/src/main/java/com/uas/appworks/crm3_0/adapter/ContactSortAdapter.java

@@ -1,18 +1,20 @@
 package com.uas.appworks.crm3_0.adapter;
 
 import android.app.Activity;
-import android.content.Context;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.BaseAdapter;
+import android.widget.FrameLayout;
 import android.widget.ImageView;
 import android.widget.SectionIndexer;
 import android.widget.TextView;
 
 import com.common.data.StringUtil;
 import com.common.system.SystemUtil;
-import com.core.utils.NotifyUtils;
+import com.core.app.MyApplication;
+import com.core.base.BaseActivity;
+import com.core.utils.ToastUtil;
 import com.core.utils.sortlist.BaseSortModel;
 import com.uas.appworks.R;
 import com.uas.appworks.crm3_0.model.ContactsBean;
@@ -29,13 +31,22 @@ import se.emilsjolander.stickylistheaders.StickyListHeadersAdapter;
 
 public class ContactSortAdapter extends BaseAdapter implements SectionIndexer, StickyListHeadersAdapter {
 
-    private Context mContext;
+    private BaseActivity mContext;
     private List<BaseSortModel<ContactsBean>> mSortFriends;
     private boolean isRefeshed;
     private Map<Integer, String> isLog;
+    
+    private FrameLayout frameLayout;
+
+    public FrameLayout getFrameLayout() {
+        return frameLayout;
+    }
 
+    public void setFrameLayout(FrameLayout frameLayout) {
+        this.frameLayout = frameLayout;
+    }
 
-    public ContactSortAdapter(Context context, List<BaseSortModel<ContactsBean>> sortFriends) {
+    public ContactSortAdapter(BaseActivity context, List<BaseSortModel<ContactsBean>> sortFriends) {
         mContext = context;
         mSortFriends = (sortFriends == null ? new ArrayList<BaseSortModel<ContactsBean>>() : sortFriends);
         isLog = new HashMap<>();
@@ -122,10 +133,12 @@ public class ContactSortAdapter extends BaseAdapter implements SectionIndexer, S
                             }
 
                         } else {
-                            NotifyUtils.ToastMessage(mContext,mContext.getString(com.uas.appworks.R.string.not_format_phone));
+                           // NotifyUtils.ToastMessage(mContext,mContext.getString(com.uas.appworks.R.string.not_format_phone));
+                            ToastUtil.showToast(MyApplication.getInstance(),mContext.getString(com.uas.appworks.R.string.not_format_phone));
                         }
                     } else {
-                        NotifyUtils.ToastMessage(mContext,mContext.getString(com.uas.appworks.R.string.not_phone));
+                        ToastUtil.showToast(MyApplication.getInstance(),mContext.getString(com.uas.appworks.R.string.not_phone));
+                       // NotifyUtils.ToastMessage(mContext,mContext.getString(com.uas.appworks.R.string.not_phone));
                     }
                 }
             });
@@ -141,10 +154,10 @@ public class ContactSortAdapter extends BaseAdapter implements SectionIndexer, S
                                 SystemUtil.phoneAction(mContext, phone);
                             }
                         } else {
-                            NotifyUtils.ToastMessage(mContext,mContext.getString(com.uas.appworks.R.string.not_format_phone));
+                            ToastUtil.showToast(MyApplication.getInstance(),MyApplication.getInstance().getString(R.string.not_format_phone));
                         }
                     } else {
-                        NotifyUtils.ToastMessage(mContext,mContext.getString(com.uas.appworks.R.string.not_phone));
+                        ToastUtil.showToast(MyApplication.getInstance(),MyApplication.getInstance().getString(R.string.not_phone));
                     }
                 }
             });

+ 4 - 2
app_modular/appworks/src/main/java/com/uas/appworks/crm3_0/fragment/ContactsListFragment.java

@@ -64,7 +64,7 @@ public class ContactsListFragment extends ViewPagerLazyFragment implements OnSma
     private int tabItem;
     List<ContactsBean> datas;
     ItemContactsMeAdapter adapter;
-
+    
 
     StickyListHeadersListView refreshListView;
     private BaseComparator comparator;
@@ -151,6 +151,7 @@ public class ContactsListFragment extends ViewPagerLazyFragment implements OnSma
         });
         
         mAdapter = new ContactSortAdapter(ct, allDatas);
+        mAdapter.setFrameLayout(getContentView());
         refreshListView.setAdapter(mAdapter);
         
         dialogTV = (TextView) findViewById(R.id.dialogTV);
@@ -192,6 +193,7 @@ public class ContactsListFragment extends ViewPagerLazyFragment implements OnSma
         switch (tabItem){
             case 1:
                 //我的联系人-不分页
+                progressDialog.show();
                 HttpClient httpClient = new HttpClient.Builder("https://mobile.ubtob.com:8443/linkman/")
                         .isDebug(true)
                         .build();
@@ -210,7 +212,7 @@ public class ContactsListFragment extends ViewPagerLazyFragment implements OnSma
                             
                             allDatas=getAllDatas(datas);
                             mAdapter.setData(allDatas);
-                            
+                            progressDialog.dismiss();
 //                            adapter=new ItemContactsMeAdapter(getActivity(),datas);
 //                            mListView.setAdapter(adapter);
 //                            LogUtil.d(TAG,JSON.toJSONString(datas));

+ 1 - 0
app_modular/appworks/src/main/java/com/uas/appworks/crm3_0/fragment/LocalContactsListFragment.java

@@ -82,6 +82,7 @@ public class LocalContactsListFragment extends ViewPagerLazyFragment implements
     private void initView() {
         refreshListView =  findViewById(R.id.mListView);
         mAdapter = new ContactLocalSortAdapter(ct, allDatas);
+        mAdapter.setFrameLayout(getContentView());
         refreshListView.setAdapter(mAdapter);
 
         dialogTV = findViewById(R.id.dialogTV);

+ 18 - 4
app_modular/appworks/src/main/java/com/uas/appworks/crm3_0/fragment/ViewPagerLazyFragment.java

@@ -6,13 +6,14 @@ import android.os.Bundle;
 import android.support.annotation.Nullable;
 import android.support.v4.app.Fragment;
 import android.support.v4.app.FragmentTransaction;
-import android.support.v7.app.AppCompatActivity;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
+import android.widget.FrameLayout;
 
 import com.common.LogUtil;
 import com.common.data.StringUtil;
+import com.core.base.BaseActivity;
 import com.core.utils.CommonUtil;
 import com.core.widget.CustomProgressDialog;
 import com.me.network.app.http.HttpClient;
@@ -21,6 +22,7 @@ import com.me.network.app.http.rx.ResultSubscriber;
 import com.modular.apputils.listener.OnSmartHttpListener;
 import com.modular.apputils.network.Parameter;
 import com.modular.apputils.network.Tags;
+import com.uas.appworks.R;
 
 /**
  * 时间:2017/10/30 17:18
@@ -29,7 +31,8 @@ import com.modular.apputils.network.Tags;
 public abstract class ViewPagerLazyFragment extends Fragment {
     private static final String STATE_SAVE_IS_HIDDEN = "STATE_SAVE_IS_HIDDEN";
     protected View rootView;
-    protected AppCompatActivity ct;
+    protected BaseActivity ct;
+    private FrameLayout contentFl;
 
     private boolean isVisible = false;//当前Fragment是否可见
     private boolean isInitView = false;//是否与View建立起映射关系
@@ -49,7 +52,7 @@ public abstract class ViewPagerLazyFragment extends Fragment {
     @Override
     public void onAttach(Context context) {
         super.onAttach(context);
-        ct = (AppCompatActivity) context;
+        ct = (BaseActivity) context;
     }
 
     public View getRootView() {
@@ -92,7 +95,13 @@ public abstract class ViewPagerLazyFragment extends Fragment {
                 parent.removeView(rootView);
             }
         } else {
-            rootView = inflater.inflate(inflater(), container, false);
+            rootView = inflater.inflate(R.layout.base_bar_layout, container, false);
+            contentFl = rootView.findViewById(R.id.contentFl);
+            int layoutId = inflater();
+            if (layoutId > 0) {
+                View contentView = inflater.inflate(layoutId, container, false);
+                contentFl.addView(contentView);
+            }
         }
         isInitView = true;
         progressDialog = CustomProgressDialog.createDialog(getContext());
@@ -120,6 +129,11 @@ public abstract class ViewPagerLazyFragment extends Fragment {
         }
     }
 
+    public FrameLayout getContentView() {
+        return contentFl;
+    }
+
+
     @Override
     public void setUserVisibleHint(boolean isVisibleToUser) {
         if (isVisibleToUser) {

+ 4 - 4
app_modular/appworks/src/main/java/com/uas/appworks/utils/TravelUtils.java

@@ -32,9 +32,9 @@ import java.util.Map;
 
 public class TravelUtils {
 
-    public static void reserve(Context ct, String appkey, String appSceret, BusinessTravel model) {
+    public static void reserve(Context ct,String cusCode, String appkey, String appSceret, BusinessTravel model) {
         if (model.getType() == BusinessTravel.UNKOWN || BusinessTravel.TITLE == model.getType()) {
-            showSelect(ct, appkey, appSceret, model);
+            showSelect(ct,cusCode, appkey, appSceret, model);
             return;
         }
         Map<String, Object> map = new HashMap<>();
@@ -129,7 +129,7 @@ public class TravelUtils {
         }
     }
 
-    public static void showSelect(final Context ct, final String appkey, final String appSceret, final BusinessTravel model) {
+    public static void showSelect(final Context ct,final String cusCode, final String appkey, final String appSceret, final BusinessTravel model) {
         List<String> items = new ArrayList<>();
         items.add("火车票");
         items.add("飞机票");
@@ -152,7 +152,7 @@ public class TravelUtils {
                                 model.setType(BusinessTravel.AIR);
                                 break;
                         }
-                        reserve(ct, appkey, appSceret, model);
+                        reserve(ct,cusCode, appkey, appSceret, model);
                         return true;
                     }
                 }).positiveText(MyApplication.getInstance().getString(com.uas.appworks.R.string.common_sure)).show();

+ 3 - 2
app_modular/appworks/src/main/res/layout/activity_customer_manage.xml

@@ -1,6 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
-<com.core.widget.CustomerScrollView xmlns:android="http://schemas.android.com/apk/res/android"
+<com.handmark.pulltorefresh.library.PullToRefreshScrollView xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
+    android:id="@+id/mPullToRefreshScrollView"
     android:layout_height="match_parent">
 
     <LinearLayout
@@ -270,4 +271,4 @@
         </RelativeLayout>
         <!--end 拜访统计-->
     </LinearLayout>
-</com.core.widget.CustomerScrollView>
+</com.handmark.pulltorefresh.library.PullToRefreshScrollView>

+ 2 - 1
app_modular/appworks/src/main/res/layout/item_contacts_me.xml

@@ -34,7 +34,7 @@
         android:layout_height="match_parent"
         android:gravity="center_vertical"
         android:layout_toLeftOf="@+id/iv_icon"
-        android:layout_marginRight="@dimen/dp_4"
+        android:layout_marginRight="@dimen/dp_10"
         android:text=""
         android:layout_centerInParent="true"/>
     <ImageView
@@ -43,6 +43,7 @@
         android:layout_height="match_parent"
         android:foregroundGravity="center_vertical"
         android:layout_alignParentRight="true"
+        android:layout_marginRight="15dp"
         android:layout_centerInParent="true"
         android:src="@drawable/phone"/>
 </RelativeLayout>

Някои файлове не бяха показани, защото твърде много файлове са промени