Browse Source

完成面试邀请 认证流程串通

ZhangXinYu 6 năm trước cách đây
mục cha
commit
cf19277fe3
23 tập tin đã thay đổi với 587 bổ sung46 xóa
  1. 6 2
      app/src/main/AndroidManifest.xml
  2. 33 0
      app/src/main/java/com/webrain/dailypay/bean/ResumeBean.java
  3. 11 0
      app/src/main/java/com/webrain/dailypay/http/Api.java
  4. 10 0
      app/src/main/java/com/webrain/dailypay/http/subscribe/LoginSubscribe.java
  5. 11 0
      app/src/main/java/com/webrain/dailypay/http/subscribe/PositionSubscribe.java
  6. 4 4
      app/src/main/java/com/webrain/dailypay/ui/activity/LoginActivity.java
  7. 20 3
      app/src/main/java/com/webrain/dailypay/ui/activity/identity/IdentityResultActivity.java
  8. 29 22
      app/src/main/java/com/webrain/dailypay/ui/activity/resume/InvitedInterviewActivity.java
  9. 76 3
      app/src/main/java/com/webrain/dailypay/ui/fragment/MeFragment.java
  10. 2 0
      app/src/main/java/com/webrain/dailypay/ui/mvp/contacts/IdentityResultContacts.java
  11. 7 0
      app/src/main/java/com/webrain/dailypay/ui/mvp/contacts/InvitedInterviewContacts.java
  12. 24 0
      app/src/main/java/com/webrain/dailypay/ui/mvp/contacts/MeFragmentContacts.java
  13. 44 0
      app/src/main/java/com/webrain/dailypay/ui/mvp/model/InvitedInterviewModel.java
  14. 57 0
      app/src/main/java/com/webrain/dailypay/ui/mvp/model/MeFragmentModel.java
  15. 1 2
      app/src/main/java/com/webrain/dailypay/ui/mvp/model/ResumeDetailModel.java
  16. 19 2
      app/src/main/java/com/webrain/dailypay/ui/mvp/presenter/IdentityResultPresenter.java
  17. 78 0
      app/src/main/java/com/webrain/dailypay/ui/mvp/presenter/InvitedInterviewPresenter.java
  18. 125 0
      app/src/main/java/com/webrain/dailypay/ui/mvp/presenter/MeFragmentPresenter.java
  19. 14 5
      app/src/main/java/com/webrain/dailypay/ui/mvp/presenter/ResumeDetailPresenter.java
  20. 3 1
      app/src/main/res/layout/activity_invited_interview.xml
  21. 3 0
      app/src/main/res/layout/fragment_me.xml
  22. 1 0
      app/src/main/res/layout/item_listview_resume_header.xml
  23. 9 2
      app/src/main/res/values/strings.xml

+ 6 - 2
app/src/main/AndroidManifest.xml

@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
     package="com.webrain.dailypay">
 
     <!--读取扩展存储,向扩展卡读取数据,用于读取缓存定位数据-->
@@ -30,6 +31,7 @@
     <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
     <!-- 拨打电话 -->
     <uses-permission android:name="android.permission.CALL_PHONE" />
+
     <application
         android:name=".MyApplication"
         android:allowBackup="true"
@@ -37,7 +39,8 @@
         android:label="@string/app_name"
         android:roundIcon="@mipmap/ic_launcher_round"
         android:supportsRtl="true"
-        android:theme="@style/AppTheme">
+        android:theme="@style/AppTheme"
+        tools:ignore="GoogleAppIndexingWarning">
         <activity
             android:name=".ui.activity.MainActivity"
             android:screenOrientation="portrait">
@@ -67,7 +70,8 @@
             android:screenOrientation="portrait" />
         <activity
             android:name=".ui.activity.resume.InvitedInterviewActivity"
-            android:screenOrientation="portrait" />
+            android:screenOrientation="portrait"
+            android:windowSoftInputMode="stateHidden|adjustPan" />
         <activity
             android:name=".ui.activity.position.PositionApplyManagerActivity"
             android:screenOrientation="portrait" />

+ 33 - 0
app/src/main/java/com/webrain/dailypay/bean/ResumeBean.java

