Browse Source

commit msg

SpringBoots 8 years ago
parent
commit
180bb9f6d0
25 changed files with 893 additions and 378 deletions
  1. 116 0
      WeiChat/src/main/java/com/xzjmyk/pm/activity/adapter/NodeAdapter.java
  2. 15 4
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/circle/BasicInfoActivity.java
  3. 1 1
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/AppWebViewActivity.java
  4. 19 5
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/CommonDocDetailsActivity.java
  5. 6 4
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/TaskActivity.java
  6. 28 24
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/contanct/ContactsActivity.java
  7. 69 65
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/form/DataFormFieldActivity.java
  8. 37 37
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/message/ProcessMsgActivity.java
  9. 1 6
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/oa/AddVisitReportActivity.java
  10. 26 2
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/oa/ApprovalActivity.java
  11. 137 121
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/oa/DailydetailsActivity.java
  12. 28 28
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/oa/ExpenseReimbursementActivity.java
  13. 1 0
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/adapter/oa/ApprovalAdapter.java
  14. 8 8
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/db/dao/ContactsDao.java
  15. 2 1
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/model/form/Data.java
  16. 6 5
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/model/oa/Approval.java
  17. 10 12
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/net/ViewUtil.java
  18. 219 35
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/presenter/ApprovaPresenter.java
  19. 2 0
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/presenter/imp/IApproval.java
  20. 111 0
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/util/ApprovaNodeUtil.java
  21. 14 19
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/message/MessageFragment.java
  22. 1 0
      WeiChat/src/main/res/layout/new_message_header.xml
  23. 1 1
      WeiChat/src/main/res/raw/versionconfiguration.properties
  24. 1 0
      app_core/common/.gitignore
  25. 34 0
      app_core/common/build.gradle

+ 116 - 0
WeiChat/src/main/java/com/xzjmyk/pm/activity/adapter/NodeAdapter.java

@@ -0,0 +1,116 @@
+package com.xzjmyk.pm.activity.adapter;
+
+import android.content.Context;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.BaseAdapter;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.xzjmyk.pm.activity.R;
+import com.xzjmyk.pm.activity.helper.AvatarHelper;
+import com.xzjmyk.pm.activity.ui.erp.model.oa.Approval;
+import com.xzjmyk.pm.activity.ui.erp.util.ListUtils;
+import com.xzjmyk.pm.activity.ui.erp.util.StringUtils;
+
+import java.util.List;
+
+/**
+ * Created by Bitliker on 2017/8/11.
+ */
+
+public class NodeAdapter extends BaseAdapter {
+
+    private Context ct;
+    private List<Approval> approvals;
+
+
+    public NodeAdapter(Context ct, List<Approval> approvals) {
+        this.ct = ct;
+        this.approvals = approvals;
+    }
+
+    @Override
+    public int getCount() {
+        return ListUtils.getSize(approvals);
+    }
+
+    @Override
+    public Object getItem(int position) {
+        return approvals.get(position);
+    }
+
+    @Override
+    public long getItemId(int position) {
+        return position;
+    }
+
+    @Override
+    public View getView(int position, View itemView, ViewGroup parent) {
+        NodeViewHolder holder = null;
+        if (itemView == null) {
+            holder = new NodeViewHolder();
+            itemView = LayoutInflater.from(ct).inflate(R.layout.item_approval_node, parent, false);
+            holder.timeTv = (TextView) itemView.findViewById(R.id.timeTv);
+            holder.keyTv = (TextView) itemView.findViewById(R.id.keyTv);
+            holder.valuesTv = (TextView) itemView.findViewById(R.id.valuesTv);
+            holder.handIv = (ImageView) itemView.findViewById(R.id.handIv);
+            holder.statusIV = (ImageView) itemView.findViewById(R.id.statusIV);
+            holder.padding = itemView.findViewById(R.id.padding);
+            itemView.setTag(holder);
+        } else {
+            holder = (NodeViewHolder) itemView.getTag();
+        }
+        bindNodeView(holder, position);
+        return itemView;
+    }
+
+    private void bindNodeView(NodeViewHolder holder, int position) {
+        Approval approval = approvals.get(position);
+        if (position > 0 && approvals.get(position - 1).getType() != Approval.NODES) {
+            holder.padding.setVisibility(View.VISIBLE);
+        } else {
+            holder.padding.setVisibility(View.GONE);
+        }
+        int textColor = R.color.hintColor;
+        if (!StringUtils.isEmpty(approval.getIdKey())) {
+            holder.valuesTv.setText(approval.getIdKey());
+            if (approval.getIdKey().startsWith("待审批")) {
+                textColor = R.color.approvaling;
+            } else if (approval.getIdKey().startsWith("未通过")) {
+                textColor = R.color.crimson;
+            }
+        } else {
+            holder.valuesTv.setText("");
+        }
+        holder.valuesTv.setTextColor(ct.getResources().getColor(textColor));
+        holder.keyTv.setText(approval.getCaption());
+        int reId = R.drawable.weishenpi;
+        if (!StringUtils.isEmpty(approval.getIdKey())) {
+            String status = approval.getIdKey().split("\\(")[0];
+            if (StringUtils.isEmpty(status)) status = "";
+            if ("已审批".equals(status)) {
+                reId = R.drawable.node_finished3;
+            } else if ("待审批".equals(status)) {
+                reId = R.drawable.daishenpi;
+            } else if ("未通过".equals(status)) {
+                reId = R.drawable.node_delete;
+            } else {
+                reId = R.drawable.weishenpi;
+            }
+        }
+        holder.statusIV.setImageResource(reId);
+        AvatarHelper.getInstance().display(String.valueOf(approval.getId()), holder.handIv, true, false);
+        holder.timeTv.setTextColor(ct.getResources().getColor(R.color.text_normal));
+        holder.timeTv.setText(approval.getValues());
+    }
+
+    private class NodeViewHolder {
+        ImageView handIv, statusIV;
+        TextView timeTv, keyTv, valuesTv;
+        View padding;
+
+
+    }
+}

+ 15 - 4
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/circle/BasicInfoActivity.java

@@ -756,13 +756,13 @@ public class BasicInfoActivity extends BaseActivity implements NewFriendListener
                         // 更新界面
                         do_next_tv.setText(R.string.send_msg);
                         do_next_tv.setOnClickListener(new SendMsgListener());
-                        
-                        ContactsModel model=new ContactsModel();
+
+                        ContactsModel model = new ContactsModel();
                         model.setImid(mUser.getUserId());
                         model.setOwnerId(MyApplication.getInstance().mLoginUser.getUserId());
-                        model.setWhichsys(CommonUtil.getSharedPreferences(MyApplication.getInstance(),"erp_master"));
+                        model.setWhichsys(CommonUtil.getSharedPreferences(MyApplication.getInstance(), "erp_master"));
                         model.setType(1);
-                        if (StringUtils.isEmpty(model.getWhichsys())){
+                        if (StringUtils.isEmpty(model.getWhichsys())) {
                             model.setWhichsys("");
                         }
                         ContactsDao.getInstance().update(model);
@@ -887,6 +887,17 @@ public class BasicInfoActivity extends BaseActivity implements NewFriendListener
                     @Override
                     public void onClick(DialogInterface dialog, int which) {
                         deleteFriend(friend, 0);
+                        //取消好友  更新通讯录数据库
+                        ContactsModel model = new ContactsModel();
+                        model.setImid(mUser.getUserId());
+                        model.setOwnerId(MyApplication.getInstance().mLoginUser.getUserId());
+                        model.setWhichsys(CommonUtil.getSharedPreferences(MyApplication.getInstance(), "erp_master"));
+                        model.setType(2);
+                        if (StringUtils.isEmpty(model.getWhichsys())) {
+                            model.setWhichsys("");
+                        }
+                        ContactsDao.getInstance().update(model);
+
                     }
                 }).setNegativeButton(getString(R.string.common_cancel), null);
         builder.create().show();

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

@@ -23,7 +23,6 @@ public class AppWebViewActivity extends WebViewLoadActivity {
         super.onCreate(savedInstanceState, persistentState);
     }
 
-
     @Override
     public boolean onOptionsItemSelected(MenuItem item) {
         if (item.getItemId() == R.id.returnOld) {
@@ -34,6 +33,7 @@ public class AppWebViewActivity extends WebViewLoadActivity {
                 nodeId = getIntent().getIntExtra("nodeid", -1);
             }
             intent.putExtra("nodeid", nodeId);
+            intent.putExtra("master", getIntent().getStringExtra("master"));
             startActivity(intent);
             finish();
         }

+ 19 - 5
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/CommonDocDetailsActivity.java

@@ -30,6 +30,7 @@ import com.xzjmyk.pm.activity.R;
 import com.xzjmyk.pm.activity.adapter.ComDocGriddataOutAdapter;
 import com.xzjmyk.pm.activity.adapter.CommonDocApprovalFlowAdapter;
 import com.xzjmyk.pm.activity.adapter.CommonDocMainMsgAdapter;
+import com.xzjmyk.pm.activity.adapter.NodeAdapter;
 import com.xzjmyk.pm.activity.bean.oa.CommonApprovalFlowBean;
 import com.xzjmyk.pm.activity.bean.oa.CommonDocAMBean;
 import com.xzjmyk.pm.activity.helper.AvatarHelper;
@@ -39,8 +40,10 @@ import com.xzjmyk.pm.activity.ui.erp.activity.form.FormListSelectActivity;
 import com.xzjmyk.pm.activity.ui.erp.activity.oa.ExpenseReimbursementActivity;
 import com.xzjmyk.pm.activity.ui.erp.db.DBManager;
 import com.xzjmyk.pm.activity.ui.erp.entity.EmployeesEntity;
+import com.xzjmyk.pm.activity.ui.erp.model.oa.Approval;
 import com.xzjmyk.pm.activity.ui.erp.net.ViewUtil;
 import com.xzjmyk.pm.activity.ui.erp.util.ActivityUtils;
+import com.xzjmyk.pm.activity.ui.erp.util.ApprovaNodeUtil;
 import com.xzjmyk.pm.activity.ui.erp.util.CommonUtil;
 import com.xzjmyk.pm.activity.ui.erp.util.Constants;
 import com.xzjmyk.pm.activity.ui.erp.util.ListUtils;
@@ -779,11 +782,11 @@ public class CommonDocDetailsActivity extends BaseActivity {
                 }
                 Log.i("last_afpeople_names", afpeople_names.toString());
                 Log.i("last_imids", im_ids.toString());
-                mCommonDocApprovalFlowAdapter.setIm_ids(im_ids);
-                mCommonDocApprovalFlowAdapter.setAfpeople_names(afpeople_names);
+//                mCommonDocApprovalFlowAdapter.setIm_ids(im_ids);
+//                mCommonDocApprovalFlowAdapter.setAfpeople_names(afpeople_names);
                 // 设置数据之前先通过数据库获取到所有的imid保存到内存中
-                mCommonDocApprovalFlowAdapter.setmCommonApprovalFlowBean(mCommonApprovalFlowBean);
-                appflow_lv.setAdapter(mCommonDocApprovalFlowAdapter);
+//                mCommonDocApprovalFlowAdapter.setmCommonApprovalFlowBean(mCommonApprovalFlowBean);
+//                appflow_lv.setAdapter(mCommonDocApprovalFlowAdapter);
 
                 if (ListUtils.isEmpty(mCommonApprovalFlowBean.getData()) && ListUtils.isEmpty(mCommonApprovalFlowBean.getNodes())) {
                     hide_above_af.setVisibility(View.GONE);
@@ -794,9 +797,20 @@ public class CommonDocDetailsActivity extends BaseActivity {
         }catch (Exception e){
             e.printStackTrace();
         }
+
+        handlerNode(af_result);
         getemcodefromAF();
     }
-
+    private void handlerNode(String message) {
+        List<Approval> approvals = ApprovaNodeUtil.handlerNode(manager, message);
+        if (!ListUtils.isEmpty(approvals)) {
+            NodeAdapter nodeAdapter = new NodeAdapter(this, approvals);
+            appflow_lv.setAdapter(nodeAdapter);
+        } else {
+            //TODO 为空时候
+        }
+        progressDialog.dismiss();
+    }
     /**
      * 申请单据申请人emcode,从审批流数据获取
      */

+ 6 - 4
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/TaskActivity.java

@@ -69,7 +69,8 @@ import java.util.regex.PatternSyntaxException;
 
 @SuppressWarnings({"unused", "deprecation"})
 public class TaskActivity extends BaseActivity implements OnClickListener {
-
+    //TODO 应要求修改先修改为2000,后面再优化
+    private final int PAGE_SIZE=2000;
     private EmptyLayout mEmptyLayout;
     private Context context;
     private PullToRefreshListView listview_main;
@@ -788,7 +789,7 @@ public class TaskActivity extends BaseActivity implements OnClickListener {
         mparams.put("sessionId", CommonUtil.getSharedPreferences(context, "sessionId"));
         mparams.put("caller", "ResourceAssignment");
         mparams.put("page", "1");
-        mparams.put("pageSize", "100");
+        mparams.put("pageSize", PAGE_SIZE);
         mparams.put("_noc", "1");
         String em_code = CommonUtil.getSharedPreferences(context, "erp_username");
         String erp_emid = CommonUtil.getSharedPreferences(context, "erp_emid");
@@ -805,6 +806,7 @@ public class TaskActivity extends BaseActivity implements OnClickListener {
         ViewUtil.httpSendRequest(context, url, mparams, handler, headers, handlerWhat, null, null, "get");
     }
 
+
     /**
      * @注释: 带条件的调转
      */
@@ -815,7 +817,7 @@ public class TaskActivity extends BaseActivity implements OnClickListener {
         mparams.put("sessionId", CommonUtil.getSharedPreferences(context, "sessionId"));
         mparams.put("caller", "ResourceAssignment");
         mparams.put("page", mCurrentPage);
-        mparams.put("pageSize", "100");
+        mparams.put("pageSize", PAGE_SIZE);
         mparams.put("_noc", "1");
         mparams.put("status", "");
         String em_code = CommonUtil.getSharedPreferences(context, "erp_username");
@@ -836,7 +838,7 @@ public class TaskActivity extends BaseActivity implements OnClickListener {
         mparams.put("sessionId", CommonUtil.getSharedPreferences(context, "sessionId"));
         mparams.put("caller", "ResourceAssignment");
         mparams.put("page", "1");
-        mparams.put("pageSize", "100");
+        mparams.put("pageSize", PAGE_SIZE);
         mparams.put("_noc", "1");
         String em_code = CommonUtil.getSharedPreferences(context, "erp_emid");
         mparams.put("condition", "recorderid='" + em_code + "'" + "and handstatuscode<>'FINISHED'" + " and nvl(class,' ')<>'projecttask'");

+ 28 - 24
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/contanct/ContactsActivity.java

@@ -205,13 +205,13 @@ public class ContactsActivity extends OABaseActivity implements ContactsAdapter.
             @Override
             public void afterTextChanged(Editable s) {
                 searchKey = s.toString();
-                LogUtil.d("arison"," searchKey:"+searchKey);
+                LogUtil.d("arison", " searchKey:" + searchKey);
                 if (!StringUtils.isEmpty(s.toString())) {
                     mlist.setMode(PullToRefreshBase.Mode.DISABLED);
                     List<ContactsModel> cacheData = contactsDao.find(s.toString());
                     if (adapter != null) {
                         if (ListUtils.isEmpty(cacheData)) {
-                            LogUtil.d("arison","searchContactsByNet:"+searchKey);
+                            LogUtil.d("arison", "searchContactsByNet:" + searchKey);
                             searchContactsByNet(s.toString());
                             return;
                         }
@@ -219,7 +219,7 @@ public class ContactsActivity extends OABaseActivity implements ContactsAdapter.
                         models.addAll(cacheData);
                         adapter.notifyDataSetChanged();
                         //查询需要优化
-                        getStateByPhones(cacheData);
+                        //getStateByPhones(cacheData);
                         if (models.size() == 0) {
                             emptyLayout.showEmpty();
                         }
@@ -248,23 +248,26 @@ public class ContactsActivity extends OABaseActivity implements ContactsAdapter.
             PermissionUtil.requestPermission(this, PermissionUtil.DEFAULT_REQUEST, permissions);
         } else {
             getCaceData(false);
-            LogUtil.d("Test","有权限@....");
+            isHasPermiss = true;
+            LogUtil.d("Test", "有权限@....");
         }
     }
-  boolean isHasPermiss=false;
+
+    boolean isHasPermiss = false;
+
     @Override
     public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
         super.onRequestPermissionsResult(requestCode, permissions, grantResults);
         if (requestCode == PermissionUtil.DEFAULT_REQUEST) {
             if (grantResults.length != 1 || grantResults[0] != PackageManager.PERMISSION_GRANTED) {
                 ToastUtil.showToast(ct, R.string.not_system_permission);
-                isHasPermiss=false;
+                isHasPermiss = false;
                 getCaceData(false);
-                LogUtil.d("Test","没有权限....");
+                LogUtil.d("Test", "没有权限....");
             } else {
-                isHasPermiss=true;
+                isHasPermiss = true;
                 getCaceData(false);
-                LogUtil.d("Test","有权限....");
+                LogUtil.d("Test", "有权限....");
             }
         }
     }
@@ -316,7 +319,7 @@ public class ContactsActivity extends OABaseActivity implements ContactsAdapter.
                         model.setEmail("");
                         model.setOwnerId(MyApplication.getInstance().mLoginUser.getUserId());
                         model.setPhone(entity.getPhone());
-                        model.setWhichsys("");
+                        model.setWhichsys(CommonUtil.getSharedPreferences(MyApplication.getInstance(),"erp_master"));
                         model.setCompany("");
                         tmodels.add(model);
                     }
@@ -336,7 +339,8 @@ public class ContactsActivity extends OABaseActivity implements ContactsAdapter.
         ThreadPool.getThreadPool().addTask(new Runnable() {
             @Override
             public void run() {
-                if ( isHasPermiss){
+                LogUtil.d("Test","isHasPermiss:"+isHasPermiss);
+                if (isHasPermiss) {
                     List<Contacts> contacts =
                             ContactsUtils.getContacts1();
                     if (contacts != null) {
@@ -348,7 +352,7 @@ public class ContactsActivity extends OABaseActivity implements ContactsAdapter.
                             model.setEmail("");
                             model.setOwnerId(MyApplication.getInstance().mLoginUser.getUserId());
                             model.setPhone(entity.getPhone());
-                            model.setWhichsys("");
+                            model.setWhichsys(CommonUtil.getSharedPreferences(MyApplication.getInstance(),"erp_master"));
                             model.setCompany("");
                             tmodels.add(model);
 
@@ -356,12 +360,12 @@ public class ContactsActivity extends OABaseActivity implements ContactsAdapter.
                         contactsDao.save(tmodels);
                         getCaceData(false);
                     }
-                }else{
+                } else {
                     //没权限
                     contactsDao.save(tmodels);
                     getCaceData(false);
                 }
-              
+
             }
         });
 
@@ -457,7 +461,6 @@ public class ContactsActivity extends OABaseActivity implements ContactsAdapter.
         params.put("token", MyApplication.getInstance().mAccessToken);
         params.put("userid", myUserId);
         params.put("telephones", builder.toString());
-        LogUtil.d("array myUserId=" + myUserId);
         LogUtil.d("array builder.toString=" + builder.toString());
         StringJsonObjectRequest<String> request = new StringJsonObjectRequest<String>(
                 MyApplication.getInstance().getConfig().APP_QUER_YUSER, new Response.ErrorListener() {
@@ -470,6 +473,7 @@ public class ContactsActivity extends OABaseActivity implements ContactsAdapter.
             public void onResponse(ObjectResult<String> result) {
                 String message = result.toString();
                 if (!OACheckUtil.isEmpty(message)) {
+                    LogUtil.d("Test", "message:" + message);
                     hanlderAppQueryuserInThread(message);
                 }
             }
@@ -502,11 +506,12 @@ public class ContactsActivity extends OABaseActivity implements ContactsAdapter.
                         if (model.getPhone().equals(telephone)) {
                             if (isfriend.equals("0")) {
                                 model.setType(2);//非好友
-                                model.setImid(String.valueOf(_id));
-                                // contactsDao.update(model,String.valueOf(_id));
+                              model.setImid(String.valueOf(_id));
+                                contactsDao.update(model,"0");
                             } else if (isfriend.equals("1")) {
                                 model.setType(1);//好友
                                 model.setImid(String.valueOf(_id));
+                                contactsDao.update(model,"0");
                             }
                         }
                     }
@@ -587,7 +592,7 @@ public class ContactsActivity extends OABaseActivity implements ContactsAdapter.
         LogUtil.i("invite");
         final String name = CommonUtil.getName();
         final String phone = user.getPhone().trim().replaceAll(" ", "");
-        
+
 //        if (!com.xzjmyk.pm.activity.util.StringUtils.isMobileNumber(phone)) {
 //            showToast("选择人员电话号码为空或是格式不正确", R.color.load_submit);
 //            return;
@@ -640,10 +645,8 @@ public class ContactsActivity extends OABaseActivity implements ContactsAdapter.
                     if (success) {
                         String role = UserRoleUtils.getUserRole();
                         if ("1".equals(role)) {
-                            LogUtil.d("Test","个人用户不需要加载企业架构");
                             //个人用户不需要加载企业架构
                             loadLocalContacts();
-                            return;
                         }
                         boolean isB2b = ApiUtils.getApiModel() instanceof ApiPlatform;
                         JSONObject object = JSON.parseObject(message);
@@ -711,7 +714,8 @@ public class ContactsActivity extends OABaseActivity implements ContactsAdapter.
                                             model.setEmail("");
                                             model.setOwnerId(MyApplication.getInstance().mLoginUser.getUserId());
                                             model.setPhone(entity.getPhone());
-                                            model.setWhichsys("");
+                                            //uu好友
+                                            model.setWhichsys(CommonUtil.getSharedPreferences(MyApplication.getInstance(),"erp_master"));
                                             model.setCompany("");
                                             tmodels.add(model);
                                         }
@@ -760,8 +764,8 @@ public class ContactsActivity extends OABaseActivity implements ContactsAdapter.
                         if (!ListUtils.isEmpty(models)) {
                             models.clear();
                             models.addAll(xmodels);
-                        }else{
-                            models.addAll(xmodels); 
+                        } else {
+                            models.addAll(xmodels);
                         }
                         if (adapter != null) {
                             adapter.notifyDataSetChanged();
@@ -770,7 +774,7 @@ public class ContactsActivity extends OABaseActivity implements ContactsAdapter.
                             emptyLayout.showEmpty();
                         }
                     } catch (Exception e) {
-                       
+
                     }
                     break;
             }

+ 69 - 65
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/form/DataFormFieldActivity.java

@@ -45,17 +45,18 @@ public class DataFormFieldActivity extends BaseActivity implements AdapterView.O
 
     @ViewInject(R.id.asset_grid_delete)
     private MyStickyGridHeadersGridView mDGridView;
-    
-    
+
+
     @ViewInject(R.id.bt_save)
     private Button bt_save;
-    
+
     @ViewInject(R.id.ll_hide)
     private LinearLayout ll_hide;
     @ViewInject(R.id.ll_add)
     private LinearLayout ll_add;
     private StickyGridAdapter mAdapter;
     private StickyGridAdapter mDadapter;
+    private String master;//添加账套,由于审批流部分存在不同账套的问题
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
@@ -72,22 +73,23 @@ public class DataFormFieldActivity extends BaseActivity implements AdapterView.O
         if (intent != null) {
             List<Data> fields = (List) intent.getParcelableArrayListExtra("fields");//传递数据
             List<Data> fieldsDis = (List) intent.getParcelableArrayListExtra("fieldsDis");//传递数据
-            caller=intent.getStringExtra("caller");
-            initData(fields,fieldsDis);
+            caller = intent.getStringExtra("caller");
+            master = intent.getStringExtra("master");
+            initData(fields, fieldsDis);
         } else {
-            initData(null,null);
+            initData(null, null);
         }
-        
+
         bt_save.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View v) {
-                commit();;
+                commit(); ;
             }
         });
     }
 
