新接口调试
This commit is contained in:
Generated
+2
-2
@@ -4,10 +4,10 @@
|
||||
<selectionStates>
|
||||
<SelectionState runConfigName="app">
|
||||
<option name="selectionMode" value="DROPDOWN" />
|
||||
<DropdownSelection timestamp="2025-09-10T07:28:30.961571900Z">
|
||||
<DropdownSelection timestamp="2026-01-28T08:24:39.059017600Z">
|
||||
<Target type="DEFAULT_BOOT">
|
||||
<handle>
|
||||
<DeviceId pluginId="Default" identifier="serial=192.168.1.21:5555;connection=bc7af9a5" />
|
||||
<DeviceId pluginId="Default" identifier="serial=192.168.1.80:5555;connection=d6ad651e" />
|
||||
</handle>
|
||||
</Target>
|
||||
</DropdownSelection>
|
||||
|
||||
@@ -87,9 +87,11 @@ dependencies {
|
||||
androidTestImplementation(libs.androidx.junit)
|
||||
androidTestImplementation(libs.androidx.espresso.core)
|
||||
|
||||
implementation("com.squareup.okhttp3:okhttp:4.9.1")
|
||||
implementation("com.google.code.gson:gson:2.10.1")
|
||||
// implementation("com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.30")
|
||||
implementation("com.squareup.okhttp3:okhttp:4.9.1")
|
||||
implementation("com.squareup.okhttp3:logging-interceptor:4.9.1")
|
||||
implementation("com.squareup.retrofit2:retrofit:2.9.0")
|
||||
implementation("com.squareup.retrofit2:converter-gson:2.9.0")
|
||||
|
||||
implementation("io.github.cymchad:BaseRecyclerViewAdapterHelper4:4.1.2")
|
||||
|
||||
|
||||
Binary file not shown.
@@ -1,134 +0,0 @@
|
||||
//package com.shuwei.dish.match.adapter
|
||||
//
|
||||
//import android.annotation.SuppressLint
|
||||
//import android.widget.TextView
|
||||
//import androidx.recyclerview.widget.GridLayoutManager
|
||||
//import androidx.recyclerview.widget.RecyclerView
|
||||
//import com.shuwei.dish.match.base.BaseActivity
|
||||
//import com.shuwei.dish.match.dialog.BottomDialog2
|
||||
//import com.shuwei.dish.match.entity.SeasoningEntity
|
||||
//import com.shuwei.dish.match.ui.DeviceSettingActivity
|
||||
//import com.shuwei.dish.match.ui.SubmitDishActivity
|
||||
//import com.shuwei.dish.match.utils.DataUtil
|
||||
//
|
||||
//object SeasoningCellTool {
|
||||
// private val TAG = "SeasoningCellTool"
|
||||
//
|
||||
// private val list = mutableListOf<SeasoningEntity>()
|
||||
// private lateinit var activity: BaseActivity
|
||||
// private var pageType: Int = 0
|
||||
//
|
||||
// @SuppressLint("StaticFieldLeak")
|
||||
// private lateinit var cellAdapter: TextCellAdapter
|
||||
//
|
||||
// @SuppressLint("NotifyDataSetChanged")
|
||||
// fun loadData(
|
||||
// activity: BaseActivity,
|
||||
// initList: MutableList<SeasoningEntity>? = null,
|
||||
// recyclerView: RecyclerView,
|
||||
// tvCell: TextView,
|
||||
// pageType: Int = 0
|
||||
// ) {
|
||||
// this.activity = activity
|
||||
// this.pageType = pageType
|
||||
// list.clear()
|
||||
// val tempList = buildData(initList, pageType)
|
||||
// list.addAll(tempList)
|
||||
// recyclerView.run {
|
||||
// if (adapter == null) {
|
||||
// layoutManager = GridLayoutManager(
|
||||
// activity,
|
||||
// 3,
|
||||
// GridLayoutManager.VERTICAL,
|
||||
// false
|
||||
// )
|
||||
// cellAdapter = TextCellAdapter(list).apply {
|
||||
// onCellClick = { position ->
|
||||
// val currentAddress = DataUtil.getWeighAddressArray().get(position)
|
||||
// BottomDialog2(
|
||||
// weighIndex = position,
|
||||
// weighAddress = currentAddress,
|
||||
// clickName = list[position].goodsName
|
||||
// ).show(activity) { item ->
|
||||
// list[position].let { current ->
|
||||
// syncItem(current, item)
|
||||
// //3-调料
|
||||
// current.materialType = 3
|
||||
// current.sort = position
|
||||
// }
|
||||
// notifyItemChanged(position)
|
||||
// if (position == 14) {
|
||||
// syncItem(list[10], list[14])
|
||||
// syncItem(list[11], list[14])
|
||||
// syncItem(list[13], list[14])
|
||||
// TextCellAdapter.loadCell(tvCell, list[14])
|
||||
// notifyItemChanged(10)
|
||||
// notifyItemChanged(11)
|
||||
// notifyItemChanged(13)
|
||||
// notifyItemChanged(14)
|
||||
// }
|
||||
// if (activity is DeviceSettingActivity) {
|
||||
// //activity.list = list
|
||||
// activity.saveSeasoning(list[position])
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// adapter = cellAdapter
|
||||
// } else {
|
||||
// cellAdapter.notifyDataSetChanged()
|
||||
// }
|
||||
// if (activity is SubmitDishActivity) {
|
||||
// activity.updateSeasoningList(list)
|
||||
// }
|
||||
// }
|
||||
// if (pageType == 1) {
|
||||
// tvCell.setOnClickListener {
|
||||
// cellAdapter.onCellClick?.invoke(14)
|
||||
// }
|
||||
// }
|
||||
// TextCellAdapter.loadCell(tvCell, list[list.size - 1])
|
||||
// }
|
||||
//
|
||||
// private fun buildData(
|
||||
// initList: MutableList<SeasoningEntity>?,
|
||||
// pageType: Int = 0
|
||||
// ): MutableList<SeasoningEntity> {
|
||||
// val list = mutableListOf<SeasoningEntity>()
|
||||
// repeat(15) {
|
||||
// list.add(SeasoningEntity().apply { this.pageType = pageType })
|
||||
// }
|
||||
// if (initList.isNullOrEmpty().not()) {
|
||||
// initList.forEach {
|
||||
// if (it.sort < list.size) {
|
||||
// list[it.sort] = it.apply { this.pageType = pageType }
|
||||
// }
|
||||
// }
|
||||
// var lastItem = initList.firstOrNull { it.sort == 14 }
|
||||
// lastItem = lastItem ?: list[list.size - 1]
|
||||
// list[10] = lastItem
|
||||
// list[11] = lastItem
|
||||
// list[13] = lastItem
|
||||
// }
|
||||
// return list
|
||||
// }
|
||||
//
|
||||
// private fun syncItem(item: SeasoningEntity, newItem: SeasoningEntity) {
|
||||
// item.run {
|
||||
// goodsId = newItem.goodsId
|
||||
// goodsName = newItem.goodsName
|
||||
// goodsOrRelationCode = newItem.goodsOrRelationCode
|
||||
// relateionType = newItem.relateionType
|
||||
// materialType = newItem.materialType
|
||||
// allEdible = newItem.allEdible
|
||||
// useWeight = newItem.useWeight
|
||||
// popularName = newItem.popularName
|
||||
// canteenId = newItem.canteenId
|
||||
// relateionType_dictText = newItem.relateionType_dictText
|
||||
//
|
||||
// foodId = newItem.foodId
|
||||
// sort = newItem.sort
|
||||
// }
|
||||
// }
|
||||
//
|
||||
//}
|
||||
@@ -4,7 +4,6 @@ import android.content.Intent
|
||||
import android.os.Bundle
|
||||
import android.os.Handler
|
||||
import android.os.Looper
|
||||
import android.util.Log
|
||||
import android.view.View
|
||||
import android.widget.FrameLayout
|
||||
import android.widget.ImageView
|
||||
@@ -12,25 +11,25 @@ import android.widget.TextView
|
||||
import androidx.activity.enableEdgeToEdge
|
||||
import androidx.activity.result.ActivityResultLauncher
|
||||
import androidx.activity.result.contract.ActivityResultContracts
|
||||
import androidx.activity.viewModels
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.core.content.ContextCompat
|
||||
import com.shuwei.dish.match.R
|
||||
import com.shuwei.dish.match.databinding.ActivityBaseBinding
|
||||
import com.shuwei.dish.match.dialog.Loading
|
||||
import com.shuwei.dish.match.http.HttpUtil
|
||||
import com.shuwei.dish.match.http.UrlConfig
|
||||
import com.shuwei.dish.match.ui.HomeActivity.Companion.TAG
|
||||
import com.shuwei.dish.match.entity.CookFoodGoodsEntity
|
||||
import com.shuwei.dish.match.entity.SeasoningEntity
|
||||
import com.shuwei.dish.match.net.NetViewModel
|
||||
import com.shuwei.dish.match.ui.InitActivity
|
||||
import com.shuwei.dish.match.utils.ActivityManager
|
||||
import com.shuwei.dish.match.utils.ext.gone
|
||||
import com.shuwei.dish.match.utils.ext.invisible
|
||||
import com.shuwei.dish.match.utils.ext.put
|
||||
import com.shuwei.dish.match.utils.ext.toast
|
||||
import com.shuwei.dish.match.utils.ext.visible
|
||||
import java.time.LocalDateTime
|
||||
import java.time.ZoneId
|
||||
import java.time.format.DateTimeFormatter
|
||||
import java.util.Locale
|
||||
import kotlin.getValue
|
||||
|
||||
@Suppress("DEPRECATION")
|
||||
open class BaseActivity : AppCompatActivity() {
|
||||
@@ -95,7 +94,8 @@ open class BaseActivity : AppCompatActivity() {
|
||||
|
||||
fun statusBarDarkFont(enable: Boolean) {
|
||||
//window.decorView.systemUiVisibility = if (enable) View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR else 0
|
||||
val color = ContextCompat.getColor(this,
|
||||
val color = ContextCompat.getColor(
|
||||
this,
|
||||
if (enable) R.color.black else R.color.white
|
||||
)
|
||||
binding.tvLeftTime.setTextColor(color)
|
||||
@@ -172,9 +172,25 @@ open class BaseActivity : AppCompatActivity() {
|
||||
fun delayDismissLoading() {
|
||||
window.decorView.postDelayed({
|
||||
Loading.dismiss()
|
||||
},500)
|
||||
}, 500)
|
||||
}
|
||||
|
||||
|
||||
val netViewModel: NetViewModel by viewModels()
|
||||
fun queryGoodsList(
|
||||
param: MutableMap<String, Any>,
|
||||
onSuccess: (MutableList<CookFoodGoodsEntity>?) -> Unit,
|
||||
onFailure: (String, String) -> Unit
|
||||
) {
|
||||
netViewModel.queryGoodsList(param, onSuccess, onFailure)
|
||||
}
|
||||
|
||||
fun querySeasoningList(
|
||||
param: MutableMap<String, Any>,
|
||||
onSuccess: (MutableList<SeasoningEntity>?) -> Unit,
|
||||
onFailure: (String, String) -> Unit
|
||||
) {
|
||||
netViewModel.querySeasoningList(param, onSuccess, onFailure)
|
||||
}
|
||||
|
||||
}
|
||||
@@ -5,8 +5,11 @@ import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.content.IntentFilter
|
||||
import android.content.SharedPreferences
|
||||
import android.util.Log
|
||||
import com.shuwei.dish.match.R
|
||||
import com.shuwei.dish.match.db.DatabaseProvider
|
||||
import com.shuwei.dish.match.ui.InitActivity.Companion.TAG
|
||||
import com.shuwei.dish.match.utils.AppUtil
|
||||
import com.shuwei.dish.match.utils.BootReceiver
|
||||
|
||||
|
||||
@@ -17,7 +20,10 @@ class BaseApp : Application() {
|
||||
override fun onCreate() {
|
||||
super.onCreate()
|
||||
instance = this
|
||||
|
||||
val deviceId = AppUtil.getUDID(this)
|
||||
Log.d(TAG, "onCreate: deviceId=$deviceId")
|
||||
GlobalData.deviceId = deviceId
|
||||
// GlobalData.deviceId = "39a7abdd06b3c7ab"
|
||||
val filter = IntentFilter(Intent.ACTION_BOOT_COMPLETED)
|
||||
registerReceiver(BootReceiver(), filter)
|
||||
}
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
package com.shuwei.dish.match.base
|
||||
|
||||
object GlobalData {
|
||||
var appBaseUrl: String = "https://dev.yixiong-tech.com:8081"
|
||||
|
||||
/**
|
||||
* 设备id
|
||||
*/
|
||||
var deviceId: String = ""
|
||||
var appId = "Hkz1rBk6PZXbS8KwKr67K2eZtsz8bRoMHLg64bUdgCZj"
|
||||
var sdkKey = "AabXs3sHM8UhhE7oCGf4LVMLrdkGb1nJNksbjjTdVt7k"
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
object GlobalKey {
|
||||
const val KEY_EQUIPMENT_INFO = "equipmentInfo"
|
||||
const val KEY_TOKEN = "tokenKey"
|
||||
const val KEY_USER_INFO = "userInfoKey"
|
||||
const val KEY_USER_NAME = "userNameKey"
|
||||
}
|
||||
+121
-77
@@ -3,7 +3,7 @@ package com.shuwei.dish.match.dialog
|
||||
import android.annotation.SuppressLint
|
||||
import android.os.Handler
|
||||
import android.os.Looper
|
||||
import android.util.Log
|
||||
import android.text.Editable
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import androidx.core.view.isEmpty
|
||||
@@ -15,23 +15,17 @@ import com.shuwei.dish.match.R
|
||||
import com.shuwei.dish.match.adapter.GoodsInfoSearchAdapter
|
||||
import com.shuwei.dish.match.base.BaseActivity
|
||||
import com.shuwei.dish.match.base.BaseApp
|
||||
import com.shuwei.dish.match.databinding.DialogBottomSheetBinding
|
||||
import com.shuwei.dish.match.databinding.DialogFoodSearchBinding
|
||||
import com.shuwei.dish.match.entity.CookFoodGoodsEntity
|
||||
import com.shuwei.dish.match.entity.GoodsRecordBean
|
||||
import com.shuwei.dish.match.http.HttpUtil
|
||||
import com.shuwei.dish.match.http.UrlConfig
|
||||
import com.shuwei.dish.match.utils.KeyboardUtil
|
||||
import com.shuwei.dish.match.utils.ext.addOnActionSearchListener
|
||||
import com.shuwei.dish.match.utils.ext.toJsonString
|
||||
import com.shuwei.dish.match.utils.ext.toObject
|
||||
import com.shuwei.dish.match.utils.ext.toast
|
||||
|
||||
/**
|
||||
* @param goodsType 1-调料,0-食材
|
||||
* 食材搜索弹窗
|
||||
*/
|
||||
class BottomDialog(
|
||||
private var goodsType: Int = 1,
|
||||
private var defGoodsName:String? = null
|
||||
class FoodSearchDialog(
|
||||
private var defGoodsName: String? = null
|
||||
) {
|
||||
companion object {
|
||||
const val TAG = "BottomDialog"
|
||||
@@ -39,8 +33,8 @@ class BottomDialog(
|
||||
|
||||
private var list = mutableListOf<CookFoodGoodsEntity>()
|
||||
|
||||
private lateinit var binding: DialogBottomSheetBinding
|
||||
private lateinit var goodsInfoSearchAdapter: GoodsInfoSearchAdapter
|
||||
private lateinit var binding: DialogFoodSearchBinding
|
||||
private lateinit var searchAdapter: GoodsInfoSearchAdapter
|
||||
private var goodsName: String? = null
|
||||
|
||||
private var activity: BaseActivity? = null
|
||||
@@ -50,11 +44,30 @@ class BottomDialog(
|
||||
//直接使用BottomSheetDialog
|
||||
var dialog: BottomSheetDialog? = null
|
||||
val inflater = LayoutInflater.from(activity)
|
||||
binding = DialogBottomSheetBinding.inflate(inflater)
|
||||
|
||||
binding.tvSheetName.text = if (goodsType == 1) "调料检索" else "食材检索"
|
||||
binding.etSheetInput.hint = if (goodsType == 1) "输入调料名称" else "输入食材名称或速记码"
|
||||
goodsInfoSearchAdapter = GoodsInfoSearchAdapter(list).apply {
|
||||
binding = DialogFoodSearchBinding.inflate(inflater)
|
||||
dialog = BottomSheetDialog(activity, R.style.BottomSheet).apply {
|
||||
setContentView(binding.root)
|
||||
setCancelable(true)
|
||||
behavior.skipCollapsed = false // 跳过折叠状态
|
||||
// behavior.peekHeight = 880.dp
|
||||
// window?.setLayout(-1, 880.dp)
|
||||
show()
|
||||
setOnDismissListener {
|
||||
activity.hideStatusBar()
|
||||
}
|
||||
binding.etSheetInput.requestFocus()
|
||||
}
|
||||
binding.tvSheetName.text = "食材检索"
|
||||
binding.etSheetInput.run {
|
||||
hint = "输入食材名称或速记码"
|
||||
addTextChangedListener(afterTextChanged = { it: Editable? ->
|
||||
if (it.isNullOrBlank()) {
|
||||
list.clear()
|
||||
searchAdapter.notifyDataSetChanged()
|
||||
}
|
||||
})
|
||||
}
|
||||
searchAdapter = GoodsInfoSearchAdapter(list).apply {
|
||||
setOnItemClickListener { _, _, position ->
|
||||
list[position].isClicked = true
|
||||
notifyItemChanged(position)
|
||||
@@ -66,7 +79,7 @@ class BottomDialog(
|
||||
}
|
||||
binding.recyclerView.run {
|
||||
layoutManager = GridLayoutManager(activity, 2, GridLayoutManager.VERTICAL, false)
|
||||
adapter = goodsInfoSearchAdapter
|
||||
adapter = searchAdapter
|
||||
addOnScrollListener(object : RecyclerView.OnScrollListener() {
|
||||
override fun onScrollStateChanged(rv: RecyclerView, newState: Int) {
|
||||
super.onScrollStateChanged(rv, newState);
|
||||
@@ -80,17 +93,6 @@ class BottomDialog(
|
||||
}
|
||||
})
|
||||
}
|
||||
dialog = BottomSheetDialog(activity, R.style.BottomSheet).apply {
|
||||
setContentView(binding.root)
|
||||
setCancelable(true)
|
||||
behavior.skipCollapsed = false // 跳过折叠状态
|
||||
// behavior.peekHeight = 880.dp
|
||||
// window?.setLayout(-1, 880.dp)
|
||||
show()
|
||||
setOnDismissListener {
|
||||
activity.hideStatusBar()
|
||||
}
|
||||
}
|
||||
binding.refreshLayout.setOnRefreshListener {
|
||||
pageNo = 1
|
||||
getGoodsList()
|
||||
@@ -143,58 +145,100 @@ class BottomDialog(
|
||||
@SuppressLint("NotifyDataSetChanged")
|
||||
private fun getGoodsList() {
|
||||
// val pathSegmentList = UrlConfig.QUERY_GOODS_LIST.split(delimiters = arrayOf("/"), limit = 1)
|
||||
val queryParams = mutableMapOf(
|
||||
"goodsType" to "$goodsType",
|
||||
"canteenId" to BaseApp.canteenId,
|
||||
"pageNo" to "$pageNo",
|
||||
"pageSize" to "$pageSize"
|
||||
// val queryParams = mutableMapOf(
|
||||
// "goodsType" to "0",
|
||||
// "canteenId" to BaseApp.canteenId,
|
||||
// "pageNo" to "$pageNo",
|
||||
// "pageSize" to "$pageSize"
|
||||
// )
|
||||
// if (goodsName.isNullOrBlank().not()) {
|
||||
// queryParams.put("name", goodsName!!)
|
||||
// }
|
||||
// val sb = StringBuilder().apply {
|
||||
// append(UrlConfig.QUERY_GOODS_LIST)
|
||||
// append("?")
|
||||
// queryParams.forEach { (key, value) ->
|
||||
// append("$key=$value&")
|
||||
// }
|
||||
// }
|
||||
// sb.deleteCharAt(sb.length - 1)
|
||||
// Log.d(TAG, "getGoodsList: url = $sb")
|
||||
// HttpUtil.get(
|
||||
// url = sb.toString(),
|
||||
// doSuccess = {
|
||||
// val json = it.toJsonString()
|
||||
// Log.d(TAG, "getGoodsList: json=$json")
|
||||
// val recordBean: GoodsRecordBean? = json.toObject<GoodsRecordBean>()
|
||||
// if (recordBean == null || recordBean.records.isNullOrEmpty()) {
|
||||
// activity?.toast("暂未搜索到食材信息")
|
||||
// return@get
|
||||
// }
|
||||
// val records = recordBean.records
|
||||
// if (pageNo == 1) {
|
||||
// list.clear()
|
||||
// }
|
||||
// list.addAll(records!!)
|
||||
// searchAdapter.notifyDataSetChanged()
|
||||
// if (pageNo == 1) {
|
||||
// binding.refreshLayout.finishRefresh(1200)
|
||||
// } else {
|
||||
// binding.refreshLayout.finishLoadMore(1200)
|
||||
// }
|
||||
// val isLoadMoreEnable = records.size >= pageSize
|
||||
// binding.refreshLayout.setEnableLoadMore(isLoadMoreEnable)
|
||||
// if (isLoadMoreEnable) {
|
||||
// pageNo++
|
||||
// }
|
||||
// }, doFailure = { code, msg ->
|
||||
// activity?.toast(msg)
|
||||
// if (pageNo == 1) {
|
||||
// binding.refreshLayout.finishRefresh(1200)
|
||||
// } else {
|
||||
// binding.refreshLayout.finishLoadMore(1200)
|
||||
// }
|
||||
// })
|
||||
val param = mutableMapOf<String, Any>(
|
||||
"goodsType" to "0",
|
||||
"placeId" to BaseApp.canteenId,
|
||||
"pageNum" to pageNo,
|
||||
"pageSize" to pageSize
|
||||
)
|
||||
if (goodsName.isNullOrBlank().not()) {
|
||||
queryParams.put("name", goodsName!!)
|
||||
param.put("name", goodsName!!)
|
||||
}
|
||||
val sb = StringBuilder().apply {
|
||||
append(UrlConfig.QUERY_GOODS_LIST)
|
||||
append("?")
|
||||
queryParams.forEach { (key, value) ->
|
||||
append("$key=$value&")
|
||||
activity?.queryGoodsList(param = param, onSuccess = {
|
||||
loadGoodsList(it)
|
||||
}, onFailure = { code, msg ->
|
||||
activity?.toast(msg)
|
||||
if (pageNo == 1) {
|
||||
binding.refreshLayout.finishRefresh(1200)
|
||||
} else {
|
||||
binding.refreshLayout.finishLoadMore(1200)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
@SuppressLint("NotifyDataSetChanged")
|
||||
private fun loadGoodsList(records: MutableList<CookFoodGoodsEntity>?) {
|
||||
if (records.isNullOrEmpty()) {
|
||||
activity?.toast("暂未搜索到食材信息")
|
||||
return
|
||||
}
|
||||
if (pageNo == 1) {
|
||||
list.clear()
|
||||
}
|
||||
list.addAll(records)
|
||||
searchAdapter.notifyDataSetChanged()
|
||||
if (pageNo == 1) {
|
||||
binding.refreshLayout.finishRefresh(1200)
|
||||
} else {
|
||||
binding.refreshLayout.finishLoadMore(1200)
|
||||
}
|
||||
val isLoadMoreEnable = records.size >= pageSize
|
||||
binding.refreshLayout.setEnableLoadMore(isLoadMoreEnable)
|
||||
if (isLoadMoreEnable) {
|
||||
pageNo++
|
||||
}
|
||||
sb.deleteCharAt(sb.length - 1)
|
||||
Log.d(TAG, "getGoodsList: url = $sb")
|
||||
HttpUtil.get(
|
||||
url = sb.toString(),
|
||||
doSuccess = {
|
||||
val json = it.toJsonString()
|
||||
Log.d(TAG, "getGoodsList: json=$json")
|
||||
val recordBean: GoodsRecordBean? = json.toObject<GoodsRecordBean>()
|
||||
if (recordBean == null || recordBean.records.isNullOrEmpty()) {
|
||||
activity?.toast(if (goodsType == 1) "暂未搜索到调料信息" else "暂未搜索到食材信息")
|
||||
return@get
|
||||
}
|
||||
val records = recordBean.records
|
||||
if (pageNo == 1) {
|
||||
list.clear()
|
||||
}
|
||||
list.addAll(records!!)
|
||||
goodsInfoSearchAdapter.notifyDataSetChanged()
|
||||
if (pageNo == 1) {
|
||||
binding.refreshLayout.finishRefresh(1200)
|
||||
} else {
|
||||
binding.refreshLayout.finishLoadMore(1200)
|
||||
}
|
||||
val isLoadMoreEnable = records.size >= pageSize
|
||||
binding.refreshLayout.setEnableLoadMore(isLoadMoreEnable)
|
||||
if (isLoadMoreEnable) {
|
||||
pageNo++
|
||||
}
|
||||
}, doFailure = { code, msg ->
|
||||
activity?.toast(msg)
|
||||
if (pageNo == 1) {
|
||||
binding.refreshLayout.finishRefresh(1200)
|
||||
} else {
|
||||
binding.refreshLayout.finishLoadMore(1200)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
}
|
||||
+147
-61
@@ -4,14 +4,18 @@ import android.annotation.SuppressLint
|
||||
import android.graphics.Typeface
|
||||
import android.os.Handler
|
||||
import android.os.Looper
|
||||
import android.text.Editable
|
||||
import android.text.SpannableStringBuilder
|
||||
import android.text.style.AbsoluteSizeSpan
|
||||
import android.text.style.ForegroundColorSpan
|
||||
import android.text.style.LineHeightSpan
|
||||
import android.text.style.StyleSpan
|
||||
import android.util.Log
|
||||
import android.view.Gravity
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.view.WindowManager
|
||||
import androidx.core.graphics.toColorInt
|
||||
import androidx.core.view.isEmpty
|
||||
import androidx.core.widget.addTextChangedListener
|
||||
@@ -22,11 +26,8 @@ import com.shuwei.dish.match.R
|
||||
import com.shuwei.dish.match.adapter.SeasoningSearchAdapter
|
||||
import com.shuwei.dish.match.base.BaseActivity
|
||||
import com.shuwei.dish.match.base.BaseApp
|
||||
import com.shuwei.dish.match.databinding.DialogBottomSheet2Binding
|
||||
import com.shuwei.dish.match.databinding.DialogSeasoningSearchBinding
|
||||
import com.shuwei.dish.match.entity.SeasoningEntity
|
||||
import com.shuwei.dish.match.entity.SeasoningRecordBean
|
||||
import com.shuwei.dish.match.http.HttpUtil
|
||||
import com.shuwei.dish.match.http.UrlConfig
|
||||
import com.shuwei.dish.match.utils.KeyboardUtil
|
||||
import com.shuwei.dish.match.utils.WeightUtil
|
||||
import com.shuwei.dish.match.utils.ext.addOnActionSearchListener
|
||||
@@ -34,15 +35,12 @@ import com.shuwei.dish.match.utils.ext.appendText
|
||||
import com.shuwei.dish.match.utils.ext.buildSpannableString
|
||||
import com.shuwei.dish.match.utils.ext.dp
|
||||
import com.shuwei.dish.match.utils.ext.roundedDecimalPlace
|
||||
import com.shuwei.dish.match.utils.ext.roundedOneDecimalPlace
|
||||
import com.shuwei.dish.match.utils.ext.toJsonString
|
||||
import com.shuwei.dish.match.utils.ext.toObject
|
||||
import com.shuwei.dish.match.utils.ext.toast
|
||||
|
||||
/**
|
||||
* @param goodsType 1-调料,0-食材
|
||||
* 调料搜索弹窗
|
||||
*/
|
||||
class BottomDialog2(
|
||||
class SeasoningSearchDialog(
|
||||
private var weighIndex: Int,
|
||||
private var weighAddress: Int,
|
||||
private var clickName: String? = null
|
||||
@@ -51,10 +49,9 @@ class BottomDialog2(
|
||||
const val TAG = "BottomDialog2"
|
||||
}
|
||||
|
||||
private val goodsType: Int = 1
|
||||
private var list = mutableListOf<SeasoningEntity>()
|
||||
|
||||
private lateinit var binding: DialogBottomSheet2Binding
|
||||
private lateinit var binding: DialogSeasoningSearchBinding
|
||||
private lateinit var searchAdapter: SeasoningSearchAdapter
|
||||
private var goodsName: String? = null
|
||||
|
||||
@@ -65,10 +62,17 @@ class BottomDialog2(
|
||||
//直接使用BottomSheetDialog
|
||||
var dialog: BottomSheetDialog? = null
|
||||
val inflater = LayoutInflater.from(activity)
|
||||
binding = DialogBottomSheet2Binding.inflate(inflater)
|
||||
binding = DialogSeasoningSearchBinding.inflate(inflater)
|
||||
|
||||
//binding.tvSheetName.text = if (goodsType == 1) "调料检索" else "食材检索"
|
||||
binding.etSheetInput.hint = if (goodsType == 1) "输入调料名称" else "输入食材名称或速记码"
|
||||
binding.etSheetInput.run {
|
||||
hint = "输入调料名称"
|
||||
addTextChangedListener(afterTextChanged = { it: Editable? ->
|
||||
if (it.isNullOrBlank()) {
|
||||
list.clear()
|
||||
searchAdapter.notifyDataSetChanged()
|
||||
}
|
||||
})
|
||||
}
|
||||
searchAdapter = SeasoningSearchAdapter(list).apply {
|
||||
setOnItemClickListener { _, _, position ->
|
||||
list[position].isClicked = true
|
||||
@@ -99,12 +103,45 @@ class BottomDialog2(
|
||||
setContentView(binding.root)
|
||||
setCancelable(true)
|
||||
behavior.skipCollapsed = false // 跳过折叠状态
|
||||
// behavior.peekHeight = 880.dp
|
||||
// window?.setLayout(-1, 880.dp)
|
||||
//// behavior.peekHeight = 880.dp
|
||||
//// window?.setLayout(-1, 880.dp)
|
||||
// window?.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE)
|
||||
window?.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN)
|
||||
//or WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN
|
||||
//or WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING // 禁用额外平移
|
||||
window?.setGravity(Gravity.BOTTOM)
|
||||
window?.setLayout(
|
||||
ViewGroup.LayoutParams.MATCH_PARENT,
|
||||
ViewGroup.LayoutParams.WRAP_CONTENT
|
||||
)
|
||||
window?.setWindowAnimations(R.style.DialogSoftInputAnimation)
|
||||
window?.clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN)
|
||||
show()
|
||||
// val onGlobalLayoutListener = ViewTreeObserver.OnGlobalLayoutListener {
|
||||
// val r = Rect()
|
||||
// binding.root.getWindowVisibleDisplayFrame(r)
|
||||
// val screenHeight = binding.root.rootView.height
|
||||
// val keyboardHeight = screenHeight - r.bottom
|
||||
//
|
||||
// // 软键盘弹出(高度>200dp)
|
||||
// if (keyboardHeight > 200.dp) {
|
||||
// // 调整 Dialog 底部边距,避开软键盘
|
||||
// val layoutParams = binding.root.layoutParams as ViewGroup.MarginLayoutParams
|
||||
//// layoutParams.bottomMargin = keyboardHeight
|
||||
// layoutParams.bottomMargin = 200.dp
|
||||
// binding.root.layoutParams = layoutParams
|
||||
// } else {
|
||||
// // 软键盘收起,恢复边距
|
||||
// val layoutParams = binding.root.layoutParams as ViewGroup.MarginLayoutParams
|
||||
// layoutParams.bottomMargin = 0
|
||||
// binding.root.layoutParams = layoutParams
|
||||
// }
|
||||
// }
|
||||
setOnDismissListener {
|
||||
activity.hideStatusBar()
|
||||
// binding.root.viewTreeObserver.removeOnGlobalLayoutListener(onGlobalLayoutListener)
|
||||
}
|
||||
// binding.root.viewTreeObserver.addOnGlobalLayoutListener(onGlobalLayoutListener)
|
||||
}
|
||||
binding.refreshLayout.setOnRefreshListener {
|
||||
pageNo = 1
|
||||
@@ -138,7 +175,7 @@ class BottomDialog2(
|
||||
// WeightUtil.tareTwo(num+1)
|
||||
// }
|
||||
}
|
||||
WeightUtil.addWeightListener (
|
||||
WeightUtil.addWeightListener(
|
||||
weightKey = TAG,
|
||||
getWeight = { address, state, weight ->
|
||||
if (weighAddress == address) {
|
||||
@@ -173,65 +210,114 @@ class BottomDialog2(
|
||||
*/
|
||||
@SuppressLint("NotifyDataSetChanged")
|
||||
private fun getGoodsList() {
|
||||
val queryParams = mutableMapOf(
|
||||
"goodsType" to "$goodsType",
|
||||
"canteenId" to BaseApp.canteenId,
|
||||
"pageNo" to "$pageNo",
|
||||
"pageSize" to "$pageSize"
|
||||
// val queryParams = mutableMapOf(
|
||||
// "goodsType" to "1",
|
||||
// "canteenId" to BaseApp.canteenId,
|
||||
// "pageNo" to "$pageNo",
|
||||
// "pageSize" to "$pageSize"
|
||||
// )
|
||||
// if (goodsName.isNullOrBlank().not()) {
|
||||
// queryParams.put("name", goodsName!!)
|
||||
// }
|
||||
// val sb = StringBuilder().apply {
|
||||
// append(UrlConfig.QUERY_GOODS_LIST)
|
||||
// append("?")
|
||||
// queryParams.forEach { (key, value) ->
|
||||
// append("$key=$value&")
|
||||
// }
|
||||
// }
|
||||
// sb.deleteCharAt(sb.length - 1)
|
||||
// Log.d(TAG, "getGoodsList: url = $sb")
|
||||
// HttpUtil.get(
|
||||
// url = sb.toString(),
|
||||
// doSuccess = {
|
||||
// val json = it.toJsonString()
|
||||
// Log.d(TAG, "getGoodsList: json=$json")
|
||||
// val recordBean: SeasoningRecordBean? = json.toObject<SeasoningRecordBean>()
|
||||
// if (recordBean == null || recordBean.records.isNullOrEmpty()) {
|
||||
// activity?.toast( "暂未搜索到调料信息")
|
||||
// return@get
|
||||
// }
|
||||
// val records = recordBean.records
|
||||
// if (pageNo == 1) {
|
||||
// list.clear()
|
||||
// }
|
||||
// list.addAll(records!!)
|
||||
// searchAdapter.notifyDataSetChanged()
|
||||
// if (pageNo == 1) {
|
||||
// binding.refreshLayout.finishRefresh(1200)
|
||||
// } else {
|
||||
// binding.refreshLayout.finishLoadMore(1200)
|
||||
// }
|
||||
// val isLoadMoreEnable = records.size >= pageSize
|
||||
// binding.refreshLayout.setEnableLoadMore(isLoadMoreEnable)
|
||||
// if (isLoadMoreEnable) {
|
||||
// pageNo++
|
||||
// }
|
||||
// }, doFailure = { code, msg ->
|
||||
// activity?.toast(msg)
|
||||
// if (pageNo == 1) {
|
||||
// binding.refreshLayout.finishRefresh(1200)
|
||||
// } else {
|
||||
// binding.refreshLayout.finishLoadMore(1200)
|
||||
// }
|
||||
// })
|
||||
|
||||
|
||||
val param = mutableMapOf<String, Any>(
|
||||
"goodsType" to "1",
|
||||
"placeId" to BaseApp.canteenId,
|
||||
"pageNum" to pageNo,
|
||||
"pageSize" to pageSize
|
||||
)
|
||||
if (goodsName.isNullOrBlank().not()) {
|
||||
queryParams.put("name", goodsName!!)
|
||||
param.put("name", goodsName!!)
|
||||
}
|
||||
val sb = StringBuilder().apply {
|
||||
append(UrlConfig.QUERY_GOODS_LIST)
|
||||
append("?")
|
||||
queryParams.forEach { (key, value) ->
|
||||
append("$key=$value&")
|
||||
}
|
||||
}
|
||||
sb.deleteCharAt(sb.length - 1)
|
||||
Log.d(TAG, "getGoodsList: url = $sb")
|
||||
HttpUtil.get(
|
||||
url = sb.toString(),
|
||||
doSuccess = {
|
||||
val json = it.toJsonString()
|
||||
Log.d(TAG, "getGoodsList: json=$json")
|
||||
val recordBean: SeasoningRecordBean? = json.toObject<SeasoningRecordBean>()
|
||||
if (recordBean == null || recordBean.records.isNullOrEmpty()) {
|
||||
activity?.toast(if (goodsType == 1) "暂未搜索到调料信息" else "暂未搜索到食材信息")
|
||||
return@get
|
||||
}
|
||||
val records = recordBean.records
|
||||
if (pageNo == 1) {
|
||||
list.clear()
|
||||
}
|
||||
list.addAll(records!!)
|
||||
searchAdapter.notifyDataSetChanged()
|
||||
if (pageNo == 1) {
|
||||
binding.refreshLayout.finishRefresh(1200)
|
||||
} else {
|
||||
binding.refreshLayout.finishLoadMore(1200)
|
||||
}
|
||||
val isLoadMoreEnable = records.size >= pageSize
|
||||
binding.refreshLayout.setEnableLoadMore(isLoadMoreEnable)
|
||||
if (isLoadMoreEnable) {
|
||||
pageNo++
|
||||
}
|
||||
}, doFailure = { code, msg ->
|
||||
activity?.querySeasoningList(
|
||||
param = param,
|
||||
onSuccess = {
|
||||
loadGoodsList(it)
|
||||
},
|
||||
onFailure = { code, msg ->
|
||||
activity?.toast(msg)
|
||||
if (pageNo == 1) {
|
||||
binding.refreshLayout.finishRefresh(1200)
|
||||
} else {
|
||||
binding.refreshLayout.finishLoadMore(1200)
|
||||
}
|
||||
})
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
@SuppressLint("NotifyDataSetChanged")
|
||||
private fun loadGoodsList(records: MutableList<SeasoningEntity>?) {
|
||||
if (records.isNullOrEmpty()) {
|
||||
activity?.toast("暂未搜索到调料信息")
|
||||
return
|
||||
}
|
||||
if (pageNo == 1) {
|
||||
list.clear()
|
||||
}
|
||||
list.addAll(records)
|
||||
searchAdapter.notifyDataSetChanged()
|
||||
if (pageNo == 1) {
|
||||
binding.refreshLayout.finishRefresh(1200)
|
||||
} else {
|
||||
binding.refreshLayout.finishLoadMore(1200)
|
||||
}
|
||||
val isLoadMoreEnable = records.size >= pageSize
|
||||
binding.refreshLayout.setEnableLoadMore(isLoadMoreEnable)
|
||||
if (isLoadMoreEnable) {
|
||||
pageNo++
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
fun getTextSpan(weight: Double): SpannableStringBuilder {
|
||||
var topWeight = "$weight"
|
||||
var bottomUnit = "克"
|
||||
if (weight >= 1000) {
|
||||
topWeight = "${(weight/1000).roundedDecimalPlace(3)}"
|
||||
topWeight = "${(weight / 1000).roundedDecimalPlace(3)}"
|
||||
bottomUnit = "千克"
|
||||
}
|
||||
return buildSpannableString {
|
||||
@@ -23,6 +23,10 @@ data class CookFoodEntity(
|
||||
) : BaseEntity {
|
||||
@Ignore
|
||||
var stFoodInfoConstituteList: MutableList<CookFoodGoodsEntity>? = null
|
||||
@Ignore
|
||||
var matchingConstituteInfoList: MutableList<CookFoodGoodsEntity>? = null
|
||||
@Ignore
|
||||
var foodConstituteList: MutableList<CookFoodGoodsEntity>? = null
|
||||
|
||||
constructor() : this(foodId = "") // 必需的空构造
|
||||
}
|
||||
@@ -43,10 +43,14 @@ class CookFoodGoodsEntity(
|
||||
*/
|
||||
var materialType: Int = 0,
|
||||
|
||||
// /**
|
||||
// * 物品 是否全部可食:1-全部可食,0-部分可食,默认全部
|
||||
// */
|
||||
// var allEdible: Int = 1,
|
||||
/**
|
||||
* 物品 是否全部可食:1-全部可食,0-部分可食,默认全部
|
||||
* 物品 是否全部可食:true-全部可食,false-部分可食,默认全部
|
||||
*/
|
||||
var allEdible: Int = 1,
|
||||
var allEdible: Boolean = true,
|
||||
|
||||
/**
|
||||
* 物品 用料重量
|
||||
|
||||
@@ -36,11 +36,14 @@ data class SeasoningEntity(
|
||||
*/
|
||||
var materialType: Int = 3,
|
||||
|
||||
// /**
|
||||
// * 物品 是否全部可食:1-全部可食,0-部分可食,默认全部
|
||||
// */
|
||||
// var allEdible: Int = 1,
|
||||
/**
|
||||
* 物品 是否全部可食:1-全部可食,0-部分可食,默认全部
|
||||
* 物品 是否全部可食:true-全部可食,false-部分可食,默认全部
|
||||
*/
|
||||
var allEdible: Int = 1,
|
||||
|
||||
var allEdible: Boolean = true,
|
||||
/**
|
||||
* 物品 用料重量
|
||||
*/
|
||||
@@ -54,9 +57,9 @@ data class SeasoningEntity(
|
||||
|
||||
var sort: Int = 9999,
|
||||
/**
|
||||
* isDel表示数据是否已删除,1-已删除,为无效数据,0-正常使用,有效数据
|
||||
*/
|
||||
var isDel: Int = 0,
|
||||
* isDel表示数据是否已删除,1-已删除,为无效数据,0-正常使用,有效数据
|
||||
*/
|
||||
var isDel: Int = 0,
|
||||
var createTime: String = DateTimeUtil.formatDateTime(LocalDateTime.now())
|
||||
) : BaseEntity {
|
||||
@Ignore
|
||||
|
||||
@@ -1,70 +1,70 @@
|
||||
package com.shuwei.dish.match.http
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.util.Log
|
||||
import okhttp3.Call
|
||||
import okhttp3.Interceptor
|
||||
import okhttp3.OkHttpClient
|
||||
import okhttp3.Request
|
||||
import okhttp3.Response
|
||||
import java.util.concurrent.TimeUnit
|
||||
|
||||
import javax.net.ssl.*
|
||||
import java.security.SecureRandom
|
||||
import java.security.cert.X509Certificate
|
||||
|
||||
class HttpClient private constructor() {
|
||||
private val client: OkHttpClient by lazy {
|
||||
OkHttpClient.Builder()
|
||||
.apply {
|
||||
connectTimeout(15, TimeUnit.SECONDS)
|
||||
readTimeout(30, TimeUnit.SECONDS)
|
||||
writeTimeout(15, TimeUnit.SECONDS)
|
||||
sslSocketFactory(createSSLSocketFactory(), TrustAllCerts())
|
||||
hostnameVerifier { _, _ -> true }
|
||||
//if (BuildConfig.Debug) {
|
||||
addInterceptor(LoggingInterceptor())
|
||||
// }
|
||||
}
|
||||
.build()
|
||||
}
|
||||
|
||||
companion object {
|
||||
val instance by lazy { HttpClient() }
|
||||
}
|
||||
|
||||
fun newCall(request: Request): Call = client.newCall(request)
|
||||
|
||||
inner class LoggingInterceptor : Interceptor {
|
||||
override fun intercept(chain: Interceptor.Chain): Response {
|
||||
val request = chain.request()
|
||||
// 打印请求日志
|
||||
Log.d("OkHttp", "--> ${request.method} ${request.url}")
|
||||
|
||||
val response = chain.proceed(request)
|
||||
// 打印响应日志
|
||||
Log.d("OkHttp", "<-- ${response.code} ${response.request.url}")
|
||||
|
||||
return response
|
||||
}
|
||||
}
|
||||
|
||||
// 信任所有证书的TrustManager实现
|
||||
@SuppressLint("CustomX509TrustManager")
|
||||
class TrustAllCerts : X509TrustManager {
|
||||
@SuppressLint("TrustAllX509TrustManager")
|
||||
override fun checkClientTrusted(chain: Array<X509Certificate>, authType: String) {}
|
||||
@SuppressLint("TrustAllX509TrustManager")
|
||||
override fun checkServerTrusted(chain: Array<X509Certificate>, authType: String) {}
|
||||
override fun getAcceptedIssuers(): Array<X509Certificate> = arrayOf()
|
||||
}
|
||||
|
||||
// 创建信任所有证书的SSLSocketFactory
|
||||
fun createSSLSocketFactory(): SSLSocketFactory {
|
||||
val sslContext = SSLContext.getInstance("TLS").apply {
|
||||
init(null, arrayOf(TrustAllCerts()), SecureRandom())
|
||||
}
|
||||
return sslContext.socketFactory
|
||||
}
|
||||
|
||||
}
|
||||
//package com.shuwei.dish.match.http
|
||||
//
|
||||
//import android.annotation.SuppressLint
|
||||
//import android.util.Log
|
||||
//import okhttp3.Call
|
||||
//import okhttp3.Interceptor
|
||||
//import okhttp3.OkHttpClient
|
||||
//import okhttp3.Request
|
||||
//import okhttp3.Response
|
||||
//import java.util.concurrent.TimeUnit
|
||||
//
|
||||
//import javax.net.ssl.*
|
||||
//import java.security.SecureRandom
|
||||
//import java.security.cert.X509Certificate
|
||||
//
|
||||
//class HttpClient private constructor() {
|
||||
// private val client: OkHttpClient by lazy {
|
||||
// OkHttpClient.Builder()
|
||||
// .apply {
|
||||
// connectTimeout(15, TimeUnit.SECONDS)
|
||||
// readTimeout(30, TimeUnit.SECONDS)
|
||||
// writeTimeout(15, TimeUnit.SECONDS)
|
||||
// sslSocketFactory(createSSLSocketFactory(), TrustAllCerts())
|
||||
// hostnameVerifier { _, _ -> true }
|
||||
// //if (BuildConfig.Debug) {
|
||||
// addInterceptor(LoggingInterceptor())
|
||||
// // }
|
||||
// }
|
||||
// .build()
|
||||
// }
|
||||
//
|
||||
// companion object {
|
||||
// val instance by lazy { HttpClient() }
|
||||
// }
|
||||
//
|
||||
// fun newCall(request: Request): Call = client.newCall(request)
|
||||
//
|
||||
// inner class LoggingInterceptor : Interceptor {
|
||||
// override fun intercept(chain: Interceptor.Chain): Response {
|
||||
// val request = chain.request()
|
||||
// // 打印请求日志
|
||||
// Log.d("OkHttp", "--> ${request.method} ${request.url}")
|
||||
//
|
||||
// val response = chain.proceed(request)
|
||||
// // 打印响应日志
|
||||
// Log.d("OkHttp", "<-- ${response.code} ${response.request.url}")
|
||||
//
|
||||
// return response
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// // 信任所有证书的TrustManager实现
|
||||
// @SuppressLint("CustomX509TrustManager")
|
||||
// class TrustAllCerts : X509TrustManager {
|
||||
// @SuppressLint("TrustAllX509TrustManager")
|
||||
// override fun checkClientTrusted(chain: Array<X509Certificate>, authType: String) {}
|
||||
// @SuppressLint("TrustAllX509TrustManager")
|
||||
// override fun checkServerTrusted(chain: Array<X509Certificate>, authType: String) {}
|
||||
// override fun getAcceptedIssuers(): Array<X509Certificate> = arrayOf()
|
||||
// }
|
||||
//
|
||||
// // 创建信任所有证书的SSLSocketFactory
|
||||
// fun createSSLSocketFactory(): SSLSocketFactory {
|
||||
// val sslContext = SSLContext.getInstance("TLS").apply {
|
||||
// init(null, arrayOf(TrustAllCerts()), SecureRandom())
|
||||
// }
|
||||
// return sslContext.socketFactory
|
||||
// }
|
||||
//
|
||||
//}
|
||||
|
||||
@@ -1,199 +1,199 @@
|
||||
package com.shuwei.dish.match.http
|
||||
|
||||
import android.os.Handler
|
||||
import android.os.Looper
|
||||
import android.util.Log
|
||||
import com.google.gson.reflect.TypeToken
|
||||
import com.shuwei.dish.match.base.BaseApp
|
||||
import com.shuwei.dish.match.base.BaseReq
|
||||
import com.shuwei.dish.match.utils.SpTool
|
||||
import com.shuwei.dish.match.utils.ext.toType
|
||||
import okhttp3.Call
|
||||
import okhttp3.Callback
|
||||
import okhttp3.MediaType.Companion.toMediaTypeOrNull
|
||||
import okhttp3.Request
|
||||
import okhttp3.RequestBody.Companion.toRequestBody
|
||||
import okhttp3.Response
|
||||
import java.io.IOException
|
||||
import java.util.concurrent.Executors
|
||||
import java.util.concurrent.TimeUnit
|
||||
|
||||
|
||||
object HttpUtil {
|
||||
|
||||
var loopGetToken = true
|
||||
|
||||
fun runMainThread(action: () -> Unit) {
|
||||
Handler(Looper.getMainLooper()).post {
|
||||
action()
|
||||
}
|
||||
}
|
||||
|
||||
// GET请求(HTTPS)
|
||||
fun get(
|
||||
url: String,
|
||||
header: Map<String, String>?=null,
|
||||
doSuccess: (data: Any) -> Unit,
|
||||
doFailure: (code: Int?, msg: String?) -> Unit
|
||||
) {
|
||||
val request = Request.Builder()
|
||||
.url(if (url.isHttpApi()) url else UrlConfig.BASE_URL + url)
|
||||
.apply {
|
||||
if (header != null) {
|
||||
header.forEach {
|
||||
addHeader(it.key, it.value)
|
||||
}
|
||||
} else {
|
||||
val token = getToken()
|
||||
if (token.isNotBlank()) {
|
||||
addHeader("X-Access-Token", token)
|
||||
}
|
||||
}
|
||||
}
|
||||
.get()
|
||||
.build()
|
||||
HttpClient.instance.newCall(request).enqueue(CallbackImpl(doSuccess, doFailure))
|
||||
}
|
||||
//package com.shuwei.dish.match.http
|
||||
//
|
||||
//import android.os.Handler
|
||||
//import android.os.Looper
|
||||
//import android.util.Log
|
||||
//import com.google.gson.reflect.TypeToken
|
||||
//import com.shuwei.dish.match.base.BaseApp
|
||||
//import com.shuwei.dish.match.base.BaseReq
|
||||
//import com.shuwei.dish.match.utils.SpTool
|
||||
//import com.shuwei.dish.match.utils.ext.toType
|
||||
//import okhttp3.Call
|
||||
//import okhttp3.Callback
|
||||
//import okhttp3.MediaType.Companion.toMediaTypeOrNull
|
||||
//import okhttp3.Request
|
||||
//import okhttp3.RequestBody.Companion.toRequestBody
|
||||
//import okhttp3.Response
|
||||
//import java.io.IOException
|
||||
//import java.util.concurrent.Executors
|
||||
//import java.util.concurrent.TimeUnit
|
||||
//
|
||||
//
|
||||
//object HttpUtil {
|
||||
//
|
||||
// var loopGetToken = true
|
||||
//
|
||||
// fun runMainThread(action: () -> Unit) {
|
||||
// Handler(Looper.getMainLooper()).post {
|
||||
// action()
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// // GET请求(HTTPS)
|
||||
// fun get(
|
||||
// isHttps: Boolean = false,
|
||||
// host: String = "vip.shuziweidao.com",
|
||||
// pathSegmentList: List<String>,
|
||||
// queryParams: Map<String, String>,
|
||||
// url: String,
|
||||
// header: Map<String, String>?=null,
|
||||
// doSuccess: (data: Any) -> Unit,
|
||||
// doFailure: (code: Int?, msg: String?) -> Unit
|
||||
// ) {
|
||||
// val token = getToken()
|
||||
// val url = HttpUrl.Builder()
|
||||
// .scheme(if (isHttps) "https" else "http")
|
||||
// .host(host)
|
||||
// .apply {
|
||||
// pathSegmentList.forEach { addPathSegment(it) }
|
||||
// queryParams.forEach { (key, value) -> addQueryParameter(key, value) }
|
||||
// }
|
||||
// .build()
|
||||
// val request = Request.Builder()
|
||||
// .url(url)
|
||||
// .url(if (url.isHttpApi()) url else UrlConfig.BASE_URL + url)
|
||||
// .apply {
|
||||
// if (token.isNotBlank()) {
|
||||
// addHeader("Authorization", token)
|
||||
// if (header != null) {
|
||||
// header.forEach {
|
||||
// addHeader(it.key, it.value)
|
||||
// }
|
||||
// } else {
|
||||
// val token = getToken()
|
||||
// if (token.isNotBlank()) {
|
||||
// addHeader("X-Access-Token", token)
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// .get()
|
||||
// .build()
|
||||
// HttpClient.instance.newCall(request).enqueue(CallbackImpl(doSuccess, doFailure))
|
||||
// }
|
||||
|
||||
// POST表单(HTTPS)
|
||||
// fun postForm(url: String, params: Map<String, String>, callback: Callback) {
|
||||
// val formBody = FormBody.Builder().apply {
|
||||
// params.forEach { (k, v) -> add(k, v) }
|
||||
// }.build()
|
||||
////
|
||||
//// fun get(
|
||||
//// isHttps: Boolean = false,
|
||||
//// host: String = "vip.shuziweidao.com",
|
||||
//// pathSegmentList: List<String>,
|
||||
//// queryParams: Map<String, String>,
|
||||
//// doSuccess: (data: Any) -> Unit,
|
||||
//// doFailure: (code: Int?, msg: String?) -> Unit
|
||||
//// ) {
|
||||
//// val token = getToken()
|
||||
//// val url = HttpUrl.Builder()
|
||||
//// .scheme(if (isHttps) "https" else "http")
|
||||
//// .host(host)
|
||||
//// .apply {
|
||||
//// pathSegmentList.forEach { addPathSegment(it) }
|
||||
//// queryParams.forEach { (key, value) -> addQueryParameter(key, value) }
|
||||
//// }
|
||||
//// .build()
|
||||
//// val request = Request.Builder()
|
||||
//// .url(url)
|
||||
//// .apply {
|
||||
//// if (token.isNotBlank()) {
|
||||
//// addHeader("Authorization", token)
|
||||
//// }
|
||||
//// }
|
||||
//// .get()
|
||||
//// .build()
|
||||
//// HttpClient.instance.newCall(request).enqueue(CallbackImpl(doSuccess, doFailure))
|
||||
//// }
|
||||
//
|
||||
// // POST表单(HTTPS)
|
||||
//// fun postForm(url: String, params: Map<String, String>, callback: Callback) {
|
||||
//// val formBody = FormBody.Builder().apply {
|
||||
//// params.forEach { (k, v) -> add(k, v) }
|
||||
//// }.build()
|
||||
////
|
||||
//// Request.Builder()
|
||||
//// .url(url)
|
||||
//// .post(formBody)
|
||||
//// .build().let { HttpClient.instance.newCall(it).enqueue(callback) }
|
||||
//// }
|
||||
//
|
||||
// // POST JSON(HTTPS)
|
||||
// fun postJson(
|
||||
// url: String,
|
||||
// json: String,
|
||||
// doSuccess: (data: Any) -> Unit,
|
||||
// doFailure: (code: Int?, msg: String?) -> Unit
|
||||
// ) {
|
||||
// val body = json
|
||||
// .toRequestBody("application/json; charset=utf-8".toMediaTypeOrNull())
|
||||
// val token = getToken()
|
||||
// Request.Builder()
|
||||
// .url(url)
|
||||
// .post(formBody)
|
||||
// .build().let { HttpClient.instance.newCall(it).enqueue(callback) }
|
||||
// .url(if (url.isHttpApi()) url else UrlConfig.BASE_URL + url)
|
||||
// .apply {
|
||||
// if (token.isNotBlank()) {
|
||||
// addHeader("X-Access-Token", token)
|
||||
// }
|
||||
// }
|
||||
// .post(body)
|
||||
// .build()
|
||||
// .let { HttpClient.instance.newCall(it).enqueue(CallbackImpl(doSuccess, doFailure)) }
|
||||
// }
|
||||
|
||||
// POST JSON(HTTPS)
|
||||
fun postJson(
|
||||
url: String,
|
||||
json: String,
|
||||
doSuccess: (data: Any) -> Unit,
|
||||
doFailure: (code: Int?, msg: String?) -> Unit
|
||||
) {
|
||||
val body = json
|
||||
.toRequestBody("application/json; charset=utf-8".toMediaTypeOrNull())
|
||||
val token = getToken()
|
||||
Request.Builder()
|
||||
.url(if (url.isHttpApi()) url else UrlConfig.BASE_URL + url)
|
||||
.apply {
|
||||
if (token.isNotBlank()) {
|
||||
addHeader("X-Access-Token", token)
|
||||
}
|
||||
}
|
||||
.post(body)
|
||||
.build()
|
||||
.let { HttpClient.instance.newCall(it).enqueue(CallbackImpl(doSuccess, doFailure)) }
|
||||
}
|
||||
|
||||
|
||||
val executor = Executors.newSingleThreadScheduledExecutor()
|
||||
var getTokenIsRunning = false
|
||||
private fun exeTokenThread() {
|
||||
if (getTokenIsRunning.not()) {
|
||||
executor.scheduleWithFixedDelay(
|
||||
task, 0, 1, TimeUnit.MINUTES
|
||||
)
|
||||
getTokenIsRunning = true
|
||||
}
|
||||
}
|
||||
|
||||
val task = Runnable {
|
||||
if (BaseApp.token.isNullOrBlank()) {
|
||||
getAppToken()
|
||||
} else {
|
||||
executor.shutdown()
|
||||
}
|
||||
}
|
||||
|
||||
fun getToken() = SpTool.getString(SpTool.TOKEN)
|
||||
//BaseApp.instance?.token ?:""
|
||||
//BaseApp.getSharedPref()?.getString("token", "") ?: ""
|
||||
|
||||
fun getAppToken() {
|
||||
val url = "${UrlConfig.GET_TOKEN}?qrcodeId=${SpTool.getString(SpTool.DEVICE_ID)}"
|
||||
// Log.d(TAG, "getToken: url = $url")
|
||||
get(url = url, doSuccess = {
|
||||
SpTool.put(SpTool.TOKEN, it)
|
||||
BaseApp.token = it.toString()
|
||||
}) { code, msg ->
|
||||
//toast(msg)
|
||||
}
|
||||
}
|
||||
|
||||
class CallbackImpl(
|
||||
private val doSuccess: (data: Any) -> Unit,
|
||||
private val doFailure: (code: Int?, msg: String?) -> Unit
|
||||
) :
|
||||
Callback {
|
||||
override fun onFailure(call: Call, e: IOException) {
|
||||
runMainThread {
|
||||
e.printStackTrace()
|
||||
doFailure(-1, "服务异常,${e.message}")
|
||||
}
|
||||
}
|
||||
|
||||
override fun onResponse(call: Call, response: Response) {
|
||||
val respData = response.body?.string()
|
||||
runMainThread {
|
||||
Log.d("HttpUtil", respData ?: "")
|
||||
runCatching {
|
||||
val typeToken = object : TypeToken<BaseReq<Any>>() {}
|
||||
val baseReq = respData?.toType<BaseReq<Any>>(typeToken = typeToken)
|
||||
if (baseReq == null) {
|
||||
doFailure(-1, "查询数据失败")
|
||||
return@runCatching
|
||||
}
|
||||
if (baseReq.code != 200) {
|
||||
doFailure(baseReq.code, baseReq.message)
|
||||
//baseReq.code == 500 ||
|
||||
if (baseReq.code == 401 && loopGetToken) {
|
||||
exeTokenThread()
|
||||
}
|
||||
return@runCatching
|
||||
}
|
||||
doSuccess(baseReq.result ?: "")
|
||||
}.onFailure {
|
||||
it.printStackTrace()
|
||||
doFailure(-1, "解析异常")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
fun String.isHttpApi() = this.startsWith("http://") || this.startsWith("https://")
|
||||
//
|
||||
//
|
||||
// val executor = Executors.newSingleThreadScheduledExecutor()
|
||||
// var getTokenIsRunning = false
|
||||
// private fun exeTokenThread() {
|
||||
// if (getTokenIsRunning.not()) {
|
||||
// executor.scheduleWithFixedDelay(
|
||||
// task, 0, 1, TimeUnit.MINUTES
|
||||
// )
|
||||
// getTokenIsRunning = true
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// val task = Runnable {
|
||||
// if (BaseApp.token.isNullOrBlank()) {
|
||||
// getAppToken()
|
||||
// } else {
|
||||
// executor.shutdown()
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// fun getToken() = SpTool.getString(SpTool.TOKEN)
|
||||
////BaseApp.instance?.token ?:""
|
||||
////BaseApp.getSharedPref()?.getString("token", "") ?: ""
|
||||
//
|
||||
// fun getAppToken() {
|
||||
// val url = "${UrlConfig.GET_TOKEN}?qrcodeId=${SpTool.getString(SpTool.DEVICE_ID)}"
|
||||
//// Log.d(TAG, "getToken: url = $url")
|
||||
// get(url = url, doSuccess = {
|
||||
// SpTool.put(SpTool.TOKEN, it)
|
||||
// BaseApp.token = it.toString()
|
||||
// }) { code, msg ->
|
||||
// //toast(msg)
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// class CallbackImpl(
|
||||
// private val doSuccess: (data: Any) -> Unit,
|
||||
// private val doFailure: (code: Int?, msg: String?) -> Unit
|
||||
// ) :
|
||||
// Callback {
|
||||
// override fun onFailure(call: Call, e: IOException) {
|
||||
// runMainThread {
|
||||
// e.printStackTrace()
|
||||
// doFailure(-1, "服务异常,${e.message}")
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// override fun onResponse(call: Call, response: Response) {
|
||||
// val respData = response.body?.string()
|
||||
// runMainThread {
|
||||
// Log.d("HttpUtil", respData ?: "")
|
||||
// runCatching {
|
||||
// val typeToken = object : TypeToken<BaseReq<Any>>() {}
|
||||
// val baseReq = respData?.toType<BaseReq<Any>>(typeToken = typeToken)
|
||||
// if (baseReq == null) {
|
||||
// doFailure(-1, "查询数据失败")
|
||||
// return@runCatching
|
||||
// }
|
||||
// if (baseReq.code != 200) {
|
||||
// doFailure(baseReq.code, baseReq.message)
|
||||
// //baseReq.code == 500 ||
|
||||
// if (baseReq.code == 401 && loopGetToken) {
|
||||
// exeTokenThread()
|
||||
// }
|
||||
// return@runCatching
|
||||
// }
|
||||
// doSuccess(baseReq.result ?: "")
|
||||
// }.onFailure {
|
||||
// it.printStackTrace()
|
||||
// doFailure(-1, "解析异常")
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// }
|
||||
//
|
||||
//}
|
||||
//
|
||||
//fun String.isHttpApi() = this.startsWith("http://") || this.startsWith("https://")
|
||||
|
||||
@@ -1,36 +1,37 @@
|
||||
package com.shuwei.dish.match.http
|
||||
|
||||
import com.shuwei.dish.match.base.BaseApp
|
||||
//import com.shuwei.dish.match.base.BaseApp
|
||||
|
||||
object UrlConfig {
|
||||
private const val DEVICE_BASE_URL = "http://device.shuziweidao.com:8889"
|
||||
/**
|
||||
* device获取token
|
||||
*/
|
||||
const val DEVICE_TOKEN = "${DEVICE_BASE_URL}/sys/getEquipmentToken"
|
||||
/**
|
||||
*获取配置信息
|
||||
*/
|
||||
const val DEVICE_CONFIG = "${DEVICE_BASE_URL}/equipment/stEquipment/queryByEquipmentCode"
|
||||
// private const val DEVICE_BASE_URL = "http://device.shuziweidao.com:8889"
|
||||
// /**
|
||||
// * device获取token
|
||||
// */
|
||||
// const val DEVICE_TOKEN = "${DEVICE_BASE_URL}/sys/getEquipmentToken"
|
||||
// /**
|
||||
// *获取配置信息
|
||||
// */
|
||||
// const val DEVICE_CONFIG = "${DEVICE_BASE_URL}/equipment/stEquipment/queryByEquipmentCode"
|
||||
|
||||
// const val BASE_URL = "http://vip.shuziweidao.com/shuwei-zhct"
|
||||
// const val DISH_DETAIL = "$BASE_URL/scales/goodsUseList?foodId={foodId}&foodWeight={foodWeight}"
|
||||
// const val DISH_LIST = "$BASE_URL/scales/getRestInfoFoods?eaId=99&type=0&foodName"
|
||||
|
||||
// const val BASE_URL = "http://192.168.1.207:9102"
|
||||
const val BASE_URL = "https://yyjk.shuziweidao.com/gateway"
|
||||
// const val BASE_URL = "https://yyjk.shuziweidao.com/gateway"
|
||||
const val BASE_URL = "https://yyjk.shuziweidao.com/gateway/"
|
||||
// const val DISH_LIST = "$BASE_URL/scales/getRestInfoFoods?eaId=99&type=0&foodName"
|
||||
|
||||
|
||||
var DISH_DETAIL = "${BaseApp.configUrl}/food/stFoodInfoMatching/queryById"
|
||||
|
||||
// "$BASE_URL/scales/generateToken?deviceId=1111111111111111111111111111"
|
||||
|
||||
var GET_TOKEN = "${BaseApp.configUrl}/restaurant/equipment/stEquipment/getEquipmentToken"
|
||||
var SUBMIT_DISH = "${BaseApp.configUrl}/food/stFoodInfoMatching/saveoredit"
|
||||
|
||||
var QUERY_GOODS_LIST = "${BaseApp.configUrl}/food/stFoodInfoMatching/queryGoodsInfoList"
|
||||
var QUERY_FOOD_LIST = "${BaseApp.configUrl}/food/stFoodInfoMatching/list"
|
||||
var SAMPLING_LIST = "${BaseApp.configUrl}/food/stFoodInfoMatching/queryHistorical/goodsInfoList"
|
||||
// var DISH_DETAIL = "${BaseApp.configUrl}/food/stFoodInfoMatching/queryById"
|
||||
//
|
||||
// // "$BASE_URL/scales/generateToken?deviceId=1111111111111111111111111111"
|
||||
//
|
||||
// var GET_TOKEN = "${BaseApp.configUrl}/restaurant/equipment/stEquipment/getEquipmentToken"
|
||||
// var SUBMIT_DISH = "${BaseApp.configUrl}/food/stFoodInfoMatching/saveoredit"
|
||||
//
|
||||
// var QUERY_GOODS_LIST = "${BaseApp.configUrl}/food/stFoodInfoMatching/queryGoodsInfoList"
|
||||
// var QUERY_FOOD_LIST = "${BaseApp.configUrl}/food/stFoodInfoMatching/list"
|
||||
// var SAMPLING_LIST = "${BaseApp.configUrl}/food/stFoodInfoMatching/queryHistorical/goodsInfoList"
|
||||
|
||||
}
|
||||
@@ -0,0 +1,118 @@
|
||||
package com.shuwei.dish.match.net
|
||||
|
||||
import com.shuwei.dish.match.utils.ext.toJsonString
|
||||
import com.shuwei.dish.match.utils.ext.toObject
|
||||
import com.shuwei.dish.match.utils.ext.toType
|
||||
import org.apache.http.conn.ConnectTimeoutException
|
||||
import retrofit2.HttpException
|
||||
import java.io.IOException
|
||||
import java.net.SocketTimeoutException
|
||||
import java.net.UnknownHostException
|
||||
|
||||
///**
|
||||
// * 通用网络请求封装,统一处理异常
|
||||
// * @param onRequest 实际的 Retrofit 接口请求
|
||||
// * @param onSuccess 成功回调
|
||||
// * @param onFailure 自定义错误回调(可选,不传则用默认提示)
|
||||
// */
|
||||
//suspend fun <T> apiRequest(
|
||||
// onRequest: suspend () -> T,
|
||||
// onSuccess: (T) -> Unit,
|
||||
// onFailure: ((ApiException) -> Unit)? = null
|
||||
//) {
|
||||
// try {
|
||||
// // 执行实际的网络请求
|
||||
// val result = onRequest()
|
||||
// onSuccess(result)
|
||||
// } catch (e: Exception) {
|
||||
// val apiException = getApiException(e)
|
||||
// // 优先执行自定义错误回调,没有则用默认提示
|
||||
// if (onFailure != null) {
|
||||
// onFailure(apiException)
|
||||
// } else {
|
||||
// // 默认的错误提示(可根据 ErrorType 定制)
|
||||
// val tip = apiException.errorMsg
|
||||
// // 切换到UI线程弹提示(用 MainScope 确保在主线程)
|
||||
// MainScope().launch {
|
||||
// BaseApp.instance?.toast(tip)
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
|
||||
/**
|
||||
* 通用网络请求封装,统一处理异常
|
||||
* @param onRequest 实际的 Retrofit 接口请求
|
||||
* @param onSuccess 成功回调
|
||||
* @param onFailure 自定义错误回调(可选,不传则用默认提示)
|
||||
*/
|
||||
suspend fun <T> request(
|
||||
onRequest: suspend () -> ApiResponse<T>,
|
||||
onSuccess: (T) -> Unit,
|
||||
onFailure: (String, String) -> Unit
|
||||
) {
|
||||
var response: ApiResponse<T>?
|
||||
try {
|
||||
// 执行实际的网络请求
|
||||
response = onRequest()
|
||||
} catch (e: Exception) {
|
||||
val apiException = getApiException(e)
|
||||
onFailure("-1", apiException.errorMsg)
|
||||
return
|
||||
}
|
||||
if (response?.isSuccess() == true) {
|
||||
onSuccess(response.data as T)
|
||||
} else {
|
||||
onFailure(response?.code ?: "-1", response?.msg ?: "")
|
||||
}
|
||||
}
|
||||
|
||||
data class CodeMsg(
|
||||
var code: String? = null,
|
||||
var msg: String? = null
|
||||
)
|
||||
|
||||
fun getApiException(e: Exception): ApiException {
|
||||
// 捕获各类网络异常并转换为自定义异常
|
||||
return when (e) {
|
||||
is HttpException -> httpException2ApiException(e)
|
||||
|
||||
is UnknownHostException -> ApiException(
|
||||
ErrorType.NETWORK_ERROR,
|
||||
errorMsg = "网络未连接,请检查网络"
|
||||
)
|
||||
|
||||
is SocketTimeoutException -> ApiException(
|
||||
ErrorType.TIMEOUT_ERROR,
|
||||
errorMsg = "请求超时,请稍后重试"
|
||||
)
|
||||
|
||||
is ConnectTimeoutException -> ApiException(
|
||||
ErrorType.TIMEOUT_ERROR,
|
||||
errorMsg = "连接超时,请检查网络"
|
||||
)
|
||||
|
||||
is IOException -> ApiException(
|
||||
ErrorType.NETWORK_ERROR,
|
||||
errorMsg = "网络异常:${e.message ?: "未知IO错误"}"
|
||||
)
|
||||
|
||||
is ApiException -> e
|
||||
else -> ApiException(
|
||||
ErrorType.UNKNOWN_ERROR,
|
||||
errorMsg = "未知错误:${e.message ?: "未知"}",
|
||||
throwable = e
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
fun httpException2ApiException(e: HttpException): ApiException {
|
||||
val body = e.response()?.errorBody()?.string()
|
||||
val codeMsg: CodeMsg? = body?.toObject<CodeMsg>()
|
||||
return ApiException(
|
||||
ErrorType.NETWORK_ERROR,
|
||||
errorMsg = codeMsg?.msg ?: ""
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,121 @@
|
||||
package com.shuwei.dish.match.net
|
||||
|
||||
import com.shuwei.dish.match.base.GlobalData
|
||||
import com.shuwei.dish.match.entity.CookFoodEntity
|
||||
import com.shuwei.dish.match.entity.CookFoodGoodsEntity
|
||||
import com.shuwei.dish.match.entity.FoodRecord
|
||||
import com.shuwei.dish.match.entity.SeasoningEntity
|
||||
import retrofit2.http.Body
|
||||
import retrofit2.http.GET
|
||||
import retrofit2.http.POST
|
||||
import retrofit2.http.Query
|
||||
import retrofit2.http.Url
|
||||
|
||||
interface ApiService {
|
||||
|
||||
// @GET("/food/stFoodInfoMatching/list")
|
||||
// suspend fun getFoodList(
|
||||
// @Query("dinnerType") dinnerType: String,
|
||||
// @Query("canteenId") canteenId: String = BaseApp.canteenId,
|
||||
// @Query("pageNo") pageNo: Int,
|
||||
// @Query("pageSize") pageSize: Int
|
||||
// ): ApiResponse<FoodRecordBean?>
|
||||
|
||||
/**
|
||||
* 查询菜品详情
|
||||
*/
|
||||
@GET
|
||||
suspend fun getFoodDetail(
|
||||
@Url url: String = "${GlobalData.appBaseUrl}/terminal/neglect/matching/app/getConstituteByFoodId",
|
||||
@Query("foodId") foodId: String
|
||||
): ApiResponse<CookFoodEntity?>
|
||||
|
||||
|
||||
/**
|
||||
* 提交制作菜品
|
||||
*/
|
||||
@POST
|
||||
suspend fun submitCookFood(
|
||||
@Url url: String = "${GlobalData.appBaseUrl}/terminal/neglect/matching/app/saveConstitute",
|
||||
@Body param: CookFoodEntity
|
||||
): ApiResponse<Any?>
|
||||
|
||||
/**
|
||||
* 搜索菜品
|
||||
*/
|
||||
@POST
|
||||
suspend fun searchFoodList(
|
||||
@Url url:String = "${GlobalData.appBaseUrl}/terminal/neglect/matching/app/queryPageList",
|
||||
@Body param: MutableMap<String, Any>
|
||||
): ApiResponse<MutableList<FoodRecord>?>
|
||||
|
||||
/**
|
||||
* 采样数据
|
||||
*/
|
||||
@POST
|
||||
suspend fun getSamplingList(
|
||||
@Url url:String = "${GlobalData.appBaseUrl}/terminal/neglect/matching/app/queryHistoryGoodsInfoList",
|
||||
@Body param: MutableMap<String, Any>
|
||||
): ApiResponse<MutableList<FoodRecord>?>
|
||||
|
||||
/**
|
||||
* 物品信息
|
||||
*/
|
||||
@POST
|
||||
suspend fun queryGoodsList(
|
||||
@Url url:String = "${GlobalData.appBaseUrl}/terminal/neglect/matching/app/queryGoodsInfoList",
|
||||
@Body param: MutableMap<String, Any>
|
||||
): ApiResponse<MutableList<CookFoodGoodsEntity>?>
|
||||
|
||||
/**
|
||||
* 物品信息
|
||||
*/
|
||||
@POST
|
||||
suspend fun querySeasoningList(
|
||||
@Url url:String = "${GlobalData.appBaseUrl}/terminal/neglect/matching/app/queryGoodsInfoList",
|
||||
@Body param: MutableMap<String, Any>
|
||||
): ApiResponse<MutableList<SeasoningEntity>?>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// /**
|
||||
// *获取配置信息
|
||||
// */
|
||||
// @GET("/equipment/stEquipment/queryByEquipmentCode")
|
||||
// suspend fun getDeviceInfo(
|
||||
// @Query("equipmentCode") equipmentCode: String,
|
||||
// @Query("appVersion") appVersion: String = App.appVersion
|
||||
// ): ApiResponse<DeviceConfigInfo>
|
||||
//
|
||||
// @GET
|
||||
// suspend fun getAccessToken(
|
||||
// @Url url: String = UrlConfig.GET_ACCESS_TOKEN,
|
||||
// @Query("qrcodeId") qrcodeId: String
|
||||
// ): ApiResponse<String?>
|
||||
//
|
||||
// @GET
|
||||
// suspend fun getShelfList(
|
||||
// @Url url: String = UrlConfig.GET_SHELF_LIST,
|
||||
// @Query("deviceId") deviceId: String
|
||||
// ): ApiResponse<ShelfResult>
|
||||
//
|
||||
// @GET
|
||||
// suspend fun getGoodsList(
|
||||
// @Url url: String = UrlConfig.GET_GOODS_LIST,
|
||||
// @Query("canteenId") canteenId: String = "0",
|
||||
// @Query("goodsName") goodsName: String? = null,
|
||||
// @Query("pageNo") pageNo: Int = 1,
|
||||
// @Query("pageSize") pageSize: Int = 50
|
||||
// ): ApiResponse<MutableList<GoodsModel>?>
|
||||
//
|
||||
// @POST
|
||||
// suspend fun saveShelfGoodsList(
|
||||
// @Url url: String = UrlConfig.SAVE_SHELF_GOODS_LIST,
|
||||
// @Body body: ShelfBody
|
||||
// ): ApiResponse<Any?>
|
||||
|
||||
}
|
||||
@@ -0,0 +1,68 @@
|
||||
//package com.shuwei.dish.match.net
|
||||
//
|
||||
//import com.shuwei.dish.match.base.BaseApp
|
||||
//import com.shuwei.dish.match.base.BaseReq
|
||||
//import com.shuwei.dish.match.entity.FoodRecordBean
|
||||
//import com.shuwei.dish.match.http.UrlConfig
|
||||
//import retrofit2.http.Body
|
||||
//import retrofit2.http.GET
|
||||
//import retrofit2.http.POST
|
||||
//import retrofit2.http.Query
|
||||
//import retrofit2.http.Url
|
||||
//
|
||||
//interface ApiService2 {
|
||||
//
|
||||
// @GET("food/stFoodInfoMatching/list")
|
||||
// suspend fun getDishList(
|
||||
// @Query("dinnerType") dinnerType: String,
|
||||
// @Query("canteenId") canteenId: String = BaseApp.canteenId,
|
||||
// @Query("pageNo") pageNo: Int,
|
||||
// @Query("pageSize") pageSize: Int
|
||||
// ): BaseReq<FoodRecordBean?>
|
||||
//
|
||||
//// /**
|
||||
//// * device获取token
|
||||
//// */
|
||||
//// @GET("/sys/getEquipmentToken")
|
||||
//// suspend fun getDeviceToken(
|
||||
//// @Query("qrcodeId") qrcodeId: String,
|
||||
//// @Query("appVersion") appVersion: String = App.appVersion
|
||||
//// ): ApiResponse<String>
|
||||
////
|
||||
//// /**
|
||||
//// *获取配置信息
|
||||
//// */
|
||||
//// @GET("/equipment/stEquipment/queryByEquipmentCode")
|
||||
//// suspend fun getDeviceInfo(
|
||||
//// @Query("equipmentCode") equipmentCode: String,
|
||||
//// @Query("appVersion") appVersion: String = App.appVersion
|
||||
//// ): ApiResponse<DeviceConfigInfo>
|
||||
////
|
||||
//// @GET
|
||||
//// suspend fun getAccessToken(
|
||||
//// @Url url: String = UrlConfig.GET_ACCESS_TOKEN,
|
||||
//// @Query("qrcodeId") qrcodeId: String
|
||||
//// ): ApiResponse<String?>
|
||||
////
|
||||
//// @GET
|
||||
//// suspend fun getShelfList(
|
||||
//// @Url url: String = UrlConfig.GET_SHELF_LIST,
|
||||
//// @Query("deviceId") deviceId: String
|
||||
//// ): ApiResponse<ShelfResult>
|
||||
////
|
||||
//// @GET
|
||||
//// suspend fun getGoodsList(
|
||||
//// @Url url: String = UrlConfig.GET_GOODS_LIST,
|
||||
//// @Query("canteenId") canteenId: String = "0",
|
||||
//// @Query("goodsName") goodsName: String? = null,
|
||||
//// @Query("pageNo") pageNo: Int = 1,
|
||||
//// @Query("pageSize") pageSize: Int = 50
|
||||
//// ): ApiResponse<MutableList<GoodsModel>?>
|
||||
////
|
||||
//// @POST
|
||||
//// suspend fun saveShelfGoodsList(
|
||||
//// @Url url: String = UrlConfig.SAVE_SHELF_GOODS_LIST,
|
||||
//// @Body body: ShelfBody
|
||||
//// ): ApiResponse<Any?>
|
||||
//
|
||||
//}
|
||||
@@ -0,0 +1,19 @@
|
||||
package com.shuwei.dish.match.net
|
||||
|
||||
// 1. 网络异常类型枚举
|
||||
enum class ErrorType {
|
||||
NETWORK_ERROR, // 网络错误(无网)
|
||||
TIMEOUT_ERROR, // 超时
|
||||
SERVER_ERROR, // 服务器错误(5xx)
|
||||
CLIENT_ERROR, // 客户端错误(4xx)
|
||||
PARSE_ERROR, // 数据解析错误
|
||||
UNKNOWN_ERROR // 未知错误
|
||||
}
|
||||
|
||||
// 2. 自定义网络异常类
|
||||
class ApiException(
|
||||
val errorType: ErrorType,
|
||||
val errorCode: Int = -1,
|
||||
val errorMsg: String,
|
||||
val throwable: Throwable? = null
|
||||
) : Exception(errorMsg, throwable)
|
||||
@@ -0,0 +1,40 @@
|
||||
//package com.shuwei.dish.match.net
|
||||
//
|
||||
//import android.annotation.SuppressLint
|
||||
//import okhttp3.Interceptor
|
||||
//import okhttp3.Response
|
||||
//import org.apache.http.conn.ConnectTimeoutException
|
||||
//import java.io.IOException
|
||||
//import java.net.SocketTimeoutException
|
||||
//import java.net.UnknownHostException
|
||||
//
|
||||
//class ExceptionInterceptor : Interceptor {
|
||||
// @SuppressLint("SuspiciousIndentation")
|
||||
// override fun intercept(chain: Interceptor.Chain): Response {
|
||||
// val request = chain.request()
|
||||
// try {
|
||||
// val response = chain.proceed(request)
|
||||
// // 拦截 HTTP 状态码异常(4xx/5xx)
|
||||
// if (!response.isSuccessful) {
|
||||
// val e = ApiException(
|
||||
// errorType = if (response.code >= 500) ErrorType.SERVER_ERROR else ErrorType.CLIENT_ERROR,
|
||||
// errorCode = response.code,
|
||||
// errorMsg = "HTTP错误:${response.code}"
|
||||
// )
|
||||
// throw e
|
||||
// }
|
||||
// return response
|
||||
// } catch (e: Exception) {
|
||||
// // 捕获各类网络异常并转换为自定义异常
|
||||
// val apiException = when (e) {
|
||||
// is UnknownHostException -> ApiException(ErrorType.NETWORK_ERROR, errorMsg = "网络未连接,请检查网络")
|
||||
// is SocketTimeoutException -> ApiException(ErrorType.TIMEOUT_ERROR, errorMsg = "请求超时,请稍后重试")
|
||||
// is ConnectTimeoutException -> ApiException(ErrorType.TIMEOUT_ERROR, errorMsg = "连接超时,请检查网络")
|
||||
// is IOException -> ApiException(ErrorType.NETWORK_ERROR, errorMsg = "网络异常:${e.message ?: "未知IO错误"}")
|
||||
// is ApiException -> e // 已转换的异常直接抛出
|
||||
// else -> ApiException(ErrorType.UNKNOWN_ERROR, errorMsg = "未知错误:${e.message ?: "未知"}", throwable = e)
|
||||
// }
|
||||
// throw apiException
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
@@ -0,0 +1,80 @@
|
||||
package com.shuwei.dish.match.net
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.util.Log
|
||||
import com.shuwei.dish.match.http.UrlConfig
|
||||
import okhttp3.OkHttpClient
|
||||
import okhttp3.logging.HttpLoggingInterceptor
|
||||
import retrofit2.Retrofit
|
||||
import retrofit2.converter.gson.GsonConverterFactory
|
||||
import java.util.concurrent.TimeUnit
|
||||
|
||||
import javax.net.ssl.*
|
||||
import java.security.SecureRandom
|
||||
import java.security.cert.X509Certificate
|
||||
import kotlin.apply
|
||||
import kotlin.jvm.java
|
||||
|
||||
val apiService: ApiService = Retrofit.Builder()
|
||||
.baseUrl(UrlConfig.BASE_URL)
|
||||
// .baseUrl(UrlConfig.DEVICE_BASE_URL)
|
||||
.client(HttpManager.instance.client)
|
||||
.addConverterFactory(GsonConverterFactory.create())
|
||||
.build()
|
||||
.create(ApiService::class.java)
|
||||
|
||||
//val apiService2: ApiService2 = Retrofit.Builder()
|
||||
// .baseUrl(UrlConfig.BASE_URL)
|
||||
//// .baseUrl(UrlConfig.DEVICE_BASE_URL)
|
||||
// .client(HttpManager.instance.client)
|
||||
// .addConverterFactory(GsonConverterFactory.create())
|
||||
// .build()
|
||||
// .create(ApiService2::class.java)
|
||||
|
||||
class HttpManager private constructor() {
|
||||
val client: OkHttpClient by lazy {
|
||||
OkHttpClient.Builder()
|
||||
.apply {
|
||||
connectTimeout(15, TimeUnit.SECONDS)
|
||||
readTimeout(30, TimeUnit.SECONDS)
|
||||
writeTimeout(15, TimeUnit.SECONDS)
|
||||
sslSocketFactory(createSSLSocketFactory(), TrustAllCerts())
|
||||
hostnameVerifier { _, _ -> true }
|
||||
addNetworkInterceptor(HttpLoggingInterceptor(logger = {
|
||||
Log.d("HttpManager", "okhttp logger ==>${it}")
|
||||
}).also {
|
||||
it.level = HttpLoggingInterceptor.Level.BODY
|
||||
})
|
||||
addInterceptor(RequestInterceptor())
|
||||
// addInterceptor(ExceptionInterceptor())
|
||||
}
|
||||
.build()
|
||||
}
|
||||
|
||||
companion object {
|
||||
val instance by lazy { HttpManager() }
|
||||
}
|
||||
|
||||
// 信任所有证书的TrustManager实现
|
||||
@SuppressLint("CustomX509TrustManager")
|
||||
class TrustAllCerts : X509TrustManager {
|
||||
@SuppressLint("TrustAllX509TrustManager")
|
||||
override fun checkClientTrusted(chain: Array<X509Certificate>, authType: String) {
|
||||
}
|
||||
|
||||
@SuppressLint("TrustAllX509TrustManager")
|
||||
override fun checkServerTrusted(chain: Array<X509Certificate>, authType: String) {
|
||||
}
|
||||
|
||||
override fun getAcceptedIssuers(): Array<X509Certificate> = arrayOf()
|
||||
}
|
||||
|
||||
// 创建信任所有证书的SSLSocketFactory
|
||||
fun createSSLSocketFactory(): SSLSocketFactory {
|
||||
val sslContext = SSLContext.getInstance("TLS").apply {
|
||||
init(null, arrayOf(TrustAllCerts()), SecureRandom())
|
||||
}
|
||||
return sslContext.socketFactory
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,141 @@
|
||||
package com.shuwei.dish.match.net
|
||||
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import com.shuwei.dish.match.entity.CookFoodEntity
|
||||
import com.shuwei.dish.match.entity.CookFoodGoodsEntity
|
||||
import com.shuwei.dish.match.entity.FoodRecord
|
||||
import com.shuwei.dish.match.entity.SeasoningEntity
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
class NetViewModel : ViewModel() {
|
||||
|
||||
// fun getFoodList(
|
||||
// dinnerType: String,
|
||||
// pageNo: Int,
|
||||
// pageSize: Int,
|
||||
// onSuccess: (FoodRecordBean?) -> Unit,
|
||||
// onFailure: (String, String) -> Unit
|
||||
// ) {
|
||||
// viewModelScope.launch {
|
||||
// apiRequest(
|
||||
// onRequest = {
|
||||
// apiService2.getDishList(
|
||||
// dinnerType = dinnerType,
|
||||
// pageNo = pageNo,
|
||||
// pageSize = pageSize
|
||||
// )
|
||||
// },
|
||||
// onSuccess = {
|
||||
// if (it.code == 200) {
|
||||
// onSuccess(it.data)
|
||||
// return@apiRequest
|
||||
// }
|
||||
// onFailure("${it.code}", it.msg ?: "")
|
||||
// },
|
||||
// onFailure = {
|
||||
// onFailure("-1", it.errorMsg)
|
||||
// }
|
||||
// )
|
||||
// }
|
||||
// }
|
||||
|
||||
fun submitCookFood(
|
||||
entity: CookFoodEntity,
|
||||
onSuccess: (Any?) -> Unit,
|
||||
onFailure: (String, String) -> Unit
|
||||
) {
|
||||
viewModelScope.launch {
|
||||
request(
|
||||
onRequest = {
|
||||
apiService.submitCookFood(param = entity)
|
||||
},
|
||||
onSuccess = onSuccess,
|
||||
onFailure = onFailure
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
fun getFoodDetail(
|
||||
foodId: String,
|
||||
onSuccess: (CookFoodEntity?) -> Unit,
|
||||
onFailure: (String, String) -> Unit
|
||||
) {
|
||||
viewModelScope.launch {
|
||||
request(
|
||||
onRequest = {
|
||||
apiService.getFoodDetail(foodId = foodId)
|
||||
},
|
||||
onSuccess = onSuccess,
|
||||
onFailure = onFailure
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
fun searchFoodList(
|
||||
param: MutableMap<String, Any>,
|
||||
onSuccess: (MutableList<FoodRecord>?) -> Unit,
|
||||
onFailure: (String, String) -> Unit
|
||||
) {
|
||||
viewModelScope.launch {
|
||||
request(
|
||||
onRequest = {
|
||||
apiService.searchFoodList(param = param)
|
||||
},
|
||||
onSuccess = onSuccess,
|
||||
onFailure = onFailure
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
fun getSamplingList(
|
||||
param: MutableMap<String, Any>,
|
||||
onSuccess: (MutableList<FoodRecord>?) -> Unit,
|
||||
onFailure: (String, String) -> Unit
|
||||
) {
|
||||
viewModelScope.launch {
|
||||
request(
|
||||
onRequest = {
|
||||
apiService.getSamplingList(param = param)
|
||||
},
|
||||
onSuccess = onSuccess,
|
||||
onFailure = onFailure
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
fun queryGoodsList(
|
||||
param: MutableMap<String, Any>,
|
||||
onSuccess: (MutableList<CookFoodGoodsEntity>?) -> Unit,
|
||||
onFailure: (String, String) -> Unit
|
||||
) {
|
||||
viewModelScope.launch {
|
||||
request(
|
||||
onRequest = {
|
||||
apiService.queryGoodsList(param = param)
|
||||
},
|
||||
onSuccess = onSuccess,
|
||||
onFailure = onFailure
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
fun querySeasoningList(
|
||||
param: MutableMap<String, Any>,
|
||||
onSuccess: (MutableList<SeasoningEntity>?) -> Unit,
|
||||
onFailure: (String, String) -> Unit
|
||||
) {
|
||||
viewModelScope.launch {
|
||||
request(
|
||||
onRequest = {
|
||||
apiService.querySeasoningList(param = param)
|
||||
},
|
||||
onSuccess = onSuccess,
|
||||
onFailure = onFailure
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
package com.shuwei.dish.match.net
|
||||
|
||||
import com.shuwei.dish.match.base.GlobalData
|
||||
import okhttp3.Interceptor
|
||||
import okhttp3.Response
|
||||
|
||||
/**
|
||||
* 请求拦截器
|
||||
*/
|
||||
class RequestInterceptor : Interceptor {
|
||||
override fun intercept(chain: Interceptor.Chain): Response {
|
||||
val originalRequest = chain.request()
|
||||
val requestBuilder = originalRequest.newBuilder()
|
||||
.header("X-Access-Token", "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJjYW50ZWVuSWQiOiJiZTE1NDgzMS0zNDY2LTNiYTItYTJlYS01NzY1MmM5MTlmZWQiLCJ0eXBlIjoiNCIsInVzZXJJZCI6IjAwMDAwMDAwMDAwMDAwMDAwMDEifQ.sN40cOC-O5WQFrF4IDUs8fFlkNdUKLbJt_rHyTsgYYM")
|
||||
.header("X-DEVICE-CODE", GlobalData.deviceId)
|
||||
.header("authorization", "57ee87183f2a4fa59683ec9ef41c8f5d")
|
||||
|
||||
val newRequest = requestBuilder.build()
|
||||
|
||||
return chain.proceed(newRequest)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
package com.shuwei.dish.match.net
|
||||
|
||||
data class ApiResponse<T>(
|
||||
val code: String,
|
||||
val msg: String? = "",
|
||||
val data: T? = null
|
||||
) {
|
||||
fun isSuccess() = code == "00000"
|
||||
}
|
||||
@@ -9,9 +9,7 @@ import android.text.style.LineHeightSpan
|
||||
import android.text.style.StyleSpan
|
||||
import android.util.Log
|
||||
import android.util.SparseArray
|
||||
import android.util.SparseIntArray
|
||||
import android.widget.FrameLayout
|
||||
import android.widget.TextView
|
||||
import androidx.core.graphics.toColorInt
|
||||
import androidx.core.view.forEach
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
@@ -34,10 +32,9 @@ import com.shuwei.dish.match.utils.ext.toast
|
||||
import com.shuwei.dish.match.utils.ext.visible
|
||||
import com.shuwei.dish.match.viewmodel.AppViewModel
|
||||
import com.shuwei.dish.match.viewmodel.factory.AppFactory
|
||||
import com.shuwei.dish.match.R
|
||||
import com.shuwei.dish.match.adapter.TextCellAdapter
|
||||
import com.shuwei.dish.match.databinding.ActivityDeviceConfigBinding
|
||||
import com.shuwei.dish.match.dialog.BottomDialog2
|
||||
import com.shuwei.dish.match.dialog.SeasoningSearchDialog
|
||||
import com.shuwei.dish.match.utils.SpTool
|
||||
import com.shuwei.dish.match.utils.ext.clickWithDebounce
|
||||
import com.shuwei.dish.match.utils.ext.gone
|
||||
@@ -46,7 +43,7 @@ class DeviceConfigActivity : BaseActivity() {
|
||||
|
||||
companion object {
|
||||
|
||||
const val TAG = "DeviceSettingActivity"
|
||||
const val TAG = "DeviceConfigActivity"
|
||||
|
||||
const val COOK_MODE = "cookMode"
|
||||
|
||||
@@ -250,7 +247,7 @@ class DeviceConfigActivity : BaseActivity() {
|
||||
private fun clickGridItem(sort: Int, entity: SeasoningEntity) {
|
||||
val currentAddress = AddressUtil.getWeighAddressArray().get(sort)
|
||||
// val seasoningEntity = list.first{it.sort == sort}
|
||||
BottomDialog2(
|
||||
SeasoningSearchDialog(
|
||||
weighIndex = sort,
|
||||
weighAddress = currentAddress,
|
||||
clickName = entity.goodsName
|
||||
|
||||
@@ -5,6 +5,7 @@ import android.content.Intent
|
||||
import android.os.Bundle
|
||||
import android.util.Log
|
||||
import android.view.View
|
||||
import androidx.activity.viewModels
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import com.shuwei.dish.match.R
|
||||
@@ -14,11 +15,12 @@ import com.shuwei.dish.match.base.BaseApp
|
||||
import com.shuwei.dish.match.databinding.ActivityDishSamplingBinding
|
||||
import com.shuwei.dish.match.databinding.LayoutFoodRemindBinding
|
||||
import com.shuwei.dish.match.db.AppRepository
|
||||
import com.shuwei.dish.match.dialog.BottomDialog
|
||||
import com.shuwei.dish.match.dialog.FoodSearchDialog
|
||||
import com.shuwei.dish.match.dialog.CommonDialog
|
||||
import com.shuwei.dish.match.entity.CookFoodEntity
|
||||
import com.shuwei.dish.match.entity.CookFoodGoodsEntity
|
||||
import com.shuwei.dish.match.entity.FoodRecord
|
||||
import com.shuwei.dish.match.net.NetViewModel
|
||||
import com.shuwei.dish.match.utils.AddressUtil
|
||||
import com.shuwei.dish.match.utils.KeyboardUtil
|
||||
import com.shuwei.dish.match.utils.WeightUtil
|
||||
@@ -266,7 +268,7 @@ class DishSamplingActivity : BaseActivity() {
|
||||
|
||||
private fun searchDishType() {
|
||||
val inputText = binding.etInputDishType.text.toString().trim()
|
||||
BottomDialog(goodsType = 0, defGoodsName = inputText).show(this@DishSamplingActivity) { item ->
|
||||
FoodSearchDialog(defGoodsName = inputText).show(this@DishSamplingActivity) { item ->
|
||||
val filterResult = list.firstOrNull { it.goodsName == item.goodsName }
|
||||
if (filterResult != null) {
|
||||
toast("不允许重复添加同一食材")
|
||||
|
||||
@@ -11,17 +11,11 @@ import com.shuwei.dish.match.base.BaseActivity
|
||||
import com.shuwei.dish.match.base.BaseApp
|
||||
import com.shuwei.dish.match.databinding.ActivityFoodSearchBinding
|
||||
import com.shuwei.dish.match.databinding.LayoutEmptyViewBinding
|
||||
|
||||
import com.shuwei.dish.match.entity.FoodRecord
|
||||
import com.shuwei.dish.match.entity.FoodRecordBean
|
||||
import com.shuwei.dish.match.http.HttpUtil
|
||||
import com.shuwei.dish.match.http.UrlConfig
|
||||
import com.shuwei.dish.match.utils.KeyboardUtil
|
||||
import com.shuwei.dish.match.utils.ext.addOnActionSearchListener
|
||||
import com.shuwei.dish.match.utils.ext.gone
|
||||
import com.shuwei.dish.match.utils.ext.startActivity
|
||||
import com.shuwei.dish.match.utils.ext.toJsonString
|
||||
import com.shuwei.dish.match.utils.ext.toObject
|
||||
import com.shuwei.dish.match.utils.ext.toast
|
||||
import com.shuwei.dish.match.utils.ext.visible
|
||||
import java.io.Serializable
|
||||
@@ -40,7 +34,7 @@ class FoodSearchActivity : BaseActivity() {
|
||||
|
||||
private var list: MutableList<FoodRecord> = mutableListOf()
|
||||
private var pageType = 0
|
||||
private var dinnerType = "0"
|
||||
private var dinnerType = "1"
|
||||
private val recordAdapter by lazy {
|
||||
FoodRecordAdapter(list).apply {
|
||||
isStateViewEnable = true
|
||||
@@ -68,7 +62,7 @@ class FoodSearchActivity : BaseActivity() {
|
||||
binding = ActivityFoodSearchBinding.inflate(layoutInflater)
|
||||
setContentView(binding.root)
|
||||
pageType = intent.getIntExtra(PAGE_TYPE, 0)
|
||||
dinnerType = intent.getStringExtra(DINNER_TYPE)?:"0"
|
||||
dinnerType = intent.getStringExtra(DINNER_TYPE) ?: "0"
|
||||
setHeaderBackground()
|
||||
foodName = intent.getStringExtra(FOOD_NAME)
|
||||
binding.etInputDish.setText(foodName)
|
||||
@@ -134,7 +128,7 @@ class FoodSearchActivity : BaseActivity() {
|
||||
}
|
||||
|
||||
private var pageNo = 1
|
||||
private var pageSize = 100
|
||||
private var pageSize = 10
|
||||
fun getDinnerTypeText(): String {
|
||||
return when (dinnerType) {
|
||||
"1" -> "早餐"
|
||||
@@ -143,53 +137,99 @@ class FoodSearchActivity : BaseActivity() {
|
||||
else -> "早餐"
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressLint("NotifyDataSetChanged")
|
||||
private fun queryListInfo(input: String) {
|
||||
showLoading()
|
||||
val map = mutableMapOf(
|
||||
// val map = mutableMapOf(
|
||||
// "foodName" to input.trim(),
|
||||
// "pageNo" to "$pageNo",
|
||||
// "pageSize" to "$pageSize",
|
||||
// "canteenId" to BaseApp.canteenId
|
||||
// "dinnerType" to getDinnerTypeText()
|
||||
// )
|
||||
// val sb = StringBuilder(UrlConfig.QUERY_FOOD_LIST).apply {
|
||||
// append("?")
|
||||
// map.forEach { (key, value) -> append("$key=$value&") }
|
||||
// }
|
||||
// sb.deleteCharAt(sb.length - 1)
|
||||
// HttpUtil.get(
|
||||
// url = sb.toString(),
|
||||
// doSuccess = {
|
||||
// delayDismissLoading()
|
||||
// finishRefresh()
|
||||
// binding.refreshLayout.run {
|
||||
// setEnableRefresh(true)
|
||||
// }
|
||||
// val json = it.toJsonString()
|
||||
// val recordBean: FoodRecordBean? = json.toObject<FoodRecordBean>()
|
||||
// if (recordBean == null || recordBean.records.isNullOrEmpty()) {
|
||||
//// toast("暂未搜索到相关菜品信息")
|
||||
// if (pageNo == 1) {
|
||||
// loadEmptyView()
|
||||
// }
|
||||
// return@get
|
||||
// }
|
||||
// val records = recordBean.records
|
||||
// if (pageNo == 1) {
|
||||
// list.clear()
|
||||
// }
|
||||
// list.addAll(records!!)
|
||||
// recordAdapter.notifyDataSetChanged()
|
||||
// val isLoadMoreEnable = records.size >= pageSize
|
||||
// binding.refreshLayout.setEnableLoadMore(isLoadMoreEnable)
|
||||
// if (isLoadMoreEnable) {
|
||||
// pageNo++
|
||||
// }
|
||||
// },
|
||||
// doFailure = { code, msg ->
|
||||
// binding.refreshLayout.run {
|
||||
// setEnableRefresh(true)
|
||||
// }
|
||||
// toast(msg)
|
||||
// delayDismissLoading()
|
||||
// finishRefresh()
|
||||
// if (pageNo == 1) {
|
||||
// loadEmptyView()
|
||||
// }
|
||||
// }
|
||||
// )
|
||||
|
||||
val map = mutableMapOf<String, Any>(
|
||||
"foodName" to input.trim(),
|
||||
"pageNo" to "$pageNo",
|
||||
"pageNum" to "$pageNo",
|
||||
"pageSize" to "$pageSize",
|
||||
"canteenId" to BaseApp.canteenId
|
||||
"placeId" to BaseApp.canteenId,
|
||||
"dinnerType" to getDinnerTypeText()
|
||||
)
|
||||
if (dinnerType.toInt() > 0) {
|
||||
map["dinnerType"] = getDinnerTypeText()
|
||||
}
|
||||
val sb = StringBuilder(UrlConfig.QUERY_FOOD_LIST).apply {
|
||||
append("?")
|
||||
map.forEach { (key, value) -> append("$key=$value&") }
|
||||
}
|
||||
sb.deleteCharAt(sb.length - 1)
|
||||
HttpUtil.get(
|
||||
url = sb.toString(),
|
||||
doSuccess = {
|
||||
netViewModel.searchFoodList(
|
||||
param = map,
|
||||
onSuccess = {
|
||||
delayDismissLoading()
|
||||
finishRefresh()
|
||||
binding.refreshLayout.run {
|
||||
setEnableRefresh(true)
|
||||
}
|
||||
val json = it.toJsonString()
|
||||
val recordBean: FoodRecordBean? = json.toObject<FoodRecordBean>()
|
||||
if (recordBean == null || recordBean.records.isNullOrEmpty()) {
|
||||
// if (it == null || it.records.isNullOrEmpty()) {
|
||||
if (it.isNullOrEmpty()) {
|
||||
// toast("暂未搜索到相关菜品信息")
|
||||
if (pageNo == 1) {
|
||||
loadEmptyView()
|
||||
}
|
||||
return@get
|
||||
return@searchFoodList
|
||||
}
|
||||
val records = recordBean.records
|
||||
// val records = it.records
|
||||
if (pageNo == 1) {
|
||||
list.clear()
|
||||
}
|
||||
list.addAll(records!!)
|
||||
list.addAll(it)
|
||||
recordAdapter.notifyDataSetChanged()
|
||||
val isLoadMoreEnable = records.size >= pageSize
|
||||
val isLoadMoreEnable = it.size >= pageSize
|
||||
binding.refreshLayout.setEnableLoadMore(isLoadMoreEnable)
|
||||
if (isLoadMoreEnable) {
|
||||
pageNo++
|
||||
}
|
||||
},
|
||||
doFailure = { code, msg ->
|
||||
}, onFailure = { code, msg ->
|
||||
binding.refreshLayout.run {
|
||||
setEnableRefresh(true)
|
||||
}
|
||||
@@ -199,9 +239,9 @@ class FoodSearchActivity : BaseActivity() {
|
||||
if (pageNo == 1) {
|
||||
loadEmptyView()
|
||||
}
|
||||
}
|
||||
)
|
||||
})
|
||||
}
|
||||
|
||||
private fun finishRefresh() {
|
||||
if (pageNo == 1) {
|
||||
binding.refreshLayout.finishRefresh(1200)
|
||||
@@ -211,12 +251,17 @@ class FoodSearchActivity : BaseActivity() {
|
||||
}
|
||||
|
||||
private var emptyViewBinding: LayoutEmptyViewBinding? = null
|
||||
|
||||
@SuppressLint("NotifyDataSetChanged")
|
||||
private fun loadEmptyView() {
|
||||
list.clear()
|
||||
recordAdapter.notifyDataSetChanged()
|
||||
if (emptyViewBinding == null) {
|
||||
emptyViewBinding = LayoutEmptyViewBinding.inflate(LayoutInflater.from(this), binding.rvDishSearchList, false)
|
||||
emptyViewBinding = LayoutEmptyViewBinding.inflate(
|
||||
LayoutInflater.from(this),
|
||||
binding.rvDishSearchList,
|
||||
false
|
||||
)
|
||||
}
|
||||
emptyViewBinding!!.tvContent.text = "暂无数据"
|
||||
emptyViewBinding!!.tvSubContent.text = "可以尝试换个名称重新搜索"
|
||||
|
||||
@@ -11,9 +11,7 @@ import com.shuwei.dish.match.base.BaseApp
|
||||
import com.shuwei.dish.match.databinding.ActivityHomeBinding
|
||||
import com.shuwei.dish.match.db.AppRepository
|
||||
import com.shuwei.dish.match.entity.HomeModeBean
|
||||
import com.shuwei.dish.match.http.HttpUtil
|
||||
import com.shuwei.dish.match.utils.SpTool
|
||||
import com.shuwei.dish.match.utils.WeightUtil
|
||||
import com.shuwei.dish.match.utils.ext.startActivity
|
||||
import com.shuwei.dish.match.utils.ext.toast
|
||||
import com.shuwei.dish.match.viewmodel.AppViewModel
|
||||
|
||||
@@ -3,32 +3,25 @@ package com.shuwei.dish.match.ui
|
||||
import android.annotation.SuppressLint
|
||||
import android.os.Bundle
|
||||
import android.provider.Settings
|
||||
import android.util.Log
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import com.shuwei.dish.match.base.BaseActivity
|
||||
import com.shuwei.dish.match.base.BaseApp
|
||||
import com.shuwei.dish.match.databinding.ActivityInitBinding
|
||||
import com.shuwei.dish.match.db.AppRepository
|
||||
import com.shuwei.dish.match.http.HttpUtil
|
||||
import com.shuwei.dish.match.http.UrlConfig
|
||||
import com.shuwei.dish.match.utils.AppUtil
|
||||
import com.shuwei.dish.match.utils.QRCodeUtil
|
||||
import com.shuwei.dish.match.utils.SpTool
|
||||
import com.shuwei.dish.match.utils.WeightUtil
|
||||
import com.shuwei.dish.match.utils.ext.dp
|
||||
import com.shuwei.dish.match.utils.ext.invisible
|
||||
import com.shuwei.dish.match.utils.ext.startActivity
|
||||
import com.shuwei.dish.match.utils.ext.toJsonString
|
||||
import com.shuwei.dish.match.utils.ext.toObject
|
||||
import com.shuwei.dish.match.utils.ext.toast
|
||||
import com.shuwei.dish.match.utils.ext.visible
|
||||
import com.shuwei.dish.match.viewmodel.AppViewModel
|
||||
import com.shuwei.dish.match.viewmodel.factory.AppFactory
|
||||
import kotlinx.coroutines.delay
|
||||
import kotlinx.coroutines.flow.flow
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlin.toString
|
||||
|
||||
class InitActivity : BaseActivity() {
|
||||
companion object {
|
||||
@@ -79,16 +72,16 @@ class InitActivity : BaseActivity() {
|
||||
// return
|
||||
// }
|
||||
|
||||
binding.ivQrCode.invisible()
|
||||
binding.btnInit.invisible()
|
||||
// binding.ivQrCode.invisible()
|
||||
// binding.btnInit.invisible()
|
||||
|
||||
initViewModel()
|
||||
WeightUtil.init()
|
||||
WeightUtil.getWeight()
|
||||
WeightUtil.startContinuousRead()
|
||||
HttpUtil.getAppToken()
|
||||
// HttpUtil.getAppToken()
|
||||
|
||||
HttpUtil.loopGetToken = true
|
||||
// HttpUtil.loopGetToken = true
|
||||
countDown()
|
||||
}
|
||||
|
||||
@@ -160,50 +153,54 @@ class InitActivity : BaseActivity() {
|
||||
private fun initConfig() {
|
||||
binding.ivQrCode.setImageBitmap(
|
||||
QRCodeUtil.generateQRCode(
|
||||
content = BaseApp.deviceId?:"",
|
||||
content = BaseApp.deviceId ?: "",
|
||||
size = 200.dp
|
||||
)
|
||||
)
|
||||
binding.btnInit.setOnClickListener {
|
||||
HttpUtil.loopGetToken = false
|
||||
getDeviceConfig()
|
||||
// HttpUtil.loopGetToken = false
|
||||
// getDeviceConfig()
|
||||
}
|
||||
}
|
||||
|
||||
private fun getDeviceConfig() {
|
||||
val tokenUrl = "${UrlConfig.DEVICE_TOKEN}?qrcodeId=${BaseApp.deviceId}&appVersion=${BaseApp.appVersion}"
|
||||
HttpUtil.get(url = tokenUrl, doSuccess = { token ->
|
||||
Log.d(TAG, "initConfig: $token")
|
||||
getConfig(token.toString())
|
||||
}, doFailure = { code, msg ->
|
||||
Log.d(TAG, "initConfig: $code,$msg")
|
||||
})
|
||||
}
|
||||
private fun getConfig(token: String) {
|
||||
val deviceConfigUrl = "${UrlConfig.DEVICE_CONFIG}?equipmentCode=${BaseApp.deviceId}&&appVersion=${BaseApp.appVersion}"
|
||||
HttpUtil.get(url = deviceConfigUrl, header = mutableMapOf(
|
||||
"X-Access-Token" to token
|
||||
), doSuccess = {
|
||||
Log.d(TAG, "getDeviceConfig: $it")
|
||||
val data = it.toJsonString()
|
||||
val checkResult = checkConfigData(data)
|
||||
if (checkResult.not()) {
|
||||
toast("初始化设备失败,请稍后重试")
|
||||
return@get
|
||||
}
|
||||
HttpUtil.loopGetToken = true
|
||||
SpTool.put(SpTool.DEVICE_CONFIG_CACHE, data)
|
||||
startActivity<HomeActivity>()
|
||||
// finish()
|
||||
}, doFailure = { code, msg ->
|
||||
Log.d(TAG, "getDeviceConfig: $code,$msg")
|
||||
toast("初始化设备失败,请稍后重试,code=${code},msg=${msg}")
|
||||
})
|
||||
}
|
||||
// private fun getDeviceConfig() {
|
||||
// val tokenUrl =
|
||||
// "${UrlConfig.DEVICE_TOKEN}?qrcodeId=${BaseApp.deviceId}&appVersion=${BaseApp.appVersion}"
|
||||
// HttpUtil.get(url = tokenUrl, doSuccess = { token ->
|
||||
// Log.d(TAG, "initConfig: $token")
|
||||
// getConfig(token.toString())
|
||||
// }, doFailure = { code, msg ->
|
||||
// Log.d(TAG, "initConfig: $code,$msg")
|
||||
// })
|
||||
// }
|
||||
|
||||
// private fun getConfig(token: String) {
|
||||
// val deviceConfigUrl =
|
||||
// "${UrlConfig.DEVICE_CONFIG}?equipmentCode=${BaseApp.deviceId}&&appVersion=${BaseApp.appVersion}"
|
||||
// HttpUtil.get(
|
||||
// url = deviceConfigUrl, header = mutableMapOf(
|
||||
// "X-Access-Token" to token
|
||||
// ), doSuccess = {
|
||||
// Log.d(TAG, "getDeviceConfig: $it")
|
||||
// val data = it.toJsonString()
|
||||
// val checkResult = checkConfigData(data)
|
||||
// if (checkResult.not()) {
|
||||
// toast("初始化设备失败,请稍后重试")
|
||||
// return@get
|
||||
// }
|
||||
// HttpUtil.loopGetToken = true
|
||||
// SpTool.put(SpTool.DEVICE_CONFIG_CACHE, data)
|
||||
// startActivity<HomeActivity>()
|
||||
//// finish()
|
||||
// }, doFailure = { code, msg ->
|
||||
// Log.d(TAG, "getDeviceConfig: $code,$msg")
|
||||
// toast("初始化设备失败,请稍后重试,code=${code},msg=${msg}")
|
||||
// })
|
||||
// }
|
||||
|
||||
data class DeviceConfigBean(
|
||||
var appPackageUrl:String? = null,
|
||||
var canteenId:String? = null
|
||||
var appPackageUrl: String? = null,
|
||||
var canteenId: String? = null
|
||||
)
|
||||
|
||||
private fun checkConfigData(data: String): Boolean {
|
||||
@@ -214,8 +211,8 @@ class InitActivity : BaseActivity() {
|
||||
if (config == null) {
|
||||
return false
|
||||
}
|
||||
BaseApp.configUrl = config.appPackageUrl?:""
|
||||
BaseApp.canteenId = config.canteenId?:""
|
||||
BaseApp.configUrl = config.appPackageUrl ?: ""
|
||||
BaseApp.canteenId = config.canteenId ?: ""
|
||||
return true
|
||||
}
|
||||
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
package com.shuwei.dish.match.ui
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.content.Intent
|
||||
import android.graphics.Typeface
|
||||
import android.os.Bundle
|
||||
import android.util.Log
|
||||
import androidx.activity.viewModels
|
||||
import androidx.recyclerview.widget.ItemTouchHelper
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import com.shuwei.dish.match.R
|
||||
@@ -12,13 +12,12 @@ import com.shuwei.dish.match.adapter.DishPartAdapter
|
||||
import com.shuwei.dish.match.base.BaseActivity
|
||||
import com.shuwei.dish.match.databinding.ActivityPrepareCookBinding
|
||||
import com.shuwei.dish.match.databinding.LayoutFoodRemindBinding
|
||||
import com.shuwei.dish.match.dialog.BottomDialog
|
||||
import com.shuwei.dish.match.dialog.FoodSearchDialog
|
||||
import com.shuwei.dish.match.dialog.CommonDialog
|
||||
import com.shuwei.dish.match.entity.CookFoodEntity
|
||||
import com.shuwei.dish.match.entity.CookFoodGoodsEntity
|
||||
import com.shuwei.dish.match.entity.FoodRecord
|
||||
import com.shuwei.dish.match.http.HttpUtil
|
||||
import com.shuwei.dish.match.http.UrlConfig
|
||||
import com.shuwei.dish.match.net.NetViewModel
|
||||
import com.shuwei.dish.match.utils.AddressUtil
|
||||
import com.shuwei.dish.match.utils.SwipeCallback
|
||||
import com.shuwei.dish.match.utils.WeightUtil
|
||||
@@ -26,10 +25,10 @@ import com.shuwei.dish.match.utils.ext.clickWithDebounce
|
||||
import com.shuwei.dish.match.utils.ext.gone
|
||||
import com.shuwei.dish.match.utils.ext.startActivity
|
||||
import com.shuwei.dish.match.utils.ext.toJsonString
|
||||
import com.shuwei.dish.match.utils.ext.toObject
|
||||
import com.shuwei.dish.match.utils.ext.toast
|
||||
import com.shuwei.dish.match.utils.ext.visible
|
||||
import java.io.Serializable
|
||||
import kotlin.getValue
|
||||
|
||||
@SuppressLint("NotifyDataSetChanged")
|
||||
class PrepareCookActivity : BaseActivity() {
|
||||
@@ -69,6 +68,9 @@ class PrepareCookActivity : BaseActivity() {
|
||||
food = intent.extras?.getSerializable(FOOD_ITEM) as FoodRecord?
|
||||
binding.tvDishName.text = food?.foodName ?: ""
|
||||
addViewClickListener()
|
||||
|
||||
initRecyclerView()
|
||||
|
||||
getDishDetail()
|
||||
}
|
||||
|
||||
@@ -84,55 +86,11 @@ class PrepareCookActivity : BaseActivity() {
|
||||
binding.ivWeightClear.setOnClickListener {
|
||||
WeightUtil.tareTwo(AddressUtil.ONE)
|
||||
}
|
||||
binding.ivWeightAdd.setOnClickListener {
|
||||
if (clickIndex == -1) {
|
||||
toast("请选择菜品构成")
|
||||
return@setOnClickListener
|
||||
}
|
||||
val clickItem = list[clickIndex]
|
||||
clickItem.run {
|
||||
if (isNewDishType && materialType != 1 && materialType != 2) {
|
||||
toast("请选择主辅材类型")
|
||||
return@setOnClickListener
|
||||
}
|
||||
}
|
||||
val weight = binding.tvDishPartWeight.text.toString().toDouble()
|
||||
if (weight <= 0.toDouble()) {
|
||||
toast("食材用量需要大于0")
|
||||
return@setOnClickListener
|
||||
}
|
||||
Log.d(TAG, "addViewClickListener->useRealWeight=$weight")
|
||||
clickItem.run {
|
||||
useWeight = weight.toDouble()
|
||||
isSetFinished = true
|
||||
dishPartAdapter.notifyItemChanged(clickIndex)
|
||||
}
|
||||
}
|
||||
binding.tvAddFood.clickWithDebounce {
|
||||
BottomDialog(goodsType = 0).show(this) { item ->
|
||||
val filterResult = list.firstOrNull { it.goodsId == item.goodsId }
|
||||
if (filterResult != null) {
|
||||
toast("不允许重复添加同一食材")
|
||||
return@show
|
||||
}
|
||||
list.add(CookFoodGoodsEntity().apply {
|
||||
goodsId = item.goodsId
|
||||
goodsName = item.goodsName
|
||||
// materialType =
|
||||
isNewDishType = true
|
||||
})
|
||||
onItemClick(list.size - 1)
|
||||
}
|
||||
}
|
||||
binding.btnCook.clickWithDebounce {
|
||||
val count = list.count { it.isSetFinished.not() }
|
||||
if (count > 0) {
|
||||
showRemindDialog()
|
||||
return@clickWithDebounce
|
||||
}
|
||||
goToSubmit()
|
||||
}
|
||||
binding.ivWeightAdd.setOnClickListener { addWeight() }
|
||||
binding.tvAddFood.clickWithDebounce { addFood() }
|
||||
binding.btnCook.clickWithDebounce { goToSubmit() }
|
||||
binding.rgCook.setOnCheckedChangeListener { group, checkedId ->
|
||||
if (clickIndex < 0 || clickIndex >= list.size) return@setOnCheckedChangeListener
|
||||
val tempType =
|
||||
if (checkedId == R.id.rbDishTypeFirst) 1 else if (checkedId == R.id.rbDishTypeSecond) 2 else -1
|
||||
list[clickIndex].materialType = tempType
|
||||
@@ -143,14 +101,62 @@ class PrepareCookActivity : BaseActivity() {
|
||||
}
|
||||
}
|
||||
|
||||
private fun addWeight() {
|
||||
if (clickIndex == -1) {
|
||||
toast("请选择菜品构成")
|
||||
return
|
||||
}
|
||||
val clickItem = list[clickIndex]
|
||||
clickItem.run {
|
||||
if (isNewDishType && materialType != 1 && materialType != 2) {
|
||||
toast("请选择主辅材类型")
|
||||
return
|
||||
}
|
||||
}
|
||||
val weight = binding.tvDishPartWeight.text.toString().toDouble()
|
||||
if (weight <= 0.toDouble()) {
|
||||
toast("食材用量需要大于0")
|
||||
return
|
||||
}
|
||||
Log.d(TAG, "addViewClickListener->useRealWeight=$weight")
|
||||
clickItem.run {
|
||||
useWeight = weight
|
||||
isSetFinished = true
|
||||
dishPartAdapter.notifyItemChanged(clickIndex)
|
||||
}
|
||||
}
|
||||
|
||||
private fun addFood() {
|
||||
FoodSearchDialog().show(this) { item ->
|
||||
val filterResult = list.firstOrNull { it.goodsId == item.goodsId }
|
||||
if (filterResult != null) {
|
||||
toast("不允许重复添加同一食材")
|
||||
return@show
|
||||
}
|
||||
list.add(CookFoodGoodsEntity().apply {
|
||||
goodsId = item.goodsId
|
||||
goodsName = item.goodsName
|
||||
// materialType =
|
||||
isNewDishType = true
|
||||
})
|
||||
onItemClick(list.size - 1)
|
||||
binding.rvDishPartList.smoothScrollToPosition(list.size - 1)
|
||||
}
|
||||
}
|
||||
|
||||
private fun goToSubmit() {
|
||||
val count = list.count { it.isSetFinished.not() }
|
||||
if (count > 0) {
|
||||
showRemindDialog()
|
||||
return
|
||||
}
|
||||
getGoodsList()
|
||||
if (goodsList.isNullOrEmpty()) {
|
||||
toast("菜品构成信息未设置")
|
||||
return
|
||||
}
|
||||
Log.d(TAG, "goToSubmit: goodsList:${goodsList?.toJsonString()}")
|
||||
// startActivity<SubmitDishActivity> {
|
||||
|
||||
startActivity<SubmitFoodActivity> {
|
||||
putExtra(SubmitFoodActivity.GOODS_LIST, goodsList as Serializable)
|
||||
putExtra(SubmitFoodActivity.FOOD_ITEM, food as Serializable)
|
||||
@@ -194,38 +200,52 @@ class PrepareCookActivity : BaseActivity() {
|
||||
|
||||
|
||||
private fun getDishDetail() {
|
||||
//649
|
||||
val url = "${UrlConfig.DISH_DETAIL}?foodId=${food?.foodId}"
|
||||
HttpUtil.get(
|
||||
url = url,
|
||||
doSuccess = {
|
||||
val json = it.toJsonString()
|
||||
Log.d(TAG, "getDishDetail: json:$json")
|
||||
val detail: CookFoodEntity? = json.toObject<CookFoodEntity>()
|
||||
// //649
|
||||
// val url = "${UrlConfig.DISH_DETAIL}?foodId=${food?.foodId}"
|
||||
// HttpUtil.get(
|
||||
// url = url,
|
||||
// doSuccess = {
|
||||
// val json = it.toJsonString()
|
||||
// Log.d(TAG, "getDishDetail: json:$json")
|
||||
// val detail: CookFoodEntity? = json.toObject<CookFoodEntity>()
|
||||
// if (detail == null) {
|
||||
// toast("查询菜品信息为空")
|
||||
// return@get
|
||||
// }
|
||||
// loadDishDetail(detail)
|
||||
// }) { code, msg ->
|
||||
// toast(msg)
|
||||
// }
|
||||
|
||||
netViewModel.getFoodDetail(
|
||||
food?.foodId ?: "",
|
||||
onSuccess = { detail ->
|
||||
if (detail == null) {
|
||||
toast("查询菜品信息为空")
|
||||
return@get
|
||||
return@getFoodDetail
|
||||
}
|
||||
loadDishDetail(detail)
|
||||
}) { code, msg ->
|
||||
toast(msg)
|
||||
}
|
||||
}, onFailure = { code, msg ->
|
||||
toast(msg)
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
private fun loadDishDetail(detail: CookFoodEntity) {
|
||||
val voList = detail.stFoodInfoConstituteList
|
||||
// val voList = detail.stFoodInfoConstituteList
|
||||
val voList = detail.foodConstituteList
|
||||
if (voList.isNullOrEmpty()) {
|
||||
return
|
||||
}
|
||||
//筛选出主材和辅材
|
||||
val tempDate = voList.filter { it.materialType == 1 || it.materialType == 2 }
|
||||
val tempData = voList.filter { it.materialType == 1 || it.materialType == 2 }
|
||||
.apply {
|
||||
forEach { it.useWeight = 0.toDouble() }
|
||||
}
|
||||
list.clear()
|
||||
list.addAll(tempDate)
|
||||
firstReqSize = list.size
|
||||
initRecyclerView()
|
||||
list.addAll(tempData)
|
||||
dishPartAdapter.notifyDataSetChanged()
|
||||
}
|
||||
|
||||
private var firstReqSize = 0
|
||||
@@ -245,8 +265,24 @@ class PrepareCookActivity : BaseActivity() {
|
||||
text = it.goodsName
|
||||
setTypeface(typeface, Typeface.BOLD)
|
||||
}
|
||||
binding.tvDishType.text =
|
||||
if (it.materialType == 1) "主材" else if (it.materialType == 2) "辅材" else ""
|
||||
|
||||
var materialType: String
|
||||
when (it.materialType) {
|
||||
1 -> {
|
||||
materialType = "主材"
|
||||
binding.rgCook.check(R.id.rbDishTypeFirst)
|
||||
}
|
||||
2 -> {
|
||||
materialType = "辅材"
|
||||
binding.rgCook.check(R.id.rbDishTypeSecond)
|
||||
}
|
||||
else -> {
|
||||
materialType = ""
|
||||
binding.rgCook.clearCheck()
|
||||
}
|
||||
}
|
||||
binding.tvDishType.text = materialType
|
||||
|
||||
list.forEach { bean -> bean.isItemClicked = false }
|
||||
it.isItemClicked = true
|
||||
dishPartAdapter.notifyDataSetChanged()
|
||||
@@ -279,6 +315,9 @@ class PrepareCookActivity : BaseActivity() {
|
||||
dishPartAdapter.notifyItemRemoved(position)
|
||||
dishPartAdapter.notifyItemRangeChanged(position, list.size - position)
|
||||
toast("已删除")
|
||||
if (list.isEmpty()) {
|
||||
binding.tvDishShowName.text = ""
|
||||
}
|
||||
})
|
||||
itemTouchHelper.attachToRecyclerView(this)
|
||||
}
|
||||
|
||||
@@ -3,9 +3,7 @@ package com.shuwei.dish.match.ui
|
||||
import android.annotation.SuppressLint
|
||||
import android.content.Intent
|
||||
import android.os.Bundle
|
||||
import android.util.Log
|
||||
import android.view.LayoutInflater
|
||||
import android.view.MotionEvent
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
import androidx.recyclerview.widget.ItemTouchHelper
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
@@ -19,15 +17,10 @@ import com.shuwei.dish.match.db.AppRepository
|
||||
import com.shuwei.dish.match.dialog.DialogTool
|
||||
import com.shuwei.dish.match.entity.CookFoodEntity
|
||||
import com.shuwei.dish.match.entity.FoodRecord
|
||||
import com.shuwei.dish.match.entity.FoodRecordBean
|
||||
import com.shuwei.dish.match.http.HttpUtil
|
||||
import com.shuwei.dish.match.http.UrlConfig
|
||||
import com.shuwei.dish.match.utils.DateTimeUtil
|
||||
import com.shuwei.dish.match.utils.SwipeCallback
|
||||
import com.shuwei.dish.match.utils.ext.gone
|
||||
import com.shuwei.dish.match.utils.ext.startActivity
|
||||
import com.shuwei.dish.match.utils.ext.toJsonString
|
||||
import com.shuwei.dish.match.utils.ext.toObject
|
||||
import com.shuwei.dish.match.utils.ext.toast
|
||||
import com.shuwei.dish.match.utils.ext.visible
|
||||
import com.shuwei.dish.match.viewmodel.AppViewModel
|
||||
@@ -80,10 +73,8 @@ class SamplingListActivity : BaseActivity() {
|
||||
|
||||
private fun initViewModel() {
|
||||
val db = BaseApp.instance!!.database
|
||||
val factory =
|
||||
AppFactory(AppRepository(db.appDao()))
|
||||
appViewModel =
|
||||
ViewModelProvider(this, factory)[AppViewModel::class.java]
|
||||
val factory = AppFactory(AppRepository(db.appDao()))
|
||||
appViewModel = ViewModelProvider(this, factory)[AppViewModel::class.java]
|
||||
}
|
||||
|
||||
fun getCookFoodList(action: (MutableList<CookFoodEntity>?) -> Unit) {
|
||||
@@ -121,14 +112,13 @@ class SamplingListActivity : BaseActivity() {
|
||||
}
|
||||
}
|
||||
|
||||
private fun onItemClick(position:Int) {
|
||||
private fun onItemClick(position: Int) {
|
||||
val item = list[position]
|
||||
if (item.isCooking) {
|
||||
//烹饪中,跳到称熟重页面
|
||||
startActivity<SubmitFoodActivity> {
|
||||
putExtra(
|
||||
SubmitFoodActivity.FOOD_ITEM,
|
||||
item as Serializable
|
||||
SubmitFoodActivity.FOOD_ITEM, item as Serializable
|
||||
)
|
||||
}
|
||||
return
|
||||
@@ -166,7 +156,7 @@ class SamplingListActivity : BaseActivity() {
|
||||
@SuppressLint("ClickableViewAccessibility")
|
||||
private fun addViewListener() {
|
||||
binding.btnAddSampling.setOnClickListener {
|
||||
judgeDeviceConfig{
|
||||
judgeDeviceConfig {
|
||||
startActivity<DishSamplingActivity>()
|
||||
}
|
||||
}
|
||||
@@ -204,33 +194,53 @@ class SamplingListActivity : BaseActivity() {
|
||||
@SuppressLint("NotifyDataSetChanged")
|
||||
fun getSamplingList() {
|
||||
showLoading()
|
||||
val map = mapOf(
|
||||
// "foodName" to input,
|
||||
"pageNo" to "$pageNo",
|
||||
"pageSize" to "$pageSize",
|
||||
"canteenId" to BaseApp.canteenId
|
||||
)
|
||||
val sb = StringBuilder(UrlConfig.SAMPLING_LIST).apply {
|
||||
append("?")
|
||||
map.forEach { (key, value) -> append("$key=$value&") }
|
||||
}
|
||||
sb.deleteCharAt(sb.length - 1)
|
||||
HttpUtil.get(
|
||||
url = sb.toString(),
|
||||
doSuccess = {
|
||||
// val map = mapOf(
|
||||
//// "foodName" to input,
|
||||
// "pageNo" to "$pageNo",
|
||||
// "pageSize" to "$pageSize",
|
||||
// "canteenId" to BaseApp.canteenId
|
||||
// )
|
||||
// val sb = StringBuilder(UrlConfig.SAMPLING_LIST).apply {
|
||||
// append("?")
|
||||
// map.forEach { (key, value) -> append("$key=$value&") }
|
||||
// }
|
||||
// sb.deleteCharAt(sb.length - 1)
|
||||
// HttpUtil.get(
|
||||
// url = sb.toString(),
|
||||
// doSuccess = {
|
||||
// loadDishList(it)
|
||||
// }, doFailure = { code, msg ->
|
||||
// binding.refreshLayout.run {
|
||||
// setEnableRefresh(true)
|
||||
// }
|
||||
// toast(msg)
|
||||
// finishRefresh()
|
||||
// binding.refreshLayout.setEnableRefresh(true)
|
||||
// delayDismissLoading()
|
||||
// if (pageNo == 1) {
|
||||
// loadEmptyView()
|
||||
// }
|
||||
// })
|
||||
|
||||
netViewModel.getSamplingList(
|
||||
param = mutableMapOf(
|
||||
"pageNum" to pageNo,
|
||||
"pageSize" to pageSize,
|
||||
"placeId" to BaseApp.canteenId
|
||||
),
|
||||
onSuccess = {
|
||||
loadDishList(it)
|
||||
}, doFailure = { code, msg ->
|
||||
binding.refreshLayout.run {
|
||||
setEnableRefresh(true)
|
||||
}
|
||||
},
|
||||
onFailure = { code, msg ->
|
||||
binding.refreshLayout.setEnableRefresh(true)
|
||||
toast(msg)
|
||||
finishRefresh()
|
||||
binding.refreshLayout.setEnableRefresh(true)
|
||||
delayDismissLoading()
|
||||
if (pageNo == 1) {
|
||||
loadEmptyView()
|
||||
}
|
||||
})
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
private fun finishRefresh() {
|
||||
@@ -249,9 +259,7 @@ class SamplingListActivity : BaseActivity() {
|
||||
dishAdapter.notifyDataSetChanged()
|
||||
if (emptyViewBinding == null) {
|
||||
emptyViewBinding = LayoutEmptyViewBinding.inflate(
|
||||
LayoutInflater.from(this),
|
||||
binding.rvSamplingList,
|
||||
false
|
||||
LayoutInflater.from(this), binding.rvSamplingList, false
|
||||
)
|
||||
}
|
||||
emptyViewBinding!!.tvContent.text = "暂无数据"
|
||||
@@ -302,8 +310,7 @@ class SamplingListActivity : BaseActivity() {
|
||||
}
|
||||
val tempList = mutableListOf<FoodRecord>()
|
||||
|
||||
cookFoodEntities
|
||||
.sortedByDescending { DateTimeUtil.convert(dateStr = it.createTime) }
|
||||
cookFoodEntities.sortedByDescending { DateTimeUtil.convert(dateStr = it.createTime) }
|
||||
.forEach { entity ->
|
||||
tempList.add(FoodRecord().apply {
|
||||
foodId = entity.foodId
|
||||
@@ -332,26 +339,21 @@ class SamplingListActivity : BaseActivity() {
|
||||
}
|
||||
|
||||
@SuppressLint("NotifyDataSetChanged")
|
||||
private fun loadDishList(data: Any) {
|
||||
binding.refreshLayout.run {
|
||||
setEnableRefresh(true)
|
||||
}
|
||||
private fun loadDishList(records: MutableList<FoodRecord>?) {
|
||||
binding.refreshLayout.setEnableRefresh(true)
|
||||
delayDismissLoading()
|
||||
finishRefresh()
|
||||
val json = data.toJsonString()
|
||||
val recordBean: FoodRecordBean? = json.toObject<FoodRecordBean>()
|
||||
if (recordBean == null || recordBean.records.isNullOrEmpty()) {
|
||||
if (records.isNullOrEmpty()) {
|
||||
//toast("暂未搜索到相关菜品信息")
|
||||
if (pageNo == 1) {
|
||||
loadEmptyView()
|
||||
}
|
||||
return
|
||||
}
|
||||
val records = recordBean.records
|
||||
if (pageNo == 1) {
|
||||
list.clear()
|
||||
}
|
||||
list.addAll(records!!)
|
||||
list.addAll(records)
|
||||
dishAdapter.notifyDataSetChanged()
|
||||
val isLoadMoreEnable = records.size >= pageSize
|
||||
binding.refreshLayout.setEnableLoadMore(isLoadMoreEnable)
|
||||
@@ -363,7 +365,7 @@ class SamplingListActivity : BaseActivity() {
|
||||
|
||||
private var configFinished = false
|
||||
|
||||
fun judgeDeviceConfig(block:()-> Unit) {
|
||||
fun judgeDeviceConfig(block: () -> Unit) {
|
||||
if (configFinished) {
|
||||
block()
|
||||
return
|
||||
@@ -390,8 +392,7 @@ class SamplingListActivity : BaseActivity() {
|
||||
startActivity<DeviceConfigActivity> {
|
||||
putExtra(DeviceConfigActivity.COOK_MODE, 2)
|
||||
}
|
||||
}
|
||||
)
|
||||
})
|
||||
}
|
||||
|
||||
private var isVisible = false
|
||||
|
||||
@@ -1,10 +1,9 @@
|
||||
package com.shuwei.dish.match.ui
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.app.Dialog
|
||||
import android.content.Intent
|
||||
import android.os.Bundle
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.activity.viewModels
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
import com.shuwei.dish.match.R
|
||||
import com.shuwei.dish.match.base.BaseActivity
|
||||
@@ -13,6 +12,9 @@ import com.shuwei.dish.match.databinding.ActivitySelectDishBinding
|
||||
import com.shuwei.dish.match.db.AppRepository
|
||||
import com.shuwei.dish.match.dialog.DialogTool
|
||||
import com.shuwei.dish.match.entity.CookFoodEntity
|
||||
import com.shuwei.dish.match.entity.FoodRecord
|
||||
import com.shuwei.dish.match.entity.FoodRecordBean
|
||||
import com.shuwei.dish.match.net.NetViewModel
|
||||
import com.shuwei.dish.match.ui.fragment.DishListFragment
|
||||
import com.shuwei.dish.match.utils.KeyboardUtil
|
||||
import com.shuwei.dish.match.utils.ext.addOnActionSearchListener
|
||||
@@ -22,6 +24,7 @@ import com.shuwei.dish.match.utils.ext.toast
|
||||
import com.shuwei.dish.match.utils.ext.visible
|
||||
import com.shuwei.dish.match.viewmodel.AppViewModel
|
||||
import com.shuwei.dish.match.viewmodel.factory.AppFactory
|
||||
import kotlin.getValue
|
||||
|
||||
class SelectDishActivity : BaseActivity() {
|
||||
|
||||
@@ -69,10 +72,8 @@ class SelectDishActivity : BaseActivity() {
|
||||
|
||||
private fun initViewModel() {
|
||||
val db = BaseApp.instance!!.database
|
||||
val factory =
|
||||
AppFactory(AppRepository(db.appDao()))
|
||||
appViewModel =
|
||||
ViewModelProvider(this, factory)[AppViewModel::class.java]
|
||||
val factory = AppFactory(AppRepository(db.appDao()))
|
||||
appViewModel = ViewModelProvider(this, factory)[AppViewModel::class.java]
|
||||
}
|
||||
|
||||
fun getCookFoodList(action: (MutableList<CookFoodEntity>?) -> Unit) {
|
||||
@@ -202,4 +203,16 @@ class SelectDishActivity : BaseActivity() {
|
||||
isVisible = false
|
||||
}
|
||||
|
||||
public fun getFoodList(
|
||||
param: MutableMap<String, Any>,
|
||||
onSuccess: (MutableList<FoodRecord>?) -> Unit,
|
||||
onFailure: (String, String) -> Unit
|
||||
) {
|
||||
netViewModel.searchFoodList(
|
||||
param = param,
|
||||
onSuccess = onSuccess,
|
||||
onFailure = onFailure
|
||||
)
|
||||
}
|
||||
|
||||
}
|
||||
@@ -6,7 +6,7 @@ import android.util.Log
|
||||
import android.util.SparseArray
|
||||
import android.util.SparseIntArray
|
||||
import android.widget.FrameLayout
|
||||
import android.widget.TextView
|
||||
import androidx.activity.viewModels
|
||||
import androidx.core.util.forEach
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
import com.google.gson.reflect.TypeToken
|
||||
@@ -21,8 +21,7 @@ import com.shuwei.dish.match.entity.CookFoodEntity
|
||||
import com.shuwei.dish.match.entity.CookFoodGoodsEntity
|
||||
import com.shuwei.dish.match.entity.FoodRecord
|
||||
import com.shuwei.dish.match.entity.SeasoningEntity
|
||||
import com.shuwei.dish.match.http.HttpUtil
|
||||
import com.shuwei.dish.match.http.UrlConfig
|
||||
import com.shuwei.dish.match.net.NetViewModel
|
||||
import com.shuwei.dish.match.utils.AddressUtil
|
||||
import com.shuwei.dish.match.utils.WeightUtil
|
||||
import com.shuwei.dish.match.utils.ext.clickWithDebounce
|
||||
@@ -35,12 +34,13 @@ import com.shuwei.dish.match.utils.ext.toast
|
||||
import com.shuwei.dish.match.utils.ext.visible
|
||||
import com.shuwei.dish.match.viewmodel.AppViewModel
|
||||
import com.shuwei.dish.match.viewmodel.factory.AppFactory
|
||||
import kotlin.getValue
|
||||
|
||||
@SuppressLint("UseSparseArrays")
|
||||
class SubmitFoodActivity : BaseActivity() {
|
||||
|
||||
companion object {
|
||||
const val TAG = "SubmitDishActivity"
|
||||
const val TAG = "SubmitFoodActivity"
|
||||
const val FOOD_ITEM = "foodItem"
|
||||
const val GOODS_LIST = "goodsList"
|
||||
}
|
||||
@@ -98,7 +98,10 @@ class SubmitFoodActivity : BaseActivity() {
|
||||
}
|
||||
|
||||
private fun loadSeasoningFromLocal() {
|
||||
appViewModel.getCookFoodGoodsList(foodId = food!!.foodId!!, cookMode = food!!.cookMode) { it ->
|
||||
appViewModel.getCookFoodGoodsList(
|
||||
foodId = food!!.foodId!!,
|
||||
cookMode = food!!.cookMode
|
||||
) { it ->
|
||||
goodsList = mutableListOf()
|
||||
val goodsIdList = mutableListOf<String>()
|
||||
//设置主辅材数据
|
||||
@@ -175,33 +178,34 @@ class SubmitFoodActivity : BaseActivity() {
|
||||
WeightUtil.addWeightListener(
|
||||
weightKey = TAG,
|
||||
getWeight = { address, state, weight ->
|
||||
if (address == AddressUtil.TWO) {
|
||||
cookFoodEntity.foodWeight = weight.toDouble()
|
||||
binding.tvTotalWeight.text = "${weight / 1000f}"
|
||||
}
|
||||
val firstWeight = firstGoodsArray.get(address, null)
|
||||
if (firstWeight == null) {
|
||||
//未设置数据
|
||||
if (state != WeightUtil.STATE_STABLE) {
|
||||
//首次记录数据需要稳定数据
|
||||
if (address == AddressUtil.TWO) {
|
||||
cookFoodEntity.foodWeight = weight.toDouble()
|
||||
binding.tvTotalWeight.text = "${weight / 1000f}"
|
||||
}
|
||||
val firstWeight = firstGoodsArray.get(address, null)
|
||||
if (firstWeight == null) {
|
||||
//未设置数据
|
||||
if (state != WeightUtil.STATE_STABLE) {
|
||||
//首次记录数据需要稳定数据
|
||||
return@addWeightListener
|
||||
}
|
||||
firstGoodsArray.put(address, weight)
|
||||
return@addWeightListener
|
||||
}
|
||||
firstGoodsArray.put(address, weight)
|
||||
return@addWeightListener
|
||||
}
|
||||
var realUseWeight = firstWeight - weight
|
||||
realUseWeight = if (realUseWeight > 0) realUseWeight else 0.0
|
||||
seasoningArray.put(address, realUseWeight.toDouble())
|
||||
var realUseWeight = firstWeight - weight
|
||||
realUseWeight = if (realUseWeight > 0) realUseWeight else 0.0
|
||||
seasoningArray.put(address, realUseWeight.toDouble())
|
||||
|
||||
// refreshSeasoningWeight()
|
||||
|
||||
val item = seasoningItems.firstOrNull { address == addressArray[it.sort]}
|
||||
item?.let {
|
||||
val lastWeight = seasoningArray.get(address) ?: 0.toDouble()
|
||||
it.useWeight = (lastWeight + getCookingSeasoning(address)).roundedOneDecimalPlace()
|
||||
updateGridData(it)
|
||||
}
|
||||
})
|
||||
val item = seasoningItems.firstOrNull { address == addressArray[it.sort] }
|
||||
item?.let {
|
||||
val lastWeight = seasoningArray.get(address) ?: 0.toDouble()
|
||||
it.useWeight =
|
||||
(lastWeight + getCookingSeasoning(address)).roundedOneDecimalPlace()
|
||||
updateGridData(it)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// private fun refreshSeasoningWeight() {
|
||||
@@ -217,17 +221,18 @@ class SubmitFoodActivity : BaseActivity() {
|
||||
// setGridData(seasoningItems)
|
||||
// }
|
||||
|
||||
private fun updateGridData(entity:SeasoningEntity) {
|
||||
private fun updateGridData(entity: SeasoningEntity) {
|
||||
val gridLayout = binding.include.root
|
||||
val tag = entity.sort.toString()
|
||||
val frameLayout = gridLayout.findViewWithTag<FrameLayout>(tag)
|
||||
TextCellAdapter.loadLayout(frameLayout , entity)
|
||||
TextCellAdapter.loadLayout(frameLayout, entity)
|
||||
}
|
||||
|
||||
private fun getCookingSeasoning(address: Int): Double {
|
||||
if (isCooking.not()) return 0.toDouble()
|
||||
if (seasoningItems.isEmpty()) return 0.toDouble()
|
||||
val weight = seasoningCookingItems?.get(weightRelateArray2.get(address))?.useWeight ?: 0.toDouble()
|
||||
val weight =
|
||||
seasoningCookingItems?.get(weightRelateArray2.get(address))?.useWeight ?: 0.toDouble()
|
||||
return weight
|
||||
}
|
||||
|
||||
@@ -260,12 +265,12 @@ class SubmitFoodActivity : BaseActivity() {
|
||||
return
|
||||
}
|
||||
val realSeasoningData = seasoningItems
|
||||
//(binding.rvSeasoning.adapter as TextCellAdapter).list
|
||||
//(binding.rvSeasoning.adapter as TextCellAdapter).list
|
||||
if (realSeasoningData.isEmpty() && !isCooking) {
|
||||
toast("未获取到调料信息")
|
||||
return
|
||||
}
|
||||
if (realSeasoningData.isNotEmpty()&&realSeasoningData[0].goodsId.isNullOrBlank()) {
|
||||
if (realSeasoningData.isNotEmpty() && realSeasoningData[0].goodsId.isNullOrBlank()) {
|
||||
toast("还未设置调料信息,请去设置页面操作")
|
||||
return
|
||||
}
|
||||
@@ -316,7 +321,7 @@ class SubmitFoodActivity : BaseActivity() {
|
||||
toast("未获取到调料信息")
|
||||
return
|
||||
}
|
||||
if (realSeasoningData.isNotEmpty()&&realSeasoningData[0].goodsId.isNullOrBlank()) {
|
||||
if (realSeasoningData.isNotEmpty() && realSeasoningData[0].goodsId.isNullOrBlank()) {
|
||||
toast("还未设置调料信息,请去设置页面操作")
|
||||
return
|
||||
}
|
||||
@@ -335,8 +340,9 @@ class SubmitFoodActivity : BaseActivity() {
|
||||
}
|
||||
|
||||
cookFoodEntity.let {
|
||||
it.stFoodInfoConstituteList = this@SubmitFoodActivity.goodsList
|
||||
it.dinnerType = when(it.dinnerType) {
|
||||
// it.stFoodInfoConstituteList = this@SubmitFoodActivity.goodsList
|
||||
it.matchingConstituteInfoList = this@SubmitFoodActivity.goodsList
|
||||
it.dinnerType = when (it.dinnerType) {
|
||||
"1" -> "早餐"
|
||||
"2" -> "午餐"
|
||||
"3" -> "晚餐"
|
||||
@@ -352,14 +358,24 @@ class SubmitFoodActivity : BaseActivity() {
|
||||
}
|
||||
val json = cookFoodEntity.toJsonString()
|
||||
Log.d(TAG, "submit: json=$json")
|
||||
HttpUtil.postJson(
|
||||
url = UrlConfig.SUBMIT_DISH,
|
||||
json = json,
|
||||
doSuccess = {
|
||||
Log.d(TAG, "submit: postJson=$it")
|
||||
// HttpUtil.postJson(
|
||||
// url = UrlConfig.SUBMIT_DISH,
|
||||
// json = json,
|
||||
// doSuccess = {
|
||||
// Log.d(TAG, "submit: postJson=$it")
|
||||
// submitSuccess(isSamplingData)
|
||||
// }, doFailure = { code, msg ->
|
||||
// Log.d(TAG, "submit: postJson:code=$code,msg=$msg")
|
||||
// toast(msg)
|
||||
// dismissLoading()
|
||||
// })
|
||||
|
||||
netViewModel.submitCookFood(
|
||||
entity = cookFoodEntity,
|
||||
onSuccess = {
|
||||
submitSuccess(isSamplingData)
|
||||
}, doFailure = { code, msg ->
|
||||
Log.d(TAG, "submit: postJson:code=$code,msg=$msg")
|
||||
},
|
||||
onFailure = { code, msg ->
|
||||
toast(msg)
|
||||
dismissLoading()
|
||||
})
|
||||
@@ -417,7 +433,7 @@ class SubmitFoodActivity : BaseActivity() {
|
||||
}
|
||||
|
||||
private var seasoningItems = mutableListOf<SeasoningEntity>()
|
||||
private var seasoningCookingItems: List<SeasoningEntity> ?= null
|
||||
private var seasoningCookingItems: List<SeasoningEntity>? = null
|
||||
private fun loadTextCell(list: MutableList<SeasoningEntity>) {
|
||||
seasoningItems.clear()
|
||||
seasoningItems.addAll(list)
|
||||
@@ -434,8 +450,8 @@ class SubmitFoodActivity : BaseActivity() {
|
||||
}
|
||||
|
||||
private fun initConfigData() {
|
||||
repeat(12) {num->
|
||||
val firstOne = seasoningItems.firstOrNull {it.sort == num}
|
||||
repeat(12) { num ->
|
||||
val firstOne = seasoningItems.firstOrNull { it.sort == num }
|
||||
if (firstOne == null) {
|
||||
seasoningItems.add(SeasoningEntity().also { it.sort = num })
|
||||
}
|
||||
|
||||
@@ -13,18 +13,12 @@ import com.shuwei.dish.match.base.BaseApp
|
||||
import com.shuwei.dish.match.base.BaseFragment
|
||||
import com.shuwei.dish.match.databinding.FragmentDishListBinding
|
||||
import com.shuwei.dish.match.databinding.LayoutEmptyViewBinding
|
||||
|
||||
import com.shuwei.dish.match.entity.FoodRecord
|
||||
import com.shuwei.dish.match.entity.FoodRecordBean
|
||||
import com.shuwei.dish.match.http.HttpUtil
|
||||
import com.shuwei.dish.match.http.UrlConfig
|
||||
import com.shuwei.dish.match.ui.PrepareCookActivity
|
||||
import com.shuwei.dish.match.ui.SelectDishActivity
|
||||
import com.shuwei.dish.match.ui.SubmitFoodActivity
|
||||
import com.shuwei.dish.match.utils.SwipeCallback
|
||||
import com.shuwei.dish.match.utils.ext.startActivity
|
||||
import com.shuwei.dish.match.utils.ext.toJsonString
|
||||
import com.shuwei.dish.match.utils.ext.toObject
|
||||
import com.shuwei.dish.match.utils.ext.toast
|
||||
import java.io.Serializable
|
||||
|
||||
@@ -90,13 +84,13 @@ class DishListFragment : BaseFragment<FragmentDishListBinding>() {
|
||||
inflater: LayoutInflater,
|
||||
container: ViewGroup?
|
||||
): FragmentDishListBinding {
|
||||
return FragmentDishListBinding.inflate(inflater, container, false)
|
||||
return FragmentDishListBinding.inflate(inflater, container, false)
|
||||
}
|
||||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
activity = requireActivity() as SelectDishActivity
|
||||
dinnerType = arguments?.getString(DINNER_TYPE, "0")?:"0"
|
||||
dinnerType = arguments?.getString(DINNER_TYPE, "0") ?: "0"
|
||||
binding.rvDishList.run {
|
||||
layoutManager =
|
||||
LinearLayoutManager(requireContext(), LinearLayoutManager.VERTICAL, false)
|
||||
@@ -119,6 +113,7 @@ class DishListFragment : BaseFragment<FragmentDishListBinding>() {
|
||||
pageNo = 1
|
||||
activity.showLoading()
|
||||
getDishList()
|
||||
binding.refreshLayout.setEnableRefresh(true)
|
||||
}
|
||||
|
||||
private fun addViewListener() {
|
||||
@@ -134,6 +129,7 @@ class DishListFragment : BaseFragment<FragmentDishListBinding>() {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun getDishList(pageNo: Int, dinnerType: String) {
|
||||
this.pageNo = pageNo
|
||||
this.dinnerType = dinnerType
|
||||
@@ -153,40 +149,71 @@ class DishListFragment : BaseFragment<FragmentDishListBinding>() {
|
||||
@Suppress("unchecked_cast")
|
||||
fun getDishList() {
|
||||
activity.showLoading()
|
||||
val map = mapOf(
|
||||
// "foodName" to input,
|
||||
"dinnerType" to getDinnerTypeText(),
|
||||
"pageNo" to "$pageNo",
|
||||
"pageSize" to "$pageSize",
|
||||
"canteenId" to BaseApp.canteenId
|
||||
)
|
||||
val sb = StringBuilder(UrlConfig.QUERY_FOOD_LIST).apply {
|
||||
append("?")
|
||||
map.forEach { (key, value) -> append("$key=$value&") }
|
||||
}
|
||||
sb.deleteCharAt(sb.length - 1)
|
||||
HttpUtil.get(
|
||||
url = sb.toString(),
|
||||
doSuccess = {
|
||||
loadDishList(it)
|
||||
}, doFailure = { code, msg ->
|
||||
try {
|
||||
if (isAdded.not()) {
|
||||
return@get
|
||||
}
|
||||
binding.refreshLayout.run {
|
||||
setEnableRefresh(true)
|
||||
}
|
||||
toast(msg)
|
||||
finishRefresh()
|
||||
if (pageNo == 1) {
|
||||
loadEmptyView()
|
||||
}
|
||||
activity.delayDismissLoading()
|
||||
} catch (e: Exception) {
|
||||
e.printStackTrace()
|
||||
activity.getFoodList(
|
||||
param = mutableMapOf(
|
||||
"pageNum" to pageNo,
|
||||
"pageSize" to pageSize,
|
||||
"placeId" to BaseApp.canteenId,
|
||||
"dinnerType" to getDinnerTypeText()
|
||||
),
|
||||
onSuccess = { recordBean ->
|
||||
activity.delayDismissLoading()
|
||||
finishRefresh()
|
||||
loadDishList(recordBean)
|
||||
},
|
||||
onFailure = { code, msg ->
|
||||
if (isAdded.not()) {
|
||||
return@getFoodList
|
||||
}
|
||||
})
|
||||
toast(msg)
|
||||
finishRefresh()
|
||||
if (pageNo == 1) {
|
||||
loadEmptyView()
|
||||
}
|
||||
activity.delayDismissLoading()
|
||||
}
|
||||
)
|
||||
// val map = mapOf(
|
||||
//// "foodName" to input,
|
||||
// "dinnerType" to getDinnerTypeText(),
|
||||
// "pageNo" to "$pageNo",
|
||||
// "pageSize" to "$pageSize",
|
||||
// "canteenId" to BaseApp.canteenId
|
||||
// )
|
||||
// val sb = StringBuilder(UrlConfig.QUERY_FOOD_LIST).apply {
|
||||
// append("?")
|
||||
// map.forEach { (key, value) -> append("$key=$value&") }
|
||||
// }
|
||||
// sb.deleteCharAt(sb.length - 1)
|
||||
// HttpUtil.get(
|
||||
// url = sb.toString(),
|
||||
// doSuccess = { data ->
|
||||
// binding.refreshLayout.run {
|
||||
// setEnableRefresh(true)
|
||||
// }
|
||||
// activity.delayDismissLoading()
|
||||
// finishRefresh()
|
||||
// val json = data.toJsonString()
|
||||
// val recordBean: FoodRecordBean? = json.toObject<FoodRecordBean>()
|
||||
// loadDishList(recordBean)
|
||||
// }, doFailure = { code, msg ->
|
||||
// try {
|
||||
// if (isAdded.not()) {
|
||||
// return@get
|
||||
// }
|
||||
// binding.refreshLayout.run {
|
||||
// setEnableRefresh(true)
|
||||
// }
|
||||
// toast(msg)
|
||||
// finishRefresh()
|
||||
// if (pageNo == 1) {
|
||||
// loadEmptyView()
|
||||
// }
|
||||
// activity.delayDismissLoading()
|
||||
// } catch (e: Exception) {
|
||||
// e.printStackTrace()
|
||||
// }
|
||||
// })
|
||||
}
|
||||
|
||||
private var emptyViewBinding: LayoutEmptyViewBinding? = null
|
||||
@@ -233,7 +260,7 @@ class DishListFragment : BaseFragment<FragmentDishListBinding>() {
|
||||
if (food != null) {
|
||||
food.isCooking = true
|
||||
food.sort = index
|
||||
food.dinnerType = entity.dinnerType?:"0"
|
||||
food.dinnerType = entity.dinnerType ?: "0"
|
||||
tempList.add(food)
|
||||
} else {
|
||||
//当前查询到的list不包括本地数据id,可能数据在很多页以后了,暂时只能直接构造数据
|
||||
@@ -242,7 +269,7 @@ class DishListFragment : BaseFragment<FragmentDishListBinding>() {
|
||||
foodId = entity.foodId,
|
||||
foodName = entity.foodName,
|
||||
sort = index,
|
||||
dinnerType = entity.dinnerType?:"0",
|
||||
dinnerType = entity.dinnerType ?: "0",
|
||||
isCooking = true
|
||||
)
|
||||
)
|
||||
@@ -255,30 +282,22 @@ class DishListFragment : BaseFragment<FragmentDishListBinding>() {
|
||||
}
|
||||
|
||||
@SuppressLint("NotifyDataSetChanged")
|
||||
private fun loadDishList(data: Any) {
|
||||
private fun loadDishList(records: MutableList<FoodRecord>?) {
|
||||
try {
|
||||
if (isAdded.not()) {
|
||||
return
|
||||
}
|
||||
binding.refreshLayout.run {
|
||||
setEnableRefresh(true)
|
||||
}
|
||||
activity.delayDismissLoading()
|
||||
finishRefresh()
|
||||
val json = data.toJsonString()
|
||||
val recordBean: FoodRecordBean? = json.toObject<FoodRecordBean>()
|
||||
if (recordBean == null || recordBean.records.isNullOrEmpty()) {
|
||||
if (records.isNullOrEmpty()) {
|
||||
//toast("暂未搜索到相关菜品信息")
|
||||
if (pageNo == 1) {
|
||||
loadEmptyView()
|
||||
}
|
||||
return
|
||||
}
|
||||
val records = recordBean.records
|
||||
if (pageNo == 1) {
|
||||
list.clear()
|
||||
}
|
||||
list.addAll(records!!)
|
||||
list.addAll(records)
|
||||
dishAdapter.notifyDataSetChanged()
|
||||
val isLoadMoreEnable = records.size >= pageSize
|
||||
binding.refreshLayout.setEnableLoadMore(isLoadMoreEnable)
|
||||
|
||||
@@ -69,7 +69,8 @@ object WeightUtil {
|
||||
|
||||
fun tareTwo(address: Int) {
|
||||
try {
|
||||
Weigher2.tareTwo(address)
|
||||
//Weigher2.tareTwo(address)
|
||||
Weigher2.zeroTwo(address)
|
||||
} catch (e: Exception) {
|
||||
e.printStackTrace()
|
||||
}
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle">
|
||||
<solid android:color="#f0aaf0"/>
|
||||
<size android:width="2dp" android:height="100dp"/>
|
||||
</shape>
|
||||
@@ -1,216 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical"
|
||||
tools:background="@drawable/bg_other_page">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="30dp"
|
||||
android:layout_marginEnd="30dp"
|
||||
android:background="@drawable/shape_white_30_corners"
|
||||
android:orientation="vertical">
|
||||
|
||||
<FrameLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="106dp"
|
||||
android:paddingStart="30dp"
|
||||
android:paddingEnd="30dp">
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="start|center_vertical"
|
||||
android:text="菜品模式设置"
|
||||
android:textStyle="bold"
|
||||
android:textColor="@color/black"
|
||||
android:textSize="28sp" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvSetting"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="end|center_vertical"
|
||||
android:text="配置终端默认模式"
|
||||
android:textColor="@color/gray_b4"
|
||||
android:textSize="28sp" />
|
||||
</FrameLayout>
|
||||
|
||||
<com.google.android.material.divider.MaterialDivider
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="1dp"
|
||||
android:layout_marginStart="30dp"
|
||||
android:layout_marginEnd="30dp"
|
||||
android:background="@color/gray_eb" />
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/modeRadioGroup"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical">
|
||||
|
||||
<RadioButton
|
||||
android:id="@+id/rbModeCook"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="190dp"
|
||||
android:layout_marginStart="30dp"
|
||||
android:layout_marginEnd="30dp"
|
||||
android:background="@color/white"
|
||||
android:button="@null"
|
||||
android:drawableEnd="@drawable/mode_select"
|
||||
android:textSize="36sp"
|
||||
tools:text="制作模式" />
|
||||
|
||||
<com.google.android.material.divider.MaterialDivider
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="1dp"
|
||||
android:layout_marginStart="30dp"
|
||||
android:layout_marginEnd="30dp"
|
||||
android:background="@color/gray_eb" />
|
||||
|
||||
<RadioButton
|
||||
android:id="@+id/rbModeSampling"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="190dp"
|
||||
android:layout_marginStart="30dp"
|
||||
android:layout_marginEnd="30dp"
|
||||
android:background="@color/white"
|
||||
android:button="@null"
|
||||
android:drawableEnd="@drawable/mode_select"
|
||||
android:textSize="36sp"
|
||||
tools:text="采样模式" />
|
||||
</LinearLayout>
|
||||
|
||||
<com.google.android.material.divider.MaterialDivider
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="1dp"
|
||||
android:layout_marginStart="30dp"
|
||||
android:layout_marginEnd="30dp"
|
||||
android:background="@color/gray_eb" />
|
||||
|
||||
<RadioButton
|
||||
android:id="@+id/rbModeQuality"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="190dp"
|
||||
android:layout_marginStart="30dp"
|
||||
android:layout_marginEnd="30dp"
|
||||
android:button="@null"
|
||||
android:drawableEnd="@drawable/ic_dish_disable"
|
||||
android:enabled="false"
|
||||
android:textColor="@color/gray_b4"
|
||||
android:textSize="36sp"
|
||||
tools:text="品控模式" />
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="30dp"
|
||||
android:background="@drawable/shape_white_30_corners"
|
||||
android:orientation="vertical"
|
||||
android:layout_marginStart="30dp"
|
||||
android:layout_marginEnd="30dp">
|
||||
|
||||
<FrameLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="40dp"
|
||||
android:layout_marginStart="30dp"
|
||||
android:layout_marginEnd="30dp">
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="start"
|
||||
android:text="@string/seasoning_setting"
|
||||
android:textColor="@color/black666"
|
||||
android:textSize="28sp" />
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="end"
|
||||
android:layout_marginEnd="15dp"
|
||||
android:text="@string/seasoning_setting2"
|
||||
android:textColor="@color/gray_b4"
|
||||
android:textSize="28sp" />
|
||||
</FrameLayout>
|
||||
|
||||
<FrameLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="20dp">
|
||||
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
android:id="@+id/rvSeasoning"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="30dp"
|
||||
android:layout_marginStart="23dp"
|
||||
android:layout_marginEnd="22dp"
|
||||
android:overScrollMode="never"
|
||||
app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"
|
||||
app:spanCount="3"
|
||||
tools:itemCount="15"
|
||||
tools:listitem="@layout/list_item_cell" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvRightBottomCell"
|
||||
android:layout_width="467dp"
|
||||
android:layout_height="255dp"
|
||||
android:layout_gravity="bottom|end"
|
||||
android:layout_marginEnd="30dp"
|
||||
android:layout_marginBottom="8dp"
|
||||
android:background="@drawable/selector_text_cell"
|
||||
android:gravity="center"
|
||||
android:textColor="@color/black"
|
||||
android:textSize="28sp"
|
||||
android:textStyle="bold"
|
||||
tools:text="食盐" />
|
||||
|
||||
</FrameLayout>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<!-- <LinearLayout-->
|
||||
<!-- android:layout_width="match_parent"-->
|
||||
<!-- android:layout_height="match_parent"-->
|
||||
<!-- android:layout_marginStart="30dp"-->
|
||||
<!-- android:layout_marginTop="10dp"-->
|
||||
<!-- android:layout_marginEnd="30dp"-->
|
||||
<!-- android:layout_marginBottom="30dp"-->
|
||||
<!-- android:gravity="bottom"-->
|
||||
<!-- android:orientation="horizontal">-->
|
||||
|
||||
<!-- <TextView-->
|
||||
<!-- android:id="@+id/btnCancel"-->
|
||||
<!-- android:layout_width="0dp"-->
|
||||
<!-- android:layout_height="90dp"-->
|
||||
<!-- android:layout_weight="1"-->
|
||||
<!-- android:background="@drawable/ripple_effect_light"-->
|
||||
<!-- android:gravity="center"-->
|
||||
<!-- android:text="取消"-->
|
||||
<!-- android:textColor="@color/dish_green"-->
|
||||
<!-- android:textSize="32sp"-->
|
||||
<!-- android:textStyle="bold"-->
|
||||
<!-- tools:ignore="HardcodedText" />-->
|
||||
|
||||
<!-- <TextView-->
|
||||
<!-- android:id="@+id/btnConfirm"-->
|
||||
<!-- android:layout_width="0dp"-->
|
||||
<!-- android:layout_height="90dp"-->
|
||||
<!-- android:layout_marginStart="30dp"-->
|
||||
<!-- android:layout_weight="1"-->
|
||||
<!-- android:background="@drawable/ripple_effect_green"-->
|
||||
<!-- android:gravity="center"-->
|
||||
<!-- android:text="确定"-->
|
||||
<!-- android:textColor="@color/white"-->
|
||||
<!-- android:textSize="32sp"-->
|
||||
<!-- android:textStyle="bold"-->
|
||||
<!-- tools:ignore="HardcodedText" />-->
|
||||
<!-- </LinearLayout>-->
|
||||
</LinearLayout>
|
||||
@@ -243,7 +243,7 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
android:layout_marginStart="30dp"
|
||||
android:layout_marginTop="30dp"
|
||||
android:layout_marginTop="0dp"
|
||||
android:layout_marginEnd="30dp"
|
||||
android:layout_weight="1"
|
||||
android:background="@drawable/shape_white_30_corners"
|
||||
@@ -270,7 +270,7 @@
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<TextView
|
||||
<androidx.appcompat.widget.AppCompatButton
|
||||
android:id="@+id/btnCook"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="90dp"
|
||||
@@ -280,9 +280,10 @@
|
||||
android:textColor="@color/white"
|
||||
android:textSize="32sp"
|
||||
android:textStyle="bold"
|
||||
android:background="@drawable/ripple_effect_green"
|
||||
android:background="@drawable/shape_green_bg"
|
||||
android:clickable="true" />
|
||||
|
||||
<!-- android:background="@drawable/ripple_effect_green"-->
|
||||
<!-- android:background="@drawable/shape_green_bg"-->
|
||||
<!-- android:background="?attr/selectableItemBackground"-->
|
||||
<!-- android:clickable="true"-->
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
android:textSize="30sp"
|
||||
android:textStyle="bold"
|
||||
tools:ignore="HardcodedText"
|
||||
android:visibility="visible"/>
|
||||
android:visibility="invisible"/>
|
||||
|
||||
<Space
|
||||
android:layout_width="wrap_content"
|
||||
@@ -45,6 +45,7 @@
|
||||
android:layout_gravity="center_horizontal|bottom"
|
||||
android:layout_marginBottom="50dp"
|
||||
tools:src="@mipmap/ic_logo1024"
|
||||
tools:ignore="ContentDescription" />
|
||||
tools:ignore="ContentDescription"
|
||||
android:visibility="invisible"/>
|
||||
|
||||
</LinearLayout>
|
||||
@@ -204,7 +204,7 @@
|
||||
android:layout_marginTop="39dp"
|
||||
android:layout_marginBottom="39dp"
|
||||
android:text="@string/dish_weight_set_remind"
|
||||
android:textColor="@color/dish_green"
|
||||
android:textColor="@color/black999"
|
||||
android:textSize="26sp" />
|
||||
|
||||
</LinearLayout>
|
||||
@@ -261,27 +261,17 @@
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<!-- <com.google.android.material.button.MaterialButton-->
|
||||
<!-- android:id="@+id/btnCook"-->
|
||||
<!-- android:layout_width="match_parent"-->
|
||||
<!-- android:layout_height="90dp"-->
|
||||
<!-- android:layout_margin="30dp"-->
|
||||
<!-- android:text="@string/goCooking"-->
|
||||
<!-- android:textSize="32sp"-->
|
||||
<!-- android:backgroundTint="@null"-->
|
||||
<!-- style="@style/CookButtonStyle"-->
|
||||
<!-- android:textStyle="bold"/>-->
|
||||
|
||||
<TextView
|
||||
<androidx.appcompat.widget.AppCompatButton
|
||||
android:id="@+id/btnCook"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="90dp"
|
||||
android:layout_margin="30dp"
|
||||
android:background="@drawable/ripple_effect_green"
|
||||
android:background="@drawable/shape_green_bg"
|
||||
android:gravity="center"
|
||||
android:text="@string/goCooking"
|
||||
android:textColor="@color/white"
|
||||
android:textSize="32sp"
|
||||
android:textStyle="bold" />
|
||||
<!-- android:background="@drawable/ripple_effect_green"-->
|
||||
|
||||
</LinearLayout>
|
||||
@@ -90,16 +90,17 @@
|
||||
</com.scwang.smart.refresh.layout.SmartRefreshLayout>
|
||||
</LinearLayout>
|
||||
|
||||
<TextView
|
||||
<androidx.appcompat.widget.AppCompatButton
|
||||
android:id="@+id/btnAddSampling"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="90dp"
|
||||
android:layout_margin="30dp"
|
||||
android:background="@drawable/ripple_effect_green"
|
||||
android:background="@drawable/shape_green_bg"
|
||||
android:gravity="center"
|
||||
android:text="@string/add_sampling"
|
||||
android:textColor="@color/white"
|
||||
android:textSize="32sp"
|
||||
android:textStyle="bold" />
|
||||
<!-- android:background="@drawable/ripple_effect_green"-->
|
||||
|
||||
</LinearLayout>
|
||||
@@ -1,173 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical"
|
||||
tools:background="@drawable/bg_other_page">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="30dp"
|
||||
android:layout_marginEnd="30dp"
|
||||
android:background="@drawable/shape_white_30_corners"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvTitle"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="40dp"
|
||||
android:text="@string/seasoning"
|
||||
android:layout_marginStart="30dp"
|
||||
android:layout_marginEnd="30dp"
|
||||
android:textColor="@color/black666"
|
||||
android:textSize="28sp" />
|
||||
|
||||
<FrameLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="20dp">
|
||||
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
android:id="@+id/rvSeasoning"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="30dp"
|
||||
android:layout_marginStart="23dp"
|
||||
android:layout_marginEnd="22dp"
|
||||
android:overScrollMode="never"
|
||||
app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"
|
||||
app:spanCount="3"
|
||||
tools:itemCount="15"
|
||||
tools:listitem="@layout/list_item_cell" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvRightBottomCell"
|
||||
android:layout_width="467dp"
|
||||
android:layout_height="255dp"
|
||||
android:layout_gravity="bottom|end"
|
||||
android:layout_marginEnd="30dp"
|
||||
android:layout_marginBottom="8dp"
|
||||
android:background="@drawable/shape_white_fb_15_corners2"
|
||||
android:gravity="center"
|
||||
android:textColor="@color/black"
|
||||
android:textSize="28sp"
|
||||
android:textStyle="bold"
|
||||
tools:text="食盐" />
|
||||
|
||||
</FrameLayout>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
android:layout_weight="1"
|
||||
android:layout_marginStart="30dp"
|
||||
android:layout_marginTop="10dp"
|
||||
android:layout_marginEnd="30dp"
|
||||
android:background="@drawable/shape_white_30_corners"
|
||||
android:orientation="vertical"
|
||||
android:paddingStart="30dp"
|
||||
android:paddingEnd="30dp">
|
||||
|
||||
|
||||
<FrameLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<TextView
|
||||
android:layout_width="120dp"
|
||||
android:layout_height="80dp"
|
||||
android:layout_gravity="start"
|
||||
android:layout_marginStart="30dp"
|
||||
android:layout_marginTop="30dp"
|
||||
android:gravity="center"
|
||||
android:text="熟重"
|
||||
android:textColor="@color/black666"
|
||||
android:textSize="28sp" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/btnWeightClear"
|
||||
android:layout_width="120dp"
|
||||
android:layout_height="80dp"
|
||||
android:layout_gravity="end"
|
||||
android:layout_marginTop="30dp"
|
||||
android:layout_marginEnd="30dp"
|
||||
android:background="@drawable/shape_green_stroke"
|
||||
android:gravity="center"
|
||||
android:text="清零"
|
||||
android:textColor="@color/dish_green"
|
||||
android:textSize="28sp" />
|
||||
</FrameLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
android:layout_weight="1"
|
||||
android:gravity="center"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvTotalWeight"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:includeFontPadding="false"
|
||||
android:text="0.00"
|
||||
android:textColor="@color/black"
|
||||
android:textSize="90sp" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvWeightUnit"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="20dp"
|
||||
android:includeFontPadding="false"
|
||||
android:text="千克"
|
||||
android:textColor="@color/black999"
|
||||
android:textSize="32sp" />
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="30dp"
|
||||
android:layout_marginTop="40dp"
|
||||
android:layout_marginEnd="30dp"
|
||||
android:layout_marginBottom="30dp"
|
||||
android:gravity="center_vertical"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/btnCook"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="90dp"
|
||||
android:layout_weight="1"
|
||||
android:gravity="center"
|
||||
android:text="制作"
|
||||
android:background="@drawable/ripple_effect_light"
|
||||
android:textColor="@color/dish_green"
|
||||
android:textSize="32sp"
|
||||
android:textStyle="bold" />
|
||||
<!-- android:background="@drawable/shape_green_stroke"-->
|
||||
|
||||
<TextView
|
||||
android:id="@+id/btnSubmit"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="90dp"
|
||||
android:layout_marginStart="30dp"
|
||||
android:layout_weight="1"
|
||||
android:background="@drawable/ripple_effect_green"
|
||||
android:gravity="center"
|
||||
android:text="提交"
|
||||
android:textColor="@color/white"
|
||||
android:textSize="32sp"
|
||||
android:textStyle="bold" />
|
||||
</LinearLayout>
|
||||
|
||||
|
||||
</LinearLayout>
|
||||
@@ -20,28 +20,28 @@
|
||||
android:id="@+id/tvTitle"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="40dp"
|
||||
android:text="@string/seasoning"
|
||||
android:layout_marginStart="30dp"
|
||||
android:layout_marginTop="40dp"
|
||||
android:layout_marginEnd="30dp"
|
||||
android:text="@string/seasoning"
|
||||
android:textColor="@color/black666"
|
||||
android:textSize="28sp" />
|
||||
|
||||
<include
|
||||
android:id="@+id/include"
|
||||
layout="@layout/layout_grid"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
layout="@layout/layout_grid"/>
|
||||
android:layout_height="wrap_content" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
android:layout_weight="1"
|
||||
android:layout_marginStart="30dp"
|
||||
android:layout_marginTop="30dp"
|
||||
android:layout_marginEnd="30dp"
|
||||
android:layout_weight="1"
|
||||
android:background="@drawable/shape_white_30_corners"
|
||||
android:orientation="vertical"
|
||||
android:paddingStart="30dp"
|
||||
@@ -106,38 +106,41 @@
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="30dp"
|
||||
android:layout_marginTop="40dp"
|
||||
android:layout_marginEnd="30dp"
|
||||
android:layout_marginBottom="30dp"
|
||||
android:gravity="center_vertical"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<TextView
|
||||
<androidx.appcompat.widget.AppCompatButton
|
||||
android:id="@+id/btnCook"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="90dp"
|
||||
android:layout_marginStart="30dp"
|
||||
android:layout_marginTop="40dp"
|
||||
android:layout_marginBottom="30dp"
|
||||
android:layout_weight="1"
|
||||
android:background="@drawable/shape_green_stroke"
|
||||
android:gravity="center"
|
||||
android:text="制作"
|
||||
android:background="@drawable/ripple_effect_light"
|
||||
android:textColor="@color/dish_green"
|
||||
android:textSize="32sp"
|
||||
android:textStyle="bold" />
|
||||
<!-- android:background="@drawable/shape_green_stroke"-->
|
||||
<!-- android:background="@drawable/ripple_effect_light"-->
|
||||
|
||||
<TextView
|
||||
<androidx.appcompat.widget.AppCompatButton
|
||||
android:id="@+id/btnSubmit"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="90dp"
|
||||
android:layout_marginStart="30dp"
|
||||
android:layout_marginTop="40dp"
|
||||
android:layout_marginEnd="30dp"
|
||||
android:layout_marginBottom="30dp"
|
||||
android:layout_weight="1"
|
||||
android:background="@drawable/ripple_effect_green"
|
||||
android:background="@drawable/shape_green_bg"
|
||||
android:gravity="center"
|
||||
android:text="提交"
|
||||
android:textColor="@color/white"
|
||||
android:textSize="32sp"
|
||||
android:textStyle="bold" />
|
||||
<!-- android:background="@drawable/ripple_effect_green"-->
|
||||
</LinearLayout>
|
||||
|
||||
|
||||
|
||||
+6
-3
@@ -5,6 +5,7 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_horizontal"
|
||||
tools:background="@color/white"
|
||||
android:orientation="vertical">
|
||||
|
||||
<View
|
||||
@@ -67,6 +68,7 @@
|
||||
android:id="@+id/refreshLayout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginTop="10dp"
|
||||
app:srlEnableOverScrollDrag="false">
|
||||
|
||||
<com.scwang.smart.refresh.header.ClassicsHeader
|
||||
@@ -76,12 +78,13 @@
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
android:id="@+id/recyclerView"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginStart="45dp"
|
||||
android:layout_marginTop="35dp"
|
||||
android:layout_marginTop="15dp"
|
||||
android:layout_marginEnd="45dp"
|
||||
android:layout_marginBottom="150dp"
|
||||
android:layout_marginBottom="15dp"
|
||||
android:nestedScrollingEnabled="true"
|
||||
android:minHeight="380dp"
|
||||
android:overScrollMode="never"
|
||||
app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"
|
||||
app:spanCount="2"
|
||||
+8
-7
@@ -5,6 +5,7 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_horizontal"
|
||||
tools:background="@color/white"
|
||||
android:orientation="vertical">
|
||||
|
||||
<View
|
||||
@@ -47,12 +48,10 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="top|end"
|
||||
android:text="清零"
|
||||
android:paddingStart="30dp"
|
||||
android:paddingEnd="30dp"
|
||||
android:paddingHorizontal="30dp"
|
||||
android:layout_marginTop="15dp"
|
||||
android:layout_marginEnd="15dp"
|
||||
android:paddingTop="16dp"
|
||||
android:paddingBottom="16dp"
|
||||
android:paddingVertical="16dp"
|
||||
android:background="@drawable/ripple_effect_green"
|
||||
android:textColor="@color/white_f6"
|
||||
android:textSize="30sp"
|
||||
@@ -102,7 +101,7 @@
|
||||
android:id="@+id/refreshLayout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginTop="25dp"
|
||||
android:layout_marginTop="10dp"
|
||||
app:srlEnableOverScrollDrag="false">
|
||||
|
||||
<com.scwang.smart.refresh.header.ClassicsHeader
|
||||
@@ -112,10 +111,12 @@
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
android:id="@+id/recyclerView"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginStart="45dp"
|
||||
android:layout_marginEnd="45dp"
|
||||
android:layout_marginBottom="50dp"
|
||||
android:layout_marginTop="15dp"
|
||||
android:layout_marginBottom="15dp"
|
||||
android:minHeight="380dp"
|
||||
android:nestedScrollingEnabled="true"
|
||||
android:overScrollMode="never"
|
||||
app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"
|
||||
@@ -1,281 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical"
|
||||
tools:background="@drawable/bg_other_page">
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/llSearchBar"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="100dp"
|
||||
android:layout_margin="30dp"
|
||||
android:background="@drawable/shape_white_30_corners"
|
||||
android:gravity="center_vertical"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<EditText
|
||||
android:id="@+id/etInputDish"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="80dp"
|
||||
android:layout_marginStart="28dp"
|
||||
android:layout_weight="1"
|
||||
android:autofillHints=""
|
||||
android:background="@color/white"
|
||||
android:gravity="center"
|
||||
android:hint="@string/dish_search_hint"
|
||||
android:inputType="text"
|
||||
android:imeOptions="actionSearch"
|
||||
android:paddingStart="3dp"
|
||||
android:paddingEnd="3dp"
|
||||
android:textColor="@color/black333"
|
||||
android:textColorHint="@color/gray_c8"
|
||||
android:textSize="40sp"
|
||||
tools:ignore="TextFields" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/ivDishSearch"
|
||||
android:layout_width="60dp"
|
||||
android:layout_height="60dp"
|
||||
android:layout_marginStart="20dp"
|
||||
android:layout_marginEnd="20dp"
|
||||
android:paddingStart="10dp"
|
||||
android:paddingEnd="10dp"
|
||||
android:src="@drawable/ic_search_gray"
|
||||
tools:ignore="ContentDescription" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="30dp"
|
||||
android:layout_marginEnd="30dp"
|
||||
android:layout_marginBottom="30dp"
|
||||
android:background="@drawable/shape_white_30_corners"
|
||||
android:gravity="center_vertical"
|
||||
android:orientation="vertical">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="113dp"
|
||||
android:gravity="center_vertical"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<TextView
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="30dp"
|
||||
android:layout_marginEnd="30dp"
|
||||
android:layout_weight="1"
|
||||
android:text="@string/dish_name"
|
||||
android:textColor="@color/black666"
|
||||
android:textSize="28sp" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvInputDishType"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="80dp"
|
||||
android:background="@color/white"
|
||||
android:gravity="center_vertical|end"
|
||||
android:hint="@string/dish_search_hint2"
|
||||
android:textColor="@color/black333"
|
||||
android:textColorHint="@color/gray_c8"
|
||||
android:textSize="28sp"
|
||||
android:maxLines="1"
|
||||
android:ellipsize="end"
|
||||
android:drawablePadding="30dp"
|
||||
android:paddingEnd="30dp"
|
||||
android:paddingStart="30dp"
|
||||
app:drawableEndCompat="@drawable/ic_search_green" />
|
||||
|
||||
<!-- <ImageView-->
|
||||
<!-- android:id="@+id/ivDishTypeSearch"-->
|
||||
<!-- android:layout_width="62dp"-->
|
||||
<!-- android:layout_height="62dp"-->
|
||||
<!-- android:layout_marginStart="15dp"-->
|
||||
<!-- android:layout_marginEnd="15dp"-->
|
||||
<!-- android:paddingStart="15dp"-->
|
||||
<!-- android:paddingEnd="15dp"-->
|
||||
<!-- android:src="@drawable/ic_search_green"-->
|
||||
<!-- tools:ignore="ContentDescription" />-->
|
||||
</LinearLayout>
|
||||
|
||||
<com.google.android.material.divider.MaterialDivider
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="1dp"
|
||||
android:layout_marginStart="30dp"
|
||||
android:layout_marginEnd="30dp"
|
||||
android:background="@color/gray_eb" />
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="113dp"
|
||||
android:gravity="center_vertical"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="30dp"
|
||||
android:layout_marginEnd="30dp"
|
||||
android:text="@string/dish_from_type"
|
||||
android:textColor="@color/black666"
|
||||
android:textSize="28sp" />
|
||||
|
||||
<RadioGroup
|
||||
android:id="@+id/rgSampling"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="80dp"
|
||||
android:gravity="center_vertical|end"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<RadioButton
|
||||
android:id="@+id/rbDishTypeFirst"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginStart="30dp"
|
||||
android:background="@color/white"
|
||||
android:button="@null"
|
||||
android:drawableStart="@drawable/selector_dish_type"
|
||||
android:drawablePadding="30dp"
|
||||
android:gravity="center"
|
||||
android:paddingStart="30dp"
|
||||
android:paddingEnd="30dp"
|
||||
android:text="@string/dish_type_first"
|
||||
android:textColor="@color/dish_type_font"
|
||||
android:textSize="30sp"
|
||||
android:textStyle="bold" />
|
||||
|
||||
<RadioButton
|
||||
android:id="@+id/rbDishTypeSecond"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginStart="30dp"
|
||||
android:background="@color/white"
|
||||
android:button="@null"
|
||||
android:checked="false"
|
||||
android:drawableStart="@drawable/selector_dish_type"
|
||||
android:drawablePadding="30dp"
|
||||
android:gravity="center"
|
||||
android:paddingStart="30dp"
|
||||
android:paddingEnd="30dp"
|
||||
android:text="@string/dish_type_second"
|
||||
android:textColor="@color/dish_type_font"
|
||||
android:textSize="30sp"
|
||||
android:textStyle="bold" />
|
||||
</RadioGroup>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<com.google.android.material.divider.MaterialDivider
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="1dp"
|
||||
android:layout_marginStart="30dp"
|
||||
android:layout_marginEnd="30dp"
|
||||
android:background="@color/gray_eb" />
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="170dp"
|
||||
android:gravity="center_vertical"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="30dp"
|
||||
android:layout_marginEnd="30dp"
|
||||
android:text="@string/dish_part_weight_remind"
|
||||
android:textColor="@color/black666"
|
||||
android:textSize="28sp" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvDishPartWeight"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="100dp"
|
||||
android:layout_marginStart="30dp"
|
||||
android:layout_weight="1"
|
||||
android:autofillHints=""
|
||||
android:background="@drawable/shape_white_f6_10_corners"
|
||||
android:gravity="center"
|
||||
android:hint="-"
|
||||
android:maxLines="1"
|
||||
android:paddingStart="20dp"
|
||||
android:paddingEnd="20dp"
|
||||
android:text=""
|
||||
android:textColor="@color/dish_green"
|
||||
android:textColorHint="@color/gray_d6"
|
||||
android:textSize="60sp"
|
||||
tools:ignore="HardcodedText" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/ivWeightClear"
|
||||
android:layout_width="90dp"
|
||||
android:layout_height="90dp"
|
||||
android:layout_marginStart="30dp"
|
||||
android:src="@drawable/ic_weight_clear"
|
||||
tools:ignore="ContentDescription" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/ivWeightAdd"
|
||||
android:layout_width="90dp"
|
||||
android:layout_height="90dp"
|
||||
android:layout_marginStart="30dp"
|
||||
android:layout_marginEnd="30dp"
|
||||
android:src="@drawable/ic_weight_add"
|
||||
tools:ignore="ContentDescription" />
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
android:layout_marginStart="30dp"
|
||||
android:layout_marginTop="30dp"
|
||||
android:layout_marginEnd="30dp"
|
||||
android:layout_weight="1"
|
||||
android:background="@drawable/shape_white_30_corners"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="30dp"
|
||||
android:layout_marginTop="40dp"
|
||||
android:layout_marginBottom="40dp"
|
||||
android:text="@string/dish_composition"
|
||||
android:textColor="@color/black666"
|
||||
android:textSize="28sp" />
|
||||
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
android:id="@+id/rvDishPartList"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="20dp"
|
||||
android:overScrollMode="never"
|
||||
tools:itemCount="3"
|
||||
tools:listitem="@layout/list_item_dish_cook" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/btnCook"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="90dp"
|
||||
android:layout_margin="30dp"
|
||||
android:gravity="center"
|
||||
android:text="@string/goCooking"
|
||||
android:textColor="@color/white"
|
||||
android:textSize="32sp"
|
||||
android:textStyle="bold"
|
||||
android:background="@drawable/ripple_effect_green"
|
||||
android:clickable="true" />
|
||||
|
||||
<!-- android:background="@drawable/shape_green_bg"-->
|
||||
<!-- android:background="?attr/selectableItemBackground"-->
|
||||
<!-- android:clickable="true"-->
|
||||
|
||||
</LinearLayout>
|
||||
@@ -1,105 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical"
|
||||
tools:background="@drawable/bg_other_page">
|
||||
|
||||
<!-- <RadioGroup-->
|
||||
<!-- android:id="@+id/dishRadioGroup"-->
|
||||
<!-- android:layout_width="match_parent"-->
|
||||
<!-- android:layout_height="88dp"-->
|
||||
<!-- android:layout_marginTop="15dp"-->
|
||||
<!-- android:orientation="horizontal">-->
|
||||
|
||||
<!-- <RadioButton-->
|
||||
<!-- android:id="@+id/rbCooking"-->
|
||||
<!-- android:layout_width="0dp"-->
|
||||
<!-- android:layout_height="match_parent"-->
|
||||
<!-- android:layout_marginStart="30dp"-->
|
||||
<!-- android:layout_weight="1"-->
|
||||
<!-- android:background="@drawable/breakfast_bg"-->
|
||||
<!-- android:button="@null"-->
|
||||
<!-- android:checked="true"-->
|
||||
<!-- android:gravity="center"-->
|
||||
<!-- android:text="@string/rb_sampling_cooking"-->
|
||||
<!-- android:textColor="@color/breakfast_font"-->
|
||||
<!-- android:textSize="30sp"-->
|
||||
<!-- android:textStyle="bold" />-->
|
||||
|
||||
|
||||
<!-- <RadioButton-->
|
||||
<!-- android:id="@+id/rbFinished"-->
|
||||
<!-- android:layout_width="0dp"-->
|
||||
<!-- android:layout_height="match_parent"-->
|
||||
<!-- android:layout_marginStart="9dp"-->
|
||||
<!-- android:layout_marginEnd="30dp"-->
|
||||
<!-- android:layout_weight="1"-->
|
||||
<!-- android:background="@drawable/breakfast_bg"-->
|
||||
<!-- android:button="@null"-->
|
||||
<!-- android:checked="false"-->
|
||||
<!-- android:gravity="center"-->
|
||||
<!-- android:text="@string/rb_sampling_finished"-->
|
||||
<!-- android:textColor="@color/breakfast_font"-->
|
||||
<!-- android:textSize="30sp"-->
|
||||
<!-- android:textStyle="bold" />-->
|
||||
<!-- </RadioGroup>-->
|
||||
|
||||
|
||||
<!-- <LinearLayout-->
|
||||
<!-- android:layout_width="match_parent"-->
|
||||
<!-- android:layout_height="0dp"-->
|
||||
<!-- android:layout_weight="1"-->
|
||||
<!-- android:orientation="vertical"-->
|
||||
<!-- android:layout_marginTop="30dp"-->
|
||||
<!-- android:layout_marginStart="30dp"-->
|
||||
<!-- android:layout_marginEnd="30dp"-->
|
||||
<!-- android:background="@drawable/shape_white_30_corners">-->
|
||||
|
||||
<!-- <TextView-->
|
||||
<!-- android:layout_width="wrap_content"-->
|
||||
<!-- android:layout_height="wrap_content"-->
|
||||
<!-- android:text="@string/dish_list"-->
|
||||
<!-- android:textColor="@color/black666"-->
|
||||
<!-- android:textSize="28sp"-->
|
||||
<!-- android:visibility="gone"/>-->
|
||||
|
||||
<!-- <com.scwang.smart.refresh.layout-sw800dp.SmartRefreshLayout-->
|
||||
<!-- android:id="@+id/refreshLayout"-->
|
||||
<!-- android:layout_width="match_parent"-->
|
||||
<!-- android:layout_height="match_parent"-->
|
||||
<!-- android:layout_marginTop="8dp"-->
|
||||
<!-- android:layout_marginBottom="7dp">-->
|
||||
|
||||
<!-- <com.scwang.smart.refresh.header.ClassicsHeader-->
|
||||
<!-- android:layout_width="match_parent"-->
|
||||
<!-- android:layout_height="wrap_content" />-->
|
||||
|
||||
<!-- <androidx.recyclerview.widget.RecyclerView-->
|
||||
<!-- android:id="@+id/rvSamplingList"-->
|
||||
<!-- android:layout_width="match_parent"-->
|
||||
<!-- android:layout_height="match_parent"-->
|
||||
<!-- android:overScrollMode="never"-->
|
||||
<!-- tools:listitem="@layout-sw800dp/list_item_dish" />-->
|
||||
|
||||
<!-- <com.scwang.smart.refresh.footer.ClassicsFooter-->
|
||||
<!-- android:layout_width="match_parent"-->
|
||||
<!-- android:layout_height="wrap_content" />-->
|
||||
|
||||
<!-- </com.scwang.smart.refresh.layout-sw800dp.SmartRefreshLayout>-->
|
||||
<!-- </LinearLayout>-->
|
||||
|
||||
<!-- <TextView-->
|
||||
<!-- android:id="@+id/btnAddSampling"-->
|
||||
<!-- android:layout_width="match_parent"-->
|
||||
<!-- android:layout_height="90dp"-->
|
||||
<!-- android:layout_margin="30dp"-->
|
||||
<!-- android:background="@drawable/ripple_effect_green"-->
|
||||
<!-- android:gravity="center"-->
|
||||
<!-- android:text="@string/add_sampling"-->
|
||||
<!-- android:textColor="@color/white"-->
|
||||
<!-- android:textSize="32sp"-->
|
||||
<!-- android:textStyle="bold" />-->
|
||||
|
||||
</LinearLayout>
|
||||
@@ -1,30 +1,32 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center"
|
||||
android:orientation="vertical">
|
||||
android:orientation="vertical"
|
||||
tools:background="@color/white">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvDialogTitle"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="60dp"
|
||||
android:text="@string/food_remind_01"
|
||||
android:textColor="@color/black"
|
||||
android:textSize="36sp"
|
||||
android:layout_marginTop="60dp"
|
||||
android:textStyle="bold" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvDialogContent"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="25dp"
|
||||
android:layout_marginStart="20dp"
|
||||
android:gravity="center_horizontal"
|
||||
android:layout_marginTop="25dp"
|
||||
android:layout_marginEnd="20dp"
|
||||
android:layout_marginBottom="60dp"
|
||||
android:gravity="center_horizontal"
|
||||
android:text="@string/food_remind_02"
|
||||
android:textColor="@color/black999"
|
||||
android:layout_marginBottom="60dp"
|
||||
android:textSize="26sp" />
|
||||
</LinearLayout>
|
||||
@@ -8,6 +8,7 @@
|
||||
android:paddingTop="30dp"
|
||||
android:paddingEnd="22dp"
|
||||
android:paddingBottom="20dp"
|
||||
tools:background="@color/white"
|
||||
app:columnCount="3"
|
||||
app:orientation="vertical"
|
||||
app:rowCount="5"
|
||||
|
||||
@@ -41,5 +41,8 @@
|
||||
<item name="android:windowBackground">@android:color/transparent</item>
|
||||
<item name="android:windowIsFloating">true</item>
|
||||
</style>
|
||||
|
||||
<style name="DialogSoftInputAnimation">
|
||||
<item name="android:windowEnterAnimation">@android:anim/fade_in</item>
|
||||
<item name="android:windowExitAnimation">@android:anim/fade_out</item>
|
||||
</style>
|
||||
</resources>
|
||||
Reference in New Issue
Block a user