Commit 576b34ee by 罗翻

增加人脸识别

parent 905c2635
......@@ -13,6 +13,7 @@ import android.graphics.RectF;
import android.media.ExifInterface;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.Environment;
import android.telephony.TelephonyManager;
import android.util.Base64;
import android.view.Gravity;
......@@ -88,22 +89,24 @@ public class ConUtil {
if (data == null)
return null;
File mediaStorageDir = mContext.getExternalFilesDir(Constant.cacheImage);
if (!mediaStorageDir.exists()) {
if (!mediaStorageDir.mkdirs()) {
return null;
}
}
// File mediaStorageDir = mContext.getExternalFilesDir(Constant.cacheImage);
String jpgFileName = System.currentTimeMillis() + "" + new Random().nextInt(1000000) + "_" + key + ".jpg";
File file = new File(Environment.getExternalStorageDirectory() + "/dayu/", jpgFileName);
// if (!mediaStorageDir.exists()) {
// if (!mediaStorageDir.mkdirs()) {
// return null;
// }
// }
BufferedOutputStream bos = null;
FileOutputStream fos = null;
try {
String jpgFileName = System.currentTimeMillis() + "" + new Random().nextInt(1000000) + "_" + key + ".jpg";
fos = new FileOutputStream(mediaStorageDir + "/" + jpgFileName);
fos = new FileOutputStream(file.getAbsolutePath());
bos = new BufferedOutputStream(fos);
bos.write(data);
return mediaStorageDir;
return file;
} catch (Exception e) {
e.printStackTrace();
} finally {
......
......@@ -31,11 +31,11 @@ import com.dayu.common.Constants;
import com.dayu.event.DownloadBean;
import com.dayu.location.base.LocationUtils;
import com.dayu.message.ui.fragment.HomeMessageFragment;
import com.dayu.order.ui.activity.ReceivingActivity;
import com.dayu.order.ui.fragment.HomeOrderFragment;
import com.dayu.provider.event.RefreshReceivingNum;
import com.dayu.provider.event.SwtichFragment;
import com.dayu.provider.router.RouterPath;
import com.dayu.usercenter.ui.activity.IdentityCertificationActivity;
import com.dayu.usercenter.ui.fragment.HomePersonFragment;
import com.dayu.utils.badgeNumberManger.BadgeNumberManager;
import com.dayu.widgets.CustomDialog;
......@@ -259,7 +259,7 @@ public class MainActivity extends BaseActivity<MainPresenter, ActivityMainBindin
@Override
public void dumpReceActivity() {
Intent intent = new Intent(mActivity, IdentityCertificationActivity.class);
Intent intent = new Intent(mActivity, ReceivingActivity.class);
startActivity(intent);
overridePendingTransition(R.anim.slide_bottom_in, 0);
}
......
......@@ -78,6 +78,15 @@ public class ServerException extends Exception {
case "USER0051":
message = BaseApplication.getContext().getString(R.string.not_audite_aviliable);
break;
case "DETECT_ERROR00003":
message = BaseApplication.getContext().getString(R.string.error_detect_face);
break;
case "DETECT_ERROR00004":
message = BaseApplication.getContext().getString(R.string.error_detect_server);
break;
case "DETECT_ERROR00005":
message = BaseApplication.getContext().getString(R.string.error_cetect_identity);
break;
/** 账户相关*/
case "SETTLEMENT0015":
message = Constants.NOT_SHOW;
......
......@@ -30,6 +30,15 @@ public class UserInfo {
private String token;
private String accountName;
private int status;
private int detectStatus;
public int getDetectStatus() {
return detectStatus;
}
public void setDetectStatus(int detectStatus) {
this.detectStatus = detectStatus;
}
public String getHxAccount() {
return hxAccount;
......
......@@ -64,7 +64,7 @@ public class UserManager {
if (userInfo != null) {
//有数据
if (!TextUtils.isEmpty(userInfo.getAccountId()) && !TextUtils.isEmpty(userInfo.getSiteId())
&& !TextUtils.isEmpty(userInfo.getAccountName()) && userInfo.getStatus() == 1) {
&& !TextUtils.isEmpty(userInfo.getAccountName()) && userInfo.getDetectStatus() == 1) {
return true;
} else {
return false;
......
......@@ -449,6 +449,10 @@
<string name="not_audite_aviliable">该工程师不处于审核拒绝状态</string>
<string name="error_verison_code">解析版本号失败</string>
<string name="error_detect_face">请采集您本人的面孔</string>
<string name="error_detect_server">系统异常,请稍后重试</string>
<string name="error_cetect_identity">请上传身份证正面 </string>
<string name="global0001">未知错误GLOBAL0001</string>
<string name="global0002">未知错误GLOBAL0002</string>
<string name="global0003">未知错误GLOBAL0003</string>
......
......@@ -8,6 +8,7 @@ package com.dayu.usercenter.common;
public class UserConstant {
public static final String FRONT_URL = "front_url";
public static final String BACK_URL = "back_url";
public static final String DETECT_STATE = "detect_state";
/**
* 登录.
......@@ -70,6 +71,6 @@ public class UserConstant {
public final static String IDENTITY_OCR = "/api-detect/" + "detect/cardOcr";
public final static String FACE_OCR = "/api-detect/" + "detect/megLiveVerify";
public final static String FACE_OCR = "/api-user/" + "/accountExt/engineerMegLiveVerify";
}
......@@ -27,7 +27,7 @@ public class CertificaitonPresenter extends CertificaitonContract.Presenter {
@Override
public void commitePhoto() {
// mView.startActivity(FaceCertificationActivity.class);
mView.showDialog();
BaseApiFactory.uploadPhoto(packPhoto(mView.getFile()), "nowatermark").subscribe(baseObserver(list -> {
Bundle bundle = new Bundle();
bundle.putString(UserConstant.FRONT_URL, list.get(0));
......
......@@ -3,10 +3,11 @@ package com.dayu.usercenter.presenter.facecertification;
import android.os.Bundle;
import com.dayu.base.api.BaseApiFactory;
import com.dayu.event.UserInfo;
import com.dayu.usercenter.api.UserApiFactory;
import com.dayu.usercenter.common.UserConstant;
import com.dayu.usercenter.ui.activity.CertificationResultActivity;
import com.dayu.utils.ToastUtils;
import com.dayu.utils.UserManager;
import org.json.JSONObject;
......@@ -26,9 +27,11 @@ public class FaceCertificaitonPresenter extends FaceCertificaitonContract.Presen
private String mDelta;
private String mFrontCardUrl;
private String mBackCardUrl;
private int accountId;
@Override
public void onAttached() {
accountId = Integer.parseInt(UserManager.getInstance().getUser().getAccountId());
Bundle bundle = mView.getBundle();
mFrontCardUrl = bundle.getString(UserConstant.FRONT_URL);
mBackCardUrl = bundle.getString(UserConstant.BACK_URL);
......@@ -37,7 +40,7 @@ public class FaceCertificaitonPresenter extends FaceCertificaitonContract.Presen
@Override
public void commitePhoto(List<File> list, String delta) {
mDelta = delta;
BaseApiFactory.uploadPhoto(packPhoto(list),"nowatermark").subscribe(baseObserver(this::verifyIdentity));
BaseApiFactory.uploadPhoto(packPhoto(list), "nowatermark").subscribe(baseObserver(this::verifyIdentity));
}
private MultipartBody.Part[] packPhoto(List<File> files) {
......@@ -55,8 +58,9 @@ public class FaceCertificaitonPresenter extends FaceCertificaitonContract.Presen
@Override
public void verifyIdentity(List<String> list) {
HashMap<String, Object> params = new HashMap<>();
params.put("cardBackUrl", mFrontCardUrl);
params.put("cardFrontUrl", mBackCardUrl);
params.put("accountId", accountId);
params.put("cardFrontUrl", mFrontCardUrl);
params.put("cardBackUrl", mBackCardUrl);
params.put("checkDelta", 0);
params.put("comparisonType", 1);
params.put("delta", mDelta);
......@@ -68,13 +72,27 @@ public class FaceCertificaitonPresenter extends FaceCertificaitonContract.Presen
params.put("multiOrientedDetection", 1);
JSONObject jsonObject = new JSONObject(params);
RequestBody body = RequestBody.create(MediaType.parse("application/json"), jsonObject.toString());
mView.showDialog();
Bundle bundle = new Bundle();
UserApiFactory.verifyMegLive(body).subscribe(baseObserver(aBoolean -> {
if (aBoolean) {
ToastUtils.showShortToast("身份证上传成功!");
mView.startActivity(CertificationResultActivity.class);
UserInfo info = UserManager.getInstance().getUser();
info.setDetectStatus(1);
UserManager.getInstance().saveUser(info);
bundle.putString(UserConstant.DETECT_STATE, "认证成功");
mView.startActivity(CertificationResultActivity.class, bundle);
}
}, responeThrowable -> {
if ("DETECT_ERROR00003".equals(responeThrowable.subCode)) {
bundle.putString(UserConstant.DETECT_STATE, "请采集您本人的面孔");
} else if ("DETECT_ERROR00003".equals(responeThrowable.subCode)) {
bundle.putString(UserConstant.DETECT_STATE, "系统异常,请稍后重试");
} else if ("DETECT_ERROR00003".equals(responeThrowable.subCode)) {
bundle.putString(UserConstant.DETECT_STATE, "请上传身份证正面");
} else {
ToastUtils.showShortToast("您传的身份证不合格,请重新上传!");
bundle.putString(UserConstant.DETECT_STATE, "您的活检认证暂未通过");
}
mView.startActivity(CertificationResultActivity.class, bundle);
}));
}
}
......@@ -10,9 +10,8 @@ import com.dayu.provider.router.RouterPath;
import com.dayu.usercenter.R;
import com.dayu.usercenter.api.UserApiFactory;
import com.dayu.usercenter.ui.activity.AgreementActivity;
import com.dayu.usercenter.ui.activity.PersonInfoActivity;
import com.dayu.usercenter.ui.activity.IdentityCertificationActivity;
import com.dayu.utils.LogUtils;
import com.dayu.utils.ToastUtils;
import com.dayu.utils.UserManager;
import com.dayu.utils.UtilsUserAccountMatcher;
import com.hyphenate.EMCallBack;
......@@ -69,13 +68,15 @@ public class LoginPresenter extends LoginContract.Presenter {
}
mView.showDialog();
UserApiFactory.login(userName.get(), password.get()).subscribe(baseObserver(userInfo -> {
if (userInfo.getStatus() == 1) {
if (userInfo.getDetectStatus() == 1) {
loginHx(userInfo.getHxAccount(), userInfo.getHxPwd());
dumpAndSave(userInfo);
} else if (userInfo.getStatus() == 2) {
ToastUtils.showShortToast(R.string.engineer_identity_auditing);
UserManager.getInstance().saveUser(userInfo);
} else if (userInfo.getStatus() == 3) {
}
// else if (userInfo.getDetectStatus() == 2) {
// ToastUtils.showShortToast(R.string.engineer_identity_auditing);
// UserManager.getInstance().saveUser(userInfo);
// }
else if (userInfo.getDetectStatus() == 2 || userInfo.getDetectStatus() == 3) {
showLoginDialog();
UserManager.getInstance().saveUser(userInfo);
}
......@@ -107,7 +108,7 @@ public class LoginPresenter extends LoginContract.Presenter {
private void showLoginDialog() {
mView.showLoginDialog((dialog, confirm) -> {
if (confirm) {
mView.startActivity(PersonInfoActivity.class);
mView.startActivity(IdentityCertificationActivity.class);
}
});
}
......
package com.dayu.usercenter.ui.activity;
import android.content.Intent;
import android.os.Bundle;
import com.alibaba.android.arouter.launcher.ARouter;
import com.dayu.base.ui.activity.DataBindingActivity;
import com.dayu.common.Constants;
import com.dayu.provider.router.RouterPath;
import com.dayu.usercenter.R;
import com.dayu.usercenter.common.UserConstant;
import com.dayu.usercenter.databinding.ActivityCertificationResultBinding;
import com.dayu.utils.AppManager;
/**
* Created by luofan
......@@ -17,6 +25,28 @@ public class CertificationResultActivity extends DataBindingActivity<ActivityCer
@Override
public void initView() {
mBind.tvTitle.setText("实名认证");
Bundle bundle = getIntent().getBundleExtra(Constants.BUNDLE);
String state = bundle.getString(UserConstant.DETECT_STATE);
if (!"认证成功".equals(state)) {
mBind.ivIcon.setImageResource(R.drawable.icon_certification_failure);
mBind.tvResult.setText("认证失败!");
mBind.tvNotice.setText(state);
mBind.tvCommite.setText("重新认证");
mBind.tvCommite.setOnClickListener(v -> {
if (state.contains("活体检测")) {
finish();
} else {
Intent intent = new Intent(mActivity, IdentityCertificationActivity.class);
startActivity(intent);
finish();
AppManager.getInstance().finishActivity(FaceCertificationActivity.class);
}
});
} else {
mBind.tvCommite.setOnClickListener(v ->
ARouter.getInstance().build(RouterPath.PATH_MAIN).navigation());
}
}
}
......@@ -3,12 +3,14 @@ package com.dayu.usercenter.ui.activity;
import android.Manifest;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import com.dayu.base.ui.activity.BaseActivity;
import com.dayu.common.Constants;
import com.dayu.usercenter.R;
import com.dayu.usercenter.common.UserConstant;
import com.dayu.usercenter.databinding.ActivityFaceCertificationBinding;
import com.dayu.usercenter.presenter.facecertification.FaceCertificaitonContract;
import com.dayu.usercenter.presenter.facecertification.FaceCertificaitonPresenter;
......@@ -97,13 +99,13 @@ public class FaceCertificationActivity extends BaseActivity<FaceCertificaitonPre
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == PAGE_INTO_LIVENESS && resultCode == RESULT_OK) {
boolean isSuccess = false;
int resID = 0;
String delta = data.getStringExtra("delta");
int code = data.getIntExtra("resultcode", 0);
String str = data.getStringExtra("result");
try {
JSONObject result = new JSONObject(str);
int resID = result.getInt("resultcode");
checkID(resID);
resID = result.getInt("resultcode");
isSuccess = result.getString("result").equals(
getResources().getString(R.string.verify_success));
} catch (JSONException e) {
......@@ -117,30 +119,30 @@ public class FaceCertificationActivity extends BaseActivity<FaceCertificaitonPre
byte[] image_action1 = images.get("image_action1");
byte[] image_action2 = images.get("image_action2");
byte[] image_action3 = images.get("image_action3");
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 2;
list.add(ConUtil.saveJPG(mActivity, image_best, "image_best"));
list.add(ConUtil.saveJPG(mActivity, image_env, "image_env"));
list.add(ConUtil.saveJPG(mActivity, image_action1, "image_action1"));
list.add(ConUtil.saveJPG(mActivity, image_action2, "image_action2"));
list.add(ConUtil.saveJPG(mActivity, image_action3, "image_action3"));
// list.add(GlideImageLoader.compressImage(BitmapFactory.decodeByteArray(image_best, 0, image_best.length, options), "best"));
// list.add(GlideImageLoader.compressImage(BitmapFactory.decodeByteArray(image_env, 0, image_best.length, options), "env"));
// list.add(GlideImageLoader.compressImage(BitmapFactory.decodeByteArray(image_action1, 0, image_best.length, options), "action1"));
// list.add(GlideImageLoader.compressImage(BitmapFactory.decodeByteArray(image_action2, 0, image_best.length, options), "action2"));
// list.add(GlideImageLoader.compressImage(BitmapFactory.decodeByteArray(image_action3, 0, image_best.length, options), "action3"));
mPresenter.commitePhoto(list, delta);
} else {
checkID(resID);
}
}
}
private void checkID(int resID) {
if (resID == R.string.verify_success) {
} else if (resID == R.string.liveness_detection_failed_not_video) {
Bundle bundle = new Bundle();
if (resID == R.string.liveness_detection_failed_not_video) {
bundle.putString(UserConstant.DETECT_STATE, getString(resID));
} else if (resID == R.string.liveness_detection_failed_timeout) {
} else if (resID == R.string.liveness_detection_failed) {
bundle.putString(UserConstant.DETECT_STATE, getString(resID));
} else {
bundle.putString(UserConstant.DETECT_STATE, getString(R.string.liveness_detection_failed));
}
Intent intent = new Intent(mActivity, CertificationResultActivity.class);
intent.putExtra(Constants.BUNDLE, bundle);
mActivity.startActivity(intent);
}
@Override
......
......@@ -47,6 +47,7 @@
</LinearLayout>
<ImageView
android:id="@+id/iv_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
......@@ -54,6 +55,7 @@
android:src="@drawable/icon_certificaiton_succeed" />
<TextView
android:id="@+id/tv_result"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
......@@ -64,6 +66,7 @@
android:textStyle="bold" />
<TextView
android:id="@+id/tv_notice"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
......@@ -73,12 +76,15 @@
android:textSize="@dimen/sp_14" />
<TextView
android:id="@+id/tv_commite"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="90dp"
android:background="@drawable/icon_next_button"
android:gravity="center"
android:layout_marginRight="@dimen/dp_15"
android:layout_marginLeft="@dimen/dp_15"
android:text="确定"
android:textColor="@color/white"
android:textSize="@dimen/sp_16" />
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment