Просмотр исходного кода

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

# Conflicts:
#	app_modular/appworks/src/main/AndroidManifest.xml
#	app_modular/appworks/src/main/java/com/uas/appworks/crm3_0/activity/CustomerManageActivity.java
RaoMeng 7 лет назад
Родитель
Сommit
8f9ca353d0
23 измененных файлов с 935 добавлено и 207 удалено
  1. 1 1
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/me/MeFragment.java
  2. 1 1
      app_core/common/src/main/assets/work_menu.json
  3. 2 0
      app_core/common/src/main/java/com/core/app/Constants.java
  4. 3 2
      app_modular/apputils/src/main/java/com/modular/apputils/activity/BillInputActivity.java
  5. 3 3
      app_modular/apputils/src/main/java/com/modular/apputils/presenter/BillPresenter.java
  6. 14 8
      app_modular/appworks/src/main/AndroidManifest.xml
  7. 1 0
      app_modular/appworks/src/main/java/com/uas/appworks/adapter/BillListAdapter.java
  8. 108 0
      app_modular/appworks/src/main/java/com/uas/appworks/adapter/BillListDetailsAdapter.java
  9. 1 1
      app_modular/appworks/src/main/java/com/uas/appworks/adapter/CustomerBillInputAdapter.java
  10. 261 0
      app_modular/appworks/src/main/java/com/uas/appworks/crm3_0/activity/BillSearchActivity.java
  11. 3 11
      app_modular/appworks/src/main/java/com/uas/appworks/crm3_0/activity/CustomerBillInputActivity.java
  12. 4 92
      app_modular/appworks/src/main/java/com/uas/appworks/crm3_0/activity/CustomerDetails3_0Activity.java
  13. 12 11
      app_modular/appworks/src/main/java/com/uas/appworks/crm3_0/activity/CustomerManageActivity.java
  14. 121 36
      app_modular/appworks/src/main/java/com/uas/appworks/crm3_0/activity/CustomerVisitActivity.java
  15. 188 0
      app_modular/appworks/src/main/java/com/uas/appworks/crm3_0/activity/CustomerVisitDetailsActivity.java
  16. 38 4
      app_modular/appworks/src/main/java/com/uas/appworks/crm3_0/fragment/CustomerListDetailsFragment.java
  17. 1 8
      app_modular/appworks/src/main/java/com/uas/appworks/crm3_0/fragment/CustomerListFragment.java
  18. 39 4
      app_modular/appworks/src/main/java/com/uas/appworks/crm3_0/fragment/CustomerMapDetailsFragment.java
  19. 18 9
      app_modular/appworks/src/main/java/com/uas/appworks/model/VisitPlan.java
  20. 1 1
      app_modular/appworks/src/main/java/com/uas/appworks/presenter/CustomerDetailsPresenter.java
  21. 62 0
      app_modular/appworks/src/main/res/layout/activity_bill_search.xml
  22. 37 15
      app_modular/appworks/src/main/res/layout/activity_customer_visit.xml
  23. 16 0
      app_modular/appworks/src/main/res/layout/activity_customer_visit_details.xml

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

@@ -307,7 +307,7 @@ public class MeFragment extends EasyFragment implements View.OnClickListener, On
         findViewById(R.id.editInfoIv).setOnLongClickListener(new View.OnLongClickListener() {
             @Override
             public boolean onLongClick(View view) {
-                startActivity(new Intent(ct, DataFormDetailActivity.class).putExtra("caller", "ProjectBusinessChance"));
+                startActivity(new Intent(ct, CustomerVisitActivity.class).putExtra("caller", "ProjectBusinessChance"));
                 return false;
             }
         });

+ 1 - 1
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.crm.CustomerListActivity",
+        "menuActivity": "com.modular.work.crm3_0.activity.CustomerManageActivity",
         "menuTag": "local_customer_manage",
         "menuUrl": "",
         "caller": "",

+ 2 - 0
app_core/common/src/main/java/com/core/app/Constants.java

@@ -569,8 +569,10 @@ public class Constants {
 
     public interface Intents{
         String CALLER="mCaller";
+        String CONDITION="mCondition";
         String ID="mId";
         String TITLE="mTitlte";
         String HASHMAP="hashMap";
+        String FIELD_CONFIG="fieldConfig";
     }
 }

+ 3 - 2
app_modular/apputils/src/main/java/com/modular/apputils/activity/BillInputActivity.java

@@ -89,8 +89,9 @@ public class BillInputActivity extends OABaseActivity implements IBill {
             }
         }, 2000);
     }
+
     //TODO  重写方法实现自定义的初始化