@@ -16,6 +16,9 @@ public class ResumeBean implements Parcelable {
     private String delFlag;
     private String expectationSalary;
     private String realName;
+    private String positionName;
+    private String positionId;
+    private String positionCategory;
     private String expectationCityId;
     private String phone;
     private String birthYear;
@@ -38,6 +41,9 @@ public class ResumeBean implements Parcelable {
         delFlag = in.readString();
         expectationSalary = in.readString();
         realName = in.readString();
+        positionName = in.readString();
+        positionId = in.readString();
+        positionCategory = in.readString();
         expectationCityId = in.readString();
         phone = in.readString();
         birthYear = in.readString();
@@ -214,6 +220,30 @@ public class ResumeBean implements Parcelable {
         this.applyTime = applyTime;
     }
 
+    public String getPositionName() {
+        return positionName;
+    }
+
+    public void setPositionName(String positionName) {
+        this.positionName = positionName;
+    }
+
+    public String getPositionId() {
+        return positionId;
+    }
+
+    public void setPositionId(String positionId) {
+        this.positionId = positionId;
+    }
+
+    public String getPositionCategory() {
+        return positionCategory;
+    }
+
+    public void setPositionCategory(String positionCategory) {
+        this.positionCategory = positionCategory;
+    }
+
     @Override
     public boolean equals(@Nullable Object obj) {
         if (obj instanceof ResumeBean) {
@@ -238,6 +268,9 @@ public class ResumeBean implements Parcelable {
         dest.writeString(delFlag);
         dest.writeString(expectationSalary);
         dest.writeString(realName);
+        dest.writeString(positionName);
+        dest.writeString(positionId);
+        dest.writeString(positionCategory);
         dest.writeString(expectationCityId);
         dest.writeString(phone);
         dest.writeString(birthYear);

+ 11 - 0
app/src/main/java/com/webrain/dailypay/http/Api.java

@@ -19,6 +19,7 @@ import io.reactivex.Observable;
 import okhttp3.MultipartBody;
 import retrofit2.http.Body;
 import retrofit2.http.GET;
+import retrofit2.http.Multipart;
 import retrofit2.http.POST;
 import retrofit2.http.QueryMap;
 
@@ -40,6 +41,11 @@ public class Api {
         @POST("api/hpuser/userAudit")
         Observable<ApiResultBean<ApiNormalBean>> uploadUserAudit(@Body MultipartBody img);
 
+        //用户企业信息
+        @GET("api/hpuser/getUserInfo")
+        Observable<ApiResultBean<ApiLoginBean>> httpUserInfo(@QueryMap Map<String, Object> args);
+
+
     }
 
     public interface AnterpriseInterface {
@@ -85,6 +91,11 @@ public class Api {
         //批量处理简历
         @GET("api/position/changeApplysStatus")
         Observable<ApiResultBean<ApiNormalBean>> httpChangeApplyStatus(@QueryMap Map<String, Object> args);
+
+        //面试邀请
+        @GET("api/position/interviewInvite")
+        Observable<ApiResultBean<ApiNormalBean>> httpInterviewInvite(@QueryMap Map<String, Object> args);
+
     }
 
     public interface ResumeInterface {

+ 10 - 0
app/src/main/java/com/webrain/dailypay/http/subscribe/LoginSubscribe.java

@@ -66,4 +66,14 @@ public class LoginSubscribe extends BaseSubscribe {
         subscribe(observable, mObservable);
     }
 
+    /**
+     * 用户企业信息
+     *
+     * @param mObservable
+     */
+    public void requestUserInfo(Map<String, Object> params, ApiObserver<ApiLoginBean> mObservable) {
+        Api.LoginInterface apiService = ServiceGenerator.createService(Api.LoginInterface.class);
+        Observable<ApiResultBean<ApiLoginBean>> observable = apiService.httpUserInfo(params);
+        subscribe(observable, mObservable);
+    }
 }

+ 11 - 0
app/src/main/java/com/webrain/dailypay/http/subscribe/PositionSubscribe.java

@@ -114,5 +114,16 @@ public class PositionSubscribe extends BaseSubscribe {
         subscribe(observable, mObservable);
     }
 
+    /**
+     * 面试邀请
+     *
+     * @param mObservable
+     */
+    public void requestInterviewInvite(Map<String, Object> params, ApiObserver<ApiNormalBean> mObservable) {
+        Api.PositionInterface apiService = ServiceGenerator.createService(Api.PositionInterface.class);
+        Observable<ApiResultBean<ApiNormalBean>> observable = apiService.httpInterviewInvite(params);
+        subscribe(observable, mObservable);
+    }
+
 
 }

+ 4 - 4
app/src/main/java/com/webrain/dailypay/ui/activity/LoginActivity.java

@@ -79,10 +79,10 @@ public class LoginActivity extends BaseActivity<LoginPresenter> implements Login
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
-//        if (AppCacheManager.getInstance().isLogin()) {
-//            finish();
-//            startActivity(new Intent(this, MainActivity.class));
-//        }
+        if (AppCacheManager.getInstance().isLogin()) {
+            finish();
+            startActivity(new Intent(this, MainActivity.class));
+        }
     }
 
     @OnClick({R.id.btn_login, R.id.tv_code})

+ 20 - 3
app/src/main/java/com/webrain/dailypay/ui/activity/identity/IdentityResultActivity.java

@@ -39,8 +39,7 @@ public class IdentityResultActivity extends BaseActivity<IdentityResultPresenter
     protected void onCreate(@Nullable Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setBackColor(R.color.white);
-
-
+        mvpPresenter.init();
     }
 
     @Override
@@ -52,6 +51,7 @@ public class IdentityResultActivity extends BaseActivity<IdentityResultPresenter
     public void onClick(View view) {
         switch (view.getId()) {
             case R.id.btn_replay:
+                mvpPresenter.goAuthentication();
                 break;
         }
     }
@@ -84,7 +84,24 @@ public class IdentityResultActivity extends BaseActivity<IdentityResultPresenter
                 tvResult.setText(R.string.identity_result_failed);
             }
         } else if (type == AppConstant.APPROVE_COMPANY) {
-
+            if (statue == AppConstant.APPROVE_WAIT) {
+                tvTips.setText("感谢您的耐心填写,认证信息已经成功提交,\n" +
+                        "后台人员会在2至3个工作日内审核完毕。\n" +
+                        "\n" +
+                        "您的企业资料仅用于实名认证,不会用于其他渠道。");
+                btnReplay.setVisibility(View.VISIBLE);
+                tvResult.setText(R.string.identity_result_going);
+            } else if (statue == AppConstant.APPROVE_FAIL) {
+                tvTips.setText("您的实名认证未通过,可能存在以下原因:\n" +
+                        "\n" +
+                        "·营业执照信息与照片上的信息不符\n" +
+                        "·证件照片模糊不清\n" +
+                        "·证件照片并未完整将证件拍摄出来\n" +
+                        "·营业执照注册号有误\n" +
+                        "·其他原因");
+                btnReplay.setVisibility(View.VISIBLE);
+                tvResult.setText(R.string.identity_result_failed);
+            }
         }
     }
 }

+ 29 - 22
app/src/main/java/com/webrain/dailypay/ui/activity/resume/InvitedInterviewActivity.java

@@ -53,7 +53,7 @@ public class InvitedInterviewActivity extends BaseActivity<InvitedInterviewPrese
     @BindView(R.id.sal_time)
     ShrinkAnimationLayout salTime;
 
-    ReleasePositionHolder mReleasePositionHolder;
+    //    ReleasePositionHolder mReleasePositionHolder;
     DatePickerHolder mInterviewDateHolder;
     WorkAddressHolder mWorkAddressHolder;
     TimeHolder mTimeHolder;
@@ -71,23 +71,24 @@ public class InvitedInterviewActivity extends BaseActivity<InvitedInterviewPrese
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
-        salPosition.initExpand(false);
+//        salPosition.initExpand(false);
         salDate.initExpand(false);
         salAddress.initExpand(false);
         salTime.initExpand(false);
