From ac6906a1a534659c40981f5bf6d56eda7a511b54 Mon Sep 17 00:00:00 2001 From: lijia Date: Wed, 18 Dec 2024 15:22:03 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E8=B7=AF=E4=BA=A4=E6=9B=BF=E6=8D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 6 +- app/libs/mdp-release.aar | Bin 0 -> 60476 bytes app/src/main/AndroidManifest.xml | 9 + .../bean/GDImage.java | 53 ++ .../bean/GDLocation.java | 87 ++ .../constant/NewLJConstant.java | 19 + .../report/ALProcess.java | 131 ++- .../request/bean/newlj/InvoiceBean.java | 40 + .../request/bean/newlj/InvoicesBean.java | 135 ++++ .../request/bean/newlj/LjTokenBean.java | 41 + .../request/bean/newlj/PickupBean.java | 109 +++ .../bean/newlj/ShipmentStatusBean.java | 31 + .../request/bean/newlj/UpimgBean.java | 118 +++ .../request/net/Api.java | 128 ++- .../request/net/ApiInterceptor.kt | 114 +++ .../request/net/BaseObserver.java | 2 +- .../request/net/DataManager.java | 1 - .../request/net/JsonInterceptor.java | 119 +++ .../request/net/RequestHeadInterceptor.java | 7 +- .../request/net/RxHttpCallBack.java | 16 +- .../ui/home/HomeFragment.java | 37 +- .../shangchuan/ShangChuangImgActivity.java | 324 ++++++-- .../ui/login/LoginActivity.java | 3 + .../util/NewLJUtils.java | 764 ++++++++++++++++++ .../com/dahe/mylibrary/bean/DriverBean.java | 49 ++ .../callback/OnGDDownloadResultListener.java | 13 + .../callback/OnGDResultListener.java | 14 + .../mylibrary/net/CommonResponseBean.java | 54 +- .../com/dahe/mylibrary/utils/BaseSPUtils.java | 1 + 29 files changed, 2296 insertions(+), 129 deletions(-) create mode 100644 app/libs/mdp-release.aar create mode 100644 app/src/main/java/com/arpa/hndahesudintocctmsdriver/bean/GDImage.java create mode 100644 app/src/main/java/com/arpa/hndahesudintocctmsdriver/bean/GDLocation.java create mode 100644 app/src/main/java/com/arpa/hndahesudintocctmsdriver/constant/NewLJConstant.java create mode 100644 app/src/main/java/com/arpa/hndahesudintocctmsdriver/request/bean/newlj/InvoiceBean.java create mode 100644 app/src/main/java/com/arpa/hndahesudintocctmsdriver/request/bean/newlj/InvoicesBean.java create mode 100644 app/src/main/java/com/arpa/hndahesudintocctmsdriver/request/bean/newlj/LjTokenBean.java create mode 100644 app/src/main/java/com/arpa/hndahesudintocctmsdriver/request/bean/newlj/PickupBean.java create mode 100644 app/src/main/java/com/arpa/hndahesudintocctmsdriver/request/bean/newlj/ShipmentStatusBean.java create mode 100644 app/src/main/java/com/arpa/hndahesudintocctmsdriver/request/bean/newlj/UpimgBean.java create mode 100644 app/src/main/java/com/arpa/hndahesudintocctmsdriver/request/net/ApiInterceptor.kt create mode 100644 app/src/main/java/com/arpa/hndahesudintocctmsdriver/request/net/JsonInterceptor.java create mode 100644 app/src/main/java/com/arpa/hndahesudintocctmsdriver/util/NewLJUtils.java create mode 100644 mylibrary/src/main/java/com/dahe/mylibrary/bean/DriverBean.java create mode 100644 mylibrary/src/main/java/com/dahe/mylibrary/callback/OnGDDownloadResultListener.java create mode 100644 mylibrary/src/main/java/com/dahe/mylibrary/callback/OnGDResultListener.java diff --git a/app/build.gradle b/app/build.gradle index 7856802..ae9a4dc 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -38,8 +38,8 @@ android { applicationId "com.arpa.hndahesudintocctmsdriver" minSdkVersion 24 targetSdkVersion 30 - versionCode 75 - versionName "3.4.5" + versionCode 76 + versionName "3.4.6" flavorDimensions "CHANNEL_VALUE" flavorDimensions "app_icon" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" @@ -231,4 +231,6 @@ dependencies { implementation project(path: ':mylibrary') + implementation files('libs/mdp-release.aar') + } \ No newline at end of file diff --git a/app/libs/mdp-release.aar b/app/libs/mdp-release.aar new file mode 100644 index 0000000000000000000000000000000000000000..5a26d9416596078f49678a527146d4d4ffa2c113 GIT binary patch literal 60476 zcmV)8K*qmNO9KQH000OG0000%0Awb#5XYMU0L76600jU508%b=cy#Q&Ta(+kvM%^O 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

BUc<=BsGEJ6}VUokUBt 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 VhWU>b^w;(CiyFA{Wd;WJ{{V!?Z6^Q# literal 0 HcmV?d00001 diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index bfe2479..2df6430 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -254,6 +254,15 @@ android:name="com.alct.mdp.MDPLocationService" android:exported="true" android:process=":mdpLocation_v1" /> + + + + + driverInvoices; + + public String getTotalPage() { + return totalPage; + } + + public void setTotalPage(String totalPage) { + this.totalPage = totalPage; + } + + public String getTotalCount() { + return totalCount; + } + + public void setTotalCount(String totalCount) { + this.totalCount = totalCount; + } + + public String getPageSize() { + return pageSize; + } + + public void setPageSize(String pageSize) { + this.pageSize = pageSize; + } + + public String getCurrentPage() { + return currentPage; + } + + public void setCurrentPage(String currentPage) { + this.currentPage = currentPage; + } + + public String getSortField() { + return sortField; + } + + public void setSortField(String sortField) { + this.sortField = sortField; + } + + public String getSortDirection() { + return sortDirection; + } + + public void setSortDirection(String sortDirection) { + this.sortDirection = sortDirection; + } + + public List getDriverInvoices() { + return driverInvoices; + } + + public void setDriverInvoices(List driverInvoices) { + this.driverInvoices = driverInvoices; + } + + public static class DataDTO{ + + private String taxAmount; + private String totalAmount; + private String invoiceReceiverName; + private String totalAmountIncludeTax; + private String driverInvoiceCode; + private String taxRate; + + + public String getTaxAmount() { + return taxAmount; + } + + public void setTaxAmount(String taxAmount) { + this.taxAmount = taxAmount; + } + + public String getTotalAmount() { + return totalAmount; + } + + public void setTotalAmount(String totalAmount) { + this.totalAmount = totalAmount; + } + + public String getInvoiceReceiverName() { + return invoiceReceiverName; + } + + public void setInvoiceReceiverName(String invoiceReceiverName) { + this.invoiceReceiverName = invoiceReceiverName; + } + + public String getTotalAmountIncludeTax() { + return totalAmountIncludeTax; + } + + public void setTotalAmountIncludeTax(String totalAmountIncludeTax) { + this.totalAmountIncludeTax = totalAmountIncludeTax; + } + + public String getDriverInvoiceCode() { + return driverInvoiceCode; + } + + public void setDriverInvoiceCode(String driverInvoiceCode) { + this.driverInvoiceCode = driverInvoiceCode; + } + + public String getTaxRate() { + return taxRate; + } + + public void setTaxRate(String taxRate) { + this.taxRate = taxRate; + } + } +} diff --git a/app/src/main/java/com/arpa/hndahesudintocctmsdriver/request/bean/newlj/LjTokenBean.java b/app/src/main/java/com/arpa/hndahesudintocctmsdriver/request/bean/newlj/LjTokenBean.java new file mode 100644 index 0000000..2b644ac --- /dev/null +++ b/app/src/main/java/com/arpa/hndahesudintocctmsdriver/request/bean/newlj/LjTokenBean.java @@ -0,0 +1,41 @@ +package com.arpa.hndahesudintocctmsdriver.request.bean.newlj; + +import java.io.Serializable; + +/** + * @ClassName LjTokenBean + * @Author john + * @Date 2024/11/25 10:05 + * @Description TODO + */ +public class LjTokenBean implements Serializable { + + + private String enterpriseCode; + private String enterpriseIdentity; + private String enterpriseKey; + + public String getEnterpriseCode() { + return enterpriseCode; + } + + public void setEnterpriseCode(String enterpriseCode) { + this.enterpriseCode = enterpriseCode; + } + + public String getEnterpriseIdentity() { + return enterpriseIdentity; + } + + public void setEnterpriseIdentity(String enterpriseIdentity) { + this.enterpriseIdentity = enterpriseIdentity; + } + + public String getEnterpriseKey() { + return enterpriseKey; + } + + public void setEnterpriseKey(String enterpriseKey) { + this.enterpriseKey = enterpriseKey; + } +} diff --git a/app/src/main/java/com/arpa/hndahesudintocctmsdriver/request/bean/newlj/PickupBean.java b/app/src/main/java/com/arpa/hndahesudintocctmsdriver/request/bean/newlj/PickupBean.java new file mode 100644 index 0000000..69a6c73 --- /dev/null +++ b/app/src/main/java/com/arpa/hndahesudintocctmsdriver/request/bean/newlj/PickupBean.java @@ -0,0 +1,109 @@ +package com.arpa.hndahesudintocctmsdriver.request.bean.newlj; + +import com.alct.mdp.model.Location; +import com.arpa.hndahesudintocctmsdriver.bean.GDLocation; + +import java.io.Serializable; + +/** + * @ClassName PickupBean + * @Author john + * @Date 2024/11/25 10:19 + * @Description TODO + */ +public class PickupBean implements Serializable { + + private String shipmentCode; + private String enterpriseCode; + private GDLocation location; + + public String getShipmentCode() { + return shipmentCode; + } + + public void setShipmentCode(String shipmentCode) { + this.shipmentCode = shipmentCode; + } + + public String getEnterpriseCode() { + return enterpriseCode; + } + + public void setEnterpriseCode(String enterpriseCode) { + this.enterpriseCode = enterpriseCode; + } + + public GDLocation getLocation() { + return location; + } + + public void setLocation(GDLocation location) { + this.location = location; + } + + public static class LocationDTO { + private String time; + private double baiduLatitude; + private double baiduLongitude; + private double altitude; + private double speed; + private double bearing; + private String location; + + public String getTime() { + return time; + } + + public void setTime(String time) { + this.time = time; + } + + public double getBaiduLatitude() { + return baiduLatitude; + } + + public void setBaiduLatitude(double baiduLatitude) { + this.baiduLatitude = baiduLatitude; + } + + public double getBaiduLongitude() { + return baiduLongitude; + } + + public void setBaiduLongitude(double baiduLongitude) { + this.baiduLongitude = baiduLongitude; + } + + public double getAltitude() { + return altitude; + } + + public void setAltitude(double altitude) { + this.altitude = altitude; + } + + public double getSpeed() { + return speed; + } + + public void setSpeed(double speed) { + this.speed = speed; + } + + public double getBearing() { + return bearing; + } + + public void setBearing(double bearing) { + this.bearing = bearing; + } + + public String getLocation() { + return location; + } + + public void setLocation(String location) { + this.location = location; + } + } +} diff --git a/app/src/main/java/com/arpa/hndahesudintocctmsdriver/request/bean/newlj/ShipmentStatusBean.java b/app/src/main/java/com/arpa/hndahesudintocctmsdriver/request/bean/newlj/ShipmentStatusBean.java new file mode 100644 index 0000000..5c15b11 --- /dev/null +++ b/app/src/main/java/com/arpa/hndahesudintocctmsdriver/request/bean/newlj/ShipmentStatusBean.java @@ -0,0 +1,31 @@ +package com.arpa.hndahesudintocctmsdriver.request.bean.newlj; + +import java.io.Serializable; + +/** + * @ClassName ShipmentStatusBean + * @Author john + * @Date 2024/11/25 17:16 + * @Description TODO + */ +public class ShipmentStatusBean implements Serializable { + private String shipmentCode; + private String enterpriseCode; + + + public String getShipmentCode() { + return shipmentCode; + } + + public void setShipmentCode(String shipmentCode) { + this.shipmentCode = shipmentCode; + } + + public String getEnterpriseCode() { + return enterpriseCode; + } + + public void setEnterpriseCode(String enterpriseCode) { + this.enterpriseCode = enterpriseCode; + } +} diff --git a/app/src/main/java/com/arpa/hndahesudintocctmsdriver/request/bean/newlj/UpimgBean.java b/app/src/main/java/com/arpa/hndahesudintocctmsdriver/request/bean/newlj/UpimgBean.java new file mode 100644 index 0000000..d86355e --- /dev/null +++ b/app/src/main/java/com/arpa/hndahesudintocctmsdriver/request/bean/newlj/UpimgBean.java @@ -0,0 +1,118 @@ +package com.arpa.hndahesudintocctmsdriver.request.bean.newlj; + +import com.alct.mdp.model.Image; +import com.arpa.hndahesudintocctmsdriver.bean.GDImage; + +import java.io.Serializable; + +/** + * @ClassName UpimgBean + * @Author john + * @Date 2024/11/25 14:36 + * @Description TODO + */ +public class UpimgBean implements Serializable { + + private String shipmentCode; + private String enterpriseCode; + private GDImage image; + + public String getShipmentCode() { + return shipmentCode; + } + + public void setShipmentCode(String shipmentCode) { + this.shipmentCode = shipmentCode; + } + + public String getEnterpriseCode() { + return enterpriseCode; + } + + public void setEnterpriseCode(String enterpriseCode) { + this.enterpriseCode = enterpriseCode; + } + + public GDImage getImage() { + return image; + } + + public void setImage(GDImage image) { + this.image = image; + } + + public static class ImageDTO { + private String fileName; + private String fileExt; + private double baiduLongitude; + private double baiduLatitude; + private String location; + private String imageTakenDate; + private String time; + private String fileData; + + public String getFileName() { + return fileName; + } + + public void setFileName(String fileName) { + this.fileName = fileName; + } + + public String getFileExt() { + return fileExt; + } + + public void setFileExt(String fileExt) { + this.fileExt = fileExt; + } + + public double getBaiduLongitude() { + return baiduLongitude; + } + + public void setBaiduLongitude(double baiduLongitude) { + this.baiduLongitude = baiduLongitude; + } + + public double getBaiduLatitude() { + return baiduLatitude; + } + + public void setBaiduLatitude(double baiduLatitude) { + this.baiduLatitude = baiduLatitude; + } + + public String getLocation() { + return location; + } + + public void setLocation(String location) { + this.location = location; + } + + public String getImageTakenDate() { + return imageTakenDate; + } + + public void setImageTakenDate(String imageTakenDate) { + this.imageTakenDate = imageTakenDate; + } + + public String getTime() { + return time; + } + + public void setTime(String time) { + this.time = time; + } + + public String getFileData() { + return fileData; + } + + public void setFileData(String fileData) { + this.fileData = fileData; + } + } +} diff --git a/app/src/main/java/com/arpa/hndahesudintocctmsdriver/request/net/Api.java b/app/src/main/java/com/arpa/hndahesudintocctmsdriver/request/net/Api.java index 347df5b..44b6bdc 100644 --- a/app/src/main/java/com/arpa/hndahesudintocctmsdriver/request/net/Api.java +++ b/app/src/main/java/com/arpa/hndahesudintocctmsdriver/request/net/Api.java @@ -4,11 +4,23 @@ package com.arpa.hndahesudintocctmsdriver.request.net; import com.arpa.hndahesudintocctmsdriver.BuildConfig; import com.arpa.hndahesudintocctmsdriver.bean.UserBean; import com.arpa.hndahesudintocctmsdriver.request.bean.LoginRegInputBean; +import com.arpa.hndahesudintocctmsdriver.request.bean.newlj.InvoiceBean; +import com.arpa.hndahesudintocctmsdriver.request.bean.newlj.InvoicesBean; +import com.arpa.hndahesudintocctmsdriver.request.bean.newlj.LjTokenBean; +import com.arpa.hndahesudintocctmsdriver.request.bean.newlj.PickupBean; +import com.arpa.hndahesudintocctmsdriver.request.bean.newlj.ShipmentStatusBean; +import com.arpa.hndahesudintocctmsdriver.request.bean.newlj.UpimgBean; import com.dahe.mylibrary.net.CommonResponseBean; +import java.util.HashMap; + import io.reactivex.rxjava3.core.Observable; +import retrofit2.Call; import retrofit2.http.Body; +import retrofit2.http.GET; import retrofit2.http.POST; +import retrofit2.http.PUT; +import retrofit2.http.Path; import retrofit2.http.Query; /** @@ -17,7 +29,7 @@ import retrofit2.http.Query; public interface Api { - String BASE_URL = BuildConfig.BASE_URL; + String BASE_URL = BuildConfig.isTest? "http://api.kehui56.cn/api/v1/":"https://api.kehui56.com/api/v1/"; //获取版本 @@ -26,5 +38,119 @@ public interface Api { // @POST(BASE_URL+"/common/register") // Observable log(@Body LoginRegInputBean bean); + @POST(BASE_URL+"openapi/enterprises/login") + Observable getToken(@Body LjTokenBean bean); + + @POST(BASE_URL+"openapi/enterprises/login") + Call> getRefreshToken(@Body LjTokenBean bean); + + + /** + * 刷新token + * @return + */ + @POST(BASE_URL+"openapi/enterprises/refresh-token/{refreshToken}") + Observable refreshToken(@Path("refreshToken") String refreshToken); + + /** + * 运单提货 + * @param bean + * @return + */ + @POST(BASE_URL+"openapi/shipments/pickup") + Observable pickup(@Body PickupBean bean); + + + /** + * 运单卸货 + * @param bean + * @return + */ + @POST(BASE_URL+"openapi/shipments/unload") + Observable unload(@Body PickupBean bean); + + + /** + * 运单签收 + * @param bean + * @return + */ + @POST(BASE_URL+"openapi/shipments/sign") + Observable sign(@Body PickupBean bean); + + + /** + * 运单回单 + * @param bean + * @return + */ + @POST(BASE_URL+"openapi/shipments/pod") + Observable pod(@Body PickupBean bean); + + + /** + * 运单提货照片上传 + * @param bean + * @return + */ + @POST(BASE_URL+"openapi/shipments/uploadPickupImage") + Observable uploadPickupImage(@Body UpimgBean bean); + + + /** + * 运单卸货照片上传 + * @param bean + * @return + */ + @POST(BASE_URL+"openapi/shipments/uploadUnloadImage") + Observable uploadUnloadImage(@Body UpimgBean bean); + + + /** + * 运单回单照片上传 + * @param bean + * @return + */ + @POST(BASE_URL+"openapi/shipments/uploadPODImage") + Observable uploadPODImage(@Body UpimgBean bean); + + + /** + * 同意发票申请 + * @param bean + * @return + */ + @PUT(BASE_URL+"openapi/confirmInvoice") + Observable confirmInvoice(@Body InvoiceBean bean); + + /** + * 待同意发票列表获取 + * @param enterpriseCodeParam + * @param driverIdentification + * @param currentPage + * @param pageSize + * @return + */ + @GET(BASE_URL+"openapi/getInvoices") + Observable> getInvoices(@Query("enterpriseCodeParam") String enterpriseCodeParam, + @Query("driverIdentification") String driverIdentification, + @Query("currentPage") int currentPage, + @Query("pageSize") int pageSize); + + + /** + * 获取运单状态 + * @param bean + * @return + */ + @POST(BASE_URL+"/openapi/getShipmentStatus") + Observable getShipmentStatus(@Body ShipmentStatusBean bean); + + @POST(BASE_URL+"/openapi/shipments/getPODImageNames") + Observable getPODImageNames(@Body ShipmentStatusBean bean); + + + @GET(BASE_URL+"/openapi/drivers") + Observable searchDriver(@Query("identityNo") String identityNo); } diff --git a/app/src/main/java/com/arpa/hndahesudintocctmsdriver/request/net/ApiInterceptor.kt b/app/src/main/java/com/arpa/hndahesudintocctmsdriver/request/net/ApiInterceptor.kt new file mode 100644 index 0000000..a6a7a47 --- /dev/null +++ b/app/src/main/java/com/arpa/hndahesudintocctmsdriver/request/net/ApiInterceptor.kt @@ -0,0 +1,114 @@ +package com.arpa.hndahesudintocctmsdriver.request.net + +import okhttp3.Interceptor +import okhttp3.Request +import okio.IOException +import retrofit2.Response +import java.util.concurrent.atomic.AtomicBoolean + +/** + * @ClassName ApiInterceptor + * @Author john + * @Date 2024/11/29 17:05 + * @Description TODO + */ +class ApiInterceptor : Interceptor { + + // 需要验证token的接口的路径集合 +// private val checkTokenInterface = arrayListOf( +// "/example/user/info, +// "/example/user/info/edit" +// ) + + // 是否正在刷新token + // 使用AtomicBoolean,确保多线程中获取的值一致 +// private var refreshingToken = AtomicBoolean(false) +// +// private val authHeaderKey = "token-key" +// +// // 当前token +// private var currentToken = "tokenValue" + + // override fun intercept(chain: Interceptor.Chain): Response { + // 根据接口路径判断是否需要验证token +// val checkToken = checkTokenInterface.contains(chain.request().url.encodedPath) +// // 需要验证token则添加请求头,不需要则保持原样 +// var request = if (checkToken) { +// chain.request().newBuilder() +// .addHeader(authHeaderKey, currentToken) +// .build() +// } else { +// chain.request() +// } +// // 获取响应 +// var response = chain.proceed(request) +// if (checkToken) { +// // 需要验证token,处理响应,判断token是否过期 +// response.body?.let { responseBody -> +// try { +// if (判断token过期的条件) { +// runBlocking { +// // 请求头中的token与currentToken仍然一样则需要刷新token +// // 确保多线程中不会重复刷新 +// if (request.header(authHeaderKey) == currentToken){ +// // 标记为正在刷新token +// if (refreshingToken.compareAndSet(false, true)) { +// refreshToken(chain).takeIf { it.isNotEmpty() && it.isNotBlank() }?.let { newToken -> +// // 保存newToken +// currentToken = newToken +// } +// // 标记为刷新token已结束 +// refreshingToken.set(false) +// } +// } +// // async{}.await()会等待方法块内的代码执行完毕。 +// // 等到refreshingToken为false时才会执行后续代码。 +// if (async { stopRefreshingToken() }.await()) { +// // 携带newToken执行原请求获取响应 +// response = chain.proceed(chain.request().newBuilder() +// .addHeader(authHeaderKey, currentToken) +// .build()) +// } +// } +// } +// } catch (e: Exception) { +// e.printStackTrace() +// } +// } +// } +// // 返回最终的响应结果。 +// // 刷新token也可能失败,此时返回原响应,可以让用户重新登录。 +// return response +// } +// +// private fun refreshToken(chain: Interceptor.Chain): String { +// // 创建刷新token的请求 +// val refreshTokenRequest = Request.Builder() +// .url("refresh token url") +// .addHeader(authHeaderKey, currentToken) +// .get() +// .build() +// return try { +// // 获取响应并解析获得新token +// val refreshTokenResponse = chain.proceed(refreshTokenRequest) +// refreshTokenResponse.token +// } catch (e: IOException) { +// // 失败时返回空字符串 +// "" +// } +// } +// +// private suspend fun stopRefreshingToken(): Boolean { +// return if (refreshingToken.get()) { +// // 仍在刷新token中,延迟1秒后再次执行此方法 +// delay(1000) +// stopRefreshingToken() +// } else { +// true +// } +// } + override fun intercept(chain: Interceptor.Chain): okhttp3.Response { + TODO("Not yet implemented") + } +} + diff --git a/app/src/main/java/com/arpa/hndahesudintocctmsdriver/request/net/BaseObserver.java b/app/src/main/java/com/arpa/hndahesudintocctmsdriver/request/net/BaseObserver.java index 3b8c3db..2ae591a 100644 --- a/app/src/main/java/com/arpa/hndahesudintocctmsdriver/request/net/BaseObserver.java +++ b/app/src/main/java/com/arpa/hndahesudintocctmsdriver/request/net/BaseObserver.java @@ -37,7 +37,7 @@ public class BaseObserver implements Observer> { @Override public void onNext(CommonResponseBean tCommonResponseBean) { - if (200==tCommonResponseBean.getCode()) { + if ("0".equals(tCommonResponseBean.getCode())) { mRxHttpCallBack.onSuccess(tCommonResponseBean); } else { mRxHttpCallBack.onCodeError(mContext, tCommonResponseBean); diff --git a/app/src/main/java/com/arpa/hndahesudintocctmsdriver/request/net/DataManager.java b/app/src/main/java/com/arpa/hndahesudintocctmsdriver/request/net/DataManager.java index d611fa5..0a53ea0 100644 --- a/app/src/main/java/com/arpa/hndahesudintocctmsdriver/request/net/DataManager.java +++ b/app/src/main/java/com/arpa/hndahesudintocctmsdriver/request/net/DataManager.java @@ -2,7 +2,6 @@ package com.arpa.hndahesudintocctmsdriver.request.net; import com.dahe.mylibrary.CommonBaseLibrary; -import com.dahe.mylibrary.net.JsonInterceptor; import java.util.concurrent.TimeUnit; diff --git a/app/src/main/java/com/arpa/hndahesudintocctmsdriver/request/net/JsonInterceptor.java b/app/src/main/java/com/arpa/hndahesudintocctmsdriver/request/net/JsonInterceptor.java new file mode 100644 index 0000000..273b137 --- /dev/null +++ b/app/src/main/java/com/arpa/hndahesudintocctmsdriver/request/net/JsonInterceptor.java @@ -0,0 +1,119 @@ +package com.arpa.hndahesudintocctmsdriver.request.net; + +import static com.dahe.mylibrary.utils.BaseSPUtils.NEW_LJ_TOKEN; + +import android.text.TextUtils; +import android.util.Log; +import com.arpa.hndahesudintocctmsdriver.App; +import com.arpa.hndahesudintocctmsdriver.constant.NewLJConstant; +import com.arpa.hndahesudintocctmsdriver.request.bean.newlj.LjTokenBean; +import com.arpa.hndahesudintocctmsdriver.util.NewLJUtils; +import com.arpa.hndahesudintocctmsdriver.util.SPUtils; +import com.dahe.mylibrary.CommonBaseLibrary; +import com.dahe.mylibrary.net.CommonResponseBean; +import com.dahe.mylibrary.net.ResultException; + +import org.json.JSONObject; + +import java.io.IOException; +import java.nio.charset.Charset; +import java.util.HashMap; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicBoolean; + +import io.reactivex.rxjava3.core.Observable; +import kotlin.jvm.Synchronized; +import okhttp3.Interceptor; +import okhttp3.MediaType; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; +import okhttp3.ResponseBody; +import okio.Buffer; +import okio.BufferedSource; + +/** + * json的Interceptor + */ + +public class JsonInterceptor implements Interceptor { + private static final String TAG = "JsonInterceptor"; + + public JsonInterceptor() { + } + + // 使用AtomicBoolean,确保多线程中获取的值一致 + private AtomicBoolean refreshingToken = new AtomicBoolean(false); + + @Override + public Response intercept(Chain chain) throws IOException { + Request request = chain.request(); + Response response = chain.proceed(request); + ResponseBody responseBody = response.body(); + //为了不消耗buffer,我们这里使用source先获得buffer对象,然后clone()后使用 + BufferedSource source = responseBody.source(); + source.request(Long.MAX_VALUE); // Buffer the entire body. + //获得返回的数据 + Buffer buffer = source.buffer(); + //使用前clone()下,避免直接消耗 + String responseBodyStr = buffer.clone().readString(Charset.forName("UTF-8")); + Log.i(TAG, "result-body= " + responseBodyStr); + try { + + JSONObject jsonObject = new JSONObject(responseBodyStr); + String str = jsonObject.optString("data"); + int code = jsonObject.optInt("code"); + if (401 == code) { + refreshToken(); +// if (execute.body() != null) { +// String refreshToken = execute.body().get("token"); +// SPUtils.put(App.getApp(), NEW_LJ_TOKEN, refreshToken); +// } + response.close(); + try { + return chain.proceed(request); + } catch (IOException e) { + e.printStackTrace(); + } + + } + + if (-1 == code) { + jsonObject.put("data", new JSONObject()); + throw new ResultException(); + } else { + if (TextUtils.isEmpty(str)) { + jsonObject.put("data", new JSONObject()); + } + } + + String data = jsonObject.toString(); + responseBody = ResponseBody.create(MediaType.parse("application/json; charset=utf-8"), data); + } catch (Exception e) { + e.printStackTrace(); + } + response = response.newBuilder().body(responseBody).build(); + return response; + } + + @Synchronized + private void refreshToken() throws IOException { + Api api = CommonBaseLibrary.getRetrofit().newBuilder() + .client(new OkHttpClient.Builder() + .connectTimeout(30, TimeUnit.SECONDS) + .readTimeout(30, TimeUnit.SECONDS) + .writeTimeout(30, TimeUnit.SECONDS) + .build()) +// .addNetworkInterceptor(new TokenInterceptor()) + .build().create(Api.class); + LjTokenBean ljTokenBean = new LjTokenBean(); + ljTokenBean.setEnterpriseCode(NewLJConstant.ENTER_PRISE_CODE); + ljTokenBean.setEnterpriseIdentity(NewLJConstant.ENTER_PRISE_IDENTITY); + ljTokenBean.setEnterpriseKey(NewLJConstant.ENTER_PRISE_KEY); + retrofit2.Response> execute = api.getRefreshToken(ljTokenBean).execute(); + if (execute.body() != null) { + String refreshToken = execute.body().get("token"); + SPUtils.put(App.getApp(), NEW_LJ_TOKEN, refreshToken); + } + } +} diff --git a/app/src/main/java/com/arpa/hndahesudintocctmsdriver/request/net/RequestHeadInterceptor.java b/app/src/main/java/com/arpa/hndahesudintocctmsdriver/request/net/RequestHeadInterceptor.java index 29d6e3f..6b2d228 100644 --- a/app/src/main/java/com/arpa/hndahesudintocctmsdriver/request/net/RequestHeadInterceptor.java +++ b/app/src/main/java/com/arpa/hndahesudintocctmsdriver/request/net/RequestHeadInterceptor.java @@ -1,5 +1,7 @@ package com.arpa.hndahesudintocctmsdriver.request.net; +import static com.dahe.mylibrary.utils.BaseSPUtils.NEW_LJ_TOKEN; + import android.text.TextUtils; import android.util.Log; @@ -27,9 +29,10 @@ public class RequestHeadInterceptor implements Interceptor { @Override public Response intercept(Chain chain) throws IOException { Request.Builder builder = chain.request().newBuilder(); - if (!TextUtils.isEmpty(SPUtil.getSP(App.getApp(), LoginActivity.USER,LoginActivity.USER_TOKEN))) { + String token = SPUtils.get(App.getApp(), NEW_LJ_TOKEN, "").toString(); + if (!TextUtils.isEmpty(token)) { // builder.addHeader("Authorization", SPUtils.getUserInfo(App.getApp()).getToken()); - builder.addHeader("Authorization", SPUtil.getSP(App.getApp(), LoginActivity.USER,LoginActivity.USER_TOKEN)); + builder.addHeader("token", token); } Request request = builder .addHeader("versionCode", AppUtils.getAppVersionCode() + "") diff --git a/app/src/main/java/com/arpa/hndahesudintocctmsdriver/request/net/RxHttpCallBack.java b/app/src/main/java/com/arpa/hndahesudintocctmsdriver/request/net/RxHttpCallBack.java index d126c97..024c9aa 100644 --- a/app/src/main/java/com/arpa/hndahesudintocctmsdriver/request/net/RxHttpCallBack.java +++ b/app/src/main/java/com/arpa/hndahesudintocctmsdriver/request/net/RxHttpCallBack.java @@ -11,6 +11,7 @@ import android.view.Window; import com.arpa.hndahesudintocctmsdriver.ui.MainActivity; import com.arpa.hndahesudintocctmsdriver.ui.UiAuxiliary; import com.arpa.hndahesudintocctmsdriver.ui.login.LoginActivity; +import com.arpa.hndahesudintocctmsdriver.util.NewLJUtils; import com.dahe.mylibrary.net.CommonResponseBean; import com.dahe.mylibrary.net.ResultException; import com.dahe.mylibrary.utils.ToastUtils; @@ -86,14 +87,15 @@ public abstract class RxHttpCallBack { dialog.dismiss(); } - if (t.getCode() == 401) { - UiAuxiliary.delLogin(mContext); - Intent intent = new Intent(mContext, MainActivity.class); - intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); - mContext.startActivity(intent); - ToastUtils.showToast(mContext,"您的账号再异地登录,请重新登录"); + if ("401".equals(t.getCode())) { +// NewLJUtils.getInstance().refreshToken(mContext); +// UiAuxiliary.delLogin(mContext); +// Intent intent = new Intent(mContext, MainActivity.class); +// intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); +// mContext.startActivity(intent); +// ToastUtils.showToast(mContext,"您的账号再异地登录,请重新登录"); }else{ - ToastUtils.showToast(mContext,t.getMsg()); +// ToastUtils.showToast(mContext,t.getMessage()); } // if (t.getMessage().getMsg_code() == 100 && SPUtils.hasUserInfo(mContext)) { diff --git a/app/src/main/java/com/arpa/hndahesudintocctmsdriver/ui/home/HomeFragment.java b/app/src/main/java/com/arpa/hndahesudintocctmsdriver/ui/home/HomeFragment.java index 417b067..24ddba3 100644 --- a/app/src/main/java/com/arpa/hndahesudintocctmsdriver/ui/home/HomeFragment.java +++ b/app/src/main/java/com/arpa/hndahesudintocctmsdriver/ui/home/HomeFragment.java @@ -460,6 +460,7 @@ public class HomeFragment extends BaseFragment { }); btn_update.setOnClickListener(v -> { getRequest(); + refreshWaybills(); }); home_top.setOnClickListener(v -> { if (!UiAuxiliary.isLogin(con)) { @@ -520,6 +521,7 @@ public class HomeFragment extends BaseFragment { Log.e("下拉刷新", "pps"); keys = true; getRequest(); + refreshWaybills(); }); } @@ -784,6 +786,7 @@ public class HomeFragment extends BaseFragment { */ public void initMap() { getRequest(); + refreshWaybills(); } private CustomDialog customDialog; @@ -796,18 +799,18 @@ public class HomeFragment extends BaseFragment { // customDialog=new CustomDialog(con,"加载中..."); // customDialog.show(); ur.upApp(); - hyr.getHuoYuan(1, 100); +// hyr.getHuoYuan(1, 100); ur.getImage(1); WalletRequest qr = new WalletRequest(con, hd); if (UiAuxiliary.isLogin(con)) { - int curWaybillId = (int) SPUtils.get(con, "curWaybillId", -1); +// int curWaybillId = (int) SPUtils.get(con, "curWaybillId", -1); ur.User(); // if (!OneDayShowUtils.getInstance().todayIsShow(con)) { // qr.getBankCardList(); // } ur.getDriverExpire(); - hyr.startOrder(curWaybillId == -1 ? 0 : curWaybillId); +// hyr.startOrder(curWaybillId == -1 ? 0 : curWaybillId); // hyr.startOrder(0); //获取权限 应用市场审核不通过 ur.driverAuthData(); @@ -1177,6 +1180,7 @@ public class HomeFragment extends BaseFragment { .permissions(Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.ACCESS_FINE_LOCATION, + Manifest.permission.ACCESS_BACKGROUND_LOCATION, Manifest.permission.CAMERA, Manifest.permission.ACCESS_COARSE_LOCATION) .request((allGranted, grantedList, deniedList) -> { @@ -1300,26 +1304,29 @@ public class HomeFragment extends BaseFragment { @Override public void onStart() { super.onStart(); +// ToastUtils.showToast(con,"onstart"); +// refreshLayout.autoRefresh(); refreshWaybills(); } private void refreshWaybills() { -// if (UiAuxiliary.isLogin(con)) { -// int curWaybillId = (int) SPUtils.get(con, "curWaybillId", -1); -// hyr.startOrder(curWaybillId == -1 ? 0 : curWaybillId); -// } + hyr.getHuoYuan(1, 100); + if (UiAuxiliary.isLogin(con)) { + int curWaybillId = (int) SPUtils.get(con, "curWaybillId", -1); + hyr.startOrder(curWaybillId == -1 ? 0 : curWaybillId); + } } @Subscribe public void processResult(HomeWaybillEvent home) { - if (home.getMessage() == 1) { - int curWaybillId = (int) SPUtils.get(con, "curWaybillId", -1); - hyr.startOrder(curWaybillId == -1 ? 0 : curWaybillId); - hyr.getHuoYuan(1, 100); - } else { - int curWaybillId = (int) SPUtils.get(con, "curWaybillId", -1); - hyr.startOrder(curWaybillId == -1 ? 0 : curWaybillId); - } +// if (home.getMessage() == 1) { +// int curWaybillId = (int) SPUtils.get(con, "curWaybillId", -1); +// hyr.startOrder(curWaybillId == -1 ? 0 : curWaybillId); +// hyr.getHuoYuan(1, 100); +// } else { +// int curWaybillId = (int) SPUtils.get(con, "curWaybillId", -1); +// hyr.startOrder(curWaybillId == -1 ? 0 : curWaybillId); +// } } diff --git a/app/src/main/java/com/arpa/hndahesudintocctmsdriver/ui/home/shangchuan/ShangChuangImgActivity.java b/app/src/main/java/com/arpa/hndahesudintocctmsdriver/ui/home/shangchuan/ShangChuangImgActivity.java index a4f7a90..387513c 100644 --- a/app/src/main/java/com/arpa/hndahesudintocctmsdriver/ui/home/shangchuan/ShangChuangImgActivity.java +++ b/app/src/main/java/com/arpa/hndahesudintocctmsdriver/ui/home/shangchuan/ShangChuangImgActivity.java @@ -27,6 +27,8 @@ import com.alct.mdp.model.Location; import com.alct.mdp.model.ShipmentStatusEnum; import com.arpa.hndahesudintocctmsdriver.BuildConfig; import com.arpa.hndahesudintocctmsdriver.bean.CarInfoBean; +import com.arpa.hndahesudintocctmsdriver.bean.GDImage; +import com.arpa.hndahesudintocctmsdriver.bean.GDLocation; import com.arpa.hndahesudintocctmsdriver.bean.WaybillStatusBean; import com.arpa.hndahesudintocctmsdriver.event.HomeWaybillEvent; import com.arpa.hndahesudintocctmsdriver.report.JTTProcess; @@ -35,6 +37,7 @@ import com.arpa.hndahesudintocctmsdriver.request.bean.TrackInputBean; import com.arpa.hndahesudintocctmsdriver.ui.MainActivity; import com.arpa.hndahesudintocctmsdriver.util.BitmapUtil; import com.arpa.hndahesudintocctmsdriver.util.MessageUtils; +import com.arpa.hndahesudintocctmsdriver.util.NewLJUtils; import com.arpa.hndahesudintocctmsdriver.util.NfcUtils; import com.arpa.hndahesudintocctmsdriver.util.SPUtils; import com.arpa.hndahesudintocctmsdriver.util.alert.ToastUtil; @@ -43,6 +46,8 @@ import com.arpa.hndahesudintocctmsdriver.util.location.LocationUtil; import com.baidu.mapapi.model.LatLng; import com.baidu.mapapi.utils.CoordinateConverter; import com.bumptech.glide.Glide; +import com.dahe.mylibrary.callback.OnGDDownloadResultListener; +import com.dahe.mylibrary.callback.OnGDResultListener; import com.dahe.mylibrary.utils.ActivityUtils; import com.dahe.mylibrary.utils.ImageLoader; import com.dahe.mylibrary.utils.ToastUtils; @@ -134,6 +139,7 @@ public class ShangChuangImgActivity extends BaseAppCompatActivity { } CacheGroup.cacheList.remove("upload"); } + if (CacheGroup.cacheList.get("genzong") != null) { BaseBean bb = gson.fromJson(CacheGroup.cacheList.get("genzong"), BaseBean.class); if (bb.getCode() == 200) { @@ -143,6 +149,7 @@ public class ShangChuangImgActivity extends BaseAppCompatActivity { } CacheGroup.cacheList.remove("genzong"); } + if (CacheGroup.cacheList.get("waybillStatus") != null) { if (!isFinishing() && customDialog != null && customDialog.isShowing()) { customDialog.dismiss(); @@ -474,30 +481,54 @@ public class ShangChuangImgActivity extends BaseAppCompatActivity { Log.e("--装货信息", gson.toJson(lub)); if (locationKey) {//高德定位 if (keys) { - MDPLocationCollectionManager.getShipmentStatus(con, sob.getData().getShippingNoteNumber(), new OnDownloadResultListener() { - @Override - public void onSuccess(Object o) { - String string = o.toString(); - if (string.equals("PICKUPED")) {//安联装货,单平台未装货 + NewLJUtils.getInstance().getShipmentStatus(con, sob.getData().getShippingNoteNumber(), new OnGDDownloadResultListener() { + @Override + public void onSuccess(String var1) { + String string = var1; + if (string.equals("30")) {//安联装货,单平台未装货 isFinish = true; //平台确认装货 hyr.loading(lub); } else { - nfc(); +// nfc(); loadInfo(); } - upLocation(lgdu.getLatitude()+"",lgdu.getLongitude()+"",sob.getData().getShippingNoteNumber()); + upLocation(lgdu.getLatitude() + "", lgdu.getLongitude() + "",sob.getData().getShippingNoteNumber()); +// NewLJUtils.getInstance().startLocationService(ShangChuangImgActivity.this); } @Override - public void onFailure(String s, String s1) { + public void onFailure(String var1, String var2) { if (!isFinishing() && customDialog != null && customDialog.isShowing()) { customDialog.dismiss(); } - ToastUtils.showToast(con, s1); + ToastUtils.showToast(con, var2); } }); +// MDPLocationCollectionManager.getShipmentStatus(con, sob.getData().getShippingNoteNumber(), new OnDownloadResultListener() { +// @Override +// public void onSuccess(Object o) { +// +// String string = o.toString(); +// if (string.equals("PICKUPED")) {//安联装货,单平台未装货 +// isFinish = true; +// //平台确认装货 +// hyr.loading(lub); +// } else { +// nfc(); +// loadInfo(); +// } +// } +// +// @Override +// public void onFailure(String s, String s1) { +// if (!isFinishing() && customDialog != null && customDialog.isShowing()) { +// customDialog.dismiss(); +// } +// ToastUtils.showToast(con, s1); +// } +// }); // nfc(); @@ -530,10 +561,11 @@ public class ShangChuangImgActivity extends BaseAppCompatActivity { Log.e("--卸货信息", gson.toJson(lub)); if (locationKey) { if (keys) { - MDPLocationCollectionManager.getShipmentStatus(con, sob.getData().getShippingNoteNumber(), new OnDownloadResultListener() { + + NewLJUtils.getInstance().getShipmentStatus(con, sob.getData().getShippingNoteNumber(), new OnGDDownloadResultListener() { @Override - public void onSuccess(Object o) { - if (o.toString().equals("UNLOADED")) {//安联装货,单平台未装货 + public void onSuccess(String var1) { + if (var1.equals("40")) {//安联装货,单平台未装货 //卸货状态-平台 isFinish = true; hyr.dischargeCargo(lub); @@ -541,18 +573,41 @@ public class ShangChuangImgActivity extends BaseAppCompatActivity { nfc(); uploadInfo(); } - upLocation(lgdu.getLatitude()+"",lgdu.getLongitude()+"",sob.getData().getShippingNoteNumber()); + upLocation(lgdu.getLatitude() + "", lgdu.getLongitude() + "",sob.getData().getShippingNoteNumber()); +// NewLJUtils.getInstance().stopLocationService(); } @Override - public void onFailure(String s, String s1) { + public void onFailure(String var1, String var2) { if (!isFinishing() && customDialog != null && customDialog.isShowing()) { customDialog.dismiss(); } - ToastUtils.showToast(con, s1); + ToastUtils.showToast(con, var2); } }); +// MDPLocationCollectionManager.getShipmentStatus(con, sob.getData().getShippingNoteNumber(), new OnDownloadResultListener() { +// @Override +// public void onSuccess(Object o) { +// if (o.toString().equals("UNLOADED")) {//安联装货,单平台未装货 +// //卸货状态-平台 +// isFinish = true; +// hyr.dischargeCargo(lub); +// } else { +// nfc(); +// uploadInfo(); +// } +// } +// +// @Override +// public void onFailure(String s, String s1) { +// if (!isFinishing() && customDialog != null && customDialog.isShowing()) { +// customDialog.dismiss(); +// } +// ToastUtils.showToast(con, s1); +// } +// }); + // nfc(); // uploadInfo(); @@ -589,8 +644,8 @@ public class ShangChuangImgActivity extends BaseAppCompatActivity { if (locationKey) { if (index == 2 && keys) { up_trafficSign(); - up_trafficReceipt(); - receipt_image(); +// up_trafficReceipt(); +// receipt_image(); } hyr.receipt(urib); } else { @@ -637,7 +692,7 @@ public class ShangChuangImgActivity extends BaseAppCompatActivity { //上传安联-签收 public void up_trafficSign() { //安联 - Location l = new Location(); + GDLocation l = new GDLocation(); l.setBaiduLongitude(latLng.longitude); l.setBaiduLatitude(latLng.latitude); l.setLocation(lgdu.getAddress()); @@ -661,56 +716,86 @@ public class ShangChuangImgActivity extends BaseAppCompatActivity { } } } - MDPLocationCollectionManager.sign(con, sob.getData().getShippingNoteNumber(), l, gs, new com.alct.mdp.callback.OnResultListener() { + + NewLJUtils.getInstance().sign(con, sob.getData().getShippingNoteNumber(), l, new OnGDResultListener() { @Override public void onSuccess() { + NewLJUtils.getInstance().stopLocationService(); + up_trafficReceipt(); + receipt_image(); Log.e("上报安联", "签收成功"); } @Override - public void onFailure(String s, String s1) { - Log.e("上报安联失败(签收):", s + s1); + public void onFailure(String var1, String var2) { + Log.e("上报安联失败(签收):", var1 + var2); } }); +// MDPLocationCollectionManager.sign(con, sob.getData().getShippingNoteNumber(), l, gs, new com.alct.mdp.callback.OnResultListener() { +// @Override +// public void onSuccess() { +// Log.e("上报安联", "签收成功"); +// } +// +// @Override +// public void onFailure(String s, String s1) { +// Log.e("上报安联失败(签收):", s + s1); +// } +// }); } //上传安联-回单 public void up_trafficReceipt() { //安联 - Location l = new Location(); + GDLocation l = new GDLocation(); l.setBaiduLongitude(latLng.longitude); l.setBaiduLatitude(latLng.latitude); l.setLocation(lgdu.getAddress()); l.setTime(Timer.getTimerT()); - MDPLocationCollectionManager.pod(con, sob.getData().getShippingNoteNumber(), l, new com.alct.mdp.callback.OnResultListener() { + NewLJUtils.getInstance().pod(con, sob.getData().getShippingNoteNumber(), l, new OnGDResultListener() { @Override public void onSuccess() { Log.e("上报安联", "回单上传成功"); } @Override - public void onFailure(String s, String s1) { - Log.e("上报安联失败(回单):", s + s1); + public void onFailure(String var1, String var2) { + Log.e("上报安联失败(回单):", var1 + var2); } - }); +// MDPLocationCollectionManager.pod(con, sob.getData().getShippingNoteNumber(), l, new com.alct.mdp.callback.OnResultListener() { +// +// @Override +// public void onSuccess() { +// Log.e("上报安联", "回单上传成功"); +// } +// +// @Override +// public void onFailure(String s, String s1) { +// Log.e("上报安联失败(回单):", s + s1); +// } +// +// }); } public void up_image_z() { ///storage/emulated/0/Android/data/com.oneclouds.wangluohuoyun/files/Pictures/163124593063154.jpg File file = new File(path); - Image image = new Image(); + GDImage image = new GDImage(); String base = BitmapUtil.imageToBase64(path); image.setFileData("data:image/" + FileUtil.lastName(file) + ";base64," + base); image.setFileExt(FileUtil.lastName(file)); image.setFileName(FileUtil.fileName(file)); image.setImageTakenDate(Timer.getTimerT()); + image.setTime(Timer.getTimerT()); image.setBaiduLongitude(latLng.longitude); image.setBaiduLatitude(latLng.latitude); image.setLocation(lgdu.getAddress()); - MDPLocationCollectionManager.uploadPickupImage(con, sob.getData().getShippingNoteNumber(), image, new com.alct.mdp.callback.OnResultListener() { + String json = new Gson().toJson(image); + + NewLJUtils.getInstance().uploadPickupImage(con, sob.getData().getShippingNoteNumber(), image, new OnGDResultListener() { @Override public void onSuccess() { if (!isFinishing() && customDialog != null && customDialog.isShowing()) { @@ -723,30 +808,50 @@ public class ShangChuangImgActivity extends BaseAppCompatActivity { } @Override - public void onFailure(String s, String s1) { - Log.e("上报安联失败(装货照片):", s + s1); -// SPUtil.insSP(con,"make","装货",sob.getData().getShippingNoteNumber()); -// SPUtil.insSP(con,"make","装货-"+sob.getData().getShippingNoteNumber(),gson.toJson(image)); -// Intent serviceIn=new Intent(con, MakeUpAlService.class); -// startService(serviceIn); + public void onFailure(String var1, String var2) { + Log.e("上报安联失败(装货照片):", var1 + var2); } - }); + +// MDPLocationCollectionManager.uploadPickupImage(con, sob.getData().getShippingNoteNumber(), image, new com.alct.mdp.callback.OnResultListener() { +// +// @Override +// public void onSuccess() { +// if (!isFinishing() && customDialog != null && customDialog.isShowing()) { +// customDialog.dismiss(); +// } +// EventBus.getDefault().post(new HomeWaybillEvent()); +// Log.e("上报安联", "装货照片上传成功"); +// Toast.makeText(con, "上传成功", Toast.LENGTH_SHORT).show(); +// finish(); +// } +// +// @Override +// public void onFailure(String s, String s1) { +// Log.e("上报安联失败(装货照片):", s + s1); +//// SPUtil.insSP(con,"make","装货",sob.getData().getShippingNoteNumber()); +//// SPUtil.insSP(con,"make","装货-"+sob.getData().getShippingNoteNumber(),gson.toJson(image)); +//// Intent serviceIn=new Intent(con, MakeUpAlService.class); +//// startService(serviceIn); +// } +// +// }); } public void up_image() { File file = new File(path); - Image image = new Image(); + GDImage image = new GDImage(); String base = BitmapUtil.imageToBase64(path); image.setFileData("data:image/" + FileUtil.lastName(file) + ";base64," + base); image.setFileExt(FileUtil.lastName(file)); image.setFileName(FileUtil.fileName(file)); image.setImageTakenDate(Timer.getTimerT()); + image.setTime(Timer.getTimerT()); image.setBaiduLongitude(latLng.longitude); image.setBaiduLatitude(latLng.latitude); image.setLocation(lgdu.getAddress()); - MDPLocationCollectionManager.uploadUnloadImage(con, sob.getData().getShippingNoteNumber(), image, new com.alct.mdp.callback.OnResultListener() { + NewLJUtils.getInstance().uploadUnloadImage(con, sob.getData().getShippingNoteNumber(), image, new OnGDResultListener() { @Override public void onSuccess() { if (!isFinishing() && customDialog != null && customDialog.isShowing()) { @@ -759,34 +864,56 @@ public class ShangChuangImgActivity extends BaseAppCompatActivity { } @Override - public void onFailure(String s, String s1) { - Log.e("上报安联失败(卸货照片):", s + s1); + public void onFailure(String var1, String var2) { + Log.e("上报安联失败(卸货照片):", var1 + var2); if (!isFinishing() && customDialog != null && customDialog.isShowing()) { customDialog.dismiss(); } -// SPUtil.insSP(con,"make","卸货",sob.getData().getShippingNoteNumber()); -// SPUtil.insSP(con,"make","卸货-"+sob.getData().getShippingNoteNumber(),gson.toJson(image)); -// Intent serviceIn=new Intent(con, MakeUpAlService.class); -// startService(serviceIn); } - }); +// MDPLocationCollectionManager.uploadUnloadImage(con, sob.getData().getShippingNoteNumber(), image, new com.alct.mdp.callback.OnResultListener() { +// +// @Override +// public void onSuccess() { +// if (!isFinishing() && customDialog != null && customDialog.isShowing()) { +// customDialog.dismiss(); +// } +// EventBus.getDefault().post(new HomeWaybillEvent()); +// Log.e("上报安联", "卸货照片上传成功"); +// Toast.makeText(con, "上传成功", Toast.LENGTH_SHORT).show(); +// finish(); +// } +// +// @Override +// public void onFailure(String s, String s1) { +// Log.e("上报安联失败(卸货照片):", s + s1); +// if (!isFinishing() && customDialog != null && customDialog.isShowing()) { +// customDialog.dismiss(); +// } +//// SPUtil.insSP(con,"make","卸货",sob.getData().getShippingNoteNumber()); +//// SPUtil.insSP(con,"make","卸货-"+sob.getData().getShippingNoteNumber(),gson.toJson(image)); +//// Intent serviceIn=new Intent(con, MakeUpAlService.class); +//// startService(serviceIn); +// } +// +// }); } public void receipt_image() { ///storage/emulated/0/Android/data/com.oneclouds.wangluohuoyun/files/Pictures/163124593063154.jpg File file = new File(path); - Image image = new Image(); + GDImage image = new GDImage(); String base = BitmapUtil.imageToBase64(path); image.setFileData("data:image/" + FileUtil.lastName(file) + ";base64," + base); image.setFileExt(FileUtil.lastName(file)); image.setFileName(FileUtil.fileName(file)); image.setImageTakenDate(Timer.getTimerT()); + image.setTime(Timer.getTimerT()); image.setBaiduLongitude(latLng.longitude); image.setBaiduLatitude(latLng.latitude); image.setLocation(lgdu.getAddress()); - MDPLocationCollectionManager.uploadPODImage(con, sob.getData().getShippingNoteNumber(), image, new com.alct.mdp.callback.OnResultListener() { + NewLJUtils.getInstance().uploadPODImage(con, sob.getData().getShippingNoteNumber(), image, new OnGDResultListener() { @Override public void onSuccess() { if (!isFinishing() && customDialog != null && customDialog.isShowing()) { @@ -800,15 +927,34 @@ public class ShangChuangImgActivity extends BaseAppCompatActivity { } @Override - public void onFailure(String s, String s1) { - Log.e("上报安联失败(回单照片):", s + s1); -// SPUtil.insSP(con,"make","回单",sob.getData().getShippingNoteNumber()); -//// SPUtil.insSP(con,"make","回单-"+sob.getData().getShippingNoteNumber(),gson.toJson(image)); -//// Intent serviceIn=new Intent(con, MakeUpAlService.class); -//// startService(serviceIn); + public void onFailure(String var1, String var2) { + Log.e("上报安联失败(回单照片):", var1 + var2); } - }); +// MDPLocationCollectionManager.uploadPODImage(con, sob.getData().getShippingNoteNumber(), image, new com.alct.mdp.callback.OnResultListener() { +// +// @Override +// public void onSuccess() { +// if (!isFinishing() && customDialog != null && customDialog.isShowing()) { +// customDialog.dismiss(); +// } +// SPUtils.remove(con, "curWaybillId"); +// EventBus.getDefault().post(new HomeWaybillEvent()); +// Log.e("上报安联", "回单照片上传成功"); +// Toast.makeText(con, "上传成功", Toast.LENGTH_SHORT).show(); +// finish(); +// } +// +// @Override +// public void onFailure(String s, String s1) { +// Log.e("上报安联失败(回单照片):", s + s1); +//// SPUtil.insSP(con,"make","回单",sob.getData().getShippingNoteNumber()); +////// SPUtil.insSP(con,"make","回单-"+sob.getData().getShippingNoteNumber(),gson.toJson(image)); +////// Intent serviceIn=new Intent(con, MakeUpAlService.class); +////// startService(serviceIn); +// } +// +// }); } @Override @@ -847,12 +993,13 @@ public class ShangChuangImgActivity extends BaseAppCompatActivity { private void loadInfo() { //安联 if (sob.getData().getReportAlct() == 1) { - Location l = new Location(); + GDLocation l = new GDLocation(); l.setBaiduLongitude(latLng.longitude); l.setBaiduLatitude(latLng.latitude); l.setLocation(lgdu.getAddress()); l.setTime(Timer.getTimerT()); - MDPLocationCollectionManager.pickup(con, sob.getData().getShippingNoteNumber(), l, new com.alct.mdp.callback.OnResultListener() { + + NewLJUtils.getInstance().pickUp(con, sob.getData().getShippingNoteNumber(), l, new OnGDResultListener() { @Override public void onSuccess() { Log.e("上报安联", "装货上传成功"); @@ -860,6 +1007,7 @@ public class ShangChuangImgActivity extends BaseAppCompatActivity { if (sob.getData().getReport() == 1) { JTTProcess.start(con, sob, ""); } + NewLJUtils.getInstance().startLocationService(ShangChuangImgActivity.this); //装货状态 hyr.loading(lub); //装货照片 @@ -867,14 +1015,39 @@ public class ShangChuangImgActivity extends BaseAppCompatActivity { } @Override - public void onFailure(String s, String s1) { - Log.e("上报安联失败(装货):", s + s1); + public void onFailure(String var1, String var2) { + Log.e("上报安联失败(装货):", var1 + var2); if (!isFinishing() && customDialog != null && customDialog.isShowing()) { customDialog.dismiss(); } - new MessageUtils().showCenMessage(con, s1); + new MessageUtils().showCenMessage(con, var2); } }); + + +// MDPLocationCollectionManager.pickup(con, sob.getData().getShippingNoteNumber(), l, new com.alct.mdp.callback.OnResultListener() { +// @Override +// public void onSuccess() { +// Log.e("上报安联", "装货上传成功"); +// //交通厅 +// if (sob.getData().getReport() == 1) { +// JTTProcess.start(con, sob, ""); +// } +// //装货状态 +// hyr.loading(lub); +// //装货照片 +// up_image_z(); +// } +// +// @Override +// public void onFailure(String s, String s1) { +// Log.e("上报安联失败(装货):", s + s1); +// if (!isFinishing() && customDialog != null && customDialog.isShowing()) { +// customDialog.dismiss(); +// } +// new MessageUtils().showCenMessage(con, s1); +// } +// }); } } @@ -886,13 +1059,14 @@ public class ShangChuangImgActivity extends BaseAppCompatActivity { //安联 if (sob.getData().getReportAlct() == 1) { - Location l = new Location(); + GDLocation l = new GDLocation(); l.setBaiduLongitude(latLng.longitude); l.setBaiduLatitude(latLng.latitude); l.setLocation(lgdu.getAddress()); l.setTime(Timer.getTimerT()); Log.e("-安联卸货信息-", gson.toJson(l)); - MDPLocationCollectionManager.unload(con, sob.getData().getShippingNoteNumber(), l, new com.alct.mdp.callback.OnResultListener() { + + NewLJUtils.getInstance().unload(con, sob.getData().getShippingNoteNumber(), l, new OnGDResultListener() { @Override public void onSuccess() { Log.e("上报安联", "卸货上传成功"); @@ -900,6 +1074,7 @@ public class ShangChuangImgActivity extends BaseAppCompatActivity { if (sob.getData().getReport() == 1) { JTTProcess.stop(con, sob, ""); } + //卸货状态-平台 hyr.dischargeCargo(lub); //卸货照片-安联 @@ -907,14 +1082,37 @@ public class ShangChuangImgActivity extends BaseAppCompatActivity { } @Override - public void onFailure(String s, String s1) { - Log.e("上报安联失败(卸货):", s + s1); + public void onFailure(String var1, String var2) { + Log.e("上报安联失败(卸货):", var1 + var2); if (!isFinishing() && customDialog != null && customDialog.isShowing()) { customDialog.dismiss(); } - new MessageUtils().showCenMessage(con, s1); + new MessageUtils().showCenMessage(con, var2); } }); +// MDPLocationCollectionManager.unload(con, sob.getData().getShippingNoteNumber(), l, new com.alct.mdp.callback.OnResultListener() { +// @Override +// public void onSuccess() { +// Log.e("上报安联", "卸货上传成功"); +// //交通厅 +// if (sob.getData().getReport() == 1) { +// JTTProcess.stop(con, sob, ""); +// } +// //卸货状态-平台 +// hyr.dischargeCargo(lub); +// //卸货照片-安联 +// up_image(); +// } +// +// @Override +// public void onFailure(String s, String s1) { +// Log.e("上报安联失败(卸货):", s + s1); +// if (!isFinishing() && customDialog != null && customDialog.isShowing()) { +// customDialog.dismiss(); +// } +// new MessageUtils().showCenMessage(con, s1); +// } +// }); } diff --git a/app/src/main/java/com/arpa/hndahesudintocctmsdriver/ui/login/LoginActivity.java b/app/src/main/java/com/arpa/hndahesudintocctmsdriver/ui/login/LoginActivity.java index 1ebd42d..e35b971 100644 --- a/app/src/main/java/com/arpa/hndahesudintocctmsdriver/ui/login/LoginActivity.java +++ b/app/src/main/java/com/arpa/hndahesudintocctmsdriver/ui/login/LoginActivity.java @@ -32,6 +32,7 @@ import com.arpa.hndahesudintocctmsdriver.request.net.BaseObserver; import com.arpa.hndahesudintocctmsdriver.request.net.DataManager; import com.arpa.hndahesudintocctmsdriver.request.net.RxHttpCallBack; import com.arpa.hndahesudintocctmsdriver.ui.web.WebOnlyOneActivity; +import com.arpa.hndahesudintocctmsdriver.util.NewLJUtils; import com.arpa.hndahesudintocctmsdriver.util.alert.CustomDialog; import com.arpa.hndahesudintocctmsdriver.weight.OnLimitClickHelper; import com.dahe.mylibrary.net.CommonResponseBean; @@ -108,6 +109,8 @@ public class LoginActivity extends BaseActivity { Log.e("--登录信息--", new Gson().toJson(loginBean)); AppInfoBean appInfoBean = new AppInfoBean(); if (loginBean.getCode() == 200) { + //获取新路交token + NewLJUtils.getInstance().getToken(con); SPUtil.insSP(con, USER, USER_TOKEN, loginBean.getData().getToken()); SPUtil.insSP(con, USER, USER_UNAME, loginBean.getData().getUname()); SPUtil.insSP(con, USER, USER_RNAME, loginBean.getData().getRname()); diff --git a/app/src/main/java/com/arpa/hndahesudintocctmsdriver/util/NewLJUtils.java b/app/src/main/java/com/arpa/hndahesudintocctmsdriver/util/NewLJUtils.java new file mode 100644 index 0000000..a18b076 --- /dev/null +++ b/app/src/main/java/com/arpa/hndahesudintocctmsdriver/util/NewLJUtils.java @@ -0,0 +1,764 @@ +package com.arpa.hndahesudintocctmsdriver.util; + +import static com.dahe.mylibrary.utils.BaseSPUtils.NEW_LJ_TOKEN; + +import android.content.Context; +import android.os.Handler; +import android.text.TextUtils; +import android.util.Log; +import android.widget.Toast; + +import androidx.appcompat.app.AppCompatActivity; + +import com.arpa.hndahesudintocctmsdriver.App; +import com.arpa.hndahesudintocctmsdriver.BuildConfig; +import com.arpa.hndahesudintocctmsdriver.bean.DriverAuthDataBean; +import com.arpa.hndahesudintocctmsdriver.bean.GDImage; +import com.arpa.hndahesudintocctmsdriver.bean.GDLocation; +import com.arpa.hndahesudintocctmsdriver.bean.IsAuthCardBean; +import com.arpa.hndahesudintocctmsdriver.constant.NewLJConstant; +import com.arpa.hndahesudintocctmsdriver.parts.AuthParts; +import com.arpa.hndahesudintocctmsdriver.request.AuthRequest; +import com.arpa.hndahesudintocctmsdriver.request.bean.newlj.InvoiceBean; +import com.arpa.hndahesudintocctmsdriver.request.bean.newlj.InvoicesBean; +import com.arpa.hndahesudintocctmsdriver.request.bean.newlj.LjTokenBean; +import com.arpa.hndahesudintocctmsdriver.request.bean.newlj.PickupBean; +import com.arpa.hndahesudintocctmsdriver.request.bean.newlj.ShipmentStatusBean; +import com.arpa.hndahesudintocctmsdriver.request.bean.newlj.UpimgBean; +import com.arpa.hndahesudintocctmsdriver.request.net.BaseObserver; +import com.arpa.hndahesudintocctmsdriver.request.net.DataManager; +import com.arpa.hndahesudintocctmsdriver.request.net.RxHttpCallBack; +import com.arpa.hndahesudintocctmsdriver.ui.auth.CertificatesActivity; +import com.arpa.hndahesudintocctmsdriver.util.cache.CacheGroup; +import com.arpa.hndahesudintocctmsdriver.util.http.RequestUtil; +import com.arpa.hndahesudintocctmsdriver.util.http.RequsetCodeConstants; +import com.dahe.mylibrary.bean.DriverBean; +import com.dahe.mylibrary.callback.OnGDDownloadResultListener; +import com.dahe.mylibrary.callback.OnGDResultListener; +import com.dahe.mylibrary.net.CommonResponseBean; +import com.dahe.mylibrary.utils.ToastUtils; +import com.express.mdp.Api; +import com.express.mdp.Callback; +import com.google.gson.Gson; + + +import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers; +import io.reactivex.rxjava3.schedulers.Schedulers; + +/** + * @ClassName NewLJUtils + * @Author john + * @Date 2024/11/25 09:53 + * @Description TODO + */ +public class NewLJUtils { + + + private static class SingletonHolder { + private static final NewLJUtils INSTANCE = new NewLJUtils(); + } + + private NewLJUtils() { + } + + public static final NewLJUtils getInstance() { + return SingletonHolder.INSTANCE; + } + + public void getToken(Context ctx) { + LjTokenBean ljTokenBean = new LjTokenBean(); + ljTokenBean.setEnterpriseCode(NewLJConstant.ENTER_PRISE_CODE); + ljTokenBean.setEnterpriseIdentity(NewLJConstant.ENTER_PRISE_IDENTITY); + ljTokenBean.setEnterpriseKey(NewLJConstant.ENTER_PRISE_KEY); + + DataManager.getInstance().getToken(ljTokenBean) + .subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()) + .subscribe(new BaseObserver(ctx, new RxHttpCallBack() { + @Override + public void onSuccess(CommonResponseBean t) { + super.onSuccess(t); + SPUtils.put(ctx, NEW_LJ_TOKEN, t.getToken()); + } + })); + } + + + /** + * 刷新token + * + * @param ctx + */ + public void refreshToken(Context ctx) { + String token = SPUtils.get(ctx, NEW_LJ_TOKEN, "").toString(); + DataManager.getInstance().refreshToken(token) + .subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()) + .subscribe(new BaseObserver(ctx, new RxHttpCallBack() { + @Override + public void onSuccess(CommonResponseBean t) { + super.onSuccess(t); + SPUtils.put(ctx, NEW_LJ_TOKEN, t.getToken()); + } + })); + } + + public void getToken(Context ctx, OnGDResultListener listener) { + LjTokenBean ljTokenBean = new LjTokenBean(); + ljTokenBean.setEnterpriseCode(NewLJConstant.ENTER_PRISE_CODE); + ljTokenBean.setEnterpriseIdentity(NewLJConstant.ENTER_PRISE_IDENTITY); + ljTokenBean.setEnterpriseKey(NewLJConstant.ENTER_PRISE_KEY); + + DataManager.getInstance().getToken(ljTokenBean) + .subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()) + .subscribe(new BaseObserver(ctx, new RxHttpCallBack() { + @Override + public void onSuccess(CommonResponseBean t) { + super.onSuccess(t); + SPUtils.put(ctx, NEW_LJ_TOKEN, t.getToken()); + if (listener != null) + listener.onSuccess(); + } + })); + } + + + /** + * 运单提货 + * + * @param ctx + * @param shipmentCode + * @param location + */ + public void pickUp(Context ctx, String shipmentCode, GDLocation location, OnGDResultListener listener) { + if (TextUtils.isEmpty(shipmentCode)) { + ToastUtils.showToast(ctx, "运单号不能为空"); + return; + } + + if (Double.isNaN(location.getBaiduLatitude()) || Double.isNaN(location.getBaiduLongitude())) { + ToastUtils.showToast(ctx, "经纬度不能为空"); + return; + } + PickupBean pickupBean = new PickupBean(); + pickupBean.setShipmentCode(shipmentCode); + pickupBean.setEnterpriseCode(NewLJConstant.ENTER_PRISE_CODE); + pickupBean.setLocation(location); + DataManager.getInstance().pickup(pickupBean) + .subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()) + .subscribe(new BaseObserver(ctx, new RxHttpCallBack() { + @Override + public void onSuccess(CommonResponseBean t) { + super.onSuccess(t); + if (listener != null) { + listener.onSuccess(); + } + } + + @Override + public void onCodeError(Context mContext, CommonResponseBean t) { + super.onCodeError(mContext, t); + if (listener != null) { + listener.onFailure(t.getCode() + "", TextUtils.isEmpty(t.getMessage()) ? "运单提货操作异常" : t.getMessage()); + } + } + })); + } + + + /** + * 运单卸货 + * + * @param ctx + * @param shipmentCode + * @param location + */ + public void unload(Context ctx, String shipmentCode, GDLocation location, OnGDResultListener listener) { + if (TextUtils.isEmpty(shipmentCode)) { + ToastUtils.showToast(ctx, "运单号不能为空"); + return; + } + + if (Double.isNaN(location.getBaiduLatitude()) || Double.isNaN(location.getBaiduLongitude())) { + ToastUtils.showToast(ctx, "经纬度不能为空"); + return; + } + + PickupBean pickupBean = new PickupBean(); + pickupBean.setShipmentCode(shipmentCode); + pickupBean.setEnterpriseCode(NewLJConstant.ENTER_PRISE_CODE); + pickupBean.setLocation(location); + DataManager.getInstance().unload(pickupBean) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new BaseObserver(ctx, new RxHttpCallBack() { + @Override + public void onSuccess(CommonResponseBean t) { + super.onSuccess(t); + if (listener != null) { + listener.onSuccess(); + } + } + + @Override + public void onCodeError(Context mContext, CommonResponseBean t) { + super.onCodeError(mContext, t); + if (listener != null) { + listener.onFailure(t.getCode() + "", TextUtils.isEmpty(t.getMessage()) ? "运单卸货操作异常" : t.getMessage()); + } + } + })); + } + + + /** + * 运单签收 + * + * @param ctx + * @param shipmentCode + * @param location + */ + public void sign(Context ctx, String shipmentCode, GDLocation location, OnGDResultListener listener) { + if (TextUtils.isEmpty(shipmentCode)) { + ToastUtils.showToast(ctx, "运单号不能为空"); + return; + } + + if (Double.isNaN(location.getBaiduLatitude()) || Double.isNaN(location.getBaiduLongitude())) { + ToastUtils.showToast(ctx, "经纬度不能为空"); + return; + } + + PickupBean pickupBean = new PickupBean(); + pickupBean.setShipmentCode(shipmentCode); + pickupBean.setEnterpriseCode(NewLJConstant.ENTER_PRISE_CODE); + pickupBean.setLocation(location); + DataManager.getInstance().sign(pickupBean) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new BaseObserver(ctx, new RxHttpCallBack() { + @Override + public void onSuccess(CommonResponseBean t) { + super.onSuccess(t); + if (listener != null) { + listener.onSuccess(); + } + } + + @Override + public void onCodeError(Context mContext, CommonResponseBean t) { + super.onCodeError(mContext, t); + if (listener != null) { + listener.onFailure(t.getCode() + "", TextUtils.isEmpty(t.getMessage()) ? "运单签收操作异常" : t.getMessage()); + } + } + })); + } + + + /** + * 运单回单 + * + * @param ctx + * @param shipmentCode + * @param location + */ + public void pod(Context ctx, String shipmentCode, GDLocation location, OnGDResultListener listener) { + if (TextUtils.isEmpty(shipmentCode)) { + ToastUtils.showToast(ctx, "运单号不能为空"); + return; + } + + if (Double.isNaN(location.getBaiduLatitude()) || Double.isNaN(location.getBaiduLongitude())) { + ToastUtils.showToast(ctx, "经纬度不能为空"); + return; + } + + PickupBean pickupBean = new PickupBean(); + pickupBean.setShipmentCode(shipmentCode); + pickupBean.setEnterpriseCode(NewLJConstant.ENTER_PRISE_CODE); + pickupBean.setLocation(location); + DataManager.getInstance().pod(pickupBean) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new BaseObserver(ctx, new RxHttpCallBack() { + @Override + public void onSuccess(CommonResponseBean t) { + super.onSuccess(t); + if (listener != null) { + listener.onSuccess(); + } + } + + @Override + public void onCodeError(Context mContext, CommonResponseBean t) { + super.onCodeError(mContext, t); + if (listener != null) { + listener.onFailure(t.getCode() + "", TextUtils.isEmpty(t.getMessage()) ? "运单回单操作异常" : t.getMessage()); + } + } + })); + } + + + /** + * 运单提货照片上传 + * + * @param ctx + * @param shipmentCode + * @param imageDTO + */ + public void uploadPickupImage(Context ctx, String shipmentCode, GDImage imageDTO, OnGDResultListener listener) { + if (TextUtils.isEmpty(shipmentCode)) { + ToastUtils.showToast(ctx, "运单号不能为空"); + return; + } + + if (TextUtils.isEmpty(imageDTO.getFileName())) { + ToastUtils.showToast(ctx, "照片不能为空"); + return; + } + + UpimgBean pickupBean = new UpimgBean(); + pickupBean.setShipmentCode(shipmentCode); + pickupBean.setEnterpriseCode(NewLJConstant.ENTER_PRISE_CODE); + pickupBean.setImage(imageDTO); + DataManager.getInstance().uploadPickupImage(pickupBean) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new BaseObserver(ctx, new RxHttpCallBack() { + @Override + public void onSuccess(CommonResponseBean t) { + super.onSuccess(t); + if (listener != null) { + listener.onSuccess(); + } + } + + @Override + public void onCodeError(Context mContext, CommonResponseBean t) { + super.onCodeError(mContext, t); + if (listener != null) { + listener.onFailure(t.getCode() + "", TextUtils.isEmpty(t.getMessage()) ? "运单提货照片操作异常" : t.getMessage()); + } + } + })); + } + + + /** + * 运单卸货照片上传 + * + * @param ctx + * @param shipmentCode + * @param imageDTO + */ + public void uploadUnloadImage(Context ctx, String shipmentCode, GDImage imageDTO, OnGDResultListener listener) { + if (TextUtils.isEmpty(shipmentCode)) { + ToastUtils.showToast(ctx, "运单号不能为空"); + return; + } + + if (TextUtils.isEmpty(imageDTO.getFileName())) { + ToastUtils.showToast(ctx, "照片不能为空"); + return; + } + + UpimgBean pickupBean = new UpimgBean(); + pickupBean.setShipmentCode(shipmentCode); + pickupBean.setEnterpriseCode(NewLJConstant.ENTER_PRISE_CODE); + pickupBean.setImage(imageDTO); + DataManager.getInstance().uploadUnloadImage(pickupBean) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new BaseObserver(ctx, new RxHttpCallBack() { + @Override + public void onSuccess(CommonResponseBean t) { + super.onSuccess(t); + if (listener != null) { + listener.onSuccess(); + } + } + + @Override + public void onCodeError(Context mContext, CommonResponseBean t) { + super.onCodeError(mContext, t); + if (listener != null) { + listener.onFailure(t.getCode() + "", TextUtils.isEmpty(t.getMessage()) ? "运单卸货照片操作异常" : t.getMessage()); + } + } + })); + } + + + /** + * 运单回单照片上传 + * + * @param ctx + * @param shipmentCode + * @param imageDTO + */ + public void uploadPODImage(Context ctx, String shipmentCode, GDImage imageDTO, OnGDResultListener listener) { + if (TextUtils.isEmpty(shipmentCode)) { + ToastUtils.showToast(ctx, "运单号不能为空"); + return; + } + + if (TextUtils.isEmpty(imageDTO.getFileName())) { + ToastUtils.showToast(ctx, "照片不能为空"); + return; + } + + UpimgBean pickupBean = new UpimgBean(); + pickupBean.setShipmentCode(shipmentCode); + pickupBean.setEnterpriseCode(NewLJConstant.ENTER_PRISE_CODE); + pickupBean.setImage(imageDTO); + DataManager.getInstance().uploadPODImage(pickupBean) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new BaseObserver(ctx, new RxHttpCallBack() { + @Override + public void onSuccess(CommonResponseBean t) { + super.onSuccess(t); + if (listener != null) { + listener.onSuccess(); + } + } + + @Override + public void onCodeError(Context mContext, CommonResponseBean t) { + super.onCodeError(mContext, t); + if (listener != null) { + listener.onFailure(t.getCode() + "", TextUtils.isEmpty(t.getMessage()) ? "运单回单照片操作异常" : t.getMessage()); + } + } + })); + } + + + /** + * 获取发票列表 + * + * @param ctx + * @param listener + */ + public void getInvoices(Context ctx, OnGDResultListener listener) { + DriverAuthDataBean auth = AuthParts.getAuth(ctx); + if (auth == null) { + return; + } + + DataManager.getInstance().getInvoices(NewLJConstant.ENTER_PRISE_CODE, auth.getData().getIdcard(), 1, 100) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new BaseObserver(ctx, new RxHttpCallBack>() { + @Override + public void onSuccess(CommonResponseBean> t) { + super.onSuccess(t); + if (t.getData().getData().getDriverInvoices().size() > 0) { + confirmInvoice(ctx, new OnGDResultListener() { + @Override + public void onSuccess() { + + } + + @Override + public void onFailure(String var1, String var2) { + Log.e("NewLJUtils", var1 + var2); + } + }); + } + + } + + @Override + public void onCodeError(Context mContext, CommonResponseBean> t) { + super.onCodeError(mContext, t); +// Log.e("NewLJUtils", t.getMsg().toString()); + } + })); + } + + + /** + * 同意发票申请 + * + * @param ctx + */ + public void confirmInvoice(Context ctx, OnGDResultListener listener) { + DriverAuthDataBean auth = AuthParts.getAuth(ctx); + if (auth == null) { + return; + } + searchDriver(ctx, auth.getData().getIdcard(), new OnGDDownloadResultListener() { + @Override + public void onSuccess(String var1) { + InvoiceBean invoiceBean = new InvoiceBean(); + invoiceBean.setEnterpriseCode(NewLJConstant.ENTER_PRISE_CODE); + invoiceBean.setDriverInvoiceCode(var1); + invoiceBean.setDriverIdentification(auth.getData().getIdcard()); + DataManager.getInstance().confirmInvoice(invoiceBean) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new BaseObserver(ctx, new RxHttpCallBack() { + @Override + public void onSuccess(CommonResponseBean t) { + super.onSuccess(t); + if (listener != null) { + listener.onSuccess(); + } + } + + @Override + public void onCodeError(Context mContext, CommonResponseBean t) { + super.onCodeError(mContext, t); + if (listener != null) { + listener.onFailure(t.getCode() + "", TextUtils.isEmpty(t.getMessage()) ? "同意发票异常" : t.getMessage()); + } + } + })); + } + + @Override + public void onFailure(String var1, String var2) { + + } + }); + + + //查询身份证信息 +// new AuthRequest().getCard(ctx, new Handler(msg -> { +// switch (msg.what) { +// case RequsetCodeConstants.ERROR: +// Toast.makeText(ctx, RequsetCodeConstants.FEEDBACK_TEXT, Toast.LENGTH_SHORT).show(); +// break; +// case RequsetCodeConstants.UNKONWN: +// Toast.makeText(ctx, RequsetCodeConstants.UNKONWN_TEXT, Toast.LENGTH_SHORT).show(); +// break; +// case RequsetCodeConstants.SERVER_ERROR: +// Toast.makeText(ctx, RequsetCodeConstants.SERVER_ERROR_TEXT, Toast.LENGTH_SHORT).show(); +// break; +// case RequsetCodeConstants.GATEWAY_ERROR: +// Toast.makeText(ctx, RequsetCodeConstants.GATEWAY_ERROR_TEXT, Toast.LENGTH_SHORT).show(); +// break; +// case RequsetCodeConstants.SUCCESS: +// IsAuthCardBean iacb = new Gson().fromJson(CacheGroup.cacheList.get(CertificatesActivity.ISAUTH), IsAuthCardBean.class); +// if (iacb != null || iacb.getData() != null || !TextUtils.isEmpty(iacb.getData().getIdcard())) { +// //根据身份证号查询路交司机信息 +// searchDriver(ctx, iacb.getData().getIdcard(), new OnGDDownloadResultListener() { +// @Override +// public void onSuccess(String var1) { +// InvoiceBean invoiceBean = new InvoiceBean(); +// invoiceBean.setEnterpriseCode(NewLJConstant.ENTER_PRISE_CODE); +// invoiceBean.setDriverInvoiceCode(var1); +// invoiceBean.setDriverIdentification(iacb.getData().getIdcard()); +// DataManager.getInstance().confirmInvoice(invoiceBean) +// .subscribeOn(Schedulers.io()) +// .observeOn(AndroidSchedulers.mainThread()) +// .subscribe(new BaseObserver(ctx, new RxHttpCallBack() { +// @Override +// public void onSuccess(CommonResponseBean t) { +// super.onSuccess(t); +// if (listener != null) { +// listener.onSuccess(); +// } +// } +// +// @Override +// public void onCodeError(Context mContext, CommonResponseBean t) { +// super.onCodeError(mContext, t); +// if (listener != null) { +// listener.onFailure(t.getCode() + "", t.getMessage()); +// } +// } +// })); +// } +// +// @Override +// public void onFailure(String var1, String var2) { +// +// } +// }); +// } else { +// Toast.makeText(ctx, "缺少身份证信息", Toast.LENGTH_SHORT).show(); +// } +// break; +// } +// return false; +// })); + + + } + + + /** + * 运单状态查询 + * + * @param ctx + * @param shipmentCode + */ + public void getShipmentStatus(Context ctx, String shipmentCode, OnGDDownloadResultListener listener) { + ShipmentStatusBean shipmentStatusBean = new ShipmentStatusBean(); + shipmentStatusBean.setShipmentCode(shipmentCode); + shipmentStatusBean.setEnterpriseCode(NewLJConstant.ENTER_PRISE_CODE); + DataManager.getInstance().getShipmentStatus(shipmentStatusBean) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new BaseObserver(ctx, new RxHttpCallBack() { + @Override + public void onSuccess(CommonResponseBean t) { + super.onSuccess(t); + if (listener != null) { + listener.onSuccess(t.getStatusCode()); + } + } + + @Override + public void onCodeError(Context mContext, CommonResponseBean t) { + super.onCodeError(mContext, t); + if (listener != null) { + listener.onFailure(t.getCode() + "", TextUtils.isEmpty(t.getMessage()) ? "运单状态查询异常" : t.getMessage()); + } + } + })); + } + + public void getPODImageNames(Context ctx, String shipmentCode) { + ShipmentStatusBean shipmentStatusBean = new ShipmentStatusBean(); + shipmentStatusBean.setShipmentCode(shipmentCode); + shipmentStatusBean.setEnterpriseCode(NewLJConstant.ENTER_PRISE_CODE); + DataManager.getInstance().getPODImageNames(shipmentStatusBean) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new BaseObserver(ctx, new RxHttpCallBack() { + @Override + public void onSuccess(CommonResponseBean t) { + super.onSuccess(t); + System.out.println("sadf"); + } + + @Override + public void onCodeError(Context mContext, CommonResponseBean t) { + super.onCodeError(mContext, t); + System.out.println("sadf"); + } + })); + } + + /** + * 开启位置上传 + * + * @param act + */ + public void startLocationService(AppCompatActivity act) { + DriverAuthDataBean auth = AuthParts.getAuth(act); + if (auth == null) { + return; + } + searchDriver(act, auth.getData().getIdcard(), new OnGDDownloadResultListener() { + @Override + public void onSuccess(String var1) { + try { + //开启定位服务 + if (BuildConfig.isTest) { + Api.setBaseUrl("https://kehui56.cn/api", "https://api.kehui56.cn/api"); + } + String result = Api.startLocationService(act, var1, s -> { + Log.e("位置上报", s); + }); + System.out.println(result); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + @Override + public void onFailure(String var1, String var2) { + + } + }); + + + //查询身份证信息 +// new AuthRequest().getCard(act, new Handler(msg -> { +// switch (msg.what) { +// case RequsetCodeConstants.ERROR: +// Toast.makeText(act, RequsetCodeConstants.FEEDBACK_TEXT, Toast.LENGTH_SHORT).show(); +// break; +// case RequsetCodeConstants.UNKONWN: +// Toast.makeText(act, RequsetCodeConstants.UNKONWN_TEXT, Toast.LENGTH_SHORT).show(); +// break; +// case RequsetCodeConstants.SERVER_ERROR: +// Toast.makeText(act, RequsetCodeConstants.SERVER_ERROR_TEXT, Toast.LENGTH_SHORT).show(); +// break; +// case RequsetCodeConstants.GATEWAY_ERROR: +// Toast.makeText(act, RequsetCodeConstants.GATEWAY_ERROR_TEXT, Toast.LENGTH_SHORT).show(); +// break; +// case RequsetCodeConstants.SUCCESS: +// IsAuthCardBean iacb = new Gson().fromJson(CacheGroup.cacheList.get(CertificatesActivity.ISAUTH), IsAuthCardBean.class); +// if (iacb != null || iacb.getData() != null || !TextUtils.isEmpty(iacb.getData().getIdcard())) { +// //根据身份证号查询路交司机信息 +// searchDriver(act,iacb.getData().getIdcard(), new OnGDDownloadResultListener() { +// @Override +// public void onSuccess(String var1) { +// try { +// //开启定位服务 +// Api.setBaseUrl("https://kehui56.cn/api", "https://api.kehui56.cn/api"); +// String result = Api.startLocationService(act, var1, s -> { +// Log.e("位置上报", s); +// }); +// } catch (Exception e) { +// throw new RuntimeException(e); +// } +// } +// +// @Override +// public void onFailure(String var1, String var2) { +// +// } +// }); +// } else { +// Toast.makeText(act, "缺少身份证信息", Toast.LENGTH_SHORT).show(); +// } +// break; +// } +// return false; +// })); + + + } + + /** + * 关闭定位服务 + */ + public void stopLocationService() { + Api.stopLocationService(); + } + + + /** + * 查询司机 + */ + public void searchDriver(Context ctx, String idCard, OnGDDownloadResultListener listener) { + DataManager.getInstance().searchDriver(idCard) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new BaseObserver(ctx, new RxHttpCallBack() { + @Override + public void onSuccess(CommonResponseBean t) { + super.onSuccess(t); + DriverBean driver = t.getDriver(); + if (driver != null && !TextUtils.isEmpty(driver.getDriverCode())) { + if (listener != null) + listener.onSuccess(driver.getDriverCode()); + } + } + + @Override + public void onCodeError(Context mContext, CommonResponseBean t) { + super.onCodeError(mContext, t); + if (listener != null) + listener.onFailure(t.getCode(), TextUtils.isEmpty(t.getMessage()) ? "运单操作异常" : t.getMessage()); + } + })); + } + +} diff --git a/mylibrary/src/main/java/com/dahe/mylibrary/bean/DriverBean.java b/mylibrary/src/main/java/com/dahe/mylibrary/bean/DriverBean.java new file mode 100644 index 0000000..ce59221 --- /dev/null +++ b/mylibrary/src/main/java/com/dahe/mylibrary/bean/DriverBean.java @@ -0,0 +1,49 @@ +package com.dahe.mylibrary.bean; + +import java.io.Serializable; + +/** + * @ClassName DriverBean + * @Author john + * @Date 2024/11/28 12:24 + * @Description TODO + */ +public class DriverBean implements Serializable { + + private String driverCode; + private String isTaxRegistered; + private String taxRegisterStatus; + private String taxRegisterStatusDescription; + + public String getDriverCode() { + return driverCode; + } + + public void setDriverCode(String driverCode) { + this.driverCode = driverCode; + } + + public String getIsTaxRegistered() { + return isTaxRegistered; + } + + public void setIsTaxRegistered(String isTaxRegistered) { + this.isTaxRegistered = isTaxRegistered; + } + + public String getTaxRegisterStatus() { + return taxRegisterStatus; + } + + public void setTaxRegisterStatus(String taxRegisterStatus) { + this.taxRegisterStatus = taxRegisterStatus; + } + + public String getTaxRegisterStatusDescription() { + return taxRegisterStatusDescription; + } + + public void setTaxRegisterStatusDescription(String taxRegisterStatusDescription) { + this.taxRegisterStatusDescription = taxRegisterStatusDescription; + } +} diff --git a/mylibrary/src/main/java/com/dahe/mylibrary/callback/OnGDDownloadResultListener.java b/mylibrary/src/main/java/com/dahe/mylibrary/callback/OnGDDownloadResultListener.java new file mode 100644 index 0000000..2b5ba43 --- /dev/null +++ b/mylibrary/src/main/java/com/dahe/mylibrary/callback/OnGDDownloadResultListener.java @@ -0,0 +1,13 @@ +package com.dahe.mylibrary.callback; + +/** + * @ClassName OnGDDownloadResultListener + * @Author john + * @Date 2024/11/25 18:22 + * @Description TODO + */ +public interface OnGDDownloadResultListener { + void onSuccess(String var1); + + void onFailure(String var1, String var2); +} diff --git a/mylibrary/src/main/java/com/dahe/mylibrary/callback/OnGDResultListener.java b/mylibrary/src/main/java/com/dahe/mylibrary/callback/OnGDResultListener.java new file mode 100644 index 0000000..f27b7aa --- /dev/null +++ b/mylibrary/src/main/java/com/dahe/mylibrary/callback/OnGDResultListener.java @@ -0,0 +1,14 @@ +package com.dahe.mylibrary.callback; + +/** + * @ClassName OnGDResultListener + * @Author john + * @Date 2024/11/25 17:48 + * @Description TODO + */ +public interface OnGDResultListener { + + void onSuccess(); + + void onFailure(String var1, String var2); +} diff --git a/mylibrary/src/main/java/com/dahe/mylibrary/net/CommonResponseBean.java b/mylibrary/src/main/java/com/dahe/mylibrary/net/CommonResponseBean.java index d6ac17a..eea6610 100644 --- a/mylibrary/src/main/java/com/dahe/mylibrary/net/CommonResponseBean.java +++ b/mylibrary/src/main/java/com/dahe/mylibrary/net/CommonResponseBean.java @@ -1,5 +1,7 @@ package com.dahe.mylibrary.net; +import com.dahe.mylibrary.bean.DriverBean; + import java.io.Serializable; /** @@ -8,13 +10,59 @@ import java.io.Serializable; public class CommonResponseBean implements Serializable { private T data; - private int code; + private String code; private String info; private String msg; + private String message; private String url; private String fileName; + private String token; + private String expiryIn; + private String statusCode; private boolean success; + private DriverBean driver; + + public DriverBean getDriver() { + return driver; + } + + public void setDriver(DriverBean driver) { + this.driver = driver; + } + + public String getStatusCode() { + return statusCode; + } + + public void setStatusCode(String statusCode) { + this.statusCode = statusCode; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public String getToken() { + return token; + } + + public void setToken(String token) { + this.token = token; + } + + public String getExpiryIn() { + return expiryIn; + } + + public void setExpiryIn(String expiryIn) { + this.expiryIn = expiryIn; + } + public T getData() { return data; } @@ -23,11 +71,11 @@ public class CommonResponseBean implements Serializable { this.data = data; } - public int getCode() { + public String getCode() { return code; } - public void setCode(int code) { + public void setCode(String code) { this.code = code; } diff --git a/mylibrary/src/main/java/com/dahe/mylibrary/utils/BaseSPUtils.java b/mylibrary/src/main/java/com/dahe/mylibrary/utils/BaseSPUtils.java index 9450e59..c252a86 100644 --- a/mylibrary/src/main/java/com/dahe/mylibrary/utils/BaseSPUtils.java +++ b/mylibrary/src/main/java/com/dahe/mylibrary/utils/BaseSPUtils.java @@ -20,6 +20,7 @@ public class BaseSPUtils { public static final String USER_INFO_KEY = "user_info_key"; public static final String NET_SERVICE_TEST = "net_service_test"; public static final String SEARRH_CACHE = "search_cache"; + public static final String NEW_LJ_TOKEN = "NEW_LJ_TOKEN"; public static final String NAVI_PH_EDIT_CACHE = "navi_ph_edit_cache"; public static final String FIRST_OPEN = "first_open"; public static final String KEY_PRIVACY_AGREEMENT = "privacy_agreement";