-    public  void init() {
+    public void init() {
         mBillPresenter = newBillPresenter();
         mBillPresenter.start(getIntent());
     }
@@ -109,7 +110,7 @@ public class BillInputActivity extends OABaseActivity implements IBill {
         return super.onCreateOptionsMenu(menu);
     }
 
-    private void toDataFormList() {
+    public void toDataFormList() {
         startActivity(new Intent("com.modular.work.OA.erp.activity.form.FormListSelectActivity")
                 .putExtra("caller", mBillPresenter.getFormCaller())
                 .putExtra("statusKey", mBillPresenter.getStatusField())//传状态key

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

@@ -94,7 +94,7 @@ public class BillPresenter extends BaseNetPresenter {
             mCaller = intent.getStringExtra(Constants.Intents.CALLER);
             String mTitle = intent.getStringExtra(Constants.Intents.TITLE);
             mId = intent.getIntExtra(Constants.Intents.ID, 0);
-            Serializable mSerializable = intent.getSerializableExtra(Constants.Intents.ID);
+            Serializable mSerializable = intent.getSerializableExtra(Constants.Intents.HASHMAP);
             if (mSerializable != null && mSerializable instanceof HashMap) {
                 hashMap = (HashMap<String, String>) mSerializable;
             }
@@ -117,7 +117,7 @@ public class BillPresenter extends BaseNetPresenter {
                 pushEnclosure(e);
                 return;
             }
-            formStore.put(e.getField(), e.getValue());
+            formStore.put(e.getField(), e.getDisplay());
         }
 
         List<Map<String, Object>> gridStoreList = new ArrayList<>();
@@ -291,7 +291,7 @@ public class BillPresenter extends BaseNetPresenter {
         iBill.showLoading();
         Map<String, Object> params = new HashMap<>();
         params.put("em_code", emName);
-        params.put("nodeId", 1);
+        params.put("nodeId", nodeId);
         requestCompanyHttp(new Parameter.Builder()
                         .url("common/takeOverTask.action")
                         .addParams("_noc", 1)

+ 14 - 8
app_modular/appworks/src/main/AndroidManifest.xml

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
-<manifest package="com.uas.appworks"
-          xmlns:android="http://schemas.android.com/apk/res/android">
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="com.uas.appworks">
 
     <uses-permission android:name="android.permission.READ_CALENDAR" />
     <uses-permission android:name="android.permission.WRITE_CALENDAR" />
@@ -30,7 +30,7 @@
                 <category android:name="android.intent.category.DEFAULT" />
             </intent-filter>
         </activity>
-        <activity android:name=".OA.erp.activity.CommonDocDetailsActivity">
+        <activity android:name=".OA.erp.activity.CommonDocDetailsActivity" >
             <intent-filter>
                 <action android:name="com.modular.form.erp.activity.CommonDocDetailsActivity" />
 
@@ -505,12 +505,16 @@
             </intent-filter>
         </activity>
         <activity android:name=".activity.TimeHelperSettingActivity" />
-        <activity
-            android:name=".crm3_0.activity.CustomerVisitActivity"
-            android:label="@string/crm_customer_visit" />
-        <activity android:name=".crm3_0.activity.CustomerListActivity" />
+        <activity android:name=".crm3_0.activity.CustomerVisitActivity"
+            android:label="@string/crm_customer_visit"/>
+        <activity android:name=".crm3_0.activity.CustomerListActivity"/>
         <activity android:name=".crm3_0.activity.ContactsListActivity"></activity>
-        <activity android:name=".crm3_0.activity.CustomerManageActivity"></activity>
+        <activity android:name=".crm3_0.activity.CustomerManageActivity">
+            <intent-filter>
+                <action android:name="com.modular.work.crm3_0.activity.CustomerManageActivity" />
+                <category android:name="android.intent.category.DEFAULT" />
+            </intent-filter>
+        </activity>
         <activity android:name=".crm3_0.activity.CustomerBillInputActivity"></activity>
         <activity android:name=".crm3_0.activity.CustomerDetails3_0Activity"></activity>
 
@@ -528,6 +532,8 @@
         <activity android:name=".activity.businessManage.BusinessRankListActivity" />
         <activity android:name=".activity.businessManage.businessMineList.BusinessMineListActivity" />
         <activity android:name=".activity.businessManage.businessStage.BusinessStageActivity" />
+        <activity android:name=".crm3_0.activity.BillSearchActivity" />
+        <activity android:name=".crm3_0.activity.CustomerVisitDetailsActivity" />
         <activity android:name=".activity.businessManage.businessDetailActivity.BusinessDetailNewActivity" />
         <activity android:name=".activity.businessManage.BusinessCompanyListActivity" />
         <activity android:name=".activity.businessManage.businessChangeStage.BusinessChangeStageActivity"/>

+ 1 - 0
app_modular/appworks/src/main/java/com/uas/appworks/adapter/BillListAdapter.java

@@ -30,6 +30,7 @@ public class BillListAdapter extends RecyclerView.Adapter<BillListAdapter.ViewHo
     public void updateGroupModels(List<BillListGroupModel> groupModels) {
         this.groupModels = groupModels;
         changeFieldsList();
+        notifyDataSetChanged();
     }
 
     public List<BillListGroupModel> getGroupModels() {

+ 108 - 0
app_modular/appworks/src/main/java/com/uas/appworks/adapter/BillListDetailsAdapter.java

@@ -0,0 +1,108 @@
+package com.uas.appworks.adapter;
+
+import android.content.Context;
+import android.text.TextUtils;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.BaseAdapter;
+import android.widget.TextView;
+
+import com.common.data.ListUtils;
+import com.modular.apputils.model.BillGroupModel;
+import com.uas.appworks.R;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class BillListDetailsAdapter extends BaseAdapter {
+    private Context ct;
+    private List<BillGroupModel> groupModels;
+    private List<BillGroupModel.BillModel> mShowBillModels;
+
+    public BillListDetailsAdapter(Context ct,List<BillGroupModel> groupModels) {
+        this.ct = ct;
+        this.groupModels = groupModels;
+        changeBillModel();
+    }
+
+    public void updateGroupModels(List<BillGroupModel> groupModels) {
+        this.groupModels = groupModels;
+        changeBillModel();
+    }
+
+    public List<BillGroupModel> getGroupModels() {
+        return groupModels;
+    }
+
+    /**
+     * 当外界的因素引起mBillGroupModels变化时候,通过遍历将mBillGroupModels转成mShowBillModels进行显示
+     */
+    private void changeBillModel() {
+        if (mShowBillModels == null) {
+            mShowBillModels = new ArrayList<>();
+        } else {
+            mShowBillModels.clear();
+        }
+        for (int i = 0; i < groupModels.size(); i++) {
+            BillGroupModel e = groupModels.get(i);
+            if (e != null && e.getShowBillFields() != null && !e.getShowBillFields().isEmpty()) {
+                mShowBillModels.addAll(e.getShowBillFields());
+            }
+        }
+    }
+
+
+    @Override
+    public int getCount() {
+        return mShowBillModels == null ? 0 : mShowBillModels.size();
+    }
+
+    @Override
+    public Object getItem(int i) {
+        return mShowBillModels.get(i);
+    }
+
+    @Override
+    public long getItemId(int i) {
+        return i;
+    }
+
+    @Override
+    public View getView(int position, View view, ViewGroup viewGroup) {
+        ViewHolder mViewHolder = null;
+        if (view == null) {
+            view = LayoutInflater.from(ct).inflate(R.layout.item_customer_details_3_0, null);
+            mViewHolder = new ViewHolder();
+            mViewHolder.tvTitle = (TextView) view.findViewById(R.id.tv_title);
+            mViewHolder.captionTv = (TextView) view.findViewById(R.id.captionTv);
+            mViewHolder.valuesTv = (TextView) view.findViewById(R.id.valuesTv);
+            view.setTag(mViewHolder);
+        } else {
+            mViewHolder = (ViewHolder) view.getTag();
+        }
+        BillGroupModel.BillModel field = mShowBillModels.get(position);
+        mViewHolder.captionTv.setText(field.getCaption());
+        mViewHolder.valuesTv.setText(field.getValue());
+        if (field.getGroupIndex() != 0 && position >= 1 && field.getGroupIndex() > mShowBillModels.get(position - 1).getGroupIndex()) {
+            mViewHolder.tvTitle.setVisibility(View.VISIBLE);
+            String mGroupName = null;
+            if (ListUtils.getSize(groupModels) > field.getGroupIndex()) {
+                mGroupName = groupModels.get(field.getGroupIndex()).getGroup();
+            }
+            mViewHolder.tvTitle.setText(TextUtils.isEmpty(mGroupName) ? "" : mGroupName);
+        } else {
+            mViewHolder.tvTitle.setVisibility(View.GONE);
+        }
+        return view;
+    }
+
+
+    class ViewHolder {
+        private TextView tvTitle;
+        private TextView captionTv;
+        private TextView valuesTv;
+
+
+    }
+}

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

@@ -39,7 +39,7 @@ public class CustomerBillInputAdapter extends BillAdapter {
 
     @Override
     public int getItemCount() {
-        return super.getItemCount()+1;
+        return super.getItemCount();
     }
 
     @NonNull

+ 261 - 0
app_modular/appworks/src/main/java/com/uas/appworks/crm3_0/activity/BillSearchActivity.java

@@ -0,0 +1,261 @@
+package com.uas.appworks.crm3_0.activity;
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.support.v7.widget.LinearLayoutManager;
+import android.support.v7.widget.RecyclerView;
+import android.support.v7.widget.Toolbar;
+import android.text.Editable;
+import android.text.TextUtils;
+import android.view.View;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.common.LogUtil;
+import com.common.data.JSONUtil;
+import com.common.data.ListUtils;
+import com.common.data.StringUtil;
+import com.core.app.Constants;
+import com.core.app.MyApplication;
+import com.core.base.OABaseActivity;
+import com.core.utils.CommonUtil;
+import com.core.utils.StatusBarUtil;
+import com.core.widget.listener.EditChangeListener;
+import com.me.network.app.http.Method;
+import com.modular.apputils.listener.OnSmartHttpListener;
+import com.modular.apputils.model.BillListGroupModel;
+import com.modular.apputils.network.Parameter;
+import com.modular.apputils.network.Tags;
+import com.modular.apputils.utils.UUHttpHelper;
+import com.modular.apputils.widget.MenuVoiceSearchView;
+import com.module.recyclerlibrary.ui.refresh.BaseRefreshLayout;
+import com.module.recyclerlibrary.ui.refresh.EmptyRecyclerView;
+import com.module.recyclerlibrary.ui.refresh.simlpe.SimpleRefreshLayout;
+import com.uas.appworks.R;
+import com.uas.appworks.adapter.BillListAdapter;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class BillSearchActivity extends OABaseActivity {
+    private final int TAG_KEY_WORD = 0x12;
+    private final int LOAD_LIST_DATA = 0x11;
+    private final int PAGE_SIZE = 20;
+
+    private SimpleRefreshLayout mRefreshLayout;
+    private RecyclerView mRecyclerView;
+    private UUHttpHelper mUUHttpHelper;
+    private int mPageIndex = 1;
+    private String mCaller;
+    private String mMustCondition;
+    private ArrayList<String> fieldConfig;
+    private String lastKeyWord;
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.activity_bill_search);
+        initView();
+    }
+
+    @Override
+    public int getToolBarId() {
+        return R.id.mToolbar;
+    }
+
+    @Override
+    public boolean needNavigation() {
+        return false;
+    }
+
+    private void initView() {
+        Intent intent = getIntent();
+        if (intent != null) {
+            mCaller = intent.getStringExtra(Constants.Intents.CALLER);
+            mMustCondition = intent.getStringExtra(Constants.Intents.CONDITION);
+            fieldConfig = intent.getStringArrayListExtra(Constants.Intents.FIELD_CONFIG);
+            String mTitle = intent.getStringExtra(Constants.Intents.TITLE);
+            if (mTitle != null) {
+                setTitle(mTitle);
+            }
+        }
+        mUUHttpHelper = new UUHttpHelper(CommonUtil.getAppBaseUrl(MyApplication.getInstance()));
+        final MenuVoiceSearchView mVoiceSearchView = (MenuVoiceSearchView) findViewById(R.id.mVoiceSearchView);
+        Toolbar mToolbar = (Toolbar) findViewById(R.id.mToolbar);
+        StatusBarUtil.setPaddingSmart(this, mToolbar);
+        mRefreshLayout = (SimpleRefreshLayout) findViewById(R.id.mSimpleRefreshLayout);
+        EmptyRecyclerView mEmptyRecyclerView = (EmptyRecyclerView) findViewById(R.id.mEmptyRecyclerView);
+        findViewById(R.id.backImg).setOnClickListener(mOnClickListener);
+        mRecyclerView = mEmptyRecyclerView.getRecyclerView();
+        mRecyclerView.setLayoutManager(new LinearLayoutManager(ct));
+        mRefreshLayout.setOnRefreshListener(new BaseRefreshLayout.onRefreshListener() {
+            @Override
+            public void onRefresh() {
+                loadData(TextUtils.isEmpty(mVoiceSearchView.getText()) ? "" : mVoiceSearchView.getText().toString());
+            }
+
+            @Override
+            public void onLoadMore() {
+                mPageIndex++;
+                loadData(TextUtils.isEmpty(mVoiceSearchView.getText()) ? "" : mVoiceSearchView.getText().toString());
+            }
+        });
+        mVoiceSearchView.addTextChangedListener(new EditChangeListener() {
+            @Override
+            public void afterTextChanged(Editable editable) {
+                mPageIndex = 1;
+                loadData(TextUtils.isEmpty(editable) ? "" : editable.toString());
+            }
+        });
+        showLoading();
+        loadData(null);
+    }
+
+    private View.OnClickListener mOnClickListener = new View.OnClickListener() {
+        @Override
+        public void onClick(View view) {
+            if (view.getId() == R.id.backImg) {
+                onBackPressed();
+            }
+        }
+    };
+
+
+    private void loadData(String keyWord) {
+        if (keyWord == null) {
+            keyWord = "";
+        }
+        this.lastKeyWord = keyWord;
+        StringBuilder builder = new StringBuilder(mMustCondition);
+        if (!TextUtils.isEmpty(keyWord) && !ListUtils.isEmpty(fieldConfig)) {
+            builder.append(" and ( ");
+            for (String e : fieldConfig) {
+                builder.append("upper(" + e + ") like '%" + keyWord.toUpperCase() + "%' or ");
+            }
+            if (builder.length() > 3) {
+                builder.delete(builder.length() - 3, builder.length() - 1);
+            }
+            builder.append(" )");
+        }
+        LogUtil.i("gong", "builder=" + builder.toString());
+        mUUHttpHelper.requestCompanyHttp(new Parameter.Builder()
+                .record(LOAD_LIST_DATA)
+                .addParams("caller", mCaller)
+                .addParams("condition", builder.toString())
+                .mode(Method.GET)
+                .addTag(TAG_KEY_WORD, keyWord)
+                .addParams("page", mPageIndex)
+                .addParams("pageSize", PAGE_SIZE)
+                .url("mobile/common/list.action"), mOnSmartHttpListener);
+    }
+
+    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_LIST_DATA:
+                    if (tag.get(TAG_KEY_WORD) != null && tag.get(TAG_KEY_WORD) instanceof String) {
+                        String keyWord = (String) tag.get(TAG_KEY_WORD);
+                        if (keyWord.equals(lastKeyWord)) {
+                            handlerListData(object);
+                        }
+                    }
+                    break;
+            }
+            mRefreshLayout.stopRefresh();
+            dimssLoading();
+        }
+
+        @Override
+        public void onFailure(int what, String message, Tags tag) throws Exception {
+            LogUtil.i("gong", "onFailure=" + message);
+            dimssLoading();
+        }
+    };
+
+    private void handlerListData(JSONObject object) throws Exception {
+        JSONArray columns = JSONUtil.getJSONArray(object, "columns");
+        JSONArray listdata = JSONUtil.getJSONArray(object, "listdata");
+        String keyField = JSONUtil.getText(object, "keyField");
+        String pfField = JSONUtil.getText(object, "pfField");
+        List<BillListGroupModel> groupModels = null;
+        if (!ListUtils.isEmpty(columns) && !ListUtils.isEmpty(listdata)) {
+            groupModels = new ArrayList<>();
+            int index = -1;
+            for (int i = 0; i < listdata.size(); i++) {
+                List<BillListGroupModel.BillListField> billListFields = null;
+                BillListGroupModel groupModel = new BillListGroupModel();
+                JSONObject data = listdata.getJSONObject(i);
+                int id = JSONUtil.getInt(data, keyField);
+                String status = JSONUtil.getText(data, "cu_auditstatus");
+
+                for (int j = 0; j < columns.size(); j++) {
+                    JSONObject column = columns.getJSONObject(j);
+                    if (JSONUtil.getInt(column, "width") > 0) {
+                        if (billListFields == null) {
+                            billListFields = new ArrayList<>();
+                            index++;
+                        }
+                        String caption = JSONUtil.getText(column, "caption");
+                        String dataIndex = JSONUtil.getText(column, "dataIndex");
+                        String values = JSONUtil.getText(data, dataIndex);
+                        BillListGroupModel.BillListField billListField = new BillListGroupModel.BillListField();
+                        billListField.setId(id);
+                        billListField.setStatus(status);
+                        billListField.setCaption(caption);
+                        billListField.setField(dataIndex);
+                        billListField.setValue(values);
+                        billListField.setGroupIndex(index);
+                        groupModel.setGroupIndex(index);
+                        billListFields.add(billListField);
+                    }
+                }
+                if (!ListUtils.isEmpty(billListFields)) {
+                    groupModel.setBillFields(billListFields);
+                    groupModels.add(groupModel);
+                }
+            }
+        } else if (mPageIndex > 1) {
+            mPageIndex--;
+        }
+        setAdapter(groupModels);
+    }
+
+    private BillListAdapter mListAdapter;
+
+    private void setAdapter(List<BillListGroupModel> groupModels) {
+        if (mListAdapter == null) {
+            mListAdapter = new BillListAdapter(ct, groupModels, new BillListAdapter.OnAdapterListener() {
+                @Override
+                public void onClick(BillListGroupModel.BillListField field) {
+                    if (field.getStatus().equals("在录入")) {
+                        startActivity(new Intent(ct, CustomerBillInputActivity.class)
+                                .putExtra(Constants.Intents.CALLER, mCaller)
+                                .putExtra(Constants.Intents.TITLE, getToolBarTitle())
+                                .putExtra(Constants.Intents.ID, field.getId()));
+                    } else {
+                        startActivity(new Intent(ct, CustomerDetails3_0Activity.class)
+                                .putExtra(Constants.Intents.CALLER, mCaller)
+                                .putExtra(Constants.Intents.TITLE, getToolBarTitle())
+                                .putExtra(Constants.Intents.ID, field.getId()));
+                    }
+
+                }
+            });
+            mRecyclerView.setAdapter(mListAdapter);
+        } else {
+            List<BillListGroupModel> showModels = mListAdapter.getGroupModels();
+            if (mPageIndex <= 1) {
+                showModels = groupModels;
+            } else {
+                if (showModels == null) {
+                    showModels = new ArrayList<>();
+                }
+                showModels.addAll(groupModels);
+            }
+            mListAdapter.updateGroupModels(showModels);
+        }
+    }
+}

+ 3 - 11
app_modular/appworks/src/main/java/com/uas/appworks/crm3_0/activity/CustomerBillInputActivity.java

@@ -24,17 +24,9 @@ public class CustomerBillInputActivity extends BillInputActivity {
         return new CustomerBillInputAdapter(ct, groupModels, mOnAdapterListener);
     }
 
-    @Override
-    public boolean onOptionsItemSelected(MenuItem item) {
-        if (item.getItemId() == R.id.saveAndSubmit) {
-            if (item.getTitle().equals("提交")) {
-                mBillPresenter.saveAndSubmit(mBillAdapter.getBillGroupModels());
-            }
-        } else if (item.getItemId() == R.id.list) {
-            startActivity(new Intent(ct, CustomerListActivity.class)
-                    .putExtra(Constants.Intents.TITLE, getToolBarTitle()));
-        }
-        return super.onOptionsItemSelected(item);
+    public void toDataFormList() {
+        startActivity(new Intent(ct, CustomerListActivity.class)
+                .putExtra(Constants.Intents.TITLE, getToolBarTitle()));
     }
 
     @Override

+ 4 - 92
app_modular/appworks/src/main/java/com/uas/appworks/crm3_0/activity/CustomerDetails3_0Activity.java

@@ -23,6 +23,8 @@ import com.core.base.OABaseActivity;
 import com.modular.apputils.model.BillGroupModel;
 import com.modular.apputils.widget.VeriftyDialog;
 import com.uas.appworks.R;
+import com.uas.appworks.adapter.BillListAdapter;
+import com.uas.appworks.adapter.BillListDetailsAdapter;
 import com.uas.appworks.crm3_0.fragment.CustomerDetailsBottomListFragment;
 import com.uas.appworks.crm3_0.fragment.CustomerListDetailsFragment;
 import com.uas.appworks.model.CustomerBindBill;
@@ -43,7 +45,7 @@ public class CustomerDetails3_0Activity extends OABaseActivity implements ICusto
     private String[] tabTitle;
     private final int TAB_NUM = 4;
     private CustomerDetailsPresenter mPresenter;
-    private ListAdapter mListAdapter;
+    private BillListDetailsAdapter mListAdapter;
     private SparseArray<ArrayList<CustomerBindBill>> mBottomDataList = new SparseArray<>();
     private ViewPageAdapter mAdapter;
     private String status;
@@ -116,7 +118,7 @@ public class CustomerDetails3_0Activity extends OABaseActivity implements ICusto
     @Override
     public void setAdapter(List<BillGroupModel> groupModels) {
         if (mListAdapter == null) {
-            mListAdapter = new ListAdapter(groupModels);
+            mListAdapter = new BillListDetailsAdapter(ct,groupModels);
             mListView.setAdapter(mListAdapter);
         } else {
             mListAdapter.updateGroupModels(groupModels);
@@ -169,95 +171,5 @@ public class CustomerDetails3_0Activity extends OABaseActivity implements ICusto
     }
 
 
-    private class ListAdapter extends BaseAdapter {
-        private List<BillGroupModel> groupModels;
-        private List<BillGroupModel.BillModel> mShowBillModels;
 
-        public ListAdapter(List<BillGroupModel> groupModels) {
-            this.groupModels = groupModels;
-            changeBillModel();
-        }
-
-        public void updateGroupModels(List<BillGroupModel> groupModels) {
-            this.groupModels = groupModels;
-            changeBillModel();
-        }
-
-        public List<BillGroupModel> getGroupModels() {
-            return groupModels;
-        }
-
-        /**
-         * 当外界的因素引起mBillGroupModels变化时候,通过遍历将mBillGroupModels转成mShowBillModels进行显示
-         */
-        private void changeBillModel() {
-            if (mShowBillModels == null) {
-                mShowBillModels = new ArrayList<>();
-            } else {
-                mShowBillModels.clear();
-            }
-            for (int i = 0; i < groupModels.size(); i++) {
-                BillGroupModel e = groupModels.get(i);
-                if (e != null && e.getShowBillFields() != null && !e.getShowBillFields().isEmpty()) {
-                    mShowBillModels.addAll(e.getShowBillFields());
-                }
-            }
-        }
-
-
-        @Override
-        public int getCount() {
-            return mShowBillModels == null ? 0 : mShowBillModels.size();
-        }
-
-        @Override
-        public Object getItem(int i) {
-            return mShowBillModels.get(i);
-        }
-
-        @Override
-        public long getItemId(int i) {
-            return i;
-        }
-
-        @Override
-        public View getView(int position, View view, ViewGroup viewGroup) {
-            ViewHolder mViewHolder = null;
-            if (view == null) {
-                view = LayoutInflater.from(ct).inflate(R.layout.item_customer_details_3_0, null);
-                mViewHolder = new ViewHolder();
-                mViewHolder.tvTitle = (TextView) view.findViewById(R.id.tv_title);
-                mViewHolder.captionTv = (TextView) view.findViewById(R.id.captionTv);
-                mViewHolder.valuesTv = (TextView) view.findViewById(R.id.valuesTv);
-                view.setTag(mViewHolder);
-            } else {
-                mViewHolder = (ViewHolder) view.getTag();
-            }
-            BillGroupModel.BillModel field = mShowBillModels.get(position);
-            mViewHolder.captionTv.setText(field.getCaption());
-            mViewHolder.valuesTv.setText(field.getValue());
-            if (field.getGroupIndex() != 0 && position >= 1 && field.getGroupIndex() > mShowBillModels.get(position - 1).getGroupIndex()) {
-                mViewHolder.tvTitle.setVisibility(View.VISIBLE);
-                String mGroupName = null;
-                if (ListUtils.getSize(groupModels) > field.getGroupIndex()) {
-                    mGroupName = groupModels.get(field.getGroupIndex()).getGroup();
-                }
-                mViewHolder.tvTitle.setText(TextUtils.isEmpty(mGroupName) ? "" : mGroupName);
-            } else {
-                mViewHolder.tvTitle.setVisibility(View.GONE);
-            }
-            return view;
-        }
-
-
-        class ViewHolder {
-            private TextView tvTitle;
-            private TextView captionTv;
-            private TextView valuesTv;
-
-
-        }
-
-
-    }
 }

+ 12 - 11
app_modular/appworks/src/main/java/com/uas/appworks/crm3_0/activity/CustomerManageActivity.java

@@ -18,24 +18,21 @@ import android.widget.PopupWindow;
 import android.widget.SimpleAdapter;
 import android.widget.TextView;
 
-import com.alibaba.fastjson.JSONObject;
 import com.common.LogUtil;
 import com.common.data.CalendarUtil;
 import com.common.data.DateFormatUtil;
-import com.common.data.JSONUtil;
 import com.common.data.TextUtil;
 import com.common.system.DisplayUtil;
 import com.core.app.Constants;
 import com.core.base.OABaseActivity;
 import com.core.utils.CommonUtil;
-import com.core.utils.ToastUtil;
 import com.core.utils.time.wheel.DatePicker;
-import com.core.utils.time.wheel.DateTimePicker;
 import com.core.widget.MyListView;
 import com.core.widget.view.MyGridView;
 import com.modular.apputils.activity.BillInputActivity;
 import com.modular.apputils.adapter.EasyBaseAdapter;
 import com.modular.apputils.model.EasyBaseModel;
+import com.uas.appworks.OA.erp.activity.form.DataFormDetailActivity;
 import com.uas.appworks.R;
 import com.uas.appworks.presenter.CustomerManagePresenter;
 import com.uas.appworks.presenter.imp.ICustomerManage;
@@ -237,9 +234,9 @@ public class CustomerManageActivity extends OABaseActivity implements ICustomerM
         map = new HashMap<>();
         map.put("item_name", "拜访报告");
         list.add(map);
-        map = new HashMap<>();
-        map.put("item_name", "商机");
-        list.add(map);
+//        map = new HashMap<>();
+//        map.put("item_name", "正式客户");
+//        list.add(map);
         return list;
     }
 
@@ -380,10 +377,14 @@ public class CustomerManageActivity extends OABaseActivity implements ICustomerM
                 clazz = BillInputActivity.class;
                 break;
             case 4:
-                mCaller = "ProjectBusinessChance";
-                mTitle = "商机";
-                clazz = BillInputActivity.class;
-                break;
+                mCaller = "Customer!Base";
+                mTitle = "正式客户";
+                clazz = DataFormDetailActivity.class;
+                startActivity(new Intent(ct, clazz)
+                        .putExtra("caller", mCaller)
+                        .putExtra("title", mTitle));
+
+                return;
         }
         startActivity(new Intent(ct, clazz)
                 .putExtra(Constants.Intents.CALLER, mCaller)

+ 121 - 36
app_modular/appworks/src/main/java/com/uas/appworks/crm3_0/activity/CustomerVisitActivity.java

@@ -1,9 +1,14 @@
 package com.uas.appworks.crm3_0.activity;
 
+import android.content.Intent;
+import android.graphics.Color;
+import android.os.Bundle;
 import android.support.v7.widget.LinearLayoutManager;
 import android.support.v7.widget.RecyclerView;
 import android.util.SparseArray;
 import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuItem;
 import android.view.View;
 
 import android.view.ViewGroup;
@@ -12,18 +17,26 @@ import android.widget.TextView;
 
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.common.LogUtil;
 import com.common.config.BaseConfig;
 import com.common.data.DateFormatUtil;
 import com.common.data.JSONUtil;
 import com.common.data.ListUtils;
+import com.core.app.Constants;
+import com.core.base.BaseActivity;
 import com.core.utils.CommonUtil;
+import com.core.utils.ToastUtil;
+import com.iflytek.cloud.thirdparty.V;
 import com.me.network.app.http.Method;
 import com.modular.apputils.activity.BaseNetActivity;
+import com.modular.apputils.activity.BillInputActivity;
 import com.modular.apputils.listener.OnSmartHttpListener;
 import com.modular.apputils.network.Parameter;
 import com.modular.apputils.network.Tags;
+import com.modular.apputils.utils.UUHttpHelper;
 import com.modular.apputils.widget.DivideRadioGroup;
 import com.modular.apputils.widget.compactcalender.CompactCalendarView;
+import com.modular.apputils.widget.compactcalender.domain.Event;
 import com.module.recyclerlibrary.ui.refresh.EmptyRecyclerView;
 import com.uas.appworks.R;
 import com.uas.appworks.model.VisitPlan;
@@ -38,7 +51,7 @@ import java.util.TimeZone;
 /**
  * CRM 3.0 客户拜访界面(拜访计划)
  */
-public class CustomerVisitActivity extends BaseNetActivity {
+public class CustomerVisitActivity extends BaseActivity {
     private final int LOAD_DATA = 0x11;
     private final int TAG_DATE = 0x13;//记录获取的值对象,比如(20181101 表示2018-11 我的数据 20181102 表示2018-11 我的下属数据)
 
@@ -50,62 +63,81 @@ public class CustomerVisitActivity extends BaseNetActivity {
     private RecyclerView mRecyclerView;
     private Date mCurrentDate;
     private SparseArray<List<VisitPlan>> datas;
+    private UUHttpHelper mUUHttpHelper;
 
+    @Override
+    public boolean onCreateOptionsMenu(Menu menu) {
+        getMenuInflater().inflate(R.menu.menu_add_icon, menu);
+        return super.onCreateOptionsMenu(menu);
+    }
 
     @Override
-    protected int getLayoutId() {
-        return R.layout.activity_customer_visit;
+    public boolean onOptionsItemSelected(MenuItem item) {
+        if (item.getItemId() == R.id.add_item) {
+            startActivity(new Intent(ct, BillInputActivity.class)
+                    .putExtra(Constants.Intents.CALLER, "MOBILEOUTPLAN")
+                    .putExtra(Constants.Intents.TITLE, "客户拜访计划")
+                    .putExtra(Constants.Intents.ID, 0));
+        }
+        return super.onOptionsItemSelected(item);
     }
 
     @Override
-    protected void init() throws Exception {
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.activity_customer_visit);
+        mUUHttpHelper = new UUHttpHelper(CommonUtil.getAppBaseUrl(this));
         initView();
         initData();
-
     }
 
 
-    @Override
-    protected String getBaseUrl() {
-        return CommonUtil.getAppBaseUrl(this);
-    }
-
     private void initView() {
         mCurrentDate = new Date();
         myVisitRb = findViewById(R.id.myVisitRb);
-        visitTypeRg = (DivideRadioGroup) findViewById(R.id.visitTypeRg);
-        monthTv = (TextView) findViewById(R.id.monthTv);
-        toDayTv = (TextView) findViewById(R.id.newDayTv);
-        mCalendarView = (CompactCalendarView) findViewById(R.id.compactcalendar_view);
-        EmptyRecyclerView mEmptyRecyclerView = (EmptyRecyclerView) findViewById(R.id.mEmptyRecyclerView);
+        final View myLine = findViewById(R.id.myLine);
+        final View otherLine = findViewById(R.id.otherLine);
+        visitTypeRg = findViewById(R.id.visitTypeRg);
+        monthTv = findViewById(R.id.monthTv);
+        toDayTv = findViewById(R.id.newDayTv);
+        mCalendarView = findViewById(R.id.compactcalendar_view);
+        EmptyRecyclerView mEmptyRecyclerView = findViewById(R.id.mEmptyRecyclerView);
         mRecyclerView = mEmptyRecyclerView.getRecyclerView();
-
+        myLine.setVisibility(View.VISIBLE);
+        otherLine.setVisibility(View.INVISIBLE);
         visitTypeRg.setOnCheckedChangeListener(new DivideRadioGroup.OnCheckedChangeListener() {
             @Override
             public void onCheckedChanged(DivideRadioGroup group, int checkedId) {
                 if (checkedId == R.id.myVisitRb) {
-
+                    myLine.setVisibility(View.VISIBLE);
+                    otherLine.setVisibility(View.INVISIBLE);
                 } else if (R.id.otherVisitRb == checkedId) {
-
+                    myLine.setVisibility(View.INVISIBLE);
+                    otherLine.setVisibility(View.VISIBLE);
                 }
+                loadData();
             }
         });
+
         toDayTv.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View view) {
-                mCalendarView.setCurrentDate(new Date());
+                mCurrentDate = new Date();
+                mCalendarView.setCurrentDate(mCurrentDate);
+                loadData();
             }
         });
         mCalendarView.setListener(new CompactCalendarView.CompactCalendarViewListener() {
             @Override
             public void onDayClick(Date dateClicked) {
-
+                mCurrentDate = dateClicked;
+                loadData();
             }
 
             @Override
             public void onMonthScroll(Date firstDayOfNewMonth) {
                 mCurrentDate = firstDayOfNewMonth;
-                loadData(!myVisitRb.isChecked());
+                loadData();
             }
         });
         mCalendarView.setFirstDayOfWeek(Calendar.SUNDAY);
@@ -120,11 +152,13 @@ public class CustomerVisitActivity extends BaseNetActivity {
 
     private void initData() {
         datas = new SparseArray<>();
-        loadData(false);
+        loadData();
     }
 
 
-    private void loadData(boolean isOther) {
+    private void loadData() {
+        progressDialog.show();
+        boolean isOther = !myVisitRb.isChecked();
         String month = DateFormatUtil.date2Str(mCurrentDate, DateFormatUtil.YM);
         int monthInt = 1;
         try {
@@ -133,16 +167,16 @@ public class CustomerVisitActivity extends BaseNetActivity {
         }
         List<VisitPlan> visitPlanArrayList = datas.get(monthInt);
         if (visitPlanArrayList == null) {
-            requestCompanyHttp(new Parameter.Builder()
+            mUUHttpHelper.requestCompanyHttp(new Parameter.Builder()
                     .mode(Method.GET)
                     .addParams("dataTime", month)
-                    .addParams("salesmanCode", BaseConfig.isDebug() ? "zhouy" : CommonUtil.getEmcode())
+                    .addParams("salesmanCode",  CommonUtil.getEmcode())
                     .addParams("flag", isOther ? 1 : 0)
                     .addTag(TAG_DATE, monthInt)
                     .record(LOAD_DATA)
-                    .url("/mobile/crm/getvisitplanmsg.action"), mOnSmartHttpListener);
+                    .url("mobile/crm/getvisitplanmsg.action"), mOnSmartHttpListener);
         } else {
-            setAdapter(visitPlanArrayList);
+            handlerAndShowByDay(visitPlanArrayList);
         }
     }
 
@@ -158,11 +192,21 @@ public class CustomerVisitActivity extends BaseNetActivity {
                     handerData(monthInt, JSONUtil.getJSONArray(message, "visitPlan"));
                     break;
             }
+            if (progressDialog != null) {
+                progressDialog.dismiss();
+            }
         }
 
         @Override
         public void onFailure(int what, String message, Tags tag) throws Exception {
-
+            if (JSONUtil.validateJSONObject(message)) {
+                ToastUtil.showToast(ct, JSONUtil.getText(message, "exceptionInfo"));
+            } else {
+                ToastUtil.showToast(ct, message);
+            }
+            if (progressDialog != null) {
+                progressDialog.dismiss();
+            }
         }
     };
 
@@ -174,21 +218,22 @@ public class CustomerVisitActivity extends BaseNetActivity {
                 JSONObject object = array.getJSONObject(i);
                 int id = JSONUtil.getInt(object, "id");
                 String code = JSONUtil.getText(object, "code");
-                String entryDate = JSONUtil.getText(object, "entry_date");
                 String customerName = JSONUtil.getText(object, "customer_name");
                 String customerAddress = JSONUtil.getText(object, "customer_address");
-                String startTime = JSONUtil.getText(object, "start_time");
-                String endTime = JSONUtil.getText(object, "end_time");
+                long entryDate = JSONUtil.getTime(object, "entry_date");
+                long startTime = JSONUtil.getTime(object, "start_time");
+                long endTime = JSONUtil.getTime(object, "end_time");
                 String status = JSONUtil.getText(object, "status");
                 String doman = JSONUtil.getText(object, "doman");
                 String domanCode = JSONUtil.getText(object, "domanCode");
                 mVisitPlan.setId(id);
                 mVisitPlan.setCode(code);
-                mVisitPlan.setEntryDate(entryDate);
+                mVisitPlan.setStartDay(DateFormatUtil.long2Str(startTime, DateFormatUtil.YMD));
                 mVisitPlan.setCustomerName(customerName);
                 mVisitPlan.setCustomerAddress(customerAddress);
                 mVisitPlan.setStartTime(startTime);
                 mVisitPlan.setEndTime(endTime);
+                mVisitPlan.setEntryDate(entryDate);
                 mVisitPlan.setStatus(status);
                 mVisitPlan.setDoman(doman);
                 mVisitPlan.setDomanCode(domanCode);
@@ -196,11 +241,34 @@ public class CustomerVisitActivity extends BaseNetActivity {
             }
             datas.put(monthInt, visitPlanArrayList);
         }
-        setAdapter(visitPlanArrayList);
+        handlerAndShowByDay(visitPlanArrayList);
     }
 
     private ListAdapter mListAdapter;
 
+
+    /**
+     * 处理当月数据并显示
+     *
+     * @param visitPlanArrayList 获取到的月数据
+     */
+    private void handlerAndShowByDay(List<VisitPlan> visitPlanArrayList) {
+        mCalendarView.removeAllEvents();
+        if (ListUtils.isEmpty(visitPlanArrayList)) {
+            setAdapter(visitPlanArrayList);
+        } else {
+            List<VisitPlan> showPlan = new ArrayList<>();
+            String mCurrentDay = DateFormatUtil.date2Str(mCurrentDate, DateFormatUtil.YMD);
+            for (VisitPlan visitPlan : visitPlanArrayList) {
+                mCalendarView.addEvent(new Event(Color.argb(255, 169, 68, 65), visitPlan.getStartTime()));
+                if (mCurrentDay.equals(visitPlan.getStartDay())) {
+                    showPlan.add(visitPlan);
+                }
+            }
+            setAdapter(showPlan);
+        }
+    }
+
     private void setAdapter(List<VisitPlan> visitPlanArrayList) {
         if (mListAdapter == null) {
             mListAdapter = new ListAdapter(visitPlanArrayList);
@@ -208,6 +276,7 @@ public class CustomerVisitActivity extends BaseNetActivity {
         } else {
             mListAdapter.updateVisitPlans(visitPlanArrayList);
         }
+        progressDialog.dismiss();
     }
 
     private class ListAdapter extends RecyclerView.Adapter<ListAdapter.VisitRecordViewHolder> {
@@ -264,11 +333,27 @@ public class CustomerVisitActivity extends BaseNetActivity {
         @Override
         public void onBindViewHolder(VisitRecordViewHolder holder, int i) {
             VisitPlan mVisitPlan = visitPlans.get(i);
-            holder.contactTv.setText(mVisitPlan.getCode());
-            holder.dateTv.setText(mVisitPlan.getCode());
-            holder.doManTv.setText(mVisitPlan.getCode());
+            holder.contactTv.setText(mVisitPlan.getCustomerName());
+            holder.dateTv.setText(mVisitPlan.getStartDay());
+            holder.doManTv.setText(mVisitPlan.getDoman());
             holder.statusTv.setText(mVisitPlan.getStatus());
+            holder.itemView.setTag(mVisitPlan);
+            holder.itemView.setOnClickListener(mOnItemClickListener);
         }
+
+        private View.OnClickListener mOnItemClickListener = new View.OnClickListener() {
+            @Override
+            public void onClick(View view) {
+                if (view.getTag() != null && view.getTag() instanceof VisitPlan) {
+                    VisitPlan mVisitPlan = (VisitPlan) view.getTag();
+                    startActivity(new Intent(ct, CustomerVisitDetailsActivity.class)
+                            .putExtra(Constants.Intents.TITLE, "客户拜访详情")
+                            .putExtra(Constants.Intents.ID, mVisitPlan.getId())
+                            .putExtra(Constants.Intents.CALLER, "MOBILEOUTPLAN")
+                    );
+                }
+            }
+        };
     }
 
 }

+ 188 - 0
app_modular/appworks/src/main/java/com/uas/appworks/crm3_0/activity/CustomerVisitDetailsActivity.java

@@ -0,0 +1,188 @@
+package com.uas.appworks.crm3_0.activity;
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.text.TextUtils;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.widget.ListAdapter;
+import android.widget.ListView;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.common.data.JSONUtil;
+import com.common.data.ListUtils;
+import com.core.app.Constants;
+import com.core.base.OABaseActivity;
+import com.core.utils.CommonUtil;
+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.utils.UUHttpHelper;
+import com.uas.appworks.R;
+import com.uas.appworks.adapter.BillListDetailsAdapter;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class CustomerVisitDetailsActivity extends OABaseActivity {
+    private final int LOAD_FORM = 0x11;
+
+    private ListView mListView;
+    private String mCaller;
+    private int mId;
+    private UUHttpHelper mUUHttpHelper;
+    private BillListDetailsAdapter mListAdapter;
+
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.activity_customer_visit_details);
+        initView();
+    }
+
+    private void initView() {
+        mUUHttpHelper = new UUHttpHelper(CommonUtil.getAppBaseUrl(ct));
+        mListView = (ListView) findViewById(R.id.mListView);
+        start(getIntent());
+    }
+
+    public void start(Intent intent) {
+        if (intent != null) {
+            mCaller = intent.getStringExtra(Constants.Intents.CALLER);
+            String mTitle = intent.getStringExtra(Constants.Intents.TITLE);
+            mId = intent.getIntExtra(Constants.Intents.ID, 0);
+            if (mTitle != null) {
+                setTitle(mTitle);
+            }
+        }
+        loadFormandGridDetail();
+    }
+
+    private void loadFormandGridDetail() {
+        showLoading();
+        mUUHttpHelper.requestCompanyHttp(new Parameter.Builder()
+                        .url("mobile/common/getformandgriddata.action")
+                        .addParams("caller", mCaller)
+                        .addParams("id", mId)
+                        .record(LOAD_FORM)
+                , mOnSmartHttpListener);
+    }
+
+    private OnSmartHttpListener mOnSmartHttpListener = new OnSmartHttpListener() {
+        @Override
+        public void onSuccess(int what, String message, Tags tag) throws Exception {
+            JSONObject jsonObject = JSON.parseObject(message);
+            switch (what) {
+                case LOAD_FORM:
+                    handlerFormData(JSONUtil.getJSONObject(jsonObject, "datas"));
+                    break;
+            }
+            dimssLoading();
+        }
+
+        @Override
+        public void onFailure(int what, String message, Tags tag) throws Exception {
+            dimssLoading();
+            if (JSONUtil.validateJSONObject(message)) {
+                showToast(JSONUtil.getText(message, "exceptionInfo"));
+            } else {
+                showToast(message);
+            }
+
+        }
+    };
+
+    private void handlerFormData(JSONObject datas) throws Exception {
+        String status = null;
+        List<BillGroupModel> mBillGroupModels = new ArrayList<>();
+        //配置主表
+        JSONArray formdatas = JSONUtil.getJSONArray(datas, "formdata");
+        if (!ListUtils.isEmpty(formdatas)) {
+            JSONObject formdata = formdatas.getJSONObject(0);//主表数据
+            JSONArray formconfigs = JSONUtil.getJSONArray(datas, "formconfigs");//主表配置
+            BillGroupModel mGroupModel = new BillGroupModel();
+            mGroupModel.setForm(true);
+            mGroupModel.setDeleteAble(false);
+            mGroupModel.setGroupIndex(0);
+            mGroupModel.setGroup(" ");
+            handlerModelByObject(mGroupModel, formconfigs, formdata);
+            status = JSONUtil.getText(formdata, "cu_auditstatus");
+            mBillGroupModels.add(mGroupModel);
+        }
+        JSONArray gridconfigs = JSONUtil.getJSONArray(datas, "gridconfigs");
+        if (!ListUtils.isEmpty(gridconfigs)) {
+            JSONArray griddatas = JSONUtil.getJSONArray(datas, "griddata");
+            for (int i = 0; i < griddatas.size(); i++) {
+                JSONObject griddata = gridconfigs.getJSONObject(i);
+                BillGroupModel mGroupModel = new BillGroupModel();
+                mGroupModel.setForm(false);
+                mGroupModel.setGroupIndex(i + 1);
+                mGroupModel.setGroup("明细表" + mGroupModel.getGroupIndex());
+                mGroupModel.setDeleteAble(false);
+                handlerModelByObject(mGroupModel, gridconfigs, griddata);
+                mBillGroupModels.add(mGroupModel);
+            }
+        }
+        //TODO 获取到当前的状态
+        setAdapter(mBillGroupModels);
+    }
+
+    private void handlerModelByObject(BillGroupModel mGroupModel, JSONArray configs, JSONObject object) {
+        for (int i = 0; i < configs.size(); i++) {
+            JSONObject config = configs.getJSONObject(i);
+            if (config == null) continue;
+            String caption = JSONUtil.getText(config, "FD_CAPTION", "DG_CAPTION");//获取第一个字段字段名称
+            String field = JSONUtil.getText(config, "FD_FIELD", "DG_FIELD");//字段名称
+            String type = JSONUtil.getText(config, "FD_TYPE", "DG_TYPE");
+            String dbFind = JSONUtil.getText(config, "FD_DBFIND", "DG_TYPE");
+            int isdefault = JSONUtil.getInt(config, "MFD_ISDEFAULT", "MDG_ISDEFAULT");
+            int appwidth = JSONUtil.getInt(config, "FD_APPWIDTH", "DG_APPWIDTH");
+            String findFunctionName = JSONUtil.getText(config, "DG_FINDFUNCTIONNAME");
+            String allowBlank = JSONUtil.getText(config, "FD_ALLOWBLANK", "DG_ALLOWBLANK");
+            String logicType = JSONUtil.getText(config, "FD_LOGICTYPE", "DG_LOGICTYPE");
+            JSONArray combostore = JSONUtil.getJSONArray(config, "COMBOSTORE");//本地值
+            BillGroupModel.BillModel mBillModel = new BillGroupModel.BillModel();
+            mBillModel.setFindFunctionName(findFunctionName);
+            mBillModel.setCaption(caption);
+            mBillModel.setAppwidth(appwidth);
+            mBillModel.setIsdefault(isdefault);
+            mBillModel.setDbfind(dbFind);
+            mBillModel.setType(type);
+            mBillModel.setLogicType(logicType);
+            mBillModel.setField(field);
+            mBillModel.setAllowBlank(allowBlank);
+            mBillModel.setValue(JSONUtil.getText(object, field));
+            if (!ListUtils.isEmpty(combostore)) {
+                List<BillGroupModel.LocalData> localDatas = new ArrayList<>();
+                for (int j = 0; j < combostore.size(); j++) {
+                    JSONObject combosModel = combostore.getJSONObject(j);
+                    BillGroupModel.LocalData mLocalData = new BillGroupModel.LocalData();
+                    mLocalData.display = JSONUtil.getText(combosModel, "DLC_DISPLAY");
+                    mLocalData.value = JSONUtil.getText(combosModel, "DLC_VALUE");
+                    localDatas.add(mLocalData);
+                }
+                mBillModel.setLocalDatas(localDatas);
+            }
+            if (mBillModel.getIsdefault() == -1 && !mBillModel.getType().equals("H")) {
+                mGroupModel.addShow(mBillModel);
+            } else {
+                mGroupModel.addHide(mBillModel);
+            }
+
+        }
+    }
+
+    public void setAdapter(List<BillGroupModel> groupModels) {
+        if (mListAdapter == null) {
+            mListAdapter = new BillListDetailsAdapter(ct, groupModels);
+            mListView.setAdapter(mListAdapter);
+        } else {
+            mListAdapter.updateGroupModels(groupModels);
+            mListAdapter.notifyDataSetChanged();
+        }
+    }
+}

+ 38 - 4
app_modular/appworks/src/main/java/com/uas/appworks/crm3_0/fragment/CustomerListDetailsFragment.java

@@ -4,6 +4,10 @@ import android.content.Intent;
 import android.os.Bundle;
 import android.support.v7.widget.LinearLayoutManager;
 import android.support.v7.widget.RecyclerView;
+import android.text.TextUtils;
+import android.view.Menu;
+import android.view.MenuInflater;
+import android.view.MenuItem;
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
@@ -26,6 +30,7 @@ import com.module.recyclerlibrary.ui.refresh.EmptyRecyclerView;
 import com.module.recyclerlibrary.ui.refresh.simlpe.SimpleRefreshLayout;
 import com.uas.appworks.R;
 import com.uas.appworks.adapter.BillListAdapter;
+import com.uas.appworks.crm3_0.activity.BillSearchActivity;
 import com.uas.appworks.crm3_0.activity.CustomerBillInputActivity;
 import com.uas.appworks.crm3_0.activity.CustomerDetails3_0Activity;
 
@@ -48,7 +53,24 @@ public class CustomerListDetailsFragment extends ViewPagerLazyFragment {
     private UUHttpHelper mUUHttpHelper;
     private SimpleRefreshLayout mRefreshLayout;
 
+    @Override
+    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
+        inflater.inflate(R.menu.search, menu);
+        super.onCreateOptionsMenu(menu, inflater);
+    }
 
+    @Override
+    public boolean onOptionsItemSelected(MenuItem item) {
+        if (R.id.search == item.getItemId()) {
+            startActivity(new Intent(ct, BillSearchActivity.class)
+                    .putExtra(Constants.Intents.CALLER, mCaller)
+                    .putExtra(Constants.Intents.CONDITION, mCondition)
+                    .putStringArrayListExtra(Constants.Intents.FIELD_CONFIG, fieldConfig)
+                    .putExtra(Constants.Intents.TITLE, getActivity().getTitle())
+            );
+        }
+        return super.onOptionsItemSelected(item);
+    }
     public static CustomerListDetailsFragment newInstance(String mCaller, String mCondition) {
         Bundle args = new Bundle();
         CustomerListDetailsFragment fragment = new CustomerListDetailsFragment();
@@ -65,6 +87,7 @@ public class CustomerListDetailsFragment extends ViewPagerLazyFragment {
 
     @Override
     protected void LazyData() {
+        setHasOptionsMenu(true);
         mUUHttpHelper = new UUHttpHelper(CommonUtil.getAppBaseUrl(MyApplication.getInstance()));
         initView();
 
@@ -133,8 +156,13 @@ public class CustomerListDetailsFragment extends ViewPagerLazyFragment {
             dismissProgress();
         }
     };
-
+    private ArrayList<String> fieldConfig;
     private void handlerListData(JSONObject object) throws Exception {
+        if (fieldConfig==null){
+            fieldConfig=new ArrayList<>();
+        }else {
+            fieldConfig.clear();
+        }
         JSONArray columns = JSONUtil.getJSONArray(object, "columns");
         JSONArray listdata = JSONUtil.getJSONArray(object, "listdata");
         String keyField = JSONUtil.getText(object, "keyField");
@@ -160,6 +188,9 @@ public class CustomerListDetailsFragment extends ViewPagerLazyFragment {
                         String caption = JSONUtil.getText(column, "caption");
                         String dataIndex = JSONUtil.getText(column, "dataIndex");
                         String values = JSONUtil.getText(data, dataIndex);
+                        if (!TextUtils.isEmpty(dataIndex)){
+                            fieldConfig.add(dataIndex);
+                        }
                         BillListGroupModel.BillListField billListField = new BillListGroupModel.BillListField();
                         billListField.setId(id);
                         billListField.setStatus(status);
@@ -206,9 +237,12 @@ public class CustomerListDetailsFragment extends ViewPagerLazyFragment {
             mRecyclerView.setAdapter(mListAdapter);
         } else {
             List<BillListGroupModel> showModels = mListAdapter.getGroupModels();
-            if (ListUtils.isEmpty(showModels)) {
-                showModels = groupModels;
-            } else if (mPageIndex > 1) {
+            if (mPageIndex<=1){
+                showModels=groupModels;
+            }else{
+                if (showModels==null){
+                    showModels=new ArrayList<>();
+                }
                 showModels.addAll(groupModels);
             }
             mListAdapter.updateGroupModels(showModels);

+ 1 - 8
app_modular/appworks/src/main/java/com/uas/appworks/crm3_0/fragment/CustomerListFragment.java

@@ -65,20 +65,13 @@ public class CustomerListFragment extends EasyFragment {
 
     }
 
+
     private class ViewPageAdapter extends FragmentStatePagerAdapter {
 
         public ViewPageAdapter(FragmentManager fm) {
             super(fm);
         }
 
-        @Override
-        public void setPrimaryItem(ViewGroup container, int position, Object object) {
-            if (object != null && object instanceof CustomerListDetailsFragment) {
-                //获取当前的fragment
-//                mCurrentFragment = (CustomerListDetailsFragment) object;
-            }
-            super.setPrimaryItem(container, position, object);
-        }
 
         @Override
         public Fragment getItem(int position) {

+ 39 - 4
app_modular/appworks/src/main/java/com/uas/appworks/crm3_0/fragment/CustomerMapDetailsFragment.java

@@ -4,6 +4,10 @@ import android.content.Intent;
 import android.os.Bundle;
 import android.support.v7.widget.LinearLayoutManager;
 import android.support.v7.widget.RecyclerView;
+import android.text.TextUtils;
+import android.view.Menu;
+import android.view.MenuInflater;
+import android.view.MenuItem;
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
@@ -27,6 +31,7 @@ import com.module.recyclerlibrary.ui.refresh.EmptyRecyclerView;
 import com.module.recyclerlibrary.ui.refresh.simlpe.SimpleRefreshLayout;
 import com.uas.appworks.R;
 import com.uas.appworks.adapter.BillListAdapter;
+import com.uas.appworks.crm3_0.activity.BillSearchActivity;
 import com.uas.appworks.crm3_0.activity.CustomerDetails3_0Activity;
 
 import java.util.ArrayList;
@@ -55,6 +60,25 @@ public class CustomerMapDetailsFragment extends ViewPagerLazyFragment {
         return fragment;
     }
 
+    @Override
+    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
+        inflater.inflate(R.menu.search, menu);
+        super.onCreateOptionsMenu(menu, inflater);
+    }
+
+    @Override
+    public boolean onOptionsItemSelected(MenuItem item) {
+        if (R.id.search == item.getItemId()) {
+            startActivity(new Intent(ct, BillSearchActivity.class)
+                    .putExtra(Constants.Intents.CALLER, mCaller)
+                    .putExtra(Constants.Intents.CONDITION, mCondition)
+                    .putStringArrayListExtra(Constants.Intents.FIELD_CONFIG, fieldConfig)
+                    .putExtra(Constants.Intents.TITLE, getActivity().getTitle())
+            );
+        }
+        return super.onOptionsItemSelected(item);
+    }
+
     @Override
     protected int inflateLayoutId() {
         return R.layout.fragment_customer_map_3_0;
@@ -127,8 +151,13 @@ public class CustomerMapDetailsFragment extends ViewPagerLazyFragment {
             dismissProgress();
         }
     };
-
+    private ArrayList<String> fieldConfig;
     private void handlerListData(JSONObject object) throws Exception {
+        if (fieldConfig==null){
+            fieldConfig=new ArrayList<>();
+        }else {
+            fieldConfig.clear();
+        }
         JSONArray columns = JSONUtil.getJSONArray(object, "columns");
         JSONArray listdata = JSONUtil.getJSONArray(object, "listdata");
         String keyField = JSONUtil.getText(object, "keyField");
@@ -152,6 +181,9 @@ public class CustomerMapDetailsFragment extends ViewPagerLazyFragment {
                         String caption = JSONUtil.getText(column, "caption");
                         String dataIndex = JSONUtil.getText(column, "dataIndex");
                         String values = JSONUtil.getText(data, dataIndex);
+                        if (!TextUtils.isEmpty(dataIndex)){
+                            fieldConfig.add(dataIndex);
+                        }
                         BillListGroupModel.BillListField billListField = new BillListGroupModel.BillListField();
                         billListField.setId(id);
                         billListField.setCaption(caption);
@@ -189,9 +221,12 @@ public class CustomerMapDetailsFragment extends ViewPagerLazyFragment {
             mRecyclerView.setAdapter(mListAdapter);
         } else {
             List<BillListGroupModel> showModels = mListAdapter.getGroupModels();
-            if (ListUtils.isEmpty(showModels)) {
-                showModels = groupModels;
-            } else if (mPageIndex > 1) {
+            if (mPageIndex<=1){
+                showModels=groupModels;
+            }else{
+                if (showModels==null){
+                    showModels=new ArrayList<>();
+                }
                 showModels.addAll(groupModels);
             }
             mListAdapter.updateGroupModels(showModels);

+ 18 - 9
app_modular/appworks/src/main/java/com/uas/appworks/model/VisitPlan.java

@@ -4,14 +4,23 @@ package com.uas.appworks.model;
 public class VisitPlan {
     private int id;
     private String code;
-    private String entryDate;
+    private long entryDate;
     private String customerName;
     private String customerAddress;
-    private String startTime;
-    private String endTime;
+    private long startTime;
+    private long endTime;
     private String status;
     private String doman;
     private String domanCode;
+    private String startDay;
+
+    public String getStartDay() {
+        return startDay == null ? "" : startDay;
+    }
+
+    public void setStartDay(String startDay) {
+        this.startDay = startDay;
+    }
 
     public int getId() {
         return id;
@@ -29,11 +38,11 @@ public class VisitPlan {
         this.code = code;
     }
 
-    public String getEntryDate() {
+    public long getEntryDate() {
         return entryDate;
     }
 
-    public void setEntryDate(String entryDate) {
+    public void setEntryDate(long entryDate) {
         this.entryDate = entryDate;
     }
 
@@ -45,19 +54,19 @@ public class VisitPlan {
         this.customerName = customerName;
     }
 
-    public String getStartTime() {
+    public long getStartTime() {
         return startTime;
     }
 
-    public void setStartTime(String startTime) {
+    public void setStartTime(long startTime) {
         this.startTime = startTime;
     }
 
-    public String getEndTime() {
+    public long getEndTime() {
         return endTime;
     }
 
-    public void setEndTime(String endTime) {
+    public void setEndTime(long endTime) {
         this.endTime = endTime;
     }
 

+ 1 - 1
app_modular/appworks/src/main/java/com/uas/appworks/presenter/CustomerDetailsPresenter.java

@@ -88,7 +88,7 @@ public class CustomerDetailsPresenter extends BaseNetPresenter {
         iCustomerDetails.showLoading();
         requestCompanyHttp(new Parameter.Builder()
                         .url("mobile/crm/customerRelationDetails.action")
-                        .addParams("customerId", 51874)
+                        .addParams("customerId", mId)
                         .record(LOAD_RELATION_DETAILS)
                 , mOnSmartHttpListener);
         try {

+ 62 - 0
app_modular/appworks/src/main/res/layout/activity_bill_search.xml

@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical">
+
+    <android.support.v7.widget.Toolbar
+        android:id="@+id/mToolbar"
+        android:layout_width="match_parent"
+        android:layout_height="60dp"
+        android:background="@drawable/common_toolbar_bg"
+        android:orientation="horizontal"
+        android:paddingBottom="10dp"
+        android:paddingTop="10dp">
+
+        <RelativeLayout
+            android:layout_width="match_parent"
+            android:layout_height="match_parent">
+
+            <ImageView
+                android:id="@+id/backImg"
+                android:layout_width="wrap_content"
+                android:layout_height="match_parent"
+                android:padding="4dp"
+                android:src="@drawable/ic_baseutil_back" />
+
+            <com.modular.apputils.widget.MenuVoiceSearchView
+                android:id="@+id/mVoiceSearchView"
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:layout_centerInParent="true"
+                android:layout_marginLeft="50dp"
+                android:layout_marginRight="50dp"
+                android:orientation="horizontal" />
+
+
+            <ImageView
+                android:id="@+id/addImg"
+                android:layout_width="wrap_content"
+                android:layout_height="match_parent"
+                android:layout_alignParentRight="true"
+                android:layout_marginRight="5dp"
+                android:gravity="center"
+                android:padding="@dimen/padding"
+                android:src="@drawable/more"
+                android:visibility="invisible" />
+        </RelativeLayout>
+
+
+    </android.support.v7.widget.Toolbar>
+
+    <com.module.recyclerlibrary.ui.refresh.simlpe.SimpleRefreshLayout
+        android:id="@+id/mSimpleRefreshLayout"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent">
+
+        <com.module.recyclerlibrary.ui.refresh.EmptyRecyclerView
+            android:id="@+id/mEmptyRecyclerView"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent" />
+    </com.module.recyclerlibrary.ui.refresh.simlpe.SimpleRefreshLayout>
+</LinearLayout>

+ 37 - 15
app_modular/appworks/src/main/res/layout/activity_customer_visit.xml

@@ -1,8 +1,9 @@
 <?xml version="1.0" encoding="utf-8"?>
-<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
     android:layout_width="match_parent"
-    android:layout_height="match_parent">
+    android:layout_height="match_parent"
+    android:orientation="vertical">
 
     <com.modular.apputils.widget.DivideRadioGroup
         android:id="@+id/visitTypeRg"
@@ -22,7 +23,7 @@
             android:gravity="center"
             android:padding="@dimen/padding"
             android:text="我的拜访"
-            android:textColor="@color/color_public_inquiry_quote"
+            android:textColor="@color/color_public_customer_tab"
             android:textSize="15sp" />
 
         <View
@@ -38,14 +39,40 @@
             android:button="@null"
             android:gravity="center"
             android:padding="@dimen/padding"
-            android:text="我的拜访"
-            android:textColor="@color/color_public_inquiry_quote"
+            android:text="我下属的拜访"
+            android:textColor="@color/color_public_customer_tab"
             android:textSize="15sp" />
 
     </com.modular.apputils.widget.DivideRadioGroup>
 
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="2dp"
+        android:orientation="horizontal"
+        android:paddingLeft="@dimen/padding"
+        android:paddingRight="@dimen/padding">
+
+        <View
+            android:id="@+id/myLine"
+            android:layout_width="0dp"
+            android:background="#1084D1"
+            android:layout_height="match_parent"
+            android:layout_marginRight="@dimen/padding"
+            android:layout_weight="1" />
+
+        <View
+            android:id="@+id/otherLine"
+            android:layout_width="0dp"
+            android:background="#1084D1"
+            android:layout_marginLeft="@dimen/padding"
+            android:layout_height="match_parent"
+            android:layout_weight="1" />
+
+    </LinearLayout>
+
     <RelativeLayout
         android:id="@+id/calenderRl"
+        android:layout_marginTop="@dimen/paddingMin"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:background="@color/white"
@@ -95,14 +122,9 @@
 
     <com.module.recyclerlibrary.ui.refresh.EmptyRecyclerView
         android:id="@+id/mEmptyRecyclerView"
-        android:layout_width="0dp"
-        android:layout_height="wrap_content"
+        android:layout_width="match_parent"
+        android:layout_height="0dp"
+        android:layout_weight="1"
         android:layout_marginTop="@dimen/padding"
-        android:background="@color/white"
-        app:layout_constraintBottom_toBottomOf="parent"
-        app:layout_constraintHorizontal_bias="0.0"
-        app:layout_constraintLeft_toLeftOf="parent"
-        app:layout_constraintRight_toRightOf="parent"
-        app:layout_constraintTop_toBottomOf="@id/compactcalendar_view"
-        app:layout_constraintVertical_bias="1.0" />
-</android.support.constraint.ConstraintLayout>
+        android:background="@color/white"/>
+</LinearLayout>

+ 16 - 0
app_modular/appworks/src/main/res/layout/activity_customer_visit_details.xml

@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical">
+
+    <ListView
+        android:id="@+id/mListView"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:divider="@color/item_line"
+        android:dividerHeight="@dimen/line"
+        android:focusableInTouchMode="false" />
+
+
+</LinearLayout>