+        mvpPresenter.init();
     }
 
-    @OnClick({R.id.tv_position, R.id.tv_date, R.id.tv_address, R.id.tv_time})
+    @OnClick({R.id.tv_date, R.id.tv_address, R.id.tv_time, R.id.tv_send})
     public void onClick(View view) {
         switch (view.getId()) {
-            case R.id.tv_position:
-                if (mReleasePositionHolder == null) {
-                    mReleasePositionHolder = new ReleasePositionHolder(mContext, onReleasePositionListener);
-                    mReleasePositionHolder.setScrollView(sv);
-                    salPosition.addView(mReleasePositionHolder.getView());
-                }
-                salPosition.toggleExpand();
-                break;
+//            case R.id.tv_position:
+//                if (mReleasePositionHolder == null) {
+//                    mReleasePositionHolder = new ReleasePositionHolder(mContext, onReleasePositionListener);
+//                    mReleasePositionHolder.setScrollView(sv);
+//                    salPosition.addView(mReleasePositionHolder.getView());
+//                }
+//                salPosition.toggleExpand();
+//                break;
             case R.id.tv_date:
                 if (mInterviewDateHolder == null) {
                     mInterviewDateHolder = new DatePickerHolder(mContext, onInterviewDateSelectListener);
@@ -112,19 +113,22 @@ public class InvitedInterviewActivity extends BaseActivity<InvitedInterviewPrese
                 }
                 salTime.toggleExpand();
                 break;
+            case R.id.tv_send:
+                mvpPresenter.httpInvitedInterview(tvDate.getText().toString(), tvTime.getText().toString(), tvAddress.getText().toString(), etContact.getText().toString(), etContactPhone.getText().toString());
+                break;
         }
 
     }
 
-    /**
-     * 岗位选择
-     */
-    ReleasePositionHolder.OnReleasePositionListener onReleasePositionListener = new ReleasePositionHolder.OnReleasePositionListener() {
-        @Override
-        public void onSelect(String position) {
-            tvPosition.setText(position);
-        }
-    };
+//    /**
+//     * 岗位选择
+//     */
+//    ReleasePositionHolder.OnReleasePositionListener onReleasePositionListener = new ReleasePositionHolder.OnReleasePositionListener() {
+//        @Override
+//        public void onSelect(String position) {
+//            tvPosition.setText(position);
+//        }
+//    };
     /**
      * 面试日期
      */
@@ -162,10 +166,13 @@ public class InvitedInterviewActivity extends BaseActivity<InvitedInterviewPrese
      */
     @Override
     public void onResume(ResumeBean bean) {
-        if (bean != null)
+        if (bean != null) {
             tvName.setText(bean.getRealName() + " " + ("1".equals(bean.getGender()) ? "先生:" : "2".equals(bean.getGender()) ? "女士:" : ":"));
-        else
+            tvPosition.setText(!TextUtils.isEmpty(bean.getPositionName()) ? bean.getPositionName() : "");
+        } else {
+            tvPosition.setText("");
             tvName.setText("");
+        }
     }
 
     /**

+ 76 - 3
app/src/main/java/com/webrain/dailypay/ui/fragment/MeFragment.java

@@ -4,6 +4,7 @@ import android.content.Intent;
 import android.os.Bundle;
 import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
+import android.text.TextUtils;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
@@ -11,12 +12,22 @@ import android.widget.ImageView;
 import android.widget.LinearLayout;
 import android.widget.TextView;
 
+import com.webrain.baselibrary.AppConstant;
+import com.webrain.baselibrary.EventConstant;
+import com.webrain.baselibrary.imageloader.ImageLoaderUtil;
+import com.webrain.dailypay.AppCacheManager;
 import com.webrain.dailypay.R;
+import com.webrain.dailypay.bean.CompanyBean;
+import com.webrain.dailypay.bean.UserBean;
+import com.webrain.dailypay.event.StringEvent;
 import com.webrain.dailypay.ui.activity.identity.IdentityCompanyActivity;
 import com.webrain.dailypay.ui.base.BaseFragment;
 import com.webrain.dailypay.ui.mvp.contacts.MeFragmentContacts;
 import com.webrain.dailypay.ui.mvp.presenter.MeFragmentPresenter;
 
+import org.greenrobot.eventbus.EventBus;
+import org.greenrobot.eventbus.Subscribe;
+
 import butterknife.BindView;
 import butterknife.ButterKnife;
 import butterknife.OnClick;
@@ -56,6 +67,8 @@ public class MeFragment extends BaseFragment<MeFragmentPresenter> implements MeF
     @Override
     public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
         View view = super.onCreateView(inflater, container, savedInstanceState);
+        EventBus.getDefault().register(this);
+        mvpPresenter.init();
         return view;
     }
 
@@ -74,18 +87,78 @@ public class MeFragment extends BaseFragment<MeFragmentPresenter> implements MeF
         return true;
     }
 
-
     @Override
     public void onDestroyView() {
         super.onDestroyView();
+        EventBus.getDefault().unregister(this);
     }
 
-    @OnClick(R.id.ll_company)
+    @OnClick({R.id.ll_company, R.id.tv_desc})
     public void onClick(View view) {
         switch (view.getId()) {
             case R.id.ll_company:
-                startActivity(new Intent(mContext, IdentityCompanyActivity.class));
+                mvpPresenter.goCompanyAuthentication();
                 break;
+            case R.id.tv_desc:
+                mvpPresenter.goUserAuthentication();
+                break;
+        }
+    }
+
+    @Subscribe
+    public void onEvent(StringEvent event) {
+        if (event.getData().equals(EventConstant.EVENT_USER_AUTHENTICATION_STATUS_CHANGE)) {
+            mvpPresenter.getUserBean();
+        } else if (event.getData().equals(EventConstant.EVENT_COMPANY_AUTHENTICATION_STATUS_CHANGE)) {
+            mvpPresenter.getCompanyBean();
+        }
+    }
+
+    /**
+     * 获得用户对象
+     *
+     * @param userBean
+     */
+    @Override
+    public void onUserBean(UserBean userBean) {
+        if (userBean != null) {
+            if (userBean.getAuthenticationStatus() == AppConstant.APPROVE_SUCCESS) {
+                tvState.setVisibility(View.VISIBLE);
+                tvName.setText(!TextUtils.isEmpty(userBean.getRealName()) ? userBean.getRealName() : "");
+                ImageLoaderUtil.getInstance().loadCircleImage(userBean.getHeadImgUrl(), R.mipmap.ic_default_header, ivHeader);
+                String desc = "";
+                if (!TextUtils.isEmpty(userBean.getPhone())) {
+                    desc = userBean.getPhone();
+                }
+                if (!TextUtils.isEmpty(userBean.getPosition())) {
+                    desc += TextUtils.isEmpty(desc) ? userBean.getPosition() : "," + userBean.getPosition();
+                }
+                tvDesc.setText(desc);
+            } else {
+                tvState.setVisibility(View.GONE);
+                tvName.setText(!TextUtils.isEmpty(userBean.getPhone()) ? userBean.getPhone() : "");
+                ImageLoaderUtil.getInstance().loadCircleImage(userBean.getHeadImgUrl(), R.mipmap.ic_default_header, ivHeader);
+                tvDesc.setText(R.string.no_real_authentication_click);
+            }
+        }
+
+    }
+
+    /**
+     * 获得企业对象
+     *
+     * @param companyBean
+     */
+    @Override
+    public void onCompanyBean(CompanyBean companyBean) {
+        if (companyBean != null) {
+            if (companyBean.getAuthenticationStatus() != AppConstant.APPROVE_SUCCESS) {
+                tvCompanyState.setText(R.string.me_no_authentication);
+            } else {
+                tvCompanyState.setText(R.string.me_yes_authentication);
+            }
+        } else {
+            tvCompanyState.setText(R.string.me_no_authentication);
         }
     }
 }

