添加测量计划、工程计量相关接口及页面调整;项目列表接口修改;

main
chenglifeng 7 months ago
parent 521b4f63f3
commit 1b81c61871
  1. 8
      app/src/main/java/com/project/survey/logic/viewmodel/ControlNetViewModel.kt
  2. 109
      app/src/main/java/com/project/survey/logic/viewmodel/ProjectViewModel.kt
  3. 2
      app/src/main/java/com/project/survey/model/LoginBean.kt
  4. 24
      app/src/main/java/com/project/survey/model/MeasureBean.kt
  5. 20
      app/src/main/java/com/project/survey/model/PointEntry.kt
  6. 80
      app/src/main/java/com/project/survey/model/ProjectBean.kt
  7. 46
      app/src/main/java/com/project/survey/network/Api.kt
  8. 2
      app/src/main/java/com/project/survey/network/RetrofitClient.kt
  9. 2
      app/src/main/java/com/project/survey/ui/SplashActivity.kt
  10. 2
      app/src/main/java/com/project/survey/ui/approval/ApprovalActivity.kt
  11. 14
      app/src/main/java/com/project/survey/ui/home/HomeFragment.kt
  12. 2
      app/src/main/java/com/project/survey/ui/instrument/coordinatesystem/fragment/CoordinateSystemContainerFragment.java
  13. 2
      app/src/main/java/com/project/survey/ui/lofting/pointlofting/record/RecordsActivity.java
  14. 119
      app/src/main/java/com/project/survey/ui/pointmeasure/PointMeasureListActivity.kt
  15. 38
      app/src/main/java/com/project/survey/ui/pointmeasure/PointMeasureListFragment.kt
  16. 23
      app/src/main/java/com/project/survey/ui/pointmeasure/adapter/PointMeasureListAdapter.kt
  17. 17
      app/src/main/java/com/project/survey/ui/project/ProjectListActivity.kt
  18. 65
      app/src/main/java/com/project/survey/ui/project/ProjectListFragment.kt
  19. 8
      app/src/main/java/com/project/survey/util/SPUtils.kt
  20. 61
      app/src/main/res/layout/activity_point_measure_list.xml
  21. 31
      app/src/main/res/layout/fragment_home.xml
  22. 2
      app/src/main/res/values/strings.xml
  23. 3
      app/src/main/res/values/styles.xml

