身份证拍照框2.0

This commit is contained in:
lijia 2024-05-11 11:37:46 +08:00
parent 4650884846
commit be767e7d46
18 changed files with 362 additions and 123 deletions

View File

@ -12,6 +12,7 @@
<option value="$PROJECT_DIR$/app" /> <option value="$PROJECT_DIR$/app" />
<option value="$PROJECT_DIR$/keeplibrary" /> <option value="$PROJECT_DIR$/keeplibrary" />
<option value="$PROJECT_DIR$/mylibrary" /> <option value="$PROJECT_DIR$/mylibrary" />
<option value="$PROJECT_DIR$/ocr_ui" />
</set> </set>
</option> </option>
<option name="resolveExternalAnnotations" value="false" /> <option name="resolveExternalAnnotations" value="false" />

View File

@ -435,7 +435,7 @@ interface Api {
*根据手机号查询司机 *根据手机号查询司机
* */ * */
@GET(BASE_URL + "driver/captain/selectDriverList") @GET(BASE_URL + "driver/captain/selectDriverList")
fun selectDriverList(@Query("phone") phone: String): Observable<CommonResponseBean<MutableList<DriverBean>>> fun selectDriverList(@Query("phone") phone: String,@Query("pageNum") pageNum: Int,@Query("pageSize") pageSize: Int): Observable<CommonResponseBean<MutableList<DriverBean>>>
/** /**

View File

@ -1,6 +1,10 @@
package com.arpa.hndahesudintocctmsdriver.oss; package com.arpa.hndahesudintocctmsdriver.oss;
import android.content.ContentResolver;
import android.database.Cursor;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.net.Uri;
import android.provider.MediaStore;
import android.util.Log; import android.util.Log;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.ProgressBar; import android.widget.ProgressBar;
@ -22,11 +26,13 @@ import com.alibaba.sdk.android.oss.model.PutObjectRequest;
import com.alibaba.sdk.android.oss.model.PutObjectResult; import com.alibaba.sdk.android.oss.model.PutObjectResult;
import com.arpa.hndahesudintocctmsdriver.base.App; import com.arpa.hndahesudintocctmsdriver.base.App;
import com.arpa.mylibrary.utils.LoadingUtils; import com.arpa.mylibrary.utils.LoadingUtils;
import com.arpa.mylibrary.utils.TimeUtil;
import com.lxj.xpopup.impl.LoadingPopupView; import com.lxj.xpopup.impl.LoadingPopupView;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.net.URI;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Calendar; import java.util.Calendar;
import java.util.HashMap; import java.util.HashMap;
@ -110,7 +116,10 @@ public class OssServiceUtil {
}); });
} }
File file = new File(localFile); File file = new File(localFile);
if (!file.exists()) { if (!file.exists()) {
return; return;
} }
@ -382,4 +391,29 @@ public class OssServiceUtil {
public interface PicsResultCallback { public interface PicsResultCallback {
void onOssSuccess(List<String> success, List<String> failure); void onOssSuccess(List<String> success, List<String> failure);
} }
/**
* Gets the corresponding path to a file from the given content:// URI
* @param selectedVideoUri The content:// URI to find the file path from
* @param contentResolver The content resolver to use to perform the query.
* @return the file path as a string
*/
public String getFilePathFromContentUri(Uri selectedVideoUri,
ContentResolver contentResolver) {
String filePath;
String[] filePathColumn = {MediaStore.MediaColumns.DATA};
Cursor cursor = contentResolver.query(selectedVideoUri, filePathColumn, null, null, null);
// 也可用下面的方法拿到cursor
// Cursor cursor = this.context.managedQuery(selectedVideoUri, filePathColumn, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
filePath = cursor.getString(columnIndex);
cursor.close();
return filePath;
}
} }

View File

@ -35,7 +35,6 @@ class HomeActivity : BaseActivity<ActivityHomeBinding>(), OnTabSelectListener,
private val mNormalRes = mutableListOf( private val mNormalRes = mutableListOf(
R.drawable.tab_home_normal, R.drawable.tab_home_normal,
R.drawable.tab_message_normal,
R.drawable.tab_waybill_normal, R.drawable.tab_waybill_normal,
R.drawable.tab_mine_normal R.drawable.tab_mine_normal
) )

View File