+ 2 - 0
app/src/main/java/com/webrain/dailypay/ui/mvp/contacts/IdentityResultContacts.java

@@ -10,6 +10,8 @@ public class IdentityResultContacts {
 
     public interface IIdentityResultPresenter extends IPresenter {
         void init();
+
+        void goAuthentication();
     }
 
     public interface IIdentityResultModel {

+ 7 - 0
app/src/main/java/com/webrain/dailypay/ui/mvp/contacts/InvitedInterviewContacts.java

@@ -2,6 +2,7 @@ package com.webrain.dailypay.ui.mvp.contacts;
 
 import com.webrain.dailypay.bean.CompanyBean;
 import com.webrain.dailypay.bean.ResumeBean;
+import com.webrain.dailypay.callback.MvpDataCallBack;
 import com.webrain.dailypay.ui.base.IPresenter;
 import com.webrain.dailypay.ui.base.IView;
 
@@ -14,11 +15,17 @@ public class InvitedInterviewContacts {
 
     public interface IInvitedInterviewPresenter extends IPresenter {
         void init();
+
+        void httpInvitedInterview(String interviewDate, String interviewTime, String interviewAddress, String contactPerson, String contactPhone);
+
+        boolean isValid(String interviewDate, String interviewTime, String interviewAddress, String contactPerson, String contactPhone);
     }
 
     public interface IInvitedInterviewModel {
         ResumeBean getResumeBean();
 
         CompanyBean getCompanyBean();
+
+        void httpInvitedInterview(String interviewTime, String interviewAddress, String contactPerson, String contactPhone, MvpDataCallBack<Boolean> callBack);
     }
 }

+ 24 - 0
app/src/main/java/com/webrain/dailypay/ui/mvp/contacts/MeFragmentContacts.java

@@ -1,15 +1,39 @@
 package com.webrain.dailypay.ui.mvp.contacts;
 
+import com.webrain.dailypay.bean.CompanyBean;
+import com.webrain.dailypay.bean.ResumeBean;
+import com.webrain.dailypay.bean.UserBean;
+import com.webrain.dailypay.callback.MvpDataCallBack;
 import com.webrain.dailypay.ui.base.IPresenter;
 import com.webrain.dailypay.ui.base.IView;
 
 public class MeFragmentContacts {
     public interface IMeFragmentView extends IView {
+        void onUserBean(UserBean userBean);
+
+        void onCompanyBean(CompanyBean companyBean);
     }
 
     public interface IMeFragmentPresenter extends IPresenter {
+        void getUserBean();
+
+        void getHttpUserCompanyBean(boolean isQueryUserState, boolean isQueryCompanyState);
+
+        void getCompanyBean();
+
+        void goUserAuthentication();
+
+        void goCompanyAuthentication();
+
+        void init();
     }
 
     public interface IMeFragmentModel {
+
+        void getHttpUserCompanyBean(MvpDataCallBack<Boolean> callBack, boolean isQueryUserState, boolean isQueryCompanyState);
+
+        UserBean getUserBean();
+
+        CompanyBean getCompanyBean();
     }
 }

+ 44 - 0
app/src/main/java/com/webrain/dailypay/ui/mvp/model/InvitedInterviewModel.java

@@ -1,11 +1,19 @@
 package com.webrain.dailypay.ui.mvp.model;
 
 import android.content.Context;
+import android.text.TextUtils;
 
 import com.webrain.baselibrary.IntentConstant;
 import com.webrain.dailypay.AppCacheManager;
 import com.webrain.dailypay.bean.CompanyBean;
 import com.webrain.dailypay.bean.ResumeBean;
+import com.webrain.dailypay.bean.api.ApiLoginBean;
+import com.webrain.dailypay.bean.api.ApiNormalBean;
+import com.webrain.dailypay.callback.MvpDataCallBack;
+import com.webrain.dailypay.http.ApiObserver;
+import com.webrain.dailypay.http.RetrofitHttpParams;
+import com.webrain.dailypay.http.subscribe.LoginSubscribe;
+import com.webrain.dailypay.http.subscribe.PositionSubscribe;
 import com.webrain.dailypay.ui.activity.resume.InvitedInterviewActivity;
 import com.webrain.dailypay.ui.base.BaseModel;
 import com.webrain.dailypay.ui.mvp.contacts.InvitedInterviewContacts;
@@ -43,4 +51,40 @@ public class InvitedInterviewModel extends BaseModel implements InvitedInterview
         }
         return companyBean;
     }
