OwnerSingleFragment.kt 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647
  1. package com.quansu.heifengwuliu.fragment
  2. import android.app.Activity
  3. import android.content.Intent
  4. import android.os.Bundle
  5. import android.text.Editable
  6. import android.text.TextUtils
  7. import android.text.TextWatcher
  8. import android.view.LayoutInflater
  9. import android.view.ViewGroup
  10. import androidx.lifecycle.Observer
  11. import com.google.gson.Gson
  12. import com.google.gson.reflect.TypeToken
  13. import com.hwangjr.rxbus.annotation.Subscribe
  14. import com.hwangjr.rxbus.annotation.Tag
  15. import com.quansu.heifengwuliu.activity.AddressActivity
  16. import com.quansu.heifengwuliu.activity.AreaSelectActivity
  17. import com.quansu.heifengwuliu.activity.CollectionActivity
  18. import com.quansu.heifengwuliu.base.MBFragment
  19. import com.quansu.heifengwuliu.config.ConfigRx
  20. import com.quansu.heifengwuliu.config.MIntentAction
  21. import com.quansu.heifengwuliu.databinding.FragmentOwnersingleBinding
  22. import com.quansu.heifengwuliu.inte.ChoiceData
  23. import com.quansu.heifengwuliu.inte.ChoiceListData
  24. import com.quansu.heifengwuliu.model.AddressBean
  25. import com.quansu.heifengwuliu.model.DataInfoBean
  26. import com.quansu.heifengwuliu.model.SelectData
  27. import com.quansu.heifengwuliu.model.bean.ReceiveBean
  28. import com.quansu.heifengwuliu.model.bean.SendBean
  29. import com.quansu.heifengwuliu.utils.PopuListUtils
  30. import com.quansu.heifengwuliu.utils.PopupUtils
  31. import com.quansu.heifengwuliu.vmodel.OwnerSingleVModel
  32. import com.yanzhenjie.permission.AndPermission
  33. import com.yanzhenjie.permission.runtime.Permission
  34. import com.ysnows.base.ccretrofit.CCRetrofit
  35. import com.ysnows.base.model.PositionBean
  36. import com.ysnows.base.route.IGaode
  37. import com.ysnows.base.utils.B
  38. import com.ysnows.base.utils.UiSwitch
  39. import java.text.DecimalFormat
  40. /**
  41. * 一装一卸
  42. *Created by shihuiyun
  43. *on 2020/9/11
  44. */
  45. class OwnerSingleFragment : MBFragment<OwnerSingleVModel, FragmentOwnersingleBinding>() {
  46. private var type = 1// 1:/装货 2卸货
  47. var goodsTypeList = ArrayList<SelectData>()
  48. var numsTypeList = ArrayList<String>()
  49. var insurance = ArrayList<String>()
  50. var is_agree = 1//默认 已阅读运输协议
  51. var is_public = 1//默认 发布到货源大厅
  52. var is_insurance = 0//默认 不够买保险
  53. //出
  54. var lat_out: String = ""
  55. var lng_out: String = ""
  56. var province_out: String = ""
  57. var city_out: String = ""
  58. var area_out: String = ""
  59. var time_out: String = ""
  60. //入
  61. var lat_in: String = ""
  62. var lng_in: String = ""
  63. var province_in: String = ""
  64. var city_in: String = ""
  65. var area_in: String = ""
  66. var time_in: String = ""
  67. var info_id:String="0"
  68. var goods_type_code="0"
  69. //常用司机
  70. var driverList=ArrayList<String>()
  71. override fun init(savedInstanceState: Bundle?) {
  72. super.init(savedInstanceState)
  73. getData()
  74. vm.info.observe(this, Observer {
  75. //观察
  76. goodsTypeList.addAll(it.goods_type)
  77. numsTypeList.addAll(it.nums_type)
  78. initTab(it)
  79. })
  80. initData()
  81. }
  82. override fun vmClass(): Class<OwnerSingleVModel> {
  83. return OwnerSingleVModel::class.java
  84. }
  85. override fun listeners() {
  86. super.listeners()
  87. binding.tvPublish.setOnClickListener {
  88. //发布
  89. judgeValue()
  90. }
  91. binding.llChoseUnits.setOnClickListener {
  92. PopuListUtils.showQMUIPopup(context(), binding.llChoseUnits, numsTypeList, object : ChoiceData {
  93. override fun onRestuse(name: String?) {
  94. vm.unit.value = name
  95. }
  96. })
  97. }
  98. binding.llGoodsType.setOnClickListener {
  99. PopuListUtils.showQMUIPopup(context(), binding.llGoodsType, goodsTypeList, object : ChoiceListData {
  100. override fun onRestuse(code: String?,name: String?) {
  101. goods_type_code=code!!
  102. vm.goodstype.value = name
  103. }
  104. })
  105. }
  106. binding.llIsInsurance.setOnClickListener {
  107. PopuListUtils.showQMUIPopup(context(), binding.tvIsInsurance, insurance, object : ChoiceData {
  108. override fun onRestuse(name: String?) {
  109. vm.insurance.value = name
  110. is_insurance = if (name.equals("是")) 1 else 0
  111. }
  112. })
  113. }
  114. binding.llAgree.setOnClickListener {
  115. is_agree = if (is_agree == 1) 0 else 1
  116. vm.isAgree.value = is_agree
  117. }
  118. binding.llPublic.setOnClickListener {
  119. is_public = if (is_public == 1) 0 else 1
  120. vm.isPush.value = is_public
  121. }
  122. binding.etSingCarNums.addTextChangedListener(object : TextWatcher {
  123. override fun beforeTextChanged(charSequence: CharSequence, i: Int, i1: Int, i2: Int) {}
  124. override fun onTextChanged(charSequence: CharSequence, i: Int, i1: Int, i2: Int) {}
  125. override fun afterTextChanged(editable: Editable) {
  126. var nums = editable.toString().trim()
  127. if (TextUtils.isEmpty(nums)) {
  128. nums = "0"
  129. }
  130. sumTotal(1, nums)
  131. }
  132. })
  133. binding.etSingCarPrice.addTextChangedListener(object : TextWatcher {
  134. override fun beforeTextChanged(charSequence: CharSequence, i: Int, i1: Int, i2: Int) {}
  135. override fun onTextChanged(charSequence: CharSequence, i: Int, i1: Int, i2: Int) {}
  136. override fun afterTextChanged(editable: Editable) {
  137. var price = editable.toString().trim()
  138. if (TextUtils.isEmpty(price)) {
  139. price = "0"
  140. }
  141. sumTotal(2, price)
  142. }
  143. })
  144. binding.llDriver.setOnClickListener {
  145. //指定常用司机
  146. UiSwitch.singleRes(this, CollectionActivity::class.java, MIntentAction.REQUEST_CODE_THREE)
  147. }
  148. }
  149. private fun judgeValue() {
  150. // UiSwitch.bundle(context, SourceDetailsActivity::class.java, Bundle().apply {
  151. // putString("info_id", "55")
  152. // putString("type","1")
  153. // })
  154. //
  155. // return
  156. var type_id=binding.viewHead.type_id
  157. if(TextUtils.isEmpty(type_id)){
  158. toast("请选择车型!")
  159. return
  160. }
  161. if (TextUtils.isEmpty(province_out)) {
  162. toast("请选择装货地址!")
  163. return
  164. }
  165. var name_out = binding.viewHead.getEtName()!!.text.toString().trim()
  166. if (TextUtils.isEmpty(name_out)) {
  167. toast("请输入发货人!")
  168. return
  169. }
  170. var mobile_out = binding.viewHead.getEtPhone()!!.text.toString().trim()
  171. if (TextUtils.isEmpty(mobile_out)) {
  172. toast("请输入发货人电话!")
  173. return
  174. }
  175. if (TextUtils.isEmpty(time_out)) {
  176. toast("请输入装货时间")
  177. return
  178. }
  179. var address_out = binding.viewHead.getEtDetailedAddress()!!.text.toString().trim()
  180. var sendBean = SendBean(lat_out, lng_out, province_out, city_out, area_out, address_out, name_out, mobile_out, time_out, "0")
  181. if (TextUtils.isEmpty(province_in)) {
  182. toast("请选择卸货地址!")
  183. return
  184. }
  185. var name_in = binding.viewEnter.getEtName()!!.text.toString().trim()
  186. if (TextUtils.isEmpty(name_in)) {
  187. toast("请输入卸货人!")
  188. return
  189. }
  190. var mobile_in = binding.viewEnter.getEtPhone()!!.text.toString().trim()
  191. if (TextUtils.isEmpty(mobile_in)) {
  192. toast("请输入卸货人电话!")
  193. return
  194. }
  195. if (TextUtils.isEmpty(time_in)) {
  196. toast("请输入卸货时间")
  197. return
  198. }
  199. var goods_name=binding.etGoodsName.text.toString().trim()
  200. if (TextUtils.isEmpty(goods_name)) {
  201. toast("请输入货物名称")
  202. return
  203. }
  204. if (TextUtils.isEmpty(vm.goodstype.value.toString())) {
  205. toast("请选择货物类型")
  206. return
  207. }
  208. if (TextUtils.isEmpty(vm.unit.value.toString())) {
  209. toast("请选择单车运量单位")
  210. return
  211. }
  212. var nums = binding.etSingCarNums.text.toString().trim()
  213. if (TextUtils.isEmpty(vm.unit.value.toString())) {
  214. toast("请输入单车运量数量")
  215. return
  216. }
  217. var price = binding.etSingCarPrice.text.toString().trim()
  218. var total = binding.etSingCarTotal.text.toString().trim()
  219. if (TextUtils.isEmpty(vm.unit.value.toString())) {
  220. toast("请输入总金额")
  221. return
  222. }
  223. var address_in = binding.viewEnter.getEtDetailedAddress()!!.text.toString().trim()
  224. var receiveBean = ReceiveBean(lat_in, lng_in, province_in, city_in, area_in, address_in, name_in, mobile_in, time_in, "1",
  225. goods_name, goods_type_code, nums, vm.unit.value.toString(), price, total,"",""
  226. )
  227. if (is_agree==0) {
  228. toast("请阅读并同意《平台运输协议》")
  229. return
  230. }
  231. var carnums=binding.etCarNums.text.toString()
  232. if(TextUtils.isEmpty(carnums)){
  233. toast("请输入所需车辆数量")
  234. return
  235. }
  236. var data=binding.etData.text.toString()
  237. var sendList=ArrayList<SendBean>()
  238. sendList.add(sendBean)
  239. var send= Gson().toJson(sendList)
  240. var receiveList=ArrayList<ReceiveBean>()
  241. receiveList.add(receiveBean)
  242. var receive= Gson().toJson(receiveList)
  243. var driver=Gson().toJson(driverList)
  244. vm.setReleaseSource(info_id,type_id,total,driver,carnums,is_public.toString(),is_insurance.toString(),"1",
  245. data,send,receive)
  246. }
  247. /**
  248. * type:1单车运量 2单价
  249. * value:输入的值
  250. * @return
  251. */
  252. private fun sumTotal(type: Int, value: String) {
  253. var df = DecimalFormat("0.00")
  254. var total = "0"
  255. if (type == 1) {//数量
  256. var price = binding.etSingCarPrice.text.toString().trim()
  257. if (TextUtils.isEmpty(price)) {
  258. price = "0"
  259. }
  260. total = df.format(value.toDouble() * price.toDouble())
  261. } else {//价格
  262. var nums = binding.etSingCarNums.text.toString().trim()
  263. if (TextUtils.isEmpty(nums)) {
  264. nums = "0"
  265. }
  266. var df = DecimalFormat("0.00");
  267. total = df.format(nums.toDouble() * value.toDouble())
  268. }
  269. binding.etSingCarTotal.setText(total)
  270. }
  271. private fun getData() {
  272. //获取信息
  273. vm.getDataInfo(info_id);
  274. }
  275. private fun initTab(info: DataInfoBean) {
  276. binding.viewHead.setHeadData(info,childFragmentManager)
  277. if(null!=info.car_type&& info.car_type.isNotEmpty()) {
  278. binding.etSingCarNums.setText(info.car_type[0].weight)
  279. }
  280. //设置默认装货地址-卸货地址
  281. if(null!=info.default_send){
  282. binding.viewHead.getTvCity()!!.text = info.default_send.province.name + info.default_send.city.name + info.default_send.area.name
  283. binding.viewHead.getEtDetailedAddress()!!.setText(info.default_send.address)
  284. binding.viewHead.getTvChoseTime()!!.text = info.default_send.create_time
  285. binding.viewHead.getEtName()!!.setText(info.default_send.name)
  286. binding.viewHead.getEtPhone()!!.setText(info.default_send.mobile)
  287. lat_out = info.default_send.lat.toString()
  288. lng_out = info.default_send.lng.toString()
  289. area_out = info.default_send.area!!.code.toString()
  290. province_out = info.default_send.province!!.code.toString()
  291. city_out = info.default_send.city!!.code.toString()
  292. }
  293. if(null!=info.default_receive){
  294. binding.viewEnter.getTvCity()!!.text = info.default_receive.province?.name + info.default_receive.city?.name + info.default_receive.area?.name
  295. binding.viewEnter.getEtDetailedAddress()!!.setText(info.default_receive.address)
  296. binding.viewEnter.getTvChoseTime()!!.text = info.default_receive.create_time
  297. binding.viewEnter.getEtName()!!.setText(info.default_receive.name)
  298. binding.viewEnter.getEtPhone()!!.setText(info.default_receive.mobile)
  299. lat_in = info.default_receive.lat.toString()
  300. lng_in = info.default_receive.lng.toString()
  301. area_in = info.default_receive.area!!.code.toString()
  302. province_in = info.default_receive.province!!.code.toString()
  303. city_in = info.default_receive.city!!.code.toString()
  304. }
  305. binding.viewHead.getImgNext()!!.setOnClickListener {
  306. var selectViewpage = binding.viewHead.getQmViewPager()!!.currentItem
  307. if (selectViewpage < binding.viewHead.getCats().size - 1) {
  308. binding.viewHead.getQmViewPager()!!.currentItem = selectViewpage + 1
  309. }
  310. }
  311. //向右
  312. binding.viewHead.getImgDown()!!.setOnClickListener {
  313. toast("222")
  314. var selectViewpage =binding.viewHead.getQmViewPager()!!.currentItem
  315. if (selectViewpage < binding.viewHead.getCats().size - 1) {
  316. binding.viewHead.getQmViewPager()!!.currentItem = selectViewpage + 1
  317. }
  318. }
  319. //向左
  320. binding.viewHead.getImgUp()!!.setOnClickListener {
  321. var selectViewpage = binding.viewHead.getQmViewPager()!!.currentItem
  322. if (selectViewpage < binding.viewHead.getCats().size - 1 && selectViewpage > 0) {
  323. binding.viewHead.getQmViewPager()!!.currentItem = selectViewpage - 1
  324. }
  325. }
  326. }
  327. private fun initData() {
  328. insurance.add("是")
  329. insurance.add("否")
  330. //卸货信息
  331. binding.viewEnter.getTvCity()!!.hint = "请选择卸货地址"
  332. binding.viewEnter.getTvChoseTime()!!.hint = "请选择卸货时间"
  333. binding.viewEnter.getLlChoseMap()!!.setOnClickListener {
  334. //地图选点
  335. type = 2
  336. choseMap()
  337. }
  338. binding.viewHead.getLlChoseMap()!!.setOnClickListener {
  339. //地图选点
  340. type = 1
  341. choseMap()
  342. }
  343. binding.viewHead.getLlChoseAddress()!!.setOnClickListener {
  344. //地址薄 1
  345. type = 1
  346. UiSwitch.bundleRes(this, AddressActivity::class.java,
  347. B.with().putString("type", "1").ok(), MIntentAction.REQUEST_CODE_ONE)
  348. }
  349. binding.viewEnter.getLlChoseAddress()!!.setOnClickListener {
  350. //地址薄 2
  351. type = 2
  352. UiSwitch.bundleRes(this, AddressActivity::class.java,
  353. B.with().putString("type", "2").ok(), MIntentAction.REQUEST_CODE_ONE)
  354. }
  355. binding.viewEnter.getTvCity()!!.setOnClickListener {
  356. type = 2
  357. UiSwitch.singleRes(this, AreaSelectActivity::class.java,
  358. MIntentAction.REQUEST_CODE_TWO)
  359. }
  360. binding.viewHead.getTvCity()!!.setOnClickListener {
  361. type = 1
  362. UiSwitch.singleRes(this, AreaSelectActivity::class.java,
  363. MIntentAction.REQUEST_CODE_TWO)
  364. }
  365. binding.viewEnter.getTvChoseTime()!!.setOnClickListener {
  366. //选择时间
  367. PopupUtils.setChoseTime(context, binding.viewEnter.getTvChoseTime()!!, object : ChoiceData {
  368. override fun onRestuse(time: String?) {
  369. if (time != null) {
  370. time_in = time
  371. }
  372. }
  373. })
  374. }
  375. binding.viewHead.getTvChoseTime()!!.setOnClickListener {
  376. PopupUtils.setChoseTime(context, binding.viewHead.getTvChoseTime(), object : ChoiceData {
  377. override fun onRestuse(time: String?) {
  378. if (time != null) {
  379. time_out = time
  380. }
  381. }
  382. })
  383. }
  384. }
  385. override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
  386. super.onActivityResult(requestCode, resultCode, data)
  387. if (MIntentAction.REQUEST_CODE_TWO === requestCode && resultCode == Activity.RESULT_OK) {
  388. val bundle = data!!.extras
  389. if (null != bundle) {
  390. var name = bundle.getString("name")
  391. if (type == 1) {
  392. area_out = bundle.getString("area_code")
  393. province_out = bundle.getString("province_code")
  394. city_out = bundle.getString("city_code")
  395. binding.viewHead.getTvCity()!!.text = name
  396. } else {
  397. area_in = bundle.getString("area_code")
  398. province_in = bundle.getString("province_code")
  399. city_in = bundle.getString("city_code")
  400. binding.viewEnter.getTvCity()!!.text = name
  401. }
  402. }
  403. return
  404. }
  405. if (MIntentAction.REQUEST_CODE_ONE == requestCode && resultCode == Activity.RESULT_OK) {
  406. val bundle = data!!.extras
  407. if (null != bundle) {
  408. var item = bundle.getSerializable("item") as AddressBean
  409. //todo
  410. if (type == 1) {
  411. binding.viewHead.getTvCity()!!.text = item.province?.name + item.city?.name + item.area?.name
  412. binding.viewHead.getEtDetailedAddress()!!.setText(item.address)
  413. binding.viewHead.getTvChoseTime()!!.text = item.create_time
  414. binding.viewHead.getEtName()!!.setText(item.name)
  415. binding.viewHead.getEtPhone()!!.setText(item.mobile)
  416. lat_out = item.lat.toString()
  417. lng_out = item.lng.toString()
  418. area_out = item.area!!.code.toString()
  419. province_out = item.province!!.code.toString()
  420. city_out = item.city!!.code.toString()
  421. time_out = item.create_time.toString()
  422. } else {
  423. binding.viewEnter.getTvCity()!!.text = item.province?.name + item.city?.name + item.area?.name
  424. binding.viewEnter.getEtDetailedAddress()!!.setText(item.address)
  425. binding.viewEnter.getTvChoseTime()!!.text = item.create_time
  426. binding.viewEnter.getEtName()!!.setText(item.name)
  427. binding.viewEnter.getEtPhone()!!.setText(item.mobile)
  428. lat_in = item.lat.toString()
  429. lng_in = item.lng.toString()
  430. area_in = item.area!!.code.toString()
  431. province_in = item.province!!.code.toString()
  432. city_in = item.city!!.code.toString()
  433. time_in = item.create_time.toString()
  434. }
  435. }
  436. return
  437. }
  438. if (MIntentAction.REQUEST_CODE_THREE == requestCode && resultCode == Activity.RESULT_OK){
  439. //常用司机
  440. val bundle = data!!.extras
  441. if (null != bundle) {
  442. driverList.clear()
  443. var arr=bundle.getSerializable("driver") as ArrayList<String>
  444. driverList.addAll(arr)
  445. binding.tvDriver.text="已指定"+driverList.size+"人"
  446. }
  447. return
  448. }
  449. }
  450. private fun choseMap() {
  451. AndPermission.with(repository().context)
  452. .runtime()
  453. .permission(Permission.ACCESS_COARSE_LOCATION,
  454. Permission.ACCESS_FINE_LOCATION,
  455. Permission.WRITE_EXTERNAL_STORAGE,
  456. Permission.READ_EXTERNAL_STORAGE,
  457. Permission.READ_PHONE_STATE
  458. )
  459. .onGranted { data ->
  460. CCRetrofit.instance()
  461. .with(context)
  462. .create(IGaode::class.java)
  463. .selectLocation()
  464. .subscribe()
  465. }
  466. .start()
  467. }
  468. override fun binding(inflater: LayoutInflater, container: ViewGroup?): FragmentOwnersingleBinding {
  469. return FragmentOwnersingleBinding.inflate(layoutInflater)
  470. }
  471. override fun title(): String? {
  472. return null
  473. }
  474. override val isRxbus: Boolean
  475. get() = true
  476. @Subscribe(tags = [Tag(ConfigRx.ADD_POSITION)])
  477. fun getPosition(bean: PositionBean) {
  478. var provincename = bean.provincename
  479. var latitude = bean.latitude
  480. var longitude = bean.longitude
  481. if (type == 2) {
  482. lat_in = bean.latitude
  483. lng_in = bean.longitude
  484. area_in = bean.areacode
  485. province_in = bean.areacode.substring(0, 2) + "0000"
  486. city_in = bean.areacode.substring(0, 4) + "00"
  487. binding.viewEnter.getEtDetailedAddress()!!.setText(bean.position)
  488. binding.viewEnter.getTvCity()!!.text = bean.provincename + bean.cityname + bean.areaname
  489. } else {
  490. lat_out = bean.latitude
  491. lng_out = bean.longitude
  492. area_out = bean.areacode
  493. province_out = bean.areacode.substring(0, 2) + "0000"
  494. city_out = bean.areacode.substring(0, 4) + "00"
  495. binding.viewHead.getEtDetailedAddress()!!.setText(bean.position)
  496. binding.viewHead.getTvCity()!!.text = bean.provincename + bean.cityname + bean.areaname
  497. }
  498. }
  499. @Subscribe(tags = [Tag(ConfigRx.CHOSE_CAR)])
  500. fun choseCar(weight: String) {
  501. //切换车辆
  502. binding.etSingCarNums.setText(weight)
  503. }
  504. }