-    private void initData(List<Data> fields,List<Data> fieldsDis) {
-        if (ListUtils.isEmpty(fields)&&ListUtils.isEmpty(fieldsDis)) {
+    private void initData(List<Data> fields, List<Data> fieldsDis) {
+        if (ListUtils.isEmpty(fields) && ListUtils.isEmpty(fieldsDis)) {
             List<Data> hasHeaderIdList = new ArrayList<>();
 //            int groupId = 1;
 //            for (int i = 0; i < 25; i++) {
@@ -106,26 +108,26 @@ public class DataFormFieldActivity extends BaseActivity implements AdapterView.O
             mGridView.setAreHeadersSticky(false);//空值悬停
             mGridView.setOnItemClickListener(this);
 
-            mDadapter = new StickyGridAdapter(DataFormFieldActivity.this, hasHeaderIdList,   mDGridView);
-            mDGridView.setAdapter( mDadapter);
+            mDadapter = new StickyGridAdapter(DataFormFieldActivity.this, hasHeaderIdList, mDGridView);
+            mDGridView.setAdapter(mDadapter);
             mDGridView.setAreHeadersSticky(false);//空值悬停
-            
+
             mDGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                 @Override
                 public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
-                    
+
                 }
             });
-            
+
             View emptyView = LayoutInflater.from(this).inflate(R.layout.erp_empty_view, null);
             emptyView.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
             emptyView.setVisibility(View.GONE);
-            ((ViewGroup)mGridView.getParent()).addView(emptyView);
+            ((ViewGroup) mGridView.getParent()).addView(emptyView);
 //            ((ViewGroup)mDGridView.getParent()).addView(emptyView);
-            
+
             mGridView.setEmptyView(emptyView);
 //            mDGridView.setEmptyView(emptyView);
-            
+
             bt_save.setVisibility(View.GONE);
             ll_add.setVisibility(View.GONE);
             ll_hide.setVisibility(View.GONE);
@@ -150,11 +152,11 @@ public class DataFormFieldActivity extends BaseActivity implements AdapterView.O
                     mDadapter.notifyDataSetChanged();
                 }
             });
-            if (ListUtils.isEmpty(fields)){
+            if (ListUtils.isEmpty(fields)) {
                 ll_add.setVisibility(View.GONE);
                 ll_hide.setVisibility(View.VISIBLE);
             }
-            if (ListUtils.isEmpty(fieldsDis)){
+            if (ListUtils.isEmpty(fieldsDis)) {
                 ll_add.setVisibility(View.VISIBLE);
                 ll_hide.setVisibility(View.GONE);
             }
@@ -175,7 +177,7 @@ public class DataFormFieldActivity extends BaseActivity implements AdapterView.O
 
     @Override
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
-       // ToastMessage(mAdapter.getHasHeaderIdList().get(position).getName() + "被点击!");
+        // ToastMessage(mAdapter.getHasHeaderIdList().get(position).getName() + "被点击!");
         if (mAdapter.getHasHeaderIdList().get(position).isSelected()) {
             mAdapter.getHasHeaderIdList().get(position).setIsSelected(false);
         } else {
@@ -186,14 +188,14 @@ public class DataFormFieldActivity extends BaseActivity implements AdapterView.O
     }
 
 
-    private String formStore="";
-    private String gridStore="";
+    private String formStore = "";
+    private String gridStore = "";
     private String caller;
-   
-    private Handler mHandler=new Handler(){
+
+    private Handler mHandler = new Handler() {
         @Override
         public void handleMessage(Message msg) {
-            switch (msg.what){
+            switch (msg.what) {
                 case Constants.HTTP_SUCCESS_INIT:
                     LogUtil.d(msg.getData().getString("result"));
                     ToastMessage("提交成功!");
@@ -203,12 +205,12 @@ public class DataFormFieldActivity extends BaseActivity implements AdapterView.O
                             setResult(0x25);
                             finish();
                         }
-                    },3000);
+                    }, 3000);
                     break;
             }
         }
     };