+
+    /**
+     * 服务端请求面试邀请
+     *
+     * @param interviewTime
+     * @param interviewAddress
+     * @param contactPerson
+     * @param contactPhone
+     * @param callBack
+     */
+    @Override
+    public void httpInvitedInterview(String interviewTime, String interviewAddress, String contactPerson, String contactPhone, final MvpDataCallBack<Boolean> callBack) {
+        RetrofitHttpParams params = new RetrofitHttpParams(mContext);
+        params.put("user_id1", resumeBean.getHpUser().getId());
+        params.put("interviewTime", interviewTime);
+        params.put("interviewAddres", interviewAddress);
+        params.put("contactPerson", contactPerson);
+        params.put("contactPhone", contactPhone);
+        params.put("positionId", resumeBean.getPositionId());
+        params.put("positionName", resumeBean.getPositionName());
+        params.put("positionCategory", resumeBean.getPositionCategory());
+        params.put("companyName", companyBean.getEnterpriseName());
+        new PositionSubscribe(mContext).requestInterviewInvite(params.getRequestParams(), new ApiObserver<ApiNormalBean>(mContext, true, false) {
+            @Override
+            public void onSuccess(ApiNormalBean data) {
+                if (data != null) {
+                    callBack.onData(true);
+                }
+            }
+
+            @Override
+            public void onFinish() {
+            }
+
+        });
+    }
 }

+ 57 - 0
app/src/main/java/com/webrain/dailypay/ui/mvp/model/MeFragmentModel.java

@@ -2,6 +2,15 @@ package com.webrain.dailypay.ui.mvp.model;
 
 import android.content.Context;
 
+import com.webrain.dailypay.AppCacheManager;
+import com.webrain.dailypay.bean.CompanyBean;
+import com.webrain.dailypay.bean.ResumeBean;
+import com.webrain.dailypay.bean.UserBean;
+import com.webrain.dailypay.bean.api.ApiLoginBean;
+import com.webrain.dailypay.callback.MvpDataCallBack;
+import com.webrain.dailypay.http.ApiObserver;
+import com.webrain.dailypay.http.RetrofitHttpParams;
+import com.webrain.dailypay.http.subscribe.LoginSubscribe;
 import com.webrain.dailypay.ui.base.BaseModel;
 import com.webrain.dailypay.ui.mvp.contacts.MeFragmentContacts;
 
@@ -9,4 +18,52 @@ public class MeFragmentModel extends BaseModel implements MeFragmentContacts.IMe
     public MeFragmentModel(Context mContext) {
         super(mContext);
     }
+
+
+    /**
+     * 获取服务端用户数据
+     *
+     * @param callBack
+     */
+    @Override
+    public void getHttpUserCompanyBean(final MvpDataCallBack<Boolean> callBack, boolean isQueryUserState, boolean isQueryCompanyState) {
+        RetrofitHttpParams params = new RetrofitHttpParams(mContext);
+        params.put("userId", AppCacheManager.getInstance().getUserId());
+        params.put("userToken", AppCacheManager.getInstance().getUserToken());
+        new LoginSubscribe(mContext).requestUserInfo(params.getRequestParams(), new ApiObserver<ApiLoginBean>(mContext, isQueryUserState || isQueryCompanyState, false) {
+            @Override
+            public void onSuccess(ApiLoginBean data) {
+                if (data != null) {
+                    if (data.getUserInfo() != null) {
+                        AppCacheManager.getInstance().setLoginModel(data.getUserInfo());
+                    }
+                    if (data.getCompanyAuthentication() != null) {
+                        AppCacheManager.getInstance().setCompanyBean(data.getCompanyAuthentication());
+                    }
+                    callBack.onData(true);
+                }
+            }
+
+            @Override
+            public void onFinish() {
+            }
+        });
+    }
+
+    /**
+     * 获取用户数据
+     */
+    @Override
+    public UserBean getUserBean() {
+        return AppCacheManager.getInstance().getLoginModel();
+    }
+
+    /**
+     * 获取公司数据
+     */
+
+    @Override
+    public CompanyBean getCompanyBean() {
+        return AppCacheManager.getInstance().getCompanyModel();
+    }
 }

+ 1 - 2
app/src/main/java/com/webrain/dailypay/ui/mvp/model/ResumeDetailModel.java

@@ -39,8 +39,7 @@ public class ResumeDetailModel extends BaseModel implements ResumeDetailContacts
                 @Override
                 public void onSuccess(ApiResumeDetailBean data) {
                     if (data != null && data.getHpResume() != null) {
-                        resumeListBean = data.getHpResume();
-                        callBack.onData(resumeListBean);
+                        callBack.onData(data.getHpResume());
                     }
                 }
 

+ 19 - 2
app/src/main/java/com/webrain/dailypay/ui/mvp/presenter/IdentityResultPresenter.java

@@ -1,5 +1,10 @@
 package com.webrain.dailypay.ui.mvp.presenter;
 
+import android.content.Intent;
+
+import com.webrain.baselibrary.AppConstant;
+import com.webrain.dailypay.ui.activity.identity.IdentityCompanyActivity;
+import com.webrain.dailypay.ui.activity.identity.IdentityRecruitersActivity;
 import com.webrain.dailypay.ui.activity.identity.IdentityResultActivity;
 import com.webrain.dailypay.ui.base.BasePresenter;
 import com.webrain.dailypay.ui.mvp.contacts.IdentityResultContacts;