@ -27,7 +27,7 @@ class ControlNetViewModel : BaseViewModel() {
launch {
val currentProject =
SPUtils.getParcelable(SPConstants.CURRENT_PROJECT, ProjectBean::class.java)
val res = api.fetchSpecialControlNetworkList(currentProject?.BD_XMXX_ID ?: "", pageNum)
val res = api.fetchSpecialControlNetworkList(currentProject?.XMXX_ID ?: "", pageNum)
if (res.success) {
_controlNetworkListResponse.postValue(res.data)
}
@ -51,7 +51,7 @@ class ControlNetViewModel : BaseViewModel() {
val currentProject =
SPUtils.getParcelable(SPConstants.CURRENT_PROJECT, ProjectBean::class.java)
val res = api.fetchSpecialControlNetworkInfo(
currentProject?.BD_XMXX_ID ?: "",
currentProject?.XMXX_ID ?: "",
controlNetworkName,
pointName,
pageNum
@ -74,7 +74,7 @@ class ControlNetViewModel : BaseViewModel() {
val currentProject =
SPUtils.getParcelable(SPConstants.CURRENT_PROJECT, ProjectBean::class.java)
val res = api.fetchSpecialControlNetCGList(
currentProject?.BD_XMXX_ID ?: "",
currentProject?.XMXX_ID ?: "",
"BD_KZWZBCG",
"BD_KZWZBCG_ZY",
j_query,
@ -95,7 +95,7 @@ class ControlNetViewModel : BaseViewModel() {
val currentProject =
SPUtils.getParcelable(SPConstants.CURRENT_PROJECT, ProjectBean::class.java)
val res = api.fetchSpecialControlNetCGList(
currentProject?.BD_XMXX_ID ?: "",
currentProject?.XMXX_ID ?: "",
"BD_KZWZBCG",
"BD_KZWZBCG",
j_query,

@ -3,7 +3,10 @@ package com.project.survey.logic.viewmodel
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import com.project.survey.constants.SPConstants
import com.project.survey.logic.bean.ListResult
import com.project.survey.model.ApprovalBean
import com.project.survey.model.MeasureBean
import com.project.survey.model.PointEntry
import com.project.survey.model.ProjectBean
import com.project.survey.network.RetrofitClient
import com.project.survey.util.SPUtils
@ -12,7 +15,6 @@ class ProjectViewModel : BaseViewModel() {
val api = RetrofitClient.createApiService()
val projectResponse: LiveData<List<ProjectBean>>
get() = _projectResponse
private val _projectResponse = MutableLiveData<List<ProjectBean>>()
@ -22,9 +24,11 @@ class ProjectViewModel : BaseViewModel() {
*/
fun fetchProjectList() {
launch {
val res = api.fetchProjectList(SPUtils.getString(SPConstants.PERSON_ID) ?: "")
val res = api.fetchProjectList(SPUtils.getString(SPConstants.PERSON_ID))
if (res.success) {
_projectResponse.postValue(res.data)
_projectResponse.postValue(res.data.map { it.values })
} else {
errorResponse.postValue(res.message)
}
}
}
@ -40,10 +44,107 @@ class ProjectViewModel : BaseViewModel() {
launch {
val currentProject =
SPUtils.getParcelable(SPConstants.CURRENT_PROJECT, ProjectBean::class.java)
val res = api.fetchWorkTask(currentProject?.BD_XMXX_ID ?: "", type, page)
val res = api.fetchWorkTask(currentProject?.XMXX_ID ?: "", type, page)
if (res.success) {
_workTaskListResponse.postValue(res.data.data.rows)
}
}
}
val measureBeanListResponse: LiveData<ListResult<MeasureBean>>
get() = _measureBeanListResponse
private val _measureBeanListResponse = MutableLiveData<ListResult<MeasureBean>>()
/**
* 获取测量工作测量计划与工程计量
*/
private fun fetchMeasureDataList(
tableCode: String,
funcCode: String,
j_query: String,
page: Int = 1,
start: Int
) {
launch {
val res = api.fetchMeasureDataList(
SPUtils.getString(SPConstants.PROJECT_ID),
tableCode,
funcCode,
j_query,
page,
start = start
)
if (res.success) {
_measureBeanListResponse.postValue(res.data)
} else {
errorResponse.postValue(res.message)
}
}
}
/**
* 获取 测量计划 列表
*/
fun fetchCLJH(page: Int = 1, start: Int = 0) {
fetchMeasureDataList("BD_CLJH", "BD_CLJH", "", page, start)
}
/**
* 获取 工程计量 列表
*/
fun fetchGCJL(page: Int = 1, start: Int = 0) {
fetchMeasureDataList("BD_CLGZ_GCJL", "BD_CLGZ_GCJL", "", page, start)
}
val updateMeasureWorkStatusResponse: LiveData<String>
get() = _updateMeasureWorkStatusResponse
private val _updateMeasureWorkStatusResponse = MutableLiveData<String>()
/**
* 修改测量工作状态
*/
fun updateMeasureWorkStatus(workId: String, workType: String, status: String) {
launch {
val res = api.updateMeasureWorkStatus(
SPUtils.getString(SPConstants.PROJECT_ID),
workId,
workType,
status
)
if (res.success) {
_updateMeasureWorkStatusResponse.postValue(res.data)
} else {
errorResponse.postValue(res.message)
}
}
}
/**
* 修改 测量计划 工作状态
*/
fun updateCLJHStatus(workId: String, status: String) {
updateMeasureWorkStatus(workId, "BD_CLJH", status)
}
/**
* 修改 工程计量 工作状态
*/
fun updateGCJLStatus(workId: String, status: String) {
updateMeasureWorkStatus(workId, "BD_CLGZ_GCJL", status)
}
/**
* 测点记录录入
*/
fun uploadPointEntry(pointEntryList: List<PointEntry>) {
launch {
val res =
api.uploadPointEntry(SPUtils.getString(SPConstants.PROJECT_ID), pointEntryList)
if (res.success) {
} else {
errorResponse.postValue(res.message)
}
}
}
}

@ -12,5 +12,5 @@ import kotlinx.android.parcel.Parcelize
data class LoginBean(
val token: String,
val mobilePhone: String,
val personId: String
val personId: String?
) : Parcelable

@ -0,0 +1,24 @@
package com.project.survey.model
/**
*
*/
data class MeasureBean(
val BD_CONTRACT_ID: String,
val BD_FBFXPZ_DWGCMC: String, //单位工程名称
val SY_COMPANY_ID: String,
val CLJH_ENDTIME: String,
val BD_FBFXPZ_FXGCMC: String, //分项工程名称
val SY_CREATEUSERNAME: String,
val CLJH_SBDW_ID: String,
val SY_PREAPPROVUSERNAMES: String,
val SY_CURRENTTASK: String,
val BD_CLJH_ID: String, //测量计划ID,即测量工作ID
val CLJH_STARTTIME: String,
val CLJH_CONTENT: String, //测量内容
val CLJH_LCMC: String, //流程名称
val BD_FBFXPZ_FBGCMC: String, //分部工程名称
val BD_FBFXPZ_DYGCMC: String, //单元工程名称
val CLJH_BDLSH: String, //流程编号
val CLJH_CLLX_NAME: String, //测量类型
)

@ -0,0 +1,20 @@
package com.project.survey.model
data class PointEntry(
val name: String, //点名称 "点1"
val workId: String, //测量工作id "80ffa3b7701a46f9b320297e332d5678"
val workType: String, //测量计划传BD_CLJH,工程计量传:BD_CLGZ_GCJL
val antennaHight: String, //天线高 "11"
val remark: String, //备注 "点1"
val x: String, //"111"
val y: String, //"11"
val z: String, //"11"
val longitude: String, //经度
val latitude: String, //纬度
val hrms: String,
val vrms: String,
val pdop: String,
val delay: String, //延迟 "xx"
val jzt: String, //解状态 "xx"
val satellite: String, //结算卫星 "xx"
)

@ -4,33 +4,42 @@ import android.os.Parcelable
import androidx.annotation.Keep
import kotlinx.android.parcel.Parcelize
//{
// "XMXX_PILENO": "20221111",
// "XMXX_INDUSTRYTYPE": "水电工程",
// "SY_COMPANY_ID": null,
// "$TABLE_CODE$": null,
// "SY_CREATEUSERNAME": null,
// "XMXX_STATUS": "完工",
// "XMXX_LEVEL": "A类",
// "SY_ORDERINDEX": null,
// "SY_GROUP_COMPANY_NAME": null,
// "SY_COMPANY_NAME": null,
// "XMXX_CODE": "202109[101]",
// "BD_XMXX_ID": "f5b09f04f26d4d0e99591c01a5dedeeb",
// "SY_CREATEORGID": null,
// "SY_STATUS": "1",
// "SY_CREATEUSERID": null,
// "SY_GROUP_COMPANY_ID": null,
// "XMXX_CONTACTNAME": "何嘉能",
// "XMXX_LOCATIONXY": "122;39",
// "XMXX_FILE": null,
// "XMXX_CONTACTNAMEID": "",
// "XMXX_DESCRIPTION": "测试项目",
// "SY_CREATEORGNAME": null,
// "SY_CREATETIME": null,
// "SY_ORG_ID": null,
// "XMXX_NAME": "测试项目"
//}
/**
* {
* "values": {
* "XMXX_PILENO": "K1+000~K1+022",
* "XMXX_INDUSTRYTYPE": "水电工程",
* "SY_COMPANY_ID": null,
* "SY_CREATEUSERNAME": null,
* "XMXX_STATUS": "完工",
* "XMXX_LEVEL": "B类",
* "SY_ORDERINDEX": null,
* "SY_GROUP_COMPANY_NAME": null,
* "SY_COMPANY_NAME": null,
* "XMXX_CODE": "XMBHTest20241014001",
* "SY_CREATEORGID": null,
* "SY_STATUS": "1",
* "SY_CREATEUSERID": null,
* "SY_GROUP_COMPANY_ID": null,
* "XMXX_CONTACTNAME": "徐齐行",
* "XMXX_LOCATIONXY": "121.1;29.6",
* "XMXX_FILE": "[{\"fileKey\":\"imNMv698gNhK6K4savQ\",\"relName\":\"22ec2661b8cde194bd42900c99e46bef.jpg\",\"suffix\":\"jpg\",\"hasThumbnail\":true,\"fullUrl\":null,\"size\":59,\"createUserName\":\"admin123\",\"createUserDeptName\":\"北斗\",\"createTime\":\"2024-10-14 09:34:49\",\"createTimeStr\":\"2024-10-14 09:34:49\",\"dicId\":null,\"dicCode\":null,\"dicName\":null,\"remarks\":null}]",
* "XMXX_ID": "xYgALS4VOJ0vDrEVUcQ",
* "XMXX_CONTACTNAMEID": "",
* "SY_CREATEORGNAME": null,
* "XMXX_DESCRIPTION": "舟山市,古称海中洲,浙江省辖地级市 [2],位于浙江省东北部舟山群岛 [1],地处中国东南沿海,长江口南侧,杭州湾外缘的东海洋面上。 [95]地势由西南向东北倾斜,南部岛大,海拔高,排列密集,北部岛小,地势低,分布稀疏,四面环海;属亚热带季风气候;总面积2.22万平方千米,其中海域面积2.08万平方千米,4696个岛礁陆地总面积1440.2平方千米 [46]。截至2024年2月,舟山市下辖2个区、2个县。截至2023年末,舟山市常住人口为117.3万人。 [92]\n舟山市是中国第一个以群岛建制的地级市,地处中国东部黄金海岸线与长江黄金水道的交汇处,背靠长三角广阔经济腹地,舟山拥有2085个岛屿和270多公里深水岸线,是中国第一大群岛和重要港口城市。 [96]1953年6月10日,设立舟山专区;1987年1月,撤销舟山地区,建立舟山市。舟山市是长江三角洲中心区城市,上海大都市圈重要城市 [58],也是中国第四个国家级新区舟山群岛新区所在地 [60],是国际性的港口与海岛旅游城市 [62],是海洋经济先导区 [62],境内有由国务院批准设立的大宗商品交易管理与监督中心 [3]、中国(浙江)自由贸易试验区舟山片区 [61]。宁波舟山港年货物吞吐量位居全球第一,集装箱吞吐量位居世界第三。 [59]2024年,宁波舟山国际航运中心全球排名第8。 [106]舟山市拥有普陀山、嵊泗列岛两个国家级风景名胜区,岱山、桃花岛两个省级风景名胜区以及海岛历史文化名城定海。\n2023年,舟山市实现地区生产总值2100.8亿元,同比增长8.2%,高出全省平均2.2个百分点。",
* "SY_CREATETIME": null,
* "SY_ORG_ID": null,
* "XMXX_NAME": "齐恒测试项目(舟山)"
* },
* "tenantIdField": "SY_TENANT_ID",
* "tenantNameField": "SY_TENANT_NAME",
* "tableCode": null,
* "pkCode": null,
* "pkValue": null
* }
*/
@Keep
@Parcelize
data class ProjectBean(
@ -42,8 +51,17 @@ data class ProjectBean(
val XMXX_PILENO: String, //起讫桩号
val XMXX_CONTACTNAME: String, //联系人
val XMXX_CONTACTNAMEID: String, //联系人ID
val XMXX_LOCATIONXY: String, //项目位置(度)
val XMXX_LOCATIONXY: String, //项目位置(度) "121.1;29.6"
val XMXX_FILE: String?, //项目图片
val XMXX_DESCRIPTION: String?, //项目图片
val BD_XMXX_ID: String?,
) : Parcelable
val XMXX_DESCRIPTION: String?,
val XMXX_ID: String, //项目ID
val SY_STATUS: String?,
) : Parcelable
@Keep
@Parcelize
data class ProjectData(
val tenantIdField: String,
val tenantNameField: String,
val values: ProjectBean
): Parcelable

@ -6,7 +6,12 @@ import com.project.survey.model.ControlNetworkBean
import com.project.survey.model.ControlNetCGBean
import com.project.survey.model.ControlNetworkInfoBean
import com.project.survey.model.LoginBean
import com.project.survey.model.MeasureBean
import com.project.survey.model.PointEntry
import com.project.survey.model.ProjectBean
import com.project.survey.model.ProjectData
import okhttp3.RequestBody
import retrofit2.http.Body
import retrofit2.http.Field
import retrofit2.http.FormUrlEncoded
import retrofit2.http.GET
@ -71,7 +76,7 @@ interface Api {
@GET("je/project/getAllProjectIDByPersonId")
suspend fun fetchProjectList(
@Query("personId") personId: String
): HttpResult<List<ProjectBean>>
): HttpResult<List<ProjectData>>
// /**
// * 发送验证码
@ -151,4 +156,43 @@ interface Api {
@Field("limit") limit: Int = 30,
@Field("start") start: Int = 0
): HttpResult<ListResult<ControlNetCGBean>>
/**
* 获取测量工作测量计划与工程计量
* @param tableCode 测量计划传BD_CLJH工程计量传BD_CLGZ_GCJL
* @param funcCode 测量计划传BD_CLJH工程计量传BD_CLGZ_GCJL
* @param j_qurey 固定参数 [{"code":"SY_CURRENTTASK","type":"=","value":"施工单位APP上开展测量工作"}]
*/
@FormUrlEncoded
@POST("je/cloud/beiDou/load")
suspend fun fetchMeasureDataList(
@Header("projectId") projectId: String,
@Field("tableCode") tableCode: String,
@Field("funcCode") funcCode: String,
@Field("j_qurey") j_qurey: String = "",
@Field("page") page: Int,
@Field("limit") limit: Int = 30,
@Field("start") start: Int = 0
): HttpResult<ListResult<MeasureBean>>
/**
* 修改测量工作状态
*/
@GET("je/measureWork/modifyWorkStatus")
suspend fun updateMeasureWorkStatus(
@Header("projectId") projectId: String,
@Query("workId") workId: String, //测量工作ID
@Query("workType") workType: String, //测量计划传BD_CLJH,工程计量传:BD_CLGZ_GCJL
@Query("status") status: String //执行中、已结束(对应按钮:进入测量、结束测量)
) : HttpResult<String>
/**
* 测点记录录入
*/
@POST("je/measureWork/pointsEntry")
suspend fun uploadPointEntry(
@Header("projectId") projectId: String,
@Body requestBody: List<PointEntry>
) : HttpResult<String>
}

@ -52,7 +52,7 @@ object RetrofitClient {
} else {
builder.addHeader("pd", "jecloud-gcclzhglpt")
}
val token = SPUtils.getString(SPConstants.TOKEN) ?: ""
val token = SPUtils.getString(SPConstants.TOKEN)
builder.removeHeader("Authorization")
if (token.isNotBlank()) {
builder.addHeader("Authorization", token)

@ -30,7 +30,7 @@ class SplashActivity : BaseBindingActivity<ActivitySplashBinding>() {
MockUtil.login()
MainActivity.start()
} else {
if (SPUtils.getString(SPConstants.TOKEN).isNullOrBlank()) {
if (SPUtils.getString(SPConstants.TOKEN).isBlank()) {
LoginActivity.start()
} else {
val currentProject =

@ -126,7 +126,7 @@ class ApprovalActivity : BaseBindingActivity<ActivityApprovalBinding>(), OnRefre
adapter.setOnItemClickListener { _, _, position ->
adapter.getItem(position)?.let { bean ->
// http://10.190.183.37/app/micro/func/#/pages/func/form/{功能编码}/{流程ID}?authorization={登录token}&appId=2024-0926-1104-0165
val token = SPUtils.getString(SPConstants.TOKEN) ?: ""
val token = SPUtils.getString(SPConstants.TOKEN)
val url =
BuildConfig.BASE_URL + "app/micro/func/#/pages/func/form/${bean.funcCode}/${bean.pkValue}?authorization=${token}&appId=2024-0926-1104-0165"
AgentWebActivity.navigation2(this, Uri.parse(url))

@ -48,10 +48,18 @@ class HomeFragment : BaseBindingFragment<FragmentHomeBinding>() {
}
override fun initListener() {
//点测量
mBinding.itemPointMeasure.setOnClickNoRepeatListener {
PointMeasureListActivity.start()
// 测量计划
mBinding.itemSurveyPlan.setOnClickNoRepeatListener {
PointMeasureListActivity.start(PointMeasureListActivity.TYPE_SURVEY_PLAN)
}
// 工程计量
mBinding.itemEngineeringMetrology.setOnClickNoRepeatListener {
PointMeasureListActivity.start(PointMeasureListActivity.TYPE_PROJECT_MEASURE)
}
// //点测量
// mBinding.itemPointMeasure.setOnClickNoRepeatListener {
// PointMeasureListActivity.start()
// }
//放样
mBinding.itemLofting.setOnClickNoRepeatListener {
LoftingListActivity.start()

@ -222,7 +222,7 @@ public class CoordinateSystemContainerFragment extends AbstractCoordinateSystemC
return;
}
currentProjectRecord.coordinateSystem = coordinateSystem;
UserConfig userConfig = AppDataBase.getInstance().userConfigDao().findByLeanCloudUserId(SPUtils.INSTANCE.getString(SPConstants.PERSON_ID));
UserConfig userConfig = AppDataBase.getInstance().userConfigDao().findByLeanCloudUserId(SPUtils.INSTANCE.getString(SPConstants.PERSON_ID, ""));
ProjectDb.getInstance().userSafe(userConfig).save(currentProjectRecord);
//切换线路
ThreadPoolUtil.executeInMain(success);

@ -333,7 +333,7 @@ public class RecordsActivity extends ColorfulActivity {
if (recordsUtils != null) {
recordsUtils.update(binding.recyclerviewRecords, isSortByTimeAcs,
null,
SPUtils.INSTANCE.getString(SPConstants.PROJECT_ID), "", "",
SPUtils.INSTANCE.getString(SPConstants.PROJECT_ID, ""), "", "",
filterUtils.filterParameter());
// if (RecordTypeConstants.TYPE_MEASURING_TAPE == currentTypeFromSpinner) {

@ -1,34 +1,59 @@
package com.project.survey.ui.pointmeasure
import android.view.View
import androidx.core.os.bundleOf
import androidx.activity.viewModels
import com.project.survey.R
import com.project.survey.databinding.ActivityPointMeasureListBinding
import com.project.survey.extend.smartDismiss
import com.project.survey.extend.toast
import com.project.survey.logic.viewmodel.ControlNetViewModel
import com.project.survey.logic.viewmodel.ProjectViewModel
import com.project.survey.ui.base.BaseBindingActivity
import com.project.survey.ui.pointmeasure.adapter.PointMeasureListAdapter
import com.project.survey.ui.pointmeasure.measure.PointSurveyNewActivity
import com.project.survey.util.ActivityNavUtil
import com.scwang.smart.refresh.layout.api.RefreshLayout
import com.scwang.smart.refresh.layout.listener.OnRefreshLoadMoreListener
/**
* 点测量列表
*/
class PointMeasureListActivity : BaseBindingActivity<ActivityPointMeasureListBinding>() {
class PointMeasureListActivity : BaseBindingActivity<ActivityPointMeasureListBinding>(),
OnRefreshLoadMoreListener {
companion object {
const val KEY_TYPE = "KEY_TYPE"
const val TYPE_ALL = "TYPE_ALL"//全部
const val TYPE_SURVEY_PLAN = "TYPE_SURVEY_PLAN"//测量计划
const val TYPE_PROJECT_MEASURE = "TYPE_PROJECT_MEASURE"//工程计量
fun start() {
ActivityNavUtil.startActivity<PointMeasureListActivity> { }
fun start(type: String) {
ActivityNavUtil.startActivity<PointMeasureListActivity> {
putString(KEY_TYPE, type)
}
}
}
private val viewModel: ProjectViewModel by viewModels()
private val adapter by lazy { PointMeasureListAdapter(type) }
private var type = ""
private var currentPage = 1
private var start = 0
override fun getBinding(): ActivityPointMeasureListBinding =
ActivityPointMeasureListBinding.inflate(layoutInflater)
override fun initView() {
immersionToolbar(mBinding.toolbar, R.string.point_measure)
type = intent.getStringExtra(KEY_TYPE) ?: ""
immersionToolbar(
mBinding.toolbar, when (type) {
TYPE_SURVEY_PLAN -> getString(R.string.survey_plan)
TYPE_PROJECT_MEASURE -> getString(R.string.engineering_metrology)
else -> ""
}
)
mBinding.smartRefreshLayout.setOnRefreshLoadMoreListener(this)
mBinding.recyclerView.setAdapter(adapter)
adapter.isStateViewEnable = true
}
override fun initListener() {
@ -36,44 +61,68 @@ class PointMeasureListActivity : BaseBindingActivity<ActivityPointMeasureListBin
mBinding.searchWidget.setOnEditorSearchListener {
}
mBinding.tvAll.setOnClickListener {
loadFirstPage()
}
mBinding.tvSurveyPlan.setOnClickListener {
setBtnSelected(mBinding.tvSurveyPlan)
switchFragment(TYPE_SURVEY_PLAN)
// 结束测量
adapter.addOnItemChildClickListener(R.id.tvStopMeasure) { adapter, _, position ->
adapter.getItem(position)?.let { bean ->
// viewModel.updateMeasureWorkStatus(bean.BD_CLJH_ID, if (type == TYPE_SURVEY_PLAN) "BD_CLJH" else "BD_CLGZ_GCJL", "已结束")
}
}
mBinding.tvProjectMeasured.setOnClickListener {
setBtnSelected(mBinding.tvProjectMeasured)
switchFragment(TYPE_PROJECT_MEASURE)
// 进入测量
adapter.addOnItemChildClickListener(R.id.tvEnterMeasure) { adapter, _, position ->
adapter.getItem(position)?.let { bean ->
PointSurveyNewActivity.start(mContext)
// viewModel.updateMeasureWorkStatus(bean.BD_CLJH_ID, if (type == TYPE_SURVEY_PLAN) "BD_CLJH" else "BD_CLGZ_GCJL", "执行中")
}
}
}
private fun switchFragment(type: String) {
// val frament = PointMeasureListFragment()
// frament.arguments = bundleOf(KEY_TYPE to type)
val transaction = supportFragmentManager.beginTransaction()
transaction.replace(R.id.container, PointMeasureListFragment.newInstance(type))
transaction.commit()
}
override fun initData() {
loadFirstPage()
viewModel.errorResponse.observe(this) {
toast(it)
mBinding.smartRefreshLayout.smartDismiss()
}
viewModel.measureBeanListResponse.observe(this) {
mBinding.smartRefreshLayout.smartDismiss()
if (currentPage == 1) {
adapter.submitList(it.rows)
if (it.rows.isEmpty()) {
mBinding.smartRefreshLayout.finishLoadMoreWithNoMoreData()
adapter.setStateViewLayout(this, R.layout.layout_no_data)
} else {
currentPage++
start += it.totalCount
}
} else {
if (it.rows.isEmpty()) {
mBinding.smartRefreshLayout.finishLoadMoreWithNoMoreData()
} else {
adapter.addAll(it.rows)
currentPage++
start += it.totalCount
}
}
}
fetchData()
}
private fun loadFirstPage() {
setBtnSelected(mBinding.tvAll)
switchFragment(TYPE_ALL)
private fun fetchData() {
if (type == TYPE_SURVEY_PLAN) {
viewModel.fetchCLJH(currentPage, start)
} else {
viewModel.fetchGCJL(currentPage, start)
}
}
private fun setBtnSelected(view: View) {
mBinding.tvAll.isSelected = false
mBinding.tvSurveyPlan.isSelected = false
mBinding.tvProjectMeasured.isSelected = false
override fun onRefresh(refreshLayout: RefreshLayout) {
currentPage = 1
fetchData()
}
view.isSelected = true
override fun onLoadMore(refreshLayout: RefreshLayout) {
fetchData()
}
}

@ -9,10 +9,10 @@ import com.project.survey.databinding.FragmentPointMeasureListBinding
import com.project.survey.extend.toast
import com.project.survey.model.PointMeasureListBean
import com.project.survey.ui.base.BaseBindingFragment
import com.project.survey.ui.pointmeasure.adapter.PointMeasureListAdapter
import com.project.survey.ui.pointmeasure.measure.PointSurveyNewActivity
import com.project.survey.widget.decoration.TransparentDividerDecoration
@Deprecated("")
class PointMeasureListFragment : BaseBindingFragment<FragmentPointMeasureListBinding>() {
companion object {
@ -31,12 +31,12 @@ class PointMeasureListFragment : BaseBindingFragment<FragmentPointMeasureListBin
): FragmentPointMeasureListBinding =
FragmentPointMeasureListBinding.inflate(inflater, container, false)
private val adapter by lazy { PointMeasureListAdapter() }
// private val adapter by lazy { PointMeasureListAdapter() }
override fun initView() {
// mBinding.recyclerView.addItemDecoration(TransparentDividerDecoration(mContext))
mBinding.recyclerView.setAdapter(adapter)
adapter.isStateViewEnable = true
// mBinding.recyclerView.setAdapter(adapter)
// adapter.isStateViewEnable = true
}
override fun initData() {
@ -44,24 +44,24 @@ class PointMeasureListFragment : BaseBindingFragment<FragmentPointMeasureListBin
for (i in 0 until 3) {
dataList.add(PointMeasureListBean())
}
adapter.submitList(dataList)
// adapter.submitList(dataList)
}
override fun initListener() {
// 生成报验单
adapter.addOnItemChildClickListener(R.id.tvGenerateForm) { _, _, position ->
toast("生成报验单:$position")
}
// 结束测量
adapter.addOnItemChildClickListener(R.id.tvStopMeasure) { _, _, position ->
toast("结束测量:$position")
}
// 进入测量
adapter.addOnItemChildClickListener(R.id.tvEnterMeasure) { _, _, position ->
adapter.getItem(position)?.let { bean ->
PointSurveyNewActivity.start(mContext)
}
}
// // 生成报验单
// adapter.addOnItemChildClickListener(R.id.tvGenerateForm) { _, _, position ->
// toast("生成报验单:$position")
// }
// // 结束测量
// adapter.addOnItemChildClickListener(R.id.tvStopMeasure) { _, _, position ->
// toast("结束测量:$position")
// }
// // 进入测量
// adapter.addOnItemChildClickListener(R.id.tvEnterMeasure) { _, _, position ->
// adapter.getItem(position)?.let { bean ->
// PointSurveyNewActivity.start(mContext)
// }
// }
}

@ -5,18 +5,21 @@ import android.view.ViewGroup
import com.chad.library.adapter4.BaseQuickAdapter
import com.chad.library.adapter4.viewholder.QuickViewHolder
import com.project.survey.R
import com.project.survey.model.MeasureBean
import com.project.survey.ui.pointmeasure.PointMeasureListActivity
class PointMeasureListAdapter : BaseQuickAdapter<Any, QuickViewHolder>() {
class PointMeasureListAdapter(val type: String) : BaseQuickAdapter<MeasureBean, QuickViewHolder>() {
override fun onBindViewHolder(holder: QuickViewHolder, position: Int, item: Any?) {
item?.let { bean ->
holder.setText(R.id.tvName, "测量单位报审(验)单")
.setText(R.id.tvNO, "XMBH2021-0000-$position")
.setText(R.id.tvType, "测量类型")
.setText(R.id.tvProjectName, "单位-分部-分项$position")
.setText(R.id.tvMeasureContent, "内容名称")
.setText(R.id.tvApplyUser, "张三")
}
override fun onBindViewHolder(holder: QuickViewHolder, position: Int, item: MeasureBean?) {
if (item == null) return
holder.setText(R.id.tvName, item.CLJH_LCMC)
.setText(R.id.tvNO, item.CLJH_BDLSH)
.setText(R.id.tvType, item.CLJH_CLLX_NAME)
.setText(R.id.tvProjectName, item.BD_FBFXPZ_FXGCMC)
.setText(R.id.tvMeasureContent, item.CLJH_CONTENT)
.setText(R.id.tvApplyUser, "")
.setVisible(R.id.tvGenerateForm, type == PointMeasureListActivity.TYPE_SURVEY_PLAN)
}
override fun onCreateViewHolder(

@ -11,12 +11,12 @@ import com.bingce.data.surveyor.designdata.kv.KeyValueConstants
import com.bingce.data.surveyor.designdata.kv.KeyValueRecord
import com.bingce.data.surveyor.designdata.project.ProjectRecord
import com.bingce.utils.ThreadPoolUtil
import com.project.survey.App
import com.project.survey.R
import com.project.survey.constants.EventConstants
import com.project.survey.constants.SPConstants
import com.project.survey.databinding.ActivityProjectListBinding
import com.project.survey.extend.smartDismiss
import com.project.survey.extend.toast
import com.project.survey.logic.event.Message
import com.project.survey.logic.viewmodel.ProjectViewModel
import com.project.survey.ui.MainActivity
@ -70,6 +70,7 @@ class ProjectListActivity : BaseBindingActivity<ActivityProjectListBinding>(), O
override fun initData() {
viewModel.errorResponse.observe(this) {
toast(it)
mBinding.smartRefreshLayout.smartDismiss()
}
viewModel.projectResponse.observe(this) {
@ -96,12 +97,17 @@ class ProjectListActivity : BaseBindingActivity<ActivityProjectListBinding>(), O
adapter.getItem(position)?.let { bean ->
// 进入项目,设置当前项目
SPUtils.put(SPConstants.CURRENT_PROJECT, bean)
SPUtils.put(SPConstants.PROJECT_ID, bean.XMXX_CODE)
SPUtils.put(SPConstants.PROJECT_ID, bean.XMXX_ID)
// 存储配置--当前项目
ThreadPoolUtil.execute {
//存储新的项目
ProjectDb.getInstance().save(
ProjectRecord(bean.BD_XMXX_ID, bean.XMXX_NAME, CoordinateSystem.newCoordinateSystem(this), Date().time).apply {
ProjectRecord(
bean.XMXX_ID,
bean.XMXX_NAME,
CoordinateSystem.newCoordinateSystem(this),
Date().time
).apply {
author = bean.XMXX_CONTACTNAME
}
)
@ -112,7 +118,10 @@ class ProjectListActivity : BaseBindingActivity<ActivityProjectListBinding>(), O
currentProjectConfig.value = bean.XMXX_CODE
} else {
currentProjectConfig =
KeyValueRecord(KeyValueConstants.KEY_CURRENT_PROJECT_ID, bean.XMXX_CODE)
KeyValueRecord(
KeyValueConstants.KEY_CURRENT_PROJECT_ID,
bean.XMXX_CODE
)
}
KeyValueDb.getInstance().save(currentProjectConfig)
}

@ -13,6 +13,7 @@ import com.project.survey.ui.project.adapter.ProjectListAdapter
import com.project.survey.util.SPUtils
import com.project.survey.widget.decoration.HorDividerDecoration
@Deprecated("使用 ProjectListActivity")
class ProjectListFragment : BaseBindingFragment<FragmentProjectListBinding>() {
companion object {
@ -34,50 +35,50 @@ class ProjectListFragment : BaseBindingFragment<FragmentProjectListBinding>() {
): FragmentProjectListBinding = FragmentProjectListBinding.inflate(inflater, container, false)
private val viewModel: ProjectViewModel by viewModels()
private val adapter by lazy { ProjectListAdapter() }
// private val adapter by lazy { ProjectListAdapter() }
private var type: String = ""
override fun initView() {
type = arguments?.getString(TYPE, "") ?: ""
mBinding.recyclerView.addItemDecoration(HorDividerDecoration(mContext))
mBinding.recyclerView.setAdapter(adapter)
// mBinding.recyclerView.addItemDecoration(HorDividerDecoration(mContext))
// mBinding.recyclerView.setAdapter(adapter)
}
override fun initData() {
viewModel.projectResponse.observe(this) {
if (type == TYPE_ALL) {
adapter.submitList(it)
} else {
adapter.submitList(
it.filter { bean ->
bean.XMXX_CODE in
(SPUtils.getString(SPConstants.RECENTLY_PROJECT) ?: "").split(",")
}
)
}
}
viewModel.fetchProjectList()
// viewModel.projectResponse.observe(this) {
// if (type == TYPE_ALL) {
// adapter.submitList(it)
// } else {
// adapter.submitList(
// it.filter { bean ->
// bean.XMXX_CODE in
// (SPUtils.getString(SPConstants.RECENTLY_PROJECT) ?: "").split(",")
// }
// )
// }
// }
//
// viewModel.fetchProjectList()
}
override fun initListener() {
adapter.setOnItemClickListener { _, _, position ->
// TODO 去详情页
adapter.getItem(position)?.let { bean ->
val recentlyList = (SPUtils.getString(SPConstants.RECENTLY_PROJECT) ?: "")
.split(",")
.toMutableList()
if (bean.XMXX_CODE !in recentlyList) {
recentlyList.add(bean.XMXX_CODE)
}
SPUtils.put(
SPConstants.RECENTLY_PROJECT,
recentlyList.joinToString(",")
)
}
}
// adapter.setOnItemClickListener { _, _, position ->
// // TODO 去详情页
// adapter.getItem(position)?.let { bean ->
// val recentlyList = (SPUtils.getString(SPConstants.RECENTLY_PROJECT) ?: "")
// .split(",")
// .toMutableList()
// if (bean.XMXX_CODE !in recentlyList) {
// recentlyList.add(bean.XMXX_CODE)
// }
// SPUtils.put(
// SPConstants.RECENTLY_PROJECT,
// recentlyList.joinToString(",")
// )
// }
// }
}
}

@ -62,8 +62,12 @@ object SPUtils {
return mmkv.decodeBytes(key)
}
fun getString(key: String): String? {
return mmkv.decodeString(key, "")
// fun getString(key: String): String? {
// return mmkv.decodeString(key, "")
// }
fun getString(key: String, defaultValue: String = ""): String {
return mmkv.decodeString(key, defaultValue) ?: defaultValue
}
fun <T : Parcelable> getParcelable(key: String, tClass: Class<T>): T? {

@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
@ -27,54 +28,18 @@
android:layout_height="wrap_content"
app:sw_hint="流程名称、编号、申请人" />
<LinearLayout
<com.scwang.smart.refresh.layout.SmartRefreshLayout
android:id="@+id/smartRefreshLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/white"
android:orientation="horizontal"
android:paddingHorizontal="@dimen/sw_16dp"
android:paddingVertical="@dimen/sw_14dp">
<TextView
android:id="@+id/tvAll"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/bg_point_measure_selector"
android:paddingHorizontal="@dimen/sw_11dp"
android:paddingVertical="@dimen/sw_5dp"
android:text="全部 23"
android:textColor="@color/text_color_selector_blue_black"
android:textSize="@dimen/sw_12sp" />
<TextView
android:id="@+id/tvSurveyPlan"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/sw_11dp"
android:background="@drawable/bg_point_measure_selector"
android:paddingHorizontal="@dimen/sw_11dp"
android:paddingVertical="@dimen/sw_5dp"
android:text="测量计划12"
android:textColor="@color/text_color_selector_blue_black"
android:textSize="@dimen/sw_12sp" />
<TextView
android:id="@+id/tvProjectMeasured"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/sw_11dp"
android:background="@drawable/bg_point_measure_selector"
android:paddingHorizontal="@dimen/sw_11dp"
android:paddingVertical="@dimen/sw_5dp"
android:text="工程计量11"
android:textColor="@color/text_color_selector_blue_black"
android:textSize="@dimen/sw_12sp" />
</LinearLayout>
<androidx.fragment.app.FragmentContainerView
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent" />
android:layout_height="match_parent">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
tools:itemCount="2"
tools:listitem="@layout/item_point_measure_list" />
</com.scwang.smart.refresh.layout.SmartRefreshLayout>
</LinearLayout>

@ -50,36 +50,39 @@
app:layout_constraintTop_toTopOf="parent" />
<com.project.survey.widget.SectionItemWidget
android:id="@+id/itemPointMeasure"
android:id="@+id/itemSurveyPlan"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/sw_6dp"
app:layout_constraintEnd_toStartOf="@id/itemLofting"
app:layout_constraintEnd_toStartOf="@id/itemEngineeringMetrology"
app:layout_constraintHorizontal_weight="1"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvTitle1"
app:siw_icon="@drawable/icon_point_measurement"
app:siw_name="@string/point_measurement" />
app:siw_name="@string/survey_plan" />
<com.project.survey.widget.SectionItemWidget
android:id="@+id/itemLofting"
android:id="@+id/itemEngineeringMetrology"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintEnd_toStartOf="@id/viewSpacer1"
android:layout_marginTop="@dimen/sw_6dp"
app:layout_constraintEnd_toStartOf="@id/itemLofting"
app:layout_constraintHorizontal_weight="1"
app:layout_constraintStart_toEndOf="@id/itemPointMeasure"
app:layout_constraintTop_toTopOf="@id/itemPointMeasure"
app:siw_icon="@drawable/icon_lofting"
app:siw_name="@string/stakeout" />
app:layout_constraintStart_toEndOf="@id/itemSurveyPlan"
app:layout_constraintTop_toBottomOf="@id/tvTitle1"
app:siw_icon="@drawable/icon_point_measurement"
app:siw_name="@string/engineering_metrology" />
<View
android:id="@+id/viewSpacer1"
<com.project.survey.widget.SectionItemWidget
android:id="@+id/itemLofting"
android:layout_width="0dp"
android:layout_height="1dp"
android:layout_height="wrap_content"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_weight="1"
app:layout_constraintStart_toEndOf="@id/itemLofting"
app:layout_constraintTop_toTopOf="@id/itemPointMeasure" />
app:layout_constraintStart_toEndOf="@id/itemEngineeringMetrology"
app:layout_constraintTop_toTopOf="@id/itemSurveyPlan"
app:siw_icon="@drawable/icon_lofting"
app:siw_name="@string/stakeout" />
</androidx.constraintlayout.widget.ConstraintLayout>

@ -3,6 +3,8 @@
<string name="app_name">工程测量</string>
<string name="beidou_application">北斗应用</string>
<string name="survey_plan">测量计划</string>
<string name="engineering_metrology">工程计量</string>
<string name="point_measurement">点测量</string>
<string name="stakeout">放样</string>
<string name="process_approval">流程审批</string>

@ -121,7 +121,8 @@
<style name="ToolbarTextAppearance" parent="TextAppearance.AppCompat.Widget.ActionBar.Title">
<item name="android:textSize">@dimen/sw_15sp</item>
<item name="android:textColor">@color/text_color_ff</item>
<!-- <item name="android:textColor">@color/text_color_ff</item>-->
<item name="android:textColor">@color/text_color_20</item>
</style>
</resources>

Loading…
Cancel
Save