diff --git a/app/src/main/java/com/dhsd/glowner/base/AppConfig.kt b/app/src/main/java/com/dhsd/glowner/base/AppConfig.kt index 36b6b64..208d17a 100644 --- a/app/src/main/java/com/dhsd/glowner/base/AppConfig.kt +++ b/app/src/main/java/com/dhsd/glowner/base/AppConfig.kt @@ -10,6 +10,7 @@ object AppConfig { const val BUGLY_APP_ID = "a5b894cef7" const val TIME = "DA_HE_TIME" const val ID = "DA_HE_ID" + const val BEAN = "DA_HE_BEAN" const val IS_ADD = "DA_HE_IS_ADD" const val CAPTAIN_ID = "CAPTAIN_ID" const val PWD = "DA_HE_PHONE" diff --git a/app/src/main/java/com/dhsd/glowner/bean/AddressBean.kt b/app/src/main/java/com/dhsd/glowner/bean/AddressBean.kt index 9c87299..5f8ba24 100644 --- a/app/src/main/java/com/dhsd/glowner/bean/AddressBean.kt +++ b/app/src/main/java/com/dhsd/glowner/bean/AddressBean.kt @@ -6,27 +6,72 @@ package com.dhsd.glowner.bean * @constructor */ data class PostAddressBean( - val addressDetail: String, - val addressType: String, - val area: String, - val areaCode: String, - val city: String, - val cityCode: String, - val companyCode: String, - val companyName: String, - val contactNumber: String, - val contactPerson: String, - val idCard: Any, - val idDefault: String, - val isDeleted: String, - val latitude: String, - val longitude: String, - val province: String, - val provinceCode: String, - val sortValue: String, - val tagContent: String, - val userType: String -) + var province: String = "", + var city: String = "", + var area: String = "", + var areaCode: String = "", + var latitude: String = "", + var longitude: String = "", + var addressDetail: String = "" +) { + var addressType: String = "" + var cityCode: String = "" + var companyCode: String = "" + var companyName: String = "" + var contactNumber: String = "" + var contactPerson: String = "" + var idCard: String = "" + var idDefault: String = "" + var isDeleted: String = "" + var provinceCode: String = "" + var sortValue: String = "" + var tagContent: String = "" + var userType: String = "" + var addressId: String = "" + + constructor( + province: String, + city: String, + area: String, + areaCode: String, + latitude: String, + longitude: String, + addressDetail: String, + addressType: String, + cityCode: String, + companyCode: String, + companyName: String, + contactNumber: String, + contactPerson: String, + idCard: String, + idDefault: String, + isDeleted: String, + provinceCode: String, + sortValue: String, + tagContent: String, + userType: String, + addressId: String + ) : this(province, city, area, areaCode, latitude, longitude, addressDetail) { + this.addressType = addressType + this.cityCode = cityCode + this.companyCode = companyCode + this.companyName = companyName + this.contactNumber = contactNumber + this.contactPerson = contactPerson + this.idCard = idCard + this.idDefault = idDefault + this.isDeleted = isDeleted + this.provinceCode = provinceCode + this.sortValue = sortValue + this.tagContent = tagContent + this.userType = userType + this.addressId = addressId + } +} + +data class Texfff(val name: String, val age: Int) { + constructor(name: String, age: Int, id: String) : this(name, age) {} +} data class AddressBean( val addressDetail: String, diff --git a/app/src/main/java/com/dhsd/glowner/net/Api.kt b/app/src/main/java/com/dhsd/glowner/net/Api.kt index fd9a885..1864373 100644 --- a/app/src/main/java/com/dhsd/glowner/net/Api.kt +++ b/app/src/main/java/com/dhsd/glowner/net/Api.kt @@ -11,6 +11,7 @@ import retrofit2.http.Body import retrofit2.http.GET import retrofit2.http.POST import retrofit2.http.PUT +import retrofit2.http.Path import retrofit2.http.Query @@ -101,6 +102,28 @@ interface Api { @POST(BASE_URL+"devApi/business/shipper/common/address") fun postAddress(@Body bean: PostAddressBean): Observable> + /** + * 获取地址详情 + * @param addressId String + * @return Observable> + */ + @GET(BASE_URL+"devApi/business/shipper/common/address/{addressId}") + fun getAddressDetail(@Path("addressId") addressId:String) : Observable> + + + /** + * 修改货主常用地址 + * @param bean PostAddressBean + * @return Observable> + */ + @PUT(BASE_URL+"devApi/business/shipper/common/address") + fun updateAddress(@Body bean: PostAddressBean): Observable> + + + /** + * 获取地址列表 + * @return Observable>> + */ @GET(BASE_URL+"devApi/business/shipper/common/address/list") fun getAddressList(): Observable>> } \ No newline at end of file diff --git a/app/src/main/java/com/dhsd/glowner/ui/address/AddressEditOrAddActivity.kt b/app/src/main/java/com/dhsd/glowner/ui/address/AddressEditOrAddActivity.kt index 1cddf7d..b5ae3c4 100644 --- a/app/src/main/java/com/dhsd/glowner/ui/address/AddressEditOrAddActivity.kt +++ b/app/src/main/java/com/dhsd/glowner/ui/address/AddressEditOrAddActivity.kt @@ -1,25 +1,39 @@ package com.dhsd.glowner.ui.address +import BaseObserver +import DataManager +import RxHttpCallBack +import android.app.Activity +import android.content.Intent import android.graphics.Color import android.os.Bundle import android.view.View import android.widget.LinearLayout +import androidx.activity.result.contract.ActivityResultContracts +import androidx.appcompat.app.AppCompatActivity import androidx.core.widget.addTextChangedListener import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.dahe.gldriver.base.AppConfig import com.dahe.glex.bean.WayBillBean import com.dahe.mylibrary.base.BaseActivity +import com.dahe.mylibrary.net.CommonResponseBean import com.dahe.mylibrary.recycleviewswipe.RecycleViewDivider import com.dahe.mylibrary.utils.ActivityUtils import com.dahe.mylibrary.utils.ConvertUtils import com.dahe.mylibrary.utils.PickerUtils import com.dahe.mylibrary.utils.ToastUtils +import com.dahe.mylibrary.weight.SwitchView import com.dhsd.glowner.R import com.dhsd.glowner.adapter.SendGoodsAdapter +import com.dhsd.glowner.bean.PostAddressBean import com.dhsd.glowner.databinding.ActivityAddressEditBinding +import com.dhsd.glowner.ui.mine.activity.ChoiceCarActivity import com.dhsd.glowner.utils.OnLimitClickHelper import com.dhsd.glowner.utils.OnLimitClickListener +import com.google.gson.Gson +import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers +import io.reactivex.rxjava3.schedulers.Schedulers /** * @ClassName AddresEditActivity @@ -29,14 +43,51 @@ import com.dhsd.glowner.utils.OnLimitClickListener */ class AddressEditOrAddActivity : BaseActivity(), OnLimitClickListener { - private var isAdd:Boolean = true + + private lateinit var postAddressBean: PostAddressBean + private var addressId: String = "" + + private val launcher = + registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result -> + if (result.resultCode == AppCompatActivity.RESULT_OK) { + result.data?.extras?.let { + val postBean = it.getString(AppConfig.BEAN) + if (postBean != null) { + val inAddressBean = Gson().fromJson(postBean, PostAddressBean::class.java) + val inAreaCode = inAddressBean.areaCode + inAddressBean.run { + provinceCode = inAreaCode.subSequence(0, 3).toString().plus("000") + cityCode = inAreaCode.subSequence(0, 4).toString().plus("00") + } + if (addressId.isEmpty()){ + postAddressBean = inAddressBean + }else{ + postAddressBean?.run { + addressDetail = inAddressBean.addressDetail + areaCode = inAddressBean.areaCode + area = inAddressBean.area + city = inAddressBean.city + province = inAddressBean.province + contactPerson = inAddressBean.contactPerson + contactNumber = inAddressBean.contactNumber + idCard = inAddressBean.idCard + } + } + + initViewByData(postAddressBean) + } + } + } + } + + override fun initView(savedInstanceState: Bundle?) { setStatusBarColor(R.color.white) setTitleBar("地址信息", { finish() }, true, "地图选点") { - ActivityUtils.startActivity(mContext,ChoiceAddressByMapActivity::class.java) + launcher.launch(Intent(mContext, ChoiceAddressByMapActivity::class.java)) } + addressId = intent.extras?.getString(AppConfig.ID, "").toString() - isAdd = intent.extras?.getBoolean(AppConfig.IS_ADD,true) == true var datas = mutableListOf( WayBillBean(), @@ -44,7 +95,7 @@ class AddressEditOrAddActivity : BaseActivity(), WayBillBean() ) binding.recycler.run { - layoutManager = LinearLayoutManager(mContext,RecyclerView.VERTICAL,false) + layoutManager = LinearLayoutManager(mContext, RecyclerView.VERTICAL, false) addItemDecoration( RecycleViewDivider( LinearLayout.VERTICAL, @@ -58,7 +109,12 @@ class AddressEditOrAddActivity : BaseActivity(), binding.run { tvSSQ.setOnClickListener(OnLimitClickHelper(this@AddressEditOrAddActivity)) - tvClear.setOnClickListener { etAddressDetail.setText("") } + tvClear.setOnClickListener { + etAddressDetail.setText("") + if (::postAddressBean.isInitialized && postAddressBean.addressDetail.isNotEmpty()) { + postAddressBean.addressDetail = "" + } + } btnOk.setOnClickListener(OnLimitClickHelper(this@AddressEditOrAddActivity)) etAddressDetail.addTextChangedListener { text -> @@ -67,6 +123,11 @@ class AddressEditOrAddActivity : BaseActivity(), // val inputTips = Inputtips(this, inputquery) // } } + + mySwitch.setOnStateChangedListener2 { + changeAddressType(it) + } + } @@ -76,17 +137,124 @@ class AddressEditOrAddActivity : BaseActivity(), super.onClick(view) when (view?.id) { R.id.tvSSQ -> { - PickerUtils.getInstance().showAddress(this + PickerUtils.getInstance().showAddress( + this ) { province, city, county -> binding.tvSSQ.text = """${province.name}-${city.name}-${county.name}""" } } - R.id.btnOk->{ - + + R.id.btnOk -> { + submit() } } } override fun initDate() { + if (addressId.isNotEmpty()) { + DataManager.getInstance().getAddressDetail(addressId) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(BaseObserver(mContext, object : RxHttpCallBack() { + override fun onSuccess(t: CommonResponseBean) { + super.onSuccess(t) + initViewByData(t.data) + } + })) + } + } + + + /** + * 新增或编辑地址信息 + * + */ + private fun submit() { + + if (!::postAddressBean.isInitialized || postAddressBean.province.isEmpty()) { + showToast("请选择省市区") + return + } + if (postAddressBean.addressDetail.isEmpty()) { + showToast("请输入详细地址") + return + } + if (binding.etName.text.isEmpty() || binding.etPhone.text.isEmpty() || binding.etCom.text.isEmpty() || binding.etComNum.text.isEmpty()) { + showToast("请完善联系人信息") + return + } + + postAddressBean.run { + binding.run { + contactPerson = etName.text.toString() + contactNumber = etPhone.text.toString() + userType = if (mySwitch.isOpened) "1" else "0" + companyName = etCom.text.toString() + companyCode = etComNum.text.toString() + } + } + + if (addressId.isNotEmpty()) { + DataManager.getInstance().updateAddress(postAddressBean) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(BaseObserver(mContext, object : RxHttpCallBack() { + override fun onSuccess(t: CommonResponseBean) { + super.onSuccess(t) + showToast(t.msg) + setResult(Activity.RESULT_OK) + finish() + } + })) + } else { + DataManager.getInstance().postAddress(postAddressBean) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(BaseObserver(mContext, object : RxHttpCallBack() { + override fun onSuccess(t: CommonResponseBean) { + super.onSuccess(t) + showToast(t.msg) + setResult(Activity.RESULT_OK) + finish() + } + })) + } + + + } + + private fun changeAddressType(isCom: Boolean) { + if (isCom) { + binding.run { + etCom.hint = "公司名称" + etComNum.hint = "社会统一代码" + } + } else { + binding.run { + etCom.hint = "货主名称" + etComNum.hint = "身份证号" + } + } + } + + + /** + * 渲染页面 + * @param data PostAddressBean + */ + private fun initViewByData(data: PostAddressBean) { + postAddressBean = data + binding.run { + binding.run { + tvSSQ.text = + """${data.province}-${data.city}-${data.area}""" + etAddressDetail.setText(data.addressDetail) + etName.setText(data.contactPerson) + etPhone.setText(data.contactNumber) + etCom.setText(data.companyName) + etComNum.setText(data.companyCode) + mySwitch.isOpened = data.userType == "1" + } + } } } \ No newline at end of file diff --git a/app/src/main/java/com/dhsd/glowner/ui/address/AddressListActivity.kt b/app/src/main/java/com/dhsd/glowner/ui/address/AddressListActivity.kt index 57a2d10..0257015 100644 --- a/app/src/main/java/com/dhsd/glowner/ui/address/AddressListActivity.kt +++ b/app/src/main/java/com/dhsd/glowner/ui/address/AddressListActivity.kt @@ -3,15 +3,19 @@ package com.dhsd.glowner.ui.address import BaseObserver import DataManager import RxHttpCallBack +import android.content.Intent import android.graphics.Color import android.os.Bundle import android.view.View import android.widget.LinearLayout +import androidx.activity.result.contract.ActivityResultContracts +import androidx.appcompat.app.AppCompatActivity import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.dahe.gldriver.base.AppConfig import com.dahe.glex.bean.OrderListBean import com.dahe.mylibrary.base.BaseActivity +import com.dahe.mylibrary.callback.RefreshCallBack import com.dahe.mylibrary.net.CommonResponseBean import com.dahe.mylibrary.recycleviewswipe.RecycleViewDivider import com.dahe.mylibrary.utils.ActivityUtils @@ -20,6 +24,7 @@ import com.dhsd.glowner.R import com.dhsd.glowner.adapter.AddressAdapter import com.dhsd.glowner.bean.AddressBean import com.dhsd.glowner.databinding.ActivityAddressListBinding +import com.dhsd.glowner.ui.mine.activity.ChoiceCarActivity import com.dhsd.glowner.utils.OnLimitClickHelper import com.dhsd.glowner.utils.OnLimitClickListener import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers @@ -32,13 +37,21 @@ import io.reactivex.rxjava3.schedulers.Schedulers * @Description 地址列表 */ class AddressListActivity : BaseActivity(), - OnLimitClickListener { + OnLimitClickListener , RefreshCallBack { + + private val launcher = + registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result -> + if (result.resultCode == AppCompatActivity.RESULT_OK) { + initDate() + } + } lateinit var adapter: AddressAdapter override fun initView(savedInstanceState: Bundle?) { setStatusBarColor(R.color.white) setTitleBar("地址", true) binding.run { + setRefresh(smartRefresh, this@AddressListActivity) adapter = recycler.run { layoutManager = LinearLayoutManager(mContext, RecyclerView.VERTICAL, false) addItemDecoration( @@ -59,6 +72,14 @@ class AddressListActivity : BaseActivity(), // adapter.getItem(position)?.isSelect = true notifyDataSetChanged() } + + addOnItemChildClickListener(R.id.tvEdit){ adapter,_, position -> + val addressBean = adapter.items[position] + + launcher.launch(Intent(mContext, AddressEditOrAddActivity::class.java).apply { + putExtras(Bundle().apply { putString(AppConfig.ID, addressBean.addressId) }) + }) + } } btnOk.setOnClickListener(OnLimitClickHelper(this@AddressListActivity)) } @@ -70,7 +91,7 @@ class AddressListActivity : BaseActivity(), .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(BaseObserver(mContext, - object : RxHttpCallBack>() { + object : RxHttpCallBack>(binding.smartRefresh) { override fun onSuccess(t: CommonResponseBean>) { super.onSuccess(t) initList(t.data.rows) @@ -82,9 +103,10 @@ class AddressListActivity : BaseActivity(), super.onClick(view) when (view?.id) { R.id.btnOk -> { - ActivityUtils.startActivity(mContext,AddressEditOrAddActivity::class.java,Bundle().apply { - putBoolean(AppConfig.IS_ADD,true) - }) + launcher.launch(Intent(mContext, AddressEditOrAddActivity::class.java)) +// ActivityUtils.startActivity(mContext,AddressEditOrAddActivity::class.java,Bundle().apply { +// putBoolean(AppConfig.IS_ADD,true) +// }) } } } @@ -101,4 +123,8 @@ class AddressListActivity : BaseActivity(), } } } + + override fun getRefreshDate(stat: Int, page: Int, count: Int) { + initDate() + } } \ No newline at end of file diff --git a/app/src/main/java/com/dhsd/glowner/ui/address/ChoiceAddressByMapActivity.kt b/app/src/main/java/com/dhsd/glowner/ui/address/ChoiceAddressByMapActivity.kt index 697c998..5dc1ec5 100644 --- a/app/src/main/java/com/dhsd/glowner/ui/address/ChoiceAddressByMapActivity.kt +++ b/app/src/main/java/com/dhsd/glowner/ui/address/ChoiceAddressByMapActivity.kt @@ -1,6 +1,8 @@ package com.dhsd.glowner.ui.address +import android.content.Intent import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity import androidx.core.widget.addTextChangedListener import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView @@ -19,12 +21,15 @@ import com.amap.api.services.geocoder.RegeocodeResult import com.amap.api.services.help.Inputtips import com.amap.api.services.help.Inputtips.InputtipsListener import com.amap.api.services.help.InputtipsQuery +import com.dahe.gldriver.base.AppConfig import com.dahe.mylibrary.base.BaseActivity import com.dhsd.glowner.R import com.dhsd.glowner.adapter.ChoiceAddressAdapter +import com.dhsd.glowner.bean.PostAddressBean import com.dhsd.glowner.callback.OnMyGeocodeSearchListener import com.dhsd.glowner.databinding.ActivityChoiceAddressByMapBinding import com.dhsd.glowner.utils.GDLocationUtils +import com.google.gson.Gson /** * @ClassName ChoiceAddressByMapActivity @@ -49,6 +54,44 @@ class ChoiceAddressByMapActivity : BaseActivity + val tip = adapter.getItem(position) + if (tip != null) { + println(tip.toString()) + GDLocationUtils.instance.getAddressByLatLng( + mContext, + tip.point, + object : OnMyGeocodeSearchListener() { + override fun onRegeocodeSearched( + result: RegeocodeResult?, + rCode: Int + ) { + super.onRegeocodeSearched(result, rCode) + result?.let { + val postAddressBean = PostAddressBean( + it.regeocodeAddress.province, + it.regeocodeAddress.city, + it.regeocodeAddress.district, + it.regeocodeAddress.adCode, + it.regeocodeQuery.point.latitude.toString(), + it.regeocodeQuery.point.longitude.toString(), + tip.district + tip.address//保持详细地址一致 + ) + setResult(AppCompatActivity.RESULT_OK, Intent().apply { + putExtras(Bundle().apply { + putSerializable( + AppConfig.BEAN, + Gson().toJson(postAddressBean) + ) + }) + }) + finish() + } + } + }) + + } + } } etInput.addTextChangedListener { diff --git a/app/src/main/java/com/dhsd/glowner/utils/GDLocationUtils.kt b/app/src/main/java/com/dhsd/glowner/utils/GDLocationUtils.kt index a09a1c9..f0b4979 100644 --- a/app/src/main/java/com/dhsd/glowner/utils/GDLocationUtils.kt +++ b/app/src/main/java/com/dhsd/glowner/utils/GDLocationUtils.kt @@ -89,7 +89,7 @@ class GDLocationUtils private constructor() { var geocoderSearch = GeocodeSearch(ctx) geocoderSearch.setOnGeocodeSearchListener(listener) val query = RegeocodeQuery( - latLng, 1000f, + latLng, 200f, GeocodeSearch.AMAP ) // 第一个参数表示一个Latlng,第二参数表示范围多少米,第三个参数表示是火系坐标系还是GPS原生坐标系 diff --git a/app/src/main/res/layout/activity_address_edit.xml b/app/src/main/res/layout/activity_address_edit.xml index 7430c7c..eeb39a2 100644 --- a/app/src/main/res/layout/activity_address_edit.xml +++ b/app/src/main/res/layout/activity_address_edit.xml @@ -1,5 +1,6 @@ @@ -133,6 +134,8 @@ android:layout_weight="1" android:background="@drawable/shape_gray_5" android:hint="姓名" + android:inputType="text" + android:maxLines="1" android:padding="@dimen/dp_11" android:textColor="@color/black" android:textSize="@dimen/sp_16" /> @@ -140,44 +143,80 @@ + + + + + + + + + + android:textSize="@dimen/sp_16" + android:visibility="gone" /> + android:paddingBottom="@dimen/dp_15" + android:visibility="gone" /> diff --git a/app/src/main/res/layout/activity_address_list.xml b/app/src/main/res/layout/activity_address_list.xml index 6a3d27a..95927e4 100644 --- a/app/src/main/res/layout/activity_address_list.xml +++ b/app/src/main/res/layout/activity_address_list.xml @@ -10,11 +10,20 @@ - + android:layout_weight="1" + android:layout_height="match_parent"> + + + + +