@@ -15,7 +20,19 @@ public class IdentityResultPresenter extends BasePresenter<IdentityResultActivit
 
     @Override
     public void init() {
-        if(isViewAttach())
-            mvpReference.get().onStatue(mIdentityResultModel.getStatue(),mIdentityResultModel.getType());
+        if (isViewAttach())
+            mvpReference.get().onStatue(mIdentityResultModel.getStatue(), mIdentityResultModel.getType());
+    }
+
+    /**
+     * 去认证
+     */
+    @Override
+    public void goAuthentication() {
+        if (mIdentityResultModel.getType() == AppConstant.APPROVE_COMPANY) {
+            mvpReference.get().startActivity(new Intent(mvpReference.get(), IdentityCompanyActivity.class));
+        } else if (mIdentityResultModel.getType() == AppConstant.APPROVE_PERSONAL) {
+            mvpReference.get().startActivity(new Intent(mvpReference.get(), IdentityRecruitersActivity.class));
+        }
     }
 }

+ 78 - 0
app/src/main/java/com/webrain/dailypay/ui/mvp/presenter/InvitedInterviewPresenter.java

@@ -1,5 +1,10 @@
 package com.webrain.dailypay.ui.mvp.presenter;
 
+import android.text.TextUtils;
+
+import com.webrain.baselibrary.utils.ToastUtils;
+import com.webrain.dailypay.R;
+import com.webrain.dailypay.callback.MvpDataCallBack;
 import com.webrain.dailypay.ui.activity.resume.InvitedInterviewActivity;
 import com.webrain.dailypay.ui.base.BasePresenter;
 import com.webrain.dailypay.ui.mvp.contacts.InvitedInterviewContacts;
@@ -20,4 +25,77 @@ public class InvitedInterviewPresenter extends BasePresenter<InvitedInterviewAct
             mvpReference.get().onResume(mInvitedInterviewModel.getResumeBean());
         }
     }
+
+    /**
+     * 面试邀请
+     *
+     * @param interviewTime
+     * @param interviewAddress
+     * @param contactPerson
+     * @param contactPhone
+     */
+    @Override
+    public void httpInvitedInterview(String interviewDate, String interviewTime, String interviewAddress, String contactPerson, String contactPhone) {
+        if (isViewAttach() && isValid(interviewDate, interviewTime, interviewAddress, contactPerson, contactPhone)) {
+            String time = interviewTime.replace("点 ", ":").replace("分", "");
+            if (time.startsWith("下午")) {
+                String hour = (Integer.parseInt(time.substring(3).split(":")[0]) + 12) + "";
+                String min = time.split(":")[1];
+                time = interviewDate.trim() + " " + hour.trim() + ":" + min.trim() + ":00";
+            } else {
+                String hour = Integer.parseInt(time.substring(3).split(":")[0]) + "";
+                String min = time.split(":")[1];
+                time = interviewDate.trim() + " " + hour.trim() + ":" + min.trim() + ":00";
+            }
+            mInvitedInterviewModel.httpInvitedInterview(time, interviewAddress, contactPerson, contactPhone, new MvpDataCallBack<Boolean>() {
+                @Override
+                public void onData(Boolean data) {
+                    ToastUtils.show(mvpReference.get(), R.string.toast_invited_success);
+                    mvpReference.get().finish();
+                }
+            });
+        }
+    }
+
+    /**
+     * 检查数据合法性
+     *
+     * @param interviewTime
+     * @param interviewAddress
+     * @param contactPerson
+     * @param contactPhone
+     * @return
+     */
+    @Override
+    public boolean isValid(String interviewDate, String interviewTime, String interviewAddress, String contactPerson, String contactPhone) {
+        if (mInvitedInterviewModel.getCompanyBean() == null) {
+            ToastUtils.show(mvpReference.get(), R.string.toast_company_false);
+            return false;
+        }
+        if (mInvitedInterviewModel.getResumeBean() == null) {
+            ToastUtils.show(mvpReference.get(), R.string.toast_resume_false);
+            return false;
+        }
+        if (TextUtils.isEmpty(interviewDate)) {
+            ToastUtils.show(mvpReference.get(), R.string.toast_choose_interview_date);
+            return false;
+        }
+        if (TextUtils.isEmpty(interviewTime)) {
+            ToastUtils.show(mvpReference.get(), R.string.toast_choose_interview_time);
+            return false;
+        }
+        if (TextUtils.isEmpty(interviewAddress)) {
+            ToastUtils.show(mvpReference.get(), R.string.toast_choose_interview_address);
+            return false;
+        }
+        if (TextUtils.isEmpty(contactPerson)) {
+            ToastUtils.show(mvpReference.get(), R.string.toast_input_contact_person);
+            return false;
+        }
+        if (TextUtils.isEmpty(contactPhone)) {
+            ToastUtils.show(mvpReference.get(), R.string.toast_input_contact_person_phone);
+            return false;
+        }
+        return true;
+    }
 }

+ 125 - 0
app/src/main/java/com/webrain/dailypay/ui/mvp/presenter/MeFragmentPresenter.java

@@ -1,5 +1,18 @@
 package com.webrain.dailypay.ui.mvp.presenter;
 
+import android.content.Intent;
+
+import com.webrain.baselibrary.AppConstant;
+import com.webrain.baselibrary.IntentConstant;
+import com.webrain.baselibrary.utils.ToastUtils;
+import com.webrain.dailypay.AppCacheManager;
+import com.webrain.dailypay.R;
+import com.webrain.dailypay.bean.CompanyBean;
+import com.webrain.dailypay.bean.UserBean;
+import com.webrain.dailypay.callback.MvpDataCallBack;
+import com.webrain.dailypay.ui.activity.identity.IdentityCompanyActivity;
+import com.webrain.dailypay.ui.activity.identity.IdentityRecruitersActivity;
+import com.webrain.dailypay.ui.activity.identity.IdentityResultActivity;
 import com.webrain.dailypay.ui.base.BasePresenter;
 import com.webrain.dailypay.ui.fragment.MeFragment;
 import com.webrain.dailypay.ui.mvp.contacts.MeFragmentContacts;
@@ -12,4 +25,116 @@ public class MeFragmentPresenter extends BasePresenter<MeFragment> implements Me
         super(view);
         this.mMeFragmentModel = new MeFragmentModel(mvpReference.get().getContext());
     }