@ -1,12 +1,17 @@
package com.arpa.hndahesudintocctmsdriver.ui.account.authperson package com.arpa.hndahesudintocctmsdriver.ui.account.authperson
import android.content.Context
import android.content.Intent
import android.os.Bundle import android.os.Bundle
import android.view.View import android.view.View
import com.alibaba.idst.nui.DateUtil.DEFAULT_FORMAT_DATE import com.alibaba.idst.nui.DateUtil.DEFAULT_FORMAT_DATE
import com.arpa.hndahesudintocctmsdriver.R import com.arpa.hndahesudintocctmsdriver.R
import com.arpa.hndahesudintocctmsdriver.base.AppConfig import com.arpa.hndahesudintocctmsdriver.base.AppConfig
import com.arpa.hndahesudintocctmsdriver.bean.OcrPersonBean
import com.arpa.hndahesudintocctmsdriver.bean.UpPersonInfoBean import com.arpa.hndahesudintocctmsdriver.bean.UpPersonInfoBean
import com.arpa.hndahesudintocctmsdriver.callback.PicPath
import com.arpa.hndahesudintocctmsdriver.databinding.ActivityAuthPersonBinding import com.arpa.hndahesudintocctmsdriver.databinding.ActivityAuthPersonBinding
import com.arpa.hndahesudintocctmsdriver.mypop.PopNorBottomPic2
import com.arpa.hndahesudintocctmsdriver.net.BaseObserver import com.arpa.hndahesudintocctmsdriver.net.BaseObserver
import com.arpa.hndahesudintocctmsdriver.net.DataManager import com.arpa.hndahesudintocctmsdriver.net.DataManager
import com.arpa.hndahesudintocctmsdriver.net.RxHttpCallBack import com.arpa.hndahesudintocctmsdriver.net.RxHttpCallBack
@ -22,8 +27,18 @@ import com.arpa.mylibrary.utils.ImageLoader
import com.arpa.mylibrary.utils.PickerUtils import com.arpa.mylibrary.utils.PickerUtils
import com.arpa.mylibrary.utils.TimeUtil import com.arpa.mylibrary.utils.TimeUtil
import com.arpa.mylibrary.utils.ToastUtils import com.arpa.mylibrary.utils.ToastUtils
import com.arpa.mylibrary.weight.GlideEngine
import com.arpa.mylibrary.weight.ImageFileCompressEngine
import com.baidu.ocr.ui.camera.CameraActivity
import com.luck.picture.lib.basic.PictureSelectionModel
import com.luck.picture.lib.basic.PictureSelector
import com.luck.picture.lib.config.SelectMimeType
import com.luck.picture.lib.entity.LocalMedia
import com.luck.picture.lib.interfaces.OnResultCallbackListener
import com.lxj.xpopup.XPopup
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
import io.reactivex.rxjava3.schedulers.Schedulers import io.reactivex.rxjava3.schedulers.Schedulers
import java.io.File
import java.text.SimpleDateFormat import java.text.SimpleDateFormat
import java.util.Locale import java.util.Locale
@ -69,7 +84,11 @@ class AuthPersonActivity : BaseActivity<ActivityAuthPersonBinding>() {
} }
if (!tvEnd.text.toString().contains("长期")) { if (!tvEnd.text.toString().contains("长期")) {
if (TimeUtil.compareDate(tvEnd.text.toString(), SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()))) { if (TimeUtil.compareDate(
tvEnd.text.toString(),
SimpleDateFormat("yyyy-MM-dd", Locale.getDefault())
)
) {
ToastUtils.showToast(mContext, "身份证已过期,请及时更换最新证件") ToastUtils.showToast(mContext, "身份证已过期,请及时更换最新证件")
} }
} }
@ -80,7 +99,7 @@ class AuthPersonActivity : BaseActivity<ActivityAuthPersonBinding>() {
.subscribe(BaseObserver(mContext, object : RxHttpCallBack<Any>() { .subscribe(BaseObserver(mContext, object : RxHttpCallBack<Any>() {
override fun onSuccess(t: CommonResponseBean<Any>) { override fun onSuccess(t: CommonResponseBean<Any>) {
super.onSuccess(t) super.onSuccess(t)
BaseSPUtils.put(mContext,AppConfig.USER_CARID,perInfoBean.idcardNo) BaseSPUtils.put(mContext, AppConfig.USER_CARID, perInfoBean.idcardNo)
ActivityUtils.startActivity(mContext, AuthDriverActivity::class.java) ActivityUtils.startActivity(mContext, AuthDriverActivity::class.java)
// finish() // finish()
} }
@ -105,35 +124,17 @@ class AuthPersonActivity : BaseActivity<ActivityAuthPersonBinding>() {
} }
ivFront.setOnClickListener { ivFront.setOnClickListener {
if (perInfoBean.idcardFrontUrl.isNullOrBlank()){ if (perInfoBean.idcardFrontUrl.isNullOrBlank()) {
OcrUtils.getInstance()
.ocrPerson(mContext, this@AuthPersonActivity) { picPath, result ->
if (result?.data?.face == null) {
ToastUtils.showToast(mContext, "请选择正确证件照片")
return@ocrPerson
}
ImageLoader.getInstance() XPopup.Builder(mContext)
.loadRoundImage(mContext, picPath.locPic, 12, ivFront) .dismissOnTouchOutside(true)
tvFrontSeeBig.visibility = View.VISIBLE .asCustom(PopNorBottomPic2(
perInfoBean.idcardFrontUrl = picPath.picPath mContext,
result?.data?.face?.data.let { ) {
it?.run { dealPic(it, true)
perInfoBean.run { })
idcardNo = idNumber .show()
idcardName = name } else {
idcardAddress = address
idcardEthnicity = ethnicity
idcardSex = if (sex == "") "0" else "1"
}
}
binding.run {
etName.setText(it?.name)
etId.setText(it?.idNumber)
}
}
}
}else{
CommonPopUtils.getInstance().showOnePic( CommonPopUtils.getInstance().showOnePic(
mContext, mContext,
ivFront, perInfoBean.idcardFrontUrl ivFront, perInfoBean.idcardFrontUrl
@ -143,44 +144,16 @@ class AuthPersonActivity : BaseActivity<ActivityAuthPersonBinding>() {
} }
ivBack.setOnClickListener { ivBack.setOnClickListener {
if (perInfoBean.idcardBackUrl.isNullOrBlank()){ if (perInfoBean.idcardBackUrl.isNullOrBlank()) {
OcrUtils.getInstance() XPopup.Builder(mContext)
.ocrPerson(mContext, this@AuthPersonActivity) { picPath, result -> .dismissOnTouchOutside(true)
.asCustom(PopNorBottomPic2(
if (result?.data?.back == null) { mContext,
ToastUtils.showToast(mContext, "请选择正确证件照片") ) {
return@ocrPerson dealPic(it, false)
} })
.show()
perInfoBean.idcardBackUrl = picPath.picPath } else {
ImageLoader.getInstance()
.loadRoundImage(mContext, picPath.locPic, 12, ivBack)
tvBackSeeBig.visibility = View.VISIBLE
result?.data?.back?.let {
if (it.data.validPeriod?.contains("-") == true) {
val split = it.data.validPeriod.split("-")
binding.run {
tvStart.text =
TimeUtil.changeDateFormat(split[0])
tvEnd.text =
if (split.size == 2) TimeUtil.changeDateFormat(
split[1]
) else ""
}
}
if (it.data.validPeriod?.contains("长期") == true) {
val split = it.data.validPeriod.split("长期")
binding.run {
tvStart.text =
TimeUtil.changeDateFormat(split[0])
tvEnd.text = "长期"
}
}
}
}
}else{
CommonPopUtils.getInstance().showOnePic( CommonPopUtils.getInstance().showOnePic(
mContext, mContext,
ivBack, perInfoBean.idcardBackUrl ivBack, perInfoBean.idcardBackUrl
@ -188,6 +161,20 @@ class AuthPersonActivity : BaseActivity<ActivityAuthPersonBinding>() {
} }
} }
tvFrontSeeBig.setOnClickListener {
CommonPopUtils.getInstance().showOnePic(
mContext,
ivFront, perInfoBean.idcardFrontUrl
)
}
tvBackSeeBig.setOnClickListener {
CommonPopUtils.getInstance().showOnePic(
mContext,
ivBack, perInfoBean.idcardBackUrl
)
}
} }
} }
@ -234,4 +221,132 @@ class AuthPersonActivity : BaseActivity<ActivityAuthPersonBinding>() {
// //
// } // }
} }
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == 102 && resultCode == RESULT_OK) {
if (data != null) {
// binding.ivBack.setImageBitmap(BitmapFactory.decodeFile(getSaveFile(application).absolutePath));
// ImageLoader.getInstance()
// .loadRoundImage(mContext, getSaveFile(application).absolutePath, 12, binding.ivBack)
val contentType = data.getStringExtra(CameraActivity.KEY_CONTENT_TYPE)
if (contentType == CameraActivity.CONTENT_TYPE_ID_CARD_FRONT) {
OcrUtils.getInstance().onlyOcrPerson(
mContext,
getSaveFile(application).absolutePath,
this@AuthPersonActivity
) { picPath, result ->
dealOcrResult(picPath, result, true)
}
} else {
OcrUtils.getInstance().onlyOcrPerson(
mContext,
getSaveFile(application).absolutePath,
this@AuthPersonActivity
) { picPath, result ->
dealOcrResult(picPath, result, false)
}
}
}
}
}
fun getSaveFile(context: Context): File {
return File(context.filesDir, "pic1.jpg")
}
private fun dealPic(isPhoto: Boolean, isFront: Boolean) {
if (isPhoto) {
val intent = Intent(this@AuthPersonActivity, CameraActivity::class.java)
intent.putExtra(
CameraActivity.KEY_OUTPUT_FILE_PATH,
getSaveFile(application).absolutePath
)
intent.putExtra(
CameraActivity.KEY_CONTENT_TYPE,
if (isFront) CameraActivity.CONTENT_TYPE_ID_CARD_FRONT else CameraActivity.CONTENT_TYPE_ID_CARD_BACK
)
startActivityForResult(intent, 102)
} else {
// 进入相册
val selectionModel: PictureSelectionModel = PictureSelector.create(mContext)
.openGallery(SelectMimeType.TYPE_IMAGE)
.isDisplayCamera(false)//关闭拍照
.setImageEngine(GlideEngine.createGlideEngine())
.setCompressEngine(ImageFileCompressEngine())
.isPreviewImage(true)
.setMaxSelectNum(1)
.isMaxSelectEnabledMask(true)
.isGif(false)
selectionModel.forResult(object : OnResultCallbackListener<LocalMedia> {
override fun onResult(result: ArrayList<LocalMedia>) {
OcrUtils.getInstance().onlyOcrPerson(
mContext,
result[0].availablePath,
this@AuthPersonActivity
) { picPath, result ->
dealOcrResult(picPath, result, isFront)
}
}
override fun onCancel() {
}
})
}
}
private fun dealOcrResult(picPath: PicPath, ocrPersonBean: OcrPersonBean?, isFront: Boolean) {
if (isFront) {
ocrPersonBean?.data?.face?.data.let {
ImageLoader.getInstance()
.loadRoundImage(mContext, picPath.picPath, 12, binding.ivFront)
perInfoBean.idcardFrontUrl = picPath.picPath
it?.run {
perInfoBean.run {
idcardNo = idNumber
idcardName = name
idcardAddress = address
idcardEthnicity = ethnicity
idcardSex = if (sex == "") "0" else "1"
}
}
binding.run {
tvFrontSeeBig.visibility = View.VISIBLE
etName.setText(it?.name)
etId.setText(it?.idNumber)
}
}
} else {
ocrPersonBean?.data?.back?.let {
perInfoBean.idcardBackUrl = picPath.picPath
ImageLoader.getInstance()
.loadRoundImage(mContext, picPath.picPath, 12, binding.ivBack)
if (it.data.validPeriod?.contains("-") == true) {
val split = it.data.validPeriod.split("-")
binding.run {
tvStart.text =
TimeUtil.changeDateFormat(split[0])
tvEnd.text =
if (split.size == 2) TimeUtil.changeDateFormat(
split[1]
) else ""
}
}
binding.tvBackSeeBig.visibility = View.VISIBLE
if (it.data.validPeriod?.contains("长期") == true) {
val split = it.data.validPeriod.split("长期")
binding.run {
tvStart.text =
TimeUtil.changeDateFormat(split[0])
tvEnd.text = "长期"
}
}
}
}
}
} }

View File

@ -47,12 +47,16 @@ class EditBankCardActivity : BaseActivity<ActivityAuthBankcardBinding>() {
subMit() subMit()
} }
ivFront.setOnClickListener { ivFront.setOnClickListener {
if (!perInfoBean.driverBankcardPhotoUrl.isNullOrEmpty()) if (!perInfoBean.driverBankcardPhotoUrl.isNullOrEmpty()){
CommonPopUtils.getInstance().seeBigPic( CommonPopUtils.getInstance().seeBigPic(
mContext, mContext,
binding.ivFront, binding.ivFront,
perInfoBean.driverBankcardPhotoUrl perInfoBean.driverBankcardPhotoUrl
) )
}else{
selBankPic()
}
} }
tvChangeFront.setOnClickListener { tvChangeFront.setOnClickListener {
selBankPic() selBankPic()
@ -119,6 +123,7 @@ class EditBankCardActivity : BaseActivity<ActivityAuthBankcardBinding>() {
binding.let { binding.let {
it.etId.setText(cardNumber) it.etId.setText(cardNumber)
it.tvBankName.setText(bankName) it.tvBankName.setText(bankName)
it.tvChangeFront.visibility = View.VISIBLE
} }
} }
} }

View File

@ -71,12 +71,22 @@ class EditDriverActivity : BaseActivity<ActivityAuthDriverBinding>() {
ivFront.setOnClickListener { ivFront.setOnClickListener {
seeBigPic(binding.ivFront, driverInfoBean.licensePhotoFaceUrl) if (driverInfoBean.licensePhotoFaceUrl.isNullOrEmpty()){
selFrontPic()
}else{
seeBigPic(binding.ivFront, driverInfoBean.licensePhotoFaceUrl)
}
} }
ivBack.setOnClickListener { ivBack.setOnClickListener {
seeBigPic(binding.ivBack, driverInfoBean.licensePhotoBackUrl) if (driverInfoBean.licensePhotoBackUrl.isNullOrEmpty()){
selBackPic()
}else{
seeBigPic(binding.ivBack, driverInfoBean.licensePhotoBackUrl)
}
} }
tvChangeFront.setOnClickListener { tvChangeFront.setOnClickListener {
@ -219,6 +229,7 @@ class EditDriverActivity : BaseActivity<ActivityAuthDriverBinding>() {
issueAuthority //发证机关 issueAuthority //发证机关
} }
binding.run { binding.run {
tvChangeFront.visibility = View.VISIBLE
etName.setText(it.name) etName.setText(it.name)
etId.setText(it.licenseNumber) etId.setText(it.licenseNumber)
tvCarType.text = it.approvedType tvCarType.text = it.approvedType
@ -248,6 +259,7 @@ class EditDriverActivity : BaseActivity<ActivityAuthDriverBinding>() {
ImageLoader.getInstance() ImageLoader.getInstance()
.loadRoundImage(mContext, picPath.locPic, 12, binding.ivBack) .loadRoundImage(mContext, picPath.locPic, 12, binding.ivBack)
driverInfoBean.licensePhotoBackUrl = picPath.picPath driverInfoBean.licensePhotoBackUrl = picPath.picPath
binding.tvChangeBack.visibility = View.VISIBLE
it?.run { it?.run {
backLicName = it.name backLicName = it.name
driverInfoBean.licenseRecordNumber = recordNumber driverInfoBean.licenseRecordNumber = recordNumber

View File

@ -218,18 +218,40 @@ class EditPersonActivity : BaseActivity<ActivityAuthPersonBinding>() {
} }
ivFront.setOnClickListener { ivFront.setOnClickListener {
CommonPopUtils.getInstance().showOnePic( if (perInfoBean.idcardFrontUrl.isNullOrEmpty()) {
mContext, XPopup.Builder(mContext)
ivFront, perInfoBean.idcardFrontUrl .dismissOnTouchOutside(true)
) .asCustom(PopNorBottomPic2(
mContext,
) {
dealPic(it, true)
})
.show()
} else {
CommonPopUtils.getInstance().showOnePic(
mContext,
ivFront, perInfoBean.idcardFrontUrl
)
}
} }
ivBack.setOnClickListener { ivBack.setOnClickListener {
CommonPopUtils.getInstance().showOnePic( if (perInfoBean.idcardBackUrl.isNullOrEmpty()) {
mContext, XPopup.Builder(mContext)
ivBack, perInfoBean.idcardBackUrl .dismissOnTouchOutside(true)
) .asCustom(PopNorBottomPic2(
mContext,
) {
dealPic(it, false)
})
.show()
} else {
CommonPopUtils.getInstance().showOnePic(
mContext,
ivBack, perInfoBean.idcardBackUrl
)
}
} }
} }
@ -245,7 +267,7 @@ class EditPersonActivity : BaseActivity<ActivityAuthPersonBinding>() {
// ImageLoader.getInstance() // ImageLoader.getInstance()
// .loadRoundImage(mContext, getSaveFile(application).absolutePath, 12, binding.ivBack) // .loadRoundImage(mContext, getSaveFile(application).absolutePath, 12, binding.ivBack)
val contentType = data.getStringExtra(CameraActivity.KEY_CONTENT_TYPE) val contentType = data.getStringExtra(CameraActivity.KEY_CONTENT_TYPE)
if (contentType == CameraActivity.CONTENT_TYPE_ID_CARD_FRONT){ if (contentType == CameraActivity.CONTENT_TYPE_ID_CARD_FRONT) {
OcrUtils.getInstance().onlyOcrPerson( OcrUtils.getInstance().onlyOcrPerson(
mContext, mContext,
getSaveFile(application).absolutePath, getSaveFile(application).absolutePath,
@ -253,7 +275,7 @@ class EditPersonActivity : BaseActivity<ActivityAuthPersonBinding>() {
) { picPath, result -> ) { picPath, result ->
dealOcrResult(picPath, result, true) dealOcrResult(picPath, result, true)
} }
}else{ } else {
OcrUtils.getInstance().onlyOcrPerson( OcrUtils.getInstance().onlyOcrPerson(
mContext, mContext,
getSaveFile(application).absolutePath, getSaveFile(application).absolutePath,
@ -333,7 +355,7 @@ class EditPersonActivity : BaseActivity<ActivityAuthPersonBinding>() {
) )
intent.putExtra( intent.putExtra(
CameraActivity.KEY_CONTENT_TYPE, CameraActivity.KEY_CONTENT_TYPE,
if(isFront) CameraActivity.CONTENT_TYPE_ID_CARD_FRONT else CameraActivity.CONTENT_TYPE_ID_CARD_BACK if (isFront) CameraActivity.CONTENT_TYPE_ID_CARD_FRONT else CameraActivity.CONTENT_TYPE_ID_CARD_BACK
) )
startActivityForResult(intent, 102) startActivityForResult(intent, 102)
@ -345,6 +367,7 @@ class EditPersonActivity : BaseActivity<ActivityAuthPersonBinding>() {
.setImageEngine(GlideEngine.createGlideEngine()) .setImageEngine(GlideEngine.createGlideEngine())
.setCompressEngine(ImageFileCompressEngine()) .setCompressEngine(ImageFileCompressEngine())
.isPreviewImage(true) .isPreviewImage(true)
.setMaxSelectNum(1)
.isMaxSelectEnabledMask(true) .isMaxSelectEnabledMask(true)
.isGif(false) .isGif(false)
selectionModel.forResult(object : OnResultCallbackListener<LocalMedia> { selectionModel.forResult(object : OnResultCallbackListener<LocalMedia> {
@ -381,6 +404,7 @@ class EditPersonActivity : BaseActivity<ActivityAuthPersonBinding>() {
} }
} }
binding.run { binding.run {
tvFrontSeeBig.visibility = View.VISIBLE
etName.setText(it?.name) etName.setText(it?.name)
etId.setText(it?.idNumber) etId.setText(it?.idNumber)
} }
@ -402,6 +426,7 @@ class EditPersonActivity : BaseActivity<ActivityAuthPersonBinding>() {
) else "" ) else ""
} }
} }
binding.tvBackSeeBig.visibility = View.VISIBLE
if (it.data.validPeriod?.contains("长期") == true) { if (it.data.validPeriod?.contains("长期") == true) {
val split = it.data.validPeriod.split("长期") val split = it.data.validPeriod.split("长期")
binding.run { binding.run {

View File

@ -54,12 +54,22 @@ class EditQualificationActivity : BaseActivity<ActivityAuthQualificationBinding>
} }
ivFront.setOnClickListener { ivFront.setOnClickListener {
if (!upQuaInfo.qualificationCertificatePhotoUrl.isNullOrEmpty()) if (!upQuaInfo.qualificationCertificatePhotoUrl.isNullOrEmpty()) {
CommonPopUtils.getInstance().seeBigPic( CommonPopUtils.getInstance().seeBigPic(
mContext, mContext,
binding.ivFront, binding.ivFront,
upQuaInfo.qualificationCertificatePhotoUrl upQuaInfo.qualificationCertificatePhotoUrl
) )
} else {
OcrUtils.getInstance()
.noOcrUpPic(mContext, this@EditQualificationActivity) { picPath, _ ->
ImageLoader.getInstance()
.loadRoundImage(mContext, picPath.locPic, 12, ivFront)
upQuaInfo.qualificationCertificatePhotoUrl = picPath.picPath
binding.tvChangeFront.visibility = View.VISIBLE
}
}
} }
tvChangeFront.setOnClickListener { tvChangeFront.setOnClickListener {
@ -68,6 +78,7 @@ class EditQualificationActivity : BaseActivity<ActivityAuthQualificationBinding>
ImageLoader.getInstance() ImageLoader.getInstance()
.loadRoundImage(mContext, picPath.locPic, 12, ivFront) .loadRoundImage(mContext, picPath.locPic, 12, ivFront)
upQuaInfo.qualificationCertificatePhotoUrl = picPath.picPath upQuaInfo.qualificationCertificatePhotoUrl = picPath.picPath
binding.tvChangeFront.visibility = View.VISIBLE
} }
} }
} }

View File

@ -79,7 +79,7 @@ class EditRoadActivity : BaseActivity<ActivityAuthRoadBinding>() {
} }
binding.run { binding.run {
ImageLoader.getInstance() ImageLoader.getInstance()
.loadRoundImage(mContext, data.licenseFaceUrl, 12, ivFront) .loadRoundImage(mContext, data.roadLicensePhotoUrl, 12, ivFront)
etID.setText(data.roadLicense) etID.setText(data.roadLicense)
tvDate.text = data.roadLicenseValidity tvDate.text = data.roadLicenseValidity
@ -93,7 +93,7 @@ class EditRoadActivity : BaseActivity<ActivityAuthRoadBinding>() {
roadLicense = binding.etID.text.trim().toString() roadLicense = binding.etID.text.trim().toString()
roadLicenseValidity = binding.tvDate.text.toString() roadLicenseValidity = binding.tvDate.text.toString()
if (upRoad.roadLicense.isNullOrEmpty() || upRoad.roadLicenseValidity.isNullOrEmpty() || upRoad.roadLicensePhotoUrl.isNullOrEmpty()) { if (upRoad.roadLicensePhotoUrl.isNullOrEmpty()) {
showToast("请完善信息") showToast("请完善信息")
return return
} }

View File

@ -91,7 +91,7 @@ class InviteDriverActivity : BaseActivity<ActivityInviteDriverBinding>(), Refres
if (phone.isNullOrEmpty()) { if (phone.isNullOrEmpty()) {
return return
} }
DataManager.getInstance().selectDriverList(phone).subscribeOn(Schedulers.io()) DataManager.getInstance().selectDriverList(phone, mRefreshPage,mRefreshCount).subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread()) .observeOn(AndroidSchedulers.mainThread())
.subscribe(BaseObserver(mContext, object : RxHttpCallBack<MutableList<DriverBean>>() { .subscribe(BaseObserver(mContext, object : RxHttpCallBack<MutableList<DriverBean>>() {
override fun onSuccess(t: CommonResponseBean<MutableList<DriverBean>>) { override fun onSuccess(t: CommonResponseBean<MutableList<DriverBean>>) {

View File

@ -340,6 +340,7 @@ class MineFragment : BaseFragment<FragmentMineBinding>(), View.OnClickListener,
val userInfo = SPUtils.instance.getUserInfo(mContext) val userInfo = SPUtils.instance.getUserInfo(mContext)
if (userInfo?.isCarCaptain == "1") {//是否是车队长0=否,1=是,9=未选择) if (userInfo?.isCarCaptain == "1") {//是否是车队长0=否,1=是,9=未选择)
binding.llNotic.visibility = View.GONE binding.llNotic.visibility = View.GONE
binding.rlCars.visibility = View.GONE
} else { } else {
//司机车辆显示 //司机车辆显示

View File

@ -17,9 +17,14 @@ import com.arpa.mylibrary.utils.LoadingUtils
import com.arpa.mylibrary.utils.PopsUtils import com.arpa.mylibrary.utils.PopsUtils
import com.arpa.mylibrary.utils.RegexpUtils import com.arpa.mylibrary.utils.RegexpUtils
import com.arpa.mylibrary.utils.ToastUtils import com.arpa.mylibrary.utils.ToastUtils
import com.luck.picture.lib.config.PictureMimeType
import com.luck.picture.lib.utils.DateUtils
import com.lxj.xpopup.XPopup import com.lxj.xpopup.XPopup
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
import io.reactivex.rxjava3.schedulers.Schedulers import io.reactivex.rxjava3.schedulers.Schedulers
import top.zibin.luban.Luban
import top.zibin.luban.OnNewCompressListener
import java.io.File
/** /**
* @ClassName OcrUtils * @ClassName OcrUtils
@ -85,7 +90,7 @@ class OcrUtils private constructor() {
LoadingUtils.instance.showLoading(activity) LoadingUtils.instance.showLoading(activity)
//上传oss得到图片地址 //上传oss得到图片地址
OssServiceUtil.getInstance().run { OssServiceUtil.getInstance().run {
asyncPutImage(result[0].realPath, null) asyncPutImage(result[0].availablePath, null)
setResultCallBack { data, oldPath -> setResultCallBack { data, oldPath ->
DataManager.getInstance().recognizeIdcard(oldPath) DataManager.getInstance().recognizeIdcard(oldPath)
.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()) .subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
@ -131,39 +136,64 @@ class OcrUtils private constructor() {
fun onlyOcrPerson(context: Context,picPath: String, activity: AppCompatActivity, listener: OnOcrPicResultListener){ fun onlyOcrPerson(context: Context,picPath: String, activity: AppCompatActivity, listener: OnOcrPicResultListener){
//上传oss得到图片地址 //上传oss得到图片地址
LoadingUtils.instance.showLoading(activity) LoadingUtils.instance.showLoading(activity)
OssServiceUtil.getInstance().run {
asyncPutImage(picPath, null)
setResultCallBack { data, oldPath ->
DataManager.getInstance().recognizeIdcard(oldPath)
.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
.subscribe(BaseObserver(context, object : RxHttpCallBack<OcrPersonBean>() {
override fun onSuccess(t: CommonResponseBean<OcrPersonBean>) {
super.onSuccess(t)
LoadingUtils.instance.dissLoading()
t.data?.let {
listener.onSuccResult(
PicPath(picPath, oldPath), it
)
}
}
override fun onCodeError( //压缩
mContext: Context?, Luban.with(context).load(picPath).ignoreBy(30).setRenameListener { filePath ->
t: CommonResponseBean<OcrPersonBean> val indexOf = filePath.lastIndexOf(".")
) { val postfix = if (indexOf != -1) filePath.substring(indexOf) else ".jpg"
DateUtils.getCreateFileName("CMP_") + postfix
}.filter { path ->
if (PictureMimeType.isUrlHasImage(path) && !PictureMimeType.isHasHttp(path)) {
true
} else !PictureMimeType.isUrlHasGif(path)
}.setCompressListener(object : OnNewCompressListener {
override fun onStart() {}
override fun onSuccess(source: String, compressFile: File) {
OssServiceUtil.getInstance().run {
asyncPutImage(compressFile.absolutePath, null)
setResultCallBack { data, oldPath ->
DataManager.getInstance().recognizeIdcard(oldPath)
.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
.subscribe(BaseObserver(context, object : RxHttpCallBack<OcrPersonBean>() {
override fun onSuccess(t: CommonResponseBean<OcrPersonBean>) {
super.onSuccess(t)
LoadingUtils.instance.dissLoading()
t.data?.let {
listener.onSuccResult(
PicPath(picPath, oldPath), it
)
}
}
override fun onCodeError(
mContext: Context?,
t: CommonResponseBean<OcrPersonBean>
) {
// super.onCodeError(mContext, t) // super.onCodeError(mContext, t)
LoadingUtils.instance.dissLoading() LoadingUtils.instance.dissLoading()
if (t.code == 500) { if (t.code == 500) {
// if (t.msg.contains("code: 400, The image type does not match the API operation")) { // if (t.msg.contains("code: 400, The image type does not match the API operation")) {
ToastUtils.showToast(mContext, "图片识别失败,请重新上传") ToastUtils.showToast(mContext, "图片识别失败,请重新上传")
// } else { // } else {
// ToastUtils.showToast(mContext, t.msg) // ToastUtils.showToast(mContext, t.msg)
// } // }
} }
} }
})) }))
}
}
} }
}
override fun onError(source: String, e: Throwable) {
LoadingUtils.instance.dissLoading()
// call?.onCallback(source, null)
}
}).launch()
} }
@ -175,7 +205,7 @@ class OcrUtils private constructor() {
LoadingUtils.instance.showLoading(activity) LoadingUtils.instance.showLoading(activity)
//上传oss得到图片地址 //上传oss得到图片地址
OssServiceUtil.getInstance().run { OssServiceUtil.getInstance().run {
asyncPutImage(result[0].realPath, null) asyncPutImage(result[0].availablePath, null)
setResultCallBack { data, oldPath -> setResultCallBack { data, oldPath ->
DataManager.getInstance().recognizeDrivingLicense(oldPath) DataManager.getInstance().recognizeDrivingLicense(oldPath)
.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()) .subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
@ -233,7 +263,7 @@ class OcrUtils private constructor() {
LoadingUtils.instance.showLoading(activity) LoadingUtils.instance.showLoading(activity)
//上传oss得到图片地址 //上传oss得到图片地址
OssServiceUtil.getInstance().run { OssServiceUtil.getInstance().run {
asyncPutImage(result[0].realPath, null) asyncPutImage(result[0].availablePath, null)
setResultCallBack { data, oldPath -> setResultCallBack { data, oldPath ->
DataManager.getInstance().recognizeVehicleLicense(oldPath)//行驶证识别 DataManager.getInstance().recognizeVehicleLicense(oldPath)//行驶证识别
.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()) .subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
@ -290,7 +320,7 @@ class OcrUtils private constructor() {
PopsUtils.getInstance().showSimSelPic(context) { result -> PopsUtils.getInstance().showSimSelPic(context) { result ->
//上传oss得到图片地址 //上传oss得到图片地址
OssServiceUtil.getInstance().run { OssServiceUtil.getInstance().run {
asyncPutImage(result[0].realPath, activity) asyncPutImage(result[0].availablePath, activity)
setResultCallBack { data, oldPath -> setResultCallBack { data, oldPath ->
DataManager.getInstance().recognizeBankCard(oldPath) DataManager.getInstance().recognizeBankCard(oldPath)
.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()) .subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
@ -346,7 +376,7 @@ class OcrUtils private constructor() {
PopsUtils.getInstance().showSimSelPic(context) { result -> PopsUtils.getInstance().showSimSelPic(context) { result ->
//上传oss得到图片地址 //上传oss得到图片地址
OssServiceUtil.getInstance().run { OssServiceUtil.getInstance().run {
asyncPutImage(result[0].realPath, activity) asyncPutImage(result[0].availablePath, activity)
setResultCallBack { data, oldPath -> setResultCallBack { data, oldPath ->
DataManager.getInstance().recognizeBusinessLicense(oldPath) DataManager.getInstance().recognizeBusinessLicense(oldPath)
.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()) .subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
@ -447,7 +477,7 @@ class OcrUtils private constructor() {
PopsUtils.getInstance().showSimSelPic(context) { PopsUtils.getInstance().showSimSelPic(context) {
var data = it[0] var data = it[0]
OssServiceUtil.getInstance().run { OssServiceUtil.getInstance().run {
asyncPutImage(data.realPath, activity) asyncPutImage(data.availablePath, activity)
setResultCallBack { data, oldPath -> setResultCallBack { data, oldPath ->
activity.runOnUiThread { activity.runOnUiThread {
listener.onSuccResult( listener.onSuccResult(

View File

@ -433,6 +433,7 @@
</androidx.cardview.widget.CardView> </androidx.cardview.widget.CardView>
<androidx.cardview.widget.CardView <androidx.cardview.widget.CardView
android:visibility="gone"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center_horizontal" android:layout_gravity="center_horizontal"

View File

@ -62,6 +62,7 @@
</androidx.cardview.widget.CardView> </androidx.cardview.widget.CardView>
<androidx.cardview.widget.CardView <androidx.cardview.widget.CardView
android:visibility="gone"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center_horizontal" android:layout_gravity="center_horizontal"

View File

@ -26,15 +26,18 @@
android:orientation="horizontal"> android:orientation="horizontal">
<TextView <TextView
android:layout_weight="1"
android:id="@+id/tvName" android:id="@+id/tvName"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp_12" android:layout_marginLeft="@dimen/dp_12"
android:text="王师傅" android:text="王师傅"
android:lines="1"
android:textColor="@color/black" android:textColor="@color/black"
android:textSize="@dimen/sp_16" /> android:textSize="@dimen/sp_16" />
<TextView <TextView
android:visibility="gone"
android:id="@+id/tvStatu" android:id="@+id/tvStatu"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
@ -47,7 +50,7 @@
android:text="待加入" android:text="待加入"
android:textColor="@color/main_red" android:textColor="@color/main_red"
android:textSize="@dimen/sp_14" android:textSize="@dimen/sp_14"
android:visibility="gone" /> />
</LinearLayout> </LinearLayout>

View File

@ -57,6 +57,7 @@ class PopNorBottomPic(
// 单独拍照 // 单独拍照
val cameraModel: PictureSelectionCameraModel = PictureSelector.create(context) val cameraModel: PictureSelectionCameraModel = PictureSelector.create(context)
.openCamera(SelectMimeType.TYPE_IMAGE) .openCamera(SelectMimeType.TYPE_IMAGE)
.setCompressEngine(ImageFileCompressEngine())
// .setCameraInterceptListener(getCustomCameraEvent())//自定义相机 // .setCameraInterceptListener(getCustomCameraEvent())//自定义相机
// .setRecordAudioInterceptListener(MainActivity.MeOnRecordAudioInterceptListener())//录音回调事件 // .setRecordAudioInterceptListener(MainActivity.MeOnRecordAudioInterceptListener())//录音回调事件
// .setCropEngine(ImageFileCropEngine())//裁剪 // .setCropEngine(ImageFileCropEngine())//裁剪

View File

@ -22,7 +22,7 @@ class ImageFileCompressEngine : CompressFileEngine {
source: ArrayList<Uri>?, source: ArrayList<Uri>?,
call: OnKeyValueResultCallbackListener? call: OnKeyValueResultCallbackListener?
) { ) {
Luban.with(context).load(source).ignoreBy(100).setRenameListener { filePath -> Luban.with(context).load(source).ignoreBy(30).setRenameListener { filePath ->
val indexOf = filePath.lastIndexOf(".") val indexOf = filePath.lastIndexOf(".")
val postfix = if (indexOf != -1) filePath.substring(indexOf) else ".jpg" val postfix = if (indexOf != -1) filePath.substring(indexOf) else ".jpg"
DateUtils.getCreateFileName("CMP_") + postfix DateUtils.getCreateFileName("CMP_") + postfix