diff --git a/app/src/main/java/com/casic/xz/meterage/adapter/EntrustAdapter.kt b/app/src/main/java/com/casic/xz/meterage/adapter/EntrustAdapter.kt new file mode 100644 index 0000000..de09aa5 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/adapter/EntrustAdapter.kt @@ -0,0 +1,79 @@ +package com.casic.xz.meterage.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.xz.meterage.R +import com.casic.xz.meterage.model.EntrustListModel + +class EntrustAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun getItemCount(): Int = dataRows.size + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_entrust_rv_l, parent, false) + ) + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.customerNameView.text = rowsBean.customerName + holder.entrustStateView.text = rowsBean.statusName + + //未接收:0;已接收:1;已取消:2;检测完成:3 + val textColor = when (rowsBean.status) { + "0" -> R.color.red + "1" -> R.color.blue + "2" -> R.color.gray + else -> R.color.green + } + holder.entrustStateView.setTextColor(textColor) + holder.delivererView.text = rowsBean.deliverer + holder.customerPhoneView.text = rowsBean.customerPhone + holder.sampleCountView.text = rowsBean.sampleCount + holder.urgentView.text = rowsBean.isUrgent + holder.remarkView.text = rowsBean.remark + holder.entrustDateView.text = rowsBean.orderTime + holder.entrustCodeView.text = rowsBean.orderCode + + //绑定事件 + holder.entrustStateView.setOnClickListener { + listener?.onStateViewClicked(position) + } + + holder.customerPhoneView.setOnClickListener { + listener?.onPhoneViewClicked(position) + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var customerNameView: TextView = view.findViewById(R.id.customerNameView) + var entrustStateView: TextView = view.findViewById(R.id.entrustStateView) + var delivererView: TextView = view.findViewById(R.id.delivererView) + var customerPhoneView: TextView = view.findViewById(R.id.customerPhoneView) + var sampleCountView: TextView = view.findViewById(R.id.sampleCountView) + var urgentView: TextView = view.findViewById(R.id.urgentView) + var remarkView: TextView = view.findViewById(R.id.remarkView) + var entrustDateView: TextView = view.findViewById(R.id.entrustDateView) + var entrustCodeView: TextView = view.findViewById(R.id.entrustCodeView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onStateViewClicked(position: Int) + + fun onPhoneViewClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/adapter/EntrustAdapter.kt b/app/src/main/java/com/casic/xz/meterage/adapter/EntrustAdapter.kt new file mode 100644 index 0000000..de09aa5 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/adapter/EntrustAdapter.kt @@ -0,0 +1,79 @@ +package com.casic.xz.meterage.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.xz.meterage.R +import com.casic.xz.meterage.model.EntrustListModel + +class EntrustAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun getItemCount(): Int = dataRows.size + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_entrust_rv_l, parent, false) + ) + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.customerNameView.text = rowsBean.customerName + holder.entrustStateView.text = rowsBean.statusName + + //未接收:0;已接收:1;已取消:2;检测完成:3 + val textColor = when (rowsBean.status) { + "0" -> R.color.red + "1" -> R.color.blue + "2" -> R.color.gray + else -> R.color.green + } + holder.entrustStateView.setTextColor(textColor) + holder.delivererView.text = rowsBean.deliverer + holder.customerPhoneView.text = rowsBean.customerPhone + holder.sampleCountView.text = rowsBean.sampleCount + holder.urgentView.text = rowsBean.isUrgent + holder.remarkView.text = rowsBean.remark + holder.entrustDateView.text = rowsBean.orderTime + holder.entrustCodeView.text = rowsBean.orderCode + + //绑定事件 + holder.entrustStateView.setOnClickListener { + listener?.onStateViewClicked(position) + } + + holder.customerPhoneView.setOnClickListener { + listener?.onPhoneViewClicked(position) + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var customerNameView: TextView = view.findViewById(R.id.customerNameView) + var entrustStateView: TextView = view.findViewById(R.id.entrustStateView) + var delivererView: TextView = view.findViewById(R.id.delivererView) + var customerPhoneView: TextView = view.findViewById(R.id.customerPhoneView) + var sampleCountView: TextView = view.findViewById(R.id.sampleCountView) + var urgentView: TextView = view.findViewById(R.id.urgentView) + var remarkView: TextView = view.findViewById(R.id.remarkView) + var entrustDateView: TextView = view.findViewById(R.id.entrustDateView) + var entrustCodeView: TextView = view.findViewById(R.id.entrustCodeView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onStateViewClicked(position: Int) + + fun onPhoneViewClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/model/EntrustListModel.java b/app/src/main/java/com/casic/xz/meterage/model/EntrustListModel.java new file mode 100644 index 0000000..1b66d02 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/model/EntrustListModel.java @@ -0,0 +1,184 @@ +package com.casic.xz.meterage.model; + +import java.util.List; + +public class EntrustListModel { + + private int code; + private DataModel data; + private String message; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String createTime; + private String customerName; + private String customerNo; + private String customerPhone; + private String deliverer; + private String id; + private String isUrgent; + private String orderCode; + private String orderTime; + private String remark; + private String requireOverTime; + private String sampleCount; + private String status; + private String statusName; + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getCustomerName() { + return customerName; + } + + public void setCustomerName(String customerName) { + this.customerName = customerName; + } + + public String getCustomerNo() { + return customerNo; + } + + public void setCustomerNo(String customerNo) { + this.customerNo = customerNo; + } + + public String getCustomerPhone() { + return customerPhone; + } + + public void setCustomerPhone(String customerPhone) { + this.customerPhone = customerPhone; + } + + public String getDeliverer() { + return deliverer; + } + + public void setDeliverer(String deliverer) { + this.deliverer = deliverer; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getIsUrgent() { + return isUrgent; + } + + public void setIsUrgent(String isUrgent) { + this.isUrgent = isUrgent; + } + + public String getOrderCode() { + return orderCode; + } + + public void setOrderCode(String orderCode) { + this.orderCode = orderCode; + } + + public String getOrderTime() { + return orderTime; + } + + public void setOrderTime(String orderTime) { + this.orderTime = orderTime; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + public String getRequireOverTime() { + return requireOverTime; + } + + public void setRequireOverTime(String requireOverTime) { + this.requireOverTime = requireOverTime; + } + + public String getSampleCount() { + return sampleCount; + } + + public void setSampleCount(String sampleCount) { + this.sampleCount = sampleCount; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getStatusName() { + return statusName; + } + + public void setStatusName(String statusName) { + this.statusName = statusName; + } + } + } +} diff --git a/app/src/main/java/com/casic/xz/meterage/adapter/EntrustAdapter.kt b/app/src/main/java/com/casic/xz/meterage/adapter/EntrustAdapter.kt new file mode 100644 index 0000000..de09aa5 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/adapter/EntrustAdapter.kt @@ -0,0 +1,79 @@ +package com.casic.xz.meterage.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.xz.meterage.R +import com.casic.xz.meterage.model.EntrustListModel + +class EntrustAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun getItemCount(): Int = dataRows.size + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_entrust_rv_l, parent, false) + ) + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.customerNameView.text = rowsBean.customerName + holder.entrustStateView.text = rowsBean.statusName + + //未接收:0;已接收:1;已取消:2;检测完成:3 + val textColor = when (rowsBean.status) { + "0" -> R.color.red + "1" -> R.color.blue + "2" -> R.color.gray + else -> R.color.green + } + holder.entrustStateView.setTextColor(textColor) + holder.delivererView.text = rowsBean.deliverer + holder.customerPhoneView.text = rowsBean.customerPhone + holder.sampleCountView.text = rowsBean.sampleCount + holder.urgentView.text = rowsBean.isUrgent + holder.remarkView.text = rowsBean.remark + holder.entrustDateView.text = rowsBean.orderTime + holder.entrustCodeView.text = rowsBean.orderCode + + //绑定事件 + holder.entrustStateView.setOnClickListener { + listener?.onStateViewClicked(position) + } + + holder.customerPhoneView.setOnClickListener { + listener?.onPhoneViewClicked(position) + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var customerNameView: TextView = view.findViewById(R.id.customerNameView) + var entrustStateView: TextView = view.findViewById(R.id.entrustStateView) + var delivererView: TextView = view.findViewById(R.id.delivererView) + var customerPhoneView: TextView = view.findViewById(R.id.customerPhoneView) + var sampleCountView: TextView = view.findViewById(R.id.sampleCountView) + var urgentView: TextView = view.findViewById(R.id.urgentView) + var remarkView: TextView = view.findViewById(R.id.remarkView) + var entrustDateView: TextView = view.findViewById(R.id.entrustDateView) + var entrustCodeView: TextView = view.findViewById(R.id.entrustCodeView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onStateViewClicked(position: Int) + + fun onPhoneViewClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/model/EntrustListModel.java b/app/src/main/java/com/casic/xz/meterage/model/EntrustListModel.java new file mode 100644 index 0000000..1b66d02 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/model/EntrustListModel.java @@ -0,0 +1,184 @@ +package com.casic.xz.meterage.model; + +import java.util.List; + +public class EntrustListModel { + + private int code; + private DataModel data; + private String message; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String createTime; + private String customerName; + private String customerNo; + private String customerPhone; + private String deliverer; + private String id; + private String isUrgent; + private String orderCode; + private String orderTime; + private String remark; + private String requireOverTime; + private String sampleCount; + private String status; + private String statusName; + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getCustomerName() { + return customerName; + } + + public void setCustomerName(String customerName) { + this.customerName = customerName; + } + + public String getCustomerNo() { + return customerNo; + } + + public void setCustomerNo(String customerNo) { + this.customerNo = customerNo; + } + + public String getCustomerPhone() { + return customerPhone; + } + + public void setCustomerPhone(String customerPhone) { + this.customerPhone = customerPhone; + } + + public String getDeliverer() { + return deliverer; + } + + public void setDeliverer(String deliverer) { + this.deliverer = deliverer; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getIsUrgent() { + return isUrgent; + } + + public void setIsUrgent(String isUrgent) { + this.isUrgent = isUrgent; + } + + public String getOrderCode() { + return orderCode; + } + + public void setOrderCode(String orderCode) { + this.orderCode = orderCode; + } + + public String getOrderTime() { + return orderTime; + } + + public void setOrderTime(String orderTime) { + this.orderTime = orderTime; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + public String getRequireOverTime() { + return requireOverTime; + } + + public void setRequireOverTime(String requireOverTime) { + this.requireOverTime = requireOverTime; + } + + public String getSampleCount() { + return sampleCount; + } + + public void setSampleCount(String sampleCount) { + this.sampleCount = sampleCount; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getStatusName() { + return statusName; + } + + public void setStatusName(String statusName) { + this.statusName = statusName; + } + } + } +} diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt index 76d184c..c80f6e6 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt @@ -162,4 +162,15 @@ @Header("token") token: String, @Body requestBody: RequestBody ): String + + /** + * 获取委托书列表 + */ + @POST("/business/order/listPage") + suspend fun getEntrustList( + @Header("token") token: String, + @Body requestBody: RequestBody, + @QueryMap limit: Map, + @QueryMap offset: Map + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/adapter/EntrustAdapter.kt b/app/src/main/java/com/casic/xz/meterage/adapter/EntrustAdapter.kt new file mode 100644 index 0000000..de09aa5 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/adapter/EntrustAdapter.kt @@ -0,0 +1,79 @@ +package com.casic.xz.meterage.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.xz.meterage.R +import com.casic.xz.meterage.model.EntrustListModel + +class EntrustAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun getItemCount(): Int = dataRows.size + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_entrust_rv_l, parent, false) + ) + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.customerNameView.text = rowsBean.customerName + holder.entrustStateView.text = rowsBean.statusName + + //未接收:0;已接收:1;已取消:2;检测完成:3 + val textColor = when (rowsBean.status) { + "0" -> R.color.red + "1" -> R.color.blue + "2" -> R.color.gray + else -> R.color.green + } + holder.entrustStateView.setTextColor(textColor) + holder.delivererView.text = rowsBean.deliverer + holder.customerPhoneView.text = rowsBean.customerPhone + holder.sampleCountView.text = rowsBean.sampleCount + holder.urgentView.text = rowsBean.isUrgent + holder.remarkView.text = rowsBean.remark + holder.entrustDateView.text = rowsBean.orderTime + holder.entrustCodeView.text = rowsBean.orderCode + + //绑定事件 + holder.entrustStateView.setOnClickListener { + listener?.onStateViewClicked(position) + } + + holder.customerPhoneView.setOnClickListener { + listener?.onPhoneViewClicked(position) + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var customerNameView: TextView = view.findViewById(R.id.customerNameView) + var entrustStateView: TextView = view.findViewById(R.id.entrustStateView) + var delivererView: TextView = view.findViewById(R.id.delivererView) + var customerPhoneView: TextView = view.findViewById(R.id.customerPhoneView) + var sampleCountView: TextView = view.findViewById(R.id.sampleCountView) + var urgentView: TextView = view.findViewById(R.id.urgentView) + var remarkView: TextView = view.findViewById(R.id.remarkView) + var entrustDateView: TextView = view.findViewById(R.id.entrustDateView) + var entrustCodeView: TextView = view.findViewById(R.id.entrustCodeView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onStateViewClicked(position: Int) + + fun onPhoneViewClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/model/EntrustListModel.java b/app/src/main/java/com/casic/xz/meterage/model/EntrustListModel.java new file mode 100644 index 0000000..1b66d02 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/model/EntrustListModel.java @@ -0,0 +1,184 @@ +package com.casic.xz.meterage.model; + +import java.util.List; + +public class EntrustListModel { + + private int code; + private DataModel data; + private String message; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String createTime; + private String customerName; + private String customerNo; + private String customerPhone; + private String deliverer; + private String id; + private String isUrgent; + private String orderCode; + private String orderTime; + private String remark; + private String requireOverTime; + private String sampleCount; + private String status; + private String statusName; + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getCustomerName() { + return customerName; + } + + public void setCustomerName(String customerName) { + this.customerName = customerName; + } + + public String getCustomerNo() { + return customerNo; + } + + public void setCustomerNo(String customerNo) { + this.customerNo = customerNo; + } + + public String getCustomerPhone() { + return customerPhone; + } + + public void setCustomerPhone(String customerPhone) { + this.customerPhone = customerPhone; + } + + public String getDeliverer() { + return deliverer; + } + + public void setDeliverer(String deliverer) { + this.deliverer = deliverer; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getIsUrgent() { + return isUrgent; + } + + public void setIsUrgent(String isUrgent) { + this.isUrgent = isUrgent; + } + + public String getOrderCode() { + return orderCode; + } + + public void setOrderCode(String orderCode) { + this.orderCode = orderCode; + } + + public String getOrderTime() { + return orderTime; + } + + public void setOrderTime(String orderTime) { + this.orderTime = orderTime; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + public String getRequireOverTime() { + return requireOverTime; + } + + public void setRequireOverTime(String requireOverTime) { + this.requireOverTime = requireOverTime; + } + + public String getSampleCount() { + return sampleCount; + } + + public void setSampleCount(String sampleCount) { + this.sampleCount = sampleCount; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getStatusName() { + return statusName; + } + + public void setStatusName(String statusName) { + this.statusName = statusName; + } + } + } +} diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt index 76d184c..c80f6e6 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt @@ -162,4 +162,15 @@ @Header("token") token: String, @Body requestBody: RequestBody ): String + + /** + * 获取委托书列表 + */ + @POST("/business/order/listPage") + suspend fun getEntrustList( + @Header("token") token: String, + @Body requestBody: RequestBody, + @QueryMap limit: Map, + @QueryMap offset: Map + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt index d01f129..aa61732 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt @@ -365,4 +365,47 @@ ) return api.getVerifyProcedureList(AuthenticationHelper.token!!, requestBody) } + + /** + * 获取委托书列表 + */ + suspend fun getEntrustList( + customerName: String, + customerNo: String, + deliverer: String, + orderCode: String, + startTime: String, + endTime: String, + isUrgent: String, + status: String, + ids: Array, + offset: Int + ): String { + val paramObject = JSONObject() + paramObject.put("customerName", customerName) + paramObject.put("customerNo", customerNo) + paramObject.put("deliverer", deliverer) + paramObject.put("orderCode", orderCode) + paramObject.put("startTime", startTime) + paramObject.put("endTime", endTime) + paramObject.put("isUrgent", isUrgent) + paramObject.put("status", status) + + val jsonArray = JSONArray() + ids.forEach { + jsonArray.put(it) + } + paramObject.put("ids", jsonArray) + + val requestBody = paramObject.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + + val limitMap = HashMap() + limitMap["limit"] = LocaleConstant.PAGE_LIMIT + + val offsetMap = HashMap() + offsetMap["offset"] = offset + return api.getEntrustList(AuthenticationHelper.token!!, requestBody, limitMap, offsetMap) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/adapter/EntrustAdapter.kt b/app/src/main/java/com/casic/xz/meterage/adapter/EntrustAdapter.kt new file mode 100644 index 0000000..de09aa5 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/adapter/EntrustAdapter.kt @@ -0,0 +1,79 @@ +package com.casic.xz.meterage.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.xz.meterage.R +import com.casic.xz.meterage.model.EntrustListModel + +class EntrustAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun getItemCount(): Int = dataRows.size + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_entrust_rv_l, parent, false) + ) + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.customerNameView.text = rowsBean.customerName + holder.entrustStateView.text = rowsBean.statusName + + //未接收:0;已接收:1;已取消:2;检测完成:3 + val textColor = when (rowsBean.status) { + "0" -> R.color.red + "1" -> R.color.blue + "2" -> R.color.gray + else -> R.color.green + } + holder.entrustStateView.setTextColor(textColor) + holder.delivererView.text = rowsBean.deliverer + holder.customerPhoneView.text = rowsBean.customerPhone + holder.sampleCountView.text = rowsBean.sampleCount + holder.urgentView.text = rowsBean.isUrgent + holder.remarkView.text = rowsBean.remark + holder.entrustDateView.text = rowsBean.orderTime + holder.entrustCodeView.text = rowsBean.orderCode + + //绑定事件 + holder.entrustStateView.setOnClickListener { + listener?.onStateViewClicked(position) + } + + holder.customerPhoneView.setOnClickListener { + listener?.onPhoneViewClicked(position) + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var customerNameView: TextView = view.findViewById(R.id.customerNameView) + var entrustStateView: TextView = view.findViewById(R.id.entrustStateView) + var delivererView: TextView = view.findViewById(R.id.delivererView) + var customerPhoneView: TextView = view.findViewById(R.id.customerPhoneView) + var sampleCountView: TextView = view.findViewById(R.id.sampleCountView) + var urgentView: TextView = view.findViewById(R.id.urgentView) + var remarkView: TextView = view.findViewById(R.id.remarkView) + var entrustDateView: TextView = view.findViewById(R.id.entrustDateView) + var entrustCodeView: TextView = view.findViewById(R.id.entrustCodeView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onStateViewClicked(position: Int) + + fun onPhoneViewClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/model/EntrustListModel.java b/app/src/main/java/com/casic/xz/meterage/model/EntrustListModel.java new file mode 100644 index 0000000..1b66d02 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/model/EntrustListModel.java @@ -0,0 +1,184 @@ +package com.casic.xz.meterage.model; + +import java.util.List; + +public class EntrustListModel { + + private int code; + private DataModel data; + private String message; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String createTime; + private String customerName; + private String customerNo; + private String customerPhone; + private String deliverer; + private String id; + private String isUrgent; + private String orderCode; + private String orderTime; + private String remark; + private String requireOverTime; + private String sampleCount; + private String status; + private String statusName; + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getCustomerName() { + return customerName; + } + + public void setCustomerName(String customerName) { + this.customerName = customerName; + } + + public String getCustomerNo() { + return customerNo; + } + + public void setCustomerNo(String customerNo) { + this.customerNo = customerNo; + } + + public String getCustomerPhone() { + return customerPhone; + } + + public void setCustomerPhone(String customerPhone) { + this.customerPhone = customerPhone; + } + + public String getDeliverer() { + return deliverer; + } + + public void setDeliverer(String deliverer) { + this.deliverer = deliverer; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getIsUrgent() { + return isUrgent; + } + + public void setIsUrgent(String isUrgent) { + this.isUrgent = isUrgent; + } + + public String getOrderCode() { + return orderCode; + } + + public void setOrderCode(String orderCode) { + this.orderCode = orderCode; + } + + public String getOrderTime() { + return orderTime; + } + + public void setOrderTime(String orderTime) { + this.orderTime = orderTime; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + public String getRequireOverTime() { + return requireOverTime; + } + + public void setRequireOverTime(String requireOverTime) { + this.requireOverTime = requireOverTime; + } + + public String getSampleCount() { + return sampleCount; + } + + public void setSampleCount(String sampleCount) { + this.sampleCount = sampleCount; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getStatusName() { + return statusName; + } + + public void setStatusName(String statusName) { + this.statusName = statusName; + } + } + } +} diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt index 76d184c..c80f6e6 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt @@ -162,4 +162,15 @@ @Header("token") token: String, @Body requestBody: RequestBody ): String + + /** + * 获取委托书列表 + */ + @POST("/business/order/listPage") + suspend fun getEntrustList( + @Header("token") token: String, + @Body requestBody: RequestBody, + @QueryMap limit: Map, + @QueryMap offset: Map + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt index d01f129..aa61732 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt @@ -365,4 +365,47 @@ ) return api.getVerifyProcedureList(AuthenticationHelper.token!!, requestBody) } + + /** + * 获取委托书列表 + */ + suspend fun getEntrustList( + customerName: String, + customerNo: String, + deliverer: String, + orderCode: String, + startTime: String, + endTime: String, + isUrgent: String, + status: String, + ids: Array, + offset: Int + ): String { + val paramObject = JSONObject() + paramObject.put("customerName", customerName) + paramObject.put("customerNo", customerNo) + paramObject.put("deliverer", deliverer) + paramObject.put("orderCode", orderCode) + paramObject.put("startTime", startTime) + paramObject.put("endTime", endTime) + paramObject.put("isUrgent", isUrgent) + paramObject.put("status", status) + + val jsonArray = JSONArray() + ids.forEach { + jsonArray.put(it) + } + paramObject.put("ids", jsonArray) + + val requestBody = paramObject.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + + val limitMap = HashMap() + limitMap["limit"] = LocaleConstant.PAGE_LIMIT + + val offsetMap = HashMap() + offsetMap["offset"] = offset + return api.getEntrustList(AuthenticationHelper.token!!, requestBody, limitMap, offsetMap) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/EntrustActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/EntrustActivity.kt index 420f833..fcacf35 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/EntrustActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/EntrustActivity.kt @@ -1,25 +1,157 @@ package com.casic.xz.meterage.view.home +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.adapter.EntrustAdapter +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.model.EntrustListModel +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.vm.EntrustViewModel +import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_entrust.* +import kotlinx.android.synthetic.main.include_empty_view.* class EntrustActivity : KotlinBaseActivity() { - override fun initData() { + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var entrustViewModel: EntrustViewModel + private lateinit var entrustAdapter: EntrustAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + entrustViewModel = ViewModelProvider(this)[EntrustViewModel::class.java] + entrustViewModel.entrustList.observe(this) { + if (it.code == 200) { + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + entrustLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows) + entrustLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023022302) + } + } } override fun initEvent() { + leftBackView.setOnClickListener { finish() } + searchImageView.setOnClickListener { +// navigatePageTo() + } + addImageView.setOnClickListener { + } + + entrustLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getEntrustListByPage() + } + + entrustLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getEntrustListByPage() + } } override fun initLayoutView(): Int = R.layout.activity_entrust override fun observeRequestState() { - + entrustViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + } } override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "委托需求" + } + override fun onResume() { + super.onResume() + pageIndex = 1 + getEntrustListByPage() + } + + private fun getEntrustListByPage() { + entrustViewModel.getEntrustList( + "", + "", + "", + "", + "", + "", + "0", + "0", + arrayOf(), + pageIndex + ) + } + + private val callback = Handler.Callback { + when (it.what) { + 2023022302 -> { + if (isRefresh || isLoadMore) { + entrustAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无新的委托需求") { + pageIndex = 1 + getEntrustListByPage() + } + } else { + emptyView!!.hide() + entrustAdapter = EntrustAdapter(this, dataBeans) + entrustRecyclerView.addItemDecoration( + DividerItemDecoration(this, DividerItemDecoration.VERTICAL) + ) + entrustRecyclerView.adapter = entrustAdapter + entrustAdapter.setOnItemClickListener(object : + EntrustAdapter.OnItemClickListener { + override fun onStateViewClicked(position: Int) { + val rowsModel = dataBeans[position] +// navigatePageTo(rowsModel.id) + } + + override fun onPhoneViewClicked(position: Int) { + + } + }) + } + } + } + } + true } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/adapter/EntrustAdapter.kt b/app/src/main/java/com/casic/xz/meterage/adapter/EntrustAdapter.kt new file mode 100644 index 0000000..de09aa5 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/adapter/EntrustAdapter.kt @@ -0,0 +1,79 @@ +package com.casic.xz.meterage.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.xz.meterage.R +import com.casic.xz.meterage.model.EntrustListModel + +class EntrustAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun getItemCount(): Int = dataRows.size + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_entrust_rv_l, parent, false) + ) + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.customerNameView.text = rowsBean.customerName + holder.entrustStateView.text = rowsBean.statusName + + //未接收:0;已接收:1;已取消:2;检测完成:3 + val textColor = when (rowsBean.status) { + "0" -> R.color.red + "1" -> R.color.blue + "2" -> R.color.gray + else -> R.color.green + } + holder.entrustStateView.setTextColor(textColor) + holder.delivererView.text = rowsBean.deliverer + holder.customerPhoneView.text = rowsBean.customerPhone + holder.sampleCountView.text = rowsBean.sampleCount + holder.urgentView.text = rowsBean.isUrgent + holder.remarkView.text = rowsBean.remark + holder.entrustDateView.text = rowsBean.orderTime + holder.entrustCodeView.text = rowsBean.orderCode + + //绑定事件 + holder.entrustStateView.setOnClickListener { + listener?.onStateViewClicked(position) + } + + holder.customerPhoneView.setOnClickListener { + listener?.onPhoneViewClicked(position) + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var customerNameView: TextView = view.findViewById(R.id.customerNameView) + var entrustStateView: TextView = view.findViewById(R.id.entrustStateView) + var delivererView: TextView = view.findViewById(R.id.delivererView) + var customerPhoneView: TextView = view.findViewById(R.id.customerPhoneView) + var sampleCountView: TextView = view.findViewById(R.id.sampleCountView) + var urgentView: TextView = view.findViewById(R.id.urgentView) + var remarkView: TextView = view.findViewById(R.id.remarkView) + var entrustDateView: TextView = view.findViewById(R.id.entrustDateView) + var entrustCodeView: TextView = view.findViewById(R.id.entrustCodeView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onStateViewClicked(position: Int) + + fun onPhoneViewClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/model/EntrustListModel.java b/app/src/main/java/com/casic/xz/meterage/model/EntrustListModel.java new file mode 100644 index 0000000..1b66d02 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/model/EntrustListModel.java @@ -0,0 +1,184 @@ +package com.casic.xz.meterage.model; + +import java.util.List; + +public class EntrustListModel { + + private int code; + private DataModel data; + private String message; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String createTime; + private String customerName; + private String customerNo; + private String customerPhone; + private String deliverer; + private String id; + private String isUrgent; + private String orderCode; + private String orderTime; + private String remark; + private String requireOverTime; + private String sampleCount; + private String status; + private String statusName; + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getCustomerName() { + return customerName; + } + + public void setCustomerName(String customerName) { + this.customerName = customerName; + } + + public String getCustomerNo() { + return customerNo; + } + + public void setCustomerNo(String customerNo) { + this.customerNo = customerNo; + } + + public String getCustomerPhone() { + return customerPhone; + } + + public void setCustomerPhone(String customerPhone) { + this.customerPhone = customerPhone; + } + + public String getDeliverer() { + return deliverer; + } + + public void setDeliverer(String deliverer) { + this.deliverer = deliverer; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getIsUrgent() { + return isUrgent; + } + + public void setIsUrgent(String isUrgent) { + this.isUrgent = isUrgent; + } + + public String getOrderCode() { + return orderCode; + } + + public void setOrderCode(String orderCode) { + this.orderCode = orderCode; + } + + public String getOrderTime() { + return orderTime; + } + + public void setOrderTime(String orderTime) { + this.orderTime = orderTime; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + public String getRequireOverTime() { + return requireOverTime; + } + + public void setRequireOverTime(String requireOverTime) { + this.requireOverTime = requireOverTime; + } + + public String getSampleCount() { + return sampleCount; + } + + public void setSampleCount(String sampleCount) { + this.sampleCount = sampleCount; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getStatusName() { + return statusName; + } + + public void setStatusName(String statusName) { + this.statusName = statusName; + } + } + } +} diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt index 76d184c..c80f6e6 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt @@ -162,4 +162,15 @@ @Header("token") token: String, @Body requestBody: RequestBody ): String + + /** + * 获取委托书列表 + */ + @POST("/business/order/listPage") + suspend fun getEntrustList( + @Header("token") token: String, + @Body requestBody: RequestBody, + @QueryMap limit: Map, + @QueryMap offset: Map + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt index d01f129..aa61732 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt @@ -365,4 +365,47 @@ ) return api.getVerifyProcedureList(AuthenticationHelper.token!!, requestBody) } + + /** + * 获取委托书列表 + */ + suspend fun getEntrustList( + customerName: String, + customerNo: String, + deliverer: String, + orderCode: String, + startTime: String, + endTime: String, + isUrgent: String, + status: String, + ids: Array, + offset: Int + ): String { + val paramObject = JSONObject() + paramObject.put("customerName", customerName) + paramObject.put("customerNo", customerNo) + paramObject.put("deliverer", deliverer) + paramObject.put("orderCode", orderCode) + paramObject.put("startTime", startTime) + paramObject.put("endTime", endTime) + paramObject.put("isUrgent", isUrgent) + paramObject.put("status", status) + + val jsonArray = JSONArray() + ids.forEach { + jsonArray.put(it) + } + paramObject.put("ids", jsonArray) + + val requestBody = paramObject.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + + val limitMap = HashMap() + limitMap["limit"] = LocaleConstant.PAGE_LIMIT + + val offsetMap = HashMap() + offsetMap["offset"] = offset + return api.getEntrustList(AuthenticationHelper.token!!, requestBody, limitMap, offsetMap) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/EntrustActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/EntrustActivity.kt index 420f833..fcacf35 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/EntrustActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/EntrustActivity.kt @@ -1,25 +1,157 @@ package com.casic.xz.meterage.view.home +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.adapter.EntrustAdapter +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.model.EntrustListModel +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.vm.EntrustViewModel +import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_entrust.* +import kotlinx.android.synthetic.main.include_empty_view.* class EntrustActivity : KotlinBaseActivity() { - override fun initData() { + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var entrustViewModel: EntrustViewModel + private lateinit var entrustAdapter: EntrustAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + entrustViewModel = ViewModelProvider(this)[EntrustViewModel::class.java] + entrustViewModel.entrustList.observe(this) { + if (it.code == 200) { + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + entrustLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows) + entrustLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023022302) + } + } } override fun initEvent() { + leftBackView.setOnClickListener { finish() } + searchImageView.setOnClickListener { +// navigatePageTo() + } + addImageView.setOnClickListener { + } + + entrustLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getEntrustListByPage() + } + + entrustLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getEntrustListByPage() + } } override fun initLayoutView(): Int = R.layout.activity_entrust override fun observeRequestState() { - + entrustViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + } } override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "委托需求" + } + override fun onResume() { + super.onResume() + pageIndex = 1 + getEntrustListByPage() + } + + private fun getEntrustListByPage() { + entrustViewModel.getEntrustList( + "", + "", + "", + "", + "", + "", + "0", + "0", + arrayOf(), + pageIndex + ) + } + + private val callback = Handler.Callback { + when (it.what) { + 2023022302 -> { + if (isRefresh || isLoadMore) { + entrustAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无新的委托需求") { + pageIndex = 1 + getEntrustListByPage() + } + } else { + emptyView!!.hide() + entrustAdapter = EntrustAdapter(this, dataBeans) + entrustRecyclerView.addItemDecoration( + DividerItemDecoration(this, DividerItemDecoration.VERTICAL) + ) + entrustRecyclerView.adapter = entrustAdapter + entrustAdapter.setOnItemClickListener(object : + EntrustAdapter.OnItemClickListener { + override fun onStateViewClicked(position: Int) { + val rowsModel = dataBeans[position] +// navigatePageTo(rowsModel.id) + } + + override fun onPhoneViewClicked(position: Int) { + + } + }) + } + } + } + } + true } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/vm/EntrustViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/EntrustViewModel.kt new file mode 100644 index 0000000..561623f --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/vm/EntrustViewModel.kt @@ -0,0 +1,63 @@ +package com.casic.xz.meterage.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.xz.meterage.base.BaseApplication +import com.casic.xz.meterage.extensions.separateResponseCode +import com.casic.xz.meterage.extensions.toErrorMessage +import com.casic.xz.meterage.model.EntrustListModel +import com.casic.xz.meterage.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel +import com.pengxh.kt.lite.vm.LoadState + +/** + * 委托书相关 VM + * */ +class EntrustViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } + val entrustList = MutableLiveData() + + fun getEntrustList( + customerName: String, + customerNo: String, + deliverer: String, + orderCode: String, + startTime: String, + endTime: String, + isUrgent: String, + status: String, + ids: Array, + offset: Int + ) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.getEntrustList( + customerName, + customerNo, + deliverer, + orderCode, + startTime, + endTime, + isUrgent, + status, + ids, + offset + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + entrustList.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.get()) + } + }, { + loadState.value = LoadState.Fail + it.cause.toString().show(BaseApplication.get()) + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/adapter/EntrustAdapter.kt b/app/src/main/java/com/casic/xz/meterage/adapter/EntrustAdapter.kt new file mode 100644 index 0000000..de09aa5 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/adapter/EntrustAdapter.kt @@ -0,0 +1,79 @@ +package com.casic.xz.meterage.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.xz.meterage.R +import com.casic.xz.meterage.model.EntrustListModel + +class EntrustAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun getItemCount(): Int = dataRows.size + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_entrust_rv_l, parent, false) + ) + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.customerNameView.text = rowsBean.customerName + holder.entrustStateView.text = rowsBean.statusName + + //未接收:0;已接收:1;已取消:2;检测完成:3 + val textColor = when (rowsBean.status) { + "0" -> R.color.red + "1" -> R.color.blue + "2" -> R.color.gray + else -> R.color.green + } + holder.entrustStateView.setTextColor(textColor) + holder.delivererView.text = rowsBean.deliverer + holder.customerPhoneView.text = rowsBean.customerPhone + holder.sampleCountView.text = rowsBean.sampleCount + holder.urgentView.text = rowsBean.isUrgent + holder.remarkView.text = rowsBean.remark + holder.entrustDateView.text = rowsBean.orderTime + holder.entrustCodeView.text = rowsBean.orderCode + + //绑定事件 + holder.entrustStateView.setOnClickListener { + listener?.onStateViewClicked(position) + } + + holder.customerPhoneView.setOnClickListener { + listener?.onPhoneViewClicked(position) + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var customerNameView: TextView = view.findViewById(R.id.customerNameView) + var entrustStateView: TextView = view.findViewById(R.id.entrustStateView) + var delivererView: TextView = view.findViewById(R.id.delivererView) + var customerPhoneView: TextView = view.findViewById(R.id.customerPhoneView) + var sampleCountView: TextView = view.findViewById(R.id.sampleCountView) + var urgentView: TextView = view.findViewById(R.id.urgentView) + var remarkView: TextView = view.findViewById(R.id.remarkView) + var entrustDateView: TextView = view.findViewById(R.id.entrustDateView) + var entrustCodeView: TextView = view.findViewById(R.id.entrustCodeView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onStateViewClicked(position: Int) + + fun onPhoneViewClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/model/EntrustListModel.java b/app/src/main/java/com/casic/xz/meterage/model/EntrustListModel.java new file mode 100644 index 0000000..1b66d02 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/model/EntrustListModel.java @@ -0,0 +1,184 @@ +package com.casic.xz.meterage.model; + +import java.util.List; + +public class EntrustListModel { + + private int code; + private DataModel data; + private String message; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String createTime; + private String customerName; + private String customerNo; + private String customerPhone; + private String deliverer; + private String id; + private String isUrgent; + private String orderCode; + private String orderTime; + private String remark; + private String requireOverTime; + private String sampleCount; + private String status; + private String statusName; + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getCustomerName() { + return customerName; + } + + public void setCustomerName(String customerName) { + this.customerName = customerName; + } + + public String getCustomerNo() { + return customerNo; + } + + public void setCustomerNo(String customerNo) { + this.customerNo = customerNo; + } + + public String getCustomerPhone() { + return customerPhone; + } + + public void setCustomerPhone(String customerPhone) { + this.customerPhone = customerPhone; + } + + public String getDeliverer() { + return deliverer; + } + + public void setDeliverer(String deliverer) { + this.deliverer = deliverer; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getIsUrgent() { + return isUrgent; + } + + public void setIsUrgent(String isUrgent) { + this.isUrgent = isUrgent; + } + + public String getOrderCode() { + return orderCode; + } + + public void setOrderCode(String orderCode) { + this.orderCode = orderCode; + } + + public String getOrderTime() { + return orderTime; + } + + public void setOrderTime(String orderTime) { + this.orderTime = orderTime; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + public String getRequireOverTime() { + return requireOverTime; + } + + public void setRequireOverTime(String requireOverTime) { + this.requireOverTime = requireOverTime; + } + + public String getSampleCount() { + return sampleCount; + } + + public void setSampleCount(String sampleCount) { + this.sampleCount = sampleCount; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getStatusName() { + return statusName; + } + + public void setStatusName(String statusName) { + this.statusName = statusName; + } + } + } +} diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt index 76d184c..c80f6e6 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt @@ -162,4 +162,15 @@ @Header("token") token: String, @Body requestBody: RequestBody ): String + + /** + * 获取委托书列表 + */ + @POST("/business/order/listPage") + suspend fun getEntrustList( + @Header("token") token: String, + @Body requestBody: RequestBody, + @QueryMap limit: Map, + @QueryMap offset: Map + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt index d01f129..aa61732 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt @@ -365,4 +365,47 @@ ) return api.getVerifyProcedureList(AuthenticationHelper.token!!, requestBody) } + + /** + * 获取委托书列表 + */ + suspend fun getEntrustList( + customerName: String, + customerNo: String, + deliverer: String, + orderCode: String, + startTime: String, + endTime: String, + isUrgent: String, + status: String, + ids: Array, + offset: Int + ): String { + val paramObject = JSONObject() + paramObject.put("customerName", customerName) + paramObject.put("customerNo", customerNo) + paramObject.put("deliverer", deliverer) + paramObject.put("orderCode", orderCode) + paramObject.put("startTime", startTime) + paramObject.put("endTime", endTime) + paramObject.put("isUrgent", isUrgent) + paramObject.put("status", status) + + val jsonArray = JSONArray() + ids.forEach { + jsonArray.put(it) + } + paramObject.put("ids", jsonArray) + + val requestBody = paramObject.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + + val limitMap = HashMap() + limitMap["limit"] = LocaleConstant.PAGE_LIMIT + + val offsetMap = HashMap() + offsetMap["offset"] = offset + return api.getEntrustList(AuthenticationHelper.token!!, requestBody, limitMap, offsetMap) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/EntrustActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/EntrustActivity.kt index 420f833..fcacf35 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/EntrustActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/EntrustActivity.kt @@ -1,25 +1,157 @@ package com.casic.xz.meterage.view.home +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.adapter.EntrustAdapter +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.model.EntrustListModel +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.vm.EntrustViewModel +import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_entrust.* +import kotlinx.android.synthetic.main.include_empty_view.* class EntrustActivity : KotlinBaseActivity() { - override fun initData() { + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var entrustViewModel: EntrustViewModel + private lateinit var entrustAdapter: EntrustAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + entrustViewModel = ViewModelProvider(this)[EntrustViewModel::class.java] + entrustViewModel.entrustList.observe(this) { + if (it.code == 200) { + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + entrustLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows) + entrustLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023022302) + } + } } override fun initEvent() { + leftBackView.setOnClickListener { finish() } + searchImageView.setOnClickListener { +// navigatePageTo() + } + addImageView.setOnClickListener { + } + + entrustLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getEntrustListByPage() + } + + entrustLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getEntrustListByPage() + } } override fun initLayoutView(): Int = R.layout.activity_entrust override fun observeRequestState() { - + entrustViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + } } override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "委托需求" + } + override fun onResume() { + super.onResume() + pageIndex = 1 + getEntrustListByPage() + } + + private fun getEntrustListByPage() { + entrustViewModel.getEntrustList( + "", + "", + "", + "", + "", + "", + "0", + "0", + arrayOf(), + pageIndex + ) + } + + private val callback = Handler.Callback { + when (it.what) { + 2023022302 -> { + if (isRefresh || isLoadMore) { + entrustAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无新的委托需求") { + pageIndex = 1 + getEntrustListByPage() + } + } else { + emptyView!!.hide() + entrustAdapter = EntrustAdapter(this, dataBeans) + entrustRecyclerView.addItemDecoration( + DividerItemDecoration(this, DividerItemDecoration.VERTICAL) + ) + entrustRecyclerView.adapter = entrustAdapter + entrustAdapter.setOnItemClickListener(object : + EntrustAdapter.OnItemClickListener { + override fun onStateViewClicked(position: Int) { + val rowsModel = dataBeans[position] +// navigatePageTo(rowsModel.id) + } + + override fun onPhoneViewClicked(position: Int) { + + } + }) + } + } + } + } + true } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/vm/EntrustViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/EntrustViewModel.kt new file mode 100644 index 0000000..561623f --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/vm/EntrustViewModel.kt @@ -0,0 +1,63 @@ +package com.casic.xz.meterage.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.xz.meterage.base.BaseApplication +import com.casic.xz.meterage.extensions.separateResponseCode +import com.casic.xz.meterage.extensions.toErrorMessage +import com.casic.xz.meterage.model.EntrustListModel +import com.casic.xz.meterage.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel +import com.pengxh.kt.lite.vm.LoadState + +/** + * 委托书相关 VM + * */ +class EntrustViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } + val entrustList = MutableLiveData() + + fun getEntrustList( + customerName: String, + customerNo: String, + deliverer: String, + orderCode: String, + startTime: String, + endTime: String, + isUrgent: String, + status: String, + ids: Array, + offset: Int + ) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.getEntrustList( + customerName, + customerNo, + deliverer, + orderCode, + startTime, + endTime, + isUrgent, + status, + ids, + offset + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + entrustList.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.get()) + } + }, { + loadState.value = LoadState.Fail + it.cause.toString().show(BaseApplication.get()) + }) +} \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_plus.xml b/app/src/main/res/drawable/ic_plus.xml new file mode 100644 index 0000000..72e249a --- /dev/null +++ b/app/src/main/res/drawable/ic_plus.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/java/com/casic/xz/meterage/adapter/EntrustAdapter.kt b/app/src/main/java/com/casic/xz/meterage/adapter/EntrustAdapter.kt new file mode 100644 index 0000000..de09aa5 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/adapter/EntrustAdapter.kt @@ -0,0 +1,79 @@ +package com.casic.xz.meterage.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.xz.meterage.R +import com.casic.xz.meterage.model.EntrustListModel + +class EntrustAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun getItemCount(): Int = dataRows.size + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_entrust_rv_l, parent, false) + ) + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.customerNameView.text = rowsBean.customerName + holder.entrustStateView.text = rowsBean.statusName + + //未接收:0;已接收:1;已取消:2;检测完成:3 + val textColor = when (rowsBean.status) { + "0" -> R.color.red + "1" -> R.color.blue + "2" -> R.color.gray + else -> R.color.green + } + holder.entrustStateView.setTextColor(textColor) + holder.delivererView.text = rowsBean.deliverer + holder.customerPhoneView.text = rowsBean.customerPhone + holder.sampleCountView.text = rowsBean.sampleCount + holder.urgentView.text = rowsBean.isUrgent + holder.remarkView.text = rowsBean.remark + holder.entrustDateView.text = rowsBean.orderTime + holder.entrustCodeView.text = rowsBean.orderCode + + //绑定事件 + holder.entrustStateView.setOnClickListener { + listener?.onStateViewClicked(position) + } + + holder.customerPhoneView.setOnClickListener { + listener?.onPhoneViewClicked(position) + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var customerNameView: TextView = view.findViewById(R.id.customerNameView) + var entrustStateView: TextView = view.findViewById(R.id.entrustStateView) + var delivererView: TextView = view.findViewById(R.id.delivererView) + var customerPhoneView: TextView = view.findViewById(R.id.customerPhoneView) + var sampleCountView: TextView = view.findViewById(R.id.sampleCountView) + var urgentView: TextView = view.findViewById(R.id.urgentView) + var remarkView: TextView = view.findViewById(R.id.remarkView) + var entrustDateView: TextView = view.findViewById(R.id.entrustDateView) + var entrustCodeView: TextView = view.findViewById(R.id.entrustCodeView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onStateViewClicked(position: Int) + + fun onPhoneViewClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/model/EntrustListModel.java b/app/src/main/java/com/casic/xz/meterage/model/EntrustListModel.java new file mode 100644 index 0000000..1b66d02 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/model/EntrustListModel.java @@ -0,0 +1,184 @@ +package com.casic.xz.meterage.model; + +import java.util.List; + +public class EntrustListModel { + + private int code; + private DataModel data; + private String message; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String createTime; + private String customerName; + private String customerNo; + private String customerPhone; + private String deliverer; + private String id; + private String isUrgent; + private String orderCode; + private String orderTime; + private String remark; + private String requireOverTime; + private String sampleCount; + private String status; + private String statusName; + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getCustomerName() { + return customerName; + } + + public void setCustomerName(String customerName) { + this.customerName = customerName; + } + + public String getCustomerNo() { + return customerNo; + } + + public void setCustomerNo(String customerNo) { + this.customerNo = customerNo; + } + + public String getCustomerPhone() { + return customerPhone; + } + + public void setCustomerPhone(String customerPhone) { + this.customerPhone = customerPhone; + } + + public String getDeliverer() { + return deliverer; + } + + public void setDeliverer(String deliverer) { + this.deliverer = deliverer; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getIsUrgent() { + return isUrgent; + } + + public void setIsUrgent(String isUrgent) { + this.isUrgent = isUrgent; + } + + public String getOrderCode() { + return orderCode; + } + + public void setOrderCode(String orderCode) { + this.orderCode = orderCode; + } + + public String getOrderTime() { + return orderTime; + } + + public void setOrderTime(String orderTime) { + this.orderTime = orderTime; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + public String getRequireOverTime() { + return requireOverTime; + } + + public void setRequireOverTime(String requireOverTime) { + this.requireOverTime = requireOverTime; + } + + public String getSampleCount() { + return sampleCount; + } + + public void setSampleCount(String sampleCount) { + this.sampleCount = sampleCount; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getStatusName() { + return statusName; + } + + public void setStatusName(String statusName) { + this.statusName = statusName; + } + } + } +} diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt index 76d184c..c80f6e6 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt @@ -162,4 +162,15 @@ @Header("token") token: String, @Body requestBody: RequestBody ): String + + /** + * 获取委托书列表 + */ + @POST("/business/order/listPage") + suspend fun getEntrustList( + @Header("token") token: String, + @Body requestBody: RequestBody, + @QueryMap limit: Map, + @QueryMap offset: Map + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt index d01f129..aa61732 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt @@ -365,4 +365,47 @@ ) return api.getVerifyProcedureList(AuthenticationHelper.token!!, requestBody) } + + /** + * 获取委托书列表 + */ + suspend fun getEntrustList( + customerName: String, + customerNo: String, + deliverer: String, + orderCode: String, + startTime: String, + endTime: String, + isUrgent: String, + status: String, + ids: Array, + offset: Int + ): String { + val paramObject = JSONObject() + paramObject.put("customerName", customerName) + paramObject.put("customerNo", customerNo) + paramObject.put("deliverer", deliverer) + paramObject.put("orderCode", orderCode) + paramObject.put("startTime", startTime) + paramObject.put("endTime", endTime) + paramObject.put("isUrgent", isUrgent) + paramObject.put("status", status) + + val jsonArray = JSONArray() + ids.forEach { + jsonArray.put(it) + } + paramObject.put("ids", jsonArray) + + val requestBody = paramObject.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + + val limitMap = HashMap() + limitMap["limit"] = LocaleConstant.PAGE_LIMIT + + val offsetMap = HashMap() + offsetMap["offset"] = offset + return api.getEntrustList(AuthenticationHelper.token!!, requestBody, limitMap, offsetMap) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/EntrustActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/EntrustActivity.kt index 420f833..fcacf35 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/EntrustActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/EntrustActivity.kt @@ -1,25 +1,157 @@ package com.casic.xz.meterage.view.home +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.adapter.EntrustAdapter +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.model.EntrustListModel +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.vm.EntrustViewModel +import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_entrust.* +import kotlinx.android.synthetic.main.include_empty_view.* class EntrustActivity : KotlinBaseActivity() { - override fun initData() { + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var entrustViewModel: EntrustViewModel + private lateinit var entrustAdapter: EntrustAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + entrustViewModel = ViewModelProvider(this)[EntrustViewModel::class.java] + entrustViewModel.entrustList.observe(this) { + if (it.code == 200) { + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + entrustLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows) + entrustLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023022302) + } + } } override fun initEvent() { + leftBackView.setOnClickListener { finish() } + searchImageView.setOnClickListener { +// navigatePageTo() + } + addImageView.setOnClickListener { + } + + entrustLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getEntrustListByPage() + } + + entrustLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getEntrustListByPage() + } } override fun initLayoutView(): Int = R.layout.activity_entrust override fun observeRequestState() { - + entrustViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + } } override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "委托需求" + } + override fun onResume() { + super.onResume() + pageIndex = 1 + getEntrustListByPage() + } + + private fun getEntrustListByPage() { + entrustViewModel.getEntrustList( + "", + "", + "", + "", + "", + "", + "0", + "0", + arrayOf(), + pageIndex + ) + } + + private val callback = Handler.Callback { + when (it.what) { + 2023022302 -> { + if (isRefresh || isLoadMore) { + entrustAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无新的委托需求") { + pageIndex = 1 + getEntrustListByPage() + } + } else { + emptyView!!.hide() + entrustAdapter = EntrustAdapter(this, dataBeans) + entrustRecyclerView.addItemDecoration( + DividerItemDecoration(this, DividerItemDecoration.VERTICAL) + ) + entrustRecyclerView.adapter = entrustAdapter + entrustAdapter.setOnItemClickListener(object : + EntrustAdapter.OnItemClickListener { + override fun onStateViewClicked(position: Int) { + val rowsModel = dataBeans[position] +// navigatePageTo(rowsModel.id) + } + + override fun onPhoneViewClicked(position: Int) { + + } + }) + } + } + } + } + true } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/vm/EntrustViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/EntrustViewModel.kt new file mode 100644 index 0000000..561623f --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/vm/EntrustViewModel.kt @@ -0,0 +1,63 @@ +package com.casic.xz.meterage.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.xz.meterage.base.BaseApplication +import com.casic.xz.meterage.extensions.separateResponseCode +import com.casic.xz.meterage.extensions.toErrorMessage +import com.casic.xz.meterage.model.EntrustListModel +import com.casic.xz.meterage.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel +import com.pengxh.kt.lite.vm.LoadState + +/** + * 委托书相关 VM + * */ +class EntrustViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } + val entrustList = MutableLiveData() + + fun getEntrustList( + customerName: String, + customerNo: String, + deliverer: String, + orderCode: String, + startTime: String, + endTime: String, + isUrgent: String, + status: String, + ids: Array, + offset: Int + ) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.getEntrustList( + customerName, + customerNo, + deliverer, + orderCode, + startTime, + endTime, + isUrgent, + status, + ids, + offset + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + entrustList.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.get()) + } + }, { + loadState.value = LoadState.Fail + it.cause.toString().show(BaseApplication.get()) + }) +} \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_plus.xml b/app/src/main/res/drawable/ic_plus.xml new file mode 100644 index 0000000..72e249a --- /dev/null +++ b/app/src/main/res/drawable/ic_plus.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_search.xml b/app/src/main/res/drawable/ic_search.xml index 9c4e982..615e6ab 100644 --- a/app/src/main/res/drawable/ic_search.xml +++ b/app/src/main/res/drawable/ic_search.xml @@ -1,12 +1,9 @@ - + android:fillColor="@color/black" + android:pathData="M743.2,210.8c144.9,144.9 149.8,376.8 14.7,527.6l160.3,160.3a8.5,8.5 0,0 1,0 12.1l-33.2,33.2a8.5,8.5 0,0 1,-12.1 0L711.4,782.4C560.6,903.1 339.9,893.7 200.2,753.9c-150,-150 -150,-393.1 0,-543.1 150,-150 393.1,-150 543.1,0zM245.4,256.1c-125,125 -125,327.6 0,452.6 125,124.9 327.6,124.9 452.6,0 124.9,-125 124.9,-327.6 0,-452.6 -125,-125 -327.6,-125 -452.6,0z" /> diff --git a/app/src/main/java/com/casic/xz/meterage/adapter/EntrustAdapter.kt b/app/src/main/java/com/casic/xz/meterage/adapter/EntrustAdapter.kt new file mode 100644 index 0000000..de09aa5 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/adapter/EntrustAdapter.kt @@ -0,0 +1,79 @@ +package com.casic.xz.meterage.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.xz.meterage.R +import com.casic.xz.meterage.model.EntrustListModel + +class EntrustAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun getItemCount(): Int = dataRows.size + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_entrust_rv_l, parent, false) + ) + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.customerNameView.text = rowsBean.customerName + holder.entrustStateView.text = rowsBean.statusName + + //未接收:0;已接收:1;已取消:2;检测完成:3 + val textColor = when (rowsBean.status) { + "0" -> R.color.red + "1" -> R.color.blue + "2" -> R.color.gray + else -> R.color.green + } + holder.entrustStateView.setTextColor(textColor) + holder.delivererView.text = rowsBean.deliverer + holder.customerPhoneView.text = rowsBean.customerPhone + holder.sampleCountView.text = rowsBean.sampleCount + holder.urgentView.text = rowsBean.isUrgent + holder.remarkView.text = rowsBean.remark + holder.entrustDateView.text = rowsBean.orderTime + holder.entrustCodeView.text = rowsBean.orderCode + + //绑定事件 + holder.entrustStateView.setOnClickListener { + listener?.onStateViewClicked(position) + } + + holder.customerPhoneView.setOnClickListener { + listener?.onPhoneViewClicked(position) + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var customerNameView: TextView = view.findViewById(R.id.customerNameView) + var entrustStateView: TextView = view.findViewById(R.id.entrustStateView) + var delivererView: TextView = view.findViewById(R.id.delivererView) + var customerPhoneView: TextView = view.findViewById(R.id.customerPhoneView) + var sampleCountView: TextView = view.findViewById(R.id.sampleCountView) + var urgentView: TextView = view.findViewById(R.id.urgentView) + var remarkView: TextView = view.findViewById(R.id.remarkView) + var entrustDateView: TextView = view.findViewById(R.id.entrustDateView) + var entrustCodeView: TextView = view.findViewById(R.id.entrustCodeView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onStateViewClicked(position: Int) + + fun onPhoneViewClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/model/EntrustListModel.java b/app/src/main/java/com/casic/xz/meterage/model/EntrustListModel.java new file mode 100644 index 0000000..1b66d02 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/model/EntrustListModel.java @@ -0,0 +1,184 @@ +package com.casic.xz.meterage.model; + +import java.util.List; + +public class EntrustListModel { + + private int code; + private DataModel data; + private String message; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String createTime; + private String customerName; + private String customerNo; + private String customerPhone; + private String deliverer; + private String id; + private String isUrgent; + private String orderCode; + private String orderTime; + private String remark; + private String requireOverTime; + private String sampleCount; + private String status; + private String statusName; + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getCustomerName() { + return customerName; + } + + public void setCustomerName(String customerName) { + this.customerName = customerName; + } + + public String getCustomerNo() { + return customerNo; + } + + public void setCustomerNo(String customerNo) { + this.customerNo = customerNo; + } + + public String getCustomerPhone() { + return customerPhone; + } + + public void setCustomerPhone(String customerPhone) { + this.customerPhone = customerPhone; + } + + public String getDeliverer() { + return deliverer; + } + + public void setDeliverer(String deliverer) { + this.deliverer = deliverer; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getIsUrgent() { + return isUrgent; + } + + public void setIsUrgent(String isUrgent) { + this.isUrgent = isUrgent; + } + + public String getOrderCode() { + return orderCode; + } + + public void setOrderCode(String orderCode) { + this.orderCode = orderCode; + } + + public String getOrderTime() { + return orderTime; + } + + public void setOrderTime(String orderTime) { + this.orderTime = orderTime; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + public String getRequireOverTime() { + return requireOverTime; + } + + public void setRequireOverTime(String requireOverTime) { + this.requireOverTime = requireOverTime; + } + + public String getSampleCount() { + return sampleCount; + } + + public void setSampleCount(String sampleCount) { + this.sampleCount = sampleCount; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getStatusName() { + return statusName; + } + + public void setStatusName(String statusName) { + this.statusName = statusName; + } + } + } +} diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt index 76d184c..c80f6e6 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt @@ -162,4 +162,15 @@ @Header("token") token: String, @Body requestBody: RequestBody ): String + + /** + * 获取委托书列表 + */ + @POST("/business/order/listPage") + suspend fun getEntrustList( + @Header("token") token: String, + @Body requestBody: RequestBody, + @QueryMap limit: Map, + @QueryMap offset: Map + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt index d01f129..aa61732 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt @@ -365,4 +365,47 @@ ) return api.getVerifyProcedureList(AuthenticationHelper.token!!, requestBody) } + + /** + * 获取委托书列表 + */ + suspend fun getEntrustList( + customerName: String, + customerNo: String, + deliverer: String, + orderCode: String, + startTime: String, + endTime: String, + isUrgent: String, + status: String, + ids: Array, + offset: Int + ): String { + val paramObject = JSONObject() + paramObject.put("customerName", customerName) + paramObject.put("customerNo", customerNo) + paramObject.put("deliverer", deliverer) + paramObject.put("orderCode", orderCode) + paramObject.put("startTime", startTime) + paramObject.put("endTime", endTime) + paramObject.put("isUrgent", isUrgent) + paramObject.put("status", status) + + val jsonArray = JSONArray() + ids.forEach { + jsonArray.put(it) + } + paramObject.put("ids", jsonArray) + + val requestBody = paramObject.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + + val limitMap = HashMap() + limitMap["limit"] = LocaleConstant.PAGE_LIMIT + + val offsetMap = HashMap() + offsetMap["offset"] = offset + return api.getEntrustList(AuthenticationHelper.token!!, requestBody, limitMap, offsetMap) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/EntrustActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/EntrustActivity.kt index 420f833..fcacf35 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/EntrustActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/EntrustActivity.kt @@ -1,25 +1,157 @@ package com.casic.xz.meterage.view.home +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.adapter.EntrustAdapter +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.model.EntrustListModel +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.vm.EntrustViewModel +import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_entrust.* +import kotlinx.android.synthetic.main.include_empty_view.* class EntrustActivity : KotlinBaseActivity() { - override fun initData() { + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var entrustViewModel: EntrustViewModel + private lateinit var entrustAdapter: EntrustAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + entrustViewModel = ViewModelProvider(this)[EntrustViewModel::class.java] + entrustViewModel.entrustList.observe(this) { + if (it.code == 200) { + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + entrustLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows) + entrustLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023022302) + } + } } override fun initEvent() { + leftBackView.setOnClickListener { finish() } + searchImageView.setOnClickListener { +// navigatePageTo() + } + addImageView.setOnClickListener { + } + + entrustLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getEntrustListByPage() + } + + entrustLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getEntrustListByPage() + } } override fun initLayoutView(): Int = R.layout.activity_entrust override fun observeRequestState() { - + entrustViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + } } override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "委托需求" + } + override fun onResume() { + super.onResume() + pageIndex = 1 + getEntrustListByPage() + } + + private fun getEntrustListByPage() { + entrustViewModel.getEntrustList( + "", + "", + "", + "", + "", + "", + "0", + "0", + arrayOf(), + pageIndex + ) + } + + private val callback = Handler.Callback { + when (it.what) { + 2023022302 -> { + if (isRefresh || isLoadMore) { + entrustAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无新的委托需求") { + pageIndex = 1 + getEntrustListByPage() + } + } else { + emptyView!!.hide() + entrustAdapter = EntrustAdapter(this, dataBeans) + entrustRecyclerView.addItemDecoration( + DividerItemDecoration(this, DividerItemDecoration.VERTICAL) + ) + entrustRecyclerView.adapter = entrustAdapter + entrustAdapter.setOnItemClickListener(object : + EntrustAdapter.OnItemClickListener { + override fun onStateViewClicked(position: Int) { + val rowsModel = dataBeans[position] +// navigatePageTo(rowsModel.id) + } + + override fun onPhoneViewClicked(position: Int) { + + } + }) + } + } + } + } + true } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/vm/EntrustViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/EntrustViewModel.kt new file mode 100644 index 0000000..561623f --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/vm/EntrustViewModel.kt @@ -0,0 +1,63 @@ +package com.casic.xz.meterage.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.xz.meterage.base.BaseApplication +import com.casic.xz.meterage.extensions.separateResponseCode +import com.casic.xz.meterage.extensions.toErrorMessage +import com.casic.xz.meterage.model.EntrustListModel +import com.casic.xz.meterage.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel +import com.pengxh.kt.lite.vm.LoadState + +/** + * 委托书相关 VM + * */ +class EntrustViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } + val entrustList = MutableLiveData() + + fun getEntrustList( + customerName: String, + customerNo: String, + deliverer: String, + orderCode: String, + startTime: String, + endTime: String, + isUrgent: String, + status: String, + ids: Array, + offset: Int + ) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.getEntrustList( + customerName, + customerNo, + deliverer, + orderCode, + startTime, + endTime, + isUrgent, + status, + ids, + offset + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + entrustList.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.get()) + } + }, { + loadState.value = LoadState.Fail + it.cause.toString().show(BaseApplication.get()) + }) +} \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_plus.xml b/app/src/main/res/drawable/ic_plus.xml new file mode 100644 index 0000000..72e249a --- /dev/null +++ b/app/src/main/res/drawable/ic_plus.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_search.xml b/app/src/main/res/drawable/ic_search.xml index 9c4e982..615e6ab 100644 --- a/app/src/main/res/drawable/ic_search.xml +++ b/app/src/main/res/drawable/ic_search.xml @@ -1,12 +1,9 @@ - + android:fillColor="@color/black" + android:pathData="M743.2,210.8c144.9,144.9 149.8,376.8 14.7,527.6l160.3,160.3a8.5,8.5 0,0 1,0 12.1l-33.2,33.2a8.5,8.5 0,0 1,-12.1 0L711.4,782.4C560.6,903.1 339.9,893.7 200.2,753.9c-150,-150 -150,-393.1 0,-543.1 150,-150 393.1,-150 543.1,0zM245.4,256.1c-125,125 -125,327.6 0,452.6 125,124.9 327.6,124.9 452.6,0 124.9,-125 124.9,-327.6 0,-452.6 -125,-125 -327.6,-125 -452.6,0z" /> diff --git a/app/src/main/res/layout/activity_entrust.xml b/app/src/main/res/layout/activity_entrust.xml index 77d9ef6..52cdec6 100644 --- a/app/src/main/res/layout/activity_entrust.xml +++ b/app/src/main/res/layout/activity_entrust.xml @@ -1,6 +1,92 @@ - + android:layout_height="match_parent" + android:background="@color/white" + android:orientation="vertical"> - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/adapter/EntrustAdapter.kt b/app/src/main/java/com/casic/xz/meterage/adapter/EntrustAdapter.kt new file mode 100644 index 0000000..de09aa5 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/adapter/EntrustAdapter.kt @@ -0,0 +1,79 @@ +package com.casic.xz.meterage.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.xz.meterage.R +import com.casic.xz.meterage.model.EntrustListModel + +class EntrustAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun getItemCount(): Int = dataRows.size + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_entrust_rv_l, parent, false) + ) + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.customerNameView.text = rowsBean.customerName + holder.entrustStateView.text = rowsBean.statusName + + //未接收:0;已接收:1;已取消:2;检测完成:3 + val textColor = when (rowsBean.status) { + "0" -> R.color.red + "1" -> R.color.blue + "2" -> R.color.gray + else -> R.color.green + } + holder.entrustStateView.setTextColor(textColor) + holder.delivererView.text = rowsBean.deliverer + holder.customerPhoneView.text = rowsBean.customerPhone + holder.sampleCountView.text = rowsBean.sampleCount + holder.urgentView.text = rowsBean.isUrgent + holder.remarkView.text = rowsBean.remark + holder.entrustDateView.text = rowsBean.orderTime + holder.entrustCodeView.text = rowsBean.orderCode + + //绑定事件 + holder.entrustStateView.setOnClickListener { + listener?.onStateViewClicked(position) + } + + holder.customerPhoneView.setOnClickListener { + listener?.onPhoneViewClicked(position) + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var customerNameView: TextView = view.findViewById(R.id.customerNameView) + var entrustStateView: TextView = view.findViewById(R.id.entrustStateView) + var delivererView: TextView = view.findViewById(R.id.delivererView) + var customerPhoneView: TextView = view.findViewById(R.id.customerPhoneView) + var sampleCountView: TextView = view.findViewById(R.id.sampleCountView) + var urgentView: TextView = view.findViewById(R.id.urgentView) + var remarkView: TextView = view.findViewById(R.id.remarkView) + var entrustDateView: TextView = view.findViewById(R.id.entrustDateView) + var entrustCodeView: TextView = view.findViewById(R.id.entrustCodeView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onStateViewClicked(position: Int) + + fun onPhoneViewClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/model/EntrustListModel.java b/app/src/main/java/com/casic/xz/meterage/model/EntrustListModel.java new file mode 100644 index 0000000..1b66d02 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/model/EntrustListModel.java @@ -0,0 +1,184 @@ +package com.casic.xz.meterage.model; + +import java.util.List; + +public class EntrustListModel { + + private int code; + private DataModel data; + private String message; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String createTime; + private String customerName; + private String customerNo; + private String customerPhone; + private String deliverer; + private String id; + private String isUrgent; + private String orderCode; + private String orderTime; + private String remark; + private String requireOverTime; + private String sampleCount; + private String status; + private String statusName; + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getCustomerName() { + return customerName; + } + + public void setCustomerName(String customerName) { + this.customerName = customerName; + } + + public String getCustomerNo() { + return customerNo; + } + + public void setCustomerNo(String customerNo) { + this.customerNo = customerNo; + } + + public String getCustomerPhone() { + return customerPhone; + } + + public void setCustomerPhone(String customerPhone) { + this.customerPhone = customerPhone; + } + + public String getDeliverer() { + return deliverer; + } + + public void setDeliverer(String deliverer) { + this.deliverer = deliverer; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getIsUrgent() { + return isUrgent; + } + + public void setIsUrgent(String isUrgent) { + this.isUrgent = isUrgent; + } + + public String getOrderCode() { + return orderCode; + } + + public void setOrderCode(String orderCode) { + this.orderCode = orderCode; + } + + public String getOrderTime() { + return orderTime; + } + + public void setOrderTime(String orderTime) { + this.orderTime = orderTime; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + public String getRequireOverTime() { + return requireOverTime; + } + + public void setRequireOverTime(String requireOverTime) { + this.requireOverTime = requireOverTime; + } + + public String getSampleCount() { + return sampleCount; + } + + public void setSampleCount(String sampleCount) { + this.sampleCount = sampleCount; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getStatusName() { + return statusName; + } + + public void setStatusName(String statusName) { + this.statusName = statusName; + } + } + } +} diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt index 76d184c..c80f6e6 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt @@ -162,4 +162,15 @@ @Header("token") token: String, @Body requestBody: RequestBody ): String + + /** + * 获取委托书列表 + */ + @POST("/business/order/listPage") + suspend fun getEntrustList( + @Header("token") token: String, + @Body requestBody: RequestBody, + @QueryMap limit: Map, + @QueryMap offset: Map + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt index d01f129..aa61732 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt @@ -365,4 +365,47 @@ ) return api.getVerifyProcedureList(AuthenticationHelper.token!!, requestBody) } + + /** + * 获取委托书列表 + */ + suspend fun getEntrustList( + customerName: String, + customerNo: String, + deliverer: String, + orderCode: String, + startTime: String, + endTime: String, + isUrgent: String, + status: String, + ids: Array, + offset: Int + ): String { + val paramObject = JSONObject() + paramObject.put("customerName", customerName) + paramObject.put("customerNo", customerNo) + paramObject.put("deliverer", deliverer) + paramObject.put("orderCode", orderCode) + paramObject.put("startTime", startTime) + paramObject.put("endTime", endTime) + paramObject.put("isUrgent", isUrgent) + paramObject.put("status", status) + + val jsonArray = JSONArray() + ids.forEach { + jsonArray.put(it) + } + paramObject.put("ids", jsonArray) + + val requestBody = paramObject.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + + val limitMap = HashMap() + limitMap["limit"] = LocaleConstant.PAGE_LIMIT + + val offsetMap = HashMap() + offsetMap["offset"] = offset + return api.getEntrustList(AuthenticationHelper.token!!, requestBody, limitMap, offsetMap) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/EntrustActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/EntrustActivity.kt index 420f833..fcacf35 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/EntrustActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/EntrustActivity.kt @@ -1,25 +1,157 @@ package com.casic.xz.meterage.view.home +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.adapter.EntrustAdapter +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.model.EntrustListModel +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.vm.EntrustViewModel +import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_entrust.* +import kotlinx.android.synthetic.main.include_empty_view.* class EntrustActivity : KotlinBaseActivity() { - override fun initData() { + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var entrustViewModel: EntrustViewModel + private lateinit var entrustAdapter: EntrustAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + entrustViewModel = ViewModelProvider(this)[EntrustViewModel::class.java] + entrustViewModel.entrustList.observe(this) { + if (it.code == 200) { + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + entrustLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows) + entrustLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023022302) + } + } } override fun initEvent() { + leftBackView.setOnClickListener { finish() } + searchImageView.setOnClickListener { +// navigatePageTo() + } + addImageView.setOnClickListener { + } + + entrustLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getEntrustListByPage() + } + + entrustLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getEntrustListByPage() + } } override fun initLayoutView(): Int = R.layout.activity_entrust override fun observeRequestState() { - + entrustViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + } } override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "委托需求" + } + override fun onResume() { + super.onResume() + pageIndex = 1 + getEntrustListByPage() + } + + private fun getEntrustListByPage() { + entrustViewModel.getEntrustList( + "", + "", + "", + "", + "", + "", + "0", + "0", + arrayOf(), + pageIndex + ) + } + + private val callback = Handler.Callback { + when (it.what) { + 2023022302 -> { + if (isRefresh || isLoadMore) { + entrustAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无新的委托需求") { + pageIndex = 1 + getEntrustListByPage() + } + } else { + emptyView!!.hide() + entrustAdapter = EntrustAdapter(this, dataBeans) + entrustRecyclerView.addItemDecoration( + DividerItemDecoration(this, DividerItemDecoration.VERTICAL) + ) + entrustRecyclerView.adapter = entrustAdapter + entrustAdapter.setOnItemClickListener(object : + EntrustAdapter.OnItemClickListener { + override fun onStateViewClicked(position: Int) { + val rowsModel = dataBeans[position] +// navigatePageTo(rowsModel.id) + } + + override fun onPhoneViewClicked(position: Int) { + + } + }) + } + } + } + } + true } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/vm/EntrustViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/EntrustViewModel.kt new file mode 100644 index 0000000..561623f --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/vm/EntrustViewModel.kt @@ -0,0 +1,63 @@ +package com.casic.xz.meterage.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.xz.meterage.base.BaseApplication +import com.casic.xz.meterage.extensions.separateResponseCode +import com.casic.xz.meterage.extensions.toErrorMessage +import com.casic.xz.meterage.model.EntrustListModel +import com.casic.xz.meterage.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel +import com.pengxh.kt.lite.vm.LoadState + +/** + * 委托书相关 VM + * */ +class EntrustViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } + val entrustList = MutableLiveData() + + fun getEntrustList( + customerName: String, + customerNo: String, + deliverer: String, + orderCode: String, + startTime: String, + endTime: String, + isUrgent: String, + status: String, + ids: Array, + offset: Int + ) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.getEntrustList( + customerName, + customerNo, + deliverer, + orderCode, + startTime, + endTime, + isUrgent, + status, + ids, + offset + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + entrustList.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.get()) + } + }, { + loadState.value = LoadState.Fail + it.cause.toString().show(BaseApplication.get()) + }) +} \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_plus.xml b/app/src/main/res/drawable/ic_plus.xml new file mode 100644 index 0000000..72e249a --- /dev/null +++ b/app/src/main/res/drawable/ic_plus.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_search.xml b/app/src/main/res/drawable/ic_search.xml index 9c4e982..615e6ab 100644 --- a/app/src/main/res/drawable/ic_search.xml +++ b/app/src/main/res/drawable/ic_search.xml @@ -1,12 +1,9 @@ - + android:fillColor="@color/black" + android:pathData="M743.2,210.8c144.9,144.9 149.8,376.8 14.7,527.6l160.3,160.3a8.5,8.5 0,0 1,0 12.1l-33.2,33.2a8.5,8.5 0,0 1,-12.1 0L711.4,782.4C560.6,903.1 339.9,893.7 200.2,753.9c-150,-150 -150,-393.1 0,-543.1 150,-150 393.1,-150 543.1,0zM245.4,256.1c-125,125 -125,327.6 0,452.6 125,124.9 327.6,124.9 452.6,0 124.9,-125 124.9,-327.6 0,-452.6 -125,-125 -327.6,-125 -452.6,0z" /> diff --git a/app/src/main/res/layout/activity_entrust.xml b/app/src/main/res/layout/activity_entrust.xml index 77d9ef6..52cdec6 100644 --- a/app/src/main/res/layout/activity_entrust.xml +++ b/app/src/main/res/layout/activity_entrust.xml @@ -1,6 +1,92 @@ - + android:layout_height="match_parent" + android:background="@color/white" + android:orientation="vertical"> - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml index c391ba3..ae68eab 100644 --- a/app/src/main/res/layout/fragment_home.xml +++ b/app/src/main/res/layout/fragment_home.xml @@ -90,7 +90,8 @@ android:layout_margin="@dimen/dp_10" android:background="@drawable/bg_solid_layout_white_radius_5" android:gravity="center_vertical" - android:padding="@dimen/dp_7"> + android:paddingHorizontal="@dimen/dp_7" + android:paddingVertical="@dimen/dp_10"> +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun getItemCount(): Int = dataRows.size + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_entrust_rv_l, parent, false) + ) + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.customerNameView.text = rowsBean.customerName + holder.entrustStateView.text = rowsBean.statusName + + //未接收:0;已接收:1;已取消:2;检测完成:3 + val textColor = when (rowsBean.status) { + "0" -> R.color.red + "1" -> R.color.blue + "2" -> R.color.gray + else -> R.color.green + } + holder.entrustStateView.setTextColor(textColor) + holder.delivererView.text = rowsBean.deliverer + holder.customerPhoneView.text = rowsBean.customerPhone + holder.sampleCountView.text = rowsBean.sampleCount + holder.urgentView.text = rowsBean.isUrgent + holder.remarkView.text = rowsBean.remark + holder.entrustDateView.text = rowsBean.orderTime + holder.entrustCodeView.text = rowsBean.orderCode + + //绑定事件 + holder.entrustStateView.setOnClickListener { + listener?.onStateViewClicked(position) + } + + holder.customerPhoneView.setOnClickListener { + listener?.onPhoneViewClicked(position) + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var customerNameView: TextView = view.findViewById(R.id.customerNameView) + var entrustStateView: TextView = view.findViewById(R.id.entrustStateView) + var delivererView: TextView = view.findViewById(R.id.delivererView) + var customerPhoneView: TextView = view.findViewById(R.id.customerPhoneView) + var sampleCountView: TextView = view.findViewById(R.id.sampleCountView) + var urgentView: TextView = view.findViewById(R.id.urgentView) + var remarkView: TextView = view.findViewById(R.id.remarkView) + var entrustDateView: TextView = view.findViewById(R.id.entrustDateView) + var entrustCodeView: TextView = view.findViewById(R.id.entrustCodeView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onStateViewClicked(position: Int) + + fun onPhoneViewClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/model/EntrustListModel.java b/app/src/main/java/com/casic/xz/meterage/model/EntrustListModel.java new file mode 100644 index 0000000..1b66d02 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/model/EntrustListModel.java @@ -0,0 +1,184 @@ +package com.casic.xz.meterage.model; + +import java.util.List; + +public class EntrustListModel { + + private int code; + private DataModel data; + private String message; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String createTime; + private String customerName; + private String customerNo; + private String customerPhone; + private String deliverer; + private String id; + private String isUrgent; + private String orderCode; + private String orderTime; + private String remark; + private String requireOverTime; + private String sampleCount; + private String status; + private String statusName; + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getCustomerName() { + return customerName; + } + + public void setCustomerName(String customerName) { + this.customerName = customerName; + } + + public String getCustomerNo() { + return customerNo; + } + + public void setCustomerNo(String customerNo) { + this.customerNo = customerNo; + } + + public String getCustomerPhone() { + return customerPhone; + } + + public void setCustomerPhone(String customerPhone) { + this.customerPhone = customerPhone; + } + + public String getDeliverer() { + return deliverer; + } + + public void setDeliverer(String deliverer) { + this.deliverer = deliverer; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getIsUrgent() { + return isUrgent; + } + + public void setIsUrgent(String isUrgent) { + this.isUrgent = isUrgent; + } + + public String getOrderCode() { + return orderCode; + } + + public void setOrderCode(String orderCode) { + this.orderCode = orderCode; + } + + public String getOrderTime() { + return orderTime; + } + + public void setOrderTime(String orderTime) { + this.orderTime = orderTime; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + public String getRequireOverTime() { + return requireOverTime; + } + + public void setRequireOverTime(String requireOverTime) { + this.requireOverTime = requireOverTime; + } + + public String getSampleCount() { + return sampleCount; + } + + public void setSampleCount(String sampleCount) { + this.sampleCount = sampleCount; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getStatusName() { + return statusName; + } + + public void setStatusName(String statusName) { + this.statusName = statusName; + } + } + } +} diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt index 76d184c..c80f6e6 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt @@ -162,4 +162,15 @@ @Header("token") token: String, @Body requestBody: RequestBody ): String + + /** + * 获取委托书列表 + */ + @POST("/business/order/listPage") + suspend fun getEntrustList( + @Header("token") token: String, + @Body requestBody: RequestBody, + @QueryMap limit: Map, + @QueryMap offset: Map + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt index d01f129..aa61732 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt @@ -365,4 +365,47 @@ ) return api.getVerifyProcedureList(AuthenticationHelper.token!!, requestBody) } + + /** + * 获取委托书列表 + */ + suspend fun getEntrustList( + customerName: String, + customerNo: String, + deliverer: String, + orderCode: String, + startTime: String, + endTime: String, + isUrgent: String, + status: String, + ids: Array, + offset: Int + ): String { + val paramObject = JSONObject() + paramObject.put("customerName", customerName) + paramObject.put("customerNo", customerNo) + paramObject.put("deliverer", deliverer) + paramObject.put("orderCode", orderCode) + paramObject.put("startTime", startTime) + paramObject.put("endTime", endTime) + paramObject.put("isUrgent", isUrgent) + paramObject.put("status", status) + + val jsonArray = JSONArray() + ids.forEach { + jsonArray.put(it) + } + paramObject.put("ids", jsonArray) + + val requestBody = paramObject.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + + val limitMap = HashMap() + limitMap["limit"] = LocaleConstant.PAGE_LIMIT + + val offsetMap = HashMap() + offsetMap["offset"] = offset + return api.getEntrustList(AuthenticationHelper.token!!, requestBody, limitMap, offsetMap) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/EntrustActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/EntrustActivity.kt index 420f833..fcacf35 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/EntrustActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/EntrustActivity.kt @@ -1,25 +1,157 @@ package com.casic.xz.meterage.view.home +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.adapter.EntrustAdapter +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.model.EntrustListModel +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.vm.EntrustViewModel +import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_entrust.* +import kotlinx.android.synthetic.main.include_empty_view.* class EntrustActivity : KotlinBaseActivity() { - override fun initData() { + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var entrustViewModel: EntrustViewModel + private lateinit var entrustAdapter: EntrustAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + entrustViewModel = ViewModelProvider(this)[EntrustViewModel::class.java] + entrustViewModel.entrustList.observe(this) { + if (it.code == 200) { + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + entrustLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows) + entrustLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023022302) + } + } } override fun initEvent() { + leftBackView.setOnClickListener { finish() } + searchImageView.setOnClickListener { +// navigatePageTo() + } + addImageView.setOnClickListener { + } + + entrustLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getEntrustListByPage() + } + + entrustLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getEntrustListByPage() + } } override fun initLayoutView(): Int = R.layout.activity_entrust override fun observeRequestState() { - + entrustViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + } } override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "委托需求" + } + override fun onResume() { + super.onResume() + pageIndex = 1 + getEntrustListByPage() + } + + private fun getEntrustListByPage() { + entrustViewModel.getEntrustList( + "", + "", + "", + "", + "", + "", + "0", + "0", + arrayOf(), + pageIndex + ) + } + + private val callback = Handler.Callback { + when (it.what) { + 2023022302 -> { + if (isRefresh || isLoadMore) { + entrustAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无新的委托需求") { + pageIndex = 1 + getEntrustListByPage() + } + } else { + emptyView!!.hide() + entrustAdapter = EntrustAdapter(this, dataBeans) + entrustRecyclerView.addItemDecoration( + DividerItemDecoration(this, DividerItemDecoration.VERTICAL) + ) + entrustRecyclerView.adapter = entrustAdapter + entrustAdapter.setOnItemClickListener(object : + EntrustAdapter.OnItemClickListener { + override fun onStateViewClicked(position: Int) { + val rowsModel = dataBeans[position] +// navigatePageTo(rowsModel.id) + } + + override fun onPhoneViewClicked(position: Int) { + + } + }) + } + } + } + } + true } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/vm/EntrustViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/EntrustViewModel.kt new file mode 100644 index 0000000..561623f --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/vm/EntrustViewModel.kt @@ -0,0 +1,63 @@ +package com.casic.xz.meterage.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.xz.meterage.base.BaseApplication +import com.casic.xz.meterage.extensions.separateResponseCode +import com.casic.xz.meterage.extensions.toErrorMessage +import com.casic.xz.meterage.model.EntrustListModel +import com.casic.xz.meterage.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel +import com.pengxh.kt.lite.vm.LoadState + +/** + * 委托书相关 VM + * */ +class EntrustViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } + val entrustList = MutableLiveData() + + fun getEntrustList( + customerName: String, + customerNo: String, + deliverer: String, + orderCode: String, + startTime: String, + endTime: String, + isUrgent: String, + status: String, + ids: Array, + offset: Int + ) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.getEntrustList( + customerName, + customerNo, + deliverer, + orderCode, + startTime, + endTime, + isUrgent, + status, + ids, + offset + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + entrustList.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.get()) + } + }, { + loadState.value = LoadState.Fail + it.cause.toString().show(BaseApplication.get()) + }) +} \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_plus.xml b/app/src/main/res/drawable/ic_plus.xml new file mode 100644 index 0000000..72e249a --- /dev/null +++ b/app/src/main/res/drawable/ic_plus.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_search.xml b/app/src/main/res/drawable/ic_search.xml index 9c4e982..615e6ab 100644 --- a/app/src/main/res/drawable/ic_search.xml +++ b/app/src/main/res/drawable/ic_search.xml @@ -1,12 +1,9 @@ - + android:fillColor="@color/black" + android:pathData="M743.2,210.8c144.9,144.9 149.8,376.8 14.7,527.6l160.3,160.3a8.5,8.5 0,0 1,0 12.1l-33.2,33.2a8.5,8.5 0,0 1,-12.1 0L711.4,782.4C560.6,903.1 339.9,893.7 200.2,753.9c-150,-150 -150,-393.1 0,-543.1 150,-150 393.1,-150 543.1,0zM245.4,256.1c-125,125 -125,327.6 0,452.6 125,124.9 327.6,124.9 452.6,0 124.9,-125 124.9,-327.6 0,-452.6 -125,-125 -327.6,-125 -452.6,0z" /> diff --git a/app/src/main/res/layout/activity_entrust.xml b/app/src/main/res/layout/activity_entrust.xml index 77d9ef6..52cdec6 100644 --- a/app/src/main/res/layout/activity_entrust.xml +++ b/app/src/main/res/layout/activity_entrust.xml @@ -1,6 +1,92 @@ - + android:layout_height="match_parent" + android:background="@color/white" + android:orientation="vertical"> - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml index c391ba3..ae68eab 100644 --- a/app/src/main/res/layout/fragment_home.xml +++ b/app/src/main/res/layout/fragment_home.xml @@ -90,7 +90,8 @@ android:layout_margin="@dimen/dp_10" android:background="@drawable/bg_solid_layout_white_radius_5" android:gravity="center_vertical" - android:padding="@dimen/dp_7"> + android:paddingHorizontal="@dimen/dp_7" + android:paddingVertical="@dimen/dp_10"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file