+
+    /**
+     * 获取用户数据
+     */
+    @Override
+    public void getUserBean() {
+        if (isViewAttach()) {
+            UserBean userBean = mMeFragmentModel.getUserBean();
+            if (userBean != null) {
+                mvpReference.get().onUserBean(userBean);
+            }
+        }
+    }
+
+    /**
+     * 从服务器获取用户信息
+     */
+    @Override
+    public void getHttpUserCompanyBean(final boolean isQueryUserState, final boolean isQueryCompanyState) {
+        if (isViewAttach())
+            mMeFragmentModel.getHttpUserCompanyBean(new MvpDataCallBack<Boolean>() {
+                @Override
+                public void onData(Boolean data) {
+                    if (isViewAttach()) {
+                        mvpReference.get().onUserBean(AppCacheManager.getInstance().getLoginModel());
+                        mvpReference.get().onCompanyBean(AppCacheManager.getInstance().getCompanyModel());
+                        if (isQueryUserState) {
+                            if (AppCacheManager.getInstance().getLoginModel().getAuthenticationStatus() == AppConstant.APPROVE_SUCCESS) {//认证成功状态,提示认证成功
+                                ToastUtils.show(mvpReference.get().getContext(), R.string.toast_yes_authentication);
+                            } else if (AppCacheManager.getInstance().getLoginModel().getAuthenticationStatus() == AppConstant.APPROVE_NONE) {//未认证状态,去认证页
+                                mvpReference.get().startActivity(new Intent(mvpReference.get().getContext(), IdentityRecruitersActivity.class));
+                            } else {//认证失败,认证等待状态,去认证结果页
+                                Intent intent = new Intent(mvpReference.get().getContext(), IdentityResultActivity.class);
+                                intent.putExtra(IntentConstant.TYPE, AppConstant.APPROVE_PERSONAL);
+                                mvpReference.get().startActivity(intent);
+                            }
+                        }
+                        if (isQueryCompanyState) {
+                            if (AppCacheManager.getInstance().getCompanyModel() == null) {//无企业对象,去认证页
+                                mvpReference.get().startActivity(new Intent(mvpReference.get().getContext(), IdentityCompanyActivity.class));
+                            } else if (AppCacheManager.getInstance().getCompanyModel().getAuthenticationStatus() == AppConstant.APPROVE_SUCCESS) {//认证成功状态,提示认证成功
+                                ToastUtils.show(mvpReference.get().getContext(), R.string.toast_yes_authentication);
+                            } else if (AppCacheManager.getInstance().getCompanyModel().getAuthenticationStatus() == AppConstant.APPROVE_NONE) {//未认证状态,去认证页
+                                mvpReference.get().startActivity(new Intent(mvpReference.get().getContext(), IdentityCompanyActivity.class));
+                            } else {//认证失败,认证等待状态,去认证结果页
+                                Intent intent = new Intent(mvpReference.get().getContext(), IdentityResultActivity.class);
+                                intent.putExtra(IntentConstant.TYPE, AppConstant.APPROVE_COMPANY);
+                                mvpReference.get().startActivity(intent);
+                            }
+                        }
+                    }
+                }
+            }, isQueryUserState, isQueryCompanyState);
+    }
+
+    /**
+     * 获取公司数据
+     */
+    @Override
+    public void getCompanyBean() {
+        if (isViewAttach()) {
+            CompanyBean companyBean = mMeFragmentModel.getCompanyBean();
+            if (companyBean != null) {
+                mvpReference.get().onCompanyBean(companyBean);
+            }
+        }
+    }
+
+    /**
+     * 去用户认证
+     */
+    @Override
+    public void goUserAuthentication() {
+        if (isViewAttach())
+            if (AppCacheManager.getInstance().isLogin()) {
+                if (AppCacheManager.getInstance().getLoginModel().getAuthenticationStatus() == AppConstant.APPROVE_SUCCESS)
+                    ToastUtils.show(mvpReference.get().getContext(), R.string.toast_yes_authentication);
+                else if (AppCacheManager.getInstance().getLoginModel().getAuthenticationStatus() == AppConstant.APPROVE_NONE) //未认证状态,去认证页
+                    mvpReference.get().startActivity(new Intent(mvpReference.get().getContext(), IdentityRecruitersActivity.class));
+                else //认证失败,认证等待状态,去请求刷新状态
+                    getHttpUserCompanyBean(true, false);
+            }
+    }
+
+    /**
+     * 去企业认证
+     */
+    @Override
+    public void goCompanyAuthentication() {
+        if (isViewAttach())
+            if (AppCacheManager.getInstance().getCompanyModel() == null)//无企业信息, 去认证
+                mvpReference.get().startActivity(new Intent(mvpReference.get().getContext(), IdentityCompanyActivity.class));
+            else if (AppCacheManager.getInstance().getLoginModel().getAuthenticationStatus() == AppConstant.APPROVE_SUCCESS)
+                ToastUtils.show(mvpReference.get().getContext(), R.string.toast_yes_authentication);
+            else if (AppCacheManager.getInstance().getCompanyModel().getAuthenticationStatus() == AppConstant.APPROVE_NONE) //未认证状态,去认证页
+                mvpReference.get().startActivity(new Intent(mvpReference.get().getContext(), IdentityCompanyActivity.class));
+            else //认证失败,认证等待状态,去请求刷新状态
+                getHttpUserCompanyBean(false, true);
+
+    }
+
+    /**
+     * 初始化
+     */
+    @Override
+    public void init() {
+        if (isViewAttach()) {
+            getUserBean();
+            getCompanyBean();
+            getHttpUserCompanyBean(false, false);
+        }
+    }
 }

+ 14 - 5
app/src/main/java/com/webrain/dailypay/ui/mvp/presenter/ResumeDetailPresenter.java

@@ -1,10 +1,12 @@
 package com.webrain.dailypay.ui.mvp.presenter;
 
+import android.Manifest;
 import android.content.Intent;
 import android.net.Uri;
 import android.text.TextUtils;
 
 import com.webrain.baselibrary.IntentConstant;