-    
+
 
     /*
     * 界面配更新接口:
@@ -219,92 +221,94 @@ public class DataFormFieldActivity extends BaseActivity implements AdapterView.O
     public void commit() {
         List<Data> mSource = mAdapter.getHasHeaderIdList();
         List<Data> mDSource = mDadapter.getHasHeaderIdList();
-        HashMap<String,Integer> resultMap=new HashMap<>();
+        HashMap<String, Integer> resultMap = new HashMap<>();
 //        LogUtil.d(JSON.toJSONString(mSource));
 //        LogUtil.d(JSON.toJSONString(mDSource));
-        formStore="";
-        gridStore="";
-        if (!ListUtils.isEmpty(mSource)){
-            for (int i=0;i<mSource.size();i++){
-                String formStr ="";
-                String girdStr="";
-                if (mSource.get(i).getGroupId()==0) {
+        formStore = "";
+        gridStore = "";
+        if (!ListUtils.isEmpty(mSource)) {
+            for (int i = 0; i < mSource.size(); i++) {
+                String formStr = "";
+                String girdStr = "";
+                if (mSource.get(i).getGroupId() == 0) {
                     if (mSource.get(i).isSelected()) {
                         formStr = mSource.get(i).getField();
                     }
-                    if(StringUtils.isEmpty(formStr))continue;
+                    if (StringUtils.isEmpty(formStr)) continue;
 //                    if (i==mSource.size()-1){
 //                        formStore+=formStr;
 //                    }else{
-                        formStore+=formStr+",";
-                       resultMap.put(formStr,-1);//准备显示
+                    formStore += formStr + ",";
+                    resultMap.put(formStr, -1);//准备显示
 //                    }
-                }else{
+                } else {
                     if (mSource.get(i).isSelected()) {
                         girdStr = mSource.get(i).getField();
                     }
-                    if(StringUtils.isEmpty(girdStr))continue;
+                    if (StringUtils.isEmpty(girdStr)) continue;
 //                    if(i==mSource.size()-1){
 //                        gridStore+=girdStr;
 //                    }else{
-                        gridStore+=girdStr+",";
-                       resultMap.put(girdStr,-1);//准备显示
+                    gridStore += girdStr + ",";
+                    resultMap.put(girdStr, -1);//准备显示
 //                    } 
                 }
-                }
             }
+        }
 
 
-        if (!ListUtils.isEmpty(mDSource)){
-            for (int i=0;i<mDSource.size();i++){
-                String formStr ="";
-                String girdStr="";
-                if (mDSource.get(i).getGroupId()==0) {
+        if (!ListUtils.isEmpty(mDSource)) {
+            for (int i = 0; i < mDSource.size(); i++) {
+                String formStr = "";
+                String girdStr = "";
+                if (mDSource.get(i).getGroupId() == 0) {
                     if (mDSource.get(i).isSelected()) {
                         formStr = mDSource.get(i).getField();
                     }
-                    if(StringUtils.isEmpty(formStr))continue;
+                    if (StringUtils.isEmpty(formStr)) continue;
 //                    if (i==mSource.size()-1){
 //                        formStore+=formStr;
 //                    }else{
-                    formStore+=formStr+",";
-                    resultMap.put(formStr,0);//准备隐藏
+                    formStore += formStr + ",";
+                    resultMap.put(formStr, 0);//准备隐藏
 //                    }
-                }else{
+                } else {
                     if (mDSource.get(i).isSelected()) {
                         girdStr = mDSource.get(i).getField();
                     }
-                    if(StringUtils.isEmpty(girdStr))continue;
+                    if (StringUtils.isEmpty(girdStr)) continue;
 //                    if(i==mSource.size()-1){
 //                        gridStore+=girdStr;
 //                    }else{
-                    gridStore+=girdStr+",";
-                    resultMap.put(girdStr,0);//准备隐藏
+                    gridStore += girdStr + ",";
+                    resultMap.put(girdStr, 0);//准备隐藏
 //                    } 
                 }
             }
         }
-        
-        
+
+
 //        LogUtil.d(formStore);
 //        LogUtil.d(gridStore);
         LogUtil.d(JSON.toJSONString(resultMap));
-        if (!StringUtils.isEmpty(formStore))formStore=formStore.substring(0,formStore.length()-1);
-        if (!StringUtils.isEmpty(gridStore))gridStore=gridStore.substring(0,gridStore.length()-1);
-        if (StringUtils.isEmpty(gridStore)&&StringUtils.isEmpty(formStore)){
+        if (!StringUtils.isEmpty(formStore))
+            formStore = formStore.substring(0, formStore.length() - 1);
+        if (!StringUtils.isEmpty(gridStore))
+            gridStore = gridStore.substring(0, gridStore.length() - 1);
+        if (StringUtils.isEmpty(gridStore) && StringUtils.isEmpty(formStore)) {
             ToastMessage("当前没有选中项");
             return;
         }
         String url = Constants.getAppBaseUrl(ct) + "/mobile/common/updatemobiledefault.action";
         Map<String, Object> params = new HashMap<>();
         params.put("caller", caller);
+        params.put("master", master);
         params.put("formStore", JSON.toJSONString(resultMap));
-       // params.put("gridStore", gridStore);
+        // params.put("gridStore", gridStore);
         LinkedHashMap<String, Object> headers = new LinkedHashMap<>();
         headers.put("Cookie", "JSESSIONID=" + CommonUtil.getSharedPreferences(ct, "sessionId"));
         ViewUtil.httpSendRequest(ct, url, params, mHandler, headers, Constants.HTTP_SUCCESS_INIT, null, null, "post");
     }
-    
-    
-    
+
+
 }

+ 37 - 37
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/message/ProcessMsgActivity.java

@@ -43,6 +43,7 @@ import com.xzjmyk.pm.activity.ui.erp.util.StringUtils;
 import com.xzjmyk.pm.activity.ui.erp.view.EmptyLayout;
 import com.xzjmyk.pm.activity.ui.erp.view.VoiceSearchView;
 import com.xzjmyk.pm.activity.util.DateFormatUtil;
+import com.xzjmyk.pm.activity.util.TimeUtils;
 
 import java.util.ArrayList;
 import java.util.Date;
@@ -108,11 +109,6 @@ public class ProcessMsgActivity extends BaseActivity implements View.OnClickList
                             mAdapter.setData(array);
                             mAdapter.notifyDataSetChanged();
                         }
-
-                        if (currentId != 0) {
-//                            mList.getRefreshableView().setSelection(currentId);
-//                            mList.getRefreshableView().setSelection(0);
-                        }
                         ToastMessage(getString(R.string.common_up_finish));
                         progressDialog.dismiss();
                     } catch (Exception e) {
@@ -129,11 +125,9 @@ public class ProcessMsgActivity extends BaseActivity implements View.OnClickList
                         tv_process_un_num.setText(array.size() + "");
                     }
 
-                    if (wait_app) {
+                    if (tab_type == 1 && mPosition > 0) {
                         if (mPosition < array.size()) {
                             mList.getRefreshableView().setSelection(mPosition);
-                        } else {
-                            mList.getRefreshableView().setSelection(array.size() - 1);
                         }
                     }
                     progressDialog.dismiss();
@@ -176,10 +170,7 @@ public class ProcessMsgActivity extends BaseActivity implements View.OnClickList
                     if (array.size() == 0) {
                         mEmptyLayout.showEmpty();
                     } else {
-                        handleImids(3, array);
-                    }
-                    if (currentId != 0) {
-//                        mList.getRefreshableView().setSelection(0);
+//                        handleImids(3, array);
                     }
                     ToastMessage(getString(R.string.common_up_finish));
                     progressDialog.dismiss();
@@ -213,7 +204,6 @@ public class ProcessMsgActivity extends BaseActivity implements View.OnClickList
             }
         }
     };
-    private boolean wait_app = false;
     private int mPosition;
 
     private void getEmimids(JSONArray array) {
@@ -299,6 +289,7 @@ public class ProcessMsgActivity extends BaseActivity implements View.OnClickList
             @Override
             public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {
                 page = 1;
+                mPosition = -1;
                 voiceSearchView.setText("");
                 switch (tab_type) {
                     case 1:
@@ -316,6 +307,7 @@ public class ProcessMsgActivity extends BaseActivity implements View.OnClickList
             @Override
             public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {
                 page++;
+                mPosition = -1;
                 voiceSearchView.setText("");
                 switch (tab_type) {
                     case 1:
@@ -384,6 +376,7 @@ public class ProcessMsgActivity extends BaseActivity implements View.OnClickList
                     intent.putExtra("imid", d_imids);
                     intent.putExtra("title", title);
                     intent.putExtra("type", tab_type);
+                    intent.putExtra("master", master);
                     intent.putExtra("nodeid", Integer.valueOf(model.JP_NODEID));
                     startActivity(intent);
                 }
@@ -419,9 +412,9 @@ public class ProcessMsgActivity extends BaseActivity implements View.OnClickList
     @Override
     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
         super.onActivityResult(requestCode, resultCode, data);
-
-        if (resultCode == 170809) {
-            wait_app = true;
+        LogUtil.i("onActivityResult");
+        LogUtil.i("tab_type=="+tab_type);
+        if (tab_type == 1) {
             loadProcessToDo(page);
         }
     }
@@ -520,6 +513,10 @@ public class ProcessMsgActivity extends BaseActivity implements View.OnClickList
     protected void onResume() {
         super.onResume();
 //        mList.setRefreshing(true);
+        if (tab_type == 1){
+            voiceSearchView.setText("");
+            loadProcessToDo(page);
+        }
 
     }
 
@@ -598,13 +595,14 @@ public class ProcessMsgActivity extends BaseActivity implements View.OnClickList
                     String jp_status = jsonArray.getJSONObject(position).getString("JP_STATUS");
                     String jp_typecode = jsonArray.getJSONObject(position).getString("TYPECODE");
                     String jp_master = jsonArray.getJSONObject(position).getString("CURRENTMASTER");
+                    int tdem_imid = jsonArray.getJSONObject(position).getInteger("EM_IMID");
                     model.name.setText(jp_launchername + "的" + jp_name);
                     if (jp_launchtime != null) {
-                        model.date.setText(DateFormatUtil.getStrDate4Date(new Date(jp_launchtime), "yyyy-MM-dd HH:mm"));
+                        model.date.setText(DateFormatUtil.getStrDate4Date(new Date(jp_launchtime), "MM-dd HH:mm"));
                     } else {
                         model.date.setText("");
                     }
-                    ;
+
 //                    model.status.setText(jp_status);
                     model.status.setTextColor(getResources().getColor(R.color.approvaling));
                     model.status.setText("等待我审批");
@@ -614,11 +612,11 @@ public class ProcessMsgActivity extends BaseActivity implements View.OnClickList
                     model.imid.setVisibility(View.VISIBLE);
                     model.meimid.setVisibility(View.GONE);
                     //设置显示审批人头像
-                    if (ListUtils.isEmpty(imids)) {
+                    if (tdem_imid != -1) {
+                        AvatarHelper.getInstance().display(tdem_imid+"", model.imid, true, false);//显示圆角图片
+                    } else {
                         String imageUri = "drawable://" + R.drawable.common_header_boy;
                         AvatarHelper.getInstance().display(imageUri, model.imid, true);
-                    } else if (!ListUtils.isEmpty(im_ids)) {
-                        AvatarHelper.getInstance().display(im_ids.get(position), model.imid, true, false);//显示圆角图片
                     }
                     break;
                 case 2:
@@ -632,9 +630,11 @@ public class ProcessMsgActivity extends BaseActivity implements View.OnClickList
                     if (!StringUtils.isEmpty(jp_name)) jp_name = jp_name.replace("流程", "");
                     String jn_dealtime = jsonArray.getJSONObject(position).getString("JN_DEALTIME");//JP_LAUNCHTIME
                     String jn_dealresult = jsonArray.getJSONObject(position).getString("JN_DEALRESULT");
-
+                    int done_emid = jsonArray.getJSONObject(position).getInteger("EM_IMID");
                     model.name.setText(jn_dealmanname + "的" + jp_name);
-                    model.date.setText(jn_dealtime);
+                    Long L = TimeUtils.s_str_2_long(jn_dealtime);
+                    model.date.setText(DateFormatUtil.getStrDate4Date(new Date(L), "MM-dd HH:mm"));
+//                    model.date.setText(jn_dealtime);
                     if (!StringUtils.isEmpty(jn_dealresult)) {
                         if ("不同意".equals(jn_dealresult)) {
 //                            CommonUtil.textSpanForStyle(model.status, getString(R.string.status_approved) + "(" + jn_dealresult + ")",
@@ -665,11 +665,11 @@ public class ProcessMsgActivity extends BaseActivity implements View.OnClickList
                     model.imid.setVisibility(View.VISIBLE);
                     model.meimid.setVisibility(View.GONE);
                     //设置显示审批人头像
-                    if (ListUtils.isEmpty(imids)) {
+                    if (done_emid != -1) {
+                        AvatarHelper.getInstance().display(done_emid+"", model.imid, true, false);//显示圆角图片
+                    } else {
                         String imageUri = "drawable://" + R.drawable.common_header_boy;
                         AvatarHelper.getInstance().display(imageUri, model.imid, true);
-                    } else if (!ListUtils.isEmpty(im_ids)) {
-                        AvatarHelper.getInstance().display(im_ids.get(position), model.imid, true, false);//显示圆角图片
                     }
                     break;
                 case 3:
@@ -686,6 +686,7 @@ public class ProcessMsgActivity extends BaseActivity implements View.OnClickList
                         String nodename = jsonArray.getJSONObject(position).getString("JP_NODEDEALMANNAME");
                         JP_NODEID = jsonArray.getJSONObject(position).getString("JP_NODEID");
                         String codename = jsonArray.getJSONObject(position).getString("JP_NODENAME");
+                        int me_emid = jsonArray.getJSONObject(position).getInteger("EM_IMID");
                         if (!StringUtils.isEmpty(status)) {
                             if (status.equals("待审批")) {
                                 model.status.setTextColor(getResources().getColor(R.color.approvaling));
@@ -706,7 +707,7 @@ public class ProcessMsgActivity extends BaseActivity implements View.OnClickList
 //                        model.name.setText(name + "-" + code);
                         model.name.setText(name);
                         if (time != null) {
-                            model.date.setText(DateFormatUtil.getStrDate4Date(new Date(time), "yyyy-MM-dd HH:mm"));
+                            model.date.setText(DateFormatUtil.getStrDate4Date(new Date(time), "MM-dd HH:mm"));
                         } else {
                             model.date.setText("");
                         }
@@ -719,16 +720,15 @@ public class ProcessMsgActivity extends BaseActivity implements View.OnClickList
                         model.status.setText(status);
 
                         model.JP_NODEID = JP_NODEID;
-                    }
-
-                    model.imid.setVisibility(View.GONE);
-                    model.meimid.setVisibility(View.VISIBLE);
-                    //设置显示审批人头像
-                    if (ListUtils.isEmpty(imids)) {
-                        String imageUri = "drawable://" + R.drawable.common_header_boy;
-                        AvatarHelper.getInstance().display(imageUri, model.meimid, true);
-                    } else if (!ListUtils.isEmpty(im_ids)) {
-                        AvatarHelper.getInstance().display(im_ids.get(position), model.meimid, true, false);//显示圆角图片
+                        //设置显示审批人头像
+                        model.imid.setVisibility(View.GONE);
+                        model.meimid.setVisibility(View.VISIBLE);
+                        if (me_emid != -1){
+                            AvatarHelper.getInstance().display(me_emid+"", model.meimid, true, false);//显示圆角图片
+                        }else {
+                            String imageUri = "drawable://" + R.drawable.common_header_boy;
+                            AvatarHelper.getInstance().display(imageUri, model.meimid, true);
+                        }
                     }
                     break;
             }

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

@@ -347,12 +347,7 @@ public class AddVisitReportActivity extends OABaseActivity implements IAddVisitR
                     contact_lv.setAdapter(adapter);
 //                    notifyDataSetChanged();
                 }
-            }).setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
-                @Override
-                public void onClick(DialogInterface dialogInterface, int i) {
-
-                }
-            }).show();
+            }).setNegativeButton(R.string.cancel,null).show();
         }
 
         class ViewHodler {

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

@@ -28,6 +28,7 @@ import com.iflytek.cloud.SpeechError;
 import com.iflytek.cloud.ui.RecognizerDialogListener;
 import com.lidroid.xutils.ViewUtils;
 import com.lidroid.xutils.view.annotation.ViewInject;
+import com.xzjmyk.pm.activity.AppConfig;
 import com.xzjmyk.pm.activity.MyApplication;
 import com.xzjmyk.pm.activity.R;
 import com.xzjmyk.pm.activity.audio.voicerecognition.JsonParser;
@@ -47,6 +48,7 @@ import com.xzjmyk.pm.activity.ui.erp.util.StringUtils;
 import com.xzjmyk.pm.activity.ui.erp.util.oa.OAConfig;
 import com.xzjmyk.pm.activity.ui.erp.util.oa.RecognizerDialogUtil;
 import com.xzjmyk.pm.activity.util.DisplayUtil;
+import com.xzjmyk.pm.activity.util.PreferenceUtils;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -78,7 +80,7 @@ public class ApprovalActivity extends OABaseActivity implements IApproval, Appro
             String url = mPresenter.getUrl(findViewById(R.id.takeOverTV).getVisibility() == View.VISIBLE ? "jsps/mobile/jprocand.jsp?nodeId=" : "", title);
             intent.putExtra("url", url);
             intent.putExtra("p", title);
-            intent.putExtra("master", CommonUtil.getMaster());
+            intent.putExtra("master", mPresenter.getMaster());
             intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
             startActivity(intent);
             finish();
@@ -92,6 +94,10 @@ public class ApprovalActivity extends OABaseActivity implements IApproval, Appro
         getMenuInflater().inflate(R.menu.menu_aproval_set, menu);
         MenuItem item = menu.getItem(1);
         item.setTitle("返回旧版");
+        if (!PreferenceUtils.getBoolean(AppConfig.IS_ADMIN, false)) {
+            MenuItem setItem = menu.getItem(0);
+            setItem.setVisible(false);
+        }
         return super.onCreateOptionsMenu(menu);
     }
 
@@ -153,8 +159,8 @@ public class ApprovalActivity extends OABaseActivity implements IApproval, Appro
                 opinionRL.setVisibility(View.VISIBLE);
                 operationLL.setVisibility(View.VISIBLE);
             } else {
-                opinionRL.setVisibility(View.GONE);
                 operationLL.setVisibility(View.GONE);
+                opinionRL.setVisibility(View.GONE);
             }
         }
         mPresenter = new ApprovaPresenter(this, getIntent());
@@ -187,6 +193,7 @@ public class ApprovalActivity extends OABaseActivity implements IApproval, Appro
                 mPresenter.disAgree(OACheckUtil.getText(opinionET));
                 break;
             case R.id.nextTV: //下一条
+                hineOpinion();
                 mPresenter.loadNextProcess();
                 break;
             case R.id.voiceIV://语音输入
@@ -266,6 +273,8 @@ public class ApprovalActivity extends OABaseActivity implements IApproval, Appro
         findViewById(R.id.disagreeTV).setVisibility(View.GONE);
         findViewById(R.id.agreeTV).setVisibility(View.GONE);
         findViewById(R.id.takeOverTV).setVisibility(View.GONE);
+        operationLL.setVisibility(View.GONE);
+        opinionRL.setVisibility(View.GONE);
         opinionET.setText("");
         mAdapter = null;
     }
@@ -284,6 +293,21 @@ public class ApprovalActivity extends OABaseActivity implements IApproval, Appro
                 }).show();
     }
 
+    @Override
+    public void showOpinion() {
+        if (mPresenter.isApprovaling()) {
+            operationLL.setVisibility(View.VISIBLE);
+            opinionRL.setVisibility(View.VISIBLE);
+        }
+    }
+
+    public void hineOpinion() {
+        if (mPresenter.isApprovaling()) {
+            operationLL.setVisibility(View.GONE);
+            opinionRL.setVisibility(View.GONE);
+        }
+    }
+
 
     @Override
     public void sendToSelect(JSONArray data) {

+ 137 - 121
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/oa/DailydetailsActivity.java

@@ -20,17 +20,21 @@ import android.widget.TextView;
 import android.widget.Toast;
 
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import com.lidroid.xutils.ViewUtils;
 import com.lidroid.xutils.view.annotation.ViewInject;
 import com.xzjmyk.pm.activity.MyApplication;
 import com.xzjmyk.pm.activity.R;
 import com.xzjmyk.pm.activity.adapter.DailyDetailsApprovalFlowAdapter;
+import com.xzjmyk.pm.activity.adapter.NodeAdapter;
 import com.xzjmyk.pm.activity.bean.oa.CommonApprovalFlowBean;
 import com.xzjmyk.pm.activity.helper.AvatarHelper;
 import com.xzjmyk.pm.activity.ui.base.BaseActivity;
 import com.xzjmyk.pm.activity.ui.erp.db.DBManager;
 import com.xzjmyk.pm.activity.ui.erp.entity.EmployeesEntity;
+import com.xzjmyk.pm.activity.ui.erp.model.oa.Approval;
 import com.xzjmyk.pm.activity.ui.erp.net.ViewUtil;
+import com.xzjmyk.pm.activity.ui.erp.util.ApprovaNodeUtil;
 import com.xzjmyk.pm.activity.ui.erp.util.CommonUtil;
 import com.xzjmyk.pm.activity.ui.erp.util.Constants;
 import com.xzjmyk.pm.activity.ui.erp.util.ListUtils;
@@ -41,9 +45,6 @@ import com.xzjmyk.pm.activity.ui.erp.view.EmptyLayout;
 import com.xzjmyk.pm.activity.util.SystemUtil;
 import com.xzjmyk.pm.activity.view.MyListView;
 
-import org.json.JSONException;
-import org.json.JSONObject;
-
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.LinkedHashMap;
@@ -86,7 +87,7 @@ public class DailydetailsActivity extends BaseActivity {
     private EmptyLayout mEmptyLayput_approvalflow;
     private int mkeyValue;
     private String mCaller = "WorkDaily";
-    private int mNoc = 1 ;
+    private int mNoc = 1;
     private final static int APPROVAL_FLOW_NODE = 102;
     private DBManager manager;
     private List<String> im_ids;
@@ -134,6 +135,7 @@ public class DailydetailsActivity extends BaseActivity {
     @ViewInject(R.id.common_docdata_rl)
     private RelativeLayout common_docdata_rl;
     private String em_name = CommonUtil.getSharedPreferences(MyApplication.getInstance(), "erp_emname");
+
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
@@ -149,7 +151,7 @@ public class DailydetailsActivity extends BaseActivity {
             @Override
             public void onClick(View v) {
 
-                if (!TextUtils.isEmpty(submittype) && submittype.equals("unsubmit")){//未提交状态
+                if (!TextUtils.isEmpty(submittype) && submittype.equals("unsubmit")) {//未提交状态
                     startActivity(new Intent(activity, WorkDailyAddActivity.class)
                             .putExtra("caller", mCaller)
                             .putExtra("id", mkeyValue)
@@ -159,7 +161,7 @@ public class DailydetailsActivity extends BaseActivity {
                             .putExtra("resubmit", "resubmit"));
                     Log.i("dosubmit_id", mkeyValue + "");
                     finish();
-                }else {                                                             //提交状态
+                } else {                                                             //提交状态
                     new AlertDialog
                             .Builder(mContext)
                             .setTitle(getString(R.string.common_notice))
@@ -180,20 +182,20 @@ public class DailydetailsActivity extends BaseActivity {
         delete_ll.setOnClickListener(new View.OnClickListener() {  //TODO 删除
             @Override
             public void onClick(View v) {
-                if (!TextUtils.isEmpty(submittype) && submittype.equals("unsubmit")){
+                if (!TextUtils.isEmpty(submittype) && submittype.equals("unsubmit")) {
                     new AlertDialog
                             .Builder(mContext)
                             .setTitle(getString(R.string.common_notice))
                             .setMessage(getString(R.string.delete_notice1))
                             .setNegativeButton(getString(R.string.common_cancel), null)
                             .setPositiveButton(getString(R.string.common_sure), new DialogInterface.OnClickListener() {
-                            @Override
-                            public void onClick(DialogInterface dialog, int which) {
-                                dodelete(mCaller, mkeyValue);
-                            }
-                        }).show();
+                                @Override
+                                public void onClick(DialogInterface dialog, int which) {
+                                    dodelete(mCaller, mkeyValue);
+                                }
+                            }).show();
 
-                }else {
+                } else {
                     new AlertDialog
                             .Builder(mContext)
                             .setTitle(getString(R.string.common_notice))
@@ -222,7 +224,7 @@ public class DailydetailsActivity extends BaseActivity {
         wdd_plan.setOnLongClickListener(new View.OnLongClickListener() {
             @Override
             public boolean onLongClick(View v) {
-                SystemUtil.copyText(getApplicationContext(),wdd_plan.getText().toString());
+                SystemUtil.copyText(getApplicationContext(), wdd_plan.getText().toString());
                 return true;
             }
         });
@@ -230,7 +232,7 @@ public class DailydetailsActivity extends BaseActivity {
         wdd_experience.setOnLongClickListener(new View.OnLongClickListener() {
             @Override
             public boolean onLongClick(View v) {
-                SystemUtil.copyText(getApplicationContext(),wdd_experience.getText().toString());
+                SystemUtil.copyText(getApplicationContext(), wdd_experience.getText().toString());
                 return true;
             }
         });
@@ -259,25 +261,27 @@ public class DailydetailsActivity extends BaseActivity {
         mCommonApprovalFlowBean = new CommonApprovalFlowBean();
         mDailyDetailsApprovalFlowAdapter = new DailyDetailsApprovalFlowAdapter(this);
 
-        manager = new DBManager(this);
-        im_ids =new ArrayList<>();
+        manager = new DBManager();
+        im_ids = new ArrayList<>();
         afpeople_names = new ArrayList<>();
 
     }
-    private Handler handler = new Handler(){
+
+    private Handler handler = new Handler() {
         @Override
         public void handleMessage(Message msg) {
             super.handleMessage(msg);
 
-            switch (msg.what){
+            switch (msg.what) {
                 case APPROVAL_FLOW_NODE:
                     String wdaf_result = msg.getData().getString("result");
                     LogUtil.prinlnLongMsg("wdaf_result", wdaf_result);
-                    WDAFshow(wdaf_result);
+                    handlerNode(wdaf_result);
+//                    WDAFshow(wdaf_result);
                     break;
                 case DAILY_REFORSUB_SUCCESSFULLY:
-                    if (msg.getData() != null){
-                        if (!StringUtils.isEmpty(msg.getData().getString("result"))){
+                    if (msg.getData() != null) {
+                        if (!StringUtils.isEmpty(msg.getData().getString("result"))) {
                             String resubmit_result = msg.getData().getString("result");
                             LogUtil.prinlnLongMsg("RESUBMITTED_message", resubmit_result);
                             Toast.makeText(ct, getString(R.string.daily_resumit_success), Toast.LENGTH_SHORT).show();
@@ -288,7 +292,7 @@ public class DailydetailsActivity extends BaseActivity {
                                     .putExtra("rs_summary", summary)
                                     .putExtra("rs_plan", plan)
                                     .putExtra("rs_experience", experience)
-                                    .putExtra("rs_donetask",donetask)
+                                    .putExtra("rs_donetask", donetask)
                                     .putExtra("resubmit", "resubmit"));
                             Log.i("doresubmit_id", mkeyValue + "");
                             finish();
@@ -296,8 +300,8 @@ public class DailydetailsActivity extends BaseActivity {
                     }
                     break;
                 case DAILY_REFORDELETE_SUCCESSFULLY:
-                    if (msg.getData() != null){
-                        if (!StringUtils.isEmpty(msg.getData().getString("result"))){
+                    if (msg.getData() != null) {
+                        if (!StringUtils.isEmpty(msg.getData().getString("result"))) {
                             String resfordelete_result = msg.getData().getString("result");
                             LogUtil.prinlnLongMsg("RESUBMITTED_message", resfordelete_result);
                             dodelete(mCaller, mkeyValue);
@@ -305,32 +309,32 @@ public class DailydetailsActivity extends BaseActivity {
                     }
                     break;
                 case REFORDELETE_DOC_REQUEST_SUCCESSFULLY:
-                    if(msg.getData() != null){
-                        if (!StringUtils.isEmpty(msg.getData().getString("result"))){
+                    if (msg.getData() != null) {
+                        if (!StringUtils.isEmpty(msg.getData().getString("result"))) {
                             String delete_result = msg.getData().getString("result");
                             LogUtil.prinlnLongMsg("refordelete_result", delete_result);
                             if (JSON.parseObject(delete_result).containsKey("success") && JSON.parseObject(delete_result).getBoolean("success")) {
-                                dodelete(mCaller,mkeyValue);
+                                dodelete(mCaller, mkeyValue);
                             }
                         }
                     }
                     break;
                 case DELETE_DOC_REQUEST_SUCCESSFULLY:
-                    if(msg.getData() != null){
-                        if (!StringUtils.isEmpty(msg.getData().getString("result"))){
+                    if (msg.getData() != null) {
+                        if (!StringUtils.isEmpty(msg.getData().getString("result"))) {
                             String delete_result = msg.getData().getString("result");
                             LogUtil.prinlnLongMsg("delete_result", delete_result);
                             if (JSON.parseObject(delete_result).containsKey("success") && JSON.parseObject(delete_result).getBoolean("success")) {
                                 Toast.makeText(ct, getString(R.string.daily_delate_success), Toast.LENGTH_LONG).show();
 //                                    startActivity(new Intent(activity,WorkDailyShowActivity.class)
 //                                    .putExtra("fromwhere","delete_succeed"));
-                                if (!TextUtils.isEmpty(fromwhere) && "submitdaily".equals(fromwhere)){
-                                    startActivity(new Intent(DailydetailsActivity.this,WorkDailyShowActivity.class));
+                                if (!TextUtils.isEmpty(fromwhere) && "submitdaily".equals(fromwhere)) {
+                                    startActivity(new Intent(DailydetailsActivity.this, WorkDailyShowActivity.class));
                                     finish();
-                                }else if (!TextUtils.isEmpty(fromwhere) && "dailylist".equals(fromwhere)){
+                                } else if (!TextUtils.isEmpty(fromwhere) && "dailylist".equals(fromwhere)) {
                                     Intent intent = new Intent();
-                                    intent.putExtra("delete_succeed","delete_succeed");
-                                    intent.putExtra("deleted_id",mkeyValue);
+                                    intent.putExtra("delete_succeed", "delete_succeed");
+                                    intent.putExtra("deleted_id", mkeyValue);
                                     setResult(DELETE_SUCCEED, intent);
                                     progressDialog.dismiss();
                                     finish();
@@ -342,7 +346,7 @@ public class DailydetailsActivity extends BaseActivity {
                     break;
 
 
-               case Constants.APP_SOCKETIMEOUTEXCEPTION:
+                case Constants.APP_SOCKETIMEOUTEXCEPTION:
                     if (msg.getData() != null) {
                         if (!StringUtils.isEmpty(msg.getData().getString("result"))) {
                             ToastMessage(msg.getData().getString("result"));
@@ -353,46 +357,57 @@ public class DailydetailsActivity extends BaseActivity {
         }
     };
 
+    private void handlerNode(String message) {
+        List<Approval> approvals = ApprovaNodeUtil.handlerNode(manager, message);
+        if (!ListUtils.isEmpty(approvals)) {
+            NodeAdapter nodeAdapter = new NodeAdapter(this, approvals);
+            approval_flowlv.setAdapter(nodeAdapter);
+        } else {
+            //TODO 为空时候
+        }
+        progressDialog.dismiss();
+    }
 
     /**
      * 日报审批流获取并处理
+     *
      * @param wdaf_result
      */
     private void WDAFshow(String wdaf_result) {
-        try{
-            JSONObject resultJsonObject = new JSONObject(wdaf_result);
+        try {
+            JSONObject resultJsonObject = JSON.parseObject(wdaf_result);
             //JSONArray dailynodeArray = resultJsonObject.getJSONArray("nodes");
-            if(resultJsonObject == null){
+            if (resultJsonObject == null) {
                 approval_flowlv.setVisibility(View.GONE);
                 hide_above_af.setVisibility(View.GONE);
-            }else{
+            } else {
                 mCommonApprovalFlowBean = JSON.parseObject(resultJsonObject.toString(), CommonApprovalFlowBean.class);
                 getapplypeomsg(mCommonApprovalFlowBean);
                 em_code = new String();
                 if (manager == null) manager = new DBManager(mContext);
-                if("已审核".equals(wd_status) && (mCommonApprovalFlowBean.getData().size() == 0 ||
-                mCommonApprovalFlowBean.getData().size() == mCommonApprovalFlowBean.getNodes().size())){  // TODO 已审核直接从node里面取数据
-                    for (int i = 0; i <mCommonApprovalFlowBean.getNodes().size(); i++) {
+                if ("已审核".equals(wd_status) && (mCommonApprovalFlowBean.getData().size() == 0 ||
+                        mCommonApprovalFlowBean.getData().size() == mCommonApprovalFlowBean.getNodes().size())) {  // TODO 已审核直接从node里面取数据
+                    for (int i = 0; i < mCommonApprovalFlowBean.getNodes().size(); i++) {
                         //取名字
-                        if (!TextUtils.isEmpty(mCommonApprovalFlowBean.getNodes().get(i).getJn_dealManName())){
+                        if (!TextUtils.isEmpty(mCommonApprovalFlowBean.getNodes().get(i).getJn_dealManName())) {
                             afpeople_names.add(mCommonApprovalFlowBean.getNodes().get(i).getJn_dealManName());
-                        }else {
+                        } else {
                             afpeople_names.add("");
                         }
                         //取头像id
-                        if (!TextUtils.isEmpty(mCommonApprovalFlowBean.getNodes().get(i).getJn_dealManId())){
+                        if (!TextUtils.isEmpty(mCommonApprovalFlowBean.getNodes().get(i).getJn_dealManId())) {
                             em_code = mCommonApprovalFlowBean.getNodes().get(i).getJn_dealManId();
-                            if( em_code.contains(",")){
+                            if (em_code.contains(",")) {
                                 String str[] = em_code.split(",");
                                 em_code = str[0];
 //                                ToastMessage("多人审批,头像已显示为首个");   //该情况只有在测试账号情况下出现
                             }
-                        }else {
+                        } else {
                             em_code = " ";
                         }
                         try {
                             String whichsys = CommonUtil.getSharedPreferences(mContext, "erp_master");
-                            String[] selectionArgs = {em_code == null ? "": em_code, whichsys};
+                            String[] selectionArgs = {em_code == null ? "" : em_code, whichsys};
                             String selection = "em_code=? and whichsys=? ";
                             //获取数据库数据
                             EmployeesEntity bean = manager.selectForEmployee(selectionArgs, selection);
@@ -400,31 +415,31 @@ public class DailydetailsActivity extends BaseActivity {
                                 String imId = String.valueOf(bean.getEm_IMID());
                                 Log.i("todo", "imId=" + imId);
                                 im_ids.add(imId);
-                            }else {
+                            } else {
                                 im_ids.add("");
 //                                            ToastMessage("审批流头像获取异常,已显示为默认");
                             }
-                        }catch (Exception e){
+                        } catch (Exception e) {
                             e.printStackTrace();
                         }
 
                     }
-                }else if ("已提交".equals(wd_status)){
+                } else if ("已提交".equals(wd_status)) {
                     String whichsys = CommonUtil.getSharedPreferences(mContext, "erp_master");
 
                     // TODO 已提交状态判断是否有变更处理人,所以得先去process中判断,好麻烦噢
-                    if (!ListUtils.isEmpty(mCommonApprovalFlowBean.getProcesss()) && !ListUtils.isEmpty(mCommonApprovalFlowBean.getData())){
+                    if (!ListUtils.isEmpty(mCommonApprovalFlowBean.getProcesss()) && !ListUtils.isEmpty(mCommonApprovalFlowBean.getData())) {
                         int processnum = mCommonApprovalFlowBean.getProcesss().size();
                         //取process数据
                         for (int i = 0; i < processnum; i++) {
-                            if (!TextUtils.isEmpty(mCommonApprovalFlowBean.getProcesss().get(i).getJp_nodeDealMan())){
+                            if (!TextUtils.isEmpty(mCommonApprovalFlowBean.getProcesss().get(i).getJp_nodeDealMan())) {
                                 em_code = mCommonApprovalFlowBean.getProcesss().get(i).getJp_nodeDealMan();
-                                if( em_code.contains(",")) {
+                                if (em_code.contains(",")) {
                                     String str[] = em_code.split(",");
                                     em_code = str[0];
 //                                    ToastMessage("多人审批,头像已显示为首个");   //该情况只有在测试账号情况下出现
                                 }
-                                String[] selectionArgs = {em_code == null ? "": em_code, whichsys};
+                                String[] selectionArgs = {em_code == null ? "" : em_code, whichsys};
                                 String selection = "em_code=? and whichsys=? ";
                                 try {
                                     EmployeesEntity bean = manager.selectForEmployee(selectionArgs, selection);
@@ -438,43 +453,43 @@ public class DailydetailsActivity extends BaseActivity {
                                         String imId = String.valueOf(bean.getEm_IMID());
                                         Log.i("todo", "imId=" + imId);
                                         im_ids.add(imId);
-                                    }else {
+                                    } else {
                                         im_ids.add("");
                                     }
                                 } catch (Exception e) {
                                     e.printStackTrace();
                                 }
-                            }else {
+                            } else {
                                 im_ids.add("");
                             }
 
                             //获取process审批人姓名
-                            if (!TextUtils.isEmpty(mCommonApprovalFlowBean.getProcesss().get(i).getJp_nodeDealManName())){
+                            if (!TextUtils.isEmpty(mCommonApprovalFlowBean.getProcesss().get(i).getJp_nodeDealManName())) {
                                 afpeople_names.add(mCommonApprovalFlowBean.getProcesss().get(i).getJp_nodeDealManName());
-                            }else if (!TextUtils.isEmpty(af_name)){
+                            } else if (!TextUtils.isEmpty(af_name)) {
                                 afpeople_names.add(af_name);
-                            }else {
+                            } else {
                                 afpeople_names.add("");
                             }
                         }
 
                         //取data数据
-                        for (int j = processnum; j<mCommonApprovalFlowBean.getData().size();j++){
+                        for (int j = processnum; j < mCommonApprovalFlowBean.getData().size(); j++) {
                             //取process之后的审批人名字
-                            if (!TextUtils.isEmpty(mCommonApprovalFlowBean.getData().get(j).getJP_NODEDEALMANNAME())){
+                            if (!TextUtils.isEmpty(mCommonApprovalFlowBean.getData().get(j).getJP_NODEDEALMANNAME())) {
                                 afpeople_names.add(mCommonApprovalFlowBean.getData().get(j).getJP_NODEDEALMANNAME());
-                            }else {
+                            } else {
                                 afpeople_names.add("");
                             }
                             //取process之后的imid
-                            if (!TextUtils.isEmpty(mCommonApprovalFlowBean.getData().get(j).getJP_NODEDEALMAN())){
+                            if (!TextUtils.isEmpty(mCommonApprovalFlowBean.getData().get(j).getJP_NODEDEALMAN())) {
                                 em_code = mCommonApprovalFlowBean.getData().get(j).getJP_NODEDEALMAN();
-                                if( em_code.contains(",")) {
+                                if (em_code.contains(",")) {
                                     String str[] = em_code.split(",");
                                     em_code = str[0];
 //                                    ToastMessage("多人审批,头像已显示为首个");   //该情况只有在测试账号情况下出现
                                 }
-                                String[] selectionArgs = {em_code == null ? "": em_code, whichsys};
+                                String[] selectionArgs = {em_code == null ? "" : em_code, whichsys};
                                 String selection = "em_code=? and whichsys=? ";
                                 try {
                                     //获取数据库数据
@@ -483,42 +498,42 @@ public class DailydetailsActivity extends BaseActivity {
                                         String imId = String.valueOf(bean.getEm_IMID());
                                         Log.i("todo", "imId=" + imId);
                                         im_ids.add(imId);
-                                    }else {
+                                    } else {
                                         im_ids.add("");
 //                                            ToastMessage("审批流头像获取异常,已显示为默认");
                                     }
-                                }catch (Exception e){
+                                } catch (Exception e) {
                                     e.printStackTrace();
                                 }
-                            }else {
+                            } else {
                                 im_ids.add("");
                             }
                         }
                     }
 
                     // TODO 标准版刚刚提交时无变更时,全部取data数据
-                    if (ListUtils.isEmpty(mCommonApprovalFlowBean.getProcesss()) &&  !ListUtils.isEmpty(mCommonApprovalFlowBean.getData())){
-                        for (int i = 0; i <mCommonApprovalFlowBean.getData().size(); i++) {
+                    if (ListUtils.isEmpty(mCommonApprovalFlowBean.getProcesss()) && !ListUtils.isEmpty(mCommonApprovalFlowBean.getData())) {
+                        for (int i = 0; i < mCommonApprovalFlowBean.getData().size(); i++) {
                             //取名字
                             if (manager == null) manager = new DBManager(mContext);
-                            if (!TextUtils.isEmpty(mCommonApprovalFlowBean.getData().get(i).getJP_NODEDEALMANNAME())){
+                            if (!TextUtils.isEmpty(mCommonApprovalFlowBean.getData().get(i).getJP_NODEDEALMANNAME())) {
                                 afpeople_names.add(mCommonApprovalFlowBean.getData().get(i).getJP_NODEDEALMANNAME());
-                            }else {
+                            } else {
                                 afpeople_names.add("");
                             }
                             //取头像id
-                            if (!TextUtils.isEmpty(mCommonApprovalFlowBean.getData().get(i).getJP_NODEDEALMAN())){
+                            if (!TextUtils.isEmpty(mCommonApprovalFlowBean.getData().get(i).getJP_NODEDEALMAN())) {
                                 em_code = mCommonApprovalFlowBean.getData().get(i).getJP_NODEDEALMAN();
-                                if( em_code.contains(",")){
+                                if (em_code.contains(",")) {
                                     String str[] = em_code.split(",");
                                     em_code = str[0];
 //                                    ToastMessage("多人审批,头像已显示为首个");   //该情况只有在测试账号情况下出现
                                 }
-                            }else {
+                            } else {
                                 em_code = " ";
                             }
                             try {
-                                String[] selectionArgs = {em_code == null ? "": em_code, whichsys};
+                                String[] selectionArgs = {em_code == null ? "" : em_code, whichsys};
                                 String selection = "em_code=? and whichsys=? ";
                                 //获取数据库数据
                                 EmployeesEntity bean = manager.selectForEmployee(selectionArgs, selection);
@@ -526,35 +541,36 @@ public class DailydetailsActivity extends BaseActivity {
                                     String imId = String.valueOf(bean.getEm_IMID());
                                     Log.i("todo", "imId=" + imId);
                                     im_ids.add(imId);
-                                }else {
+                                } else {
                                     im_ids.add("");
 //                                            ToastMessage("审批流头像获取异常,已显示为默认");
                                 }
-                            }catch (Exception e){
+                            } catch (Exception e) {
                                 e.printStackTrace();
                             }
 
                         }
                     }
-                }else if ("已审核".equals(wd_status) && mCommonApprovalFlowBean.getData().size() != 0
-                        && mCommonApprovalFlowBean.getData().size() != mCommonApprovalFlowBean.getNodes().size()){
+                } else if ("已审核".equals(wd_status) && mCommonApprovalFlowBean.getData().size() != 0
+                        && mCommonApprovalFlowBean.getData().size() != mCommonApprovalFlowBean.getNodes().size()) {
                     approval_flowlv.setVisibility(View.GONE);
                 }
-                Log.i("last_afpeople_names", "空"+afpeople_names.toString());
+                Log.i("last_afpeople_names", "空" + afpeople_names.toString());
                 Log.i("last_imids", im_ids.toString());
+                afpeople_names.clear();
+                im_ids.clear();
+                handlerNode(wdaf_result);
                 mDailyDetailsApprovalFlowAdapter.setIm_ids(im_ids);
                 mDailyDetailsApprovalFlowAdapter.setAfpeople_names(afpeople_names);
                 // 设置数据之前先通过数据库获取到所有的imid保存到内存中
                 mDailyDetailsApprovalFlowAdapter.setmCommonApprovalFlowBean(mCommonApprovalFlowBean);
                 approval_flowlv.setAdapter(mDailyDetailsApprovalFlowAdapter);
 
-                if(ListUtils.isEmpty(mCommonApprovalFlowBean.getData()) && ListUtils.isEmpty(mCommonApprovalFlowBean.getNodes())){
+                if (ListUtils.isEmpty(mCommonApprovalFlowBean.getData()) && ListUtils.isEmpty(mCommonApprovalFlowBean.getNodes())) {
                     hide_above_af.setVisibility(View.GONE);
                 }
             }
-        }catch (JSONException e){
-            e.printStackTrace();
-        }catch (Exception e){
+        } catch (Exception e) {
             e.printStackTrace();
         }
 
@@ -573,7 +589,7 @@ public class DailydetailsActivity extends BaseActivity {
         String applypeo_number = mCommonApprovalFlowBean.getProcesss().get(0).getJp_launcherId();
 
         name_tv.setText(applypeo_name);
-        if (!applypeo_number.isEmpty()){
+        if (!applypeo_number.isEmpty()) {
             String whichsys = CommonUtil.getSharedPreferences(mContext, "erp_master");
             String[] selectionArgs = {applypeo_number == null ? "" : applypeo_number, whichsys};
             String selection = "em_code=? and whichsys=? ";
@@ -637,9 +653,9 @@ public class DailydetailsActivity extends BaseActivity {
         LogUtil.d(JSON.toJSONString(params));
         LinkedHashMap<String, Object> headers = new LinkedHashMap<>();
         headers.put("Cookie", "JSESSIONID=" + CommonUtil.getSharedPreferences(ct, "sessionId"));
-        if (retype.equals("reforsub")){  //反提交之重新提交请求
+        if (retype.equals("reforsub")) {  //反提交之重新提交请求
             ViewUtil.httpSendRequest(this, resubmit_url, params, handler, headers, DAILY_REFORSUB_SUCCESSFULLY, null, null, "post");
-        }else if (retype.equals("refordelete")){ //反提交之删除请求
+        } else if (retype.equals("refordelete")) { //反提交之删除请求
             ViewUtil.httpSendRequest(this, resubmit_url, params, handler, headers, REFORDELETE_DOC_REQUEST_SUCCESSFULLY, null, null, "post");
         }
     }
@@ -649,10 +665,10 @@ public class DailydetailsActivity extends BaseActivity {
         final Intent intent = getIntent();
         date = intent.getStringExtra("Date");
         summary = intent.getStringExtra("Content");
-        if (!TextUtils.isEmpty(intent.getStringExtra("WD_Status"))){
+        if (!TextUtils.isEmpty(intent.getStringExtra("WD_Status"))) {
             wd_status = intent.getStringExtra("WD_Status");
         }
-        mkeyValue = intent.getIntExtra("ID", -1); Log.i("first_mkeyValue",mkeyValue + "");
+        mkeyValue = intent.getIntExtra("ID", -1); Log.i("first_mkeyValue", mkeyValue + "");
         fromwhere = intent.getStringExtra("fromwhere");
         if (!TextUtils.isEmpty(intent.getStringExtra("Plan"))) {
             plan = intent.getStringExtra("Plan");
@@ -665,33 +681,33 @@ public class DailydetailsActivity extends BaseActivity {
             experience_ll.setVisibility(View.GONE);
         }
         if (!TextUtils.isEmpty(intent.getStringExtra("Donetask"))
-                && !"null".equals(intent.getStringExtra("Donetask"))){
+                && !"null".equals(intent.getStringExtra("Donetask"))) {
             donetask = intent.getStringExtra("Donetask");
 //            done_task_tv.setText(Html.fromHtml(donetask)); 将html格式转化为普通文本
-            donetask_wv.loadDataWithBaseURL(null,donetask.toLowerCase(),"text/html","utf-8",null);
-            Log.i("donetask",donetask);
-        }else {
+            donetask_wv.loadDataWithBaseURL(null, donetask.toLowerCase(), "text/html", "utf-8", null);
+            Log.i("donetask", donetask);
+        } else {
             done_task_ll.setVisibility(View.GONE);
         }
 
         if (!TextUtils.isEmpty(intent.getStringExtra("Undotask"))
-                && !"null".equals(intent.getStringExtra("Undotask"))){
+                && !"null".equals(intent.getStringExtra("Undotask"))) {
             undotask = intent.getStringExtra("Undotask");
-            undotask_wv.loadDataWithBaseURL(null,undotask.toLowerCase(),"text/html","utf-8",null);
-        }else {
+            undotask_wv.loadDataWithBaseURL(null, undotask.toLowerCase(), "text/html", "utf-8", null);
+        } else {
             undo_task_ll.setVisibility(View.GONE);
         }
         wdd_data.setText(date + "");
         wdd_summary.setText(summary);
-        if("已审核".equals(wd_status)){
+        if ("已审核".equals(wd_status)) {
             wdd_status.setTextColor(getResources().getColor(R.color.approval));
             wdd_status.setText(getString(R.string.status_approved));
             resanddel_ll.setVisibility(View.GONE);
-        }else if (wd_status.equals("已提交")){
+        } else if (wd_status.equals("已提交")) {
             wdd_status.setTextColor(getResources().getColor(R.color.no_approval));
             wdd_status.setText(getString(R.string.status_pending));
             resanddel_ll.setVisibility(View.VISIBLE);
-        }else if (wd_status.equals("在录入")){
+        } else if (wd_status.equals("在录入")) {
             wdd_status.setTextColor(getResources().getColor(R.color.done_approval));
             wdd_status.setText(getString(R.string.status_unsubmit));
             resanddel_ll.setVisibility(View.VISIBLE);
@@ -704,17 +720,17 @@ public class DailydetailsActivity extends BaseActivity {
 
 
         // 当获取到正确的单据caller和单据id时 请求获取审批流数据
-        if(!TextUtils.isEmpty(mCaller)&&mkeyValue!= -1){
-                String url = Constants.getAppBaseUrl(getApplicationContext())+"common/getCurrentJnodes.action";
-                Map<String,Object> param = new HashMap<>();
-                param.put("caller", mCaller);
-                param.put("keyValue",mkeyValue );
-                Log.i("app_flowid", mkeyValue + "");
-                param.put("_noc",mNoc);
-                LinkedHashMap headers = new LinkedHashMap();
-                headers.put("Cookie", "JSESSIONID=" + CommonUtil.getSharedPreferences(getApplicationContext(), "sessionId"));
-                ViewUtil.httpSendRequest(getApplicationContext(), url, param, handler, headers, APPROVAL_FLOW_NODE, null, null, "post");
-        }else{
+        if (!TextUtils.isEmpty(mCaller) && mkeyValue != -1) {
+            String url = Constants.getAppBaseUrl(getApplicationContext()) + "common/getCurrentJnodes.action";
+            Map<String, Object> param = new HashMap<>();
+            param.put("caller", mCaller);
+            param.put("keyValue", mkeyValue);
+            Log.i("app_flowid", mkeyValue + "");
+            param.put("_noc", mNoc);
+            LinkedHashMap headers = new LinkedHashMap();
+            headers.put("Cookie", "JSESSIONID=" + CommonUtil.getSharedPreferences(getApplicationContext(), "sessionId"));
+            ViewUtil.httpSendRequest(getApplicationContext(), url, param, handler, headers, APPROVAL_FLOW_NODE, null, null, "post");
+        } else {
             approval_flowlv.setVisibility(View.GONE);
             hide_above_af.setVisibility(View.GONE);
         }
@@ -729,33 +745,33 @@ public class DailydetailsActivity extends BaseActivity {
     @Override
     public boolean onOptionsItemSelected(MenuItem item) {
         if (item.getItemId() == android.R.id.home) {
-            if (!TextUtils.isEmpty(fromwhere) && fromwhere.equals("submitdaily"))
-            {
+            if (!TextUtils.isEmpty(fromwhere) && fromwhere.equals("submitdaily")) {
                 startActivity(new Intent(activity, WorkDailyShowActivity.class)
                         .putExtra("fromwhere", "dodaily"));
                 finish();
-            }else {
+            } else {
                 finish();
             }
-        }return true;
+        } return true;
     }
+
     @Override
     public void onBackPressed() {
-        if (!TextUtils.isEmpty(fromwhere) && fromwhere.equals("submitdaily"))
-        {
+        if (!TextUtils.isEmpty(fromwhere) && fromwhere.equals("submitdaily")) {
             startActivity(new Intent(activity, WorkDailyShowActivity.class)
                     .putExtra("fromwhere", "dodaily"));
             finish();
-        }else {
+        } else {
             super.onBackPressed();
             finish();
         }
 
     }
+
     @Override
     protected void onDestroy() {
         super.onDestroy();
-        if (manager!=null) {
+        if (manager != null) {
             manager.closeDB();
         }
     }

+ 28 - 28
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/oa/ExpenseReimbursementActivity.java

@@ -278,7 +278,7 @@ public class ExpenseReimbursementActivity extends BaseActivity implements View.O
 
                         if ("S".equals(dg_type)){
                             if (cd_table_position < costFormModel_list.size())
-                            costFormModel_list.remove(cd_table_position);
+                                costFormModel_list.remove(cd_table_position);
                         }
                         if (costFormModel_list.size() == 0){
                             detail_table_ll.setVisibility(View.GONE);
@@ -890,12 +890,12 @@ public class ExpenseReimbursementActivity extends BaseActivity implements View.O
             case R.id.c_point:
                 if (StringUtils.isEmpty(c_edit.getText().toString())) break;
                 if (!StringUtils.isEmpty(c_edit.getText().toString()) && c_edit.getText().toString().contains(".")){
-                break;
-            }
+                    break;
+                }
 
-            if (StringUtils.isEmpty(c_edit.getText().toString()) && StringUtils.isEmpty(c_result.getText().toString())){
+                if (StringUtils.isEmpty(c_edit.getText().toString()) && StringUtils.isEmpty(c_result.getText().toString())){
                     break;
-            }
+                }
                 c_onclick("."); break;
             case R.id.c_c:
                 num1=0;num2=0;
@@ -1243,7 +1243,7 @@ public class ExpenseReimbursementActivity extends BaseActivity implements View.O
     }
 
     private void initAddEvent() {
-       // 明细过长时长按,toast出明细内容
+        // 明细过长时长按,toast出明细内容
         gv_details_list.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
             @Override
             public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
@@ -1299,7 +1299,7 @@ public class ExpenseReimbursementActivity extends BaseActivity implements View.O
                     }
                 }else {
 //                    for (int i = 0; i < 3; i++) {
-                        doDetailsHandle();
+                    doDetailsHandle();
 //                    }
                 }
 
@@ -1880,8 +1880,8 @@ public class ExpenseReimbursementActivity extends BaseActivity implements View.O
             doDeletePAttach(position);
             LogUtil.prinlnLongMsg("dfb_attach",fb_attach);
         }
-            mPhotoList.remove(position);
-            mAdapter.notifyDataSetInvalidated();
+        mPhotoList.remove(position);
+        mAdapter.notifyDataSetInvalidated();
     }
 
     /**
@@ -1893,28 +1893,28 @@ public class ExpenseReimbursementActivity extends BaseActivity implements View.O
     private void doDeletePAttach(int posi) {
         fb_attach_list = new ArrayList<>();
         String[] split = fb_attach.split(";");
-            if (posi < split.length) {
-                for (int i = 0; i < split.length; i++) {
-                    if (i != posi){
-                        fb_attach_list.add(split[i]);
-                    }
+        if (posi < split.length) {
+            for (int i = 0; i < split.length; i++) {
+                if (i != posi){
+                    fb_attach_list.add(split[i]);
+                }
 
-                    if (i == split.length-1){
-                        fb_attach = "";
-                        for (int j = 0; j < fb_attach_list.size(); j++) {
-                            fb_attach = fb_attach +fb_attach_list.get(j)+";";
+                if (i == split.length-1){
+                    fb_attach = "";
+                    for (int j = 0; j < fb_attach_list.size(); j++) {
+                        fb_attach = fb_attach +fb_attach_list.get(j)+";";
 
-                            if (j == fb_attach_list.size()-1){
-                                Log.i("now_fb_attach", fb_attach.toString());
-                                mCostUpdatePModel.getFiles().remove(posi);
-                                mAdapter.notifyDataSetInvalidated();
-                            }
+                        if (j == fb_attach_list.size()-1){
+                            Log.i("now_fb_attach", fb_attach.toString());
+                            mCostUpdatePModel.getFiles().remove(posi);
+                            mAdapter.notifyDataSetInvalidated();
                         }
                     }
                 }
-            }else {
-                return;
             }
+        }else {
+            return;
+        }
     }
 
     private void takePhoto() {
@@ -1959,7 +1959,7 @@ public class ExpenseReimbursementActivity extends BaseActivity implements View.O
         }
         if (item.getItemId() == android.R.id.home){
 //            if (formid != 0){
-               finish();
+            finish();
 //            }else{
 //                startActivity(new Intent(ExpenseReimbursementActivity.this, OAActivity.class)
 //                        .putExtra("WorkDailyAdd", "WorkDailyAdd"));
@@ -1972,7 +1972,7 @@ public class ExpenseReimbursementActivity extends BaseActivity implements View.O
     @Override
     public void onBackPressed() {
 //        if (formid != 0){
-            finish();
+        finish();
 //        }else {
 //            startActivity(new Intent(ExpenseReimbursementActivity.this, OAActivity.class)
 //                    .putExtra("WorkDailyAdd", "WorkDailyAdd"));
@@ -2175,7 +2175,7 @@ public class ExpenseReimbursementActivity extends BaseActivity implements View.O
                 selectApprovers(name);
             } else {
                 progressDialog.dismiss();
-               commitSuccess(keyValue);
+                commitSuccess(keyValue);
             }
         } else {
             progressDialog.dismiss();

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

@@ -76,6 +76,7 @@ public class ApprovalAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolde
                 return new TitleViewHolder(parent);
             case Approval.MAIN://列表
             case Approval.DETAIL:
+            case Approval.SETUPTASK:
                 return new BaseRVViewHodler(parent);
             case Approval.ENCLOSURE://单行列表
             case Approval.TAG:

+ 8 - 8
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/db/dao/ContactsDao.java

@@ -164,14 +164,13 @@ public class ContactsDao {
     public  void update(ContactsModel model){
         SQLiteDatabase db=  DatabaseManager.getInstance().openDatabase();
         String sql = "update tbl_contacts"
-                + " set tf_type=? , tf_imId=? "
+                + " set tf_type=?"
                 + " where tf_ownerId=? and tf_whichSys=? and tf_imId=?;";
         SQLiteStatement sta = db.compileStatement(sql);
         sta.bindLong(1, model.getType());
-        sta.bindString(2, model.getImid());
-        sta.bindString(3, model.getOwnerId());
-        sta.bindString(4, model.getWhichsys());
-        sta.bindString(5, model.getImid());
+        sta.bindString(2, model.getOwnerId());
+        sta.bindString(3, model.getWhichsys());
+        sta.bindString(4, model.getImid());
         long row=  sta.executeInsert();
         DatabaseManager.getInstance().closeDatabase();
     }
@@ -181,13 +180,14 @@ public class ContactsDao {
         SQLiteDatabase db=  DatabaseManager.getInstance().openDatabase();
         String sql = "update tbl_contacts"
                 + " set tf_type=? , tf_imId=? "
-                + " where tf_ownerId=? and tf_whichSys=? and tf_imId=?;";
+                + " where tf_ownerId=? and tf_whichSys=? and tf_imId=? and tf_phone=?;";
         SQLiteStatement sta = db.compileStatement(sql);
         sta.bindLong(1, model.getType());
-        sta.bindString(2, imId);
+        sta.bindString(2, model.getImid());
         sta.bindString(3, model.getOwnerId());
         sta.bindString(4, model.getWhichsys());
-        sta.bindString(5, model.getImid());
+        sta.bindString(5, imId);//0  
+        sta.bindString(6, model.getPhone());
         long row=  sta.executeInsert();
         DatabaseManager.getInstance().closeDatabase();
     }

+ 2 - 1
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/model/form/Data.java

@@ -207,8 +207,9 @@ public class Data implements Parcelable {
     public Data() {
     }
 
-    public Data(boolean isMain, Approval  approval) {
+    public Data(boolean isMain, Approval approval) {
         this.groupId = isMain ? 0 : 1;
+        group = isMain ? "基本信息" : "明细项1";
         this.field = approval.getValuesKey();
         this.name = approval.getCaption();
     }

+ 6 - 5
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/model/oa/Approval.java

@@ -23,10 +23,11 @@ public class Approval {
             TITLE = 11//标题
             , MAIN = 12  //主表
             , DETAIL = 13//从表
-            , ENCLOSURE = 14//附件
-            , POINTS = 15//要点
-            , NODES = 16//审批节点
-            , TAG = 17;//标题
+            , SETUPTASK = 14//历史审批要点
+            ,ENCLOSURE = 16//附件
+            , POINTS = 17//要点
+            , NODES = 18//审批节点
+            , TAG = 19;//标题
 
     private boolean neerInput = false;//是否需要输入
     private boolean mustInput = false;//是否是必填字段
@@ -254,7 +255,7 @@ public class Approval {
         }
     }
 
-    @IntDef({TITLE, MAIN, DETAIL, ENCLOSURE, POINTS, NODES, TAG})
+    @IntDef({TITLE, MAIN, DETAIL, ENCLOSURE, POINTS, NODES, TAG,SETUPTASK})
     @Retention(RetentionPolicy.SOURCE)
     public @interface Duration {
     }

+ 10 - 12
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/net/ViewUtil.java

@@ -279,7 +279,7 @@ public class ViewUtil {
                 boolean isNetHas = CommonUtil.isNetWorkConnected(MyApplication.getInstance());
                 if (isNetHas) {
                     String result = getDataFromServer(url, params, request);
-                    LogUtil.d("result:"+result);
+                    LogUtil.d("result:" + result);
                     if (result != null) {
                         if (bundle == null || message == null) {
                             Bundle bundle = new Bundle();
@@ -324,7 +324,7 @@ public class ViewUtil {
                                       final Map<String, String> params, final Handler handler,
                                       final int what, final Message message, final Bundle bundle,
                                       final String request) {
-       ThreadUtil.getInstance().addTask(new Runnable() {
+        ThreadUtil.getInstance().addTask(new Runnable() {
             @Override
             public void run() {
                 boolean isNetHas = CommonUtil.isNetWorkConnected(ct);
@@ -557,7 +557,7 @@ public class ViewUtil {
     }
 
     public static void ChangeStatusB2B(String result) {
-        LogUtil.d("LoginInfo","B2B login:"+result);
+        LogUtil.d("LoginInfo", "B2B login:" + result);
         if (!new JsonValidator().validate(result)) return;
         if (JSON.parseObject(result).getBoolean("success") == null) {
             if (mdProcessDialog == null) return;
@@ -659,7 +659,7 @@ public class ViewUtil {
      */
     public static void LoginSucess(Message msg) {
         String json = msg.getData().getString("result");
-        LogUtil.d("Test","管理平台登录:"+json);
+        LogUtil.d("Test", "管理平台登录:" + json);
         CommonUtil.setSharedPreferences(ct, "loginJson", json);
         String phone = msg.getData().getString("phone");
         String password = msg.getData().getString("password");
@@ -759,9 +759,9 @@ public class ViewUtil {
                         CommonUtil.setSharedPreferences(MyApplication.getInstance().getApplicationContext(), "companyEnUu", String.valueOf(sModel.get(0).getEnuu()));
                         LoginB2BTask(phone, password, sModel.get(0).getId());//登录B2B
                     }
-                }else{
+                } else {
                     CommonUtil.setSharedPreferences(MyApplication.getInstance().getApplicationContext(), "userRole", "1");
-                    if (ct!=null) {
+                    if (ct != null) {
                         ct.startActivity(new Intent(ct, MainActivity.class));
                     }
                 }
@@ -838,7 +838,7 @@ public class ViewUtil {
                         if (!params.containsKey("sessionId")) {
                             params.put("sessionId", CommonUtil.getSharedPreferences(ct, "sessionId"));
                         }
-                        if (!params.containsKey("master")) {
+                        if (!params.containsKey("master") || params.get("master") == null) {
                             params.put("master", CommonUtil.getSharedPreferences(ct, "erp_master"));
                         }
                         if (!params.containsKey("sessionUser"))
@@ -852,9 +852,6 @@ public class ViewUtil {
                     LogUtil.prinlnLongMsg("result", "http 发送请求-----------------------------------------");
                     LogUtil.prinlnLongMsg("result", "url:" + url);
                     LogUtil.prinlnLongMsg("result", "parms:" + params.toString());
-                    if (result != null)
-                        LogUtil.prinlnLongMsg("result", result.getResponseText());
-                    else LogUtil.prinlnLongMsg("result", "result == null");
                     if (result != null) {
                         Log.i("result", "result:" + result.getStatusCode());
                         // Log.i("result", "statusCode:" +result.getResponseText());
@@ -899,6 +896,7 @@ public class ViewUtil {
                             handler.sendMessage(finalMessage);
                         }
                     } else {
+                        LogUtil.prinlnLongMsg("result", "result == null");
                         finalBundle.putString("result", MyApplication.getInstance().getResources().getString(R.string.networks_out));
                         finalBundle.putInt("what", what);
                         finalBundle.putInt("code", 0);
@@ -1063,7 +1061,7 @@ public class ViewUtil {
         CommonUtil.clearSharedPreferences(ct, "Master_ch");
         CommonUtil.clearSharedPreferences(ct, "erp_emname");
         CommonUtil.clearSharedPreferences(ct, "userRole");
-        
-        
+
+
     }
 }

+ 219 - 35
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/presenter/ApprovaPresenter.java

@@ -36,6 +36,7 @@ import java.util.List;
 import java.util.Map;
 
 import static com.alibaba.fastjson.JSON.parseObject;
+import static com.xzjmyk.pm.activity.ui.erp.model.oa.Approval.DETAIL;
 import static com.xzjmyk.pm.activity.ui.erp.util.OACheckUtil.getJson2Text;
 import static com.xzjmyk.pm.activity.ui.erp.util.OACheckUtil.getJsonIntager;
 import static com.xzjmyk.pm.activity.ui.erp.util.OACheckUtil.getString;
@@ -45,6 +46,7 @@ import static com.xzjmyk.pm.activity.ui.erp.util.OACheckUtil.getString;
  */
 
 public class ApprovaPresenter implements OnHttpResultListener {
+    private final int LOAD_ALLHISTORY_NODES = 0x35;    //下拉历史审批要点
     private final int LOAD_TAKE_OVER_OTHER = 0x34;    //下一个处理人
     private final int LOAD_NEXT_STEPOFP_INSTANCE = 0x33;
     private final int LOAD_PROCESS_UPDATE = 0x32;//更新审批必填字段
@@ -65,9 +67,11 @@ public class ApprovaPresenter implements OnHttpResultListener {
     private DBManager manager;
     public String chchePoints = "";//审批要点缓存
     private String title;
+    private String master;
     private List<Approval> approvals;
+    private List<Approval> hineApprovals;
 
-    private boolean submit, loading, nexting;
+    private boolean submit, loading;
 
     public ApprovaPresenter(IApproval iApproval, Intent intent) {
         this.iApproval = iApproval;
@@ -75,6 +79,8 @@ public class ApprovaPresenter implements OnHttpResultListener {
             int id = intent.getIntExtra("nodeid", -1);
             String imid = intent.getStringExtra("imid");
             title = intent.getStringExtra("title");
+            master = intent.getStringExtra("master");
+            if (StringUtils.isEmpty(master)) master = CommonUtil.getMaster();
             if (id != -1) {
                 initLoad(id, imid);
             } else {
@@ -91,6 +97,7 @@ public class ApprovaPresenter implements OnHttpResultListener {
     }
 
     public void trun2SetActivity(Activity activity, List<Approval> approvals) {
+        if (loading) return;
         ArrayList<Data> fields = new ArrayList<>();
         ArrayList<Data> fieldsDis = new ArrayList<>();
         boolean addDetailed = false;
@@ -99,17 +106,34 @@ public class ApprovaPresenter implements OnHttpResultListener {
             if (approval.getType() == Approval.MAIN) {
                 Data data = new Data(true, approval);
                 fieldsDis.add(data);
-            } else if (approval.getType() == Approval.DETAIL && canAddDetail) {
-                Data data = new Data(true, approval);
+            } else if (approval.getType() == DETAIL && canAddDetail) {
+                Data data = new Data(false, approval);
                 fieldsDis.add(data);
                 addDetailed = true;
             } else if (addDetailed) {
                 canAddDetail = false;
             }
         }
+        addDetailed = false;
+        canAddDetail = true;
+        if (!ListUtils.isEmpty(hineApprovals)) {
+            for (Approval approval : hineApprovals) {
+                if (approval.getType() == Approval.MAIN) {
+                    Data data = new Data(true, approval);
+                    fields.add(data);
+                } else if (approval.getType() == DETAIL && canAddDetail) {
+                    Data data = new Data(false, approval);
+                    fields.add(data);
+                    addDetailed = true;
+                } else if (addDetailed) {
+                    canAddDetail = false;
+                }
+            }
+        }
         activity.startActivityForResult(new Intent(activity, DataFormFieldActivity.class)
                         .putParcelableArrayListExtra("fields", fields)
                         .putParcelableArrayListExtra("fieldsDis", fieldsDis)
+                        .putExtra("master", master)
                         .putExtra("caller", record.caller),
                 0x25);
     }
@@ -129,6 +153,10 @@ public class ApprovaPresenter implements OnHttpResultListener {
         return baseUrl + record.nodeId + endStatus;
     }
 
+    public String getMaster() {
+        return master == null ? CommonUtil.getMaster() : master;
+    }
+
     public void initLoad() {
         initLoad(record.nodeId);
     }
@@ -140,13 +168,13 @@ public class ApprovaPresenter implements OnHttpResultListener {
     private void initLoad(int nodeId, String imid) {
         record = new ApprovalRecord();
         approvals = new ArrayList<>();
+        hineApprovals = new ArrayList<>();
         record.nodeId = nodeId;
         if (imid != null)
             record.imid = imid;
         iApproval.initStatus();
         submit = false;
         loading = false;
-        nexting = false;
         loadCurrentNode();
     }
 
@@ -168,6 +196,7 @@ public class ApprovaPresenter implements OnHttpResultListener {
         String url = "common/setAssignee.action";
         Map<String, Object> param = new HashMap<>();
         param.put("taskId", record.nodeId);
+        param.put("master", master);
         param.put("assigneeId", emCode);//新处理人的员工编号
         param.put("processInstanceId", record.processInstanceId);//流程实例id
         param.put("description", nodeLog);//流程实例id
@@ -190,6 +219,7 @@ public class ApprovaPresenter implements OnHttpResultListener {
         Map<String, Object> param = new HashMap<>();
         param.put("em_code", CommonUtil.getEmcode());
         param.put("nodeId", record.nodeId);
+        param.put("master", master);
         param.put("needreturn", true);
         Request.Bulider bulider = new Request.Bulider()
                 .setUrl(url)
@@ -224,6 +254,7 @@ public class ApprovaPresenter implements OnHttpResultListener {
         }
         iApproval.showLoading();
         param.put("caller", record.caller);
+        param.put("master", master);
         param.put("processInstanceId", record.processInstanceId);
         String form = StringUtils.mapToJson(formStore);
         param.put("formStore", StringUtils.isEmpty(form) ? "{}" : form);
@@ -249,6 +280,7 @@ public class ApprovaPresenter implements OnHttpResultListener {
         param.put("nodeName", record.nodeName);
         param.put("nodeLog", OACheckUtil.getString(nodeLog));
         param.put("result", true);
+        param.put("master", master);
         param.put("attachs", "");//附件id
         param.put("_center", "0");//是否集团账套
         param.put("_noc", 1);//权限管控
@@ -269,6 +301,7 @@ public class ApprovaPresenter implements OnHttpResultListener {
         param.put("processInstanceId", record.processInstanceId);
         param.put("holdtime", 435);
         param.put("nodeId", record.nodeId);
+        param.put("master", master);
         Request.Bulider bulider = new Request.Bulider()
                 .setUrl(url)
                 .setWhat(LOAD_END_PROCESS)
@@ -278,13 +311,13 @@ public class ApprovaPresenter implements OnHttpResultListener {
 
     /*获取下一个节点 loading*/
     public void loadNextProcess() {
-        if (loading || nexting) return;
-        nexting = true;
+        if (loading) return;
         iApproval.showToast(R.string.loadtonext_approval, R.color.load_submit);
         iApproval.showLoading();
         String url = "common/getNextProcess.action";
         Map<String, Object> param = new HashMap<>();
         param.put("taskId", record.nodeId);
+        param.put("master", master);
         param.put("_noc", 1);//权限管控
         Request.Bulider bulider = new Request.Bulider()
                 .setUrl(url)
@@ -308,6 +341,7 @@ public class ApprovaPresenter implements OnHttpResultListener {
         param.put("taskId", record.nodeId);
         param.put("nodeName", record.nodeName);
         param.put("nodeLog", nodeLog);
+        param.put("master", master);
         param.put("result", false);
         param.put("backTaskName", "RECORDER");
         param.put("attachs", "");//附件id
@@ -327,6 +361,7 @@ public class ApprovaPresenter implements OnHttpResultListener {
         Map<String, Object> param = new HashMap<>();
         param.put("caller", record.caller);
         param.put("id", record.id);
+        param.put("master", master);
         Request.Bulider bulider = new Request.Bulider()
                 .setUrl(url)
                 .setWhat(LOAD_NEXT_STEPOFP_INSTANCE)
@@ -341,6 +376,7 @@ public class ApprovaPresenter implements OnHttpResultListener {
         Map<String, Object> param = new HashMap<>();
         Map<String, Object> params = new HashMap<>();
         params.put("em_code", emCode);
+        param.put("master", master);
         params.put("nodeId", record.chcheNode);
         param.put("params", StringUtils.mapToJson(params));
         param.put("_noc", "1");
@@ -365,6 +401,7 @@ public class ApprovaPresenter implements OnHttpResultListener {
         String url = "common/getCurrentNode.action";
         Map<String, Object> param = new HashMap<>();
         param.put("jp_nodeId", record.nodeId);
+        param.put("master", master);
         param.put("_noc", 1);
         Request.Bulider bulider = new Request.Bulider()
                 .setUrl(url)
@@ -381,8 +418,10 @@ public class ApprovaPresenter implements OnHttpResultListener {
         String url = "mobile/common/getformandgriddata.action";
         Map<String, Object> param = new HashMap<>();
         param.put("caller", record.caller);
+        param.put("master", master);
         param.put("id", record.id);
         param.put("isprocess", 1);
+        param.put("config", 1);
         Request.Bulider bulider = new Request.Bulider()
                 .setUrl(url)
                 .setWhat(LOAD_FORMAND_GRIDDATA)
@@ -390,12 +429,28 @@ public class ApprovaPresenter implements OnHttpResultListener {
         OAHttpHelper.getInstance().requestHttp(bulider.bulid(), this);
     }
 
+    /*下拉历史审批要点*/
+    private void loadAllHistoryNodes() {
+        iApproval.showLoading();
+        String url = "common/getAllHistoryNodes.action";
+        Map<String, Object> param = new HashMap<>();
+        param.put("master", master);
+        param.put("processInstanceId", record.processInstanceId);
+        param.put("_noc", 1);
+        Request.Bulider bulider = new Request.Bulider()
+                .setUrl(url)
+                .setWhat(LOAD_ALLHISTORY_NODES)
+                .setParam(param);
+        OAHttpHelper.getInstance().requestHttp(bulider.bulid(), this);
+    }
+
     /*下拉审批要点 loading*/
     private void loadCustomSetupOfTask() {
         iApproval.showLoading();
         String url = "common/getCustomSetupOfTask.action";
         Map<String, Object> param = new HashMap<>();
         param.put("_noc", 1);
+        param.put("master", master);
         param.put("nodeId", record.nodeId);
         Request.Bulider bulider = new Request.Bulider()
                 .setUrl(url)
@@ -405,16 +460,20 @@ public class ApprovaPresenter implements OnHttpResultListener {
     }
 
     /*获取历史节点数据 loading*/
-    private void loadJnodes() {
+    private void loadJnodes(String historyNode) {
         iApproval.showLoading();
         String url = "common/getCurrentJnodes.action";
         Map<String, Object> param = new HashMap<>();
         param.put("caller", record.caller);
         param.put("keyValue", record.id);
         param.put("_noc", 1);
+        param.put("master", master);
+        Bundle bundle = new Bundle();
+        bundle.putString("historyNode", historyNode);
         Request.Bulider bulider = new Request.Bulider()
                 .setUrl(url)
                 .setWhat(LOAD_JNODES)
+                .setBundle(bundle)
                 .setParam(param);
         OAHttpHelper.getInstance().requestHttp(bulider.bulid(), this);
     }
@@ -428,6 +487,7 @@ public class ApprovaPresenter implements OnHttpResultListener {
         String url = "common/getFilePaths.action";
         Map<String, Object> param = new HashMap<>();
         param.put("field", "fb_attach");
+        param.put("master", master);
         param.put("id", attachs);
         Request.Bulider bulider = new Request.Bulider()
                 .setUrl(url)
@@ -493,19 +553,25 @@ public class ApprovaPresenter implements OnHttpResultListener {
                         try {
                             handlerFormandGriddataInThread(OACheckUtil.getJSONObject(object, "datas"));
                         } catch (Exception e) {
+                            LogUtil.i("handlerFormandGriddataInThread =" + e.getMessage());
                             loading = false;
                             e.printStackTrace();
                         }
                     }
                 });
                 break;
+            case LOAD_ALLHISTORY_NODES:
+                loadJnodes(object.toString());
+//                handlerHistorySetuptask(object);
+                break;
             case LOAD_JNODES:
-                handlerNode(object);
+                handlerNode(object, bundle);
                 break;
             case LOAD_SETUP_TASK:
                 handlerSetupTask(object);
                 break;
             case LOAD_NEXT_PROCESS:
+                if (loading) return;
                 int nextnode = OACheckUtil.getJsonIntager(object, "nodeId");
                 if (nextnode > 0) {
                     initLoad(nextnode);
@@ -636,27 +702,33 @@ public class ApprovaPresenter implements OnHttpResultListener {
     private void handlerFormandGriddataInThread(JSONObject object) throws Exception {
         if (object != null) {
             //计算主表
-            final JSONObject formdata = OACheckUtil.getJsonArray(object, "formdata").getJSONObject(0);
+            JSONArray formdatas = OACheckUtil.getJsonArray(object, "formdata");
             JSONArray formconfigs = OACheckUtil.getJsonArray(object, "formconfigs");
-            if (!ListUtils.isEmpty(formconfigs) && formdata != null) {
-                final List<Approval> mainApproval = formandGriddata(formdata, formconfigs, record.caller, true);
-                setData2ListThread(Approval.MAIN, mainApproval);
+            if (!ListUtils.isEmpty(formdatas) && !ListUtils.isEmpty(formconfigs)) {
+                final JSONObject formdata = formdatas.getJSONObject(0);
+                if (!ListUtils.isEmpty(formconfigs) && formdata != null) {
+                    final List<Approval> mainApproval = formandGriddata(formdata, formconfigs, record.caller, true);
+                    setData2ListThread(Approval.MAIN, mainApproval);
+                }
             }
-            //计算从表,包含多从表
+            //计算从表
             JSONArray griddatas = OACheckUtil.getJsonArray(object, "griddata");
             JSONArray gridconfigs = OACheckUtil.getJsonArray(object, "gridconfigs");
-            JSONArray othergrids = OACheckUtil.getJsonArray(object, "othergrids");
             final List<Approval> detailedList = new ArrayList<>();
             if (!ListUtils.isEmpty(griddatas) && !ListUtils.isEmpty(gridconfigs)) {
                 for (int i = 0; i < griddatas.size(); i++) {
                     //获取到单个明细表单
                     final List<Approval> detailedApproval = formandGriddata(griddatas.getJSONObject(i), gridconfigs, record.caller, false);
-                    Approval approval = new Approval(Approval.TAG);
-                    approval.setCaption(getString(R.string.serial_number) + (i + 1));
-                    detailedApproval.add(0, approval);
-                    detailedList.addAll(detailedApproval);
+                    if (!ListUtils.isEmpty(detailedApproval)) {
+                        Approval approval = new Approval(Approval.TAG);
+                        approval.setCaption(getString(R.string.serial_number) + (i + 1));
+                        detailedApproval.add(0, approval);
+                        detailedList.addAll(detailedApproval);
+                    }
                 }
             }
+            //计算多从表
+            JSONArray othergrids = OACheckUtil.getJsonArray(object, "othergrids");
             if (!ListUtils.isEmpty(othergrids)) {
                 JSONObject o = null;
                 String caller = null;
@@ -673,19 +745,25 @@ public class ApprovaPresenter implements OnHttpResultListener {
                         for (int j = 0; j < otherGriddata.size(); j++) {
                             //获取到单个明细表单
                             final List<Approval> detailedApproval = formandGriddata(otherGriddata.getJSONObject(j), otherGridconfigs, caller, false);
-                            Approval approval = new Approval(Approval.TAG);
-                            approval.setCaption(name + " " + getString(R.string.serial_number) + (j + 1));
-                            detailedApproval.add(0, approval);
-                            detailedList.addAll(detailedApproval);
+                            if (!ListUtils.isEmpty(detailedApproval)) {
+                                Approval approval = new Approval(Approval.TAG);
+                                approval.setCaption(name + " " + getString(R.string.serial_number) + (j + 1));
+                                detailedApproval.add(0, approval);
+                                detailedList.addAll(detailedApproval);
+                            }
                         }
                     }
                 }
             }
-            setData2ListThread(Approval.DETAIL, detailedList);
+            setData2ListThread(DETAIL, detailedList);
             OAHttpHelper.getInstance().post(new Runnable() {
                 @Override
                 public void run() {
-                    loadCustomSetupOfTask();//获取审批要点
+                    if (isApprovaling()) {
+                        loadCustomSetupOfTask();
+                    } else {
+                        loadAllHistoryNodes();
+                    }
                 }
             });
         } else {
@@ -693,6 +771,7 @@ public class ApprovaPresenter implements OnHttpResultListener {
         }
     }
 
+
     private List<Approval> formandGriddata(final JSONObject data, final JSONArray configs, String caller, boolean isMain) throws Exception {
         List<Approval> approvals = new ArrayList<>();
         String idTag = "";
@@ -701,14 +780,16 @@ public class ApprovaPresenter implements OnHttpResultListener {
         for (int i = 0; i < configs.size(); i++) {
             JSONObject config = configs.getJSONObject(i);
             if (config == null) continue;
-            Approval approval = new Approval(isMain ? Approval.MAIN : Approval.DETAIL);
+            Approval approval = new Approval(isMain ? Approval.MAIN : DETAIL);
             String caption = getJson2Text(config, "FD_CAPTION", "DG_CAPTION");//获取第一个字段字段名称
             String valueKey = getJson2Text(config, "FD_FIELD", "DG_FIELD");
             JSONArray combostore = OACheckUtil.getJsonArray(config, "COMBOSTORE");
             String type = getJson2Text(config, "FD_TYPE", "DG_TYPE");
             //添加类型
             approval.setDfType(type);
-//            int isdefault = OACheckUtil.getJsonIntager(config, "MFD_ISDEFAULT", "MDG_ISDEFAULT");
+            approval.setCaption(caption);
+            approval.setValuesKey(valueKey);
+            int isdefault = OACheckUtil.getJsonIntager(config, "MFD_ISDEFAULT", "MDG_ISDEFAULT");
             int appwidth = OACheckUtil.getJsonIntager(config, "FD_APPWIDTH", "DG_APPWIDTH");
             if (isMain && approval.isDftypeEQ("MF")) {
                 final String fb_attach = valueKey;
@@ -718,6 +799,7 @@ public class ApprovaPresenter implements OnHttpResultListener {
                         loadFilePaths(OACheckUtil.getJson2Text(data, fb_attach));
                     }
                 });
+                continue;
             }
             //获取Id
             if (!StringUtils.isEmpty(caption) && (caption.equals("ID") || caption.equals("id"))) {
@@ -725,12 +807,15 @@ public class ApprovaPresenter implements OnHttpResultListener {
                 id = OACheckUtil.getJsonIntager(data, valueKey);
             }
             if (approval.isDftypeEQ("H")
-//                    || isdefault != -1
+                    || isdefault != -1
                     || appwidth == 0
                     || (!isMain && OACheckUtil.getJsonIntager(config, "DG_WIDTH") == 0)
                     || OACheckUtil.isEmpty(valueKey)
                     || OACheckUtil.isEmpty(caption)
                     || (merged.length() > 0 && merged.toString().contains(valueKey))) {
+                if (isdefault == 0) {
+                    hineApprovals.add(approval);
+                }
                 continue;
             }
             //添加下拉数据
@@ -745,8 +830,6 @@ public class ApprovaPresenter implements OnHttpResultListener {
             }
             approval.setValues(OACheckUtil.getJson2Text(data, valueKey)); ;//获取第一个字段的值
             boolean mergeAble = appwidth == 1 || (approval.isDftypeEQ("MT"));
-            approval.setCaption(caption);
-            approval.setValuesKey(valueKey);
             approval.data2Values();
             approval.setMustInput(true);
             if (!StringUtils.isEmpty(record.needInputKeys)
@@ -764,8 +847,9 @@ public class ApprovaPresenter implements OnHttpResultListener {
             }
             if (!isApprovaling())
                 approval.setNeerInput(false);
-            if (!approval.isNeerInput() && StringUtils.isEmpty(approval.getValues()))
+            if (!approval.isNeerInput() && StringUtils.isEmpty(approval.getValues())) {
                 continue;//如果不是要输入的对象,同时显示值为空,需要隐藏去
+            }
             if (mergeAble) {
                 String valueTagKey = getJson2Text(config, "FD_LOGICTYPE", "DG_LOGICTYPE");//获取第二个值的key
                 if (!StringUtils.isEmpty(valueTagKey)) {
@@ -786,6 +870,68 @@ public class ApprovaPresenter implements OnHttpResultListener {
         return approvals;
     }
 
+    private List<Approval> handlerHistorySetuptask(JSONObject object) {
+        JSONArray nodes = OACheckUtil.getJsonArray(object, "nodes");
+        List<Approval> nodeApprovals = new ArrayList<>();
+        if (!ListUtils.isEmpty(nodes)) {
+            List<Approval> setuptasks = new ArrayList<>();
+            JSONObject node = null;
+            List<Approval> itemSetuptask = null;
+            for (int i = nodes.size() - 1; i >= 0; i--) {
+                node = nodes.getJSONObject(i);
+                itemSetuptask = getSetuptask(node);
+                if (!ListUtils.isEmpty(itemSetuptask)) {
+                    setuptasks.addAll(itemSetuptask);
+                }
+                nodeApprovals.add(getNodeApproval(node));
+            }
+            if (!ListUtils.isEmpty(setuptasks)) {
+                setData2ListThread(Approval.DETAIL, setuptasks);
+            }
+        }
+        return nodeApprovals;
+    }
+
+    private List<Approval> getSetuptask(JSONObject node) {
+        String name = OACheckUtil.getJson2Text(node, "jn_dealManName");
+        Approval approval = new Approval(Approval.TAG);
+        approval.setCaption(name + "的审批记录");
+        List<Approval> itemSetuptasks = getSetuptaskByData(OACheckUtil.getJson2Text(node, "jn_operatedDescription"));
+        if (!ListUtils.isEmpty(itemSetuptasks)) {
+            itemSetuptasks.add(0, approval);
+        }
+        return itemSetuptasks;
+    }
+
+    private Approval getNodeApproval(JSONObject object) {
+        String nodeName = OACheckUtil.getJson2Text(object, "jn_name");//当前结点名称
+        String emCode = OACheckUtil.getJson2Text(object, "jn_dealManId");//节点处理人编号
+        String manName = OACheckUtil.getJson2Text(object, "jn_dealManName");//处理人名字
+        String dealTime = OACheckUtil.getJson2Text(object, "jn_dealTime");//审批时间
+        String result = OACheckUtil.getJson2Text(object, "jn_dealResult");//审批结果
+        String description = OACheckUtil.getJson2Text(object, "jn_nodeDescription");//审批意见
+        Approval approval = new Approval(Approval.NODES);
+        approval.setCaption(manName);
+        approval.setDfType(emCode);
+        if (!StringUtils.isEmpty(dealTime)) {
+            approval.setValues(TimeUtils.long2str(TimeUtils.f_str_2_long(dealTime), "MM-dd HH:mm"));
+        }
+        StringBuilder resultBuilder = new StringBuilder();
+        if (!StringUtils.isEmpty(result)) {
+            if (result.equals("同意")) {
+                resultBuilder.append("已审批");
+            } else if (result.equals("不同意")) {
+                resultBuilder.append("未通过");
+            }
+        }
+        if (!StringUtils.isEmpty(description)) {
+            resultBuilder.append("(" + description + ")");
+        }
+        approval.setIdKey(resultBuilder.toString());
+        approval.setValuesKey(nodeName);
+        return approval;
+    }
+
     /**
      * itemData.caption //处理人名称
      * itemData.type //处理人编号
@@ -798,14 +944,21 @@ public class ApprovaPresenter implements OnHttpResultListener {
      * 2.获取node,获取审批意见和时间
      * 3.获取processs,获取审批状态
      */
-    private void handlerNode(final JSONObject object) {
+    private void handlerNode(final JSONObject object, final Bundle bundle) {
         ThreadUtil.getInstance().addTask(new Runnable() {
             @Override
             public void run() {
                 JSONArray nodes = OACheckUtil.getJsonArray(object, "nodes");
                 JSONArray processs = OACheckUtil.getJsonArray(object, "processs");
                 JSONArray datas = OACheckUtil.getJsonArray(object, "data");
-                final List<Approval> approvals = getNodDatas(datas);
+                List<Approval> approvals = getNodDatas(datas);
+                List<Approval> historyNodes = null;
+                if (bundle != null && !StringUtils.isEmpty(bundle.getString("historyNode"))) {
+                    historyNodes = handlerHistorySetuptask(JSON.parseObject(bundle.getString("historyNode")));
+                }
+                if (ListUtils.isEmpty(approvals) && !ListUtils.isEmpty(historyNodes)) {
+                    approvals = historyNodes;
+                }
                 if (!ListUtils.isEmpty(processs)) {
                     mergeNode(processs, approvals, false);
                 }
@@ -927,6 +1080,34 @@ public class ApprovaPresenter implements OnHttpResultListener {
         return approvals;
     }
 
+
+    private List<Approval> getSetuptaskByData(String data) {
+        if (!StringUtils.isEmpty(data)) {
+            //需要把该数据填充到对应上面
+            String[] datas = data.split(";");
+            List<Approval> itemSetuptasks = new ArrayList<>();
+            Approval approval = null;
+            if (datas != null && datas.length > 0) {
+                for (int j = 0; j < datas.length; j++) {
+                    String description = datas[j];
+                    if (description.contains("(")) {
+                        String caption = description.substring(0, description.indexOf("("));
+                        String values = OACheckUtil.getFirstBrackets(description);
+                        if (!StringUtils.isEmpty(caption) && !StringUtils.isEmpty(values)) {
+                            approval = new Approval(Approval.SETUPTASK);
+                            approval.setNeerInput(false);
+                            approval.setCaption(caption);
+                            approval.setValues(values);
+                            itemSetuptasks.add(approval);
+                        }
+                    }
+                }
+            }
+            return itemSetuptasks;
+        }
+        return null;
+    }
+
     private void handlerSetupTask(final JSONObject object) throws Exception {
         ThreadUtil.getInstance().addTask(new Runnable() {
             @Override
@@ -956,7 +1137,7 @@ public class ApprovaPresenter implements OnHttpResultListener {
                 OAHttpHelper.getInstance().post(new Runnable() {
                     @Override
                     public void run() {
-                        loadJnodes();
+                        loadAllHistoryNodes();
                     }
                 });
             }
@@ -1092,7 +1273,7 @@ public class ApprovaPresenter implements OnHttpResultListener {
                 Approval approval = approvals.get(i);
                 if (approval.getType() == Approval.MAIN) {
                     mainList.add(approval);
-                } else if (approval.getType() == Approval.DETAIL) {
+                } else if (approval.getType() == DETAIL) {
                     detail.add(approval);
                     if (approvals.size() > i + 1 && approvals.get(i + 1).getType() != approval.getType()) {
                         detailList.add(detail);
@@ -1151,7 +1332,7 @@ public class ApprovaPresenter implements OnHttpResultListener {
         return formstore;
     }
 
-    private synchronized void setData2ListThread(int type, List<Approval> newApprovals) {
+    private synchronized void setData2ListThread(final int type, List<Approval> newApprovals) {
         final List<Approval> merges = new ArrayList<>();
         if (!ListUtils.isEmpty(approvals)) {
             if (type == Approval.TITLE) {
@@ -1182,6 +1363,9 @@ public class ApprovaPresenter implements OnHttpResultListener {
         OAHttpHelper.getInstance().post(new Runnable() {
             @Override
             public void run() {
+                if (type == Approval.TITLE) {
+                    iApproval.showOpinion();
+                }
                 iApproval.showModels(merges);
 
             }

+ 2 - 0
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/presenter/imp/IApproval.java

@@ -20,4 +20,6 @@ public interface IApproval extends HttpImp {
 
     void endProcess();
 
+    void showOpinion();
+
 }

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

@@ -0,0 +1,111 @@
+package com.xzjmyk.pm.activity.ui.erp.util;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.xzjmyk.pm.activity.ui.erp.db.DBManager;
+import com.xzjmyk.pm.activity.ui.erp.entity.EmployeesEntity;
+import com.xzjmyk.pm.activity.ui.erp.model.oa.Approval;
+import com.xzjmyk.pm.activity.util.TimeUtils;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Created by Bitliker on 2017/8/11.
+ */
+
+public class ApprovaNodeUtil {
+
+    public static List<Approval> handlerNode(DBManager manager, String message) {
+        JSONObject object = JSON.parseObject(message);
+        JSONArray nodes = OACheckUtil.getJsonArray(object, "nodes");
+        JSONArray processs = OACheckUtil.getJsonArray(object, "processs");
+        JSONArray datas = OACheckUtil.getJsonArray(object, "data");
+        final List<Approval> approvals = getNodDatas(datas);
+        if (!ListUtils.isEmpty(processs)) {
+            mergeNode(processs, approvals, false);
+        }
+        if (!ListUtils.isEmpty(nodes)) {
+            mergeNode(nodes, approvals, true);
+        }
+        if (!ListUtils.isEmpty(approvals)) {
+            //判断当前
+            for (Approval a : approvals) {
+                if (a.getIdKey().contains("待审批")) {
+                    a.setValues("");
+                }
+                String[] emcode = a.getDfType().split(",");
+                if (!StringUtils.isEmpty(emcode[0])) {
+                    int imId = getImByCode(manager, emcode[0]);
+                    a.setId(imId);
+                }
+            }
+            return approvals;
+
+        }
+        return null;
+    }
+
+    private static List<Approval> getNodDatas(JSONArray datas) {
+        List<Approval> approvals = new ArrayList<>();
+        for (int i = datas.size() - 1; i >= 0; i--) {
+            JSONObject object = datas.getJSONObject(i);
+            String nodeName = OACheckUtil.getJson2Text(object, "JP_NODENAME");//当前结点名称
+            String emCode = OACheckUtil.getJson2Text(object, "JP_NODEDEALMAN");//节点处理人编号
+            String manName = OACheckUtil.getJson2Text(object, "JP_NODEDEALMANNAME");//
+            Approval approval = new Approval(Approval.NODES);
+            approval.setCaption(manName);
+            approval.setDfType(emCode);
+            approval.setValuesKey(nodeName);
+            approvals.add(approval);
+        }
+        return approvals;
+    }
+
+    private static void mergeNode(JSONArray array, List<Approval> approvals, boolean isLog) {
+        for (int i = 0; i < array.size(); i++) {
+            JSONObject o = array.getJSONObject(i);
+            String name = OACheckUtil.getJson2Text(o, "jp_nodeName", "jn_name");//节点名称
+            long launchTime = OACheckUtil.getJsonTime(o, "jp_launchTime", "jn_dealTime");//时间
+            String status = OACheckUtil.getJson2Text(o, "jp_status");//状态
+            String nodeDealCode = OACheckUtil.getJson2Text(o, "jp_nodeDealMan", "jn_dealManId");//处理人编号
+            String nodeDealName = OACheckUtil.getJson2Text(o, "jp_nodeDealManName", "jn_dealManName");//执行人
+            String nodeDescription = OACheckUtil.getJson2Text(o, "jn_nodeDescription");//执行操作
+            for (Approval a : approvals) {
+                if (name.equals(a.getValuesKey())) {//为当前结点
+                    if (!isLog) {
+                        a.setDfType(nodeDealCode);
+                        a.setCaption(nodeDealName);
+                        a.setIdKey(status);
+                        if (launchTime > 0) {
+                            a.setValues(TimeUtils.long2str(launchTime, "MM-dd HH:mm"));
+                        }
+                    } else {
+                        if (a.isDftypeEQ(nodeDealCode)) {
+                            if (launchTime > 0) {
+                                a.setValues(TimeUtils.long2str(launchTime, "MM-dd HH:mm"));
+                            }
+                            if (!StringUtils.isEmpty(nodeDescription)) {
+                                a.setIdKey(a.getIdKey() + "(" + nodeDescription + ")");
+                            }
+                        }
+                    }
+                    break;
+                }
+            }
+        }
+    }
+
+    private static int getImByCode(DBManager manager, String emCode) {
+        if (manager == null) manager = new DBManager();
+        String whichsys = CommonUtil.getMaster();
+        if (StringUtils.isEmpty(emCode) || StringUtils.isEmpty(whichsys)) return 0;
+        String[] selectionArgs = {emCode, whichsys};
+        String selection = "em_code=? and whichsys=?";
+        EmployeesEntity employeesEntity = manager.selectForEmployee(selectionArgs, selection);
+        if (employeesEntity == null || employeesEntity.getEm_IMID() == 0) return 0;
+        return employeesEntity.getEm_IMID();
+    }
+
+}

+ 14 - 19
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/message/MessageFragment.java

@@ -55,7 +55,7 @@ import java.util.List;
 /**
  * Created by Bitliker on 2017/3/1.
  */
-public class MessageFragment extends EasyFragment implements IMessageView,   View.OnClickListener {
+public class MessageFragment extends EasyFragment implements IMessageView, View.OnClickListener {
 
     @ViewInject(R.id.voiceSearchView)
     private VoiceSearchView voiceSearchView;
@@ -88,7 +88,7 @@ public class MessageFragment extends EasyFragment implements IMessageView,   Vie
     private TextView waitting_work_content_tv;//待办工作
     private TextView subscribe_content_tv;//我的订阅
     private TextView book_content_tv;
-    
+
     private TextView schedule_time_tv;//审批流
     private TextView waitting_work_time_tv;//待办工作
     private TextView subscribe_time_tv;//我的订阅
@@ -174,7 +174,6 @@ public class MessageFragment extends EasyFragment implements IMessageView,   Vie
     }
 
 
-
     private void initView() {
 
         listView.getRefreshableView().addHeaderView(initHeaderView());
@@ -194,17 +193,17 @@ public class MessageFragment extends EasyFragment implements IMessageView,   Vie
         booking_num_tv = (TextView) view.findViewById(R.id.booking_num_tv);//小秘书
 
         tv_book_num = (TextView) view.findViewById(R.id.tv_book_num);//小秘书
-        
+
         schedule_content_tv = (TextView) view.findViewById(R.id.schedule_content_tv);//审批流
         waitting_work_content_tv = (TextView) view.findViewById(R.id.waitting_work_content_tv);//待办工作
         subscribe_content_tv = (TextView) view.findViewById(R.id.subscribe_content_tv);//我的订阅
-        book_content_tv= (TextView) view.findViewById(R.id.book_content_tv);//预约内容
+        book_content_tv = (TextView) view.findViewById(R.id.book_content_tv);//预约内容
 
         schedule_time_tv = (TextView) view.findViewById(R.id.schedule_time_tv);//审批流
         waitting_work_time_tv = (TextView) view.findViewById(R.id.waitting_work_time_tv);//待办工作
         subscribe_time_tv = (TextView) view.findViewById(R.id.subscribe_time_tv);//我的订阅
-        book_time_tv=(TextView) view.findViewById(R.id.book_time_tv);
-    
+        book_time_tv = (TextView) view.findViewById(R.id.book_time_tv);
+
 
         dingyue_num = (TextView) view.findViewById(R.id.tv_dingYue_num);//订阅红点
         tv_dingyue_desc = (TextView) view.findViewById(R.id.tv_dingyue_desc);//订阅红点
@@ -230,11 +229,10 @@ public class MessageFragment extends EasyFragment implements IMessageView,   Vie
             subscribe_rl.setVisibility(View.VISIBLE);
 //            news_notice_rl.setVisibility(View.GONE);
         }
-        UserRoleUtils.checkUserRole(this,view);
+        UserRoleUtils.checkUserRole(this, view);
         return view;
     }
 
-  
 
     private void showPopupWindow() {
         if (setWindow == null) initPopupWindow();
@@ -279,13 +277,12 @@ public class MessageFragment extends EasyFragment implements IMessageView,   Vie
     }
 
 
-
     //点击时间回调
     @Override
     public void onClick(View v) {
         switch (v.getId()) {
             case R.id.booking_rl:
-                startActivity(new Intent(mContext,BookingListActivity.class));
+                startActivity(new Intent(mContext, BookingListActivity.class));
                 tv_book_num.setVisibility(View.GONE);
                 CommonUtil.setSharedPreferences(MyApplication.getInstance(), Constants.SET_BOOKING, true);
                 break;
@@ -362,23 +359,21 @@ public class MessageFragment extends EasyFragment implements IMessageView,   Vie
     }
 
 
- 
-
     @Override
-    public void updateHeaderView(int postion, int num, String subTitle,String time) {
+    public void updateHeaderView(int postion, int num, String subTitle, String time) {
         switch (postion) {
             case 0:
-                updateHeaderView(schedule_num_tv, schedule_content_tv, schedule_time_tv, num, subTitle,time);
+                updateHeaderView(schedule_num_tv, schedule_content_tv, schedule_time_tv, num, subTitle, time);
                 break;
             case 1:
-                updateHeaderView(waitting_work_num_tv, waitting_work_content_tv, waitting_work_time_tv, num, subTitle,time);
+                updateHeaderView(waitting_work_num_tv, waitting_work_content_tv, waitting_work_time_tv, num, subTitle, time);
                 break;
             case 2:
-                updateHeaderView(subscribe_num_tv, subscribe_content_tv, subscribe_time_tv, num, subTitle,time);
+                updateHeaderView(subscribe_num_tv, subscribe_content_tv, subscribe_time_tv, num, subTitle, time);
                 break;
             case 4:
-                LogUtil.d("Test","updateHeaderView:"+num);
-                updateHeaderView(booking_num_tv, book_content_tv, book_time_tv, num, subTitle,time);
+                LogUtil.d("Test", "updateHeaderView:" + num);
+                updateHeaderView(booking_num_tv, book_content_tv, book_time_tv, num, subTitle, time);
                 break;
         }
         listView.onRefreshComplete();

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

@@ -322,6 +322,7 @@
                 android:layout_gravity="top|right"
                 android:background="@drawable/tab_unread_bg"
                 android:gravity="center"
+                android:visibility="gone"
                 android:textColor="@android:color/white"
                 android:textSize="10.0dp"
                  />

+ 1 - 1
WeiChat/src/main/res/raw/versionconfiguration.properties

@@ -1,3 +1,3 @@
 #发布版本状态改为true,测试版本状态为false
-release_version = false
+release_version=false
 #release_version=true

+ 1 - 0
app_core/common/.gitignore

@@ -0,0 +1 @@
+/build

+ 34 - 0
app_core/common/build.gradle

@@ -0,0 +1,34 @@
+apply plugin: 'com.android.library'
+
+
+android {
+    compileSdkVersion 25
+    buildToolsVersion "25.0.0"
+
+
+    defaultConfig {
+        minSdkVersion 9
+        targetSdkVersion 24
+        versionCode 1
+        versionName "1.0"
+
+        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
+
+    }
+    buildTypes {
+        release {
+            minifyEnabled false
+            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
+        }
+    }
+}
+
+dependencies {
+    compile fileTree(dir: 'libs', include: ['*.jar'])
+    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
+        exclude group: 'com.android.support', module: 'support-annotations'
+    })
+
+    compile 'com.android.support:appcompat-v7:25.3.1'
+    testCompile 'junit:junit:4.12'
+}