+import com.webrain.baselibrary.utils.PermissionsUtils;
 import com.webrain.dailypay.bean.ResumeBean;
 import com.webrain.dailypay.callback.MvpDataCallBack;
 import com.webrain.dailypay.ui.activity.resume.InvitedInterviewActivity;
@@ -13,6 +15,8 @@ import com.webrain.dailypay.ui.base.BasePresenter;
 import com.webrain.dailypay.ui.mvp.contacts.ResumeDetailContacts;
 import com.webrain.dailypay.ui.mvp.model.ResumeDetailModel;
 
+import io.reactivex.functions.Consumer;
+
 public class ResumeDetailPresenter extends BasePresenter<ResumeDetailActivity> implements ResumeDetailContacts.IResumeDetailPresenter {
     private ResumeDetailModel mResumeDetailModel;
 
@@ -57,12 +61,17 @@ public class ResumeDetailPresenter extends BasePresenter<ResumeDetailActivity> i
     @Override
     public void call() {
         if (isViewAttach()) {
-            ResumeBean bean = mResumeDetailModel.getResume();
+            final ResumeBean bean = mResumeDetailModel.getResume();
             if (bean != null && !TextUtils.isEmpty(bean.getPhone())) {
-                Intent intent = new Intent(Intent.ACTION_CALL);
-                Uri data = Uri.parse("tel:" + bean.getPhone());
-                intent.setData(data);
-                mvpReference.get().startActivity(intent);
+                PermissionsUtils.requestPermissions(mvpReference.get(), new Consumer<Boolean>() {
+                    @Override
+                    public void accept(Boolean aBoolean) throws Exception {
+                        Intent intent = new Intent(Intent.ACTION_CALL);
+                        Uri data = Uri.parse("tel:" + bean.getPhone());
+                        intent.setData(data);
+                        mvpReference.get().startActivity(intent);
+                    }
+                }, Manifest.permission.CALL_PHONE);
             }
         }
     }

+ 3 - 1
app/src/main/res/layout/activity_invited_interview.xml

@@ -49,7 +49,6 @@
                         android:layout_marginRight="9dp"
                         android:layout_weight="1"
                         android:singleLine="true"
-                        android:text="三能器具(无锡)有限公司"
                         android:textColor="@color/text_black"
                         android:textSize="@dimen/px36_12sp" />
 
@@ -121,6 +120,7 @@
                     android:id="@+id/sal_position"
                     android:layout_width="match_parent"
                     android:layout_height="142dp"
+                    android:visibility="gone"
                     android:background="@color/main_purple" />
 
                 <LinearLayout
@@ -289,6 +289,8 @@
                         android:gravity="right|center_vertical"
                         android:hint="@string/hint_click_input_interview_contact_phone"
                         android:singleLine="true"
+                        android:inputType="number"
+                        android:maxLength="11"
                         android:textColor="@color/text_purple"
                         android:textColorHint="@color/text_hint_gray"
                         android:textSize="@dimen/px33_11sp" />

+ 3 - 0
app/src/main/res/layout/fragment_me.xml

@@ -137,6 +137,7 @@
         android:layout_marginLeft="15dp"
         android:layout_marginRight="15dp"
         android:layout_marginBottom="14dp"
+        android:visibility="gone"
         app:cardCornerRadius="17dp"
         app:cardElevation="5dp">
 
@@ -177,6 +178,7 @@
         android:layout_marginLeft="15dp"
         android:layout_marginRight="15dp"
         android:layout_marginBottom="14dp"
+        android:visibility="gone"
         app:cardCornerRadius="17dp"
         app:cardElevation="5dp">
 
@@ -217,6 +219,7 @@
         android:layout_marginLeft="15dp"
         android:layout_marginRight="15dp"
         android:layout_marginBottom="14dp"
+        android:visibility="gone"
         app:cardCornerRadius="17dp"
         app:cardElevation="5dp">
 

+ 1 - 0
app/src/main/res/layout/item_listview_resume_header.xml

@@ -13,6 +13,7 @@
         android:layout_width="182dp"
         android:layout_height="28dp"
         android:layout_gravity="center_horizontal"
+        android:visibility="gone"
         android:layout_marginTop="7.5dp"
         android:layout_marginBottom="9.5dp"
         app:cardCornerRadius="14dp"

+ 9 - 2
app/src/main/res/values/strings.xml

@@ -76,6 +76,7 @@
     <string name="op_error">操作出错</string>
     <string name="gender_title">性别:</string>
     <string name="no_more_data">没有更多信息了</string>
+    <string name="no_real_authentication_click">您还未进行实名认证,点击认证</string>
 
 
     <string name="day">天</string>
@@ -114,7 +115,7 @@
     <string name="identity_click_change_id_card_reverse_photo">点击修改身份证件背面照片</string>
     <string name="identity_click_change_business_license">点击上传营业执照正面</string>
     <string name="identity_click_change_business_license_other">点击上传其他认证资质</string>
-    <string name="identity_result_going">审核中</string>
+    <string name="identity_result_going">审核中...</string>
     <string name="identity_result_failed">审核未通过</string>
     <string name="identity_replay">重新认证</string>
 
@@ -240,7 +241,13 @@
     <string name="toast_choose_work_experience">请选择工龄要求</string>
     <string name="toast_choose_end_date">请选择截止日期</string>
     <string name="toast_choose_get_date">请选择到期日期</string>
-
+    <string name="toast_yes_authentication">已认证</string>
+    <string name="toast_company_false">企业信息获取失败,请退出稍后重试</string>
+    <string name="toast_resume_false">简历信息获取失败,请退出稍后重试</string>
+    <string name="toast_choose_interview_date">请选择面试日期</string>
+    <string name="toast_choose_interview_time">请选择面试时间</string>
+    <string name="toast_choose_interview_address">请选择面试地点</string>
+    <string name="toast_invited_success">邀请成功</string>
 
     <string name="tab_resume">简历</string>
     <string name="tab_position">岗位</string>