diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 9fc7c01..78d7828 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -71,6 +71,7 @@ + @@ -85,6 +86,8 @@ + + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 9fc7c01..78d7828 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -71,6 +71,7 @@ + @@ -85,6 +86,8 @@ + + diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt index 71fe5a8..ad81434 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt @@ -170,7 +170,7 @@ "标准规范" -> requireContext().navigatePageTo() "能力列表" -> requireContext().navigatePageTo() "计量培训" -> requireContext().navigatePageTo() -// "合同发票" -> requireContext().navigatePageTo() + "合同发票" -> requireContext().navigatePageTo() // "业务统计" -> requireContext().navigatePageTo() "客户列表" -> requireContext().navigatePageTo() // "外场检测" -> requireContext().navigatePageTo() diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 9fc7c01..78d7828 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -71,6 +71,7 @@ + @@ -85,6 +86,8 @@ + + diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt index 71fe5a8..ad81434 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt @@ -170,7 +170,7 @@ "标准规范" -> requireContext().navigatePageTo() "能力列表" -> requireContext().navigatePageTo() "计量培训" -> requireContext().navigatePageTo() -// "合同发票" -> requireContext().navigatePageTo() + "合同发票" -> requireContext().navigatePageTo() // "业务统计" -> requireContext().navigatePageTo() "客户列表" -> requireContext().navigatePageTo() // "外场检测" -> requireContext().navigatePageTo() diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt index b47cb32..b12a0bf 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt @@ -184,7 +184,7 @@ requireContext().navigatePageTo() } - //TODO 未实现 + //TODO 通过接口修改数据库字段实现 pushSettingSwitch.setOnCheckedChangeListener { _, isChecked -> SaveKeyValues.putValue(LocaleConstant.PUSH_SETTING, isChecked) if (isChecked) { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 9fc7c01..78d7828 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -71,6 +71,7 @@ + @@ -85,6 +86,8 @@ + + diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt index 71fe5a8..ad81434 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt @@ -170,7 +170,7 @@ "标准规范" -> requireContext().navigatePageTo() "能力列表" -> requireContext().navigatePageTo() "计量培训" -> requireContext().navigatePageTo() -// "合同发票" -> requireContext().navigatePageTo() + "合同发票" -> requireContext().navigatePageTo() // "业务统计" -> requireContext().navigatePageTo() "客户列表" -> requireContext().navigatePageTo() // "外场检测" -> requireContext().navigatePageTo() diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt index b47cb32..b12a0bf 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt @@ -184,7 +184,7 @@ requireContext().navigatePageTo() } - //TODO 未实现 + //TODO 通过接口修改数据库字段实现 pushSettingSwitch.setOnCheckedChangeListener { _, isChecked -> SaveKeyValues.putValue(LocaleConstant.PUSH_SETTING, isChecked) if (isChecked) { diff --git a/app/src/main/java/com/casic/xz/meterage/model/ContractListModel.java b/app/src/main/java/com/casic/xz/meterage/model/ContractListModel.java new file mode 100644 index 0000000..111ff52 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/model/ContractListModel.java @@ -0,0 +1,364 @@ +package com.casic.xz.meterage.model; + +import java.util.List; + +public class ContractListModel { + + 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 agreementAmount; + private String agreementEndDate; + private String agreementImportantContent; + private String agreementKind; + private String agreementKindName; + private String agreementName; + private String agreementNo; + private String agreementSource; + private String agreementSourceName; + private String agreementStartDate; + private String agreementType; + private String agreementTypeName; + private String approvalStatus; + private String createTime; + private String createUser; + private String createUserName; + private String customerId; + private String deptId; + private String deptName; + private String director; + private String estimateSignDate; + private String firstParty; + private String id; + private String isDel; + private String minioFileName; + private String orderIdList; + private String orderList; + private String paymentList; + private String processId; + private String remark; + private String secondParty; + private String status; + private String statusName; + private String updateTime; + + public String getAgreementAmount() { + return agreementAmount; + } + + public void setAgreementAmount(String agreementAmount) { + this.agreementAmount = agreementAmount; + } + + public String getAgreementEndDate() { + return agreementEndDate; + } + + public void setAgreementEndDate(String agreementEndDate) { + this.agreementEndDate = agreementEndDate; + } + + public String getAgreementImportantContent() { + return agreementImportantContent; + } + + public void setAgreementImportantContent(String agreementImportantContent) { + this.agreementImportantContent = agreementImportantContent; + } + + public String getAgreementKind() { + return agreementKind; + } + + public void setAgreementKind(String agreementKind) { + this.agreementKind = agreementKind; + } + + public String getAgreementKindName() { + return agreementKindName; + } + + public void setAgreementKindName(String agreementKindName) { + this.agreementKindName = agreementKindName; + } + + public String getAgreementName() { + return agreementName; + } + + public void setAgreementName(String agreementName) { + this.agreementName = agreementName; + } + + public String getAgreementNo() { + return agreementNo; + } + + public void setAgreementNo(String agreementNo) { + this.agreementNo = agreementNo; + } + + public String getAgreementSource() { + return agreementSource; + } + + public void setAgreementSource(String agreementSource) { + this.agreementSource = agreementSource; + } + + public String getAgreementSourceName() { + return agreementSourceName; + } + + public void setAgreementSourceName(String agreementSourceName) { + this.agreementSourceName = agreementSourceName; + } + + public String getAgreementStartDate() { + return agreementStartDate; + } + + public void setAgreementStartDate(String agreementStartDate) { + this.agreementStartDate = agreementStartDate; + } + + public String getAgreementType() { + return agreementType; + } + + public void setAgreementType(String agreementType) { + this.agreementType = agreementType; + } + + public String getAgreementTypeName() { + return agreementTypeName; + } + + public void setAgreementTypeName(String agreementTypeName) { + this.agreementTypeName = agreementTypeName; + } + + public String getApprovalStatus() { + return approvalStatus; + } + + public void setApprovalStatus(String approvalStatus) { + this.approvalStatus = approvalStatus; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getCreateUser() { + return createUser; + } + + public void setCreateUser(String createUser) { + this.createUser = createUser; + } + + public String getCreateUserName() { + return createUserName; + } + + public void setCreateUserName(String createUserName) { + this.createUserName = createUserName; + } + + public String getCustomerId() { + return customerId; + } + + public void setCustomerId(String customerId) { + this.customerId = customerId; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDirector() { + return director; + } + + public void setDirector(String director) { + this.director = director; + } + + public String getEstimateSignDate() { + return estimateSignDate; + } + + public void setEstimateSignDate(String estimateSignDate) { + this.estimateSignDate = estimateSignDate; + } + + public String getFirstParty() { + return firstParty; + } + + public void setFirstParty(String firstParty) { + this.firstParty = firstParty; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getIsDel() { + return isDel; + } + + public void setIsDel(String isDel) { + this.isDel = isDel; + } + + public String getMinioFileName() { + return minioFileName; + } + + public void setMinioFileName(String minioFileName) { + this.minioFileName = minioFileName; + } + + public String getOrderIdList() { + return orderIdList; + } + + public void setOrderIdList(String orderIdList) { + this.orderIdList = orderIdList; + } + + public String getOrderList() { + return orderList; + } + + public void setOrderList(String orderList) { + this.orderList = orderList; + } + + public String getPaymentList() { + return paymentList; + } + + public void setPaymentList(String paymentList) { + this.paymentList = paymentList; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + public String getSecondParty() { + return secondParty; + } + + public void setSecondParty(String secondParty) { + this.secondParty = secondParty; + } + + 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; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + } + } +} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 9fc7c01..78d7828 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -71,6 +71,7 @@ + @@ -85,6 +86,8 @@ + + diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt index 71fe5a8..ad81434 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt @@ -170,7 +170,7 @@ "标准规范" -> requireContext().navigatePageTo() "能力列表" -> requireContext().navigatePageTo() "计量培训" -> requireContext().navigatePageTo() -// "合同发票" -> requireContext().navigatePageTo() + "合同发票" -> requireContext().navigatePageTo() // "业务统计" -> requireContext().navigatePageTo() "客户列表" -> requireContext().navigatePageTo() // "外场检测" -> requireContext().navigatePageTo() diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt index b47cb32..b12a0bf 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt @@ -184,7 +184,7 @@ requireContext().navigatePageTo() } - //TODO 未实现 + //TODO 通过接口修改数据库字段实现 pushSettingSwitch.setOnCheckedChangeListener { _, isChecked -> SaveKeyValues.putValue(LocaleConstant.PUSH_SETTING, isChecked) if (isChecked) { diff --git a/app/src/main/java/com/casic/xz/meterage/model/ContractListModel.java b/app/src/main/java/com/casic/xz/meterage/model/ContractListModel.java new file mode 100644 index 0000000..111ff52 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/model/ContractListModel.java @@ -0,0 +1,364 @@ +package com.casic.xz.meterage.model; + +import java.util.List; + +public class ContractListModel { + + 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 agreementAmount; + private String agreementEndDate; + private String agreementImportantContent; + private String agreementKind; + private String agreementKindName; + private String agreementName; + private String agreementNo; + private String agreementSource; + private String agreementSourceName; + private String agreementStartDate; + private String agreementType; + private String agreementTypeName; + private String approvalStatus; + private String createTime; + private String createUser; + private String createUserName; + private String customerId; + private String deptId; + private String deptName; + private String director; + private String estimateSignDate; + private String firstParty; + private String id; + private String isDel; + private String minioFileName; + private String orderIdList; + private String orderList; + private String paymentList; + private String processId; + private String remark; + private String secondParty; + private String status; + private String statusName; + private String updateTime; + + public String getAgreementAmount() { + return agreementAmount; + } + + public void setAgreementAmount(String agreementAmount) { + this.agreementAmount = agreementAmount; + } + + public String getAgreementEndDate() { + return agreementEndDate; + } + + public void setAgreementEndDate(String agreementEndDate) { + this.agreementEndDate = agreementEndDate; + } + + public String getAgreementImportantContent() { + return agreementImportantContent; + } + + public void setAgreementImportantContent(String agreementImportantContent) { + this.agreementImportantContent = agreementImportantContent; + } + + public String getAgreementKind() { + return agreementKind; + } + + public void setAgreementKind(String agreementKind) { + this.agreementKind = agreementKind; + } + + public String getAgreementKindName() { + return agreementKindName; + } + + public void setAgreementKindName(String agreementKindName) { + this.agreementKindName = agreementKindName; + } + + public String getAgreementName() { + return agreementName; + } + + public void setAgreementName(String agreementName) { + this.agreementName = agreementName; + } + + public String getAgreementNo() { + return agreementNo; + } + + public void setAgreementNo(String agreementNo) { + this.agreementNo = agreementNo; + } + + public String getAgreementSource() { + return agreementSource; + } + + public void setAgreementSource(String agreementSource) { + this.agreementSource = agreementSource; + } + + public String getAgreementSourceName() { + return agreementSourceName; + } + + public void setAgreementSourceName(String agreementSourceName) { + this.agreementSourceName = agreementSourceName; + } + + public String getAgreementStartDate() { + return agreementStartDate; + } + + public void setAgreementStartDate(String agreementStartDate) { + this.agreementStartDate = agreementStartDate; + } + + public String getAgreementType() { + return agreementType; + } + + public void setAgreementType(String agreementType) { + this.agreementType = agreementType; + } + + public String getAgreementTypeName() { + return agreementTypeName; + } + + public void setAgreementTypeName(String agreementTypeName) { + this.agreementTypeName = agreementTypeName; + } + + public String getApprovalStatus() { + return approvalStatus; + } + + public void setApprovalStatus(String approvalStatus) { + this.approvalStatus = approvalStatus; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getCreateUser() { + return createUser; + } + + public void setCreateUser(String createUser) { + this.createUser = createUser; + } + + public String getCreateUserName() { + return createUserName; + } + + public void setCreateUserName(String createUserName) { + this.createUserName = createUserName; + } + + public String getCustomerId() { + return customerId; + } + + public void setCustomerId(String customerId) { + this.customerId = customerId; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDirector() { + return director; + } + + public void setDirector(String director) { + this.director = director; + } + + public String getEstimateSignDate() { + return estimateSignDate; + } + + public void setEstimateSignDate(String estimateSignDate) { + this.estimateSignDate = estimateSignDate; + } + + public String getFirstParty() { + return firstParty; + } + + public void setFirstParty(String firstParty) { + this.firstParty = firstParty; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getIsDel() { + return isDel; + } + + public void setIsDel(String isDel) { + this.isDel = isDel; + } + + public String getMinioFileName() { + return minioFileName; + } + + public void setMinioFileName(String minioFileName) { + this.minioFileName = minioFileName; + } + + public String getOrderIdList() { + return orderIdList; + } + + public void setOrderIdList(String orderIdList) { + this.orderIdList = orderIdList; + } + + public String getOrderList() { + return orderList; + } + + public void setOrderList(String orderList) { + this.orderList = orderList; + } + + public String getPaymentList() { + return paymentList; + } + + public void setPaymentList(String paymentList) { + this.paymentList = paymentList; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + public String getSecondParty() { + return secondParty; + } + + public void setSecondParty(String secondParty) { + this.secondParty = secondParty; + } + + 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; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt index 85756b0..36059c5 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt @@ -65,4 +65,8 @@ const val USER_ID = "userId" const val PRIVACY_CHECK_BOX = "privacyCheckBox" const val PUSH_SETTING = "pushSetting" + const val METERAGE_TRAIN_FORM_ID = "jlglpxjhsp" + const val STANDARD_FILE_FORM_ID = "jlglwjsp" + const val CERTIFICATE_REPORT_FORM_ID = "ywglzsbg" + const val CONTRACT_FORM_ID = "cwczht" } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 9fc7c01..78d7828 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -71,6 +71,7 @@ + @@ -85,6 +86,8 @@ + + diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt index 71fe5a8..ad81434 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt @@ -170,7 +170,7 @@ "标准规范" -> requireContext().navigatePageTo() "能力列表" -> requireContext().navigatePageTo() "计量培训" -> requireContext().navigatePageTo() -// "合同发票" -> requireContext().navigatePageTo() + "合同发票" -> requireContext().navigatePageTo() // "业务统计" -> requireContext().navigatePageTo() "客户列表" -> requireContext().navigatePageTo() // "外场检测" -> requireContext().navigatePageTo() diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt index b47cb32..b12a0bf 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt @@ -184,7 +184,7 @@ requireContext().navigatePageTo() } - //TODO 未实现 + //TODO 通过接口修改数据库字段实现 pushSettingSwitch.setOnCheckedChangeListener { _, isChecked -> SaveKeyValues.putValue(LocaleConstant.PUSH_SETTING, isChecked) if (isChecked) { diff --git a/app/src/main/java/com/casic/xz/meterage/model/ContractListModel.java b/app/src/main/java/com/casic/xz/meterage/model/ContractListModel.java new file mode 100644 index 0000000..111ff52 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/model/ContractListModel.java @@ -0,0 +1,364 @@ +package com.casic.xz.meterage.model; + +import java.util.List; + +public class ContractListModel { + + 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 agreementAmount; + private String agreementEndDate; + private String agreementImportantContent; + private String agreementKind; + private String agreementKindName; + private String agreementName; + private String agreementNo; + private String agreementSource; + private String agreementSourceName; + private String agreementStartDate; + private String agreementType; + private String agreementTypeName; + private String approvalStatus; + private String createTime; + private String createUser; + private String createUserName; + private String customerId; + private String deptId; + private String deptName; + private String director; + private String estimateSignDate; + private String firstParty; + private String id; + private String isDel; + private String minioFileName; + private String orderIdList; + private String orderList; + private String paymentList; + private String processId; + private String remark; + private String secondParty; + private String status; + private String statusName; + private String updateTime; + + public String getAgreementAmount() { + return agreementAmount; + } + + public void setAgreementAmount(String agreementAmount) { + this.agreementAmount = agreementAmount; + } + + public String getAgreementEndDate() { + return agreementEndDate; + } + + public void setAgreementEndDate(String agreementEndDate) { + this.agreementEndDate = agreementEndDate; + } + + public String getAgreementImportantContent() { + return agreementImportantContent; + } + + public void setAgreementImportantContent(String agreementImportantContent) { + this.agreementImportantContent = agreementImportantContent; + } + + public String getAgreementKind() { + return agreementKind; + } + + public void setAgreementKind(String agreementKind) { + this.agreementKind = agreementKind; + } + + public String getAgreementKindName() { + return agreementKindName; + } + + public void setAgreementKindName(String agreementKindName) { + this.agreementKindName = agreementKindName; + } + + public String getAgreementName() { + return agreementName; + } + + public void setAgreementName(String agreementName) { + this.agreementName = agreementName; + } + + public String getAgreementNo() { + return agreementNo; + } + + public void setAgreementNo(String agreementNo) { + this.agreementNo = agreementNo; + } + + public String getAgreementSource() { + return agreementSource; + } + + public void setAgreementSource(String agreementSource) { + this.agreementSource = agreementSource; + } + + public String getAgreementSourceName() { + return agreementSourceName; + } + + public void setAgreementSourceName(String agreementSourceName) { + this.agreementSourceName = agreementSourceName; + } + + public String getAgreementStartDate() { + return agreementStartDate; + } + + public void setAgreementStartDate(String agreementStartDate) { + this.agreementStartDate = agreementStartDate; + } + + public String getAgreementType() { + return agreementType; + } + + public void setAgreementType(String agreementType) { + this.agreementType = agreementType; + } + + public String getAgreementTypeName() { + return agreementTypeName; + } + + public void setAgreementTypeName(String agreementTypeName) { + this.agreementTypeName = agreementTypeName; + } + + public String getApprovalStatus() { + return approvalStatus; + } + + public void setApprovalStatus(String approvalStatus) { + this.approvalStatus = approvalStatus; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getCreateUser() { + return createUser; + } + + public void setCreateUser(String createUser) { + this.createUser = createUser; + } + + public String getCreateUserName() { + return createUserName; + } + + public void setCreateUserName(String createUserName) { + this.createUserName = createUserName; + } + + public String getCustomerId() { + return customerId; + } + + public void setCustomerId(String customerId) { + this.customerId = customerId; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDirector() { + return director; + } + + public void setDirector(String director) { + this.director = director; + } + + public String getEstimateSignDate() { + return estimateSignDate; + } + + public void setEstimateSignDate(String estimateSignDate) { + this.estimateSignDate = estimateSignDate; + } + + public String getFirstParty() { + return firstParty; + } + + public void setFirstParty(String firstParty) { + this.firstParty = firstParty; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getIsDel() { + return isDel; + } + + public void setIsDel(String isDel) { + this.isDel = isDel; + } + + public String getMinioFileName() { + return minioFileName; + } + + public void setMinioFileName(String minioFileName) { + this.minioFileName = minioFileName; + } + + public String getOrderIdList() { + return orderIdList; + } + + public void setOrderIdList(String orderIdList) { + this.orderIdList = orderIdList; + } + + public String getOrderList() { + return orderList; + } + + public void setOrderList(String orderList) { + this.orderList = orderList; + } + + public String getPaymentList() { + return paymentList; + } + + public void setPaymentList(String paymentList) { + this.paymentList = paymentList; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + public String getSecondParty() { + return secondParty; + } + + public void setSecondParty(String secondParty) { + this.secondParty = secondParty; + } + + 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; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt index 85756b0..36059c5 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt @@ -65,4 +65,8 @@ const val USER_ID = "userId" const val PRIVACY_CHECK_BOX = "privacyCheckBox" const val PUSH_SETTING = "pushSetting" + const val METERAGE_TRAIN_FORM_ID = "jlglpxjhsp" + const val STANDARD_FILE_FORM_ID = "jlglwjsp" + const val CERTIFICATE_REPORT_FORM_ID = "ywglzsbg" + const val CONTRACT_FORM_ID = "cwczht" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt b/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt index da58079..99f3bb1 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt @@ -2,37 +2,42 @@ object SearchType { /** + * 首页模糊搜索 + * */ + const val All = "0" + + /** * 搜索仪器设备 * */ - const val Equipment = "0" + const val Equipment = "1" /** * 搜索标准装置 * */ - const val StandardDevice = "1" + const val StandardDevice = "2" /** * 搜索委托书需求 * */ - const val Entrust = "2" + const val Entrust = "3" /** * 搜索能力 * */ - const val Capability = "3" + const val Capability = "4" /** * 搜索计量培训 * */ - const val MeterageTrain = "4" + const val MeterageTrain = "5" /** * 搜索客户 * */ - const val Customer = "5" + const val Customer = "6" /** - * 首页模糊搜索 + * 搜索仪器设备 * */ - const val All = "6" + const val Contract = "7" } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 9fc7c01..78d7828 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -71,6 +71,7 @@ + @@ -85,6 +86,8 @@ + + diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt index 71fe5a8..ad81434 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt @@ -170,7 +170,7 @@ "标准规范" -> requireContext().navigatePageTo() "能力列表" -> requireContext().navigatePageTo() "计量培训" -> requireContext().navigatePageTo() -// "合同发票" -> requireContext().navigatePageTo() + "合同发票" -> requireContext().navigatePageTo() // "业务统计" -> requireContext().navigatePageTo() "客户列表" -> requireContext().navigatePageTo() // "外场检测" -> requireContext().navigatePageTo() diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt index b47cb32..b12a0bf 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt @@ -184,7 +184,7 @@ requireContext().navigatePageTo() } - //TODO 未实现 + //TODO 通过接口修改数据库字段实现 pushSettingSwitch.setOnCheckedChangeListener { _, isChecked -> SaveKeyValues.putValue(LocaleConstant.PUSH_SETTING, isChecked) if (isChecked) { diff --git a/app/src/main/java/com/casic/xz/meterage/model/ContractListModel.java b/app/src/main/java/com/casic/xz/meterage/model/ContractListModel.java new file mode 100644 index 0000000..111ff52 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/model/ContractListModel.java @@ -0,0 +1,364 @@ +package com.casic.xz.meterage.model; + +import java.util.List; + +public class ContractListModel { + + 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 agreementAmount; + private String agreementEndDate; + private String agreementImportantContent; + private String agreementKind; + private String agreementKindName; + private String agreementName; + private String agreementNo; + private String agreementSource; + private String agreementSourceName; + private String agreementStartDate; + private String agreementType; + private String agreementTypeName; + private String approvalStatus; + private String createTime; + private String createUser; + private String createUserName; + private String customerId; + private String deptId; + private String deptName; + private String director; + private String estimateSignDate; + private String firstParty; + private String id; + private String isDel; + private String minioFileName; + private String orderIdList; + private String orderList; + private String paymentList; + private String processId; + private String remark; + private String secondParty; + private String status; + private String statusName; + private String updateTime; + + public String getAgreementAmount() { + return agreementAmount; + } + + public void setAgreementAmount(String agreementAmount) { + this.agreementAmount = agreementAmount; + } + + public String getAgreementEndDate() { + return agreementEndDate; + } + + public void setAgreementEndDate(String agreementEndDate) { + this.agreementEndDate = agreementEndDate; + } + + public String getAgreementImportantContent() { + return agreementImportantContent; + } + + public void setAgreementImportantContent(String agreementImportantContent) { + this.agreementImportantContent = agreementImportantContent; + } + + public String getAgreementKind() { + return agreementKind; + } + + public void setAgreementKind(String agreementKind) { + this.agreementKind = agreementKind; + } + + public String getAgreementKindName() { + return agreementKindName; + } + + public void setAgreementKindName(String agreementKindName) { + this.agreementKindName = agreementKindName; + } + + public String getAgreementName() { + return agreementName; + } + + public void setAgreementName(String agreementName) { + this.agreementName = agreementName; + } + + public String getAgreementNo() { + return agreementNo; + } + + public void setAgreementNo(String agreementNo) { + this.agreementNo = agreementNo; + } + + public String getAgreementSource() { + return agreementSource; + } + + public void setAgreementSource(String agreementSource) { + this.agreementSource = agreementSource; + } + + public String getAgreementSourceName() { + return agreementSourceName; + } + + public void setAgreementSourceName(String agreementSourceName) { + this.agreementSourceName = agreementSourceName; + } + + public String getAgreementStartDate() { + return agreementStartDate; + } + + public void setAgreementStartDate(String agreementStartDate) { + this.agreementStartDate = agreementStartDate; + } + + public String getAgreementType() { + return agreementType; + } + + public void setAgreementType(String agreementType) { + this.agreementType = agreementType; + } + + public String getAgreementTypeName() { + return agreementTypeName; + } + + public void setAgreementTypeName(String agreementTypeName) { + this.agreementTypeName = agreementTypeName; + } + + public String getApprovalStatus() { + return approvalStatus; + } + + public void setApprovalStatus(String approvalStatus) { + this.approvalStatus = approvalStatus; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getCreateUser() { + return createUser; + } + + public void setCreateUser(String createUser) { + this.createUser = createUser; + } + + public String getCreateUserName() { + return createUserName; + } + + public void setCreateUserName(String createUserName) { + this.createUserName = createUserName; + } + + public String getCustomerId() { + return customerId; + } + + public void setCustomerId(String customerId) { + this.customerId = customerId; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDirector() { + return director; + } + + public void setDirector(String director) { + this.director = director; + } + + public String getEstimateSignDate() { + return estimateSignDate; + } + + public void setEstimateSignDate(String estimateSignDate) { + this.estimateSignDate = estimateSignDate; + } + + public String getFirstParty() { + return firstParty; + } + + public void setFirstParty(String firstParty) { + this.firstParty = firstParty; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getIsDel() { + return isDel; + } + + public void setIsDel(String isDel) { + this.isDel = isDel; + } + + public String getMinioFileName() { + return minioFileName; + } + + public void setMinioFileName(String minioFileName) { + this.minioFileName = minioFileName; + } + + public String getOrderIdList() { + return orderIdList; + } + + public void setOrderIdList(String orderIdList) { + this.orderIdList = orderIdList; + } + + public String getOrderList() { + return orderList; + } + + public void setOrderList(String orderList) { + this.orderList = orderList; + } + + public String getPaymentList() { + return paymentList; + } + + public void setPaymentList(String paymentList) { + this.paymentList = paymentList; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + public String getSecondParty() { + return secondParty; + } + + public void setSecondParty(String secondParty) { + this.secondParty = secondParty; + } + + 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; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt index 85756b0..36059c5 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt @@ -65,4 +65,8 @@ const val USER_ID = "userId" const val PRIVACY_CHECK_BOX = "privacyCheckBox" const val PUSH_SETTING = "pushSetting" + const val METERAGE_TRAIN_FORM_ID = "jlglpxjhsp" + const val STANDARD_FILE_FORM_ID = "jlglwjsp" + const val CERTIFICATE_REPORT_FORM_ID = "ywglzsbg" + const val CONTRACT_FORM_ID = "cwczht" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt b/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt index da58079..99f3bb1 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt @@ -2,37 +2,42 @@ object SearchType { /** + * 首页模糊搜索 + * */ + const val All = "0" + + /** * 搜索仪器设备 * */ - const val Equipment = "0" + const val Equipment = "1" /** * 搜索标准装置 * */ - const val StandardDevice = "1" + const val StandardDevice = "2" /** * 搜索委托书需求 * */ - const val Entrust = "2" + const val Entrust = "3" /** * 搜索能力 * */ - const val Capability = "3" + const val Capability = "4" /** * 搜索计量培训 * */ - const val MeterageTrain = "4" + const val MeterageTrain = "5" /** * 搜索客户 * */ - const val Customer = "5" + const val Customer = "6" /** - * 首页模糊搜索 + * 搜索仪器设备 * */ - const val All = "6" + const val Contract = "7" } 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 3bd698a..bc4d694 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 @@ -446,4 +446,15 @@ @QueryMap limit: Map, @QueryMap offset: Map ): String + + /** + * 合同列表 + */ + @POST("/finance/agreement/listPage") + suspend fun getContractList( + @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/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 9fc7c01..78d7828 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -71,6 +71,7 @@ + @@ -85,6 +86,8 @@ + + diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt index 71fe5a8..ad81434 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt @@ -170,7 +170,7 @@ "标准规范" -> requireContext().navigatePageTo() "能力列表" -> requireContext().navigatePageTo() "计量培训" -> requireContext().navigatePageTo() -// "合同发票" -> requireContext().navigatePageTo() + "合同发票" -> requireContext().navigatePageTo() // "业务统计" -> requireContext().navigatePageTo() "客户列表" -> requireContext().navigatePageTo() // "外场检测" -> requireContext().navigatePageTo() diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt index b47cb32..b12a0bf 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt @@ -184,7 +184,7 @@ requireContext().navigatePageTo() } - //TODO 未实现 + //TODO 通过接口修改数据库字段实现 pushSettingSwitch.setOnCheckedChangeListener { _, isChecked -> SaveKeyValues.putValue(LocaleConstant.PUSH_SETTING, isChecked) if (isChecked) { diff --git a/app/src/main/java/com/casic/xz/meterage/model/ContractListModel.java b/app/src/main/java/com/casic/xz/meterage/model/ContractListModel.java new file mode 100644 index 0000000..111ff52 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/model/ContractListModel.java @@ -0,0 +1,364 @@ +package com.casic.xz.meterage.model; + +import java.util.List; + +public class ContractListModel { + + 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 agreementAmount; + private String agreementEndDate; + private String agreementImportantContent; + private String agreementKind; + private String agreementKindName; + private String agreementName; + private String agreementNo; + private String agreementSource; + private String agreementSourceName; + private String agreementStartDate; + private String agreementType; + private String agreementTypeName; + private String approvalStatus; + private String createTime; + private String createUser; + private String createUserName; + private String customerId; + private String deptId; + private String deptName; + private String director; + private String estimateSignDate; + private String firstParty; + private String id; + private String isDel; + private String minioFileName; + private String orderIdList; + private String orderList; + private String paymentList; + private String processId; + private String remark; + private String secondParty; + private String status; + private String statusName; + private String updateTime; + + public String getAgreementAmount() { + return agreementAmount; + } + + public void setAgreementAmount(String agreementAmount) { + this.agreementAmount = agreementAmount; + } + + public String getAgreementEndDate() { + return agreementEndDate; + } + + public void setAgreementEndDate(String agreementEndDate) { + this.agreementEndDate = agreementEndDate; + } + + public String getAgreementImportantContent() { + return agreementImportantContent; + } + + public void setAgreementImportantContent(String agreementImportantContent) { + this.agreementImportantContent = agreementImportantContent; + } + + public String getAgreementKind() { + return agreementKind; + } + + public void setAgreementKind(String agreementKind) { + this.agreementKind = agreementKind; + } + + public String getAgreementKindName() { + return agreementKindName; + } + + public void setAgreementKindName(String agreementKindName) { + this.agreementKindName = agreementKindName; + } + + public String getAgreementName() { + return agreementName; + } + + public void setAgreementName(String agreementName) { + this.agreementName = agreementName; + } + + public String getAgreementNo() { + return agreementNo; + } + + public void setAgreementNo(String agreementNo) { + this.agreementNo = agreementNo; + } + + public String getAgreementSource() { + return agreementSource; + } + + public void setAgreementSource(String agreementSource) { + this.agreementSource = agreementSource; + } + + public String getAgreementSourceName() { + return agreementSourceName; + } + + public void setAgreementSourceName(String agreementSourceName) { + this.agreementSourceName = agreementSourceName; + } + + public String getAgreementStartDate() { + return agreementStartDate; + } + + public void setAgreementStartDate(String agreementStartDate) { + this.agreementStartDate = agreementStartDate; + } + + public String getAgreementType() { + return agreementType; + } + + public void setAgreementType(String agreementType) { + this.agreementType = agreementType; + } + + public String getAgreementTypeName() { + return agreementTypeName; + } + + public void setAgreementTypeName(String agreementTypeName) { + this.agreementTypeName = agreementTypeName; + } + + public String getApprovalStatus() { + return approvalStatus; + } + + public void setApprovalStatus(String approvalStatus) { + this.approvalStatus = approvalStatus; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getCreateUser() { + return createUser; + } + + public void setCreateUser(String createUser) { + this.createUser = createUser; + } + + public String getCreateUserName() { + return createUserName; + } + + public void setCreateUserName(String createUserName) { + this.createUserName = createUserName; + } + + public String getCustomerId() { + return customerId; + } + + public void setCustomerId(String customerId) { + this.customerId = customerId; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDirector() { + return director; + } + + public void setDirector(String director) { + this.director = director; + } + + public String getEstimateSignDate() { + return estimateSignDate; + } + + public void setEstimateSignDate(String estimateSignDate) { + this.estimateSignDate = estimateSignDate; + } + + public String getFirstParty() { + return firstParty; + } + + public void setFirstParty(String firstParty) { + this.firstParty = firstParty; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getIsDel() { + return isDel; + } + + public void setIsDel(String isDel) { + this.isDel = isDel; + } + + public String getMinioFileName() { + return minioFileName; + } + + public void setMinioFileName(String minioFileName) { + this.minioFileName = minioFileName; + } + + public String getOrderIdList() { + return orderIdList; + } + + public void setOrderIdList(String orderIdList) { + this.orderIdList = orderIdList; + } + + public String getOrderList() { + return orderList; + } + + public void setOrderList(String orderList) { + this.orderList = orderList; + } + + public String getPaymentList() { + return paymentList; + } + + public void setPaymentList(String paymentList) { + this.paymentList = paymentList; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + public String getSecondParty() { + return secondParty; + } + + public void setSecondParty(String secondParty) { + this.secondParty = secondParty; + } + + 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; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt index 85756b0..36059c5 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt @@ -65,4 +65,8 @@ const val USER_ID = "userId" const val PRIVACY_CHECK_BOX = "privacyCheckBox" const val PUSH_SETTING = "pushSetting" + const val METERAGE_TRAIN_FORM_ID = "jlglpxjhsp" + const val STANDARD_FILE_FORM_ID = "jlglwjsp" + const val CERTIFICATE_REPORT_FORM_ID = "ywglzsbg" + const val CONTRACT_FORM_ID = "cwczht" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt b/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt index da58079..99f3bb1 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt @@ -2,37 +2,42 @@ object SearchType { /** + * 首页模糊搜索 + * */ + const val All = "0" + + /** * 搜索仪器设备 * */ - const val Equipment = "0" + const val Equipment = "1" /** * 搜索标准装置 * */ - const val StandardDevice = "1" + const val StandardDevice = "2" /** * 搜索委托书需求 * */ - const val Entrust = "2" + const val Entrust = "3" /** * 搜索能力 * */ - const val Capability = "3" + const val Capability = "4" /** * 搜索计量培训 * */ - const val MeterageTrain = "4" + const val MeterageTrain = "5" /** * 搜索客户 * */ - const val Customer = "5" + const val Customer = "6" /** - * 首页模糊搜索 + * 搜索仪器设备 * */ - const val All = "6" + const val Contract = "7" } 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 3bd698a..bc4d694 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 @@ -446,4 +446,15 @@ @QueryMap limit: Map, @QueryMap offset: Map ): String + + /** + * 合同列表 + */ + @POST("/finance/agreement/listPage") + suspend fun getContractList( + @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 9e7556b..1aaabee 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 @@ -459,7 +459,6 @@ effectiveCompany: String, trainStartTime: String, trainEndTime: String, - formId: String, ids: Array, offset: Int ): String { @@ -473,7 +472,7 @@ param.addProperty("effectiveCompany", effectiveCompany) param.addProperty("trainStartTime", trainStartTime) param.addProperty("trainEndTime", trainEndTime) - param.addProperty("formId", formId) + param.addProperty("formId", LocaleConstant.METERAGE_TRAIN_FORM_ID) param.add("ids", gson.toJsonTree(ids, typeToken).asJsonArray) val requestBody = param.toString().toRequestBody( @@ -843,7 +842,7 @@ offset: Int ): String { val param = JsonObject() - param.addProperty("formId", "jlglwjsp") + param.addProperty("formId", LocaleConstant.STANDARD_FILE_FORM_ID) param.addProperty("fileType", fileType) param.addProperty("fileName", fileName) param.addProperty("fileNo", fileNo) @@ -884,7 +883,7 @@ offset: Int ): String { val param = JsonObject() - param.addProperty("formId", "ywglzsbg") + param.addProperty("formId", LocaleConstant.CERTIFICATE_REPORT_FORM_ID) param.addProperty("approvalStatus", approvalStatus) param.addProperty("certificateReportCode", certificateReportCode) param.addProperty("customerName", customerName) @@ -925,7 +924,7 @@ */ suspend fun submit(id: String): String { val param = JsonObject() - param.addProperty("formId", "ywglzsbg") + param.addProperty("formId", LocaleConstant.CERTIFICATE_REPORT_FORM_ID) param.addProperty("id", id) val requestBody = param.toString().toRequestBody( "application/json;charset=UTF-8".toMediaType() @@ -1009,4 +1008,47 @@ AuthenticationHelper.token!!, requestBody, limitMap, offsetMap ) } + + /** + * 合同列表 + */ + suspend fun getContractList( + customerId: String, + agreementKind: String, + agreementName: String, + agreementType: String, + agreementNo: String, + estimateSignStartDate: String, + estimateSignEndDate: String, + firstParty: String, + status: String, + ids: Array, + offset: Int + ): String { + val param = JsonObject() + param.addProperty("customerId", customerId) + param.addProperty("agreementKind", agreementKind) + param.addProperty("agreementName", agreementName) + param.addProperty("agreementType", agreementType) + param.addProperty("agreementNo", agreementNo) + param.addProperty("estimateSignStartDate", estimateSignStartDate) + param.addProperty("estimateSignEndDate", estimateSignEndDate) + param.addProperty("firstParty", firstParty) + param.addProperty("formId", LocaleConstant.CONTRACT_FORM_ID) + param.addProperty("status", status) + param.add("ids", gson.toJsonTree(ids, typeToken).asJsonArray) + + val requestBody = param.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + + val limitMap = HashMap() + limitMap["limit"] = LocaleConstant.PAGE_LIMIT + + val offsetMap = HashMap() + offsetMap["offset"] = offset + return api.getContractList( + AuthenticationHelper.token!!, requestBody, limitMap, offsetMap + ) + } } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 9fc7c01..78d7828 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -71,6 +71,7 @@ + @@ -85,6 +86,8 @@ + + diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt index 71fe5a8..ad81434 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt @@ -170,7 +170,7 @@ "标准规范" -> requireContext().navigatePageTo() "能力列表" -> requireContext().navigatePageTo() "计量培训" -> requireContext().navigatePageTo() -// "合同发票" -> requireContext().navigatePageTo() + "合同发票" -> requireContext().navigatePageTo() // "业务统计" -> requireContext().navigatePageTo() "客户列表" -> requireContext().navigatePageTo() // "外场检测" -> requireContext().navigatePageTo() diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt index b47cb32..b12a0bf 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt @@ -184,7 +184,7 @@ requireContext().navigatePageTo() } - //TODO 未实现 + //TODO 通过接口修改数据库字段实现 pushSettingSwitch.setOnCheckedChangeListener { _, isChecked -> SaveKeyValues.putValue(LocaleConstant.PUSH_SETTING, isChecked) if (isChecked) { diff --git a/app/src/main/java/com/casic/xz/meterage/model/ContractListModel.java b/app/src/main/java/com/casic/xz/meterage/model/ContractListModel.java new file mode 100644 index 0000000..111ff52 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/model/ContractListModel.java @@ -0,0 +1,364 @@ +package com.casic.xz.meterage.model; + +import java.util.List; + +public class ContractListModel { + + 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 agreementAmount; + private String agreementEndDate; + private String agreementImportantContent; + private String agreementKind; + private String agreementKindName; + private String agreementName; + private String agreementNo; + private String agreementSource; + private String agreementSourceName; + private String agreementStartDate; + private String agreementType; + private String agreementTypeName; + private String approvalStatus; + private String createTime; + private String createUser; + private String createUserName; + private String customerId; + private String deptId; + private String deptName; + private String director; + private String estimateSignDate; + private String firstParty; + private String id; + private String isDel; + private String minioFileName; + private String orderIdList; + private String orderList; + private String paymentList; + private String processId; + private String remark; + private String secondParty; + private String status; + private String statusName; + private String updateTime; + + public String getAgreementAmount() { + return agreementAmount; + } + + public void setAgreementAmount(String agreementAmount) { + this.agreementAmount = agreementAmount; + } + + public String getAgreementEndDate() { + return agreementEndDate; + } + + public void setAgreementEndDate(String agreementEndDate) { + this.agreementEndDate = agreementEndDate; + } + + public String getAgreementImportantContent() { + return agreementImportantContent; + } + + public void setAgreementImportantContent(String agreementImportantContent) { + this.agreementImportantContent = agreementImportantContent; + } + + public String getAgreementKind() { + return agreementKind; + } + + public void setAgreementKind(String agreementKind) { + this.agreementKind = agreementKind; + } + + public String getAgreementKindName() { + return agreementKindName; + } + + public void setAgreementKindName(String agreementKindName) { + this.agreementKindName = agreementKindName; + } + + public String getAgreementName() { + return agreementName; + } + + public void setAgreementName(String agreementName) { + this.agreementName = agreementName; + } + + public String getAgreementNo() { + return agreementNo; + } + + public void setAgreementNo(String agreementNo) { + this.agreementNo = agreementNo; + } + + public String getAgreementSource() { + return agreementSource; + } + + public void setAgreementSource(String agreementSource) { + this.agreementSource = agreementSource; + } + + public String getAgreementSourceName() { + return agreementSourceName; + } + + public void setAgreementSourceName(String agreementSourceName) { + this.agreementSourceName = agreementSourceName; + } + + public String getAgreementStartDate() { + return agreementStartDate; + } + + public void setAgreementStartDate(String agreementStartDate) { + this.agreementStartDate = agreementStartDate; + } + + public String getAgreementType() { + return agreementType; + } + + public void setAgreementType(String agreementType) { + this.agreementType = agreementType; + } + + public String getAgreementTypeName() { + return agreementTypeName; + } + + public void setAgreementTypeName(String agreementTypeName) { + this.agreementTypeName = agreementTypeName; + } + + public String getApprovalStatus() { + return approvalStatus; + } + + public void setApprovalStatus(String approvalStatus) { + this.approvalStatus = approvalStatus; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getCreateUser() { + return createUser; + } + + public void setCreateUser(String createUser) { + this.createUser = createUser; + } + + public String getCreateUserName() { + return createUserName; + } + + public void setCreateUserName(String createUserName) { + this.createUserName = createUserName; + } + + public String getCustomerId() { + return customerId; + } + + public void setCustomerId(String customerId) { + this.customerId = customerId; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDirector() { + return director; + } + + public void setDirector(String director) { + this.director = director; + } + + public String getEstimateSignDate() { + return estimateSignDate; + } + + public void setEstimateSignDate(String estimateSignDate) { + this.estimateSignDate = estimateSignDate; + } + + public String getFirstParty() { + return firstParty; + } + + public void setFirstParty(String firstParty) { + this.firstParty = firstParty; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getIsDel() { + return isDel; + } + + public void setIsDel(String isDel) { + this.isDel = isDel; + } + + public String getMinioFileName() { + return minioFileName; + } + + public void setMinioFileName(String minioFileName) { + this.minioFileName = minioFileName; + } + + public String getOrderIdList() { + return orderIdList; + } + + public void setOrderIdList(String orderIdList) { + this.orderIdList = orderIdList; + } + + public String getOrderList() { + return orderList; + } + + public void setOrderList(String orderList) { + this.orderList = orderList; + } + + public String getPaymentList() { + return paymentList; + } + + public void setPaymentList(String paymentList) { + this.paymentList = paymentList; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + public String getSecondParty() { + return secondParty; + } + + public void setSecondParty(String secondParty) { + this.secondParty = secondParty; + } + + 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; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt index 85756b0..36059c5 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt @@ -65,4 +65,8 @@ const val USER_ID = "userId" const val PRIVACY_CHECK_BOX = "privacyCheckBox" const val PUSH_SETTING = "pushSetting" + const val METERAGE_TRAIN_FORM_ID = "jlglpxjhsp" + const val STANDARD_FILE_FORM_ID = "jlglwjsp" + const val CERTIFICATE_REPORT_FORM_ID = "ywglzsbg" + const val CONTRACT_FORM_ID = "cwczht" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt b/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt index da58079..99f3bb1 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt @@ -2,37 +2,42 @@ object SearchType { /** + * 首页模糊搜索 + * */ + const val All = "0" + + /** * 搜索仪器设备 * */ - const val Equipment = "0" + const val Equipment = "1" /** * 搜索标准装置 * */ - const val StandardDevice = "1" + const val StandardDevice = "2" /** * 搜索委托书需求 * */ - const val Entrust = "2" + const val Entrust = "3" /** * 搜索能力 * */ - const val Capability = "3" + const val Capability = "4" /** * 搜索计量培训 * */ - const val MeterageTrain = "4" + const val MeterageTrain = "5" /** * 搜索客户 * */ - const val Customer = "5" + const val Customer = "6" /** - * 首页模糊搜索 + * 搜索仪器设备 * */ - const val All = "6" + const val Contract = "7" } 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 3bd698a..bc4d694 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 @@ -446,4 +446,15 @@ @QueryMap limit: Map, @QueryMap offset: Map ): String + + /** + * 合同列表 + */ + @POST("/finance/agreement/listPage") + suspend fun getContractList( + @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 9e7556b..1aaabee 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 @@ -459,7 +459,6 @@ effectiveCompany: String, trainStartTime: String, trainEndTime: String, - formId: String, ids: Array, offset: Int ): String { @@ -473,7 +472,7 @@ param.addProperty("effectiveCompany", effectiveCompany) param.addProperty("trainStartTime", trainStartTime) param.addProperty("trainEndTime", trainEndTime) - param.addProperty("formId", formId) + param.addProperty("formId", LocaleConstant.METERAGE_TRAIN_FORM_ID) param.add("ids", gson.toJsonTree(ids, typeToken).asJsonArray) val requestBody = param.toString().toRequestBody( @@ -843,7 +842,7 @@ offset: Int ): String { val param = JsonObject() - param.addProperty("formId", "jlglwjsp") + param.addProperty("formId", LocaleConstant.STANDARD_FILE_FORM_ID) param.addProperty("fileType", fileType) param.addProperty("fileName", fileName) param.addProperty("fileNo", fileNo) @@ -884,7 +883,7 @@ offset: Int ): String { val param = JsonObject() - param.addProperty("formId", "ywglzsbg") + param.addProperty("formId", LocaleConstant.CERTIFICATE_REPORT_FORM_ID) param.addProperty("approvalStatus", approvalStatus) param.addProperty("certificateReportCode", certificateReportCode) param.addProperty("customerName", customerName) @@ -925,7 +924,7 @@ */ suspend fun submit(id: String): String { val param = JsonObject() - param.addProperty("formId", "ywglzsbg") + param.addProperty("formId", LocaleConstant.CERTIFICATE_REPORT_FORM_ID) param.addProperty("id", id) val requestBody = param.toString().toRequestBody( "application/json;charset=UTF-8".toMediaType() @@ -1009,4 +1008,47 @@ AuthenticationHelper.token!!, requestBody, limitMap, offsetMap ) } + + /** + * 合同列表 + */ + suspend fun getContractList( + customerId: String, + agreementKind: String, + agreementName: String, + agreementType: String, + agreementNo: String, + estimateSignStartDate: String, + estimateSignEndDate: String, + firstParty: String, + status: String, + ids: Array, + offset: Int + ): String { + val param = JsonObject() + param.addProperty("customerId", customerId) + param.addProperty("agreementKind", agreementKind) + param.addProperty("agreementName", agreementName) + param.addProperty("agreementType", agreementType) + param.addProperty("agreementNo", agreementNo) + param.addProperty("estimateSignStartDate", estimateSignStartDate) + param.addProperty("estimateSignEndDate", estimateSignEndDate) + param.addProperty("firstParty", firstParty) + param.addProperty("formId", LocaleConstant.CONTRACT_FORM_ID) + param.addProperty("status", status) + param.add("ids", gson.toJsonTree(ids, typeToken).asJsonArray) + + val requestBody = param.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + + val limitMap = HashMap() + limitMap["limit"] = LocaleConstant.PAGE_LIMIT + + val offsetMap = HashMap() + offsetMap["offset"] = offset + return api.getContractList( + AuthenticationHelper.token!!, requestBody, limitMap, offsetMap + ) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/ContractInvoiceActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/ContractInvoiceActivity.kt new file mode 100644 index 0000000..96148a3 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/home/ContractInvoiceActivity.kt @@ -0,0 +1,192 @@ +package com.casic.xz.meterage.view.home + +import android.content.Context +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration +import com.casic.xz.meterage.R +import com.casic.xz.meterage.base.ApplicationBaseActivity +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.model.ContractListModel +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.view.search.SearchContractActivity +import com.casic.xz.meterage.vm.ContractInvoiceViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +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_contract_invoice.* +import kotlinx.android.synthetic.main.include_empty_view.* +import kotlinx.android.synthetic.main.include_search_title.* + +class ContractInvoiceActivity : ApplicationBaseActivity() { + + private var context: Context = this@ContractInvoiceActivity + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var contractViewModel: ContractInvoiceViewModel + private lateinit var contractAdapter: NormalRecyclerAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.activity_contract_invoice + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "合同发票" + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + contractViewModel = ViewModelProvider(this)[ContractInvoiceViewModel::class.java] + contractViewModel.contractList.observe(this) { + if (it.code == 200) { + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + contractLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows) + contractLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023041001) + } + } + } + + override fun observeRequestState() { + contractViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + rightOperateView.setOnClickListener { + navigatePageTo() + } + + contractLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getContractListByPage() + } + + contractLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getContractListByPage() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + getContractListByPage() + } + + private fun getContractListByPage() { + contractViewModel.getContractList( + "", + "", + "", + "", + "", + "1", + "", + "", + "", + arrayOf(), + pageIndex + ) + } + + private val callback = Handler.Callback { + when (it.what) { + 2023041001 -> { + if (isRefresh || isLoadMore) { + contractAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无合同") { + pageIndex = 1 + getContractListByPage() + } + } else { + emptyView!!.hide() + contractAdapter = object : + NormalRecyclerAdapter( + R.layout.item_contract_rv_l, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, + position: Int, + item: ContractListModel.DataModel.RowsModel + ) { + viewHolder.setText(R.id.contractNameView, item.agreementName) + .setText(R.id.contractStateView, item.statusName) + .setText(R.id.contractCodeView, "合同编号:${item.agreementNo}") + .setText(R.id.firstPartNameView, "甲方单位:${item.firstParty}") + .setText( + R.id.startDateView, + "签订日期:${item.estimateSignDate.formatToYearMonthDay()}" + ) + + if (item.statusName.contains("已完成")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.green.convertColor(context) + ) + } else if (item.statusName.contains("未完成")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.red.convertColor(context) + ) + } else if (item.statusName.contains("已废止")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.gray.convertColor(context) + ) + } + } + } + contractRecyclerView.addItemDecoration( + DividerItemDecoration(this, DividerItemDecoration.VERTICAL) + ) + contractRecyclerView.adapter = contractAdapter + contractAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, t: ContractListModel.DataModel.RowsModel + ) { +// navigatePageTo(t.id) + } + }) + } + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 9fc7c01..78d7828 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -71,6 +71,7 @@ + @@ -85,6 +86,8 @@ + + diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt index 71fe5a8..ad81434 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt @@ -170,7 +170,7 @@ "标准规范" -> requireContext().navigatePageTo() "能力列表" -> requireContext().navigatePageTo() "计量培训" -> requireContext().navigatePageTo() -// "合同发票" -> requireContext().navigatePageTo() + "合同发票" -> requireContext().navigatePageTo() // "业务统计" -> requireContext().navigatePageTo() "客户列表" -> requireContext().navigatePageTo() // "外场检测" -> requireContext().navigatePageTo() diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt index b47cb32..b12a0bf 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt @@ -184,7 +184,7 @@ requireContext().navigatePageTo() } - //TODO 未实现 + //TODO 通过接口修改数据库字段实现 pushSettingSwitch.setOnCheckedChangeListener { _, isChecked -> SaveKeyValues.putValue(LocaleConstant.PUSH_SETTING, isChecked) if (isChecked) { diff --git a/app/src/main/java/com/casic/xz/meterage/model/ContractListModel.java b/app/src/main/java/com/casic/xz/meterage/model/ContractListModel.java new file mode 100644 index 0000000..111ff52 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/model/ContractListModel.java @@ -0,0 +1,364 @@ +package com.casic.xz.meterage.model; + +import java.util.List; + +public class ContractListModel { + + 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 agreementAmount; + private String agreementEndDate; + private String agreementImportantContent; + private String agreementKind; + private String agreementKindName; + private String agreementName; + private String agreementNo; + private String agreementSource; + private String agreementSourceName; + private String agreementStartDate; + private String agreementType; + private String agreementTypeName; + private String approvalStatus; + private String createTime; + private String createUser; + private String createUserName; + private String customerId; + private String deptId; + private String deptName; + private String director; + private String estimateSignDate; + private String firstParty; + private String id; + private String isDel; + private String minioFileName; + private String orderIdList; + private String orderList; + private String paymentList; + private String processId; + private String remark; + private String secondParty; + private String status; + private String statusName; + private String updateTime; + + public String getAgreementAmount() { + return agreementAmount; + } + + public void setAgreementAmount(String agreementAmount) { + this.agreementAmount = agreementAmount; + } + + public String getAgreementEndDate() { + return agreementEndDate; + } + + public void setAgreementEndDate(String agreementEndDate) { + this.agreementEndDate = agreementEndDate; + } + + public String getAgreementImportantContent() { + return agreementImportantContent; + } + + public void setAgreementImportantContent(String agreementImportantContent) { + this.agreementImportantContent = agreementImportantContent; + } + + public String getAgreementKind() { + return agreementKind; + } + + public void setAgreementKind(String agreementKind) { + this.agreementKind = agreementKind; + } + + public String getAgreementKindName() { + return agreementKindName; + } + + public void setAgreementKindName(String agreementKindName) { + this.agreementKindName = agreementKindName; + } + + public String getAgreementName() { + return agreementName; + } + + public void setAgreementName(String agreementName) { + this.agreementName = agreementName; + } + + public String getAgreementNo() { + return agreementNo; + } + + public void setAgreementNo(String agreementNo) { + this.agreementNo = agreementNo; + } + + public String getAgreementSource() { + return agreementSource; + } + + public void setAgreementSource(String agreementSource) { + this.agreementSource = agreementSource; + } + + public String getAgreementSourceName() { + return agreementSourceName; + } + + public void setAgreementSourceName(String agreementSourceName) { + this.agreementSourceName = agreementSourceName; + } + + public String getAgreementStartDate() { + return agreementStartDate; + } + + public void setAgreementStartDate(String agreementStartDate) { + this.agreementStartDate = agreementStartDate; + } + + public String getAgreementType() { + return agreementType; + } + + public void setAgreementType(String agreementType) { + this.agreementType = agreementType; + } + + public String getAgreementTypeName() { + return agreementTypeName; + } + + public void setAgreementTypeName(String agreementTypeName) { + this.agreementTypeName = agreementTypeName; + } + + public String getApprovalStatus() { + return approvalStatus; + } + + public void setApprovalStatus(String approvalStatus) { + this.approvalStatus = approvalStatus; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getCreateUser() { + return createUser; + } + + public void setCreateUser(String createUser) { + this.createUser = createUser; + } + + public String getCreateUserName() { + return createUserName; + } + + public void setCreateUserName(String createUserName) { + this.createUserName = createUserName; + } + + public String getCustomerId() { + return customerId; + } + + public void setCustomerId(String customerId) { + this.customerId = customerId; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDirector() { + return director; + } + + public void setDirector(String director) { + this.director = director; + } + + public String getEstimateSignDate() { + return estimateSignDate; + } + + public void setEstimateSignDate(String estimateSignDate) { + this.estimateSignDate = estimateSignDate; + } + + public String getFirstParty() { + return firstParty; + } + + public void setFirstParty(String firstParty) { + this.firstParty = firstParty; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getIsDel() { + return isDel; + } + + public void setIsDel(String isDel) { + this.isDel = isDel; + } + + public String getMinioFileName() { + return minioFileName; + } + + public void setMinioFileName(String minioFileName) { + this.minioFileName = minioFileName; + } + + public String getOrderIdList() { + return orderIdList; + } + + public void setOrderIdList(String orderIdList) { + this.orderIdList = orderIdList; + } + + public String getOrderList() { + return orderList; + } + + public void setOrderList(String orderList) { + this.orderList = orderList; + } + + public String getPaymentList() { + return paymentList; + } + + public void setPaymentList(String paymentList) { + this.paymentList = paymentList; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + public String getSecondParty() { + return secondParty; + } + + public void setSecondParty(String secondParty) { + this.secondParty = secondParty; + } + + 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; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt index 85756b0..36059c5 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt @@ -65,4 +65,8 @@ const val USER_ID = "userId" const val PRIVACY_CHECK_BOX = "privacyCheckBox" const val PUSH_SETTING = "pushSetting" + const val METERAGE_TRAIN_FORM_ID = "jlglpxjhsp" + const val STANDARD_FILE_FORM_ID = "jlglwjsp" + const val CERTIFICATE_REPORT_FORM_ID = "ywglzsbg" + const val CONTRACT_FORM_ID = "cwczht" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt b/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt index da58079..99f3bb1 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt @@ -2,37 +2,42 @@ object SearchType { /** + * 首页模糊搜索 + * */ + const val All = "0" + + /** * 搜索仪器设备 * */ - const val Equipment = "0" + const val Equipment = "1" /** * 搜索标准装置 * */ - const val StandardDevice = "1" + const val StandardDevice = "2" /** * 搜索委托书需求 * */ - const val Entrust = "2" + const val Entrust = "3" /** * 搜索能力 * */ - const val Capability = "3" + const val Capability = "4" /** * 搜索计量培训 * */ - const val MeterageTrain = "4" + const val MeterageTrain = "5" /** * 搜索客户 * */ - const val Customer = "5" + const val Customer = "6" /** - * 首页模糊搜索 + * 搜索仪器设备 * */ - const val All = "6" + const val Contract = "7" } 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 3bd698a..bc4d694 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 @@ -446,4 +446,15 @@ @QueryMap limit: Map, @QueryMap offset: Map ): String + + /** + * 合同列表 + */ + @POST("/finance/agreement/listPage") + suspend fun getContractList( + @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 9e7556b..1aaabee 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 @@ -459,7 +459,6 @@ effectiveCompany: String, trainStartTime: String, trainEndTime: String, - formId: String, ids: Array, offset: Int ): String { @@ -473,7 +472,7 @@ param.addProperty("effectiveCompany", effectiveCompany) param.addProperty("trainStartTime", trainStartTime) param.addProperty("trainEndTime", trainEndTime) - param.addProperty("formId", formId) + param.addProperty("formId", LocaleConstant.METERAGE_TRAIN_FORM_ID) param.add("ids", gson.toJsonTree(ids, typeToken).asJsonArray) val requestBody = param.toString().toRequestBody( @@ -843,7 +842,7 @@ offset: Int ): String { val param = JsonObject() - param.addProperty("formId", "jlglwjsp") + param.addProperty("formId", LocaleConstant.STANDARD_FILE_FORM_ID) param.addProperty("fileType", fileType) param.addProperty("fileName", fileName) param.addProperty("fileNo", fileNo) @@ -884,7 +883,7 @@ offset: Int ): String { val param = JsonObject() - param.addProperty("formId", "ywglzsbg") + param.addProperty("formId", LocaleConstant.CERTIFICATE_REPORT_FORM_ID) param.addProperty("approvalStatus", approvalStatus) param.addProperty("certificateReportCode", certificateReportCode) param.addProperty("customerName", customerName) @@ -925,7 +924,7 @@ */ suspend fun submit(id: String): String { val param = JsonObject() - param.addProperty("formId", "ywglzsbg") + param.addProperty("formId", LocaleConstant.CERTIFICATE_REPORT_FORM_ID) param.addProperty("id", id) val requestBody = param.toString().toRequestBody( "application/json;charset=UTF-8".toMediaType() @@ -1009,4 +1008,47 @@ AuthenticationHelper.token!!, requestBody, limitMap, offsetMap ) } + + /** + * 合同列表 + */ + suspend fun getContractList( + customerId: String, + agreementKind: String, + agreementName: String, + agreementType: String, + agreementNo: String, + estimateSignStartDate: String, + estimateSignEndDate: String, + firstParty: String, + status: String, + ids: Array, + offset: Int + ): String { + val param = JsonObject() + param.addProperty("customerId", customerId) + param.addProperty("agreementKind", agreementKind) + param.addProperty("agreementName", agreementName) + param.addProperty("agreementType", agreementType) + param.addProperty("agreementNo", agreementNo) + param.addProperty("estimateSignStartDate", estimateSignStartDate) + param.addProperty("estimateSignEndDate", estimateSignEndDate) + param.addProperty("firstParty", firstParty) + param.addProperty("formId", LocaleConstant.CONTRACT_FORM_ID) + param.addProperty("status", status) + param.add("ids", gson.toJsonTree(ids, typeToken).asJsonArray) + + val requestBody = param.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + + val limitMap = HashMap() + limitMap["limit"] = LocaleConstant.PAGE_LIMIT + + val offsetMap = HashMap() + offsetMap["offset"] = offset + return api.getContractList( + AuthenticationHelper.token!!, requestBody, limitMap, offsetMap + ) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/ContractInvoiceActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/ContractInvoiceActivity.kt new file mode 100644 index 0000000..96148a3 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/home/ContractInvoiceActivity.kt @@ -0,0 +1,192 @@ +package com.casic.xz.meterage.view.home + +import android.content.Context +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration +import com.casic.xz.meterage.R +import com.casic.xz.meterage.base.ApplicationBaseActivity +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.model.ContractListModel +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.view.search.SearchContractActivity +import com.casic.xz.meterage.vm.ContractInvoiceViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +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_contract_invoice.* +import kotlinx.android.synthetic.main.include_empty_view.* +import kotlinx.android.synthetic.main.include_search_title.* + +class ContractInvoiceActivity : ApplicationBaseActivity() { + + private var context: Context = this@ContractInvoiceActivity + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var contractViewModel: ContractInvoiceViewModel + private lateinit var contractAdapter: NormalRecyclerAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.activity_contract_invoice + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "合同发票" + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + contractViewModel = ViewModelProvider(this)[ContractInvoiceViewModel::class.java] + contractViewModel.contractList.observe(this) { + if (it.code == 200) { + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + contractLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows) + contractLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023041001) + } + } + } + + override fun observeRequestState() { + contractViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + rightOperateView.setOnClickListener { + navigatePageTo() + } + + contractLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getContractListByPage() + } + + contractLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getContractListByPage() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + getContractListByPage() + } + + private fun getContractListByPage() { + contractViewModel.getContractList( + "", + "", + "", + "", + "", + "1", + "", + "", + "", + arrayOf(), + pageIndex + ) + } + + private val callback = Handler.Callback { + when (it.what) { + 2023041001 -> { + if (isRefresh || isLoadMore) { + contractAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无合同") { + pageIndex = 1 + getContractListByPage() + } + } else { + emptyView!!.hide() + contractAdapter = object : + NormalRecyclerAdapter( + R.layout.item_contract_rv_l, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, + position: Int, + item: ContractListModel.DataModel.RowsModel + ) { + viewHolder.setText(R.id.contractNameView, item.agreementName) + .setText(R.id.contractStateView, item.statusName) + .setText(R.id.contractCodeView, "合同编号:${item.agreementNo}") + .setText(R.id.firstPartNameView, "甲方单位:${item.firstParty}") + .setText( + R.id.startDateView, + "签订日期:${item.estimateSignDate.formatToYearMonthDay()}" + ) + + if (item.statusName.contains("已完成")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.green.convertColor(context) + ) + } else if (item.statusName.contains("未完成")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.red.convertColor(context) + ) + } else if (item.statusName.contains("已废止")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.gray.convertColor(context) + ) + } + } + } + contractRecyclerView.addItemDecoration( + DividerItemDecoration(this, DividerItemDecoration.VERTICAL) + ) + contractRecyclerView.adapter = contractAdapter + contractAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, t: ContractListModel.DataModel.RowsModel + ) { +// navigatePageTo(t.id) + } + }) + } + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt index 373c386..078f497 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt @@ -117,7 +117,6 @@ "", "", "", - "jlglpxjhsp", arrayOf(), pageIndex ) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 9fc7c01..78d7828 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -71,6 +71,7 @@ + @@ -85,6 +86,8 @@ + + diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt index 71fe5a8..ad81434 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt @@ -170,7 +170,7 @@ "标准规范" -> requireContext().navigatePageTo() "能力列表" -> requireContext().navigatePageTo() "计量培训" -> requireContext().navigatePageTo() -// "合同发票" -> requireContext().navigatePageTo() + "合同发票" -> requireContext().navigatePageTo() // "业务统计" -> requireContext().navigatePageTo() "客户列表" -> requireContext().navigatePageTo() // "外场检测" -> requireContext().navigatePageTo() diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt index b47cb32..b12a0bf 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt @@ -184,7 +184,7 @@ requireContext().navigatePageTo() } - //TODO 未实现 + //TODO 通过接口修改数据库字段实现 pushSettingSwitch.setOnCheckedChangeListener { _, isChecked -> SaveKeyValues.putValue(LocaleConstant.PUSH_SETTING, isChecked) if (isChecked) { diff --git a/app/src/main/java/com/casic/xz/meterage/model/ContractListModel.java b/app/src/main/java/com/casic/xz/meterage/model/ContractListModel.java new file mode 100644 index 0000000..111ff52 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/model/ContractListModel.java @@ -0,0 +1,364 @@ +package com.casic.xz.meterage.model; + +import java.util.List; + +public class ContractListModel { + + 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 agreementAmount; + private String agreementEndDate; + private String agreementImportantContent; + private String agreementKind; + private String agreementKindName; + private String agreementName; + private String agreementNo; + private String agreementSource; + private String agreementSourceName; + private String agreementStartDate; + private String agreementType; + private String agreementTypeName; + private String approvalStatus; + private String createTime; + private String createUser; + private String createUserName; + private String customerId; + private String deptId; + private String deptName; + private String director; + private String estimateSignDate; + private String firstParty; + private String id; + private String isDel; + private String minioFileName; + private String orderIdList; + private String orderList; + private String paymentList; + private String processId; + private String remark; + private String secondParty; + private String status; + private String statusName; + private String updateTime; + + public String getAgreementAmount() { + return agreementAmount; + } + + public void setAgreementAmount(String agreementAmount) { + this.agreementAmount = agreementAmount; + } + + public String getAgreementEndDate() { + return agreementEndDate; + } + + public void setAgreementEndDate(String agreementEndDate) { + this.agreementEndDate = agreementEndDate; + } + + public String getAgreementImportantContent() { + return agreementImportantContent; + } + + public void setAgreementImportantContent(String agreementImportantContent) { + this.agreementImportantContent = agreementImportantContent; + } + + public String getAgreementKind() { + return agreementKind; + } + + public void setAgreementKind(String agreementKind) { + this.agreementKind = agreementKind; + } + + public String getAgreementKindName() { + return agreementKindName; + } + + public void setAgreementKindName(String agreementKindName) { + this.agreementKindName = agreementKindName; + } + + public String getAgreementName() { + return agreementName; + } + + public void setAgreementName(String agreementName) { + this.agreementName = agreementName; + } + + public String getAgreementNo() { + return agreementNo; + } + + public void setAgreementNo(String agreementNo) { + this.agreementNo = agreementNo; + } + + public String getAgreementSource() { + return agreementSource; + } + + public void setAgreementSource(String agreementSource) { + this.agreementSource = agreementSource; + } + + public String getAgreementSourceName() { + return agreementSourceName; + } + + public void setAgreementSourceName(String agreementSourceName) { + this.agreementSourceName = agreementSourceName; + } + + public String getAgreementStartDate() { + return agreementStartDate; + } + + public void setAgreementStartDate(String agreementStartDate) { + this.agreementStartDate = agreementStartDate; + } + + public String getAgreementType() { + return agreementType; + } + + public void setAgreementType(String agreementType) { + this.agreementType = agreementType; + } + + public String getAgreementTypeName() { + return agreementTypeName; + } + + public void setAgreementTypeName(String agreementTypeName) { + this.agreementTypeName = agreementTypeName; + } + + public String getApprovalStatus() { + return approvalStatus; + } + + public void setApprovalStatus(String approvalStatus) { + this.approvalStatus = approvalStatus; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getCreateUser() { + return createUser; + } + + public void setCreateUser(String createUser) { + this.createUser = createUser; + } + + public String getCreateUserName() { + return createUserName; + } + + public void setCreateUserName(String createUserName) { + this.createUserName = createUserName; + } + + public String getCustomerId() { + return customerId; + } + + public void setCustomerId(String customerId) { + this.customerId = customerId; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDirector() { + return director; + } + + public void setDirector(String director) { + this.director = director; + } + + public String getEstimateSignDate() { + return estimateSignDate; + } + + public void setEstimateSignDate(String estimateSignDate) { + this.estimateSignDate = estimateSignDate; + } + + public String getFirstParty() { + return firstParty; + } + + public void setFirstParty(String firstParty) { + this.firstParty = firstParty; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getIsDel() { + return isDel; + } + + public void setIsDel(String isDel) { + this.isDel = isDel; + } + + public String getMinioFileName() { + return minioFileName; + } + + public void setMinioFileName(String minioFileName) { + this.minioFileName = minioFileName; + } + + public String getOrderIdList() { + return orderIdList; + } + + public void setOrderIdList(String orderIdList) { + this.orderIdList = orderIdList; + } + + public String getOrderList() { + return orderList; + } + + public void setOrderList(String orderList) { + this.orderList = orderList; + } + + public String getPaymentList() { + return paymentList; + } + + public void setPaymentList(String paymentList) { + this.paymentList = paymentList; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + public String getSecondParty() { + return secondParty; + } + + public void setSecondParty(String secondParty) { + this.secondParty = secondParty; + } + + 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; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt index 85756b0..36059c5 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt @@ -65,4 +65,8 @@ const val USER_ID = "userId" const val PRIVACY_CHECK_BOX = "privacyCheckBox" const val PUSH_SETTING = "pushSetting" + const val METERAGE_TRAIN_FORM_ID = "jlglpxjhsp" + const val STANDARD_FILE_FORM_ID = "jlglwjsp" + const val CERTIFICATE_REPORT_FORM_ID = "ywglzsbg" + const val CONTRACT_FORM_ID = "cwczht" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt b/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt index da58079..99f3bb1 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt @@ -2,37 +2,42 @@ object SearchType { /** + * 首页模糊搜索 + * */ + const val All = "0" + + /** * 搜索仪器设备 * */ - const val Equipment = "0" + const val Equipment = "1" /** * 搜索标准装置 * */ - const val StandardDevice = "1" + const val StandardDevice = "2" /** * 搜索委托书需求 * */ - const val Entrust = "2" + const val Entrust = "3" /** * 搜索能力 * */ - const val Capability = "3" + const val Capability = "4" /** * 搜索计量培训 * */ - const val MeterageTrain = "4" + const val MeterageTrain = "5" /** * 搜索客户 * */ - const val Customer = "5" + const val Customer = "6" /** - * 首页模糊搜索 + * 搜索仪器设备 * */ - const val All = "6" + const val Contract = "7" } 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 3bd698a..bc4d694 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 @@ -446,4 +446,15 @@ @QueryMap limit: Map, @QueryMap offset: Map ): String + + /** + * 合同列表 + */ + @POST("/finance/agreement/listPage") + suspend fun getContractList( + @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 9e7556b..1aaabee 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 @@ -459,7 +459,6 @@ effectiveCompany: String, trainStartTime: String, trainEndTime: String, - formId: String, ids: Array, offset: Int ): String { @@ -473,7 +472,7 @@ param.addProperty("effectiveCompany", effectiveCompany) param.addProperty("trainStartTime", trainStartTime) param.addProperty("trainEndTime", trainEndTime) - param.addProperty("formId", formId) + param.addProperty("formId", LocaleConstant.METERAGE_TRAIN_FORM_ID) param.add("ids", gson.toJsonTree(ids, typeToken).asJsonArray) val requestBody = param.toString().toRequestBody( @@ -843,7 +842,7 @@ offset: Int ): String { val param = JsonObject() - param.addProperty("formId", "jlglwjsp") + param.addProperty("formId", LocaleConstant.STANDARD_FILE_FORM_ID) param.addProperty("fileType", fileType) param.addProperty("fileName", fileName) param.addProperty("fileNo", fileNo) @@ -884,7 +883,7 @@ offset: Int ): String { val param = JsonObject() - param.addProperty("formId", "ywglzsbg") + param.addProperty("formId", LocaleConstant.CERTIFICATE_REPORT_FORM_ID) param.addProperty("approvalStatus", approvalStatus) param.addProperty("certificateReportCode", certificateReportCode) param.addProperty("customerName", customerName) @@ -925,7 +924,7 @@ */ suspend fun submit(id: String): String { val param = JsonObject() - param.addProperty("formId", "ywglzsbg") + param.addProperty("formId", LocaleConstant.CERTIFICATE_REPORT_FORM_ID) param.addProperty("id", id) val requestBody = param.toString().toRequestBody( "application/json;charset=UTF-8".toMediaType() @@ -1009,4 +1008,47 @@ AuthenticationHelper.token!!, requestBody, limitMap, offsetMap ) } + + /** + * 合同列表 + */ + suspend fun getContractList( + customerId: String, + agreementKind: String, + agreementName: String, + agreementType: String, + agreementNo: String, + estimateSignStartDate: String, + estimateSignEndDate: String, + firstParty: String, + status: String, + ids: Array, + offset: Int + ): String { + val param = JsonObject() + param.addProperty("customerId", customerId) + param.addProperty("agreementKind", agreementKind) + param.addProperty("agreementName", agreementName) + param.addProperty("agreementType", agreementType) + param.addProperty("agreementNo", agreementNo) + param.addProperty("estimateSignStartDate", estimateSignStartDate) + param.addProperty("estimateSignEndDate", estimateSignEndDate) + param.addProperty("firstParty", firstParty) + param.addProperty("formId", LocaleConstant.CONTRACT_FORM_ID) + param.addProperty("status", status) + param.add("ids", gson.toJsonTree(ids, typeToken).asJsonArray) + + val requestBody = param.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + + val limitMap = HashMap() + limitMap["limit"] = LocaleConstant.PAGE_LIMIT + + val offsetMap = HashMap() + offsetMap["offset"] = offset + return api.getContractList( + AuthenticationHelper.token!!, requestBody, limitMap, offsetMap + ) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/ContractInvoiceActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/ContractInvoiceActivity.kt new file mode 100644 index 0000000..96148a3 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/home/ContractInvoiceActivity.kt @@ -0,0 +1,192 @@ +package com.casic.xz.meterage.view.home + +import android.content.Context +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration +import com.casic.xz.meterage.R +import com.casic.xz.meterage.base.ApplicationBaseActivity +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.model.ContractListModel +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.view.search.SearchContractActivity +import com.casic.xz.meterage.vm.ContractInvoiceViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +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_contract_invoice.* +import kotlinx.android.synthetic.main.include_empty_view.* +import kotlinx.android.synthetic.main.include_search_title.* + +class ContractInvoiceActivity : ApplicationBaseActivity() { + + private var context: Context = this@ContractInvoiceActivity + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var contractViewModel: ContractInvoiceViewModel + private lateinit var contractAdapter: NormalRecyclerAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.activity_contract_invoice + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "合同发票" + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + contractViewModel = ViewModelProvider(this)[ContractInvoiceViewModel::class.java] + contractViewModel.contractList.observe(this) { + if (it.code == 200) { + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + contractLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows) + contractLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023041001) + } + } + } + + override fun observeRequestState() { + contractViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + rightOperateView.setOnClickListener { + navigatePageTo() + } + + contractLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getContractListByPage() + } + + contractLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getContractListByPage() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + getContractListByPage() + } + + private fun getContractListByPage() { + contractViewModel.getContractList( + "", + "", + "", + "", + "", + "1", + "", + "", + "", + arrayOf(), + pageIndex + ) + } + + private val callback = Handler.Callback { + when (it.what) { + 2023041001 -> { + if (isRefresh || isLoadMore) { + contractAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无合同") { + pageIndex = 1 + getContractListByPage() + } + } else { + emptyView!!.hide() + contractAdapter = object : + NormalRecyclerAdapter( + R.layout.item_contract_rv_l, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, + position: Int, + item: ContractListModel.DataModel.RowsModel + ) { + viewHolder.setText(R.id.contractNameView, item.agreementName) + .setText(R.id.contractStateView, item.statusName) + .setText(R.id.contractCodeView, "合同编号:${item.agreementNo}") + .setText(R.id.firstPartNameView, "甲方单位:${item.firstParty}") + .setText( + R.id.startDateView, + "签订日期:${item.estimateSignDate.formatToYearMonthDay()}" + ) + + if (item.statusName.contains("已完成")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.green.convertColor(context) + ) + } else if (item.statusName.contains("未完成")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.red.convertColor(context) + ) + } else if (item.statusName.contains("已废止")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.gray.convertColor(context) + ) + } + } + } + contractRecyclerView.addItemDecoration( + DividerItemDecoration(this, DividerItemDecoration.VERTICAL) + ) + contractRecyclerView.adapter = contractAdapter + contractAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, t: ContractListModel.DataModel.RowsModel + ) { +// navigatePageTo(t.id) + } + }) + } + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt index 373c386..078f497 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt @@ -117,7 +117,6 @@ "", "", "", - "jlglpxjhsp", arrayOf(), pageIndex ) diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt index 16bcd38..92e256d 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_capability.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* /** @@ -93,7 +93,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_capability + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 9fc7c01..78d7828 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -71,6 +71,7 @@ + @@ -85,6 +86,8 @@ + + diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt index 71fe5a8..ad81434 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt @@ -170,7 +170,7 @@ "标准规范" -> requireContext().navigatePageTo() "能力列表" -> requireContext().navigatePageTo() "计量培训" -> requireContext().navigatePageTo() -// "合同发票" -> requireContext().navigatePageTo() + "合同发票" -> requireContext().navigatePageTo() // "业务统计" -> requireContext().navigatePageTo() "客户列表" -> requireContext().navigatePageTo() // "外场检测" -> requireContext().navigatePageTo() diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt index b47cb32..b12a0bf 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt @@ -184,7 +184,7 @@ requireContext().navigatePageTo() } - //TODO 未实现 + //TODO 通过接口修改数据库字段实现 pushSettingSwitch.setOnCheckedChangeListener { _, isChecked -> SaveKeyValues.putValue(LocaleConstant.PUSH_SETTING, isChecked) if (isChecked) { diff --git a/app/src/main/java/com/casic/xz/meterage/model/ContractListModel.java b/app/src/main/java/com/casic/xz/meterage/model/ContractListModel.java new file mode 100644 index 0000000..111ff52 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/model/ContractListModel.java @@ -0,0 +1,364 @@ +package com.casic.xz.meterage.model; + +import java.util.List; + +public class ContractListModel { + + 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 agreementAmount; + private String agreementEndDate; + private String agreementImportantContent; + private String agreementKind; + private String agreementKindName; + private String agreementName; + private String agreementNo; + private String agreementSource; + private String agreementSourceName; + private String agreementStartDate; + private String agreementType; + private String agreementTypeName; + private String approvalStatus; + private String createTime; + private String createUser; + private String createUserName; + private String customerId; + private String deptId; + private String deptName; + private String director; + private String estimateSignDate; + private String firstParty; + private String id; + private String isDel; + private String minioFileName; + private String orderIdList; + private String orderList; + private String paymentList; + private String processId; + private String remark; + private String secondParty; + private String status; + private String statusName; + private String updateTime; + + public String getAgreementAmount() { + return agreementAmount; + } + + public void setAgreementAmount(String agreementAmount) { + this.agreementAmount = agreementAmount; + } + + public String getAgreementEndDate() { + return agreementEndDate; + } + + public void setAgreementEndDate(String agreementEndDate) { + this.agreementEndDate = agreementEndDate; + } + + public String getAgreementImportantContent() { + return agreementImportantContent; + } + + public void setAgreementImportantContent(String agreementImportantContent) { + this.agreementImportantContent = agreementImportantContent; + } + + public String getAgreementKind() { + return agreementKind; + } + + public void setAgreementKind(String agreementKind) { + this.agreementKind = agreementKind; + } + + public String getAgreementKindName() { + return agreementKindName; + } + + public void setAgreementKindName(String agreementKindName) { + this.agreementKindName = agreementKindName; + } + + public String getAgreementName() { + return agreementName; + } + + public void setAgreementName(String agreementName) { + this.agreementName = agreementName; + } + + public String getAgreementNo() { + return agreementNo; + } + + public void setAgreementNo(String agreementNo) { + this.agreementNo = agreementNo; + } + + public String getAgreementSource() { + return agreementSource; + } + + public void setAgreementSource(String agreementSource) { + this.agreementSource = agreementSource; + } + + public String getAgreementSourceName() { + return agreementSourceName; + } + + public void setAgreementSourceName(String agreementSourceName) { + this.agreementSourceName = agreementSourceName; + } + + public String getAgreementStartDate() { + return agreementStartDate; + } + + public void setAgreementStartDate(String agreementStartDate) { + this.agreementStartDate = agreementStartDate; + } + + public String getAgreementType() { + return agreementType; + } + + public void setAgreementType(String agreementType) { + this.agreementType = agreementType; + } + + public String getAgreementTypeName() { + return agreementTypeName; + } + + public void setAgreementTypeName(String agreementTypeName) { + this.agreementTypeName = agreementTypeName; + } + + public String getApprovalStatus() { + return approvalStatus; + } + + public void setApprovalStatus(String approvalStatus) { + this.approvalStatus = approvalStatus; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getCreateUser() { + return createUser; + } + + public void setCreateUser(String createUser) { + this.createUser = createUser; + } + + public String getCreateUserName() { + return createUserName; + } + + public void setCreateUserName(String createUserName) { + this.createUserName = createUserName; + } + + public String getCustomerId() { + return customerId; + } + + public void setCustomerId(String customerId) { + this.customerId = customerId; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDirector() { + return director; + } + + public void setDirector(String director) { + this.director = director; + } + + public String getEstimateSignDate() { + return estimateSignDate; + } + + public void setEstimateSignDate(String estimateSignDate) { + this.estimateSignDate = estimateSignDate; + } + + public String getFirstParty() { + return firstParty; + } + + public void setFirstParty(String firstParty) { + this.firstParty = firstParty; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getIsDel() { + return isDel; + } + + public void setIsDel(String isDel) { + this.isDel = isDel; + } + + public String getMinioFileName() { + return minioFileName; + } + + public void setMinioFileName(String minioFileName) { + this.minioFileName = minioFileName; + } + + public String getOrderIdList() { + return orderIdList; + } + + public void setOrderIdList(String orderIdList) { + this.orderIdList = orderIdList; + } + + public String getOrderList() { + return orderList; + } + + public void setOrderList(String orderList) { + this.orderList = orderList; + } + + public String getPaymentList() { + return paymentList; + } + + public void setPaymentList(String paymentList) { + this.paymentList = paymentList; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + public String getSecondParty() { + return secondParty; + } + + public void setSecondParty(String secondParty) { + this.secondParty = secondParty; + } + + 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; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt index 85756b0..36059c5 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt @@ -65,4 +65,8 @@ const val USER_ID = "userId" const val PRIVACY_CHECK_BOX = "privacyCheckBox" const val PUSH_SETTING = "pushSetting" + const val METERAGE_TRAIN_FORM_ID = "jlglpxjhsp" + const val STANDARD_FILE_FORM_ID = "jlglwjsp" + const val CERTIFICATE_REPORT_FORM_ID = "ywglzsbg" + const val CONTRACT_FORM_ID = "cwczht" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt b/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt index da58079..99f3bb1 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt @@ -2,37 +2,42 @@ object SearchType { /** + * 首页模糊搜索 + * */ + const val All = "0" + + /** * 搜索仪器设备 * */ - const val Equipment = "0" + const val Equipment = "1" /** * 搜索标准装置 * */ - const val StandardDevice = "1" + const val StandardDevice = "2" /** * 搜索委托书需求 * */ - const val Entrust = "2" + const val Entrust = "3" /** * 搜索能力 * */ - const val Capability = "3" + const val Capability = "4" /** * 搜索计量培训 * */ - const val MeterageTrain = "4" + const val MeterageTrain = "5" /** * 搜索客户 * */ - const val Customer = "5" + const val Customer = "6" /** - * 首页模糊搜索 + * 搜索仪器设备 * */ - const val All = "6" + const val Contract = "7" } 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 3bd698a..bc4d694 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 @@ -446,4 +446,15 @@ @QueryMap limit: Map, @QueryMap offset: Map ): String + + /** + * 合同列表 + */ + @POST("/finance/agreement/listPage") + suspend fun getContractList( + @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 9e7556b..1aaabee 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 @@ -459,7 +459,6 @@ effectiveCompany: String, trainStartTime: String, trainEndTime: String, - formId: String, ids: Array, offset: Int ): String { @@ -473,7 +472,7 @@ param.addProperty("effectiveCompany", effectiveCompany) param.addProperty("trainStartTime", trainStartTime) param.addProperty("trainEndTime", trainEndTime) - param.addProperty("formId", formId) + param.addProperty("formId", LocaleConstant.METERAGE_TRAIN_FORM_ID) param.add("ids", gson.toJsonTree(ids, typeToken).asJsonArray) val requestBody = param.toString().toRequestBody( @@ -843,7 +842,7 @@ offset: Int ): String { val param = JsonObject() - param.addProperty("formId", "jlglwjsp") + param.addProperty("formId", LocaleConstant.STANDARD_FILE_FORM_ID) param.addProperty("fileType", fileType) param.addProperty("fileName", fileName) param.addProperty("fileNo", fileNo) @@ -884,7 +883,7 @@ offset: Int ): String { val param = JsonObject() - param.addProperty("formId", "ywglzsbg") + param.addProperty("formId", LocaleConstant.CERTIFICATE_REPORT_FORM_ID) param.addProperty("approvalStatus", approvalStatus) param.addProperty("certificateReportCode", certificateReportCode) param.addProperty("customerName", customerName) @@ -925,7 +924,7 @@ */ suspend fun submit(id: String): String { val param = JsonObject() - param.addProperty("formId", "ywglzsbg") + param.addProperty("formId", LocaleConstant.CERTIFICATE_REPORT_FORM_ID) param.addProperty("id", id) val requestBody = param.toString().toRequestBody( "application/json;charset=UTF-8".toMediaType() @@ -1009,4 +1008,47 @@ AuthenticationHelper.token!!, requestBody, limitMap, offsetMap ) } + + /** + * 合同列表 + */ + suspend fun getContractList( + customerId: String, + agreementKind: String, + agreementName: String, + agreementType: String, + agreementNo: String, + estimateSignStartDate: String, + estimateSignEndDate: String, + firstParty: String, + status: String, + ids: Array, + offset: Int + ): String { + val param = JsonObject() + param.addProperty("customerId", customerId) + param.addProperty("agreementKind", agreementKind) + param.addProperty("agreementName", agreementName) + param.addProperty("agreementType", agreementType) + param.addProperty("agreementNo", agreementNo) + param.addProperty("estimateSignStartDate", estimateSignStartDate) + param.addProperty("estimateSignEndDate", estimateSignEndDate) + param.addProperty("firstParty", firstParty) + param.addProperty("formId", LocaleConstant.CONTRACT_FORM_ID) + param.addProperty("status", status) + param.add("ids", gson.toJsonTree(ids, typeToken).asJsonArray) + + val requestBody = param.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + + val limitMap = HashMap() + limitMap["limit"] = LocaleConstant.PAGE_LIMIT + + val offsetMap = HashMap() + offsetMap["offset"] = offset + return api.getContractList( + AuthenticationHelper.token!!, requestBody, limitMap, offsetMap + ) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/ContractInvoiceActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/ContractInvoiceActivity.kt new file mode 100644 index 0000000..96148a3 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/home/ContractInvoiceActivity.kt @@ -0,0 +1,192 @@ +package com.casic.xz.meterage.view.home + +import android.content.Context +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration +import com.casic.xz.meterage.R +import com.casic.xz.meterage.base.ApplicationBaseActivity +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.model.ContractListModel +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.view.search.SearchContractActivity +import com.casic.xz.meterage.vm.ContractInvoiceViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +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_contract_invoice.* +import kotlinx.android.synthetic.main.include_empty_view.* +import kotlinx.android.synthetic.main.include_search_title.* + +class ContractInvoiceActivity : ApplicationBaseActivity() { + + private var context: Context = this@ContractInvoiceActivity + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var contractViewModel: ContractInvoiceViewModel + private lateinit var contractAdapter: NormalRecyclerAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.activity_contract_invoice + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "合同发票" + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + contractViewModel = ViewModelProvider(this)[ContractInvoiceViewModel::class.java] + contractViewModel.contractList.observe(this) { + if (it.code == 200) { + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + contractLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows) + contractLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023041001) + } + } + } + + override fun observeRequestState() { + contractViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + rightOperateView.setOnClickListener { + navigatePageTo() + } + + contractLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getContractListByPage() + } + + contractLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getContractListByPage() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + getContractListByPage() + } + + private fun getContractListByPage() { + contractViewModel.getContractList( + "", + "", + "", + "", + "", + "1", + "", + "", + "", + arrayOf(), + pageIndex + ) + } + + private val callback = Handler.Callback { + when (it.what) { + 2023041001 -> { + if (isRefresh || isLoadMore) { + contractAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无合同") { + pageIndex = 1 + getContractListByPage() + } + } else { + emptyView!!.hide() + contractAdapter = object : + NormalRecyclerAdapter( + R.layout.item_contract_rv_l, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, + position: Int, + item: ContractListModel.DataModel.RowsModel + ) { + viewHolder.setText(R.id.contractNameView, item.agreementName) + .setText(R.id.contractStateView, item.statusName) + .setText(R.id.contractCodeView, "合同编号:${item.agreementNo}") + .setText(R.id.firstPartNameView, "甲方单位:${item.firstParty}") + .setText( + R.id.startDateView, + "签订日期:${item.estimateSignDate.formatToYearMonthDay()}" + ) + + if (item.statusName.contains("已完成")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.green.convertColor(context) + ) + } else if (item.statusName.contains("未完成")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.red.convertColor(context) + ) + } else if (item.statusName.contains("已废止")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.gray.convertColor(context) + ) + } + } + } + contractRecyclerView.addItemDecoration( + DividerItemDecoration(this, DividerItemDecoration.VERTICAL) + ) + contractRecyclerView.adapter = contractAdapter + contractAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, t: ContractListModel.DataModel.RowsModel + ) { +// navigatePageTo(t.id) + } + }) + } + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt index 373c386..078f497 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt @@ -117,7 +117,6 @@ "", "", "", - "jlglpxjhsp", arrayOf(), pageIndex ) diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt index 16bcd38..92e256d 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_capability.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* /** @@ -93,7 +93,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_capability + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractActivity.kt new file mode 100644 index 0000000..17f6cda --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractActivity.kt @@ -0,0 +1,113 @@ +package com.casic.xz.meterage.view.search + +import android.view.LayoutInflater +import android.view.View +import com.casic.xz.meterage.R +import com.casic.xz.meterage.base.ApplicationBaseActivity +import com.casic.xz.meterage.bean.SearchHistoryBean +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.utils.DataBaseManager +import com.casic.xz.meterage.utils.SearchType +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton +import com.zhy.view.flowlayout.FlowLayout +import com.zhy.view.flowlayout.TagAdapter +import kotlinx.android.synthetic.main.activity_search_history.* +import kotlinx.android.synthetic.main.include_search_input_title.* + +/** + * 搜索合同 + * */ +class SearchContractActivity : ApplicationBaseActivity() { + + private lateinit var inflater: LayoutInflater + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var historyAdapter: TagAdapter + private var dataBeans: MutableList = ArrayList() + private var isRefresh = false + + override fun initLayoutView(): Int = R.layout.activity_search_history + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + inputView.hint = "请输入合同名称或者编号查询" + } + + override fun initData() { + inflater = LayoutInflater.from(this) + weakReferenceHandler = WeakReferenceHandler { + if (it.what == 2023041001) { + if (isRefresh) { + historyAdapter.notifyDataChanged() + } else { + historyAdapter = object : TagAdapter(dataBeans) { + override fun getView( + parent: FlowLayout?, position: Int, bean: SearchHistoryBean + ): View { + val tagView = inflater.inflate( + R.layout.item_search_rv_l, tagFlowLayout, false + ) as QMUIRoundButton + tagView.text = bean.keywords + return tagView + } + } + tagFlowLayout.adapter = historyAdapter + tagFlowLayout.setOnTagClickListener { _, position, _ -> + inputView.setText(dataBeans[position].keywords) + navigatePageTo(inputView.text.toString()) + true + } + } + } + true + } + } + + override fun onResume() { + super.onResume() + dataBeans = DataBaseManager.get.queryHistoryByType(SearchType.Contract) + weakReferenceHandler.sendEmptyMessage(2023041001) + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + searchTextView.setOnClickListener { + if (!inputView.text.isNullOrBlank()) { + DataBaseManager.get.addSearchHistory( + inputView.text.toString(), SearchType.Contract + ) + } + + navigatePageTo(inputView.text.toString()) + } + + deleteHistoryView.setOnClickListener { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("确定将所有搜索记录删除?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + + } + + override fun onConfirmClick() { + DataBaseManager.get.deleteHistoryByType(SearchType.Contract) + dataBeans.clear() + historyAdapter.notifyDataChanged() + } + }).build().show() + } + } +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 9fc7c01..78d7828 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -71,6 +71,7 @@ + @@ -85,6 +86,8 @@ + + diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt index 71fe5a8..ad81434 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt @@ -170,7 +170,7 @@ "标准规范" -> requireContext().navigatePageTo() "能力列表" -> requireContext().navigatePageTo() "计量培训" -> requireContext().navigatePageTo() -// "合同发票" -> requireContext().navigatePageTo() + "合同发票" -> requireContext().navigatePageTo() // "业务统计" -> requireContext().navigatePageTo() "客户列表" -> requireContext().navigatePageTo() // "外场检测" -> requireContext().navigatePageTo() diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt index b47cb32..b12a0bf 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt @@ -184,7 +184,7 @@ requireContext().navigatePageTo() } - //TODO 未实现 + //TODO 通过接口修改数据库字段实现 pushSettingSwitch.setOnCheckedChangeListener { _, isChecked -> SaveKeyValues.putValue(LocaleConstant.PUSH_SETTING, isChecked) if (isChecked) { diff --git a/app/src/main/java/com/casic/xz/meterage/model/ContractListModel.java b/app/src/main/java/com/casic/xz/meterage/model/ContractListModel.java new file mode 100644 index 0000000..111ff52 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/model/ContractListModel.java @@ -0,0 +1,364 @@ +package com.casic.xz.meterage.model; + +import java.util.List; + +public class ContractListModel { + + 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 agreementAmount; + private String agreementEndDate; + private String agreementImportantContent; + private String agreementKind; + private String agreementKindName; + private String agreementName; + private String agreementNo; + private String agreementSource; + private String agreementSourceName; + private String agreementStartDate; + private String agreementType; + private String agreementTypeName; + private String approvalStatus; + private String createTime; + private String createUser; + private String createUserName; + private String customerId; + private String deptId; + private String deptName; + private String director; + private String estimateSignDate; + private String firstParty; + private String id; + private String isDel; + private String minioFileName; + private String orderIdList; + private String orderList; + private String paymentList; + private String processId; + private String remark; + private String secondParty; + private String status; + private String statusName; + private String updateTime; + + public String getAgreementAmount() { + return agreementAmount; + } + + public void setAgreementAmount(String agreementAmount) { + this.agreementAmount = agreementAmount; + } + + public String getAgreementEndDate() { + return agreementEndDate; + } + + public void setAgreementEndDate(String agreementEndDate) { + this.agreementEndDate = agreementEndDate; + } + + public String getAgreementImportantContent() { + return agreementImportantContent; + } + + public void setAgreementImportantContent(String agreementImportantContent) { + this.agreementImportantContent = agreementImportantContent; + } + + public String getAgreementKind() { + return agreementKind; + } + + public void setAgreementKind(String agreementKind) { + this.agreementKind = agreementKind; + } + + public String getAgreementKindName() { + return agreementKindName; + } + + public void setAgreementKindName(String agreementKindName) { + this.agreementKindName = agreementKindName; + } + + public String getAgreementName() { + return agreementName; + } + + public void setAgreementName(String agreementName) { + this.agreementName = agreementName; + } + + public String getAgreementNo() { + return agreementNo; + } + + public void setAgreementNo(String agreementNo) { + this.agreementNo = agreementNo; + } + + public String getAgreementSource() { + return agreementSource; + } + + public void setAgreementSource(String agreementSource) { + this.agreementSource = agreementSource; + } + + public String getAgreementSourceName() { + return agreementSourceName; + } + + public void setAgreementSourceName(String agreementSourceName) { + this.agreementSourceName = agreementSourceName; + } + + public String getAgreementStartDate() { + return agreementStartDate; + } + + public void setAgreementStartDate(String agreementStartDate) { + this.agreementStartDate = agreementStartDate; + } + + public String getAgreementType() { + return agreementType; + } + + public void setAgreementType(String agreementType) { + this.agreementType = agreementType; + } + + public String getAgreementTypeName() { + return agreementTypeName; + } + + public void setAgreementTypeName(String agreementTypeName) { + this.agreementTypeName = agreementTypeName; + } + + public String getApprovalStatus() { + return approvalStatus; + } + + public void setApprovalStatus(String approvalStatus) { + this.approvalStatus = approvalStatus; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getCreateUser() { + return createUser; + } + + public void setCreateUser(String createUser) { + this.createUser = createUser; + } + + public String getCreateUserName() { + return createUserName; + } + + public void setCreateUserName(String createUserName) { + this.createUserName = createUserName; + } + + public String getCustomerId() { + return customerId; + } + + public void setCustomerId(String customerId) { + this.customerId = customerId; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDirector() { + return director; + } + + public void setDirector(String director) { + this.director = director; + } + + public String getEstimateSignDate() { + return estimateSignDate; + } + + public void setEstimateSignDate(String estimateSignDate) { + this.estimateSignDate = estimateSignDate; + } + + public String getFirstParty() { + return firstParty; + } + + public void setFirstParty(String firstParty) { + this.firstParty = firstParty; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getIsDel() { + return isDel; + } + + public void setIsDel(String isDel) { + this.isDel = isDel; + } + + public String getMinioFileName() { + return minioFileName; + } + + public void setMinioFileName(String minioFileName) { + this.minioFileName = minioFileName; + } + + public String getOrderIdList() { + return orderIdList; + } + + public void setOrderIdList(String orderIdList) { + this.orderIdList = orderIdList; + } + + public String getOrderList() { + return orderList; + } + + public void setOrderList(String orderList) { + this.orderList = orderList; + } + + public String getPaymentList() { + return paymentList; + } + + public void setPaymentList(String paymentList) { + this.paymentList = paymentList; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + public String getSecondParty() { + return secondParty; + } + + public void setSecondParty(String secondParty) { + this.secondParty = secondParty; + } + + 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; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt index 85756b0..36059c5 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt @@ -65,4 +65,8 @@ const val USER_ID = "userId" const val PRIVACY_CHECK_BOX = "privacyCheckBox" const val PUSH_SETTING = "pushSetting" + const val METERAGE_TRAIN_FORM_ID = "jlglpxjhsp" + const val STANDARD_FILE_FORM_ID = "jlglwjsp" + const val CERTIFICATE_REPORT_FORM_ID = "ywglzsbg" + const val CONTRACT_FORM_ID = "cwczht" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt b/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt index da58079..99f3bb1 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt @@ -2,37 +2,42 @@ object SearchType { /** + * 首页模糊搜索 + * */ + const val All = "0" + + /** * 搜索仪器设备 * */ - const val Equipment = "0" + const val Equipment = "1" /** * 搜索标准装置 * */ - const val StandardDevice = "1" + const val StandardDevice = "2" /** * 搜索委托书需求 * */ - const val Entrust = "2" + const val Entrust = "3" /** * 搜索能力 * */ - const val Capability = "3" + const val Capability = "4" /** * 搜索计量培训 * */ - const val MeterageTrain = "4" + const val MeterageTrain = "5" /** * 搜索客户 * */ - const val Customer = "5" + const val Customer = "6" /** - * 首页模糊搜索 + * 搜索仪器设备 * */ - const val All = "6" + const val Contract = "7" } 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 3bd698a..bc4d694 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 @@ -446,4 +446,15 @@ @QueryMap limit: Map, @QueryMap offset: Map ): String + + /** + * 合同列表 + */ + @POST("/finance/agreement/listPage") + suspend fun getContractList( + @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 9e7556b..1aaabee 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 @@ -459,7 +459,6 @@ effectiveCompany: String, trainStartTime: String, trainEndTime: String, - formId: String, ids: Array, offset: Int ): String { @@ -473,7 +472,7 @@ param.addProperty("effectiveCompany", effectiveCompany) param.addProperty("trainStartTime", trainStartTime) param.addProperty("trainEndTime", trainEndTime) - param.addProperty("formId", formId) + param.addProperty("formId", LocaleConstant.METERAGE_TRAIN_FORM_ID) param.add("ids", gson.toJsonTree(ids, typeToken).asJsonArray) val requestBody = param.toString().toRequestBody( @@ -843,7 +842,7 @@ offset: Int ): String { val param = JsonObject() - param.addProperty("formId", "jlglwjsp") + param.addProperty("formId", LocaleConstant.STANDARD_FILE_FORM_ID) param.addProperty("fileType", fileType) param.addProperty("fileName", fileName) param.addProperty("fileNo", fileNo) @@ -884,7 +883,7 @@ offset: Int ): String { val param = JsonObject() - param.addProperty("formId", "ywglzsbg") + param.addProperty("formId", LocaleConstant.CERTIFICATE_REPORT_FORM_ID) param.addProperty("approvalStatus", approvalStatus) param.addProperty("certificateReportCode", certificateReportCode) param.addProperty("customerName", customerName) @@ -925,7 +924,7 @@ */ suspend fun submit(id: String): String { val param = JsonObject() - param.addProperty("formId", "ywglzsbg") + param.addProperty("formId", LocaleConstant.CERTIFICATE_REPORT_FORM_ID) param.addProperty("id", id) val requestBody = param.toString().toRequestBody( "application/json;charset=UTF-8".toMediaType() @@ -1009,4 +1008,47 @@ AuthenticationHelper.token!!, requestBody, limitMap, offsetMap ) } + + /** + * 合同列表 + */ + suspend fun getContractList( + customerId: String, + agreementKind: String, + agreementName: String, + agreementType: String, + agreementNo: String, + estimateSignStartDate: String, + estimateSignEndDate: String, + firstParty: String, + status: String, + ids: Array, + offset: Int + ): String { + val param = JsonObject() + param.addProperty("customerId", customerId) + param.addProperty("agreementKind", agreementKind) + param.addProperty("agreementName", agreementName) + param.addProperty("agreementType", agreementType) + param.addProperty("agreementNo", agreementNo) + param.addProperty("estimateSignStartDate", estimateSignStartDate) + param.addProperty("estimateSignEndDate", estimateSignEndDate) + param.addProperty("firstParty", firstParty) + param.addProperty("formId", LocaleConstant.CONTRACT_FORM_ID) + param.addProperty("status", status) + param.add("ids", gson.toJsonTree(ids, typeToken).asJsonArray) + + val requestBody = param.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + + val limitMap = HashMap() + limitMap["limit"] = LocaleConstant.PAGE_LIMIT + + val offsetMap = HashMap() + offsetMap["offset"] = offset + return api.getContractList( + AuthenticationHelper.token!!, requestBody, limitMap, offsetMap + ) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/ContractInvoiceActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/ContractInvoiceActivity.kt new file mode 100644 index 0000000..96148a3 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/home/ContractInvoiceActivity.kt @@ -0,0 +1,192 @@ +package com.casic.xz.meterage.view.home + +import android.content.Context +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration +import com.casic.xz.meterage.R +import com.casic.xz.meterage.base.ApplicationBaseActivity +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.model.ContractListModel +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.view.search.SearchContractActivity +import com.casic.xz.meterage.vm.ContractInvoiceViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +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_contract_invoice.* +import kotlinx.android.synthetic.main.include_empty_view.* +import kotlinx.android.synthetic.main.include_search_title.* + +class ContractInvoiceActivity : ApplicationBaseActivity() { + + private var context: Context = this@ContractInvoiceActivity + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var contractViewModel: ContractInvoiceViewModel + private lateinit var contractAdapter: NormalRecyclerAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.activity_contract_invoice + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "合同发票" + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + contractViewModel = ViewModelProvider(this)[ContractInvoiceViewModel::class.java] + contractViewModel.contractList.observe(this) { + if (it.code == 200) { + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + contractLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows) + contractLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023041001) + } + } + } + + override fun observeRequestState() { + contractViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + rightOperateView.setOnClickListener { + navigatePageTo() + } + + contractLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getContractListByPage() + } + + contractLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getContractListByPage() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + getContractListByPage() + } + + private fun getContractListByPage() { + contractViewModel.getContractList( + "", + "", + "", + "", + "", + "1", + "", + "", + "", + arrayOf(), + pageIndex + ) + } + + private val callback = Handler.Callback { + when (it.what) { + 2023041001 -> { + if (isRefresh || isLoadMore) { + contractAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无合同") { + pageIndex = 1 + getContractListByPage() + } + } else { + emptyView!!.hide() + contractAdapter = object : + NormalRecyclerAdapter( + R.layout.item_contract_rv_l, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, + position: Int, + item: ContractListModel.DataModel.RowsModel + ) { + viewHolder.setText(R.id.contractNameView, item.agreementName) + .setText(R.id.contractStateView, item.statusName) + .setText(R.id.contractCodeView, "合同编号:${item.agreementNo}") + .setText(R.id.firstPartNameView, "甲方单位:${item.firstParty}") + .setText( + R.id.startDateView, + "签订日期:${item.estimateSignDate.formatToYearMonthDay()}" + ) + + if (item.statusName.contains("已完成")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.green.convertColor(context) + ) + } else if (item.statusName.contains("未完成")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.red.convertColor(context) + ) + } else if (item.statusName.contains("已废止")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.gray.convertColor(context) + ) + } + } + } + contractRecyclerView.addItemDecoration( + DividerItemDecoration(this, DividerItemDecoration.VERTICAL) + ) + contractRecyclerView.adapter = contractAdapter + contractAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, t: ContractListModel.DataModel.RowsModel + ) { +// navigatePageTo(t.id) + } + }) + } + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt index 373c386..078f497 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt @@ -117,7 +117,6 @@ "", "", "", - "jlglpxjhsp", arrayOf(), pageIndex ) diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt index 16bcd38..92e256d 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_capability.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* /** @@ -93,7 +93,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_capability + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractActivity.kt new file mode 100644 index 0000000..17f6cda --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractActivity.kt @@ -0,0 +1,113 @@ +package com.casic.xz.meterage.view.search + +import android.view.LayoutInflater +import android.view.View +import com.casic.xz.meterage.R +import com.casic.xz.meterage.base.ApplicationBaseActivity +import com.casic.xz.meterage.bean.SearchHistoryBean +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.utils.DataBaseManager +import com.casic.xz.meterage.utils.SearchType +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton +import com.zhy.view.flowlayout.FlowLayout +import com.zhy.view.flowlayout.TagAdapter +import kotlinx.android.synthetic.main.activity_search_history.* +import kotlinx.android.synthetic.main.include_search_input_title.* + +/** + * 搜索合同 + * */ +class SearchContractActivity : ApplicationBaseActivity() { + + private lateinit var inflater: LayoutInflater + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var historyAdapter: TagAdapter + private var dataBeans: MutableList = ArrayList() + private var isRefresh = false + + override fun initLayoutView(): Int = R.layout.activity_search_history + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + inputView.hint = "请输入合同名称或者编号查询" + } + + override fun initData() { + inflater = LayoutInflater.from(this) + weakReferenceHandler = WeakReferenceHandler { + if (it.what == 2023041001) { + if (isRefresh) { + historyAdapter.notifyDataChanged() + } else { + historyAdapter = object : TagAdapter(dataBeans) { + override fun getView( + parent: FlowLayout?, position: Int, bean: SearchHistoryBean + ): View { + val tagView = inflater.inflate( + R.layout.item_search_rv_l, tagFlowLayout, false + ) as QMUIRoundButton + tagView.text = bean.keywords + return tagView + } + } + tagFlowLayout.adapter = historyAdapter + tagFlowLayout.setOnTagClickListener { _, position, _ -> + inputView.setText(dataBeans[position].keywords) + navigatePageTo(inputView.text.toString()) + true + } + } + } + true + } + } + + override fun onResume() { + super.onResume() + dataBeans = DataBaseManager.get.queryHistoryByType(SearchType.Contract) + weakReferenceHandler.sendEmptyMessage(2023041001) + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + searchTextView.setOnClickListener { + if (!inputView.text.isNullOrBlank()) { + DataBaseManager.get.addSearchHistory( + inputView.text.toString(), SearchType.Contract + ) + } + + navigatePageTo(inputView.text.toString()) + } + + deleteHistoryView.setOnClickListener { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("确定将所有搜索记录删除?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + + } + + override fun onConfirmClick() { + DataBaseManager.get.deleteHistoryByType(SearchType.Contract) + dataBeans.clear() + historyAdapter.notifyDataChanged() + } + }).build().show() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractResultActivity.kt new file mode 100644 index 0000000..5096b88 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractResultActivity.kt @@ -0,0 +1,210 @@ +package com.casic.xz.meterage.view.search + +import android.content.Context +import android.os.Handler +import androidx.core.text.isDigitsOnly +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration +import com.casic.xz.meterage.R +import com.casic.xz.meterage.base.ApplicationBaseActivity +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.model.ContractListModel +import com.casic.xz.meterage.utils.AppMemoryCache +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.vm.ContractInvoiceViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_search_contract_reasult.* +import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class SearchContractResultActivity : ApplicationBaseActivity() { + + private var context: Context = this@SearchContractResultActivity + private lateinit var param: String + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var contractViewModel: ContractInvoiceViewModel + private lateinit var contractAdapter: NormalRecyclerAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.activity_search_contract_reasult + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "查询结果" + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + getContractListByPage() + } + + override fun initData() { + param = intent.getStringExtra(Constant.INTENT_PARAM)!! + + weakReferenceHandler = WeakReferenceHandler(callback) + contractViewModel = ViewModelProvider(this)[ContractInvoiceViewModel::class.java] + contractViewModel.contractList.observe(this) { + if (it.code == 200) { + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + contractLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows) + contractLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023041002) + } + } + } + + override fun observeRequestState() { + contractViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + + contractLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getContractListByPage() + } + + contractLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getContractListByPage() + } + } + + private fun getContractListByPage() { + if (param.isDigitsOnly()) { + contractViewModel.getContractList( + "", "", "", "", param, + "1", "", "", "", arrayOf(), + pageIndex + ) + } else { + if (param.length < 4) { + //输入参数长度小于4,默认查名称 + contractViewModel.getContractList( + "", "", param, "", "", + "1", "", "", "", arrayOf(), + pageIndex + ) + } else { + if (AppMemoryCache.prefixCode.contains(param.substring(0, 4))) { + contractViewModel.getContractList( + "", "", "", "", param, + "1", "", "", "", arrayOf(), + pageIndex + ) + } else { + contractViewModel.getContractList( + "", "", param, "", "", + "1", "", "", "", arrayOf(), + pageIndex + ) + } + } + } + } + + private val callback = Handler.Callback { + when (it.what) { + 2023041002 -> { + if (isRefresh || isLoadMore) { + contractAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无合同") { + pageIndex = 1 + getContractListByPage() + } + } else { + emptyView!!.hide() + contractAdapter = object : + NormalRecyclerAdapter( + R.layout.item_contract_rv_l, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, + position: Int, + item: ContractListModel.DataModel.RowsModel + ) { + viewHolder.setText(R.id.contractNameView, item.agreementName) + .setText(R.id.contractStateView, item.statusName) + .setText(R.id.contractCodeView, "合同编号:${item.agreementNo}") + .setText(R.id.firstPartNameView, "甲方单位:${item.firstParty}") + .setText( + R.id.startDateView, + "签订日期:${item.estimateSignDate.formatToYearMonthDay()}" + ) + + if (item.statusName.contains("已完成")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.green.convertColor(context) + ) + } else if (item.statusName.contains("未完成")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.red.convertColor(context) + ) + } else if (item.statusName.contains("已废止")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.gray.convertColor(context) + ) + } + } + } + contractRecyclerView.addItemDecoration( + DividerItemDecoration(this, DividerItemDecoration.VERTICAL) + ) + contractRecyclerView.adapter = contractAdapter + contractAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, t: ContractListModel.DataModel.RowsModel + ) { +// navigatePageTo(t.id) + } + }) + } + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 9fc7c01..78d7828 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -71,6 +71,7 @@ + @@ -85,6 +86,8 @@ + + diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt index 71fe5a8..ad81434 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt @@ -170,7 +170,7 @@ "标准规范" -> requireContext().navigatePageTo() "能力列表" -> requireContext().navigatePageTo() "计量培训" -> requireContext().navigatePageTo() -// "合同发票" -> requireContext().navigatePageTo() + "合同发票" -> requireContext().navigatePageTo() // "业务统计" -> requireContext().navigatePageTo() "客户列表" -> requireContext().navigatePageTo() // "外场检测" -> requireContext().navigatePageTo() diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt index b47cb32..b12a0bf 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt @@ -184,7 +184,7 @@ requireContext().navigatePageTo() } - //TODO 未实现 + //TODO 通过接口修改数据库字段实现 pushSettingSwitch.setOnCheckedChangeListener { _, isChecked -> SaveKeyValues.putValue(LocaleConstant.PUSH_SETTING, isChecked) if (isChecked) { diff --git a/app/src/main/java/com/casic/xz/meterage/model/ContractListModel.java b/app/src/main/java/com/casic/xz/meterage/model/ContractListModel.java new file mode 100644 index 0000000..111ff52 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/model/ContractListModel.java @@ -0,0 +1,364 @@ +package com.casic.xz.meterage.model; + +import java.util.List; + +public class ContractListModel { + + 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 agreementAmount; + private String agreementEndDate; + private String agreementImportantContent; + private String agreementKind; + private String agreementKindName; + private String agreementName; + private String agreementNo; + private String agreementSource; + private String agreementSourceName; + private String agreementStartDate; + private String agreementType; + private String agreementTypeName; + private String approvalStatus; + private String createTime; + private String createUser; + private String createUserName; + private String customerId; + private String deptId; + private String deptName; + private String director; + private String estimateSignDate; + private String firstParty; + private String id; + private String isDel; + private String minioFileName; + private String orderIdList; + private String orderList; + private String paymentList; + private String processId; + private String remark; + private String secondParty; + private String status; + private String statusName; + private String updateTime; + + public String getAgreementAmount() { + return agreementAmount; + } + + public void setAgreementAmount(String agreementAmount) { + this.agreementAmount = agreementAmount; + } + + public String getAgreementEndDate() { + return agreementEndDate; + } + + public void setAgreementEndDate(String agreementEndDate) { + this.agreementEndDate = agreementEndDate; + } + + public String getAgreementImportantContent() { + return agreementImportantContent; + } + + public void setAgreementImportantContent(String agreementImportantContent) { + this.agreementImportantContent = agreementImportantContent; + } + + public String getAgreementKind() { + return agreementKind; + } + + public void setAgreementKind(String agreementKind) { + this.agreementKind = agreementKind; + } + + public String getAgreementKindName() { + return agreementKindName; + } + + public void setAgreementKindName(String agreementKindName) { + this.agreementKindName = agreementKindName; + } + + public String getAgreementName() { + return agreementName; + } + + public void setAgreementName(String agreementName) { + this.agreementName = agreementName; + } + + public String getAgreementNo() { + return agreementNo; + } + + public void setAgreementNo(String agreementNo) { + this.agreementNo = agreementNo; + } + + public String getAgreementSource() { + return agreementSource; + } + + public void setAgreementSource(String agreementSource) { + this.agreementSource = agreementSource; + } + + public String getAgreementSourceName() { + return agreementSourceName; + } + + public void setAgreementSourceName(String agreementSourceName) { + this.agreementSourceName = agreementSourceName; + } + + public String getAgreementStartDate() { + return agreementStartDate; + } + + public void setAgreementStartDate(String agreementStartDate) { + this.agreementStartDate = agreementStartDate; + } + + public String getAgreementType() { + return agreementType; + } + + public void setAgreementType(String agreementType) { + this.agreementType = agreementType; + } + + public String getAgreementTypeName() { + return agreementTypeName; + } + + public void setAgreementTypeName(String agreementTypeName) { + this.agreementTypeName = agreementTypeName; + } + + public String getApprovalStatus() { + return approvalStatus; + } + + public void setApprovalStatus(String approvalStatus) { + this.approvalStatus = approvalStatus; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getCreateUser() { + return createUser; + } + + public void setCreateUser(String createUser) { + this.createUser = createUser; + } + + public String getCreateUserName() { + return createUserName; + } + + public void setCreateUserName(String createUserName) { + this.createUserName = createUserName; + } + + public String getCustomerId() { + return customerId; + } + + public void setCustomerId(String customerId) { + this.customerId = customerId; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDirector() { + return director; + } + + public void setDirector(String director) { + this.director = director; + } + + public String getEstimateSignDate() { + return estimateSignDate; + } + + public void setEstimateSignDate(String estimateSignDate) { + this.estimateSignDate = estimateSignDate; + } + + public String getFirstParty() { + return firstParty; + } + + public void setFirstParty(String firstParty) { + this.firstParty = firstParty; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getIsDel() { + return isDel; + } + + public void setIsDel(String isDel) { + this.isDel = isDel; + } + + public String getMinioFileName() { + return minioFileName; + } + + public void setMinioFileName(String minioFileName) { + this.minioFileName = minioFileName; + } + + public String getOrderIdList() { + return orderIdList; + } + + public void setOrderIdList(String orderIdList) { + this.orderIdList = orderIdList; + } + + public String getOrderList() { + return orderList; + } + + public void setOrderList(String orderList) { + this.orderList = orderList; + } + + public String getPaymentList() { + return paymentList; + } + + public void setPaymentList(String paymentList) { + this.paymentList = paymentList; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + public String getSecondParty() { + return secondParty; + } + + public void setSecondParty(String secondParty) { + this.secondParty = secondParty; + } + + 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; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt index 85756b0..36059c5 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt @@ -65,4 +65,8 @@ const val USER_ID = "userId" const val PRIVACY_CHECK_BOX = "privacyCheckBox" const val PUSH_SETTING = "pushSetting" + const val METERAGE_TRAIN_FORM_ID = "jlglpxjhsp" + const val STANDARD_FILE_FORM_ID = "jlglwjsp" + const val CERTIFICATE_REPORT_FORM_ID = "ywglzsbg" + const val CONTRACT_FORM_ID = "cwczht" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt b/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt index da58079..99f3bb1 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt @@ -2,37 +2,42 @@ object SearchType { /** + * 首页模糊搜索 + * */ + const val All = "0" + + /** * 搜索仪器设备 * */ - const val Equipment = "0" + const val Equipment = "1" /** * 搜索标准装置 * */ - const val StandardDevice = "1" + const val StandardDevice = "2" /** * 搜索委托书需求 * */ - const val Entrust = "2" + const val Entrust = "3" /** * 搜索能力 * */ - const val Capability = "3" + const val Capability = "4" /** * 搜索计量培训 * */ - const val MeterageTrain = "4" + const val MeterageTrain = "5" /** * 搜索客户 * */ - const val Customer = "5" + const val Customer = "6" /** - * 首页模糊搜索 + * 搜索仪器设备 * */ - const val All = "6" + const val Contract = "7" } 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 3bd698a..bc4d694 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 @@ -446,4 +446,15 @@ @QueryMap limit: Map, @QueryMap offset: Map ): String + + /** + * 合同列表 + */ + @POST("/finance/agreement/listPage") + suspend fun getContractList( + @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 9e7556b..1aaabee 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 @@ -459,7 +459,6 @@ effectiveCompany: String, trainStartTime: String, trainEndTime: String, - formId: String, ids: Array, offset: Int ): String { @@ -473,7 +472,7 @@ param.addProperty("effectiveCompany", effectiveCompany) param.addProperty("trainStartTime", trainStartTime) param.addProperty("trainEndTime", trainEndTime) - param.addProperty("formId", formId) + param.addProperty("formId", LocaleConstant.METERAGE_TRAIN_FORM_ID) param.add("ids", gson.toJsonTree(ids, typeToken).asJsonArray) val requestBody = param.toString().toRequestBody( @@ -843,7 +842,7 @@ offset: Int ): String { val param = JsonObject() - param.addProperty("formId", "jlglwjsp") + param.addProperty("formId", LocaleConstant.STANDARD_FILE_FORM_ID) param.addProperty("fileType", fileType) param.addProperty("fileName", fileName) param.addProperty("fileNo", fileNo) @@ -884,7 +883,7 @@ offset: Int ): String { val param = JsonObject() - param.addProperty("formId", "ywglzsbg") + param.addProperty("formId", LocaleConstant.CERTIFICATE_REPORT_FORM_ID) param.addProperty("approvalStatus", approvalStatus) param.addProperty("certificateReportCode", certificateReportCode) param.addProperty("customerName", customerName) @@ -925,7 +924,7 @@ */ suspend fun submit(id: String): String { val param = JsonObject() - param.addProperty("formId", "ywglzsbg") + param.addProperty("formId", LocaleConstant.CERTIFICATE_REPORT_FORM_ID) param.addProperty("id", id) val requestBody = param.toString().toRequestBody( "application/json;charset=UTF-8".toMediaType() @@ -1009,4 +1008,47 @@ AuthenticationHelper.token!!, requestBody, limitMap, offsetMap ) } + + /** + * 合同列表 + */ + suspend fun getContractList( + customerId: String, + agreementKind: String, + agreementName: String, + agreementType: String, + agreementNo: String, + estimateSignStartDate: String, + estimateSignEndDate: String, + firstParty: String, + status: String, + ids: Array, + offset: Int + ): String { + val param = JsonObject() + param.addProperty("customerId", customerId) + param.addProperty("agreementKind", agreementKind) + param.addProperty("agreementName", agreementName) + param.addProperty("agreementType", agreementType) + param.addProperty("agreementNo", agreementNo) + param.addProperty("estimateSignStartDate", estimateSignStartDate) + param.addProperty("estimateSignEndDate", estimateSignEndDate) + param.addProperty("firstParty", firstParty) + param.addProperty("formId", LocaleConstant.CONTRACT_FORM_ID) + param.addProperty("status", status) + param.add("ids", gson.toJsonTree(ids, typeToken).asJsonArray) + + val requestBody = param.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + + val limitMap = HashMap() + limitMap["limit"] = LocaleConstant.PAGE_LIMIT + + val offsetMap = HashMap() + offsetMap["offset"] = offset + return api.getContractList( + AuthenticationHelper.token!!, requestBody, limitMap, offsetMap + ) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/ContractInvoiceActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/ContractInvoiceActivity.kt new file mode 100644 index 0000000..96148a3 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/home/ContractInvoiceActivity.kt @@ -0,0 +1,192 @@ +package com.casic.xz.meterage.view.home + +import android.content.Context +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration +import com.casic.xz.meterage.R +import com.casic.xz.meterage.base.ApplicationBaseActivity +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.model.ContractListModel +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.view.search.SearchContractActivity +import com.casic.xz.meterage.vm.ContractInvoiceViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +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_contract_invoice.* +import kotlinx.android.synthetic.main.include_empty_view.* +import kotlinx.android.synthetic.main.include_search_title.* + +class ContractInvoiceActivity : ApplicationBaseActivity() { + + private var context: Context = this@ContractInvoiceActivity + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var contractViewModel: ContractInvoiceViewModel + private lateinit var contractAdapter: NormalRecyclerAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.activity_contract_invoice + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "合同发票" + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + contractViewModel = ViewModelProvider(this)[ContractInvoiceViewModel::class.java] + contractViewModel.contractList.observe(this) { + if (it.code == 200) { + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + contractLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows) + contractLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023041001) + } + } + } + + override fun observeRequestState() { + contractViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + rightOperateView.setOnClickListener { + navigatePageTo() + } + + contractLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getContractListByPage() + } + + contractLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getContractListByPage() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + getContractListByPage() + } + + private fun getContractListByPage() { + contractViewModel.getContractList( + "", + "", + "", + "", + "", + "1", + "", + "", + "", + arrayOf(), + pageIndex + ) + } + + private val callback = Handler.Callback { + when (it.what) { + 2023041001 -> { + if (isRefresh || isLoadMore) { + contractAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无合同") { + pageIndex = 1 + getContractListByPage() + } + } else { + emptyView!!.hide() + contractAdapter = object : + NormalRecyclerAdapter( + R.layout.item_contract_rv_l, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, + position: Int, + item: ContractListModel.DataModel.RowsModel + ) { + viewHolder.setText(R.id.contractNameView, item.agreementName) + .setText(R.id.contractStateView, item.statusName) + .setText(R.id.contractCodeView, "合同编号:${item.agreementNo}") + .setText(R.id.firstPartNameView, "甲方单位:${item.firstParty}") + .setText( + R.id.startDateView, + "签订日期:${item.estimateSignDate.formatToYearMonthDay()}" + ) + + if (item.statusName.contains("已完成")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.green.convertColor(context) + ) + } else if (item.statusName.contains("未完成")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.red.convertColor(context) + ) + } else if (item.statusName.contains("已废止")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.gray.convertColor(context) + ) + } + } + } + contractRecyclerView.addItemDecoration( + DividerItemDecoration(this, DividerItemDecoration.VERTICAL) + ) + contractRecyclerView.adapter = contractAdapter + contractAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, t: ContractListModel.DataModel.RowsModel + ) { +// navigatePageTo(t.id) + } + }) + } + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt index 373c386..078f497 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt @@ -117,7 +117,6 @@ "", "", "", - "jlglpxjhsp", arrayOf(), pageIndex ) diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt index 16bcd38..92e256d 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_capability.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* /** @@ -93,7 +93,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_capability + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractActivity.kt new file mode 100644 index 0000000..17f6cda --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractActivity.kt @@ -0,0 +1,113 @@ +package com.casic.xz.meterage.view.search + +import android.view.LayoutInflater +import android.view.View +import com.casic.xz.meterage.R +import com.casic.xz.meterage.base.ApplicationBaseActivity +import com.casic.xz.meterage.bean.SearchHistoryBean +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.utils.DataBaseManager +import com.casic.xz.meterage.utils.SearchType +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton +import com.zhy.view.flowlayout.FlowLayout +import com.zhy.view.flowlayout.TagAdapter +import kotlinx.android.synthetic.main.activity_search_history.* +import kotlinx.android.synthetic.main.include_search_input_title.* + +/** + * 搜索合同 + * */ +class SearchContractActivity : ApplicationBaseActivity() { + + private lateinit var inflater: LayoutInflater + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var historyAdapter: TagAdapter + private var dataBeans: MutableList = ArrayList() + private var isRefresh = false + + override fun initLayoutView(): Int = R.layout.activity_search_history + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + inputView.hint = "请输入合同名称或者编号查询" + } + + override fun initData() { + inflater = LayoutInflater.from(this) + weakReferenceHandler = WeakReferenceHandler { + if (it.what == 2023041001) { + if (isRefresh) { + historyAdapter.notifyDataChanged() + } else { + historyAdapter = object : TagAdapter(dataBeans) { + override fun getView( + parent: FlowLayout?, position: Int, bean: SearchHistoryBean + ): View { + val tagView = inflater.inflate( + R.layout.item_search_rv_l, tagFlowLayout, false + ) as QMUIRoundButton + tagView.text = bean.keywords + return tagView + } + } + tagFlowLayout.adapter = historyAdapter + tagFlowLayout.setOnTagClickListener { _, position, _ -> + inputView.setText(dataBeans[position].keywords) + navigatePageTo(inputView.text.toString()) + true + } + } + } + true + } + } + + override fun onResume() { + super.onResume() + dataBeans = DataBaseManager.get.queryHistoryByType(SearchType.Contract) + weakReferenceHandler.sendEmptyMessage(2023041001) + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + searchTextView.setOnClickListener { + if (!inputView.text.isNullOrBlank()) { + DataBaseManager.get.addSearchHistory( + inputView.text.toString(), SearchType.Contract + ) + } + + navigatePageTo(inputView.text.toString()) + } + + deleteHistoryView.setOnClickListener { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("确定将所有搜索记录删除?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + + } + + override fun onConfirmClick() { + DataBaseManager.get.deleteHistoryByType(SearchType.Contract) + dataBeans.clear() + historyAdapter.notifyDataChanged() + } + }).build().show() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractResultActivity.kt new file mode 100644 index 0000000..5096b88 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractResultActivity.kt @@ -0,0 +1,210 @@ +package com.casic.xz.meterage.view.search + +import android.content.Context +import android.os.Handler +import androidx.core.text.isDigitsOnly +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration +import com.casic.xz.meterage.R +import com.casic.xz.meterage.base.ApplicationBaseActivity +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.model.ContractListModel +import com.casic.xz.meterage.utils.AppMemoryCache +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.vm.ContractInvoiceViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_search_contract_reasult.* +import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class SearchContractResultActivity : ApplicationBaseActivity() { + + private var context: Context = this@SearchContractResultActivity + private lateinit var param: String + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var contractViewModel: ContractInvoiceViewModel + private lateinit var contractAdapter: NormalRecyclerAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.activity_search_contract_reasult + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "查询结果" + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + getContractListByPage() + } + + override fun initData() { + param = intent.getStringExtra(Constant.INTENT_PARAM)!! + + weakReferenceHandler = WeakReferenceHandler(callback) + contractViewModel = ViewModelProvider(this)[ContractInvoiceViewModel::class.java] + contractViewModel.contractList.observe(this) { + if (it.code == 200) { + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + contractLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows) + contractLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023041002) + } + } + } + + override fun observeRequestState() { + contractViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + + contractLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getContractListByPage() + } + + contractLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getContractListByPage() + } + } + + private fun getContractListByPage() { + if (param.isDigitsOnly()) { + contractViewModel.getContractList( + "", "", "", "", param, + "1", "", "", "", arrayOf(), + pageIndex + ) + } else { + if (param.length < 4) { + //输入参数长度小于4,默认查名称 + contractViewModel.getContractList( + "", "", param, "", "", + "1", "", "", "", arrayOf(), + pageIndex + ) + } else { + if (AppMemoryCache.prefixCode.contains(param.substring(0, 4))) { + contractViewModel.getContractList( + "", "", "", "", param, + "1", "", "", "", arrayOf(), + pageIndex + ) + } else { + contractViewModel.getContractList( + "", "", param, "", "", + "1", "", "", "", arrayOf(), + pageIndex + ) + } + } + } + } + + private val callback = Handler.Callback { + when (it.what) { + 2023041002 -> { + if (isRefresh || isLoadMore) { + contractAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无合同") { + pageIndex = 1 + getContractListByPage() + } + } else { + emptyView!!.hide() + contractAdapter = object : + NormalRecyclerAdapter( + R.layout.item_contract_rv_l, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, + position: Int, + item: ContractListModel.DataModel.RowsModel + ) { + viewHolder.setText(R.id.contractNameView, item.agreementName) + .setText(R.id.contractStateView, item.statusName) + .setText(R.id.contractCodeView, "合同编号:${item.agreementNo}") + .setText(R.id.firstPartNameView, "甲方单位:${item.firstParty}") + .setText( + R.id.startDateView, + "签订日期:${item.estimateSignDate.formatToYearMonthDay()}" + ) + + if (item.statusName.contains("已完成")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.green.convertColor(context) + ) + } else if (item.statusName.contains("未完成")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.red.convertColor(context) + ) + } else if (item.statusName.contains("已废止")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.gray.convertColor(context) + ) + } + } + } + contractRecyclerView.addItemDecoration( + DividerItemDecoration(this, DividerItemDecoration.VERTICAL) + ) + contractRecyclerView.adapter = contractAdapter + contractAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, t: ContractListModel.DataModel.RowsModel + ) { +// navigatePageTo(t.id) + } + }) + } + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt index 08d6bd2..3430e24 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_customer.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* /** @@ -93,7 +93,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_customer + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 9fc7c01..78d7828 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -71,6 +71,7 @@ + @@ -85,6 +86,8 @@ + + diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt index 71fe5a8..ad81434 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt @@ -170,7 +170,7 @@ "标准规范" -> requireContext().navigatePageTo() "能力列表" -> requireContext().navigatePageTo() "计量培训" -> requireContext().navigatePageTo() -// "合同发票" -> requireContext().navigatePageTo() + "合同发票" -> requireContext().navigatePageTo() // "业务统计" -> requireContext().navigatePageTo() "客户列表" -> requireContext().navigatePageTo() // "外场检测" -> requireContext().navigatePageTo() diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt index b47cb32..b12a0bf 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt @@ -184,7 +184,7 @@ requireContext().navigatePageTo() } - //TODO 未实现 + //TODO 通过接口修改数据库字段实现 pushSettingSwitch.setOnCheckedChangeListener { _, isChecked -> SaveKeyValues.putValue(LocaleConstant.PUSH_SETTING, isChecked) if (isChecked) { diff --git a/app/src/main/java/com/casic/xz/meterage/model/ContractListModel.java b/app/src/main/java/com/casic/xz/meterage/model/ContractListModel.java new file mode 100644 index 0000000..111ff52 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/model/ContractListModel.java @@ -0,0 +1,364 @@ +package com.casic.xz.meterage.model; + +import java.util.List; + +public class ContractListModel { + + 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 agreementAmount; + private String agreementEndDate; + private String agreementImportantContent; + private String agreementKind; + private String agreementKindName; + private String agreementName; + private String agreementNo; + private String agreementSource; + private String agreementSourceName; + private String agreementStartDate; + private String agreementType; + private String agreementTypeName; + private String approvalStatus; + private String createTime; + private String createUser; + private String createUserName; + private String customerId; + private String deptId; + private String deptName; + private String director; + private String estimateSignDate; + private String firstParty; + private String id; + private String isDel; + private String minioFileName; + private String orderIdList; + private String orderList; + private String paymentList; + private String processId; + private String remark; + private String secondParty; + private String status; + private String statusName; + private String updateTime; + + public String getAgreementAmount() { + return agreementAmount; + } + + public void setAgreementAmount(String agreementAmount) { + this.agreementAmount = agreementAmount; + } + + public String getAgreementEndDate() { + return agreementEndDate; + } + + public void setAgreementEndDate(String agreementEndDate) { + this.agreementEndDate = agreementEndDate; + } + + public String getAgreementImportantContent() { + return agreementImportantContent; + } + + public void setAgreementImportantContent(String agreementImportantContent) { + this.agreementImportantContent = agreementImportantContent; + } + + public String getAgreementKind() { + return agreementKind; + } + + public void setAgreementKind(String agreementKind) { + this.agreementKind = agreementKind; + } + + public String getAgreementKindName() { + return agreementKindName; + } + + public void setAgreementKindName(String agreementKindName) { + this.agreementKindName = agreementKindName; + } + + public String getAgreementName() { + return agreementName; + } + + public void setAgreementName(String agreementName) { + this.agreementName = agreementName; + } + + public String getAgreementNo() { + return agreementNo; + } + + public void setAgreementNo(String agreementNo) { + this.agreementNo = agreementNo; + } + + public String getAgreementSource() { + return agreementSource; + } + + public void setAgreementSource(String agreementSource) { + this.agreementSource = agreementSource; + } + + public String getAgreementSourceName() { + return agreementSourceName; + } + + public void setAgreementSourceName(String agreementSourceName) { + this.agreementSourceName = agreementSourceName; + } + + public String getAgreementStartDate() { + return agreementStartDate; + } + + public void setAgreementStartDate(String agreementStartDate) { + this.agreementStartDate = agreementStartDate; + } + + public String getAgreementType() { + return agreementType; + } + + public void setAgreementType(String agreementType) { + this.agreementType = agreementType; + } + + public String getAgreementTypeName() { + return agreementTypeName; + } + + public void setAgreementTypeName(String agreementTypeName) { + this.agreementTypeName = agreementTypeName; + } + + public String getApprovalStatus() { + return approvalStatus; + } + + public void setApprovalStatus(String approvalStatus) { + this.approvalStatus = approvalStatus; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getCreateUser() { + return createUser; + } + + public void setCreateUser(String createUser) { + this.createUser = createUser; + } + + public String getCreateUserName() { + return createUserName; + } + + public void setCreateUserName(String createUserName) { + this.createUserName = createUserName; + } + + public String getCustomerId() { + return customerId; + } + + public void setCustomerId(String customerId) { + this.customerId = customerId; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDirector() { + return director; + } + + public void setDirector(String director) { + this.director = director; + } + + public String getEstimateSignDate() { + return estimateSignDate; + } + + public void setEstimateSignDate(String estimateSignDate) { + this.estimateSignDate = estimateSignDate; + } + + public String getFirstParty() { + return firstParty; + } + + public void setFirstParty(String firstParty) { + this.firstParty = firstParty; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getIsDel() { + return isDel; + } + + public void setIsDel(String isDel) { + this.isDel = isDel; + } + + public String getMinioFileName() { + return minioFileName; + } + + public void setMinioFileName(String minioFileName) { + this.minioFileName = minioFileName; + } + + public String getOrderIdList() { + return orderIdList; + } + + public void setOrderIdList(String orderIdList) { + this.orderIdList = orderIdList; + } + + public String getOrderList() { + return orderList; + } + + public void setOrderList(String orderList) { + this.orderList = orderList; + } + + public String getPaymentList() { + return paymentList; + } + + public void setPaymentList(String paymentList) { + this.paymentList = paymentList; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + public String getSecondParty() { + return secondParty; + } + + public void setSecondParty(String secondParty) { + this.secondParty = secondParty; + } + + 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; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt index 85756b0..36059c5 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt @@ -65,4 +65,8 @@ const val USER_ID = "userId" const val PRIVACY_CHECK_BOX = "privacyCheckBox" const val PUSH_SETTING = "pushSetting" + const val METERAGE_TRAIN_FORM_ID = "jlglpxjhsp" + const val STANDARD_FILE_FORM_ID = "jlglwjsp" + const val CERTIFICATE_REPORT_FORM_ID = "ywglzsbg" + const val CONTRACT_FORM_ID = "cwczht" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt b/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt index da58079..99f3bb1 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt @@ -2,37 +2,42 @@ object SearchType { /** + * 首页模糊搜索 + * */ + const val All = "0" + + /** * 搜索仪器设备 * */ - const val Equipment = "0" + const val Equipment = "1" /** * 搜索标准装置 * */ - const val StandardDevice = "1" + const val StandardDevice = "2" /** * 搜索委托书需求 * */ - const val Entrust = "2" + const val Entrust = "3" /** * 搜索能力 * */ - const val Capability = "3" + const val Capability = "4" /** * 搜索计量培训 * */ - const val MeterageTrain = "4" + const val MeterageTrain = "5" /** * 搜索客户 * */ - const val Customer = "5" + const val Customer = "6" /** - * 首页模糊搜索 + * 搜索仪器设备 * */ - const val All = "6" + const val Contract = "7" } 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 3bd698a..bc4d694 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 @@ -446,4 +446,15 @@ @QueryMap limit: Map, @QueryMap offset: Map ): String + + /** + * 合同列表 + */ + @POST("/finance/agreement/listPage") + suspend fun getContractList( + @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 9e7556b..1aaabee 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 @@ -459,7 +459,6 @@ effectiveCompany: String, trainStartTime: String, trainEndTime: String, - formId: String, ids: Array, offset: Int ): String { @@ -473,7 +472,7 @@ param.addProperty("effectiveCompany", effectiveCompany) param.addProperty("trainStartTime", trainStartTime) param.addProperty("trainEndTime", trainEndTime) - param.addProperty("formId", formId) + param.addProperty("formId", LocaleConstant.METERAGE_TRAIN_FORM_ID) param.add("ids", gson.toJsonTree(ids, typeToken).asJsonArray) val requestBody = param.toString().toRequestBody( @@ -843,7 +842,7 @@ offset: Int ): String { val param = JsonObject() - param.addProperty("formId", "jlglwjsp") + param.addProperty("formId", LocaleConstant.STANDARD_FILE_FORM_ID) param.addProperty("fileType", fileType) param.addProperty("fileName", fileName) param.addProperty("fileNo", fileNo) @@ -884,7 +883,7 @@ offset: Int ): String { val param = JsonObject() - param.addProperty("formId", "ywglzsbg") + param.addProperty("formId", LocaleConstant.CERTIFICATE_REPORT_FORM_ID) param.addProperty("approvalStatus", approvalStatus) param.addProperty("certificateReportCode", certificateReportCode) param.addProperty("customerName", customerName) @@ -925,7 +924,7 @@ */ suspend fun submit(id: String): String { val param = JsonObject() - param.addProperty("formId", "ywglzsbg") + param.addProperty("formId", LocaleConstant.CERTIFICATE_REPORT_FORM_ID) param.addProperty("id", id) val requestBody = param.toString().toRequestBody( "application/json;charset=UTF-8".toMediaType() @@ -1009,4 +1008,47 @@ AuthenticationHelper.token!!, requestBody, limitMap, offsetMap ) } + + /** + * 合同列表 + */ + suspend fun getContractList( + customerId: String, + agreementKind: String, + agreementName: String, + agreementType: String, + agreementNo: String, + estimateSignStartDate: String, + estimateSignEndDate: String, + firstParty: String, + status: String, + ids: Array, + offset: Int + ): String { + val param = JsonObject() + param.addProperty("customerId", customerId) + param.addProperty("agreementKind", agreementKind) + param.addProperty("agreementName", agreementName) + param.addProperty("agreementType", agreementType) + param.addProperty("agreementNo", agreementNo) + param.addProperty("estimateSignStartDate", estimateSignStartDate) + param.addProperty("estimateSignEndDate", estimateSignEndDate) + param.addProperty("firstParty", firstParty) + param.addProperty("formId", LocaleConstant.CONTRACT_FORM_ID) + param.addProperty("status", status) + param.add("ids", gson.toJsonTree(ids, typeToken).asJsonArray) + + val requestBody = param.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + + val limitMap = HashMap() + limitMap["limit"] = LocaleConstant.PAGE_LIMIT + + val offsetMap = HashMap() + offsetMap["offset"] = offset + return api.getContractList( + AuthenticationHelper.token!!, requestBody, limitMap, offsetMap + ) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/ContractInvoiceActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/ContractInvoiceActivity.kt new file mode 100644 index 0000000..96148a3 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/home/ContractInvoiceActivity.kt @@ -0,0 +1,192 @@ +package com.casic.xz.meterage.view.home + +import android.content.Context +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration +import com.casic.xz.meterage.R +import com.casic.xz.meterage.base.ApplicationBaseActivity +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.model.ContractListModel +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.view.search.SearchContractActivity +import com.casic.xz.meterage.vm.ContractInvoiceViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +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_contract_invoice.* +import kotlinx.android.synthetic.main.include_empty_view.* +import kotlinx.android.synthetic.main.include_search_title.* + +class ContractInvoiceActivity : ApplicationBaseActivity() { + + private var context: Context = this@ContractInvoiceActivity + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var contractViewModel: ContractInvoiceViewModel + private lateinit var contractAdapter: NormalRecyclerAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.activity_contract_invoice + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "合同发票" + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + contractViewModel = ViewModelProvider(this)[ContractInvoiceViewModel::class.java] + contractViewModel.contractList.observe(this) { + if (it.code == 200) { + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + contractLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows) + contractLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023041001) + } + } + } + + override fun observeRequestState() { + contractViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + rightOperateView.setOnClickListener { + navigatePageTo() + } + + contractLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getContractListByPage() + } + + contractLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getContractListByPage() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + getContractListByPage() + } + + private fun getContractListByPage() { + contractViewModel.getContractList( + "", + "", + "", + "", + "", + "1", + "", + "", + "", + arrayOf(), + pageIndex + ) + } + + private val callback = Handler.Callback { + when (it.what) { + 2023041001 -> { + if (isRefresh || isLoadMore) { + contractAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无合同") { + pageIndex = 1 + getContractListByPage() + } + } else { + emptyView!!.hide() + contractAdapter = object : + NormalRecyclerAdapter( + R.layout.item_contract_rv_l, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, + position: Int, + item: ContractListModel.DataModel.RowsModel + ) { + viewHolder.setText(R.id.contractNameView, item.agreementName) + .setText(R.id.contractStateView, item.statusName) + .setText(R.id.contractCodeView, "合同编号:${item.agreementNo}") + .setText(R.id.firstPartNameView, "甲方单位:${item.firstParty}") + .setText( + R.id.startDateView, + "签订日期:${item.estimateSignDate.formatToYearMonthDay()}" + ) + + if (item.statusName.contains("已完成")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.green.convertColor(context) + ) + } else if (item.statusName.contains("未完成")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.red.convertColor(context) + ) + } else if (item.statusName.contains("已废止")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.gray.convertColor(context) + ) + } + } + } + contractRecyclerView.addItemDecoration( + DividerItemDecoration(this, DividerItemDecoration.VERTICAL) + ) + contractRecyclerView.adapter = contractAdapter + contractAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, t: ContractListModel.DataModel.RowsModel + ) { +// navigatePageTo(t.id) + } + }) + } + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt index 373c386..078f497 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt @@ -117,7 +117,6 @@ "", "", "", - "jlglpxjhsp", arrayOf(), pageIndex ) diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt index 16bcd38..92e256d 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_capability.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* /** @@ -93,7 +93,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_capability + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractActivity.kt new file mode 100644 index 0000000..17f6cda --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractActivity.kt @@ -0,0 +1,113 @@ +package com.casic.xz.meterage.view.search + +import android.view.LayoutInflater +import android.view.View +import com.casic.xz.meterage.R +import com.casic.xz.meterage.base.ApplicationBaseActivity +import com.casic.xz.meterage.bean.SearchHistoryBean +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.utils.DataBaseManager +import com.casic.xz.meterage.utils.SearchType +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton +import com.zhy.view.flowlayout.FlowLayout +import com.zhy.view.flowlayout.TagAdapter +import kotlinx.android.synthetic.main.activity_search_history.* +import kotlinx.android.synthetic.main.include_search_input_title.* + +/** + * 搜索合同 + * */ +class SearchContractActivity : ApplicationBaseActivity() { + + private lateinit var inflater: LayoutInflater + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var historyAdapter: TagAdapter + private var dataBeans: MutableList = ArrayList() + private var isRefresh = false + + override fun initLayoutView(): Int = R.layout.activity_search_history + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + inputView.hint = "请输入合同名称或者编号查询" + } + + override fun initData() { + inflater = LayoutInflater.from(this) + weakReferenceHandler = WeakReferenceHandler { + if (it.what == 2023041001) { + if (isRefresh) { + historyAdapter.notifyDataChanged() + } else { + historyAdapter = object : TagAdapter(dataBeans) { + override fun getView( + parent: FlowLayout?, position: Int, bean: SearchHistoryBean + ): View { + val tagView = inflater.inflate( + R.layout.item_search_rv_l, tagFlowLayout, false + ) as QMUIRoundButton + tagView.text = bean.keywords + return tagView + } + } + tagFlowLayout.adapter = historyAdapter + tagFlowLayout.setOnTagClickListener { _, position, _ -> + inputView.setText(dataBeans[position].keywords) + navigatePageTo(inputView.text.toString()) + true + } + } + } + true + } + } + + override fun onResume() { + super.onResume() + dataBeans = DataBaseManager.get.queryHistoryByType(SearchType.Contract) + weakReferenceHandler.sendEmptyMessage(2023041001) + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + searchTextView.setOnClickListener { + if (!inputView.text.isNullOrBlank()) { + DataBaseManager.get.addSearchHistory( + inputView.text.toString(), SearchType.Contract + ) + } + + navigatePageTo(inputView.text.toString()) + } + + deleteHistoryView.setOnClickListener { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("确定将所有搜索记录删除?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + + } + + override fun onConfirmClick() { + DataBaseManager.get.deleteHistoryByType(SearchType.Contract) + dataBeans.clear() + historyAdapter.notifyDataChanged() + } + }).build().show() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractResultActivity.kt new file mode 100644 index 0000000..5096b88 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractResultActivity.kt @@ -0,0 +1,210 @@ +package com.casic.xz.meterage.view.search + +import android.content.Context +import android.os.Handler +import androidx.core.text.isDigitsOnly +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration +import com.casic.xz.meterage.R +import com.casic.xz.meterage.base.ApplicationBaseActivity +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.model.ContractListModel +import com.casic.xz.meterage.utils.AppMemoryCache +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.vm.ContractInvoiceViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_search_contract_reasult.* +import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class SearchContractResultActivity : ApplicationBaseActivity() { + + private var context: Context = this@SearchContractResultActivity + private lateinit var param: String + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var contractViewModel: ContractInvoiceViewModel + private lateinit var contractAdapter: NormalRecyclerAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.activity_search_contract_reasult + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "查询结果" + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + getContractListByPage() + } + + override fun initData() { + param = intent.getStringExtra(Constant.INTENT_PARAM)!! + + weakReferenceHandler = WeakReferenceHandler(callback) + contractViewModel = ViewModelProvider(this)[ContractInvoiceViewModel::class.java] + contractViewModel.contractList.observe(this) { + if (it.code == 200) { + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + contractLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows) + contractLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023041002) + } + } + } + + override fun observeRequestState() { + contractViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + + contractLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getContractListByPage() + } + + contractLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getContractListByPage() + } + } + + private fun getContractListByPage() { + if (param.isDigitsOnly()) { + contractViewModel.getContractList( + "", "", "", "", param, + "1", "", "", "", arrayOf(), + pageIndex + ) + } else { + if (param.length < 4) { + //输入参数长度小于4,默认查名称 + contractViewModel.getContractList( + "", "", param, "", "", + "1", "", "", "", arrayOf(), + pageIndex + ) + } else { + if (AppMemoryCache.prefixCode.contains(param.substring(0, 4))) { + contractViewModel.getContractList( + "", "", "", "", param, + "1", "", "", "", arrayOf(), + pageIndex + ) + } else { + contractViewModel.getContractList( + "", "", param, "", "", + "1", "", "", "", arrayOf(), + pageIndex + ) + } + } + } + } + + private val callback = Handler.Callback { + when (it.what) { + 2023041002 -> { + if (isRefresh || isLoadMore) { + contractAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无合同") { + pageIndex = 1 + getContractListByPage() + } + } else { + emptyView!!.hide() + contractAdapter = object : + NormalRecyclerAdapter( + R.layout.item_contract_rv_l, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, + position: Int, + item: ContractListModel.DataModel.RowsModel + ) { + viewHolder.setText(R.id.contractNameView, item.agreementName) + .setText(R.id.contractStateView, item.statusName) + .setText(R.id.contractCodeView, "合同编号:${item.agreementNo}") + .setText(R.id.firstPartNameView, "甲方单位:${item.firstParty}") + .setText( + R.id.startDateView, + "签订日期:${item.estimateSignDate.formatToYearMonthDay()}" + ) + + if (item.statusName.contains("已完成")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.green.convertColor(context) + ) + } else if (item.statusName.contains("未完成")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.red.convertColor(context) + ) + } else if (item.statusName.contains("已废止")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.gray.convertColor(context) + ) + } + } + } + contractRecyclerView.addItemDecoration( + DividerItemDecoration(this, DividerItemDecoration.VERTICAL) + ) + contractRecyclerView.adapter = contractAdapter + contractAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, t: ContractListModel.DataModel.RowsModel + ) { +// navigatePageTo(t.id) + } + }) + } + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt index 08d6bd2..3430e24 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_customer.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* /** @@ -93,7 +93,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_customer + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustActivity.kt index 2bff498..159d51d 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_entrust.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* /** @@ -93,7 +93,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_entrust + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 9fc7c01..78d7828 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -71,6 +71,7 @@ + @@ -85,6 +86,8 @@ + + diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt index 71fe5a8..ad81434 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt @@ -170,7 +170,7 @@ "标准规范" -> requireContext().navigatePageTo() "能力列表" -> requireContext().navigatePageTo() "计量培训" -> requireContext().navigatePageTo() -// "合同发票" -> requireContext().navigatePageTo() + "合同发票" -> requireContext().navigatePageTo() // "业务统计" -> requireContext().navigatePageTo() "客户列表" -> requireContext().navigatePageTo() // "外场检测" -> requireContext().navigatePageTo() diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt index b47cb32..b12a0bf 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt @@ -184,7 +184,7 @@ requireContext().navigatePageTo() } - //TODO 未实现 + //TODO 通过接口修改数据库字段实现 pushSettingSwitch.setOnCheckedChangeListener { _, isChecked -> SaveKeyValues.putValue(LocaleConstant.PUSH_SETTING, isChecked) if (isChecked) { diff --git a/app/src/main/java/com/casic/xz/meterage/model/ContractListModel.java b/app/src/main/java/com/casic/xz/meterage/model/ContractListModel.java new file mode 100644 index 0000000..111ff52 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/model/ContractListModel.java @@ -0,0 +1,364 @@ +package com.casic.xz.meterage.model; + +import java.util.List; + +public class ContractListModel { + + 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 agreementAmount; + private String agreementEndDate; + private String agreementImportantContent; + private String agreementKind; + private String agreementKindName; + private String agreementName; + private String agreementNo; + private String agreementSource; + private String agreementSourceName; + private String agreementStartDate; + private String agreementType; + private String agreementTypeName; + private String approvalStatus; + private String createTime; + private String createUser; + private String createUserName; + private String customerId; + private String deptId; + private String deptName; + private String director; + private String estimateSignDate; + private String firstParty; + private String id; + private String isDel; + private String minioFileName; + private String orderIdList; + private String orderList; + private String paymentList; + private String processId; + private String remark; + private String secondParty; + private String status; + private String statusName; + private String updateTime; + + public String getAgreementAmount() { + return agreementAmount; + } + + public void setAgreementAmount(String agreementAmount) { + this.agreementAmount = agreementAmount; + } + + public String getAgreementEndDate() { + return agreementEndDate; + } + + public void setAgreementEndDate(String agreementEndDate) { + this.agreementEndDate = agreementEndDate; + } + + public String getAgreementImportantContent() { + return agreementImportantContent; + } + + public void setAgreementImportantContent(String agreementImportantContent) { + this.agreementImportantContent = agreementImportantContent; + } + + public String getAgreementKind() { + return agreementKind; + } + + public void setAgreementKind(String agreementKind) { + this.agreementKind = agreementKind; + } + + public String getAgreementKindName() { + return agreementKindName; + } + + public void setAgreementKindName(String agreementKindName) { + this.agreementKindName = agreementKindName; + } + + public String getAgreementName() { + return agreementName; + } + + public void setAgreementName(String agreementName) { + this.agreementName = agreementName; + } + + public String getAgreementNo() { + return agreementNo; + } + + public void setAgreementNo(String agreementNo) { + this.agreementNo = agreementNo; + } + + public String getAgreementSource() { + return agreementSource; + } + + public void setAgreementSource(String agreementSource) { + this.agreementSource = agreementSource; + } + + public String getAgreementSourceName() { + return agreementSourceName; + } + + public void setAgreementSourceName(String agreementSourceName) { + this.agreementSourceName = agreementSourceName; + } + + public String getAgreementStartDate() { + return agreementStartDate; + } + + public void setAgreementStartDate(String agreementStartDate) { + this.agreementStartDate = agreementStartDate; + } + + public String getAgreementType() { + return agreementType; + } + + public void setAgreementType(String agreementType) { + this.agreementType = agreementType; + } + + public String getAgreementTypeName() { + return agreementTypeName; + } + + public void setAgreementTypeName(String agreementTypeName) { + this.agreementTypeName = agreementTypeName; + } + + public String getApprovalStatus() { + return approvalStatus; + } + + public void setApprovalStatus(String approvalStatus) { + this.approvalStatus = approvalStatus; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getCreateUser() { + return createUser; + } + + public void setCreateUser(String createUser) { + this.createUser = createUser; + } + + public String getCreateUserName() { + return createUserName; + } + + public void setCreateUserName(String createUserName) { + this.createUserName = createUserName; + } + + public String getCustomerId() { + return customerId; + } + + public void setCustomerId(String customerId) { + this.customerId = customerId; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDirector() { + return director; + } + + public void setDirector(String director) { + this.director = director; + } + + public String getEstimateSignDate() { + return estimateSignDate; + } + + public void setEstimateSignDate(String estimateSignDate) { + this.estimateSignDate = estimateSignDate; + } + + public String getFirstParty() { + return firstParty; + } + + public void setFirstParty(String firstParty) { + this.firstParty = firstParty; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getIsDel() { + return isDel; + } + + public void setIsDel(String isDel) { + this.isDel = isDel; + } + + public String getMinioFileName() { + return minioFileName; + } + + public void setMinioFileName(String minioFileName) { + this.minioFileName = minioFileName; + } + + public String getOrderIdList() { + return orderIdList; + } + + public void setOrderIdList(String orderIdList) { + this.orderIdList = orderIdList; + } + + public String getOrderList() { + return orderList; + } + + public void setOrderList(String orderList) { + this.orderList = orderList; + } + + public String getPaymentList() { + return paymentList; + } + + public void setPaymentList(String paymentList) { + this.paymentList = paymentList; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + public String getSecondParty() { + return secondParty; + } + + public void setSecondParty(String secondParty) { + this.secondParty = secondParty; + } + + 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; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt index 85756b0..36059c5 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt @@ -65,4 +65,8 @@ const val USER_ID = "userId" const val PRIVACY_CHECK_BOX = "privacyCheckBox" const val PUSH_SETTING = "pushSetting" + const val METERAGE_TRAIN_FORM_ID = "jlglpxjhsp" + const val STANDARD_FILE_FORM_ID = "jlglwjsp" + const val CERTIFICATE_REPORT_FORM_ID = "ywglzsbg" + const val CONTRACT_FORM_ID = "cwczht" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt b/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt index da58079..99f3bb1 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt @@ -2,37 +2,42 @@ object SearchType { /** + * 首页模糊搜索 + * */ + const val All = "0" + + /** * 搜索仪器设备 * */ - const val Equipment = "0" + const val Equipment = "1" /** * 搜索标准装置 * */ - const val StandardDevice = "1" + const val StandardDevice = "2" /** * 搜索委托书需求 * */ - const val Entrust = "2" + const val Entrust = "3" /** * 搜索能力 * */ - const val Capability = "3" + const val Capability = "4" /** * 搜索计量培训 * */ - const val MeterageTrain = "4" + const val MeterageTrain = "5" /** * 搜索客户 * */ - const val Customer = "5" + const val Customer = "6" /** - * 首页模糊搜索 + * 搜索仪器设备 * */ - const val All = "6" + const val Contract = "7" } 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 3bd698a..bc4d694 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 @@ -446,4 +446,15 @@ @QueryMap limit: Map, @QueryMap offset: Map ): String + + /** + * 合同列表 + */ + @POST("/finance/agreement/listPage") + suspend fun getContractList( + @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 9e7556b..1aaabee 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 @@ -459,7 +459,6 @@ effectiveCompany: String, trainStartTime: String, trainEndTime: String, - formId: String, ids: Array, offset: Int ): String { @@ -473,7 +472,7 @@ param.addProperty("effectiveCompany", effectiveCompany) param.addProperty("trainStartTime", trainStartTime) param.addProperty("trainEndTime", trainEndTime) - param.addProperty("formId", formId) + param.addProperty("formId", LocaleConstant.METERAGE_TRAIN_FORM_ID) param.add("ids", gson.toJsonTree(ids, typeToken).asJsonArray) val requestBody = param.toString().toRequestBody( @@ -843,7 +842,7 @@ offset: Int ): String { val param = JsonObject() - param.addProperty("formId", "jlglwjsp") + param.addProperty("formId", LocaleConstant.STANDARD_FILE_FORM_ID) param.addProperty("fileType", fileType) param.addProperty("fileName", fileName) param.addProperty("fileNo", fileNo) @@ -884,7 +883,7 @@ offset: Int ): String { val param = JsonObject() - param.addProperty("formId", "ywglzsbg") + param.addProperty("formId", LocaleConstant.CERTIFICATE_REPORT_FORM_ID) param.addProperty("approvalStatus", approvalStatus) param.addProperty("certificateReportCode", certificateReportCode) param.addProperty("customerName", customerName) @@ -925,7 +924,7 @@ */ suspend fun submit(id: String): String { val param = JsonObject() - param.addProperty("formId", "ywglzsbg") + param.addProperty("formId", LocaleConstant.CERTIFICATE_REPORT_FORM_ID) param.addProperty("id", id) val requestBody = param.toString().toRequestBody( "application/json;charset=UTF-8".toMediaType() @@ -1009,4 +1008,47 @@ AuthenticationHelper.token!!, requestBody, limitMap, offsetMap ) } + + /** + * 合同列表 + */ + suspend fun getContractList( + customerId: String, + agreementKind: String, + agreementName: String, + agreementType: String, + agreementNo: String, + estimateSignStartDate: String, + estimateSignEndDate: String, + firstParty: String, + status: String, + ids: Array, + offset: Int + ): String { + val param = JsonObject() + param.addProperty("customerId", customerId) + param.addProperty("agreementKind", agreementKind) + param.addProperty("agreementName", agreementName) + param.addProperty("agreementType", agreementType) + param.addProperty("agreementNo", agreementNo) + param.addProperty("estimateSignStartDate", estimateSignStartDate) + param.addProperty("estimateSignEndDate", estimateSignEndDate) + param.addProperty("firstParty", firstParty) + param.addProperty("formId", LocaleConstant.CONTRACT_FORM_ID) + param.addProperty("status", status) + param.add("ids", gson.toJsonTree(ids, typeToken).asJsonArray) + + val requestBody = param.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + + val limitMap = HashMap() + limitMap["limit"] = LocaleConstant.PAGE_LIMIT + + val offsetMap = HashMap() + offsetMap["offset"] = offset + return api.getContractList( + AuthenticationHelper.token!!, requestBody, limitMap, offsetMap + ) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/ContractInvoiceActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/ContractInvoiceActivity.kt new file mode 100644 index 0000000..96148a3 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/home/ContractInvoiceActivity.kt @@ -0,0 +1,192 @@ +package com.casic.xz.meterage.view.home + +import android.content.Context +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration +import com.casic.xz.meterage.R +import com.casic.xz.meterage.base.ApplicationBaseActivity +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.model.ContractListModel +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.view.search.SearchContractActivity +import com.casic.xz.meterage.vm.ContractInvoiceViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +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_contract_invoice.* +import kotlinx.android.synthetic.main.include_empty_view.* +import kotlinx.android.synthetic.main.include_search_title.* + +class ContractInvoiceActivity : ApplicationBaseActivity() { + + private var context: Context = this@ContractInvoiceActivity + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var contractViewModel: ContractInvoiceViewModel + private lateinit var contractAdapter: NormalRecyclerAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.activity_contract_invoice + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "合同发票" + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + contractViewModel = ViewModelProvider(this)[ContractInvoiceViewModel::class.java] + contractViewModel.contractList.observe(this) { + if (it.code == 200) { + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + contractLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows) + contractLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023041001) + } + } + } + + override fun observeRequestState() { + contractViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + rightOperateView.setOnClickListener { + navigatePageTo() + } + + contractLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getContractListByPage() + } + + contractLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getContractListByPage() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + getContractListByPage() + } + + private fun getContractListByPage() { + contractViewModel.getContractList( + "", + "", + "", + "", + "", + "1", + "", + "", + "", + arrayOf(), + pageIndex + ) + } + + private val callback = Handler.Callback { + when (it.what) { + 2023041001 -> { + if (isRefresh || isLoadMore) { + contractAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无合同") { + pageIndex = 1 + getContractListByPage() + } + } else { + emptyView!!.hide() + contractAdapter = object : + NormalRecyclerAdapter( + R.layout.item_contract_rv_l, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, + position: Int, + item: ContractListModel.DataModel.RowsModel + ) { + viewHolder.setText(R.id.contractNameView, item.agreementName) + .setText(R.id.contractStateView, item.statusName) + .setText(R.id.contractCodeView, "合同编号:${item.agreementNo}") + .setText(R.id.firstPartNameView, "甲方单位:${item.firstParty}") + .setText( + R.id.startDateView, + "签订日期:${item.estimateSignDate.formatToYearMonthDay()}" + ) + + if (item.statusName.contains("已完成")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.green.convertColor(context) + ) + } else if (item.statusName.contains("未完成")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.red.convertColor(context) + ) + } else if (item.statusName.contains("已废止")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.gray.convertColor(context) + ) + } + } + } + contractRecyclerView.addItemDecoration( + DividerItemDecoration(this, DividerItemDecoration.VERTICAL) + ) + contractRecyclerView.adapter = contractAdapter + contractAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, t: ContractListModel.DataModel.RowsModel + ) { +// navigatePageTo(t.id) + } + }) + } + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt index 373c386..078f497 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt @@ -117,7 +117,6 @@ "", "", "", - "jlglpxjhsp", arrayOf(), pageIndex ) diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt index 16bcd38..92e256d 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_capability.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* /** @@ -93,7 +93,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_capability + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractActivity.kt new file mode 100644 index 0000000..17f6cda --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractActivity.kt @@ -0,0 +1,113 @@ +package com.casic.xz.meterage.view.search + +import android.view.LayoutInflater +import android.view.View +import com.casic.xz.meterage.R +import com.casic.xz.meterage.base.ApplicationBaseActivity +import com.casic.xz.meterage.bean.SearchHistoryBean +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.utils.DataBaseManager +import com.casic.xz.meterage.utils.SearchType +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton +import com.zhy.view.flowlayout.FlowLayout +import com.zhy.view.flowlayout.TagAdapter +import kotlinx.android.synthetic.main.activity_search_history.* +import kotlinx.android.synthetic.main.include_search_input_title.* + +/** + * 搜索合同 + * */ +class SearchContractActivity : ApplicationBaseActivity() { + + private lateinit var inflater: LayoutInflater + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var historyAdapter: TagAdapter + private var dataBeans: MutableList = ArrayList() + private var isRefresh = false + + override fun initLayoutView(): Int = R.layout.activity_search_history + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + inputView.hint = "请输入合同名称或者编号查询" + } + + override fun initData() { + inflater = LayoutInflater.from(this) + weakReferenceHandler = WeakReferenceHandler { + if (it.what == 2023041001) { + if (isRefresh) { + historyAdapter.notifyDataChanged() + } else { + historyAdapter = object : TagAdapter(dataBeans) { + override fun getView( + parent: FlowLayout?, position: Int, bean: SearchHistoryBean + ): View { + val tagView = inflater.inflate( + R.layout.item_search_rv_l, tagFlowLayout, false + ) as QMUIRoundButton + tagView.text = bean.keywords + return tagView + } + } + tagFlowLayout.adapter = historyAdapter + tagFlowLayout.setOnTagClickListener { _, position, _ -> + inputView.setText(dataBeans[position].keywords) + navigatePageTo(inputView.text.toString()) + true + } + } + } + true + } + } + + override fun onResume() { + super.onResume() + dataBeans = DataBaseManager.get.queryHistoryByType(SearchType.Contract) + weakReferenceHandler.sendEmptyMessage(2023041001) + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + searchTextView.setOnClickListener { + if (!inputView.text.isNullOrBlank()) { + DataBaseManager.get.addSearchHistory( + inputView.text.toString(), SearchType.Contract + ) + } + + navigatePageTo(inputView.text.toString()) + } + + deleteHistoryView.setOnClickListener { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("确定将所有搜索记录删除?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + + } + + override fun onConfirmClick() { + DataBaseManager.get.deleteHistoryByType(SearchType.Contract) + dataBeans.clear() + historyAdapter.notifyDataChanged() + } + }).build().show() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractResultActivity.kt new file mode 100644 index 0000000..5096b88 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractResultActivity.kt @@ -0,0 +1,210 @@ +package com.casic.xz.meterage.view.search + +import android.content.Context +import android.os.Handler +import androidx.core.text.isDigitsOnly +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration +import com.casic.xz.meterage.R +import com.casic.xz.meterage.base.ApplicationBaseActivity +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.model.ContractListModel +import com.casic.xz.meterage.utils.AppMemoryCache +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.vm.ContractInvoiceViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_search_contract_reasult.* +import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class SearchContractResultActivity : ApplicationBaseActivity() { + + private var context: Context = this@SearchContractResultActivity + private lateinit var param: String + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var contractViewModel: ContractInvoiceViewModel + private lateinit var contractAdapter: NormalRecyclerAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.activity_search_contract_reasult + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "查询结果" + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + getContractListByPage() + } + + override fun initData() { + param = intent.getStringExtra(Constant.INTENT_PARAM)!! + + weakReferenceHandler = WeakReferenceHandler(callback) + contractViewModel = ViewModelProvider(this)[ContractInvoiceViewModel::class.java] + contractViewModel.contractList.observe(this) { + if (it.code == 200) { + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + contractLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows) + contractLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023041002) + } + } + } + + override fun observeRequestState() { + contractViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + + contractLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getContractListByPage() + } + + contractLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getContractListByPage() + } + } + + private fun getContractListByPage() { + if (param.isDigitsOnly()) { + contractViewModel.getContractList( + "", "", "", "", param, + "1", "", "", "", arrayOf(), + pageIndex + ) + } else { + if (param.length < 4) { + //输入参数长度小于4,默认查名称 + contractViewModel.getContractList( + "", "", param, "", "", + "1", "", "", "", arrayOf(), + pageIndex + ) + } else { + if (AppMemoryCache.prefixCode.contains(param.substring(0, 4))) { + contractViewModel.getContractList( + "", "", "", "", param, + "1", "", "", "", arrayOf(), + pageIndex + ) + } else { + contractViewModel.getContractList( + "", "", param, "", "", + "1", "", "", "", arrayOf(), + pageIndex + ) + } + } + } + } + + private val callback = Handler.Callback { + when (it.what) { + 2023041002 -> { + if (isRefresh || isLoadMore) { + contractAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无合同") { + pageIndex = 1 + getContractListByPage() + } + } else { + emptyView!!.hide() + contractAdapter = object : + NormalRecyclerAdapter( + R.layout.item_contract_rv_l, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, + position: Int, + item: ContractListModel.DataModel.RowsModel + ) { + viewHolder.setText(R.id.contractNameView, item.agreementName) + .setText(R.id.contractStateView, item.statusName) + .setText(R.id.contractCodeView, "合同编号:${item.agreementNo}") + .setText(R.id.firstPartNameView, "甲方单位:${item.firstParty}") + .setText( + R.id.startDateView, + "签订日期:${item.estimateSignDate.formatToYearMonthDay()}" + ) + + if (item.statusName.contains("已完成")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.green.convertColor(context) + ) + } else if (item.statusName.contains("未完成")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.red.convertColor(context) + ) + } else if (item.statusName.contains("已废止")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.gray.convertColor(context) + ) + } + } + } + contractRecyclerView.addItemDecoration( + DividerItemDecoration(this, DividerItemDecoration.VERTICAL) + ) + contractRecyclerView.adapter = contractAdapter + contractAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, t: ContractListModel.DataModel.RowsModel + ) { +// navigatePageTo(t.id) + } + }) + } + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt index 08d6bd2..3430e24 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_customer.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* /** @@ -93,7 +93,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_customer + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustActivity.kt index 2bff498..159d51d 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_entrust.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* /** @@ -93,7 +93,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_entrust + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt index b105378..f9b1076 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_equipment.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* @@ -100,7 +100,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_equipment + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 9fc7c01..78d7828 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -71,6 +71,7 @@ + @@ -85,6 +86,8 @@ + + diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt index 71fe5a8..ad81434 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt @@ -170,7 +170,7 @@ "标准规范" -> requireContext().navigatePageTo() "能力列表" -> requireContext().navigatePageTo() "计量培训" -> requireContext().navigatePageTo() -// "合同发票" -> requireContext().navigatePageTo() + "合同发票" -> requireContext().navigatePageTo() // "业务统计" -> requireContext().navigatePageTo() "客户列表" -> requireContext().navigatePageTo() // "外场检测" -> requireContext().navigatePageTo() diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt index b47cb32..b12a0bf 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt @@ -184,7 +184,7 @@ requireContext().navigatePageTo() } - //TODO 未实现 + //TODO 通过接口修改数据库字段实现 pushSettingSwitch.setOnCheckedChangeListener { _, isChecked -> SaveKeyValues.putValue(LocaleConstant.PUSH_SETTING, isChecked) if (isChecked) { diff --git a/app/src/main/java/com/casic/xz/meterage/model/ContractListModel.java b/app/src/main/java/com/casic/xz/meterage/model/ContractListModel.java new file mode 100644 index 0000000..111ff52 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/model/ContractListModel.java @@ -0,0 +1,364 @@ +package com.casic.xz.meterage.model; + +import java.util.List; + +public class ContractListModel { + + 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 agreementAmount; + private String agreementEndDate; + private String agreementImportantContent; + private String agreementKind; + private String agreementKindName; + private String agreementName; + private String agreementNo; + private String agreementSource; + private String agreementSourceName; + private String agreementStartDate; + private String agreementType; + private String agreementTypeName; + private String approvalStatus; + private String createTime; + private String createUser; + private String createUserName; + private String customerId; + private String deptId; + private String deptName; + private String director; + private String estimateSignDate; + private String firstParty; + private String id; + private String isDel; + private String minioFileName; + private String orderIdList; + private String orderList; + private String paymentList; + private String processId; + private String remark; + private String secondParty; + private String status; + private String statusName; + private String updateTime; + + public String getAgreementAmount() { + return agreementAmount; + } + + public void setAgreementAmount(String agreementAmount) { + this.agreementAmount = agreementAmount; + } + + public String getAgreementEndDate() { + return agreementEndDate; + } + + public void setAgreementEndDate(String agreementEndDate) { + this.agreementEndDate = agreementEndDate; + } + + public String getAgreementImportantContent() { + return agreementImportantContent; + } + + public void setAgreementImportantContent(String agreementImportantContent) { + this.agreementImportantContent = agreementImportantContent; + } + + public String getAgreementKind() { + return agreementKind; + } + + public void setAgreementKind(String agreementKind) { + this.agreementKind = agreementKind; + } + + public String getAgreementKindName() { + return agreementKindName; + } + + public void setAgreementKindName(String agreementKindName) { + this.agreementKindName = agreementKindName; + } + + public String getAgreementName() { + return agreementName; + } + + public void setAgreementName(String agreementName) { + this.agreementName = agreementName; + } + + public String getAgreementNo() { + return agreementNo; + } + + public void setAgreementNo(String agreementNo) { + this.agreementNo = agreementNo; + } + + public String getAgreementSource() { + return agreementSource; + } + + public void setAgreementSource(String agreementSource) { + this.agreementSource = agreementSource; + } + + public String getAgreementSourceName() { + return agreementSourceName; + } + + public void setAgreementSourceName(String agreementSourceName) { + this.agreementSourceName = agreementSourceName; + } + + public String getAgreementStartDate() { + return agreementStartDate; + } + + public void setAgreementStartDate(String agreementStartDate) { + this.agreementStartDate = agreementStartDate; + } + + public String getAgreementType() { + return agreementType; + } + + public void setAgreementType(String agreementType) { + this.agreementType = agreementType; + } + + public String getAgreementTypeName() { + return agreementTypeName; + } + + public void setAgreementTypeName(String agreementTypeName) { + this.agreementTypeName = agreementTypeName; + } + + public String getApprovalStatus() { + return approvalStatus; + } + + public void setApprovalStatus(String approvalStatus) { + this.approvalStatus = approvalStatus; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getCreateUser() { + return createUser; + } + + public void setCreateUser(String createUser) { + this.createUser = createUser; + } + + public String getCreateUserName() { + return createUserName; + } + + public void setCreateUserName(String createUserName) { + this.createUserName = createUserName; + } + + public String getCustomerId() { + return customerId; + } + + public void setCustomerId(String customerId) { + this.customerId = customerId; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDirector() { + return director; + } + + public void setDirector(String director) { + this.director = director; + } + + public String getEstimateSignDate() { + return estimateSignDate; + } + + public void setEstimateSignDate(String estimateSignDate) { + this.estimateSignDate = estimateSignDate; + } + + public String getFirstParty() { + return firstParty; + } + + public void setFirstParty(String firstParty) { + this.firstParty = firstParty; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getIsDel() { + return isDel; + } + + public void setIsDel(String isDel) { + this.isDel = isDel; + } + + public String getMinioFileName() { + return minioFileName; + } + + public void setMinioFileName(String minioFileName) { + this.minioFileName = minioFileName; + } + + public String getOrderIdList() { + return orderIdList; + } + + public void setOrderIdList(String orderIdList) { + this.orderIdList = orderIdList; + } + + public String getOrderList() { + return orderList; + } + + public void setOrderList(String orderList) { + this.orderList = orderList; + } + + public String getPaymentList() { + return paymentList; + } + + public void setPaymentList(String paymentList) { + this.paymentList = paymentList; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + public String getSecondParty() { + return secondParty; + } + + public void setSecondParty(String secondParty) { + this.secondParty = secondParty; + } + + 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; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt index 85756b0..36059c5 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt @@ -65,4 +65,8 @@ const val USER_ID = "userId" const val PRIVACY_CHECK_BOX = "privacyCheckBox" const val PUSH_SETTING = "pushSetting" + const val METERAGE_TRAIN_FORM_ID = "jlglpxjhsp" + const val STANDARD_FILE_FORM_ID = "jlglwjsp" + const val CERTIFICATE_REPORT_FORM_ID = "ywglzsbg" + const val CONTRACT_FORM_ID = "cwczht" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt b/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt index da58079..99f3bb1 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt @@ -2,37 +2,42 @@ object SearchType { /** + * 首页模糊搜索 + * */ + const val All = "0" + + /** * 搜索仪器设备 * */ - const val Equipment = "0" + const val Equipment = "1" /** * 搜索标准装置 * */ - const val StandardDevice = "1" + const val StandardDevice = "2" /** * 搜索委托书需求 * */ - const val Entrust = "2" + const val Entrust = "3" /** * 搜索能力 * */ - const val Capability = "3" + const val Capability = "4" /** * 搜索计量培训 * */ - const val MeterageTrain = "4" + const val MeterageTrain = "5" /** * 搜索客户 * */ - const val Customer = "5" + const val Customer = "6" /** - * 首页模糊搜索 + * 搜索仪器设备 * */ - const val All = "6" + const val Contract = "7" } 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 3bd698a..bc4d694 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 @@ -446,4 +446,15 @@ @QueryMap limit: Map, @QueryMap offset: Map ): String + + /** + * 合同列表 + */ + @POST("/finance/agreement/listPage") + suspend fun getContractList( + @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 9e7556b..1aaabee 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 @@ -459,7 +459,6 @@ effectiveCompany: String, trainStartTime: String, trainEndTime: String, - formId: String, ids: Array, offset: Int ): String { @@ -473,7 +472,7 @@ param.addProperty("effectiveCompany", effectiveCompany) param.addProperty("trainStartTime", trainStartTime) param.addProperty("trainEndTime", trainEndTime) - param.addProperty("formId", formId) + param.addProperty("formId", LocaleConstant.METERAGE_TRAIN_FORM_ID) param.add("ids", gson.toJsonTree(ids, typeToken).asJsonArray) val requestBody = param.toString().toRequestBody( @@ -843,7 +842,7 @@ offset: Int ): String { val param = JsonObject() - param.addProperty("formId", "jlglwjsp") + param.addProperty("formId", LocaleConstant.STANDARD_FILE_FORM_ID) param.addProperty("fileType", fileType) param.addProperty("fileName", fileName) param.addProperty("fileNo", fileNo) @@ -884,7 +883,7 @@ offset: Int ): String { val param = JsonObject() - param.addProperty("formId", "ywglzsbg") + param.addProperty("formId", LocaleConstant.CERTIFICATE_REPORT_FORM_ID) param.addProperty("approvalStatus", approvalStatus) param.addProperty("certificateReportCode", certificateReportCode) param.addProperty("customerName", customerName) @@ -925,7 +924,7 @@ */ suspend fun submit(id: String): String { val param = JsonObject() - param.addProperty("formId", "ywglzsbg") + param.addProperty("formId", LocaleConstant.CERTIFICATE_REPORT_FORM_ID) param.addProperty("id", id) val requestBody = param.toString().toRequestBody( "application/json;charset=UTF-8".toMediaType() @@ -1009,4 +1008,47 @@ AuthenticationHelper.token!!, requestBody, limitMap, offsetMap ) } + + /** + * 合同列表 + */ + suspend fun getContractList( + customerId: String, + agreementKind: String, + agreementName: String, + agreementType: String, + agreementNo: String, + estimateSignStartDate: String, + estimateSignEndDate: String, + firstParty: String, + status: String, + ids: Array, + offset: Int + ): String { + val param = JsonObject() + param.addProperty("customerId", customerId) + param.addProperty("agreementKind", agreementKind) + param.addProperty("agreementName", agreementName) + param.addProperty("agreementType", agreementType) + param.addProperty("agreementNo", agreementNo) + param.addProperty("estimateSignStartDate", estimateSignStartDate) + param.addProperty("estimateSignEndDate", estimateSignEndDate) + param.addProperty("firstParty", firstParty) + param.addProperty("formId", LocaleConstant.CONTRACT_FORM_ID) + param.addProperty("status", status) + param.add("ids", gson.toJsonTree(ids, typeToken).asJsonArray) + + val requestBody = param.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + + val limitMap = HashMap() + limitMap["limit"] = LocaleConstant.PAGE_LIMIT + + val offsetMap = HashMap() + offsetMap["offset"] = offset + return api.getContractList( + AuthenticationHelper.token!!, requestBody, limitMap, offsetMap + ) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/ContractInvoiceActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/ContractInvoiceActivity.kt new file mode 100644 index 0000000..96148a3 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/home/ContractInvoiceActivity.kt @@ -0,0 +1,192 @@ +package com.casic.xz.meterage.view.home + +import android.content.Context +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration +import com.casic.xz.meterage.R +import com.casic.xz.meterage.base.ApplicationBaseActivity +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.model.ContractListModel +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.view.search.SearchContractActivity +import com.casic.xz.meterage.vm.ContractInvoiceViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +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_contract_invoice.* +import kotlinx.android.synthetic.main.include_empty_view.* +import kotlinx.android.synthetic.main.include_search_title.* + +class ContractInvoiceActivity : ApplicationBaseActivity() { + + private var context: Context = this@ContractInvoiceActivity + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var contractViewModel: ContractInvoiceViewModel + private lateinit var contractAdapter: NormalRecyclerAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.activity_contract_invoice + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "合同发票" + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + contractViewModel = ViewModelProvider(this)[ContractInvoiceViewModel::class.java] + contractViewModel.contractList.observe(this) { + if (it.code == 200) { + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + contractLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows) + contractLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023041001) + } + } + } + + override fun observeRequestState() { + contractViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + rightOperateView.setOnClickListener { + navigatePageTo() + } + + contractLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getContractListByPage() + } + + contractLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getContractListByPage() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + getContractListByPage() + } + + private fun getContractListByPage() { + contractViewModel.getContractList( + "", + "", + "", + "", + "", + "1", + "", + "", + "", + arrayOf(), + pageIndex + ) + } + + private val callback = Handler.Callback { + when (it.what) { + 2023041001 -> { + if (isRefresh || isLoadMore) { + contractAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无合同") { + pageIndex = 1 + getContractListByPage() + } + } else { + emptyView!!.hide() + contractAdapter = object : + NormalRecyclerAdapter( + R.layout.item_contract_rv_l, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, + position: Int, + item: ContractListModel.DataModel.RowsModel + ) { + viewHolder.setText(R.id.contractNameView, item.agreementName) + .setText(R.id.contractStateView, item.statusName) + .setText(R.id.contractCodeView, "合同编号:${item.agreementNo}") + .setText(R.id.firstPartNameView, "甲方单位:${item.firstParty}") + .setText( + R.id.startDateView, + "签订日期:${item.estimateSignDate.formatToYearMonthDay()}" + ) + + if (item.statusName.contains("已完成")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.green.convertColor(context) + ) + } else if (item.statusName.contains("未完成")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.red.convertColor(context) + ) + } else if (item.statusName.contains("已废止")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.gray.convertColor(context) + ) + } + } + } + contractRecyclerView.addItemDecoration( + DividerItemDecoration(this, DividerItemDecoration.VERTICAL) + ) + contractRecyclerView.adapter = contractAdapter + contractAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, t: ContractListModel.DataModel.RowsModel + ) { +// navigatePageTo(t.id) + } + }) + } + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt index 373c386..078f497 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt @@ -117,7 +117,6 @@ "", "", "", - "jlglpxjhsp", arrayOf(), pageIndex ) diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt index 16bcd38..92e256d 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_capability.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* /** @@ -93,7 +93,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_capability + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractActivity.kt new file mode 100644 index 0000000..17f6cda --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractActivity.kt @@ -0,0 +1,113 @@ +package com.casic.xz.meterage.view.search + +import android.view.LayoutInflater +import android.view.View +import com.casic.xz.meterage.R +import com.casic.xz.meterage.base.ApplicationBaseActivity +import com.casic.xz.meterage.bean.SearchHistoryBean +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.utils.DataBaseManager +import com.casic.xz.meterage.utils.SearchType +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton +import com.zhy.view.flowlayout.FlowLayout +import com.zhy.view.flowlayout.TagAdapter +import kotlinx.android.synthetic.main.activity_search_history.* +import kotlinx.android.synthetic.main.include_search_input_title.* + +/** + * 搜索合同 + * */ +class SearchContractActivity : ApplicationBaseActivity() { + + private lateinit var inflater: LayoutInflater + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var historyAdapter: TagAdapter + private var dataBeans: MutableList = ArrayList() + private var isRefresh = false + + override fun initLayoutView(): Int = R.layout.activity_search_history + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + inputView.hint = "请输入合同名称或者编号查询" + } + + override fun initData() { + inflater = LayoutInflater.from(this) + weakReferenceHandler = WeakReferenceHandler { + if (it.what == 2023041001) { + if (isRefresh) { + historyAdapter.notifyDataChanged() + } else { + historyAdapter = object : TagAdapter(dataBeans) { + override fun getView( + parent: FlowLayout?, position: Int, bean: SearchHistoryBean + ): View { + val tagView = inflater.inflate( + R.layout.item_search_rv_l, tagFlowLayout, false + ) as QMUIRoundButton + tagView.text = bean.keywords + return tagView + } + } + tagFlowLayout.adapter = historyAdapter + tagFlowLayout.setOnTagClickListener { _, position, _ -> + inputView.setText(dataBeans[position].keywords) + navigatePageTo(inputView.text.toString()) + true + } + } + } + true + } + } + + override fun onResume() { + super.onResume() + dataBeans = DataBaseManager.get.queryHistoryByType(SearchType.Contract) + weakReferenceHandler.sendEmptyMessage(2023041001) + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + searchTextView.setOnClickListener { + if (!inputView.text.isNullOrBlank()) { + DataBaseManager.get.addSearchHistory( + inputView.text.toString(), SearchType.Contract + ) + } + + navigatePageTo(inputView.text.toString()) + } + + deleteHistoryView.setOnClickListener { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("确定将所有搜索记录删除?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + + } + + override fun onConfirmClick() { + DataBaseManager.get.deleteHistoryByType(SearchType.Contract) + dataBeans.clear() + historyAdapter.notifyDataChanged() + } + }).build().show() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractResultActivity.kt new file mode 100644 index 0000000..5096b88 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractResultActivity.kt @@ -0,0 +1,210 @@ +package com.casic.xz.meterage.view.search + +import android.content.Context +import android.os.Handler +import androidx.core.text.isDigitsOnly +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration +import com.casic.xz.meterage.R +import com.casic.xz.meterage.base.ApplicationBaseActivity +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.model.ContractListModel +import com.casic.xz.meterage.utils.AppMemoryCache +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.vm.ContractInvoiceViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_search_contract_reasult.* +import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class SearchContractResultActivity : ApplicationBaseActivity() { + + private var context: Context = this@SearchContractResultActivity + private lateinit var param: String + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var contractViewModel: ContractInvoiceViewModel + private lateinit var contractAdapter: NormalRecyclerAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.activity_search_contract_reasult + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "查询结果" + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + getContractListByPage() + } + + override fun initData() { + param = intent.getStringExtra(Constant.INTENT_PARAM)!! + + weakReferenceHandler = WeakReferenceHandler(callback) + contractViewModel = ViewModelProvider(this)[ContractInvoiceViewModel::class.java] + contractViewModel.contractList.observe(this) { + if (it.code == 200) { + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + contractLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows) + contractLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023041002) + } + } + } + + override fun observeRequestState() { + contractViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + + contractLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getContractListByPage() + } + + contractLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getContractListByPage() + } + } + + private fun getContractListByPage() { + if (param.isDigitsOnly()) { + contractViewModel.getContractList( + "", "", "", "", param, + "1", "", "", "", arrayOf(), + pageIndex + ) + } else { + if (param.length < 4) { + //输入参数长度小于4,默认查名称 + contractViewModel.getContractList( + "", "", param, "", "", + "1", "", "", "", arrayOf(), + pageIndex + ) + } else { + if (AppMemoryCache.prefixCode.contains(param.substring(0, 4))) { + contractViewModel.getContractList( + "", "", "", "", param, + "1", "", "", "", arrayOf(), + pageIndex + ) + } else { + contractViewModel.getContractList( + "", "", param, "", "", + "1", "", "", "", arrayOf(), + pageIndex + ) + } + } + } + } + + private val callback = Handler.Callback { + when (it.what) { + 2023041002 -> { + if (isRefresh || isLoadMore) { + contractAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无合同") { + pageIndex = 1 + getContractListByPage() + } + } else { + emptyView!!.hide() + contractAdapter = object : + NormalRecyclerAdapter( + R.layout.item_contract_rv_l, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, + position: Int, + item: ContractListModel.DataModel.RowsModel + ) { + viewHolder.setText(R.id.contractNameView, item.agreementName) + .setText(R.id.contractStateView, item.statusName) + .setText(R.id.contractCodeView, "合同编号:${item.agreementNo}") + .setText(R.id.firstPartNameView, "甲方单位:${item.firstParty}") + .setText( + R.id.startDateView, + "签订日期:${item.estimateSignDate.formatToYearMonthDay()}" + ) + + if (item.statusName.contains("已完成")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.green.convertColor(context) + ) + } else if (item.statusName.contains("未完成")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.red.convertColor(context) + ) + } else if (item.statusName.contains("已废止")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.gray.convertColor(context) + ) + } + } + } + contractRecyclerView.addItemDecoration( + DividerItemDecoration(this, DividerItemDecoration.VERTICAL) + ) + contractRecyclerView.adapter = contractAdapter + contractAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, t: ContractListModel.DataModel.RowsModel + ) { +// navigatePageTo(t.id) + } + }) + } + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt index 08d6bd2..3430e24 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_customer.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* /** @@ -93,7 +93,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_customer + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustActivity.kt index 2bff498..159d51d 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_entrust.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* /** @@ -93,7 +93,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_entrust + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt index b105378..f9b1076 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_equipment.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* @@ -100,7 +100,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_equipment + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt index 6dba78b..0a8c595 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_global.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* class SearchGlobalActivity : ApplicationBaseActivity() { @@ -90,7 +90,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_global + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 9fc7c01..78d7828 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -71,6 +71,7 @@ + @@ -85,6 +86,8 @@ + + diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt index 71fe5a8..ad81434 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt @@ -170,7 +170,7 @@ "标准规范" -> requireContext().navigatePageTo() "能力列表" -> requireContext().navigatePageTo() "计量培训" -> requireContext().navigatePageTo() -// "合同发票" -> requireContext().navigatePageTo() + "合同发票" -> requireContext().navigatePageTo() // "业务统计" -> requireContext().navigatePageTo() "客户列表" -> requireContext().navigatePageTo() // "外场检测" -> requireContext().navigatePageTo() diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt index b47cb32..b12a0bf 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt @@ -184,7 +184,7 @@ requireContext().navigatePageTo() } - //TODO 未实现 + //TODO 通过接口修改数据库字段实现 pushSettingSwitch.setOnCheckedChangeListener { _, isChecked -> SaveKeyValues.putValue(LocaleConstant.PUSH_SETTING, isChecked) if (isChecked) { diff --git a/app/src/main/java/com/casic/xz/meterage/model/ContractListModel.java b/app/src/main/java/com/casic/xz/meterage/model/ContractListModel.java new file mode 100644 index 0000000..111ff52 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/model/ContractListModel.java @@ -0,0 +1,364 @@ +package com.casic.xz.meterage.model; + +import java.util.List; + +public class ContractListModel { + + 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 agreementAmount; + private String agreementEndDate; + private String agreementImportantContent; + private String agreementKind; + private String agreementKindName; + private String agreementName; + private String agreementNo; + private String agreementSource; + private String agreementSourceName; + private String agreementStartDate; + private String agreementType; + private String agreementTypeName; + private String approvalStatus; + private String createTime; + private String createUser; + private String createUserName; + private String customerId; + private String deptId; + private String deptName; + private String director; + private String estimateSignDate; + private String firstParty; + private String id; + private String isDel; + private String minioFileName; + private String orderIdList; + private String orderList; + private String paymentList; + private String processId; + private String remark; + private String secondParty; + private String status; + private String statusName; + private String updateTime; + + public String getAgreementAmount() { + return agreementAmount; + } + + public void setAgreementAmount(String agreementAmount) { + this.agreementAmount = agreementAmount; + } + + public String getAgreementEndDate() { + return agreementEndDate; + } + + public void setAgreementEndDate(String agreementEndDate) { + this.agreementEndDate = agreementEndDate; + } + + public String getAgreementImportantContent() { + return agreementImportantContent; + } + + public void setAgreementImportantContent(String agreementImportantContent) { + this.agreementImportantContent = agreementImportantContent; + } + + public String getAgreementKind() { + return agreementKind; + } + + public void setAgreementKind(String agreementKind) { + this.agreementKind = agreementKind; + } + + public String getAgreementKindName() { + return agreementKindName; + } + + public void setAgreementKindName(String agreementKindName) { + this.agreementKindName = agreementKindName; + } + + public String getAgreementName() { + return agreementName; + } + + public void setAgreementName(String agreementName) { + this.agreementName = agreementName; + } + + public String getAgreementNo() { + return agreementNo; + } + + public void setAgreementNo(String agreementNo) { + this.agreementNo = agreementNo; + } + + public String getAgreementSource() { + return agreementSource; + } + + public void setAgreementSource(String agreementSource) { + this.agreementSource = agreementSource; + } + + public String getAgreementSourceName() { + return agreementSourceName; + } + + public void setAgreementSourceName(String agreementSourceName) { + this.agreementSourceName = agreementSourceName; + } + + public String getAgreementStartDate() { + return agreementStartDate; + } + + public void setAgreementStartDate(String agreementStartDate) { + this.agreementStartDate = agreementStartDate; + } + + public String getAgreementType() { + return agreementType; + } + + public void setAgreementType(String agreementType) { + this.agreementType = agreementType; + } + + public String getAgreementTypeName() { + return agreementTypeName; + } + + public void setAgreementTypeName(String agreementTypeName) { + this.agreementTypeName = agreementTypeName; + } + + public String getApprovalStatus() { + return approvalStatus; + } + + public void setApprovalStatus(String approvalStatus) { + this.approvalStatus = approvalStatus; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getCreateUser() { + return createUser; + } + + public void setCreateUser(String createUser) { + this.createUser = createUser; + } + + public String getCreateUserName() { + return createUserName; + } + + public void setCreateUserName(String createUserName) { + this.createUserName = createUserName; + } + + public String getCustomerId() { + return customerId; + } + + public void setCustomerId(String customerId) { + this.customerId = customerId; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDirector() { + return director; + } + + public void setDirector(String director) { + this.director = director; + } + + public String getEstimateSignDate() { + return estimateSignDate; + } + + public void setEstimateSignDate(String estimateSignDate) { + this.estimateSignDate = estimateSignDate; + } + + public String getFirstParty() { + return firstParty; + } + + public void setFirstParty(String firstParty) { + this.firstParty = firstParty; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getIsDel() { + return isDel; + } + + public void setIsDel(String isDel) { + this.isDel = isDel; + } + + public String getMinioFileName() { + return minioFileName; + } + + public void setMinioFileName(String minioFileName) { + this.minioFileName = minioFileName; + } + + public String getOrderIdList() { + return orderIdList; + } + + public void setOrderIdList(String orderIdList) { + this.orderIdList = orderIdList; + } + + public String getOrderList() { + return orderList; + } + + public void setOrderList(String orderList) { + this.orderList = orderList; + } + + public String getPaymentList() { + return paymentList; + } + + public void setPaymentList(String paymentList) { + this.paymentList = paymentList; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + public String getSecondParty() { + return secondParty; + } + + public void setSecondParty(String secondParty) { + this.secondParty = secondParty; + } + + 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; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt index 85756b0..36059c5 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt @@ -65,4 +65,8 @@ const val USER_ID = "userId" const val PRIVACY_CHECK_BOX = "privacyCheckBox" const val PUSH_SETTING = "pushSetting" + const val METERAGE_TRAIN_FORM_ID = "jlglpxjhsp" + const val STANDARD_FILE_FORM_ID = "jlglwjsp" + const val CERTIFICATE_REPORT_FORM_ID = "ywglzsbg" + const val CONTRACT_FORM_ID = "cwczht" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt b/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt index da58079..99f3bb1 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt @@ -2,37 +2,42 @@ object SearchType { /** + * 首页模糊搜索 + * */ + const val All = "0" + + /** * 搜索仪器设备 * */ - const val Equipment = "0" + const val Equipment = "1" /** * 搜索标准装置 * */ - const val StandardDevice = "1" + const val StandardDevice = "2" /** * 搜索委托书需求 * */ - const val Entrust = "2" + const val Entrust = "3" /** * 搜索能力 * */ - const val Capability = "3" + const val Capability = "4" /** * 搜索计量培训 * */ - const val MeterageTrain = "4" + const val MeterageTrain = "5" /** * 搜索客户 * */ - const val Customer = "5" + const val Customer = "6" /** - * 首页模糊搜索 + * 搜索仪器设备 * */ - const val All = "6" + const val Contract = "7" } 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 3bd698a..bc4d694 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 @@ -446,4 +446,15 @@ @QueryMap limit: Map, @QueryMap offset: Map ): String + + /** + * 合同列表 + */ + @POST("/finance/agreement/listPage") + suspend fun getContractList( + @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 9e7556b..1aaabee 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 @@ -459,7 +459,6 @@ effectiveCompany: String, trainStartTime: String, trainEndTime: String, - formId: String, ids: Array, offset: Int ): String { @@ -473,7 +472,7 @@ param.addProperty("effectiveCompany", effectiveCompany) param.addProperty("trainStartTime", trainStartTime) param.addProperty("trainEndTime", trainEndTime) - param.addProperty("formId", formId) + param.addProperty("formId", LocaleConstant.METERAGE_TRAIN_FORM_ID) param.add("ids", gson.toJsonTree(ids, typeToken).asJsonArray) val requestBody = param.toString().toRequestBody( @@ -843,7 +842,7 @@ offset: Int ): String { val param = JsonObject() - param.addProperty("formId", "jlglwjsp") + param.addProperty("formId", LocaleConstant.STANDARD_FILE_FORM_ID) param.addProperty("fileType", fileType) param.addProperty("fileName", fileName) param.addProperty("fileNo", fileNo) @@ -884,7 +883,7 @@ offset: Int ): String { val param = JsonObject() - param.addProperty("formId", "ywglzsbg") + param.addProperty("formId", LocaleConstant.CERTIFICATE_REPORT_FORM_ID) param.addProperty("approvalStatus", approvalStatus) param.addProperty("certificateReportCode", certificateReportCode) param.addProperty("customerName", customerName) @@ -925,7 +924,7 @@ */ suspend fun submit(id: String): String { val param = JsonObject() - param.addProperty("formId", "ywglzsbg") + param.addProperty("formId", LocaleConstant.CERTIFICATE_REPORT_FORM_ID) param.addProperty("id", id) val requestBody = param.toString().toRequestBody( "application/json;charset=UTF-8".toMediaType() @@ -1009,4 +1008,47 @@ AuthenticationHelper.token!!, requestBody, limitMap, offsetMap ) } + + /** + * 合同列表 + */ + suspend fun getContractList( + customerId: String, + agreementKind: String, + agreementName: String, + agreementType: String, + agreementNo: String, + estimateSignStartDate: String, + estimateSignEndDate: String, + firstParty: String, + status: String, + ids: Array, + offset: Int + ): String { + val param = JsonObject() + param.addProperty("customerId", customerId) + param.addProperty("agreementKind", agreementKind) + param.addProperty("agreementName", agreementName) + param.addProperty("agreementType", agreementType) + param.addProperty("agreementNo", agreementNo) + param.addProperty("estimateSignStartDate", estimateSignStartDate) + param.addProperty("estimateSignEndDate", estimateSignEndDate) + param.addProperty("firstParty", firstParty) + param.addProperty("formId", LocaleConstant.CONTRACT_FORM_ID) + param.addProperty("status", status) + param.add("ids", gson.toJsonTree(ids, typeToken).asJsonArray) + + val requestBody = param.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + + val limitMap = HashMap() + limitMap["limit"] = LocaleConstant.PAGE_LIMIT + + val offsetMap = HashMap() + offsetMap["offset"] = offset + return api.getContractList( + AuthenticationHelper.token!!, requestBody, limitMap, offsetMap + ) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/ContractInvoiceActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/ContractInvoiceActivity.kt new file mode 100644 index 0000000..96148a3 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/home/ContractInvoiceActivity.kt @@ -0,0 +1,192 @@ +package com.casic.xz.meterage.view.home + +import android.content.Context +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration +import com.casic.xz.meterage.R +import com.casic.xz.meterage.base.ApplicationBaseActivity +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.model.ContractListModel +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.view.search.SearchContractActivity +import com.casic.xz.meterage.vm.ContractInvoiceViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +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_contract_invoice.* +import kotlinx.android.synthetic.main.include_empty_view.* +import kotlinx.android.synthetic.main.include_search_title.* + +class ContractInvoiceActivity : ApplicationBaseActivity() { + + private var context: Context = this@ContractInvoiceActivity + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var contractViewModel: ContractInvoiceViewModel + private lateinit var contractAdapter: NormalRecyclerAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.activity_contract_invoice + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "合同发票" + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + contractViewModel = ViewModelProvider(this)[ContractInvoiceViewModel::class.java] + contractViewModel.contractList.observe(this) { + if (it.code == 200) { + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + contractLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows) + contractLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023041001) + } + } + } + + override fun observeRequestState() { + contractViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + rightOperateView.setOnClickListener { + navigatePageTo() + } + + contractLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getContractListByPage() + } + + contractLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getContractListByPage() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + getContractListByPage() + } + + private fun getContractListByPage() { + contractViewModel.getContractList( + "", + "", + "", + "", + "", + "1", + "", + "", + "", + arrayOf(), + pageIndex + ) + } + + private val callback = Handler.Callback { + when (it.what) { + 2023041001 -> { + if (isRefresh || isLoadMore) { + contractAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无合同") { + pageIndex = 1 + getContractListByPage() + } + } else { + emptyView!!.hide() + contractAdapter = object : + NormalRecyclerAdapter( + R.layout.item_contract_rv_l, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, + position: Int, + item: ContractListModel.DataModel.RowsModel + ) { + viewHolder.setText(R.id.contractNameView, item.agreementName) + .setText(R.id.contractStateView, item.statusName) + .setText(R.id.contractCodeView, "合同编号:${item.agreementNo}") + .setText(R.id.firstPartNameView, "甲方单位:${item.firstParty}") + .setText( + R.id.startDateView, + "签订日期:${item.estimateSignDate.formatToYearMonthDay()}" + ) + + if (item.statusName.contains("已完成")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.green.convertColor(context) + ) + } else if (item.statusName.contains("未完成")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.red.convertColor(context) + ) + } else if (item.statusName.contains("已废止")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.gray.convertColor(context) + ) + } + } + } + contractRecyclerView.addItemDecoration( + DividerItemDecoration(this, DividerItemDecoration.VERTICAL) + ) + contractRecyclerView.adapter = contractAdapter + contractAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, t: ContractListModel.DataModel.RowsModel + ) { +// navigatePageTo(t.id) + } + }) + } + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt index 373c386..078f497 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt @@ -117,7 +117,6 @@ "", "", "", - "jlglpxjhsp", arrayOf(), pageIndex ) diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt index 16bcd38..92e256d 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_capability.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* /** @@ -93,7 +93,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_capability + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractActivity.kt new file mode 100644 index 0000000..17f6cda --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractActivity.kt @@ -0,0 +1,113 @@ +package com.casic.xz.meterage.view.search + +import android.view.LayoutInflater +import android.view.View +import com.casic.xz.meterage.R +import com.casic.xz.meterage.base.ApplicationBaseActivity +import com.casic.xz.meterage.bean.SearchHistoryBean +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.utils.DataBaseManager +import com.casic.xz.meterage.utils.SearchType +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton +import com.zhy.view.flowlayout.FlowLayout +import com.zhy.view.flowlayout.TagAdapter +import kotlinx.android.synthetic.main.activity_search_history.* +import kotlinx.android.synthetic.main.include_search_input_title.* + +/** + * 搜索合同 + * */ +class SearchContractActivity : ApplicationBaseActivity() { + + private lateinit var inflater: LayoutInflater + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var historyAdapter: TagAdapter + private var dataBeans: MutableList = ArrayList() + private var isRefresh = false + + override fun initLayoutView(): Int = R.layout.activity_search_history + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + inputView.hint = "请输入合同名称或者编号查询" + } + + override fun initData() { + inflater = LayoutInflater.from(this) + weakReferenceHandler = WeakReferenceHandler { + if (it.what == 2023041001) { + if (isRefresh) { + historyAdapter.notifyDataChanged() + } else { + historyAdapter = object : TagAdapter(dataBeans) { + override fun getView( + parent: FlowLayout?, position: Int, bean: SearchHistoryBean + ): View { + val tagView = inflater.inflate( + R.layout.item_search_rv_l, tagFlowLayout, false + ) as QMUIRoundButton + tagView.text = bean.keywords + return tagView + } + } + tagFlowLayout.adapter = historyAdapter + tagFlowLayout.setOnTagClickListener { _, position, _ -> + inputView.setText(dataBeans[position].keywords) + navigatePageTo(inputView.text.toString()) + true + } + } + } + true + } + } + + override fun onResume() { + super.onResume() + dataBeans = DataBaseManager.get.queryHistoryByType(SearchType.Contract) + weakReferenceHandler.sendEmptyMessage(2023041001) + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + searchTextView.setOnClickListener { + if (!inputView.text.isNullOrBlank()) { + DataBaseManager.get.addSearchHistory( + inputView.text.toString(), SearchType.Contract + ) + } + + navigatePageTo(inputView.text.toString()) + } + + deleteHistoryView.setOnClickListener { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("确定将所有搜索记录删除?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + + } + + override fun onConfirmClick() { + DataBaseManager.get.deleteHistoryByType(SearchType.Contract) + dataBeans.clear() + historyAdapter.notifyDataChanged() + } + }).build().show() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractResultActivity.kt new file mode 100644 index 0000000..5096b88 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractResultActivity.kt @@ -0,0 +1,210 @@ +package com.casic.xz.meterage.view.search + +import android.content.Context +import android.os.Handler +import androidx.core.text.isDigitsOnly +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration +import com.casic.xz.meterage.R +import com.casic.xz.meterage.base.ApplicationBaseActivity +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.model.ContractListModel +import com.casic.xz.meterage.utils.AppMemoryCache +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.vm.ContractInvoiceViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_search_contract_reasult.* +import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class SearchContractResultActivity : ApplicationBaseActivity() { + + private var context: Context = this@SearchContractResultActivity + private lateinit var param: String + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var contractViewModel: ContractInvoiceViewModel + private lateinit var contractAdapter: NormalRecyclerAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.activity_search_contract_reasult + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "查询结果" + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + getContractListByPage() + } + + override fun initData() { + param = intent.getStringExtra(Constant.INTENT_PARAM)!! + + weakReferenceHandler = WeakReferenceHandler(callback) + contractViewModel = ViewModelProvider(this)[ContractInvoiceViewModel::class.java] + contractViewModel.contractList.observe(this) { + if (it.code == 200) { + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + contractLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows) + contractLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023041002) + } + } + } + + override fun observeRequestState() { + contractViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + + contractLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getContractListByPage() + } + + contractLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getContractListByPage() + } + } + + private fun getContractListByPage() { + if (param.isDigitsOnly()) { + contractViewModel.getContractList( + "", "", "", "", param, + "1", "", "", "", arrayOf(), + pageIndex + ) + } else { + if (param.length < 4) { + //输入参数长度小于4,默认查名称 + contractViewModel.getContractList( + "", "", param, "", "", + "1", "", "", "", arrayOf(), + pageIndex + ) + } else { + if (AppMemoryCache.prefixCode.contains(param.substring(0, 4))) { + contractViewModel.getContractList( + "", "", "", "", param, + "1", "", "", "", arrayOf(), + pageIndex + ) + } else { + contractViewModel.getContractList( + "", "", param, "", "", + "1", "", "", "", arrayOf(), + pageIndex + ) + } + } + } + } + + private val callback = Handler.Callback { + when (it.what) { + 2023041002 -> { + if (isRefresh || isLoadMore) { + contractAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无合同") { + pageIndex = 1 + getContractListByPage() + } + } else { + emptyView!!.hide() + contractAdapter = object : + NormalRecyclerAdapter( + R.layout.item_contract_rv_l, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, + position: Int, + item: ContractListModel.DataModel.RowsModel + ) { + viewHolder.setText(R.id.contractNameView, item.agreementName) + .setText(R.id.contractStateView, item.statusName) + .setText(R.id.contractCodeView, "合同编号:${item.agreementNo}") + .setText(R.id.firstPartNameView, "甲方单位:${item.firstParty}") + .setText( + R.id.startDateView, + "签订日期:${item.estimateSignDate.formatToYearMonthDay()}" + ) + + if (item.statusName.contains("已完成")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.green.convertColor(context) + ) + } else if (item.statusName.contains("未完成")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.red.convertColor(context) + ) + } else if (item.statusName.contains("已废止")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.gray.convertColor(context) + ) + } + } + } + contractRecyclerView.addItemDecoration( + DividerItemDecoration(this, DividerItemDecoration.VERTICAL) + ) + contractRecyclerView.adapter = contractAdapter + contractAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, t: ContractListModel.DataModel.RowsModel + ) { +// navigatePageTo(t.id) + } + }) + } + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt index 08d6bd2..3430e24 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_customer.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* /** @@ -93,7 +93,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_customer + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustActivity.kt index 2bff498..159d51d 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_entrust.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* /** @@ -93,7 +93,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_entrust + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt index b105378..f9b1076 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_equipment.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* @@ -100,7 +100,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_equipment + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt index 6dba78b..0a8c595 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_global.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* class SearchGlobalActivity : ApplicationBaseActivity() { @@ -90,7 +90,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_global + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainActivity.kt index 56fda90..da94e79 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_meterage_train.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* /** @@ -93,7 +93,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_meterage_train + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 9fc7c01..78d7828 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -71,6 +71,7 @@ + @@ -85,6 +86,8 @@ + + diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt index 71fe5a8..ad81434 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt @@ -170,7 +170,7 @@ "标准规范" -> requireContext().navigatePageTo() "能力列表" -> requireContext().navigatePageTo() "计量培训" -> requireContext().navigatePageTo() -// "合同发票" -> requireContext().navigatePageTo() + "合同发票" -> requireContext().navigatePageTo() // "业务统计" -> requireContext().navigatePageTo() "客户列表" -> requireContext().navigatePageTo() // "外场检测" -> requireContext().navigatePageTo() diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt index b47cb32..b12a0bf 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt @@ -184,7 +184,7 @@ requireContext().navigatePageTo() } - //TODO 未实现 + //TODO 通过接口修改数据库字段实现 pushSettingSwitch.setOnCheckedChangeListener { _, isChecked -> SaveKeyValues.putValue(LocaleConstant.PUSH_SETTING, isChecked) if (isChecked) { diff --git a/app/src/main/java/com/casic/xz/meterage/model/ContractListModel.java b/app/src/main/java/com/casic/xz/meterage/model/ContractListModel.java new file mode 100644 index 0000000..111ff52 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/model/ContractListModel.java @@ -0,0 +1,364 @@ +package com.casic.xz.meterage.model; + +import java.util.List; + +public class ContractListModel { + + 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 agreementAmount; + private String agreementEndDate; + private String agreementImportantContent; + private String agreementKind; + private String agreementKindName; + private String agreementName; + private String agreementNo; + private String agreementSource; + private String agreementSourceName; + private String agreementStartDate; + private String agreementType; + private String agreementTypeName; + private String approvalStatus; + private String createTime; + private String createUser; + private String createUserName; + private String customerId; + private String deptId; + private String deptName; + private String director; + private String estimateSignDate; + private String firstParty; + private String id; + private String isDel; + private String minioFileName; + private String orderIdList; + private String orderList; + private String paymentList; + private String processId; + private String remark; + private String secondParty; + private String status; + private String statusName; + private String updateTime; + + public String getAgreementAmount() { + return agreementAmount; + } + + public void setAgreementAmount(String agreementAmount) { + this.agreementAmount = agreementAmount; + } + + public String getAgreementEndDate() { + return agreementEndDate; + } + + public void setAgreementEndDate(String agreementEndDate) { + this.agreementEndDate = agreementEndDate; + } + + public String getAgreementImportantContent() { + return agreementImportantContent; + } + + public void setAgreementImportantContent(String agreementImportantContent) { + this.agreementImportantContent = agreementImportantContent; + } + + public String getAgreementKind() { + return agreementKind; + } + + public void setAgreementKind(String agreementKind) { + this.agreementKind = agreementKind; + } + + public String getAgreementKindName() { + return agreementKindName; + } + + public void setAgreementKindName(String agreementKindName) { + this.agreementKindName = agreementKindName; + } + + public String getAgreementName() { + return agreementName; + } + + public void setAgreementName(String agreementName) { + this.agreementName = agreementName; + } + + public String getAgreementNo() { + return agreementNo; + } + + public void setAgreementNo(String agreementNo) { + this.agreementNo = agreementNo; + } + + public String getAgreementSource() { + return agreementSource; + } + + public void setAgreementSource(String agreementSource) { + this.agreementSource = agreementSource; + } + + public String getAgreementSourceName() { + return agreementSourceName; + } + + public void setAgreementSourceName(String agreementSourceName) { + this.agreementSourceName = agreementSourceName; + } + + public String getAgreementStartDate() { + return agreementStartDate; + } + + public void setAgreementStartDate(String agreementStartDate) { + this.agreementStartDate = agreementStartDate; + } + + public String getAgreementType() { + return agreementType; + } + + public void setAgreementType(String agreementType) { + this.agreementType = agreementType; + } + + public String getAgreementTypeName() { + return agreementTypeName; + } + + public void setAgreementTypeName(String agreementTypeName) { + this.agreementTypeName = agreementTypeName; + } + + public String getApprovalStatus() { + return approvalStatus; + } + + public void setApprovalStatus(String approvalStatus) { + this.approvalStatus = approvalStatus; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getCreateUser() { + return createUser; + } + + public void setCreateUser(String createUser) { + this.createUser = createUser; + } + + public String getCreateUserName() { + return createUserName; + } + + public void setCreateUserName(String createUserName) { + this.createUserName = createUserName; + } + + public String getCustomerId() { + return customerId; + } + + public void setCustomerId(String customerId) { + this.customerId = customerId; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDirector() { + return director; + } + + public void setDirector(String director) { + this.director = director; + } + + public String getEstimateSignDate() { + return estimateSignDate; + } + + public void setEstimateSignDate(String estimateSignDate) { + this.estimateSignDate = estimateSignDate; + } + + public String getFirstParty() { + return firstParty; + } + + public void setFirstParty(String firstParty) { + this.firstParty = firstParty; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getIsDel() { + return isDel; + } + + public void setIsDel(String isDel) { + this.isDel = isDel; + } + + public String getMinioFileName() { + return minioFileName; + } + + public void setMinioFileName(String minioFileName) { + this.minioFileName = minioFileName; + } + + public String getOrderIdList() { + return orderIdList; + } + + public void setOrderIdList(String orderIdList) { + this.orderIdList = orderIdList; + } + + public String getOrderList() { + return orderList; + } + + public void setOrderList(String orderList) { + this.orderList = orderList; + } + + public String getPaymentList() { + return paymentList; + } + + public void setPaymentList(String paymentList) { + this.paymentList = paymentList; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + public String getSecondParty() { + return secondParty; + } + + public void setSecondParty(String secondParty) { + this.secondParty = secondParty; + } + + 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; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt index 85756b0..36059c5 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt @@ -65,4 +65,8 @@ const val USER_ID = "userId" const val PRIVACY_CHECK_BOX = "privacyCheckBox" const val PUSH_SETTING = "pushSetting" + const val METERAGE_TRAIN_FORM_ID = "jlglpxjhsp" + const val STANDARD_FILE_FORM_ID = "jlglwjsp" + const val CERTIFICATE_REPORT_FORM_ID = "ywglzsbg" + const val CONTRACT_FORM_ID = "cwczht" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt b/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt index da58079..99f3bb1 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt @@ -2,37 +2,42 @@ object SearchType { /** + * 首页模糊搜索 + * */ + const val All = "0" + + /** * 搜索仪器设备 * */ - const val Equipment = "0" + const val Equipment = "1" /** * 搜索标准装置 * */ - const val StandardDevice = "1" + const val StandardDevice = "2" /** * 搜索委托书需求 * */ - const val Entrust = "2" + const val Entrust = "3" /** * 搜索能力 * */ - const val Capability = "3" + const val Capability = "4" /** * 搜索计量培训 * */ - const val MeterageTrain = "4" + const val MeterageTrain = "5" /** * 搜索客户 * */ - const val Customer = "5" + const val Customer = "6" /** - * 首页模糊搜索 + * 搜索仪器设备 * */ - const val All = "6" + const val Contract = "7" } 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 3bd698a..bc4d694 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 @@ -446,4 +446,15 @@ @QueryMap limit: Map, @QueryMap offset: Map ): String + + /** + * 合同列表 + */ + @POST("/finance/agreement/listPage") + suspend fun getContractList( + @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 9e7556b..1aaabee 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 @@ -459,7 +459,6 @@ effectiveCompany: String, trainStartTime: String, trainEndTime: String, - formId: String, ids: Array, offset: Int ): String { @@ -473,7 +472,7 @@ param.addProperty("effectiveCompany", effectiveCompany) param.addProperty("trainStartTime", trainStartTime) param.addProperty("trainEndTime", trainEndTime) - param.addProperty("formId", formId) + param.addProperty("formId", LocaleConstant.METERAGE_TRAIN_FORM_ID) param.add("ids", gson.toJsonTree(ids, typeToken).asJsonArray) val requestBody = param.toString().toRequestBody( @@ -843,7 +842,7 @@ offset: Int ): String { val param = JsonObject() - param.addProperty("formId", "jlglwjsp") + param.addProperty("formId", LocaleConstant.STANDARD_FILE_FORM_ID) param.addProperty("fileType", fileType) param.addProperty("fileName", fileName) param.addProperty("fileNo", fileNo) @@ -884,7 +883,7 @@ offset: Int ): String { val param = JsonObject() - param.addProperty("formId", "ywglzsbg") + param.addProperty("formId", LocaleConstant.CERTIFICATE_REPORT_FORM_ID) param.addProperty("approvalStatus", approvalStatus) param.addProperty("certificateReportCode", certificateReportCode) param.addProperty("customerName", customerName) @@ -925,7 +924,7 @@ */ suspend fun submit(id: String): String { val param = JsonObject() - param.addProperty("formId", "ywglzsbg") + param.addProperty("formId", LocaleConstant.CERTIFICATE_REPORT_FORM_ID) param.addProperty("id", id) val requestBody = param.toString().toRequestBody( "application/json;charset=UTF-8".toMediaType() @@ -1009,4 +1008,47 @@ AuthenticationHelper.token!!, requestBody, limitMap, offsetMap ) } + + /** + * 合同列表 + */ + suspend fun getContractList( + customerId: String, + agreementKind: String, + agreementName: String, + agreementType: String, + agreementNo: String, + estimateSignStartDate: String, + estimateSignEndDate: String, + firstParty: String, + status: String, + ids: Array, + offset: Int + ): String { + val param = JsonObject() + param.addProperty("customerId", customerId) + param.addProperty("agreementKind", agreementKind) + param.addProperty("agreementName", agreementName) + param.addProperty("agreementType", agreementType) + param.addProperty("agreementNo", agreementNo) + param.addProperty("estimateSignStartDate", estimateSignStartDate) + param.addProperty("estimateSignEndDate", estimateSignEndDate) + param.addProperty("firstParty", firstParty) + param.addProperty("formId", LocaleConstant.CONTRACT_FORM_ID) + param.addProperty("status", status) + param.add("ids", gson.toJsonTree(ids, typeToken).asJsonArray) + + val requestBody = param.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + + val limitMap = HashMap() + limitMap["limit"] = LocaleConstant.PAGE_LIMIT + + val offsetMap = HashMap() + offsetMap["offset"] = offset + return api.getContractList( + AuthenticationHelper.token!!, requestBody, limitMap, offsetMap + ) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/ContractInvoiceActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/ContractInvoiceActivity.kt new file mode 100644 index 0000000..96148a3 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/home/ContractInvoiceActivity.kt @@ -0,0 +1,192 @@ +package com.casic.xz.meterage.view.home + +import android.content.Context +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration +import com.casic.xz.meterage.R +import com.casic.xz.meterage.base.ApplicationBaseActivity +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.model.ContractListModel +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.view.search.SearchContractActivity +import com.casic.xz.meterage.vm.ContractInvoiceViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +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_contract_invoice.* +import kotlinx.android.synthetic.main.include_empty_view.* +import kotlinx.android.synthetic.main.include_search_title.* + +class ContractInvoiceActivity : ApplicationBaseActivity() { + + private var context: Context = this@ContractInvoiceActivity + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var contractViewModel: ContractInvoiceViewModel + private lateinit var contractAdapter: NormalRecyclerAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.activity_contract_invoice + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "合同发票" + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + contractViewModel = ViewModelProvider(this)[ContractInvoiceViewModel::class.java] + contractViewModel.contractList.observe(this) { + if (it.code == 200) { + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + contractLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows) + contractLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023041001) + } + } + } + + override fun observeRequestState() { + contractViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + rightOperateView.setOnClickListener { + navigatePageTo() + } + + contractLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getContractListByPage() + } + + contractLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getContractListByPage() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + getContractListByPage() + } + + private fun getContractListByPage() { + contractViewModel.getContractList( + "", + "", + "", + "", + "", + "1", + "", + "", + "", + arrayOf(), + pageIndex + ) + } + + private val callback = Handler.Callback { + when (it.what) { + 2023041001 -> { + if (isRefresh || isLoadMore) { + contractAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无合同") { + pageIndex = 1 + getContractListByPage() + } + } else { + emptyView!!.hide() + contractAdapter = object : + NormalRecyclerAdapter( + R.layout.item_contract_rv_l, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, + position: Int, + item: ContractListModel.DataModel.RowsModel + ) { + viewHolder.setText(R.id.contractNameView, item.agreementName) + .setText(R.id.contractStateView, item.statusName) + .setText(R.id.contractCodeView, "合同编号:${item.agreementNo}") + .setText(R.id.firstPartNameView, "甲方单位:${item.firstParty}") + .setText( + R.id.startDateView, + "签订日期:${item.estimateSignDate.formatToYearMonthDay()}" + ) + + if (item.statusName.contains("已完成")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.green.convertColor(context) + ) + } else if (item.statusName.contains("未完成")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.red.convertColor(context) + ) + } else if (item.statusName.contains("已废止")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.gray.convertColor(context) + ) + } + } + } + contractRecyclerView.addItemDecoration( + DividerItemDecoration(this, DividerItemDecoration.VERTICAL) + ) + contractRecyclerView.adapter = contractAdapter + contractAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, t: ContractListModel.DataModel.RowsModel + ) { +// navigatePageTo(t.id) + } + }) + } + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt index 373c386..078f497 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt @@ -117,7 +117,6 @@ "", "", "", - "jlglpxjhsp", arrayOf(), pageIndex ) diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt index 16bcd38..92e256d 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_capability.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* /** @@ -93,7 +93,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_capability + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractActivity.kt new file mode 100644 index 0000000..17f6cda --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractActivity.kt @@ -0,0 +1,113 @@ +package com.casic.xz.meterage.view.search + +import android.view.LayoutInflater +import android.view.View +import com.casic.xz.meterage.R +import com.casic.xz.meterage.base.ApplicationBaseActivity +import com.casic.xz.meterage.bean.SearchHistoryBean +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.utils.DataBaseManager +import com.casic.xz.meterage.utils.SearchType +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton +import com.zhy.view.flowlayout.FlowLayout +import com.zhy.view.flowlayout.TagAdapter +import kotlinx.android.synthetic.main.activity_search_history.* +import kotlinx.android.synthetic.main.include_search_input_title.* + +/** + * 搜索合同 + * */ +class SearchContractActivity : ApplicationBaseActivity() { + + private lateinit var inflater: LayoutInflater + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var historyAdapter: TagAdapter + private var dataBeans: MutableList = ArrayList() + private var isRefresh = false + + override fun initLayoutView(): Int = R.layout.activity_search_history + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + inputView.hint = "请输入合同名称或者编号查询" + } + + override fun initData() { + inflater = LayoutInflater.from(this) + weakReferenceHandler = WeakReferenceHandler { + if (it.what == 2023041001) { + if (isRefresh) { + historyAdapter.notifyDataChanged() + } else { + historyAdapter = object : TagAdapter(dataBeans) { + override fun getView( + parent: FlowLayout?, position: Int, bean: SearchHistoryBean + ): View { + val tagView = inflater.inflate( + R.layout.item_search_rv_l, tagFlowLayout, false + ) as QMUIRoundButton + tagView.text = bean.keywords + return tagView + } + } + tagFlowLayout.adapter = historyAdapter + tagFlowLayout.setOnTagClickListener { _, position, _ -> + inputView.setText(dataBeans[position].keywords) + navigatePageTo(inputView.text.toString()) + true + } + } + } + true + } + } + + override fun onResume() { + super.onResume() + dataBeans = DataBaseManager.get.queryHistoryByType(SearchType.Contract) + weakReferenceHandler.sendEmptyMessage(2023041001) + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + searchTextView.setOnClickListener { + if (!inputView.text.isNullOrBlank()) { + DataBaseManager.get.addSearchHistory( + inputView.text.toString(), SearchType.Contract + ) + } + + navigatePageTo(inputView.text.toString()) + } + + deleteHistoryView.setOnClickListener { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("确定将所有搜索记录删除?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + + } + + override fun onConfirmClick() { + DataBaseManager.get.deleteHistoryByType(SearchType.Contract) + dataBeans.clear() + historyAdapter.notifyDataChanged() + } + }).build().show() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractResultActivity.kt new file mode 100644 index 0000000..5096b88 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractResultActivity.kt @@ -0,0 +1,210 @@ +package com.casic.xz.meterage.view.search + +import android.content.Context +import android.os.Handler +import androidx.core.text.isDigitsOnly +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration +import com.casic.xz.meterage.R +import com.casic.xz.meterage.base.ApplicationBaseActivity +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.model.ContractListModel +import com.casic.xz.meterage.utils.AppMemoryCache +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.vm.ContractInvoiceViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_search_contract_reasult.* +import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class SearchContractResultActivity : ApplicationBaseActivity() { + + private var context: Context = this@SearchContractResultActivity + private lateinit var param: String + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var contractViewModel: ContractInvoiceViewModel + private lateinit var contractAdapter: NormalRecyclerAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.activity_search_contract_reasult + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "查询结果" + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + getContractListByPage() + } + + override fun initData() { + param = intent.getStringExtra(Constant.INTENT_PARAM)!! + + weakReferenceHandler = WeakReferenceHandler(callback) + contractViewModel = ViewModelProvider(this)[ContractInvoiceViewModel::class.java] + contractViewModel.contractList.observe(this) { + if (it.code == 200) { + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + contractLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows) + contractLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023041002) + } + } + } + + override fun observeRequestState() { + contractViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + + contractLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getContractListByPage() + } + + contractLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getContractListByPage() + } + } + + private fun getContractListByPage() { + if (param.isDigitsOnly()) { + contractViewModel.getContractList( + "", "", "", "", param, + "1", "", "", "", arrayOf(), + pageIndex + ) + } else { + if (param.length < 4) { + //输入参数长度小于4,默认查名称 + contractViewModel.getContractList( + "", "", param, "", "", + "1", "", "", "", arrayOf(), + pageIndex + ) + } else { + if (AppMemoryCache.prefixCode.contains(param.substring(0, 4))) { + contractViewModel.getContractList( + "", "", "", "", param, + "1", "", "", "", arrayOf(), + pageIndex + ) + } else { + contractViewModel.getContractList( + "", "", param, "", "", + "1", "", "", "", arrayOf(), + pageIndex + ) + } + } + } + } + + private val callback = Handler.Callback { + when (it.what) { + 2023041002 -> { + if (isRefresh || isLoadMore) { + contractAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无合同") { + pageIndex = 1 + getContractListByPage() + } + } else { + emptyView!!.hide() + contractAdapter = object : + NormalRecyclerAdapter( + R.layout.item_contract_rv_l, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, + position: Int, + item: ContractListModel.DataModel.RowsModel + ) { + viewHolder.setText(R.id.contractNameView, item.agreementName) + .setText(R.id.contractStateView, item.statusName) + .setText(R.id.contractCodeView, "合同编号:${item.agreementNo}") + .setText(R.id.firstPartNameView, "甲方单位:${item.firstParty}") + .setText( + R.id.startDateView, + "签订日期:${item.estimateSignDate.formatToYearMonthDay()}" + ) + + if (item.statusName.contains("已完成")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.green.convertColor(context) + ) + } else if (item.statusName.contains("未完成")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.red.convertColor(context) + ) + } else if (item.statusName.contains("已废止")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.gray.convertColor(context) + ) + } + } + } + contractRecyclerView.addItemDecoration( + DividerItemDecoration(this, DividerItemDecoration.VERTICAL) + ) + contractRecyclerView.adapter = contractAdapter + contractAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, t: ContractListModel.DataModel.RowsModel + ) { +// navigatePageTo(t.id) + } + }) + } + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt index 08d6bd2..3430e24 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_customer.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* /** @@ -93,7 +93,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_customer + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustActivity.kt index 2bff498..159d51d 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_entrust.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* /** @@ -93,7 +93,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_entrust + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt index b105378..f9b1076 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_equipment.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* @@ -100,7 +100,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_equipment + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt index 6dba78b..0a8c595 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_global.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* class SearchGlobalActivity : ApplicationBaseActivity() { @@ -90,7 +90,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_global + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainActivity.kt index 56fda90..da94e79 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_meterage_train.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* /** @@ -93,7 +93,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_meterage_train + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt index 447c483..cebdace 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt @@ -119,29 +119,25 @@ if (param.isDigitsOnly()) { meterageTrainViewModel.getMeterageTrainList( "", "", "", "", param, "", - "", "", "", "jlglpxjhsp", arrayOf(), - pageIndex + "", "", "", arrayOf(), pageIndex ) } else { if (param.length < 4) { //输入参数长度小于4,默认查名称 meterageTrainViewModel.getMeterageTrainList( "", "", "", param, "", "", - "", "", "", "jlglpxjhsp", arrayOf(), - pageIndex + "", "", "", arrayOf(), pageIndex ) } else { if (AppMemoryCache.prefixCode.contains(param.substring(0, 4))) { meterageTrainViewModel.getMeterageTrainList( "", "", "", "", param, "", - "", "", "", "jlglpxjhsp", arrayOf(), - pageIndex + "", "", "", arrayOf(), pageIndex ) } else { meterageTrainViewModel.getMeterageTrainList( "", "", "", param, "", "", - "", "", "", "jlglpxjhsp", arrayOf(), - pageIndex + "", "", "", arrayOf(), pageIndex ) } } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 9fc7c01..78d7828 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -71,6 +71,7 @@ + @@ -85,6 +86,8 @@ + + diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt index 71fe5a8..ad81434 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt @@ -170,7 +170,7 @@ "标准规范" -> requireContext().navigatePageTo() "能力列表" -> requireContext().navigatePageTo() "计量培训" -> requireContext().navigatePageTo() -// "合同发票" -> requireContext().navigatePageTo() + "合同发票" -> requireContext().navigatePageTo() // "业务统计" -> requireContext().navigatePageTo() "客户列表" -> requireContext().navigatePageTo() // "外场检测" -> requireContext().navigatePageTo() diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt index b47cb32..b12a0bf 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt @@ -184,7 +184,7 @@ requireContext().navigatePageTo() } - //TODO 未实现 + //TODO 通过接口修改数据库字段实现 pushSettingSwitch.setOnCheckedChangeListener { _, isChecked -> SaveKeyValues.putValue(LocaleConstant.PUSH_SETTING, isChecked) if (isChecked) { diff --git a/app/src/main/java/com/casic/xz/meterage/model/ContractListModel.java b/app/src/main/java/com/casic/xz/meterage/model/ContractListModel.java new file mode 100644 index 0000000..111ff52 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/model/ContractListModel.java @@ -0,0 +1,364 @@ +package com.casic.xz.meterage.model; + +import java.util.List; + +public class ContractListModel { + + 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 agreementAmount; + private String agreementEndDate; + private String agreementImportantContent; + private String agreementKind; + private String agreementKindName; + private String agreementName; + private String agreementNo; + private String agreementSource; + private String agreementSourceName; + private String agreementStartDate; + private String agreementType; + private String agreementTypeName; + private String approvalStatus; + private String createTime; + private String createUser; + private String createUserName; + private String customerId; + private String deptId; + private String deptName; + private String director; + private String estimateSignDate; + private String firstParty; + private String id; + private String isDel; + private String minioFileName; + private String orderIdList; + private String orderList; + private String paymentList; + private String processId; + private String remark; + private String secondParty; + private String status; + private String statusName; + private String updateTime; + + public String getAgreementAmount() { + return agreementAmount; + } + + public void setAgreementAmount(String agreementAmount) { + this.agreementAmount = agreementAmount; + } + + public String getAgreementEndDate() { + return agreementEndDate; + } + + public void setAgreementEndDate(String agreementEndDate) { + this.agreementEndDate = agreementEndDate; + } + + public String getAgreementImportantContent() { + return agreementImportantContent; + } + + public void setAgreementImportantContent(String agreementImportantContent) { + this.agreementImportantContent = agreementImportantContent; + } + + public String getAgreementKind() { + return agreementKind; + } + + public void setAgreementKind(String agreementKind) { + this.agreementKind = agreementKind; + } + + public String getAgreementKindName() { + return agreementKindName; + } + + public void setAgreementKindName(String agreementKindName) { + this.agreementKindName = agreementKindName; + } + + public String getAgreementName() { + return agreementName; + } + + public void setAgreementName(String agreementName) { + this.agreementName = agreementName; + } + + public String getAgreementNo() { + return agreementNo; + } + + public void setAgreementNo(String agreementNo) { + this.agreementNo = agreementNo; + } + + public String getAgreementSource() { + return agreementSource; + } + + public void setAgreementSource(String agreementSource) { + this.agreementSource = agreementSource; + } + + public String getAgreementSourceName() { + return agreementSourceName; + } + + public void setAgreementSourceName(String agreementSourceName) { + this.agreementSourceName = agreementSourceName; + } + + public String getAgreementStartDate() { + return agreementStartDate; + } + + public void setAgreementStartDate(String agreementStartDate) { + this.agreementStartDate = agreementStartDate; + } + + public String getAgreementType() { + return agreementType; + } + + public void setAgreementType(String agreementType) { + this.agreementType = agreementType; + } + + public String getAgreementTypeName() { + return agreementTypeName; + } + + public void setAgreementTypeName(String agreementTypeName) { + this.agreementTypeName = agreementTypeName; + } + + public String getApprovalStatus() { + return approvalStatus; + } + + public void setApprovalStatus(String approvalStatus) { + this.approvalStatus = approvalStatus; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getCreateUser() { + return createUser; + } + + public void setCreateUser(String createUser) { + this.createUser = createUser; + } + + public String getCreateUserName() { + return createUserName; + } + + public void setCreateUserName(String createUserName) { + this.createUserName = createUserName; + } + + public String getCustomerId() { + return customerId; + } + + public void setCustomerId(String customerId) { + this.customerId = customerId; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDirector() { + return director; + } + + public void setDirector(String director) { + this.director = director; + } + + public String getEstimateSignDate() { + return estimateSignDate; + } + + public void setEstimateSignDate(String estimateSignDate) { + this.estimateSignDate = estimateSignDate; + } + + public String getFirstParty() { + return firstParty; + } + + public void setFirstParty(String firstParty) { + this.firstParty = firstParty; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getIsDel() { + return isDel; + } + + public void setIsDel(String isDel) { + this.isDel = isDel; + } + + public String getMinioFileName() { + return minioFileName; + } + + public void setMinioFileName(String minioFileName) { + this.minioFileName = minioFileName; + } + + public String getOrderIdList() { + return orderIdList; + } + + public void setOrderIdList(String orderIdList) { + this.orderIdList = orderIdList; + } + + public String getOrderList() { + return orderList; + } + + public void setOrderList(String orderList) { + this.orderList = orderList; + } + + public String getPaymentList() { + return paymentList; + } + + public void setPaymentList(String paymentList) { + this.paymentList = paymentList; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + public String getSecondParty() { + return secondParty; + } + + public void setSecondParty(String secondParty) { + this.secondParty = secondParty; + } + + 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; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt index 85756b0..36059c5 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt @@ -65,4 +65,8 @@ const val USER_ID = "userId" const val PRIVACY_CHECK_BOX = "privacyCheckBox" const val PUSH_SETTING = "pushSetting" + const val METERAGE_TRAIN_FORM_ID = "jlglpxjhsp" + const val STANDARD_FILE_FORM_ID = "jlglwjsp" + const val CERTIFICATE_REPORT_FORM_ID = "ywglzsbg" + const val CONTRACT_FORM_ID = "cwczht" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt b/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt index da58079..99f3bb1 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt @@ -2,37 +2,42 @@ object SearchType { /** + * 首页模糊搜索 + * */ + const val All = "0" + + /** * 搜索仪器设备 * */ - const val Equipment = "0" + const val Equipment = "1" /** * 搜索标准装置 * */ - const val StandardDevice = "1" + const val StandardDevice = "2" /** * 搜索委托书需求 * */ - const val Entrust = "2" + const val Entrust = "3" /** * 搜索能力 * */ - const val Capability = "3" + const val Capability = "4" /** * 搜索计量培训 * */ - const val MeterageTrain = "4" + const val MeterageTrain = "5" /** * 搜索客户 * */ - const val Customer = "5" + const val Customer = "6" /** - * 首页模糊搜索 + * 搜索仪器设备 * */ - const val All = "6" + const val Contract = "7" } 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 3bd698a..bc4d694 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 @@ -446,4 +446,15 @@ @QueryMap limit: Map, @QueryMap offset: Map ): String + + /** + * 合同列表 + */ + @POST("/finance/agreement/listPage") + suspend fun getContractList( + @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 9e7556b..1aaabee 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 @@ -459,7 +459,6 @@ effectiveCompany: String, trainStartTime: String, trainEndTime: String, - formId: String, ids: Array, offset: Int ): String { @@ -473,7 +472,7 @@ param.addProperty("effectiveCompany", effectiveCompany) param.addProperty("trainStartTime", trainStartTime) param.addProperty("trainEndTime", trainEndTime) - param.addProperty("formId", formId) + param.addProperty("formId", LocaleConstant.METERAGE_TRAIN_FORM_ID) param.add("ids", gson.toJsonTree(ids, typeToken).asJsonArray) val requestBody = param.toString().toRequestBody( @@ -843,7 +842,7 @@ offset: Int ): String { val param = JsonObject() - param.addProperty("formId", "jlglwjsp") + param.addProperty("formId", LocaleConstant.STANDARD_FILE_FORM_ID) param.addProperty("fileType", fileType) param.addProperty("fileName", fileName) param.addProperty("fileNo", fileNo) @@ -884,7 +883,7 @@ offset: Int ): String { val param = JsonObject() - param.addProperty("formId", "ywglzsbg") + param.addProperty("formId", LocaleConstant.CERTIFICATE_REPORT_FORM_ID) param.addProperty("approvalStatus", approvalStatus) param.addProperty("certificateReportCode", certificateReportCode) param.addProperty("customerName", customerName) @@ -925,7 +924,7 @@ */ suspend fun submit(id: String): String { val param = JsonObject() - param.addProperty("formId", "ywglzsbg") + param.addProperty("formId", LocaleConstant.CERTIFICATE_REPORT_FORM_ID) param.addProperty("id", id) val requestBody = param.toString().toRequestBody( "application/json;charset=UTF-8".toMediaType() @@ -1009,4 +1008,47 @@ AuthenticationHelper.token!!, requestBody, limitMap, offsetMap ) } + + /** + * 合同列表 + */ + suspend fun getContractList( + customerId: String, + agreementKind: String, + agreementName: String, + agreementType: String, + agreementNo: String, + estimateSignStartDate: String, + estimateSignEndDate: String, + firstParty: String, + status: String, + ids: Array, + offset: Int + ): String { + val param = JsonObject() + param.addProperty("customerId", customerId) + param.addProperty("agreementKind", agreementKind) + param.addProperty("agreementName", agreementName) + param.addProperty("agreementType", agreementType) + param.addProperty("agreementNo", agreementNo) + param.addProperty("estimateSignStartDate", estimateSignStartDate) + param.addProperty("estimateSignEndDate", estimateSignEndDate) + param.addProperty("firstParty", firstParty) + param.addProperty("formId", LocaleConstant.CONTRACT_FORM_ID) + param.addProperty("status", status) + param.add("ids", gson.toJsonTree(ids, typeToken).asJsonArray) + + val requestBody = param.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + + val limitMap = HashMap() + limitMap["limit"] = LocaleConstant.PAGE_LIMIT + + val offsetMap = HashMap() + offsetMap["offset"] = offset + return api.getContractList( + AuthenticationHelper.token!!, requestBody, limitMap, offsetMap + ) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/ContractInvoiceActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/ContractInvoiceActivity.kt new file mode 100644 index 0000000..96148a3 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/home/ContractInvoiceActivity.kt @@ -0,0 +1,192 @@ +package com.casic.xz.meterage.view.home + +import android.content.Context +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration +import com.casic.xz.meterage.R +import com.casic.xz.meterage.base.ApplicationBaseActivity +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.model.ContractListModel +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.view.search.SearchContractActivity +import com.casic.xz.meterage.vm.ContractInvoiceViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +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_contract_invoice.* +import kotlinx.android.synthetic.main.include_empty_view.* +import kotlinx.android.synthetic.main.include_search_title.* + +class ContractInvoiceActivity : ApplicationBaseActivity() { + + private var context: Context = this@ContractInvoiceActivity + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var contractViewModel: ContractInvoiceViewModel + private lateinit var contractAdapter: NormalRecyclerAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.activity_contract_invoice + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "合同发票" + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + contractViewModel = ViewModelProvider(this)[ContractInvoiceViewModel::class.java] + contractViewModel.contractList.observe(this) { + if (it.code == 200) { + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + contractLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows) + contractLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023041001) + } + } + } + + override fun observeRequestState() { + contractViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + rightOperateView.setOnClickListener { + navigatePageTo() + } + + contractLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getContractListByPage() + } + + contractLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getContractListByPage() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + getContractListByPage() + } + + private fun getContractListByPage() { + contractViewModel.getContractList( + "", + "", + "", + "", + "", + "1", + "", + "", + "", + arrayOf(), + pageIndex + ) + } + + private val callback = Handler.Callback { + when (it.what) { + 2023041001 -> { + if (isRefresh || isLoadMore) { + contractAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无合同") { + pageIndex = 1 + getContractListByPage() + } + } else { + emptyView!!.hide() + contractAdapter = object : + NormalRecyclerAdapter( + R.layout.item_contract_rv_l, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, + position: Int, + item: ContractListModel.DataModel.RowsModel + ) { + viewHolder.setText(R.id.contractNameView, item.agreementName) + .setText(R.id.contractStateView, item.statusName) + .setText(R.id.contractCodeView, "合同编号:${item.agreementNo}") + .setText(R.id.firstPartNameView, "甲方单位:${item.firstParty}") + .setText( + R.id.startDateView, + "签订日期:${item.estimateSignDate.formatToYearMonthDay()}" + ) + + if (item.statusName.contains("已完成")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.green.convertColor(context) + ) + } else if (item.statusName.contains("未完成")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.red.convertColor(context) + ) + } else if (item.statusName.contains("已废止")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.gray.convertColor(context) + ) + } + } + } + contractRecyclerView.addItemDecoration( + DividerItemDecoration(this, DividerItemDecoration.VERTICAL) + ) + contractRecyclerView.adapter = contractAdapter + contractAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, t: ContractListModel.DataModel.RowsModel + ) { +// navigatePageTo(t.id) + } + }) + } + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt index 373c386..078f497 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt @@ -117,7 +117,6 @@ "", "", "", - "jlglpxjhsp", arrayOf(), pageIndex ) diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt index 16bcd38..92e256d 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_capability.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* /** @@ -93,7 +93,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_capability + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractActivity.kt new file mode 100644 index 0000000..17f6cda --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractActivity.kt @@ -0,0 +1,113 @@ +package com.casic.xz.meterage.view.search + +import android.view.LayoutInflater +import android.view.View +import com.casic.xz.meterage.R +import com.casic.xz.meterage.base.ApplicationBaseActivity +import com.casic.xz.meterage.bean.SearchHistoryBean +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.utils.DataBaseManager +import com.casic.xz.meterage.utils.SearchType +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton +import com.zhy.view.flowlayout.FlowLayout +import com.zhy.view.flowlayout.TagAdapter +import kotlinx.android.synthetic.main.activity_search_history.* +import kotlinx.android.synthetic.main.include_search_input_title.* + +/** + * 搜索合同 + * */ +class SearchContractActivity : ApplicationBaseActivity() { + + private lateinit var inflater: LayoutInflater + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var historyAdapter: TagAdapter + private var dataBeans: MutableList = ArrayList() + private var isRefresh = false + + override fun initLayoutView(): Int = R.layout.activity_search_history + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + inputView.hint = "请输入合同名称或者编号查询" + } + + override fun initData() { + inflater = LayoutInflater.from(this) + weakReferenceHandler = WeakReferenceHandler { + if (it.what == 2023041001) { + if (isRefresh) { + historyAdapter.notifyDataChanged() + } else { + historyAdapter = object : TagAdapter(dataBeans) { + override fun getView( + parent: FlowLayout?, position: Int, bean: SearchHistoryBean + ): View { + val tagView = inflater.inflate( + R.layout.item_search_rv_l, tagFlowLayout, false + ) as QMUIRoundButton + tagView.text = bean.keywords + return tagView + } + } + tagFlowLayout.adapter = historyAdapter + tagFlowLayout.setOnTagClickListener { _, position, _ -> + inputView.setText(dataBeans[position].keywords) + navigatePageTo(inputView.text.toString()) + true + } + } + } + true + } + } + + override fun onResume() { + super.onResume() + dataBeans = DataBaseManager.get.queryHistoryByType(SearchType.Contract) + weakReferenceHandler.sendEmptyMessage(2023041001) + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + searchTextView.setOnClickListener { + if (!inputView.text.isNullOrBlank()) { + DataBaseManager.get.addSearchHistory( + inputView.text.toString(), SearchType.Contract + ) + } + + navigatePageTo(inputView.text.toString()) + } + + deleteHistoryView.setOnClickListener { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("确定将所有搜索记录删除?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + + } + + override fun onConfirmClick() { + DataBaseManager.get.deleteHistoryByType(SearchType.Contract) + dataBeans.clear() + historyAdapter.notifyDataChanged() + } + }).build().show() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractResultActivity.kt new file mode 100644 index 0000000..5096b88 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractResultActivity.kt @@ -0,0 +1,210 @@ +package com.casic.xz.meterage.view.search + +import android.content.Context +import android.os.Handler +import androidx.core.text.isDigitsOnly +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration +import com.casic.xz.meterage.R +import com.casic.xz.meterage.base.ApplicationBaseActivity +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.model.ContractListModel +import com.casic.xz.meterage.utils.AppMemoryCache +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.vm.ContractInvoiceViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_search_contract_reasult.* +import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class SearchContractResultActivity : ApplicationBaseActivity() { + + private var context: Context = this@SearchContractResultActivity + private lateinit var param: String + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var contractViewModel: ContractInvoiceViewModel + private lateinit var contractAdapter: NormalRecyclerAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.activity_search_contract_reasult + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "查询结果" + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + getContractListByPage() + } + + override fun initData() { + param = intent.getStringExtra(Constant.INTENT_PARAM)!! + + weakReferenceHandler = WeakReferenceHandler(callback) + contractViewModel = ViewModelProvider(this)[ContractInvoiceViewModel::class.java] + contractViewModel.contractList.observe(this) { + if (it.code == 200) { + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + contractLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows) + contractLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023041002) + } + } + } + + override fun observeRequestState() { + contractViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + + contractLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getContractListByPage() + } + + contractLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getContractListByPage() + } + } + + private fun getContractListByPage() { + if (param.isDigitsOnly()) { + contractViewModel.getContractList( + "", "", "", "", param, + "1", "", "", "", arrayOf(), + pageIndex + ) + } else { + if (param.length < 4) { + //输入参数长度小于4,默认查名称 + contractViewModel.getContractList( + "", "", param, "", "", + "1", "", "", "", arrayOf(), + pageIndex + ) + } else { + if (AppMemoryCache.prefixCode.contains(param.substring(0, 4))) { + contractViewModel.getContractList( + "", "", "", "", param, + "1", "", "", "", arrayOf(), + pageIndex + ) + } else { + contractViewModel.getContractList( + "", "", param, "", "", + "1", "", "", "", arrayOf(), + pageIndex + ) + } + } + } + } + + private val callback = Handler.Callback { + when (it.what) { + 2023041002 -> { + if (isRefresh || isLoadMore) { + contractAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无合同") { + pageIndex = 1 + getContractListByPage() + } + } else { + emptyView!!.hide() + contractAdapter = object : + NormalRecyclerAdapter( + R.layout.item_contract_rv_l, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, + position: Int, + item: ContractListModel.DataModel.RowsModel + ) { + viewHolder.setText(R.id.contractNameView, item.agreementName) + .setText(R.id.contractStateView, item.statusName) + .setText(R.id.contractCodeView, "合同编号:${item.agreementNo}") + .setText(R.id.firstPartNameView, "甲方单位:${item.firstParty}") + .setText( + R.id.startDateView, + "签订日期:${item.estimateSignDate.formatToYearMonthDay()}" + ) + + if (item.statusName.contains("已完成")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.green.convertColor(context) + ) + } else if (item.statusName.contains("未完成")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.red.convertColor(context) + ) + } else if (item.statusName.contains("已废止")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.gray.convertColor(context) + ) + } + } + } + contractRecyclerView.addItemDecoration( + DividerItemDecoration(this, DividerItemDecoration.VERTICAL) + ) + contractRecyclerView.adapter = contractAdapter + contractAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, t: ContractListModel.DataModel.RowsModel + ) { +// navigatePageTo(t.id) + } + }) + } + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt index 08d6bd2..3430e24 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_customer.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* /** @@ -93,7 +93,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_customer + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustActivity.kt index 2bff498..159d51d 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_entrust.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* /** @@ -93,7 +93,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_entrust + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt index b105378..f9b1076 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_equipment.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* @@ -100,7 +100,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_equipment + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt index 6dba78b..0a8c595 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_global.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* class SearchGlobalActivity : ApplicationBaseActivity() { @@ -90,7 +90,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_global + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainActivity.kt index 56fda90..da94e79 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_meterage_train.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* /** @@ -93,7 +93,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_meterage_train + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt index 447c483..cebdace 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt @@ -119,29 +119,25 @@ if (param.isDigitsOnly()) { meterageTrainViewModel.getMeterageTrainList( "", "", "", "", param, "", - "", "", "", "jlglpxjhsp", arrayOf(), - pageIndex + "", "", "", arrayOf(), pageIndex ) } else { if (param.length < 4) { //输入参数长度小于4,默认查名称 meterageTrainViewModel.getMeterageTrainList( "", "", "", param, "", "", - "", "", "", "jlglpxjhsp", arrayOf(), - pageIndex + "", "", "", arrayOf(), pageIndex ) } else { if (AppMemoryCache.prefixCode.contains(param.substring(0, 4))) { meterageTrainViewModel.getMeterageTrainList( "", "", "", "", param, "", - "", "", "", "jlglpxjhsp", arrayOf(), - pageIndex + "", "", "", arrayOf(), pageIndex ) } else { meterageTrainViewModel.getMeterageTrainList( "", "", "", param, "", "", - "", "", "", "jlglpxjhsp", arrayOf(), - pageIndex + "", "", "", arrayOf(), pageIndex ) } } diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchStandardDeviceActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchStandardDeviceActivity.kt index cf96d0d..39b1388 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchStandardDeviceActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchStandardDeviceActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_standard_device.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* /** @@ -99,7 +99,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_standard_device + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 9fc7c01..78d7828 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -71,6 +71,7 @@ + @@ -85,6 +86,8 @@ + + diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt index 71fe5a8..ad81434 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt @@ -170,7 +170,7 @@ "标准规范" -> requireContext().navigatePageTo() "能力列表" -> requireContext().navigatePageTo() "计量培训" -> requireContext().navigatePageTo() -// "合同发票" -> requireContext().navigatePageTo() + "合同发票" -> requireContext().navigatePageTo() // "业务统计" -> requireContext().navigatePageTo() "客户列表" -> requireContext().navigatePageTo() // "外场检测" -> requireContext().navigatePageTo() diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt index b47cb32..b12a0bf 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt @@ -184,7 +184,7 @@ requireContext().navigatePageTo() } - //TODO 未实现 + //TODO 通过接口修改数据库字段实现 pushSettingSwitch.setOnCheckedChangeListener { _, isChecked -> SaveKeyValues.putValue(LocaleConstant.PUSH_SETTING, isChecked) if (isChecked) { diff --git a/app/src/main/java/com/casic/xz/meterage/model/ContractListModel.java b/app/src/main/java/com/casic/xz/meterage/model/ContractListModel.java new file mode 100644 index 0000000..111ff52 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/model/ContractListModel.java @@ -0,0 +1,364 @@ +package com.casic.xz.meterage.model; + +import java.util.List; + +public class ContractListModel { + + 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 agreementAmount; + private String agreementEndDate; + private String agreementImportantContent; + private String agreementKind; + private String agreementKindName; + private String agreementName; + private String agreementNo; + private String agreementSource; + private String agreementSourceName; + private String agreementStartDate; + private String agreementType; + private String agreementTypeName; + private String approvalStatus; + private String createTime; + private String createUser; + private String createUserName; + private String customerId; + private String deptId; + private String deptName; + private String director; + private String estimateSignDate; + private String firstParty; + private String id; + private String isDel; + private String minioFileName; + private String orderIdList; + private String orderList; + private String paymentList; + private String processId; + private String remark; + private String secondParty; + private String status; + private String statusName; + private String updateTime; + + public String getAgreementAmount() { + return agreementAmount; + } + + public void setAgreementAmount(String agreementAmount) { + this.agreementAmount = agreementAmount; + } + + public String getAgreementEndDate() { + return agreementEndDate; + } + + public void setAgreementEndDate(String agreementEndDate) { + this.agreementEndDate = agreementEndDate; + } + + public String getAgreementImportantContent() { + return agreementImportantContent; + } + + public void setAgreementImportantContent(String agreementImportantContent) { + this.agreementImportantContent = agreementImportantContent; + } + + public String getAgreementKind() { + return agreementKind; + } + + public void setAgreementKind(String agreementKind) { + this.agreementKind = agreementKind; + } + + public String getAgreementKindName() { + return agreementKindName; + } + + public void setAgreementKindName(String agreementKindName) { + this.agreementKindName = agreementKindName; + } + + public String getAgreementName() { + return agreementName; + } + + public void setAgreementName(String agreementName) { + this.agreementName = agreementName; + } + + public String getAgreementNo() { + return agreementNo; + } + + public void setAgreementNo(String agreementNo) { + this.agreementNo = agreementNo; + } + + public String getAgreementSource() { + return agreementSource; + } + + public void setAgreementSource(String agreementSource) { + this.agreementSource = agreementSource; + } + + public String getAgreementSourceName() { + return agreementSourceName; + } + + public void setAgreementSourceName(String agreementSourceName) { + this.agreementSourceName = agreementSourceName; + } + + public String getAgreementStartDate() { + return agreementStartDate; + } + + public void setAgreementStartDate(String agreementStartDate) { + this.agreementStartDate = agreementStartDate; + } + + public String getAgreementType() { + return agreementType; + } + + public void setAgreementType(String agreementType) { + this.agreementType = agreementType; + } + + public String getAgreementTypeName() { + return agreementTypeName; + } + + public void setAgreementTypeName(String agreementTypeName) { + this.agreementTypeName = agreementTypeName; + } + + public String getApprovalStatus() { + return approvalStatus; + } + + public void setApprovalStatus(String approvalStatus) { + this.approvalStatus = approvalStatus; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getCreateUser() { + return createUser; + } + + public void setCreateUser(String createUser) { + this.createUser = createUser; + } + + public String getCreateUserName() { + return createUserName; + } + + public void setCreateUserName(String createUserName) { + this.createUserName = createUserName; + } + + public String getCustomerId() { + return customerId; + } + + public void setCustomerId(String customerId) { + this.customerId = customerId; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDirector() { + return director; + } + + public void setDirector(String director) { + this.director = director; + } + + public String getEstimateSignDate() { + return estimateSignDate; + } + + public void setEstimateSignDate(String estimateSignDate) { + this.estimateSignDate = estimateSignDate; + } + + public String getFirstParty() { + return firstParty; + } + + public void setFirstParty(String firstParty) { + this.firstParty = firstParty; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getIsDel() { + return isDel; + } + + public void setIsDel(String isDel) { + this.isDel = isDel; + } + + public String getMinioFileName() { + return minioFileName; + } + + public void setMinioFileName(String minioFileName) { + this.minioFileName = minioFileName; + } + + public String getOrderIdList() { + return orderIdList; + } + + public void setOrderIdList(String orderIdList) { + this.orderIdList = orderIdList; + } + + public String getOrderList() { + return orderList; + } + + public void setOrderList(String orderList) { + this.orderList = orderList; + } + + public String getPaymentList() { + return paymentList; + } + + public void setPaymentList(String paymentList) { + this.paymentList = paymentList; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + public String getSecondParty() { + return secondParty; + } + + public void setSecondParty(String secondParty) { + this.secondParty = secondParty; + } + + 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; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt index 85756b0..36059c5 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt @@ -65,4 +65,8 @@ const val USER_ID = "userId" const val PRIVACY_CHECK_BOX = "privacyCheckBox" const val PUSH_SETTING = "pushSetting" + const val METERAGE_TRAIN_FORM_ID = "jlglpxjhsp" + const val STANDARD_FILE_FORM_ID = "jlglwjsp" + const val CERTIFICATE_REPORT_FORM_ID = "ywglzsbg" + const val CONTRACT_FORM_ID = "cwczht" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt b/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt index da58079..99f3bb1 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt @@ -2,37 +2,42 @@ object SearchType { /** + * 首页模糊搜索 + * */ + const val All = "0" + + /** * 搜索仪器设备 * */ - const val Equipment = "0" + const val Equipment = "1" /** * 搜索标准装置 * */ - const val StandardDevice = "1" + const val StandardDevice = "2" /** * 搜索委托书需求 * */ - const val Entrust = "2" + const val Entrust = "3" /** * 搜索能力 * */ - const val Capability = "3" + const val Capability = "4" /** * 搜索计量培训 * */ - const val MeterageTrain = "4" + const val MeterageTrain = "5" /** * 搜索客户 * */ - const val Customer = "5" + const val Customer = "6" /** - * 首页模糊搜索 + * 搜索仪器设备 * */ - const val All = "6" + const val Contract = "7" } 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 3bd698a..bc4d694 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 @@ -446,4 +446,15 @@ @QueryMap limit: Map, @QueryMap offset: Map ): String + + /** + * 合同列表 + */ + @POST("/finance/agreement/listPage") + suspend fun getContractList( + @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 9e7556b..1aaabee 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 @@ -459,7 +459,6 @@ effectiveCompany: String, trainStartTime: String, trainEndTime: String, - formId: String, ids: Array, offset: Int ): String { @@ -473,7 +472,7 @@ param.addProperty("effectiveCompany", effectiveCompany) param.addProperty("trainStartTime", trainStartTime) param.addProperty("trainEndTime", trainEndTime) - param.addProperty("formId", formId) + param.addProperty("formId", LocaleConstant.METERAGE_TRAIN_FORM_ID) param.add("ids", gson.toJsonTree(ids, typeToken).asJsonArray) val requestBody = param.toString().toRequestBody( @@ -843,7 +842,7 @@ offset: Int ): String { val param = JsonObject() - param.addProperty("formId", "jlglwjsp") + param.addProperty("formId", LocaleConstant.STANDARD_FILE_FORM_ID) param.addProperty("fileType", fileType) param.addProperty("fileName", fileName) param.addProperty("fileNo", fileNo) @@ -884,7 +883,7 @@ offset: Int ): String { val param = JsonObject() - param.addProperty("formId", "ywglzsbg") + param.addProperty("formId", LocaleConstant.CERTIFICATE_REPORT_FORM_ID) param.addProperty("approvalStatus", approvalStatus) param.addProperty("certificateReportCode", certificateReportCode) param.addProperty("customerName", customerName) @@ -925,7 +924,7 @@ */ suspend fun submit(id: String): String { val param = JsonObject() - param.addProperty("formId", "ywglzsbg") + param.addProperty("formId", LocaleConstant.CERTIFICATE_REPORT_FORM_ID) param.addProperty("id", id) val requestBody = param.toString().toRequestBody( "application/json;charset=UTF-8".toMediaType() @@ -1009,4 +1008,47 @@ AuthenticationHelper.token!!, requestBody, limitMap, offsetMap ) } + + /** + * 合同列表 + */ + suspend fun getContractList( + customerId: String, + agreementKind: String, + agreementName: String, + agreementType: String, + agreementNo: String, + estimateSignStartDate: String, + estimateSignEndDate: String, + firstParty: String, + status: String, + ids: Array, + offset: Int + ): String { + val param = JsonObject() + param.addProperty("customerId", customerId) + param.addProperty("agreementKind", agreementKind) + param.addProperty("agreementName", agreementName) + param.addProperty("agreementType", agreementType) + param.addProperty("agreementNo", agreementNo) + param.addProperty("estimateSignStartDate", estimateSignStartDate) + param.addProperty("estimateSignEndDate", estimateSignEndDate) + param.addProperty("firstParty", firstParty) + param.addProperty("formId", LocaleConstant.CONTRACT_FORM_ID) + param.addProperty("status", status) + param.add("ids", gson.toJsonTree(ids, typeToken).asJsonArray) + + val requestBody = param.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + + val limitMap = HashMap() + limitMap["limit"] = LocaleConstant.PAGE_LIMIT + + val offsetMap = HashMap() + offsetMap["offset"] = offset + return api.getContractList( + AuthenticationHelper.token!!, requestBody, limitMap, offsetMap + ) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/ContractInvoiceActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/ContractInvoiceActivity.kt new file mode 100644 index 0000000..96148a3 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/home/ContractInvoiceActivity.kt @@ -0,0 +1,192 @@ +package com.casic.xz.meterage.view.home + +import android.content.Context +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration +import com.casic.xz.meterage.R +import com.casic.xz.meterage.base.ApplicationBaseActivity +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.model.ContractListModel +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.view.search.SearchContractActivity +import com.casic.xz.meterage.vm.ContractInvoiceViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +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_contract_invoice.* +import kotlinx.android.synthetic.main.include_empty_view.* +import kotlinx.android.synthetic.main.include_search_title.* + +class ContractInvoiceActivity : ApplicationBaseActivity() { + + private var context: Context = this@ContractInvoiceActivity + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var contractViewModel: ContractInvoiceViewModel + private lateinit var contractAdapter: NormalRecyclerAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.activity_contract_invoice + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "合同发票" + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + contractViewModel = ViewModelProvider(this)[ContractInvoiceViewModel::class.java] + contractViewModel.contractList.observe(this) { + if (it.code == 200) { + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + contractLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows) + contractLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023041001) + } + } + } + + override fun observeRequestState() { + contractViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + rightOperateView.setOnClickListener { + navigatePageTo() + } + + contractLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getContractListByPage() + } + + contractLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getContractListByPage() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + getContractListByPage() + } + + private fun getContractListByPage() { + contractViewModel.getContractList( + "", + "", + "", + "", + "", + "1", + "", + "", + "", + arrayOf(), + pageIndex + ) + } + + private val callback = Handler.Callback { + when (it.what) { + 2023041001 -> { + if (isRefresh || isLoadMore) { + contractAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无合同") { + pageIndex = 1 + getContractListByPage() + } + } else { + emptyView!!.hide() + contractAdapter = object : + NormalRecyclerAdapter( + R.layout.item_contract_rv_l, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, + position: Int, + item: ContractListModel.DataModel.RowsModel + ) { + viewHolder.setText(R.id.contractNameView, item.agreementName) + .setText(R.id.contractStateView, item.statusName) + .setText(R.id.contractCodeView, "合同编号:${item.agreementNo}") + .setText(R.id.firstPartNameView, "甲方单位:${item.firstParty}") + .setText( + R.id.startDateView, + "签订日期:${item.estimateSignDate.formatToYearMonthDay()}" + ) + + if (item.statusName.contains("已完成")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.green.convertColor(context) + ) + } else if (item.statusName.contains("未完成")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.red.convertColor(context) + ) + } else if (item.statusName.contains("已废止")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.gray.convertColor(context) + ) + } + } + } + contractRecyclerView.addItemDecoration( + DividerItemDecoration(this, DividerItemDecoration.VERTICAL) + ) + contractRecyclerView.adapter = contractAdapter + contractAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, t: ContractListModel.DataModel.RowsModel + ) { +// navigatePageTo(t.id) + } + }) + } + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt index 373c386..078f497 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt @@ -117,7 +117,6 @@ "", "", "", - "jlglpxjhsp", arrayOf(), pageIndex ) diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt index 16bcd38..92e256d 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_capability.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* /** @@ -93,7 +93,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_capability + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractActivity.kt new file mode 100644 index 0000000..17f6cda --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractActivity.kt @@ -0,0 +1,113 @@ +package com.casic.xz.meterage.view.search + +import android.view.LayoutInflater +import android.view.View +import com.casic.xz.meterage.R +import com.casic.xz.meterage.base.ApplicationBaseActivity +import com.casic.xz.meterage.bean.SearchHistoryBean +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.utils.DataBaseManager +import com.casic.xz.meterage.utils.SearchType +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton +import com.zhy.view.flowlayout.FlowLayout +import com.zhy.view.flowlayout.TagAdapter +import kotlinx.android.synthetic.main.activity_search_history.* +import kotlinx.android.synthetic.main.include_search_input_title.* + +/** + * 搜索合同 + * */ +class SearchContractActivity : ApplicationBaseActivity() { + + private lateinit var inflater: LayoutInflater + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var historyAdapter: TagAdapter + private var dataBeans: MutableList = ArrayList() + private var isRefresh = false + + override fun initLayoutView(): Int = R.layout.activity_search_history + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + inputView.hint = "请输入合同名称或者编号查询" + } + + override fun initData() { + inflater = LayoutInflater.from(this) + weakReferenceHandler = WeakReferenceHandler { + if (it.what == 2023041001) { + if (isRefresh) { + historyAdapter.notifyDataChanged() + } else { + historyAdapter = object : TagAdapter(dataBeans) { + override fun getView( + parent: FlowLayout?, position: Int, bean: SearchHistoryBean + ): View { + val tagView = inflater.inflate( + R.layout.item_search_rv_l, tagFlowLayout, false + ) as QMUIRoundButton + tagView.text = bean.keywords + return tagView + } + } + tagFlowLayout.adapter = historyAdapter + tagFlowLayout.setOnTagClickListener { _, position, _ -> + inputView.setText(dataBeans[position].keywords) + navigatePageTo(inputView.text.toString()) + true + } + } + } + true + } + } + + override fun onResume() { + super.onResume() + dataBeans = DataBaseManager.get.queryHistoryByType(SearchType.Contract) + weakReferenceHandler.sendEmptyMessage(2023041001) + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + searchTextView.setOnClickListener { + if (!inputView.text.isNullOrBlank()) { + DataBaseManager.get.addSearchHistory( + inputView.text.toString(), SearchType.Contract + ) + } + + navigatePageTo(inputView.text.toString()) + } + + deleteHistoryView.setOnClickListener { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("确定将所有搜索记录删除?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + + } + + override fun onConfirmClick() { + DataBaseManager.get.deleteHistoryByType(SearchType.Contract) + dataBeans.clear() + historyAdapter.notifyDataChanged() + } + }).build().show() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractResultActivity.kt new file mode 100644 index 0000000..5096b88 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractResultActivity.kt @@ -0,0 +1,210 @@ +package com.casic.xz.meterage.view.search + +import android.content.Context +import android.os.Handler +import androidx.core.text.isDigitsOnly +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration +import com.casic.xz.meterage.R +import com.casic.xz.meterage.base.ApplicationBaseActivity +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.model.ContractListModel +import com.casic.xz.meterage.utils.AppMemoryCache +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.vm.ContractInvoiceViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_search_contract_reasult.* +import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class SearchContractResultActivity : ApplicationBaseActivity() { + + private var context: Context = this@SearchContractResultActivity + private lateinit var param: String + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var contractViewModel: ContractInvoiceViewModel + private lateinit var contractAdapter: NormalRecyclerAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.activity_search_contract_reasult + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "查询结果" + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + getContractListByPage() + } + + override fun initData() { + param = intent.getStringExtra(Constant.INTENT_PARAM)!! + + weakReferenceHandler = WeakReferenceHandler(callback) + contractViewModel = ViewModelProvider(this)[ContractInvoiceViewModel::class.java] + contractViewModel.contractList.observe(this) { + if (it.code == 200) { + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + contractLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows) + contractLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023041002) + } + } + } + + override fun observeRequestState() { + contractViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + + contractLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getContractListByPage() + } + + contractLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getContractListByPage() + } + } + + private fun getContractListByPage() { + if (param.isDigitsOnly()) { + contractViewModel.getContractList( + "", "", "", "", param, + "1", "", "", "", arrayOf(), + pageIndex + ) + } else { + if (param.length < 4) { + //输入参数长度小于4,默认查名称 + contractViewModel.getContractList( + "", "", param, "", "", + "1", "", "", "", arrayOf(), + pageIndex + ) + } else { + if (AppMemoryCache.prefixCode.contains(param.substring(0, 4))) { + contractViewModel.getContractList( + "", "", "", "", param, + "1", "", "", "", arrayOf(), + pageIndex + ) + } else { + contractViewModel.getContractList( + "", "", param, "", "", + "1", "", "", "", arrayOf(), + pageIndex + ) + } + } + } + } + + private val callback = Handler.Callback { + when (it.what) { + 2023041002 -> { + if (isRefresh || isLoadMore) { + contractAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无合同") { + pageIndex = 1 + getContractListByPage() + } + } else { + emptyView!!.hide() + contractAdapter = object : + NormalRecyclerAdapter( + R.layout.item_contract_rv_l, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, + position: Int, + item: ContractListModel.DataModel.RowsModel + ) { + viewHolder.setText(R.id.contractNameView, item.agreementName) + .setText(R.id.contractStateView, item.statusName) + .setText(R.id.contractCodeView, "合同编号:${item.agreementNo}") + .setText(R.id.firstPartNameView, "甲方单位:${item.firstParty}") + .setText( + R.id.startDateView, + "签订日期:${item.estimateSignDate.formatToYearMonthDay()}" + ) + + if (item.statusName.contains("已完成")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.green.convertColor(context) + ) + } else if (item.statusName.contains("未完成")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.red.convertColor(context) + ) + } else if (item.statusName.contains("已废止")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.gray.convertColor(context) + ) + } + } + } + contractRecyclerView.addItemDecoration( + DividerItemDecoration(this, DividerItemDecoration.VERTICAL) + ) + contractRecyclerView.adapter = contractAdapter + contractAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, t: ContractListModel.DataModel.RowsModel + ) { +// navigatePageTo(t.id) + } + }) + } + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt index 08d6bd2..3430e24 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_customer.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* /** @@ -93,7 +93,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_customer + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustActivity.kt index 2bff498..159d51d 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_entrust.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* /** @@ -93,7 +93,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_entrust + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt index b105378..f9b1076 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_equipment.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* @@ -100,7 +100,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_equipment + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt index 6dba78b..0a8c595 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_global.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* class SearchGlobalActivity : ApplicationBaseActivity() { @@ -90,7 +90,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_global + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainActivity.kt index 56fda90..da94e79 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_meterage_train.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* /** @@ -93,7 +93,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_meterage_train + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt index 447c483..cebdace 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt @@ -119,29 +119,25 @@ if (param.isDigitsOnly()) { meterageTrainViewModel.getMeterageTrainList( "", "", "", "", param, "", - "", "", "", "jlglpxjhsp", arrayOf(), - pageIndex + "", "", "", arrayOf(), pageIndex ) } else { if (param.length < 4) { //输入参数长度小于4,默认查名称 meterageTrainViewModel.getMeterageTrainList( "", "", "", param, "", "", - "", "", "", "jlglpxjhsp", arrayOf(), - pageIndex + "", "", "", arrayOf(), pageIndex ) } else { if (AppMemoryCache.prefixCode.contains(param.substring(0, 4))) { meterageTrainViewModel.getMeterageTrainList( "", "", "", "", param, "", - "", "", "", "jlglpxjhsp", arrayOf(), - pageIndex + "", "", "", arrayOf(), pageIndex ) } else { meterageTrainViewModel.getMeterageTrainList( "", "", "", param, "", "", - "", "", "", "jlglpxjhsp", arrayOf(), - pageIndex + "", "", "", arrayOf(), pageIndex ) } } diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchStandardDeviceActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchStandardDeviceActivity.kt index cf96d0d..39b1388 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchStandardDeviceActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchStandardDeviceActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_standard_device.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* /** @@ -99,7 +99,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_standard_device + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/vm/ContractInvoiceViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/ContractInvoiceViewModel.kt new file mode 100644 index 0000000..99b5871 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/vm/ContractInvoiceViewModel.kt @@ -0,0 +1,66 @@ +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.ContractListModel +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 ContractInvoiceViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } + val contractList = MutableLiveData() + + fun getContractList( + customerId: String, + agreementKind: String, + agreementName: String, + agreementType: String, + agreementNo: String, + estimateSignStartDate: String, + estimateSignEndDate: String, + firstParty: String, + status: String, + ids: Array, + offset: Int + ) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.getContractList( + customerId, + agreementKind, + agreementName, + agreementType, + agreementNo, + estimateSignStartDate, + estimateSignEndDate, + firstParty, + status, + ids, + offset + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + contractList.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()) + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 9fc7c01..78d7828 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -71,6 +71,7 @@ + @@ -85,6 +86,8 @@ + + diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt index 71fe5a8..ad81434 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt @@ -170,7 +170,7 @@ "标准规范" -> requireContext().navigatePageTo() "能力列表" -> requireContext().navigatePageTo() "计量培训" -> requireContext().navigatePageTo() -// "合同发票" -> requireContext().navigatePageTo() + "合同发票" -> requireContext().navigatePageTo() // "业务统计" -> requireContext().navigatePageTo() "客户列表" -> requireContext().navigatePageTo() // "外场检测" -> requireContext().navigatePageTo() diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt index b47cb32..b12a0bf 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt @@ -184,7 +184,7 @@ requireContext().navigatePageTo() } - //TODO 未实现 + //TODO 通过接口修改数据库字段实现 pushSettingSwitch.setOnCheckedChangeListener { _, isChecked -> SaveKeyValues.putValue(LocaleConstant.PUSH_SETTING, isChecked) if (isChecked) { diff --git a/app/src/main/java/com/casic/xz/meterage/model/ContractListModel.java b/app/src/main/java/com/casic/xz/meterage/model/ContractListModel.java new file mode 100644 index 0000000..111ff52 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/model/ContractListModel.java @@ -0,0 +1,364 @@ +package com.casic.xz.meterage.model; + +import java.util.List; + +public class ContractListModel { + + 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 agreementAmount; + private String agreementEndDate; + private String agreementImportantContent; + private String agreementKind; + private String agreementKindName; + private String agreementName; + private String agreementNo; + private String agreementSource; + private String agreementSourceName; + private String agreementStartDate; + private String agreementType; + private String agreementTypeName; + private String approvalStatus; + private String createTime; + private String createUser; + private String createUserName; + private String customerId; + private String deptId; + private String deptName; + private String director; + private String estimateSignDate; + private String firstParty; + private String id; + private String isDel; + private String minioFileName; + private String orderIdList; + private String orderList; + private String paymentList; + private String processId; + private String remark; + private String secondParty; + private String status; + private String statusName; + private String updateTime; + + public String getAgreementAmount() { + return agreementAmount; + } + + public void setAgreementAmount(String agreementAmount) { + this.agreementAmount = agreementAmount; + } + + public String getAgreementEndDate() { + return agreementEndDate; + } + + public void setAgreementEndDate(String agreementEndDate) { + this.agreementEndDate = agreementEndDate; + } + + public String getAgreementImportantContent() { + return agreementImportantContent; + } + + public void setAgreementImportantContent(String agreementImportantContent) { + this.agreementImportantContent = agreementImportantContent; + } + + public String getAgreementKind() { + return agreementKind; + } + + public void setAgreementKind(String agreementKind) { + this.agreementKind = agreementKind; + } + + public String getAgreementKindName() { + return agreementKindName; + } + + public void setAgreementKindName(String agreementKindName) { + this.agreementKindName = agreementKindName; + } + + public String getAgreementName() { + return agreementName; + } + + public void setAgreementName(String agreementName) { + this.agreementName = agreementName; + } + + public String getAgreementNo() { + return agreementNo; + } + + public void setAgreementNo(String agreementNo) { + this.agreementNo = agreementNo; + } + + public String getAgreementSource() { + return agreementSource; + } + + public void setAgreementSource(String agreementSource) { + this.agreementSource = agreementSource; + } + + public String getAgreementSourceName() { + return agreementSourceName; + } + + public void setAgreementSourceName(String agreementSourceName) { + this.agreementSourceName = agreementSourceName; + } + + public String getAgreementStartDate() { + return agreementStartDate; + } + + public void setAgreementStartDate(String agreementStartDate) { + this.agreementStartDate = agreementStartDate; + } + + public String getAgreementType() { + return agreementType; + } + + public void setAgreementType(String agreementType) { + this.agreementType = agreementType; + } + + public String getAgreementTypeName() { + return agreementTypeName; + } + + public void setAgreementTypeName(String agreementTypeName) { + this.agreementTypeName = agreementTypeName; + } + + public String getApprovalStatus() { + return approvalStatus; + } + + public void setApprovalStatus(String approvalStatus) { + this.approvalStatus = approvalStatus; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getCreateUser() { + return createUser; + } + + public void setCreateUser(String createUser) { + this.createUser = createUser; + } + + public String getCreateUserName() { + return createUserName; + } + + public void setCreateUserName(String createUserName) { + this.createUserName = createUserName; + } + + public String getCustomerId() { + return customerId; + } + + public void setCustomerId(String customerId) { + this.customerId = customerId; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDirector() { + return director; + } + + public void setDirector(String director) { + this.director = director; + } + + public String getEstimateSignDate() { + return estimateSignDate; + } + + public void setEstimateSignDate(String estimateSignDate) { + this.estimateSignDate = estimateSignDate; + } + + public String getFirstParty() { + return firstParty; + } + + public void setFirstParty(String firstParty) { + this.firstParty = firstParty; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getIsDel() { + return isDel; + } + + public void setIsDel(String isDel) { + this.isDel = isDel; + } + + public String getMinioFileName() { + return minioFileName; + } + + public void setMinioFileName(String minioFileName) { + this.minioFileName = minioFileName; + } + + public String getOrderIdList() { + return orderIdList; + } + + public void setOrderIdList(String orderIdList) { + this.orderIdList = orderIdList; + } + + public String getOrderList() { + return orderList; + } + + public void setOrderList(String orderList) { + this.orderList = orderList; + } + + public String getPaymentList() { + return paymentList; + } + + public void setPaymentList(String paymentList) { + this.paymentList = paymentList; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + public String getSecondParty() { + return secondParty; + } + + public void setSecondParty(String secondParty) { + this.secondParty = secondParty; + } + + 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; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt index 85756b0..36059c5 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt @@ -65,4 +65,8 @@ const val USER_ID = "userId" const val PRIVACY_CHECK_BOX = "privacyCheckBox" const val PUSH_SETTING = "pushSetting" + const val METERAGE_TRAIN_FORM_ID = "jlglpxjhsp" + const val STANDARD_FILE_FORM_ID = "jlglwjsp" + const val CERTIFICATE_REPORT_FORM_ID = "ywglzsbg" + const val CONTRACT_FORM_ID = "cwczht" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt b/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt index da58079..99f3bb1 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt @@ -2,37 +2,42 @@ object SearchType { /** + * 首页模糊搜索 + * */ + const val All = "0" + + /** * 搜索仪器设备 * */ - const val Equipment = "0" + const val Equipment = "1" /** * 搜索标准装置 * */ - const val StandardDevice = "1" + const val StandardDevice = "2" /** * 搜索委托书需求 * */ - const val Entrust = "2" + const val Entrust = "3" /** * 搜索能力 * */ - const val Capability = "3" + const val Capability = "4" /** * 搜索计量培训 * */ - const val MeterageTrain = "4" + const val MeterageTrain = "5" /** * 搜索客户 * */ - const val Customer = "5" + const val Customer = "6" /** - * 首页模糊搜索 + * 搜索仪器设备 * */ - const val All = "6" + const val Contract = "7" } 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 3bd698a..bc4d694 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 @@ -446,4 +446,15 @@ @QueryMap limit: Map, @QueryMap offset: Map ): String + + /** + * 合同列表 + */ + @POST("/finance/agreement/listPage") + suspend fun getContractList( + @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 9e7556b..1aaabee 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 @@ -459,7 +459,6 @@ effectiveCompany: String, trainStartTime: String, trainEndTime: String, - formId: String, ids: Array, offset: Int ): String { @@ -473,7 +472,7 @@ param.addProperty("effectiveCompany", effectiveCompany) param.addProperty("trainStartTime", trainStartTime) param.addProperty("trainEndTime", trainEndTime) - param.addProperty("formId", formId) + param.addProperty("formId", LocaleConstant.METERAGE_TRAIN_FORM_ID) param.add("ids", gson.toJsonTree(ids, typeToken).asJsonArray) val requestBody = param.toString().toRequestBody( @@ -843,7 +842,7 @@ offset: Int ): String { val param = JsonObject() - param.addProperty("formId", "jlglwjsp") + param.addProperty("formId", LocaleConstant.STANDARD_FILE_FORM_ID) param.addProperty("fileType", fileType) param.addProperty("fileName", fileName) param.addProperty("fileNo", fileNo) @@ -884,7 +883,7 @@ offset: Int ): String { val param = JsonObject() - param.addProperty("formId", "ywglzsbg") + param.addProperty("formId", LocaleConstant.CERTIFICATE_REPORT_FORM_ID) param.addProperty("approvalStatus", approvalStatus) param.addProperty("certificateReportCode", certificateReportCode) param.addProperty("customerName", customerName) @@ -925,7 +924,7 @@ */ suspend fun submit(id: String): String { val param = JsonObject() - param.addProperty("formId", "ywglzsbg") + param.addProperty("formId", LocaleConstant.CERTIFICATE_REPORT_FORM_ID) param.addProperty("id", id) val requestBody = param.toString().toRequestBody( "application/json;charset=UTF-8".toMediaType() @@ -1009,4 +1008,47 @@ AuthenticationHelper.token!!, requestBody, limitMap, offsetMap ) } + + /** + * 合同列表 + */ + suspend fun getContractList( + customerId: String, + agreementKind: String, + agreementName: String, + agreementType: String, + agreementNo: String, + estimateSignStartDate: String, + estimateSignEndDate: String, + firstParty: String, + status: String, + ids: Array, + offset: Int + ): String { + val param = JsonObject() + param.addProperty("customerId", customerId) + param.addProperty("agreementKind", agreementKind) + param.addProperty("agreementName", agreementName) + param.addProperty("agreementType", agreementType) + param.addProperty("agreementNo", agreementNo) + param.addProperty("estimateSignStartDate", estimateSignStartDate) + param.addProperty("estimateSignEndDate", estimateSignEndDate) + param.addProperty("firstParty", firstParty) + param.addProperty("formId", LocaleConstant.CONTRACT_FORM_ID) + param.addProperty("status", status) + param.add("ids", gson.toJsonTree(ids, typeToken).asJsonArray) + + val requestBody = param.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + + val limitMap = HashMap() + limitMap["limit"] = LocaleConstant.PAGE_LIMIT + + val offsetMap = HashMap() + offsetMap["offset"] = offset + return api.getContractList( + AuthenticationHelper.token!!, requestBody, limitMap, offsetMap + ) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/ContractInvoiceActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/ContractInvoiceActivity.kt new file mode 100644 index 0000000..96148a3 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/home/ContractInvoiceActivity.kt @@ -0,0 +1,192 @@ +package com.casic.xz.meterage.view.home + +import android.content.Context +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration +import com.casic.xz.meterage.R +import com.casic.xz.meterage.base.ApplicationBaseActivity +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.model.ContractListModel +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.view.search.SearchContractActivity +import com.casic.xz.meterage.vm.ContractInvoiceViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +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_contract_invoice.* +import kotlinx.android.synthetic.main.include_empty_view.* +import kotlinx.android.synthetic.main.include_search_title.* + +class ContractInvoiceActivity : ApplicationBaseActivity() { + + private var context: Context = this@ContractInvoiceActivity + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var contractViewModel: ContractInvoiceViewModel + private lateinit var contractAdapter: NormalRecyclerAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.activity_contract_invoice + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "合同发票" + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + contractViewModel = ViewModelProvider(this)[ContractInvoiceViewModel::class.java] + contractViewModel.contractList.observe(this) { + if (it.code == 200) { + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + contractLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows) + contractLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023041001) + } + } + } + + override fun observeRequestState() { + contractViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + rightOperateView.setOnClickListener { + navigatePageTo() + } + + contractLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getContractListByPage() + } + + contractLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getContractListByPage() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + getContractListByPage() + } + + private fun getContractListByPage() { + contractViewModel.getContractList( + "", + "", + "", + "", + "", + "1", + "", + "", + "", + arrayOf(), + pageIndex + ) + } + + private val callback = Handler.Callback { + when (it.what) { + 2023041001 -> { + if (isRefresh || isLoadMore) { + contractAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无合同") { + pageIndex = 1 + getContractListByPage() + } + } else { + emptyView!!.hide() + contractAdapter = object : + NormalRecyclerAdapter( + R.layout.item_contract_rv_l, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, + position: Int, + item: ContractListModel.DataModel.RowsModel + ) { + viewHolder.setText(R.id.contractNameView, item.agreementName) + .setText(R.id.contractStateView, item.statusName) + .setText(R.id.contractCodeView, "合同编号:${item.agreementNo}") + .setText(R.id.firstPartNameView, "甲方单位:${item.firstParty}") + .setText( + R.id.startDateView, + "签订日期:${item.estimateSignDate.formatToYearMonthDay()}" + ) + + if (item.statusName.contains("已完成")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.green.convertColor(context) + ) + } else if (item.statusName.contains("未完成")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.red.convertColor(context) + ) + } else if (item.statusName.contains("已废止")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.gray.convertColor(context) + ) + } + } + } + contractRecyclerView.addItemDecoration( + DividerItemDecoration(this, DividerItemDecoration.VERTICAL) + ) + contractRecyclerView.adapter = contractAdapter + contractAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, t: ContractListModel.DataModel.RowsModel + ) { +// navigatePageTo(t.id) + } + }) + } + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt index 373c386..078f497 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt @@ -117,7 +117,6 @@ "", "", "", - "jlglpxjhsp", arrayOf(), pageIndex ) diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt index 16bcd38..92e256d 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_capability.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* /** @@ -93,7 +93,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_capability + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractActivity.kt new file mode 100644 index 0000000..17f6cda --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractActivity.kt @@ -0,0 +1,113 @@ +package com.casic.xz.meterage.view.search + +import android.view.LayoutInflater +import android.view.View +import com.casic.xz.meterage.R +import com.casic.xz.meterage.base.ApplicationBaseActivity +import com.casic.xz.meterage.bean.SearchHistoryBean +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.utils.DataBaseManager +import com.casic.xz.meterage.utils.SearchType +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton +import com.zhy.view.flowlayout.FlowLayout +import com.zhy.view.flowlayout.TagAdapter +import kotlinx.android.synthetic.main.activity_search_history.* +import kotlinx.android.synthetic.main.include_search_input_title.* + +/** + * 搜索合同 + * */ +class SearchContractActivity : ApplicationBaseActivity() { + + private lateinit var inflater: LayoutInflater + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var historyAdapter: TagAdapter + private var dataBeans: MutableList = ArrayList() + private var isRefresh = false + + override fun initLayoutView(): Int = R.layout.activity_search_history + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + inputView.hint = "请输入合同名称或者编号查询" + } + + override fun initData() { + inflater = LayoutInflater.from(this) + weakReferenceHandler = WeakReferenceHandler { + if (it.what == 2023041001) { + if (isRefresh) { + historyAdapter.notifyDataChanged() + } else { + historyAdapter = object : TagAdapter(dataBeans) { + override fun getView( + parent: FlowLayout?, position: Int, bean: SearchHistoryBean + ): View { + val tagView = inflater.inflate( + R.layout.item_search_rv_l, tagFlowLayout, false + ) as QMUIRoundButton + tagView.text = bean.keywords + return tagView + } + } + tagFlowLayout.adapter = historyAdapter + tagFlowLayout.setOnTagClickListener { _, position, _ -> + inputView.setText(dataBeans[position].keywords) + navigatePageTo(inputView.text.toString()) + true + } + } + } + true + } + } + + override fun onResume() { + super.onResume() + dataBeans = DataBaseManager.get.queryHistoryByType(SearchType.Contract) + weakReferenceHandler.sendEmptyMessage(2023041001) + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + searchTextView.setOnClickListener { + if (!inputView.text.isNullOrBlank()) { + DataBaseManager.get.addSearchHistory( + inputView.text.toString(), SearchType.Contract + ) + } + + navigatePageTo(inputView.text.toString()) + } + + deleteHistoryView.setOnClickListener { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("确定将所有搜索记录删除?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + + } + + override fun onConfirmClick() { + DataBaseManager.get.deleteHistoryByType(SearchType.Contract) + dataBeans.clear() + historyAdapter.notifyDataChanged() + } + }).build().show() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractResultActivity.kt new file mode 100644 index 0000000..5096b88 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractResultActivity.kt @@ -0,0 +1,210 @@ +package com.casic.xz.meterage.view.search + +import android.content.Context +import android.os.Handler +import androidx.core.text.isDigitsOnly +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration +import com.casic.xz.meterage.R +import com.casic.xz.meterage.base.ApplicationBaseActivity +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.model.ContractListModel +import com.casic.xz.meterage.utils.AppMemoryCache +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.vm.ContractInvoiceViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_search_contract_reasult.* +import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class SearchContractResultActivity : ApplicationBaseActivity() { + + private var context: Context = this@SearchContractResultActivity + private lateinit var param: String + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var contractViewModel: ContractInvoiceViewModel + private lateinit var contractAdapter: NormalRecyclerAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.activity_search_contract_reasult + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "查询结果" + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + getContractListByPage() + } + + override fun initData() { + param = intent.getStringExtra(Constant.INTENT_PARAM)!! + + weakReferenceHandler = WeakReferenceHandler(callback) + contractViewModel = ViewModelProvider(this)[ContractInvoiceViewModel::class.java] + contractViewModel.contractList.observe(this) { + if (it.code == 200) { + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + contractLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows) + contractLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023041002) + } + } + } + + override fun observeRequestState() { + contractViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + + contractLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getContractListByPage() + } + + contractLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getContractListByPage() + } + } + + private fun getContractListByPage() { + if (param.isDigitsOnly()) { + contractViewModel.getContractList( + "", "", "", "", param, + "1", "", "", "", arrayOf(), + pageIndex + ) + } else { + if (param.length < 4) { + //输入参数长度小于4,默认查名称 + contractViewModel.getContractList( + "", "", param, "", "", + "1", "", "", "", arrayOf(), + pageIndex + ) + } else { + if (AppMemoryCache.prefixCode.contains(param.substring(0, 4))) { + contractViewModel.getContractList( + "", "", "", "", param, + "1", "", "", "", arrayOf(), + pageIndex + ) + } else { + contractViewModel.getContractList( + "", "", param, "", "", + "1", "", "", "", arrayOf(), + pageIndex + ) + } + } + } + } + + private val callback = Handler.Callback { + when (it.what) { + 2023041002 -> { + if (isRefresh || isLoadMore) { + contractAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无合同") { + pageIndex = 1 + getContractListByPage() + } + } else { + emptyView!!.hide() + contractAdapter = object : + NormalRecyclerAdapter( + R.layout.item_contract_rv_l, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, + position: Int, + item: ContractListModel.DataModel.RowsModel + ) { + viewHolder.setText(R.id.contractNameView, item.agreementName) + .setText(R.id.contractStateView, item.statusName) + .setText(R.id.contractCodeView, "合同编号:${item.agreementNo}") + .setText(R.id.firstPartNameView, "甲方单位:${item.firstParty}") + .setText( + R.id.startDateView, + "签订日期:${item.estimateSignDate.formatToYearMonthDay()}" + ) + + if (item.statusName.contains("已完成")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.green.convertColor(context) + ) + } else if (item.statusName.contains("未完成")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.red.convertColor(context) + ) + } else if (item.statusName.contains("已废止")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.gray.convertColor(context) + ) + } + } + } + contractRecyclerView.addItemDecoration( + DividerItemDecoration(this, DividerItemDecoration.VERTICAL) + ) + contractRecyclerView.adapter = contractAdapter + contractAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, t: ContractListModel.DataModel.RowsModel + ) { +// navigatePageTo(t.id) + } + }) + } + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt index 08d6bd2..3430e24 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_customer.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* /** @@ -93,7 +93,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_customer + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustActivity.kt index 2bff498..159d51d 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_entrust.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* /** @@ -93,7 +93,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_entrust + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt index b105378..f9b1076 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_equipment.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* @@ -100,7 +100,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_equipment + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt index 6dba78b..0a8c595 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_global.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* class SearchGlobalActivity : ApplicationBaseActivity() { @@ -90,7 +90,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_global + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainActivity.kt index 56fda90..da94e79 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_meterage_train.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* /** @@ -93,7 +93,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_meterage_train + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt index 447c483..cebdace 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt @@ -119,29 +119,25 @@ if (param.isDigitsOnly()) { meterageTrainViewModel.getMeterageTrainList( "", "", "", "", param, "", - "", "", "", "jlglpxjhsp", arrayOf(), - pageIndex + "", "", "", arrayOf(), pageIndex ) } else { if (param.length < 4) { //输入参数长度小于4,默认查名称 meterageTrainViewModel.getMeterageTrainList( "", "", "", param, "", "", - "", "", "", "jlglpxjhsp", arrayOf(), - pageIndex + "", "", "", arrayOf(), pageIndex ) } else { if (AppMemoryCache.prefixCode.contains(param.substring(0, 4))) { meterageTrainViewModel.getMeterageTrainList( "", "", "", "", param, "", - "", "", "", "jlglpxjhsp", arrayOf(), - pageIndex + "", "", "", arrayOf(), pageIndex ) } else { meterageTrainViewModel.getMeterageTrainList( "", "", "", param, "", "", - "", "", "", "jlglpxjhsp", arrayOf(), - pageIndex + "", "", "", arrayOf(), pageIndex ) } } diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchStandardDeviceActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchStandardDeviceActivity.kt index cf96d0d..39b1388 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchStandardDeviceActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchStandardDeviceActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_standard_device.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* /** @@ -99,7 +99,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_standard_device + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/vm/ContractInvoiceViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/ContractInvoiceViewModel.kt new file mode 100644 index 0000000..99b5871 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/vm/ContractInvoiceViewModel.kt @@ -0,0 +1,66 @@ +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.ContractListModel +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 ContractInvoiceViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } + val contractList = MutableLiveData() + + fun getContractList( + customerId: String, + agreementKind: String, + agreementName: String, + agreementType: String, + agreementNo: String, + estimateSignStartDate: String, + estimateSignEndDate: String, + firstParty: String, + status: String, + ids: Array, + offset: Int + ) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.getContractList( + customerId, + agreementKind, + agreementName, + agreementType, + agreementNo, + estimateSignStartDate, + estimateSignEndDate, + firstParty, + status, + ids, + offset + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + contractList.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()) + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/vm/MeterageTrainViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/MeterageTrainViewModel.kt index b1bad75..43e4632 100644 --- a/app/src/main/java/com/casic/xz/meterage/vm/MeterageTrainViewModel.kt +++ b/app/src/main/java/com/casic/xz/meterage/vm/MeterageTrainViewModel.kt @@ -37,7 +37,6 @@ effectiveCompany: String, trainStartTime: String, trainEndTime: String, - formId: String, ids: Array, offset: Int ) = launch({ @@ -52,7 +51,6 @@ effectiveCompany, trainStartTime, trainEndTime, - formId, ids, offset ) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 9fc7c01..78d7828 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -71,6 +71,7 @@ + @@ -85,6 +86,8 @@ + + diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt index 71fe5a8..ad81434 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt @@ -170,7 +170,7 @@ "标准规范" -> requireContext().navigatePageTo() "能力列表" -> requireContext().navigatePageTo() "计量培训" -> requireContext().navigatePageTo() -// "合同发票" -> requireContext().navigatePageTo() + "合同发票" -> requireContext().navigatePageTo() // "业务统计" -> requireContext().navigatePageTo() "客户列表" -> requireContext().navigatePageTo() // "外场检测" -> requireContext().navigatePageTo() diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt index b47cb32..b12a0bf 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt @@ -184,7 +184,7 @@ requireContext().navigatePageTo() } - //TODO 未实现 + //TODO 通过接口修改数据库字段实现 pushSettingSwitch.setOnCheckedChangeListener { _, isChecked -> SaveKeyValues.putValue(LocaleConstant.PUSH_SETTING, isChecked) if (isChecked) { diff --git a/app/src/main/java/com/casic/xz/meterage/model/ContractListModel.java b/app/src/main/java/com/casic/xz/meterage/model/ContractListModel.java new file mode 100644 index 0000000..111ff52 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/model/ContractListModel.java @@ -0,0 +1,364 @@ +package com.casic.xz.meterage.model; + +import java.util.List; + +public class ContractListModel { + + 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 agreementAmount; + private String agreementEndDate; + private String agreementImportantContent; + private String agreementKind; + private String agreementKindName; + private String agreementName; + private String agreementNo; + private String agreementSource; + private String agreementSourceName; + private String agreementStartDate; + private String agreementType; + private String agreementTypeName; + private String approvalStatus; + private String createTime; + private String createUser; + private String createUserName; + private String customerId; + private String deptId; + private String deptName; + private String director; + private String estimateSignDate; + private String firstParty; + private String id; + private String isDel; + private String minioFileName; + private String orderIdList; + private String orderList; + private String paymentList; + private String processId; + private String remark; + private String secondParty; + private String status; + private String statusName; + private String updateTime; + + public String getAgreementAmount() { + return agreementAmount; + } + + public void setAgreementAmount(String agreementAmount) { + this.agreementAmount = agreementAmount; + } + + public String getAgreementEndDate() { + return agreementEndDate; + } + + public void setAgreementEndDate(String agreementEndDate) { + this.agreementEndDate = agreementEndDate; + } + + public String getAgreementImportantContent() { + return agreementImportantContent; + } + + public void setAgreementImportantContent(String agreementImportantContent) { + this.agreementImportantContent = agreementImportantContent; + } + + public String getAgreementKind() { + return agreementKind; + } + + public void setAgreementKind(String agreementKind) { + this.agreementKind = agreementKind; + } + + public String getAgreementKindName() { + return agreementKindName; + } + + public void setAgreementKindName(String agreementKindName) { + this.agreementKindName = agreementKindName; + } + + public String getAgreementName() { + return agreementName; + } + + public void setAgreementName(String agreementName) { + this.agreementName = agreementName; + } + + public String getAgreementNo() { + return agreementNo; + } + + public void setAgreementNo(String agreementNo) { + this.agreementNo = agreementNo; + } + + public String getAgreementSource() { + return agreementSource; + } + + public void setAgreementSource(String agreementSource) { + this.agreementSource = agreementSource; + } + + public String getAgreementSourceName() { + return agreementSourceName; + } + + public void setAgreementSourceName(String agreementSourceName) { + this.agreementSourceName = agreementSourceName; + } + + public String getAgreementStartDate() { + return agreementStartDate; + } + + public void setAgreementStartDate(String agreementStartDate) { + this.agreementStartDate = agreementStartDate; + } + + public String getAgreementType() { + return agreementType; + } + + public void setAgreementType(String agreementType) { + this.agreementType = agreementType; + } + + public String getAgreementTypeName() { + return agreementTypeName; + } + + public void setAgreementTypeName(String agreementTypeName) { + this.agreementTypeName = agreementTypeName; + } + + public String getApprovalStatus() { + return approvalStatus; + } + + public void setApprovalStatus(String approvalStatus) { + this.approvalStatus = approvalStatus; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getCreateUser() { + return createUser; + } + + public void setCreateUser(String createUser) { + this.createUser = createUser; + } + + public String getCreateUserName() { + return createUserName; + } + + public void setCreateUserName(String createUserName) { + this.createUserName = createUserName; + } + + public String getCustomerId() { + return customerId; + } + + public void setCustomerId(String customerId) { + this.customerId = customerId; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDirector() { + return director; + } + + public void setDirector(String director) { + this.director = director; + } + + public String getEstimateSignDate() { + return estimateSignDate; + } + + public void setEstimateSignDate(String estimateSignDate) { + this.estimateSignDate = estimateSignDate; + } + + public String getFirstParty() { + return firstParty; + } + + public void setFirstParty(String firstParty) { + this.firstParty = firstParty; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getIsDel() { + return isDel; + } + + public void setIsDel(String isDel) { + this.isDel = isDel; + } + + public String getMinioFileName() { + return minioFileName; + } + + public void setMinioFileName(String minioFileName) { + this.minioFileName = minioFileName; + } + + public String getOrderIdList() { + return orderIdList; + } + + public void setOrderIdList(String orderIdList) { + this.orderIdList = orderIdList; + } + + public String getOrderList() { + return orderList; + } + + public void setOrderList(String orderList) { + this.orderList = orderList; + } + + public String getPaymentList() { + return paymentList; + } + + public void setPaymentList(String paymentList) { + this.paymentList = paymentList; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + public String getSecondParty() { + return secondParty; + } + + public void setSecondParty(String secondParty) { + this.secondParty = secondParty; + } + + 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; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt index 85756b0..36059c5 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt @@ -65,4 +65,8 @@ const val USER_ID = "userId" const val PRIVACY_CHECK_BOX = "privacyCheckBox" const val PUSH_SETTING = "pushSetting" + const val METERAGE_TRAIN_FORM_ID = "jlglpxjhsp" + const val STANDARD_FILE_FORM_ID = "jlglwjsp" + const val CERTIFICATE_REPORT_FORM_ID = "ywglzsbg" + const val CONTRACT_FORM_ID = "cwczht" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt b/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt index da58079..99f3bb1 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt @@ -2,37 +2,42 @@ object SearchType { /** + * 首页模糊搜索 + * */ + const val All = "0" + + /** * 搜索仪器设备 * */ - const val Equipment = "0" + const val Equipment = "1" /** * 搜索标准装置 * */ - const val StandardDevice = "1" + const val StandardDevice = "2" /** * 搜索委托书需求 * */ - const val Entrust = "2" + const val Entrust = "3" /** * 搜索能力 * */ - const val Capability = "3" + const val Capability = "4" /** * 搜索计量培训 * */ - const val MeterageTrain = "4" + const val MeterageTrain = "5" /** * 搜索客户 * */ - const val Customer = "5" + const val Customer = "6" /** - * 首页模糊搜索 + * 搜索仪器设备 * */ - const val All = "6" + const val Contract = "7" } 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 3bd698a..bc4d694 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 @@ -446,4 +446,15 @@ @QueryMap limit: Map, @QueryMap offset: Map ): String + + /** + * 合同列表 + */ + @POST("/finance/agreement/listPage") + suspend fun getContractList( + @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 9e7556b..1aaabee 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 @@ -459,7 +459,6 @@ effectiveCompany: String, trainStartTime: String, trainEndTime: String, - formId: String, ids: Array, offset: Int ): String { @@ -473,7 +472,7 @@ param.addProperty("effectiveCompany", effectiveCompany) param.addProperty("trainStartTime", trainStartTime) param.addProperty("trainEndTime", trainEndTime) - param.addProperty("formId", formId) + param.addProperty("formId", LocaleConstant.METERAGE_TRAIN_FORM_ID) param.add("ids", gson.toJsonTree(ids, typeToken).asJsonArray) val requestBody = param.toString().toRequestBody( @@ -843,7 +842,7 @@ offset: Int ): String { val param = JsonObject() - param.addProperty("formId", "jlglwjsp") + param.addProperty("formId", LocaleConstant.STANDARD_FILE_FORM_ID) param.addProperty("fileType", fileType) param.addProperty("fileName", fileName) param.addProperty("fileNo", fileNo) @@ -884,7 +883,7 @@ offset: Int ): String { val param = JsonObject() - param.addProperty("formId", "ywglzsbg") + param.addProperty("formId", LocaleConstant.CERTIFICATE_REPORT_FORM_ID) param.addProperty("approvalStatus", approvalStatus) param.addProperty("certificateReportCode", certificateReportCode) param.addProperty("customerName", customerName) @@ -925,7 +924,7 @@ */ suspend fun submit(id: String): String { val param = JsonObject() - param.addProperty("formId", "ywglzsbg") + param.addProperty("formId", LocaleConstant.CERTIFICATE_REPORT_FORM_ID) param.addProperty("id", id) val requestBody = param.toString().toRequestBody( "application/json;charset=UTF-8".toMediaType() @@ -1009,4 +1008,47 @@ AuthenticationHelper.token!!, requestBody, limitMap, offsetMap ) } + + /** + * 合同列表 + */ + suspend fun getContractList( + customerId: String, + agreementKind: String, + agreementName: String, + agreementType: String, + agreementNo: String, + estimateSignStartDate: String, + estimateSignEndDate: String, + firstParty: String, + status: String, + ids: Array, + offset: Int + ): String { + val param = JsonObject() + param.addProperty("customerId", customerId) + param.addProperty("agreementKind", agreementKind) + param.addProperty("agreementName", agreementName) + param.addProperty("agreementType", agreementType) + param.addProperty("agreementNo", agreementNo) + param.addProperty("estimateSignStartDate", estimateSignStartDate) + param.addProperty("estimateSignEndDate", estimateSignEndDate) + param.addProperty("firstParty", firstParty) + param.addProperty("formId", LocaleConstant.CONTRACT_FORM_ID) + param.addProperty("status", status) + param.add("ids", gson.toJsonTree(ids, typeToken).asJsonArray) + + val requestBody = param.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + + val limitMap = HashMap() + limitMap["limit"] = LocaleConstant.PAGE_LIMIT + + val offsetMap = HashMap() + offsetMap["offset"] = offset + return api.getContractList( + AuthenticationHelper.token!!, requestBody, limitMap, offsetMap + ) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/ContractInvoiceActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/ContractInvoiceActivity.kt new file mode 100644 index 0000000..96148a3 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/home/ContractInvoiceActivity.kt @@ -0,0 +1,192 @@ +package com.casic.xz.meterage.view.home + +import android.content.Context +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration +import com.casic.xz.meterage.R +import com.casic.xz.meterage.base.ApplicationBaseActivity +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.model.ContractListModel +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.view.search.SearchContractActivity +import com.casic.xz.meterage.vm.ContractInvoiceViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +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_contract_invoice.* +import kotlinx.android.synthetic.main.include_empty_view.* +import kotlinx.android.synthetic.main.include_search_title.* + +class ContractInvoiceActivity : ApplicationBaseActivity() { + + private var context: Context = this@ContractInvoiceActivity + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var contractViewModel: ContractInvoiceViewModel + private lateinit var contractAdapter: NormalRecyclerAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.activity_contract_invoice + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "合同发票" + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + contractViewModel = ViewModelProvider(this)[ContractInvoiceViewModel::class.java] + contractViewModel.contractList.observe(this) { + if (it.code == 200) { + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + contractLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows) + contractLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023041001) + } + } + } + + override fun observeRequestState() { + contractViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + rightOperateView.setOnClickListener { + navigatePageTo() + } + + contractLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getContractListByPage() + } + + contractLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getContractListByPage() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + getContractListByPage() + } + + private fun getContractListByPage() { + contractViewModel.getContractList( + "", + "", + "", + "", + "", + "1", + "", + "", + "", + arrayOf(), + pageIndex + ) + } + + private val callback = Handler.Callback { + when (it.what) { + 2023041001 -> { + if (isRefresh || isLoadMore) { + contractAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无合同") { + pageIndex = 1 + getContractListByPage() + } + } else { + emptyView!!.hide() + contractAdapter = object : + NormalRecyclerAdapter( + R.layout.item_contract_rv_l, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, + position: Int, + item: ContractListModel.DataModel.RowsModel + ) { + viewHolder.setText(R.id.contractNameView, item.agreementName) + .setText(R.id.contractStateView, item.statusName) + .setText(R.id.contractCodeView, "合同编号:${item.agreementNo}") + .setText(R.id.firstPartNameView, "甲方单位:${item.firstParty}") + .setText( + R.id.startDateView, + "签订日期:${item.estimateSignDate.formatToYearMonthDay()}" + ) + + if (item.statusName.contains("已完成")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.green.convertColor(context) + ) + } else if (item.statusName.contains("未完成")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.red.convertColor(context) + ) + } else if (item.statusName.contains("已废止")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.gray.convertColor(context) + ) + } + } + } + contractRecyclerView.addItemDecoration( + DividerItemDecoration(this, DividerItemDecoration.VERTICAL) + ) + contractRecyclerView.adapter = contractAdapter + contractAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, t: ContractListModel.DataModel.RowsModel + ) { +// navigatePageTo(t.id) + } + }) + } + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt index 373c386..078f497 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt @@ -117,7 +117,6 @@ "", "", "", - "jlglpxjhsp", arrayOf(), pageIndex ) diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt index 16bcd38..92e256d 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_capability.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* /** @@ -93,7 +93,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_capability + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractActivity.kt new file mode 100644 index 0000000..17f6cda --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractActivity.kt @@ -0,0 +1,113 @@ +package com.casic.xz.meterage.view.search + +import android.view.LayoutInflater +import android.view.View +import com.casic.xz.meterage.R +import com.casic.xz.meterage.base.ApplicationBaseActivity +import com.casic.xz.meterage.bean.SearchHistoryBean +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.utils.DataBaseManager +import com.casic.xz.meterage.utils.SearchType +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton +import com.zhy.view.flowlayout.FlowLayout +import com.zhy.view.flowlayout.TagAdapter +import kotlinx.android.synthetic.main.activity_search_history.* +import kotlinx.android.synthetic.main.include_search_input_title.* + +/** + * 搜索合同 + * */ +class SearchContractActivity : ApplicationBaseActivity() { + + private lateinit var inflater: LayoutInflater + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var historyAdapter: TagAdapter + private var dataBeans: MutableList = ArrayList() + private var isRefresh = false + + override fun initLayoutView(): Int = R.layout.activity_search_history + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + inputView.hint = "请输入合同名称或者编号查询" + } + + override fun initData() { + inflater = LayoutInflater.from(this) + weakReferenceHandler = WeakReferenceHandler { + if (it.what == 2023041001) { + if (isRefresh) { + historyAdapter.notifyDataChanged() + } else { + historyAdapter = object : TagAdapter(dataBeans) { + override fun getView( + parent: FlowLayout?, position: Int, bean: SearchHistoryBean + ): View { + val tagView = inflater.inflate( + R.layout.item_search_rv_l, tagFlowLayout, false + ) as QMUIRoundButton + tagView.text = bean.keywords + return tagView + } + } + tagFlowLayout.adapter = historyAdapter + tagFlowLayout.setOnTagClickListener { _, position, _ -> + inputView.setText(dataBeans[position].keywords) + navigatePageTo(inputView.text.toString()) + true + } + } + } + true + } + } + + override fun onResume() { + super.onResume() + dataBeans = DataBaseManager.get.queryHistoryByType(SearchType.Contract) + weakReferenceHandler.sendEmptyMessage(2023041001) + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + searchTextView.setOnClickListener { + if (!inputView.text.isNullOrBlank()) { + DataBaseManager.get.addSearchHistory( + inputView.text.toString(), SearchType.Contract + ) + } + + navigatePageTo(inputView.text.toString()) + } + + deleteHistoryView.setOnClickListener { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("确定将所有搜索记录删除?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + + } + + override fun onConfirmClick() { + DataBaseManager.get.deleteHistoryByType(SearchType.Contract) + dataBeans.clear() + historyAdapter.notifyDataChanged() + } + }).build().show() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractResultActivity.kt new file mode 100644 index 0000000..5096b88 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractResultActivity.kt @@ -0,0 +1,210 @@ +package com.casic.xz.meterage.view.search + +import android.content.Context +import android.os.Handler +import androidx.core.text.isDigitsOnly +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration +import com.casic.xz.meterage.R +import com.casic.xz.meterage.base.ApplicationBaseActivity +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.model.ContractListModel +import com.casic.xz.meterage.utils.AppMemoryCache +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.vm.ContractInvoiceViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_search_contract_reasult.* +import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class SearchContractResultActivity : ApplicationBaseActivity() { + + private var context: Context = this@SearchContractResultActivity + private lateinit var param: String + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var contractViewModel: ContractInvoiceViewModel + private lateinit var contractAdapter: NormalRecyclerAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.activity_search_contract_reasult + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "查询结果" + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + getContractListByPage() + } + + override fun initData() { + param = intent.getStringExtra(Constant.INTENT_PARAM)!! + + weakReferenceHandler = WeakReferenceHandler(callback) + contractViewModel = ViewModelProvider(this)[ContractInvoiceViewModel::class.java] + contractViewModel.contractList.observe(this) { + if (it.code == 200) { + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + contractLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows) + contractLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023041002) + } + } + } + + override fun observeRequestState() { + contractViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + + contractLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getContractListByPage() + } + + contractLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getContractListByPage() + } + } + + private fun getContractListByPage() { + if (param.isDigitsOnly()) { + contractViewModel.getContractList( + "", "", "", "", param, + "1", "", "", "", arrayOf(), + pageIndex + ) + } else { + if (param.length < 4) { + //输入参数长度小于4,默认查名称 + contractViewModel.getContractList( + "", "", param, "", "", + "1", "", "", "", arrayOf(), + pageIndex + ) + } else { + if (AppMemoryCache.prefixCode.contains(param.substring(0, 4))) { + contractViewModel.getContractList( + "", "", "", "", param, + "1", "", "", "", arrayOf(), + pageIndex + ) + } else { + contractViewModel.getContractList( + "", "", param, "", "", + "1", "", "", "", arrayOf(), + pageIndex + ) + } + } + } + } + + private val callback = Handler.Callback { + when (it.what) { + 2023041002 -> { + if (isRefresh || isLoadMore) { + contractAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无合同") { + pageIndex = 1 + getContractListByPage() + } + } else { + emptyView!!.hide() + contractAdapter = object : + NormalRecyclerAdapter( + R.layout.item_contract_rv_l, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, + position: Int, + item: ContractListModel.DataModel.RowsModel + ) { + viewHolder.setText(R.id.contractNameView, item.agreementName) + .setText(R.id.contractStateView, item.statusName) + .setText(R.id.contractCodeView, "合同编号:${item.agreementNo}") + .setText(R.id.firstPartNameView, "甲方单位:${item.firstParty}") + .setText( + R.id.startDateView, + "签订日期:${item.estimateSignDate.formatToYearMonthDay()}" + ) + + if (item.statusName.contains("已完成")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.green.convertColor(context) + ) + } else if (item.statusName.contains("未完成")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.red.convertColor(context) + ) + } else if (item.statusName.contains("已废止")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.gray.convertColor(context) + ) + } + } + } + contractRecyclerView.addItemDecoration( + DividerItemDecoration(this, DividerItemDecoration.VERTICAL) + ) + contractRecyclerView.adapter = contractAdapter + contractAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, t: ContractListModel.DataModel.RowsModel + ) { +// navigatePageTo(t.id) + } + }) + } + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt index 08d6bd2..3430e24 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_customer.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* /** @@ -93,7 +93,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_customer + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustActivity.kt index 2bff498..159d51d 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_entrust.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* /** @@ -93,7 +93,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_entrust + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt index b105378..f9b1076 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_equipment.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* @@ -100,7 +100,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_equipment + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt index 6dba78b..0a8c595 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_global.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* class SearchGlobalActivity : ApplicationBaseActivity() { @@ -90,7 +90,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_global + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainActivity.kt index 56fda90..da94e79 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_meterage_train.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* /** @@ -93,7 +93,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_meterage_train + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt index 447c483..cebdace 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt @@ -119,29 +119,25 @@ if (param.isDigitsOnly()) { meterageTrainViewModel.getMeterageTrainList( "", "", "", "", param, "", - "", "", "", "jlglpxjhsp", arrayOf(), - pageIndex + "", "", "", arrayOf(), pageIndex ) } else { if (param.length < 4) { //输入参数长度小于4,默认查名称 meterageTrainViewModel.getMeterageTrainList( "", "", "", param, "", "", - "", "", "", "jlglpxjhsp", arrayOf(), - pageIndex + "", "", "", arrayOf(), pageIndex ) } else { if (AppMemoryCache.prefixCode.contains(param.substring(0, 4))) { meterageTrainViewModel.getMeterageTrainList( "", "", "", "", param, "", - "", "", "", "jlglpxjhsp", arrayOf(), - pageIndex + "", "", "", arrayOf(), pageIndex ) } else { meterageTrainViewModel.getMeterageTrainList( "", "", "", param, "", "", - "", "", "", "jlglpxjhsp", arrayOf(), - pageIndex + "", "", "", arrayOf(), pageIndex ) } } diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchStandardDeviceActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchStandardDeviceActivity.kt index cf96d0d..39b1388 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchStandardDeviceActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchStandardDeviceActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_standard_device.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* /** @@ -99,7 +99,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_standard_device + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/vm/ContractInvoiceViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/ContractInvoiceViewModel.kt new file mode 100644 index 0000000..99b5871 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/vm/ContractInvoiceViewModel.kt @@ -0,0 +1,66 @@ +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.ContractListModel +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 ContractInvoiceViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } + val contractList = MutableLiveData() + + fun getContractList( + customerId: String, + agreementKind: String, + agreementName: String, + agreementType: String, + agreementNo: String, + estimateSignStartDate: String, + estimateSignEndDate: String, + firstParty: String, + status: String, + ids: Array, + offset: Int + ) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.getContractList( + customerId, + agreementKind, + agreementName, + agreementType, + agreementNo, + estimateSignStartDate, + estimateSignEndDate, + firstParty, + status, + ids, + offset + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + contractList.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()) + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/vm/MeterageTrainViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/MeterageTrainViewModel.kt index b1bad75..43e4632 100644 --- a/app/src/main/java/com/casic/xz/meterage/vm/MeterageTrainViewModel.kt +++ b/app/src/main/java/com/casic/xz/meterage/vm/MeterageTrainViewModel.kt @@ -37,7 +37,6 @@ effectiveCompany: String, trainStartTime: String, trainEndTime: String, - formId: String, ids: Array, offset: Int ) = launch({ @@ -52,7 +51,6 @@ effectiveCompany, trainStartTime, trainEndTime, - formId, ids, offset ) diff --git a/app/src/main/res/layout/activity_contract_invoice.xml b/app/src/main/res/layout/activity_contract_invoice.xml new file mode 100644 index 0000000..a926c5b --- /dev/null +++ b/app/src/main/res/layout/activity_contract_invoice.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 9fc7c01..78d7828 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -71,6 +71,7 @@ + @@ -85,6 +86,8 @@ + + diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt index 71fe5a8..ad81434 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt @@ -170,7 +170,7 @@ "标准规范" -> requireContext().navigatePageTo() "能力列表" -> requireContext().navigatePageTo() "计量培训" -> requireContext().navigatePageTo() -// "合同发票" -> requireContext().navigatePageTo() + "合同发票" -> requireContext().navigatePageTo() // "业务统计" -> requireContext().navigatePageTo() "客户列表" -> requireContext().navigatePageTo() // "外场检测" -> requireContext().navigatePageTo() diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt index b47cb32..b12a0bf 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt @@ -184,7 +184,7 @@ requireContext().navigatePageTo() } - //TODO 未实现 + //TODO 通过接口修改数据库字段实现 pushSettingSwitch.setOnCheckedChangeListener { _, isChecked -> SaveKeyValues.putValue(LocaleConstant.PUSH_SETTING, isChecked) if (isChecked) { diff --git a/app/src/main/java/com/casic/xz/meterage/model/ContractListModel.java b/app/src/main/java/com/casic/xz/meterage/model/ContractListModel.java new file mode 100644 index 0000000..111ff52 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/model/ContractListModel.java @@ -0,0 +1,364 @@ +package com.casic.xz.meterage.model; + +import java.util.List; + +public class ContractListModel { + + 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 agreementAmount; + private String agreementEndDate; + private String agreementImportantContent; + private String agreementKind; + private String agreementKindName; + private String agreementName; + private String agreementNo; + private String agreementSource; + private String agreementSourceName; + private String agreementStartDate; + private String agreementType; + private String agreementTypeName; + private String approvalStatus; + private String createTime; + private String createUser; + private String createUserName; + private String customerId; + private String deptId; + private String deptName; + private String director; + private String estimateSignDate; + private String firstParty; + private String id; + private String isDel; + private String minioFileName; + private String orderIdList; + private String orderList; + private String paymentList; + private String processId; + private String remark; + private String secondParty; + private String status; + private String statusName; + private String updateTime; + + public String getAgreementAmount() { + return agreementAmount; + } + + public void setAgreementAmount(String agreementAmount) { + this.agreementAmount = agreementAmount; + } + + public String getAgreementEndDate() { + return agreementEndDate; + } + + public void setAgreementEndDate(String agreementEndDate) { + this.agreementEndDate = agreementEndDate; + } + + public String getAgreementImportantContent() { + return agreementImportantContent; + } + + public void setAgreementImportantContent(String agreementImportantContent) { + this.agreementImportantContent = agreementImportantContent; + } + + public String getAgreementKind() { + return agreementKind; + } + + public void setAgreementKind(String agreementKind) { + this.agreementKind = agreementKind; + } + + public String getAgreementKindName() { + return agreementKindName; + } + + public void setAgreementKindName(String agreementKindName) { + this.agreementKindName = agreementKindName; + } + + public String getAgreementName() { + return agreementName; + } + + public void setAgreementName(String agreementName) { + this.agreementName = agreementName; + } + + public String getAgreementNo() { + return agreementNo; + } + + public void setAgreementNo(String agreementNo) { + this.agreementNo = agreementNo; + } + + public String getAgreementSource() { + return agreementSource; + } + + public void setAgreementSource(String agreementSource) { + this.agreementSource = agreementSource; + } + + public String getAgreementSourceName() { + return agreementSourceName; + } + + public void setAgreementSourceName(String agreementSourceName) { + this.agreementSourceName = agreementSourceName; + } + + public String getAgreementStartDate() { + return agreementStartDate; + } + + public void setAgreementStartDate(String agreementStartDate) { + this.agreementStartDate = agreementStartDate; + } + + public String getAgreementType() { + return agreementType; + } + + public void setAgreementType(String agreementType) { + this.agreementType = agreementType; + } + + public String getAgreementTypeName() { + return agreementTypeName; + } + + public void setAgreementTypeName(String agreementTypeName) { + this.agreementTypeName = agreementTypeName; + } + + public String getApprovalStatus() { + return approvalStatus; + } + + public void setApprovalStatus(String approvalStatus) { + this.approvalStatus = approvalStatus; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getCreateUser() { + return createUser; + } + + public void setCreateUser(String createUser) { + this.createUser = createUser; + } + + public String getCreateUserName() { + return createUserName; + } + + public void setCreateUserName(String createUserName) { + this.createUserName = createUserName; + } + + public String getCustomerId() { + return customerId; + } + + public void setCustomerId(String customerId) { + this.customerId = customerId; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDirector() { + return director; + } + + public void setDirector(String director) { + this.director = director; + } + + public String getEstimateSignDate() { + return estimateSignDate; + } + + public void setEstimateSignDate(String estimateSignDate) { + this.estimateSignDate = estimateSignDate; + } + + public String getFirstParty() { + return firstParty; + } + + public void setFirstParty(String firstParty) { + this.firstParty = firstParty; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getIsDel() { + return isDel; + } + + public void setIsDel(String isDel) { + this.isDel = isDel; + } + + public String getMinioFileName() { + return minioFileName; + } + + public void setMinioFileName(String minioFileName) { + this.minioFileName = minioFileName; + } + + public String getOrderIdList() { + return orderIdList; + } + + public void setOrderIdList(String orderIdList) { + this.orderIdList = orderIdList; + } + + public String getOrderList() { + return orderList; + } + + public void setOrderList(String orderList) { + this.orderList = orderList; + } + + public String getPaymentList() { + return paymentList; + } + + public void setPaymentList(String paymentList) { + this.paymentList = paymentList; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + public String getSecondParty() { + return secondParty; + } + + public void setSecondParty(String secondParty) { + this.secondParty = secondParty; + } + + 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; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt index 85756b0..36059c5 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt @@ -65,4 +65,8 @@ const val USER_ID = "userId" const val PRIVACY_CHECK_BOX = "privacyCheckBox" const val PUSH_SETTING = "pushSetting" + const val METERAGE_TRAIN_FORM_ID = "jlglpxjhsp" + const val STANDARD_FILE_FORM_ID = "jlglwjsp" + const val CERTIFICATE_REPORT_FORM_ID = "ywglzsbg" + const val CONTRACT_FORM_ID = "cwczht" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt b/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt index da58079..99f3bb1 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt @@ -2,37 +2,42 @@ object SearchType { /** + * 首页模糊搜索 + * */ + const val All = "0" + + /** * 搜索仪器设备 * */ - const val Equipment = "0" + const val Equipment = "1" /** * 搜索标准装置 * */ - const val StandardDevice = "1" + const val StandardDevice = "2" /** * 搜索委托书需求 * */ - const val Entrust = "2" + const val Entrust = "3" /** * 搜索能力 * */ - const val Capability = "3" + const val Capability = "4" /** * 搜索计量培训 * */ - const val MeterageTrain = "4" + const val MeterageTrain = "5" /** * 搜索客户 * */ - const val Customer = "5" + const val Customer = "6" /** - * 首页模糊搜索 + * 搜索仪器设备 * */ - const val All = "6" + const val Contract = "7" } 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 3bd698a..bc4d694 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 @@ -446,4 +446,15 @@ @QueryMap limit: Map, @QueryMap offset: Map ): String + + /** + * 合同列表 + */ + @POST("/finance/agreement/listPage") + suspend fun getContractList( + @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 9e7556b..1aaabee 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 @@ -459,7 +459,6 @@ effectiveCompany: String, trainStartTime: String, trainEndTime: String, - formId: String, ids: Array, offset: Int ): String { @@ -473,7 +472,7 @@ param.addProperty("effectiveCompany", effectiveCompany) param.addProperty("trainStartTime", trainStartTime) param.addProperty("trainEndTime", trainEndTime) - param.addProperty("formId", formId) + param.addProperty("formId", LocaleConstant.METERAGE_TRAIN_FORM_ID) param.add("ids", gson.toJsonTree(ids, typeToken).asJsonArray) val requestBody = param.toString().toRequestBody( @@ -843,7 +842,7 @@ offset: Int ): String { val param = JsonObject() - param.addProperty("formId", "jlglwjsp") + param.addProperty("formId", LocaleConstant.STANDARD_FILE_FORM_ID) param.addProperty("fileType", fileType) param.addProperty("fileName", fileName) param.addProperty("fileNo", fileNo) @@ -884,7 +883,7 @@ offset: Int ): String { val param = JsonObject() - param.addProperty("formId", "ywglzsbg") + param.addProperty("formId", LocaleConstant.CERTIFICATE_REPORT_FORM_ID) param.addProperty("approvalStatus", approvalStatus) param.addProperty("certificateReportCode", certificateReportCode) param.addProperty("customerName", customerName) @@ -925,7 +924,7 @@ */ suspend fun submit(id: String): String { val param = JsonObject() - param.addProperty("formId", "ywglzsbg") + param.addProperty("formId", LocaleConstant.CERTIFICATE_REPORT_FORM_ID) param.addProperty("id", id) val requestBody = param.toString().toRequestBody( "application/json;charset=UTF-8".toMediaType() @@ -1009,4 +1008,47 @@ AuthenticationHelper.token!!, requestBody, limitMap, offsetMap ) } + + /** + * 合同列表 + */ + suspend fun getContractList( + customerId: String, + agreementKind: String, + agreementName: String, + agreementType: String, + agreementNo: String, + estimateSignStartDate: String, + estimateSignEndDate: String, + firstParty: String, + status: String, + ids: Array, + offset: Int + ): String { + val param = JsonObject() + param.addProperty("customerId", customerId) + param.addProperty("agreementKind", agreementKind) + param.addProperty("agreementName", agreementName) + param.addProperty("agreementType", agreementType) + param.addProperty("agreementNo", agreementNo) + param.addProperty("estimateSignStartDate", estimateSignStartDate) + param.addProperty("estimateSignEndDate", estimateSignEndDate) + param.addProperty("firstParty", firstParty) + param.addProperty("formId", LocaleConstant.CONTRACT_FORM_ID) + param.addProperty("status", status) + param.add("ids", gson.toJsonTree(ids, typeToken).asJsonArray) + + val requestBody = param.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + + val limitMap = HashMap() + limitMap["limit"] = LocaleConstant.PAGE_LIMIT + + val offsetMap = HashMap() + offsetMap["offset"] = offset + return api.getContractList( + AuthenticationHelper.token!!, requestBody, limitMap, offsetMap + ) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/ContractInvoiceActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/ContractInvoiceActivity.kt new file mode 100644 index 0000000..96148a3 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/home/ContractInvoiceActivity.kt @@ -0,0 +1,192 @@ +package com.casic.xz.meterage.view.home + +import android.content.Context +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration +import com.casic.xz.meterage.R +import com.casic.xz.meterage.base.ApplicationBaseActivity +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.model.ContractListModel +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.view.search.SearchContractActivity +import com.casic.xz.meterage.vm.ContractInvoiceViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +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_contract_invoice.* +import kotlinx.android.synthetic.main.include_empty_view.* +import kotlinx.android.synthetic.main.include_search_title.* + +class ContractInvoiceActivity : ApplicationBaseActivity() { + + private var context: Context = this@ContractInvoiceActivity + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var contractViewModel: ContractInvoiceViewModel + private lateinit var contractAdapter: NormalRecyclerAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.activity_contract_invoice + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "合同发票" + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + contractViewModel = ViewModelProvider(this)[ContractInvoiceViewModel::class.java] + contractViewModel.contractList.observe(this) { + if (it.code == 200) { + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + contractLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows) + contractLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023041001) + } + } + } + + override fun observeRequestState() { + contractViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + rightOperateView.setOnClickListener { + navigatePageTo() + } + + contractLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getContractListByPage() + } + + contractLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getContractListByPage() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + getContractListByPage() + } + + private fun getContractListByPage() { + contractViewModel.getContractList( + "", + "", + "", + "", + "", + "1", + "", + "", + "", + arrayOf(), + pageIndex + ) + } + + private val callback = Handler.Callback { + when (it.what) { + 2023041001 -> { + if (isRefresh || isLoadMore) { + contractAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无合同") { + pageIndex = 1 + getContractListByPage() + } + } else { + emptyView!!.hide() + contractAdapter = object : + NormalRecyclerAdapter( + R.layout.item_contract_rv_l, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, + position: Int, + item: ContractListModel.DataModel.RowsModel + ) { + viewHolder.setText(R.id.contractNameView, item.agreementName) + .setText(R.id.contractStateView, item.statusName) + .setText(R.id.contractCodeView, "合同编号:${item.agreementNo}") + .setText(R.id.firstPartNameView, "甲方单位:${item.firstParty}") + .setText( + R.id.startDateView, + "签订日期:${item.estimateSignDate.formatToYearMonthDay()}" + ) + + if (item.statusName.contains("已完成")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.green.convertColor(context) + ) + } else if (item.statusName.contains("未完成")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.red.convertColor(context) + ) + } else if (item.statusName.contains("已废止")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.gray.convertColor(context) + ) + } + } + } + contractRecyclerView.addItemDecoration( + DividerItemDecoration(this, DividerItemDecoration.VERTICAL) + ) + contractRecyclerView.adapter = contractAdapter + contractAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, t: ContractListModel.DataModel.RowsModel + ) { +// navigatePageTo(t.id) + } + }) + } + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt index 373c386..078f497 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt @@ -117,7 +117,6 @@ "", "", "", - "jlglpxjhsp", arrayOf(), pageIndex ) diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt index 16bcd38..92e256d 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_capability.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* /** @@ -93,7 +93,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_capability + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractActivity.kt new file mode 100644 index 0000000..17f6cda --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractActivity.kt @@ -0,0 +1,113 @@ +package com.casic.xz.meterage.view.search + +import android.view.LayoutInflater +import android.view.View +import com.casic.xz.meterage.R +import com.casic.xz.meterage.base.ApplicationBaseActivity +import com.casic.xz.meterage.bean.SearchHistoryBean +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.utils.DataBaseManager +import com.casic.xz.meterage.utils.SearchType +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton +import com.zhy.view.flowlayout.FlowLayout +import com.zhy.view.flowlayout.TagAdapter +import kotlinx.android.synthetic.main.activity_search_history.* +import kotlinx.android.synthetic.main.include_search_input_title.* + +/** + * 搜索合同 + * */ +class SearchContractActivity : ApplicationBaseActivity() { + + private lateinit var inflater: LayoutInflater + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var historyAdapter: TagAdapter + private var dataBeans: MutableList = ArrayList() + private var isRefresh = false + + override fun initLayoutView(): Int = R.layout.activity_search_history + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + inputView.hint = "请输入合同名称或者编号查询" + } + + override fun initData() { + inflater = LayoutInflater.from(this) + weakReferenceHandler = WeakReferenceHandler { + if (it.what == 2023041001) { + if (isRefresh) { + historyAdapter.notifyDataChanged() + } else { + historyAdapter = object : TagAdapter(dataBeans) { + override fun getView( + parent: FlowLayout?, position: Int, bean: SearchHistoryBean + ): View { + val tagView = inflater.inflate( + R.layout.item_search_rv_l, tagFlowLayout, false + ) as QMUIRoundButton + tagView.text = bean.keywords + return tagView + } + } + tagFlowLayout.adapter = historyAdapter + tagFlowLayout.setOnTagClickListener { _, position, _ -> + inputView.setText(dataBeans[position].keywords) + navigatePageTo(inputView.text.toString()) + true + } + } + } + true + } + } + + override fun onResume() { + super.onResume() + dataBeans = DataBaseManager.get.queryHistoryByType(SearchType.Contract) + weakReferenceHandler.sendEmptyMessage(2023041001) + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + searchTextView.setOnClickListener { + if (!inputView.text.isNullOrBlank()) { + DataBaseManager.get.addSearchHistory( + inputView.text.toString(), SearchType.Contract + ) + } + + navigatePageTo(inputView.text.toString()) + } + + deleteHistoryView.setOnClickListener { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("确定将所有搜索记录删除?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + + } + + override fun onConfirmClick() { + DataBaseManager.get.deleteHistoryByType(SearchType.Contract) + dataBeans.clear() + historyAdapter.notifyDataChanged() + } + }).build().show() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractResultActivity.kt new file mode 100644 index 0000000..5096b88 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractResultActivity.kt @@ -0,0 +1,210 @@ +package com.casic.xz.meterage.view.search + +import android.content.Context +import android.os.Handler +import androidx.core.text.isDigitsOnly +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration +import com.casic.xz.meterage.R +import com.casic.xz.meterage.base.ApplicationBaseActivity +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.model.ContractListModel +import com.casic.xz.meterage.utils.AppMemoryCache +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.vm.ContractInvoiceViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_search_contract_reasult.* +import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class SearchContractResultActivity : ApplicationBaseActivity() { + + private var context: Context = this@SearchContractResultActivity + private lateinit var param: String + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var contractViewModel: ContractInvoiceViewModel + private lateinit var contractAdapter: NormalRecyclerAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.activity_search_contract_reasult + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "查询结果" + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + getContractListByPage() + } + + override fun initData() { + param = intent.getStringExtra(Constant.INTENT_PARAM)!! + + weakReferenceHandler = WeakReferenceHandler(callback) + contractViewModel = ViewModelProvider(this)[ContractInvoiceViewModel::class.java] + contractViewModel.contractList.observe(this) { + if (it.code == 200) { + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + contractLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows) + contractLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023041002) + } + } + } + + override fun observeRequestState() { + contractViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + + contractLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getContractListByPage() + } + + contractLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getContractListByPage() + } + } + + private fun getContractListByPage() { + if (param.isDigitsOnly()) { + contractViewModel.getContractList( + "", "", "", "", param, + "1", "", "", "", arrayOf(), + pageIndex + ) + } else { + if (param.length < 4) { + //输入参数长度小于4,默认查名称 + contractViewModel.getContractList( + "", "", param, "", "", + "1", "", "", "", arrayOf(), + pageIndex + ) + } else { + if (AppMemoryCache.prefixCode.contains(param.substring(0, 4))) { + contractViewModel.getContractList( + "", "", "", "", param, + "1", "", "", "", arrayOf(), + pageIndex + ) + } else { + contractViewModel.getContractList( + "", "", param, "", "", + "1", "", "", "", arrayOf(), + pageIndex + ) + } + } + } + } + + private val callback = Handler.Callback { + when (it.what) { + 2023041002 -> { + if (isRefresh || isLoadMore) { + contractAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无合同") { + pageIndex = 1 + getContractListByPage() + } + } else { + emptyView!!.hide() + contractAdapter = object : + NormalRecyclerAdapter( + R.layout.item_contract_rv_l, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, + position: Int, + item: ContractListModel.DataModel.RowsModel + ) { + viewHolder.setText(R.id.contractNameView, item.agreementName) + .setText(R.id.contractStateView, item.statusName) + .setText(R.id.contractCodeView, "合同编号:${item.agreementNo}") + .setText(R.id.firstPartNameView, "甲方单位:${item.firstParty}") + .setText( + R.id.startDateView, + "签订日期:${item.estimateSignDate.formatToYearMonthDay()}" + ) + + if (item.statusName.contains("已完成")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.green.convertColor(context) + ) + } else if (item.statusName.contains("未完成")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.red.convertColor(context) + ) + } else if (item.statusName.contains("已废止")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.gray.convertColor(context) + ) + } + } + } + contractRecyclerView.addItemDecoration( + DividerItemDecoration(this, DividerItemDecoration.VERTICAL) + ) + contractRecyclerView.adapter = contractAdapter + contractAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, t: ContractListModel.DataModel.RowsModel + ) { +// navigatePageTo(t.id) + } + }) + } + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt index 08d6bd2..3430e24 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_customer.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* /** @@ -93,7 +93,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_customer + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustActivity.kt index 2bff498..159d51d 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_entrust.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* /** @@ -93,7 +93,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_entrust + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt index b105378..f9b1076 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_equipment.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* @@ -100,7 +100,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_equipment + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt index 6dba78b..0a8c595 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_global.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* class SearchGlobalActivity : ApplicationBaseActivity() { @@ -90,7 +90,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_global + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainActivity.kt index 56fda90..da94e79 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_meterage_train.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* /** @@ -93,7 +93,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_meterage_train + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt index 447c483..cebdace 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt @@ -119,29 +119,25 @@ if (param.isDigitsOnly()) { meterageTrainViewModel.getMeterageTrainList( "", "", "", "", param, "", - "", "", "", "jlglpxjhsp", arrayOf(), - pageIndex + "", "", "", arrayOf(), pageIndex ) } else { if (param.length < 4) { //输入参数长度小于4,默认查名称 meterageTrainViewModel.getMeterageTrainList( "", "", "", param, "", "", - "", "", "", "jlglpxjhsp", arrayOf(), - pageIndex + "", "", "", arrayOf(), pageIndex ) } else { if (AppMemoryCache.prefixCode.contains(param.substring(0, 4))) { meterageTrainViewModel.getMeterageTrainList( "", "", "", "", param, "", - "", "", "", "jlglpxjhsp", arrayOf(), - pageIndex + "", "", "", arrayOf(), pageIndex ) } else { meterageTrainViewModel.getMeterageTrainList( "", "", "", param, "", "", - "", "", "", "jlglpxjhsp", arrayOf(), - pageIndex + "", "", "", arrayOf(), pageIndex ) } } diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchStandardDeviceActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchStandardDeviceActivity.kt index cf96d0d..39b1388 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchStandardDeviceActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchStandardDeviceActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_standard_device.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* /** @@ -99,7 +99,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_standard_device + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/vm/ContractInvoiceViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/ContractInvoiceViewModel.kt new file mode 100644 index 0000000..99b5871 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/vm/ContractInvoiceViewModel.kt @@ -0,0 +1,66 @@ +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.ContractListModel +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 ContractInvoiceViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } + val contractList = MutableLiveData() + + fun getContractList( + customerId: String, + agreementKind: String, + agreementName: String, + agreementType: String, + agreementNo: String, + estimateSignStartDate: String, + estimateSignEndDate: String, + firstParty: String, + status: String, + ids: Array, + offset: Int + ) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.getContractList( + customerId, + agreementKind, + agreementName, + agreementType, + agreementNo, + estimateSignStartDate, + estimateSignEndDate, + firstParty, + status, + ids, + offset + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + contractList.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()) + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/vm/MeterageTrainViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/MeterageTrainViewModel.kt index b1bad75..43e4632 100644 --- a/app/src/main/java/com/casic/xz/meterage/vm/MeterageTrainViewModel.kt +++ b/app/src/main/java/com/casic/xz/meterage/vm/MeterageTrainViewModel.kt @@ -37,7 +37,6 @@ effectiveCompany: String, trainStartTime: String, trainEndTime: String, - formId: String, ids: Array, offset: Int ) = launch({ @@ -52,7 +51,6 @@ effectiveCompany, trainStartTime, trainEndTime, - formId, ids, offset ) diff --git a/app/src/main/res/layout/activity_contract_invoice.xml b/app/src/main/res/layout/activity_contract_invoice.xml new file mode 100644 index 0000000..a926c5b --- /dev/null +++ b/app/src/main/res/layout/activity_contract_invoice.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_search_capability.xml b/app/src/main/res/layout/activity_search_capability.xml deleted file mode 100644 index 93ed590..0000000 --- a/app/src/main/res/layout/activity_search_capability.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 9fc7c01..78d7828 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -71,6 +71,7 @@ + @@ -85,6 +86,8 @@ + + diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt index 71fe5a8..ad81434 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt @@ -170,7 +170,7 @@ "标准规范" -> requireContext().navigatePageTo() "能力列表" -> requireContext().navigatePageTo() "计量培训" -> requireContext().navigatePageTo() -// "合同发票" -> requireContext().navigatePageTo() + "合同发票" -> requireContext().navigatePageTo() // "业务统计" -> requireContext().navigatePageTo() "客户列表" -> requireContext().navigatePageTo() // "外场检测" -> requireContext().navigatePageTo() diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt index b47cb32..b12a0bf 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt @@ -184,7 +184,7 @@ requireContext().navigatePageTo() } - //TODO 未实现 + //TODO 通过接口修改数据库字段实现 pushSettingSwitch.setOnCheckedChangeListener { _, isChecked -> SaveKeyValues.putValue(LocaleConstant.PUSH_SETTING, isChecked) if (isChecked) { diff --git a/app/src/main/java/com/casic/xz/meterage/model/ContractListModel.java b/app/src/main/java/com/casic/xz/meterage/model/ContractListModel.java new file mode 100644 index 0000000..111ff52 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/model/ContractListModel.java @@ -0,0 +1,364 @@ +package com.casic.xz.meterage.model; + +import java.util.List; + +public class ContractListModel { + + 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 agreementAmount; + private String agreementEndDate; + private String agreementImportantContent; + private String agreementKind; + private String agreementKindName; + private String agreementName; + private String agreementNo; + private String agreementSource; + private String agreementSourceName; + private String agreementStartDate; + private String agreementType; + private String agreementTypeName; + private String approvalStatus; + private String createTime; + private String createUser; + private String createUserName; + private String customerId; + private String deptId; + private String deptName; + private String director; + private String estimateSignDate; + private String firstParty; + private String id; + private String isDel; + private String minioFileName; + private String orderIdList; + private String orderList; + private String paymentList; + private String processId; + private String remark; + private String secondParty; + private String status; + private String statusName; + private String updateTime; + + public String getAgreementAmount() { + return agreementAmount; + } + + public void setAgreementAmount(String agreementAmount) { + this.agreementAmount = agreementAmount; + } + + public String getAgreementEndDate() { + return agreementEndDate; + } + + public void setAgreementEndDate(String agreementEndDate) { + this.agreementEndDate = agreementEndDate; + } + + public String getAgreementImportantContent() { + return agreementImportantContent; + } + + public void setAgreementImportantContent(String agreementImportantContent) { + this.agreementImportantContent = agreementImportantContent; + } + + public String getAgreementKind() { + return agreementKind; + } + + public void setAgreementKind(String agreementKind) { + this.agreementKind = agreementKind; + } + + public String getAgreementKindName() { + return agreementKindName; + } + + public void setAgreementKindName(String agreementKindName) { + this.agreementKindName = agreementKindName; + } + + public String getAgreementName() { + return agreementName; + } + + public void setAgreementName(String agreementName) { + this.agreementName = agreementName; + } + + public String getAgreementNo() { + return agreementNo; + } + + public void setAgreementNo(String agreementNo) { + this.agreementNo = agreementNo; + } + + public String getAgreementSource() { + return agreementSource; + } + + public void setAgreementSource(String agreementSource) { + this.agreementSource = agreementSource; + } + + public String getAgreementSourceName() { + return agreementSourceName; + } + + public void setAgreementSourceName(String agreementSourceName) { + this.agreementSourceName = agreementSourceName; + } + + public String getAgreementStartDate() { + return agreementStartDate; + } + + public void setAgreementStartDate(String agreementStartDate) { + this.agreementStartDate = agreementStartDate; + } + + public String getAgreementType() { + return agreementType; + } + + public void setAgreementType(String agreementType) { + this.agreementType = agreementType; + } + + public String getAgreementTypeName() { + return agreementTypeName; + } + + public void setAgreementTypeName(String agreementTypeName) { + this.agreementTypeName = agreementTypeName; + } + + public String getApprovalStatus() { + return approvalStatus; + } + + public void setApprovalStatus(String approvalStatus) { + this.approvalStatus = approvalStatus; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getCreateUser() { + return createUser; + } + + public void setCreateUser(String createUser) { + this.createUser = createUser; + } + + public String getCreateUserName() { + return createUserName; + } + + public void setCreateUserName(String createUserName) { + this.createUserName = createUserName; + } + + public String getCustomerId() { + return customerId; + } + + public void setCustomerId(String customerId) { + this.customerId = customerId; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDirector() { + return director; + } + + public void setDirector(String director) { + this.director = director; + } + + public String getEstimateSignDate() { + return estimateSignDate; + } + + public void setEstimateSignDate(String estimateSignDate) { + this.estimateSignDate = estimateSignDate; + } + + public String getFirstParty() { + return firstParty; + } + + public void setFirstParty(String firstParty) { + this.firstParty = firstParty; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getIsDel() { + return isDel; + } + + public void setIsDel(String isDel) { + this.isDel = isDel; + } + + public String getMinioFileName() { + return minioFileName; + } + + public void setMinioFileName(String minioFileName) { + this.minioFileName = minioFileName; + } + + public String getOrderIdList() { + return orderIdList; + } + + public void setOrderIdList(String orderIdList) { + this.orderIdList = orderIdList; + } + + public String getOrderList() { + return orderList; + } + + public void setOrderList(String orderList) { + this.orderList = orderList; + } + + public String getPaymentList() { + return paymentList; + } + + public void setPaymentList(String paymentList) { + this.paymentList = paymentList; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + public String getSecondParty() { + return secondParty; + } + + public void setSecondParty(String secondParty) { + this.secondParty = secondParty; + } + + 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; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt index 85756b0..36059c5 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt @@ -65,4 +65,8 @@ const val USER_ID = "userId" const val PRIVACY_CHECK_BOX = "privacyCheckBox" const val PUSH_SETTING = "pushSetting" + const val METERAGE_TRAIN_FORM_ID = "jlglpxjhsp" + const val STANDARD_FILE_FORM_ID = "jlglwjsp" + const val CERTIFICATE_REPORT_FORM_ID = "ywglzsbg" + const val CONTRACT_FORM_ID = "cwczht" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt b/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt index da58079..99f3bb1 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt @@ -2,37 +2,42 @@ object SearchType { /** + * 首页模糊搜索 + * */ + const val All = "0" + + /** * 搜索仪器设备 * */ - const val Equipment = "0" + const val Equipment = "1" /** * 搜索标准装置 * */ - const val StandardDevice = "1" + const val StandardDevice = "2" /** * 搜索委托书需求 * */ - const val Entrust = "2" + const val Entrust = "3" /** * 搜索能力 * */ - const val Capability = "3" + const val Capability = "4" /** * 搜索计量培训 * */ - const val MeterageTrain = "4" + const val MeterageTrain = "5" /** * 搜索客户 * */ - const val Customer = "5" + const val Customer = "6" /** - * 首页模糊搜索 + * 搜索仪器设备 * */ - const val All = "6" + const val Contract = "7" } 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 3bd698a..bc4d694 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 @@ -446,4 +446,15 @@ @QueryMap limit: Map, @QueryMap offset: Map ): String + + /** + * 合同列表 + */ + @POST("/finance/agreement/listPage") + suspend fun getContractList( + @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 9e7556b..1aaabee 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 @@ -459,7 +459,6 @@ effectiveCompany: String, trainStartTime: String, trainEndTime: String, - formId: String, ids: Array, offset: Int ): String { @@ -473,7 +472,7 @@ param.addProperty("effectiveCompany", effectiveCompany) param.addProperty("trainStartTime", trainStartTime) param.addProperty("trainEndTime", trainEndTime) - param.addProperty("formId", formId) + param.addProperty("formId", LocaleConstant.METERAGE_TRAIN_FORM_ID) param.add("ids", gson.toJsonTree(ids, typeToken).asJsonArray) val requestBody = param.toString().toRequestBody( @@ -843,7 +842,7 @@ offset: Int ): String { val param = JsonObject() - param.addProperty("formId", "jlglwjsp") + param.addProperty("formId", LocaleConstant.STANDARD_FILE_FORM_ID) param.addProperty("fileType", fileType) param.addProperty("fileName", fileName) param.addProperty("fileNo", fileNo) @@ -884,7 +883,7 @@ offset: Int ): String { val param = JsonObject() - param.addProperty("formId", "ywglzsbg") + param.addProperty("formId", LocaleConstant.CERTIFICATE_REPORT_FORM_ID) param.addProperty("approvalStatus", approvalStatus) param.addProperty("certificateReportCode", certificateReportCode) param.addProperty("customerName", customerName) @@ -925,7 +924,7 @@ */ suspend fun submit(id: String): String { val param = JsonObject() - param.addProperty("formId", "ywglzsbg") + param.addProperty("formId", LocaleConstant.CERTIFICATE_REPORT_FORM_ID) param.addProperty("id", id) val requestBody = param.toString().toRequestBody( "application/json;charset=UTF-8".toMediaType() @@ -1009,4 +1008,47 @@ AuthenticationHelper.token!!, requestBody, limitMap, offsetMap ) } + + /** + * 合同列表 + */ + suspend fun getContractList( + customerId: String, + agreementKind: String, + agreementName: String, + agreementType: String, + agreementNo: String, + estimateSignStartDate: String, + estimateSignEndDate: String, + firstParty: String, + status: String, + ids: Array, + offset: Int + ): String { + val param = JsonObject() + param.addProperty("customerId", customerId) + param.addProperty("agreementKind", agreementKind) + param.addProperty("agreementName", agreementName) + param.addProperty("agreementType", agreementType) + param.addProperty("agreementNo", agreementNo) + param.addProperty("estimateSignStartDate", estimateSignStartDate) + param.addProperty("estimateSignEndDate", estimateSignEndDate) + param.addProperty("firstParty", firstParty) + param.addProperty("formId", LocaleConstant.CONTRACT_FORM_ID) + param.addProperty("status", status) + param.add("ids", gson.toJsonTree(ids, typeToken).asJsonArray) + + val requestBody = param.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + + val limitMap = HashMap() + limitMap["limit"] = LocaleConstant.PAGE_LIMIT + + val offsetMap = HashMap() + offsetMap["offset"] = offset + return api.getContractList( + AuthenticationHelper.token!!, requestBody, limitMap, offsetMap + ) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/ContractInvoiceActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/ContractInvoiceActivity.kt new file mode 100644 index 0000000..96148a3 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/home/ContractInvoiceActivity.kt @@ -0,0 +1,192 @@ +package com.casic.xz.meterage.view.home + +import android.content.Context +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration +import com.casic.xz.meterage.R +import com.casic.xz.meterage.base.ApplicationBaseActivity +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.model.ContractListModel +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.view.search.SearchContractActivity +import com.casic.xz.meterage.vm.ContractInvoiceViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +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_contract_invoice.* +import kotlinx.android.synthetic.main.include_empty_view.* +import kotlinx.android.synthetic.main.include_search_title.* + +class ContractInvoiceActivity : ApplicationBaseActivity() { + + private var context: Context = this@ContractInvoiceActivity + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var contractViewModel: ContractInvoiceViewModel + private lateinit var contractAdapter: NormalRecyclerAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.activity_contract_invoice + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "合同发票" + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + contractViewModel = ViewModelProvider(this)[ContractInvoiceViewModel::class.java] + contractViewModel.contractList.observe(this) { + if (it.code == 200) { + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + contractLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows) + contractLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023041001) + } + } + } + + override fun observeRequestState() { + contractViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + rightOperateView.setOnClickListener { + navigatePageTo() + } + + contractLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getContractListByPage() + } + + contractLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getContractListByPage() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + getContractListByPage() + } + + private fun getContractListByPage() { + contractViewModel.getContractList( + "", + "", + "", + "", + "", + "1", + "", + "", + "", + arrayOf(), + pageIndex + ) + } + + private val callback = Handler.Callback { + when (it.what) { + 2023041001 -> { + if (isRefresh || isLoadMore) { + contractAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无合同") { + pageIndex = 1 + getContractListByPage() + } + } else { + emptyView!!.hide() + contractAdapter = object : + NormalRecyclerAdapter( + R.layout.item_contract_rv_l, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, + position: Int, + item: ContractListModel.DataModel.RowsModel + ) { + viewHolder.setText(R.id.contractNameView, item.agreementName) + .setText(R.id.contractStateView, item.statusName) + .setText(R.id.contractCodeView, "合同编号:${item.agreementNo}") + .setText(R.id.firstPartNameView, "甲方单位:${item.firstParty}") + .setText( + R.id.startDateView, + "签订日期:${item.estimateSignDate.formatToYearMonthDay()}" + ) + + if (item.statusName.contains("已完成")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.green.convertColor(context) + ) + } else if (item.statusName.contains("未完成")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.red.convertColor(context) + ) + } else if (item.statusName.contains("已废止")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.gray.convertColor(context) + ) + } + } + } + contractRecyclerView.addItemDecoration( + DividerItemDecoration(this, DividerItemDecoration.VERTICAL) + ) + contractRecyclerView.adapter = contractAdapter + contractAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, t: ContractListModel.DataModel.RowsModel + ) { +// navigatePageTo(t.id) + } + }) + } + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt index 373c386..078f497 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt @@ -117,7 +117,6 @@ "", "", "", - "jlglpxjhsp", arrayOf(), pageIndex ) diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt index 16bcd38..92e256d 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_capability.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* /** @@ -93,7 +93,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_capability + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractActivity.kt new file mode 100644 index 0000000..17f6cda --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractActivity.kt @@ -0,0 +1,113 @@ +package com.casic.xz.meterage.view.search + +import android.view.LayoutInflater +import android.view.View +import com.casic.xz.meterage.R +import com.casic.xz.meterage.base.ApplicationBaseActivity +import com.casic.xz.meterage.bean.SearchHistoryBean +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.utils.DataBaseManager +import com.casic.xz.meterage.utils.SearchType +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton +import com.zhy.view.flowlayout.FlowLayout +import com.zhy.view.flowlayout.TagAdapter +import kotlinx.android.synthetic.main.activity_search_history.* +import kotlinx.android.synthetic.main.include_search_input_title.* + +/** + * 搜索合同 + * */ +class SearchContractActivity : ApplicationBaseActivity() { + + private lateinit var inflater: LayoutInflater + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var historyAdapter: TagAdapter + private var dataBeans: MutableList = ArrayList() + private var isRefresh = false + + override fun initLayoutView(): Int = R.layout.activity_search_history + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + inputView.hint = "请输入合同名称或者编号查询" + } + + override fun initData() { + inflater = LayoutInflater.from(this) + weakReferenceHandler = WeakReferenceHandler { + if (it.what == 2023041001) { + if (isRefresh) { + historyAdapter.notifyDataChanged() + } else { + historyAdapter = object : TagAdapter(dataBeans) { + override fun getView( + parent: FlowLayout?, position: Int, bean: SearchHistoryBean + ): View { + val tagView = inflater.inflate( + R.layout.item_search_rv_l, tagFlowLayout, false + ) as QMUIRoundButton + tagView.text = bean.keywords + return tagView + } + } + tagFlowLayout.adapter = historyAdapter + tagFlowLayout.setOnTagClickListener { _, position, _ -> + inputView.setText(dataBeans[position].keywords) + navigatePageTo(inputView.text.toString()) + true + } + } + } + true + } + } + + override fun onResume() { + super.onResume() + dataBeans = DataBaseManager.get.queryHistoryByType(SearchType.Contract) + weakReferenceHandler.sendEmptyMessage(2023041001) + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + searchTextView.setOnClickListener { + if (!inputView.text.isNullOrBlank()) { + DataBaseManager.get.addSearchHistory( + inputView.text.toString(), SearchType.Contract + ) + } + + navigatePageTo(inputView.text.toString()) + } + + deleteHistoryView.setOnClickListener { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("确定将所有搜索记录删除?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + + } + + override fun onConfirmClick() { + DataBaseManager.get.deleteHistoryByType(SearchType.Contract) + dataBeans.clear() + historyAdapter.notifyDataChanged() + } + }).build().show() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractResultActivity.kt new file mode 100644 index 0000000..5096b88 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractResultActivity.kt @@ -0,0 +1,210 @@ +package com.casic.xz.meterage.view.search + +import android.content.Context +import android.os.Handler +import androidx.core.text.isDigitsOnly +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration +import com.casic.xz.meterage.R +import com.casic.xz.meterage.base.ApplicationBaseActivity +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.model.ContractListModel +import com.casic.xz.meterage.utils.AppMemoryCache +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.vm.ContractInvoiceViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_search_contract_reasult.* +import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class SearchContractResultActivity : ApplicationBaseActivity() { + + private var context: Context = this@SearchContractResultActivity + private lateinit var param: String + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var contractViewModel: ContractInvoiceViewModel + private lateinit var contractAdapter: NormalRecyclerAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.activity_search_contract_reasult + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "查询结果" + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + getContractListByPage() + } + + override fun initData() { + param = intent.getStringExtra(Constant.INTENT_PARAM)!! + + weakReferenceHandler = WeakReferenceHandler(callback) + contractViewModel = ViewModelProvider(this)[ContractInvoiceViewModel::class.java] + contractViewModel.contractList.observe(this) { + if (it.code == 200) { + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + contractLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows) + contractLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023041002) + } + } + } + + override fun observeRequestState() { + contractViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + + contractLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getContractListByPage() + } + + contractLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getContractListByPage() + } + } + + private fun getContractListByPage() { + if (param.isDigitsOnly()) { + contractViewModel.getContractList( + "", "", "", "", param, + "1", "", "", "", arrayOf(), + pageIndex + ) + } else { + if (param.length < 4) { + //输入参数长度小于4,默认查名称 + contractViewModel.getContractList( + "", "", param, "", "", + "1", "", "", "", arrayOf(), + pageIndex + ) + } else { + if (AppMemoryCache.prefixCode.contains(param.substring(0, 4))) { + contractViewModel.getContractList( + "", "", "", "", param, + "1", "", "", "", arrayOf(), + pageIndex + ) + } else { + contractViewModel.getContractList( + "", "", param, "", "", + "1", "", "", "", arrayOf(), + pageIndex + ) + } + } + } + } + + private val callback = Handler.Callback { + when (it.what) { + 2023041002 -> { + if (isRefresh || isLoadMore) { + contractAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无合同") { + pageIndex = 1 + getContractListByPage() + } + } else { + emptyView!!.hide() + contractAdapter = object : + NormalRecyclerAdapter( + R.layout.item_contract_rv_l, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, + position: Int, + item: ContractListModel.DataModel.RowsModel + ) { + viewHolder.setText(R.id.contractNameView, item.agreementName) + .setText(R.id.contractStateView, item.statusName) + .setText(R.id.contractCodeView, "合同编号:${item.agreementNo}") + .setText(R.id.firstPartNameView, "甲方单位:${item.firstParty}") + .setText( + R.id.startDateView, + "签订日期:${item.estimateSignDate.formatToYearMonthDay()}" + ) + + if (item.statusName.contains("已完成")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.green.convertColor(context) + ) + } else if (item.statusName.contains("未完成")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.red.convertColor(context) + ) + } else if (item.statusName.contains("已废止")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.gray.convertColor(context) + ) + } + } + } + contractRecyclerView.addItemDecoration( + DividerItemDecoration(this, DividerItemDecoration.VERTICAL) + ) + contractRecyclerView.adapter = contractAdapter + contractAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, t: ContractListModel.DataModel.RowsModel + ) { +// navigatePageTo(t.id) + } + }) + } + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt index 08d6bd2..3430e24 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_customer.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* /** @@ -93,7 +93,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_customer + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustActivity.kt index 2bff498..159d51d 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_entrust.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* /** @@ -93,7 +93,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_entrust + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt index b105378..f9b1076 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_equipment.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* @@ -100,7 +100,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_equipment + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt index 6dba78b..0a8c595 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_global.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* class SearchGlobalActivity : ApplicationBaseActivity() { @@ -90,7 +90,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_global + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainActivity.kt index 56fda90..da94e79 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_meterage_train.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* /** @@ -93,7 +93,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_meterage_train + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt index 447c483..cebdace 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt @@ -119,29 +119,25 @@ if (param.isDigitsOnly()) { meterageTrainViewModel.getMeterageTrainList( "", "", "", "", param, "", - "", "", "", "jlglpxjhsp", arrayOf(), - pageIndex + "", "", "", arrayOf(), pageIndex ) } else { if (param.length < 4) { //输入参数长度小于4,默认查名称 meterageTrainViewModel.getMeterageTrainList( "", "", "", param, "", "", - "", "", "", "jlglpxjhsp", arrayOf(), - pageIndex + "", "", "", arrayOf(), pageIndex ) } else { if (AppMemoryCache.prefixCode.contains(param.substring(0, 4))) { meterageTrainViewModel.getMeterageTrainList( "", "", "", "", param, "", - "", "", "", "jlglpxjhsp", arrayOf(), - pageIndex + "", "", "", arrayOf(), pageIndex ) } else { meterageTrainViewModel.getMeterageTrainList( "", "", "", param, "", "", - "", "", "", "jlglpxjhsp", arrayOf(), - pageIndex + "", "", "", arrayOf(), pageIndex ) } } diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchStandardDeviceActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchStandardDeviceActivity.kt index cf96d0d..39b1388 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchStandardDeviceActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchStandardDeviceActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_standard_device.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* /** @@ -99,7 +99,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_standard_device + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/vm/ContractInvoiceViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/ContractInvoiceViewModel.kt new file mode 100644 index 0000000..99b5871 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/vm/ContractInvoiceViewModel.kt @@ -0,0 +1,66 @@ +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.ContractListModel +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 ContractInvoiceViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } + val contractList = MutableLiveData() + + fun getContractList( + customerId: String, + agreementKind: String, + agreementName: String, + agreementType: String, + agreementNo: String, + estimateSignStartDate: String, + estimateSignEndDate: String, + firstParty: String, + status: String, + ids: Array, + offset: Int + ) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.getContractList( + customerId, + agreementKind, + agreementName, + agreementType, + agreementNo, + estimateSignStartDate, + estimateSignEndDate, + firstParty, + status, + ids, + offset + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + contractList.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()) + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/vm/MeterageTrainViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/MeterageTrainViewModel.kt index b1bad75..43e4632 100644 --- a/app/src/main/java/com/casic/xz/meterage/vm/MeterageTrainViewModel.kt +++ b/app/src/main/java/com/casic/xz/meterage/vm/MeterageTrainViewModel.kt @@ -37,7 +37,6 @@ effectiveCompany: String, trainStartTime: String, trainEndTime: String, - formId: String, ids: Array, offset: Int ) = launch({ @@ -52,7 +51,6 @@ effectiveCompany, trainStartTime, trainEndTime, - formId, ids, offset ) diff --git a/app/src/main/res/layout/activity_contract_invoice.xml b/app/src/main/res/layout/activity_contract_invoice.xml new file mode 100644 index 0000000..a926c5b --- /dev/null +++ b/app/src/main/res/layout/activity_contract_invoice.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_search_capability.xml b/app/src/main/res/layout/activity_search_capability.xml deleted file mode 100644 index 93ed590..0000000 --- a/app/src/main/res/layout/activity_search_capability.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/activity_search_contract_reasult.xml b/app/src/main/res/layout/activity_search_contract_reasult.xml new file mode 100644 index 0000000..bcd2ad9 --- /dev/null +++ b/app/src/main/res/layout/activity_search_contract_reasult.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 9fc7c01..78d7828 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -71,6 +71,7 @@ + @@ -85,6 +86,8 @@ + + diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt index 71fe5a8..ad81434 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt @@ -170,7 +170,7 @@ "标准规范" -> requireContext().navigatePageTo() "能力列表" -> requireContext().navigatePageTo() "计量培训" -> requireContext().navigatePageTo() -// "合同发票" -> requireContext().navigatePageTo() + "合同发票" -> requireContext().navigatePageTo() // "业务统计" -> requireContext().navigatePageTo() "客户列表" -> requireContext().navigatePageTo() // "外场检测" -> requireContext().navigatePageTo() diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt index b47cb32..b12a0bf 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt @@ -184,7 +184,7 @@ requireContext().navigatePageTo() } - //TODO 未实现 + //TODO 通过接口修改数据库字段实现 pushSettingSwitch.setOnCheckedChangeListener { _, isChecked -> SaveKeyValues.putValue(LocaleConstant.PUSH_SETTING, isChecked) if (isChecked) { diff --git a/app/src/main/java/com/casic/xz/meterage/model/ContractListModel.java b/app/src/main/java/com/casic/xz/meterage/model/ContractListModel.java new file mode 100644 index 0000000..111ff52 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/model/ContractListModel.java @@ -0,0 +1,364 @@ +package com.casic.xz.meterage.model; + +import java.util.List; + +public class ContractListModel { + + 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 agreementAmount; + private String agreementEndDate; + private String agreementImportantContent; + private String agreementKind; + private String agreementKindName; + private String agreementName; + private String agreementNo; + private String agreementSource; + private String agreementSourceName; + private String agreementStartDate; + private String agreementType; + private String agreementTypeName; + private String approvalStatus; + private String createTime; + private String createUser; + private String createUserName; + private String customerId; + private String deptId; + private String deptName; + private String director; + private String estimateSignDate; + private String firstParty; + private String id; + private String isDel; + private String minioFileName; + private String orderIdList; + private String orderList; + private String paymentList; + private String processId; + private String remark; + private String secondParty; + private String status; + private String statusName; + private String updateTime; + + public String getAgreementAmount() { + return agreementAmount; + } + + public void setAgreementAmount(String agreementAmount) { + this.agreementAmount = agreementAmount; + } + + public String getAgreementEndDate() { + return agreementEndDate; + } + + public void setAgreementEndDate(String agreementEndDate) { + this.agreementEndDate = agreementEndDate; + } + + public String getAgreementImportantContent() { + return agreementImportantContent; + } + + public void setAgreementImportantContent(String agreementImportantContent) { + this.agreementImportantContent = agreementImportantContent; + } + + public String getAgreementKind() { + return agreementKind; + } + + public void setAgreementKind(String agreementKind) { + this.agreementKind = agreementKind; + } + + public String getAgreementKindName() { + return agreementKindName; + } + + public void setAgreementKindName(String agreementKindName) { + this.agreementKindName = agreementKindName; + } + + public String getAgreementName() { + return agreementName; + } + + public void setAgreementName(String agreementName) { + this.agreementName = agreementName; + } + + public String getAgreementNo() { + return agreementNo; + } + + public void setAgreementNo(String agreementNo) { + this.agreementNo = agreementNo; + } + + public String getAgreementSource() { + return agreementSource; + } + + public void setAgreementSource(String agreementSource) { + this.agreementSource = agreementSource; + } + + public String getAgreementSourceName() { + return agreementSourceName; + } + + public void setAgreementSourceName(String agreementSourceName) { + this.agreementSourceName = agreementSourceName; + } + + public String getAgreementStartDate() { + return agreementStartDate; + } + + public void setAgreementStartDate(String agreementStartDate) { + this.agreementStartDate = agreementStartDate; + } + + public String getAgreementType() { + return agreementType; + } + + public void setAgreementType(String agreementType) { + this.agreementType = agreementType; + } + + public String getAgreementTypeName() { + return agreementTypeName; + } + + public void setAgreementTypeName(String agreementTypeName) { + this.agreementTypeName = agreementTypeName; + } + + public String getApprovalStatus() { + return approvalStatus; + } + + public void setApprovalStatus(String approvalStatus) { + this.approvalStatus = approvalStatus; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getCreateUser() { + return createUser; + } + + public void setCreateUser(String createUser) { + this.createUser = createUser; + } + + public String getCreateUserName() { + return createUserName; + } + + public void setCreateUserName(String createUserName) { + this.createUserName = createUserName; + } + + public String getCustomerId() { + return customerId; + } + + public void setCustomerId(String customerId) { + this.customerId = customerId; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDirector() { + return director; + } + + public void setDirector(String director) { + this.director = director; + } + + public String getEstimateSignDate() { + return estimateSignDate; + } + + public void setEstimateSignDate(String estimateSignDate) { + this.estimateSignDate = estimateSignDate; + } + + public String getFirstParty() { + return firstParty; + } + + public void setFirstParty(String firstParty) { + this.firstParty = firstParty; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getIsDel() { + return isDel; + } + + public void setIsDel(String isDel) { + this.isDel = isDel; + } + + public String getMinioFileName() { + return minioFileName; + } + + public void setMinioFileName(String minioFileName) { + this.minioFileName = minioFileName; + } + + public String getOrderIdList() { + return orderIdList; + } + + public void setOrderIdList(String orderIdList) { + this.orderIdList = orderIdList; + } + + public String getOrderList() { + return orderList; + } + + public void setOrderList(String orderList) { + this.orderList = orderList; + } + + public String getPaymentList() { + return paymentList; + } + + public void setPaymentList(String paymentList) { + this.paymentList = paymentList; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + public String getSecondParty() { + return secondParty; + } + + public void setSecondParty(String secondParty) { + this.secondParty = secondParty; + } + + 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; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt index 85756b0..36059c5 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt @@ -65,4 +65,8 @@ const val USER_ID = "userId" const val PRIVACY_CHECK_BOX = "privacyCheckBox" const val PUSH_SETTING = "pushSetting" + const val METERAGE_TRAIN_FORM_ID = "jlglpxjhsp" + const val STANDARD_FILE_FORM_ID = "jlglwjsp" + const val CERTIFICATE_REPORT_FORM_ID = "ywglzsbg" + const val CONTRACT_FORM_ID = "cwczht" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt b/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt index da58079..99f3bb1 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt @@ -2,37 +2,42 @@ object SearchType { /** + * 首页模糊搜索 + * */ + const val All = "0" + + /** * 搜索仪器设备 * */ - const val Equipment = "0" + const val Equipment = "1" /** * 搜索标准装置 * */ - const val StandardDevice = "1" + const val StandardDevice = "2" /** * 搜索委托书需求 * */ - const val Entrust = "2" + const val Entrust = "3" /** * 搜索能力 * */ - const val Capability = "3" + const val Capability = "4" /** * 搜索计量培训 * */ - const val MeterageTrain = "4" + const val MeterageTrain = "5" /** * 搜索客户 * */ - const val Customer = "5" + const val Customer = "6" /** - * 首页模糊搜索 + * 搜索仪器设备 * */ - const val All = "6" + const val Contract = "7" } 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 3bd698a..bc4d694 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 @@ -446,4 +446,15 @@ @QueryMap limit: Map, @QueryMap offset: Map ): String + + /** + * 合同列表 + */ + @POST("/finance/agreement/listPage") + suspend fun getContractList( + @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 9e7556b..1aaabee 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 @@ -459,7 +459,6 @@ effectiveCompany: String, trainStartTime: String, trainEndTime: String, - formId: String, ids: Array, offset: Int ): String { @@ -473,7 +472,7 @@ param.addProperty("effectiveCompany", effectiveCompany) param.addProperty("trainStartTime", trainStartTime) param.addProperty("trainEndTime", trainEndTime) - param.addProperty("formId", formId) + param.addProperty("formId", LocaleConstant.METERAGE_TRAIN_FORM_ID) param.add("ids", gson.toJsonTree(ids, typeToken).asJsonArray) val requestBody = param.toString().toRequestBody( @@ -843,7 +842,7 @@ offset: Int ): String { val param = JsonObject() - param.addProperty("formId", "jlglwjsp") + param.addProperty("formId", LocaleConstant.STANDARD_FILE_FORM_ID) param.addProperty("fileType", fileType) param.addProperty("fileName", fileName) param.addProperty("fileNo", fileNo) @@ -884,7 +883,7 @@ offset: Int ): String { val param = JsonObject() - param.addProperty("formId", "ywglzsbg") + param.addProperty("formId", LocaleConstant.CERTIFICATE_REPORT_FORM_ID) param.addProperty("approvalStatus", approvalStatus) param.addProperty("certificateReportCode", certificateReportCode) param.addProperty("customerName", customerName) @@ -925,7 +924,7 @@ */ suspend fun submit(id: String): String { val param = JsonObject() - param.addProperty("formId", "ywglzsbg") + param.addProperty("formId", LocaleConstant.CERTIFICATE_REPORT_FORM_ID) param.addProperty("id", id) val requestBody = param.toString().toRequestBody( "application/json;charset=UTF-8".toMediaType() @@ -1009,4 +1008,47 @@ AuthenticationHelper.token!!, requestBody, limitMap, offsetMap ) } + + /** + * 合同列表 + */ + suspend fun getContractList( + customerId: String, + agreementKind: String, + agreementName: String, + agreementType: String, + agreementNo: String, + estimateSignStartDate: String, + estimateSignEndDate: String, + firstParty: String, + status: String, + ids: Array, + offset: Int + ): String { + val param = JsonObject() + param.addProperty("customerId", customerId) + param.addProperty("agreementKind", agreementKind) + param.addProperty("agreementName", agreementName) + param.addProperty("agreementType", agreementType) + param.addProperty("agreementNo", agreementNo) + param.addProperty("estimateSignStartDate", estimateSignStartDate) + param.addProperty("estimateSignEndDate", estimateSignEndDate) + param.addProperty("firstParty", firstParty) + param.addProperty("formId", LocaleConstant.CONTRACT_FORM_ID) + param.addProperty("status", status) + param.add("ids", gson.toJsonTree(ids, typeToken).asJsonArray) + + val requestBody = param.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + + val limitMap = HashMap() + limitMap["limit"] = LocaleConstant.PAGE_LIMIT + + val offsetMap = HashMap() + offsetMap["offset"] = offset + return api.getContractList( + AuthenticationHelper.token!!, requestBody, limitMap, offsetMap + ) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/ContractInvoiceActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/ContractInvoiceActivity.kt new file mode 100644 index 0000000..96148a3 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/home/ContractInvoiceActivity.kt @@ -0,0 +1,192 @@ +package com.casic.xz.meterage.view.home + +import android.content.Context +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration +import com.casic.xz.meterage.R +import com.casic.xz.meterage.base.ApplicationBaseActivity +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.model.ContractListModel +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.view.search.SearchContractActivity +import com.casic.xz.meterage.vm.ContractInvoiceViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +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_contract_invoice.* +import kotlinx.android.synthetic.main.include_empty_view.* +import kotlinx.android.synthetic.main.include_search_title.* + +class ContractInvoiceActivity : ApplicationBaseActivity() { + + private var context: Context = this@ContractInvoiceActivity + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var contractViewModel: ContractInvoiceViewModel + private lateinit var contractAdapter: NormalRecyclerAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.activity_contract_invoice + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "合同发票" + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + contractViewModel = ViewModelProvider(this)[ContractInvoiceViewModel::class.java] + contractViewModel.contractList.observe(this) { + if (it.code == 200) { + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + contractLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows) + contractLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023041001) + } + } + } + + override fun observeRequestState() { + contractViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + rightOperateView.setOnClickListener { + navigatePageTo() + } + + contractLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getContractListByPage() + } + + contractLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getContractListByPage() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + getContractListByPage() + } + + private fun getContractListByPage() { + contractViewModel.getContractList( + "", + "", + "", + "", + "", + "1", + "", + "", + "", + arrayOf(), + pageIndex + ) + } + + private val callback = Handler.Callback { + when (it.what) { + 2023041001 -> { + if (isRefresh || isLoadMore) { + contractAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无合同") { + pageIndex = 1 + getContractListByPage() + } + } else { + emptyView!!.hide() + contractAdapter = object : + NormalRecyclerAdapter( + R.layout.item_contract_rv_l, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, + position: Int, + item: ContractListModel.DataModel.RowsModel + ) { + viewHolder.setText(R.id.contractNameView, item.agreementName) + .setText(R.id.contractStateView, item.statusName) + .setText(R.id.contractCodeView, "合同编号:${item.agreementNo}") + .setText(R.id.firstPartNameView, "甲方单位:${item.firstParty}") + .setText( + R.id.startDateView, + "签订日期:${item.estimateSignDate.formatToYearMonthDay()}" + ) + + if (item.statusName.contains("已完成")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.green.convertColor(context) + ) + } else if (item.statusName.contains("未完成")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.red.convertColor(context) + ) + } else if (item.statusName.contains("已废止")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.gray.convertColor(context) + ) + } + } + } + contractRecyclerView.addItemDecoration( + DividerItemDecoration(this, DividerItemDecoration.VERTICAL) + ) + contractRecyclerView.adapter = contractAdapter + contractAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, t: ContractListModel.DataModel.RowsModel + ) { +// navigatePageTo(t.id) + } + }) + } + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt index 373c386..078f497 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt @@ -117,7 +117,6 @@ "", "", "", - "jlglpxjhsp", arrayOf(), pageIndex ) diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt index 16bcd38..92e256d 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_capability.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* /** @@ -93,7 +93,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_capability + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractActivity.kt new file mode 100644 index 0000000..17f6cda --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractActivity.kt @@ -0,0 +1,113 @@ +package com.casic.xz.meterage.view.search + +import android.view.LayoutInflater +import android.view.View +import com.casic.xz.meterage.R +import com.casic.xz.meterage.base.ApplicationBaseActivity +import com.casic.xz.meterage.bean.SearchHistoryBean +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.utils.DataBaseManager +import com.casic.xz.meterage.utils.SearchType +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton +import com.zhy.view.flowlayout.FlowLayout +import com.zhy.view.flowlayout.TagAdapter +import kotlinx.android.synthetic.main.activity_search_history.* +import kotlinx.android.synthetic.main.include_search_input_title.* + +/** + * 搜索合同 + * */ +class SearchContractActivity : ApplicationBaseActivity() { + + private lateinit var inflater: LayoutInflater + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var historyAdapter: TagAdapter + private var dataBeans: MutableList = ArrayList() + private var isRefresh = false + + override fun initLayoutView(): Int = R.layout.activity_search_history + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + inputView.hint = "请输入合同名称或者编号查询" + } + + override fun initData() { + inflater = LayoutInflater.from(this) + weakReferenceHandler = WeakReferenceHandler { + if (it.what == 2023041001) { + if (isRefresh) { + historyAdapter.notifyDataChanged() + } else { + historyAdapter = object : TagAdapter(dataBeans) { + override fun getView( + parent: FlowLayout?, position: Int, bean: SearchHistoryBean + ): View { + val tagView = inflater.inflate( + R.layout.item_search_rv_l, tagFlowLayout, false + ) as QMUIRoundButton + tagView.text = bean.keywords + return tagView + } + } + tagFlowLayout.adapter = historyAdapter + tagFlowLayout.setOnTagClickListener { _, position, _ -> + inputView.setText(dataBeans[position].keywords) + navigatePageTo(inputView.text.toString()) + true + } + } + } + true + } + } + + override fun onResume() { + super.onResume() + dataBeans = DataBaseManager.get.queryHistoryByType(SearchType.Contract) + weakReferenceHandler.sendEmptyMessage(2023041001) + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + searchTextView.setOnClickListener { + if (!inputView.text.isNullOrBlank()) { + DataBaseManager.get.addSearchHistory( + inputView.text.toString(), SearchType.Contract + ) + } + + navigatePageTo(inputView.text.toString()) + } + + deleteHistoryView.setOnClickListener { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("确定将所有搜索记录删除?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + + } + + override fun onConfirmClick() { + DataBaseManager.get.deleteHistoryByType(SearchType.Contract) + dataBeans.clear() + historyAdapter.notifyDataChanged() + } + }).build().show() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractResultActivity.kt new file mode 100644 index 0000000..5096b88 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractResultActivity.kt @@ -0,0 +1,210 @@ +package com.casic.xz.meterage.view.search + +import android.content.Context +import android.os.Handler +import androidx.core.text.isDigitsOnly +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration +import com.casic.xz.meterage.R +import com.casic.xz.meterage.base.ApplicationBaseActivity +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.model.ContractListModel +import com.casic.xz.meterage.utils.AppMemoryCache +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.vm.ContractInvoiceViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_search_contract_reasult.* +import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class SearchContractResultActivity : ApplicationBaseActivity() { + + private var context: Context = this@SearchContractResultActivity + private lateinit var param: String + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var contractViewModel: ContractInvoiceViewModel + private lateinit var contractAdapter: NormalRecyclerAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.activity_search_contract_reasult + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "查询结果" + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + getContractListByPage() + } + + override fun initData() { + param = intent.getStringExtra(Constant.INTENT_PARAM)!! + + weakReferenceHandler = WeakReferenceHandler(callback) + contractViewModel = ViewModelProvider(this)[ContractInvoiceViewModel::class.java] + contractViewModel.contractList.observe(this) { + if (it.code == 200) { + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + contractLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows) + contractLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023041002) + } + } + } + + override fun observeRequestState() { + contractViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + + contractLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getContractListByPage() + } + + contractLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getContractListByPage() + } + } + + private fun getContractListByPage() { + if (param.isDigitsOnly()) { + contractViewModel.getContractList( + "", "", "", "", param, + "1", "", "", "", arrayOf(), + pageIndex + ) + } else { + if (param.length < 4) { + //输入参数长度小于4,默认查名称 + contractViewModel.getContractList( + "", "", param, "", "", + "1", "", "", "", arrayOf(), + pageIndex + ) + } else { + if (AppMemoryCache.prefixCode.contains(param.substring(0, 4))) { + contractViewModel.getContractList( + "", "", "", "", param, + "1", "", "", "", arrayOf(), + pageIndex + ) + } else { + contractViewModel.getContractList( + "", "", param, "", "", + "1", "", "", "", arrayOf(), + pageIndex + ) + } + } + } + } + + private val callback = Handler.Callback { + when (it.what) { + 2023041002 -> { + if (isRefresh || isLoadMore) { + contractAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无合同") { + pageIndex = 1 + getContractListByPage() + } + } else { + emptyView!!.hide() + contractAdapter = object : + NormalRecyclerAdapter( + R.layout.item_contract_rv_l, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, + position: Int, + item: ContractListModel.DataModel.RowsModel + ) { + viewHolder.setText(R.id.contractNameView, item.agreementName) + .setText(R.id.contractStateView, item.statusName) + .setText(R.id.contractCodeView, "合同编号:${item.agreementNo}") + .setText(R.id.firstPartNameView, "甲方单位:${item.firstParty}") + .setText( + R.id.startDateView, + "签订日期:${item.estimateSignDate.formatToYearMonthDay()}" + ) + + if (item.statusName.contains("已完成")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.green.convertColor(context) + ) + } else if (item.statusName.contains("未完成")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.red.convertColor(context) + ) + } else if (item.statusName.contains("已废止")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.gray.convertColor(context) + ) + } + } + } + contractRecyclerView.addItemDecoration( + DividerItemDecoration(this, DividerItemDecoration.VERTICAL) + ) + contractRecyclerView.adapter = contractAdapter + contractAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, t: ContractListModel.DataModel.RowsModel + ) { +// navigatePageTo(t.id) + } + }) + } + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt index 08d6bd2..3430e24 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_customer.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* /** @@ -93,7 +93,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_customer + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustActivity.kt index 2bff498..159d51d 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_entrust.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* /** @@ -93,7 +93,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_entrust + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt index b105378..f9b1076 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_equipment.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* @@ -100,7 +100,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_equipment + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt index 6dba78b..0a8c595 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_global.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* class SearchGlobalActivity : ApplicationBaseActivity() { @@ -90,7 +90,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_global + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainActivity.kt index 56fda90..da94e79 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_meterage_train.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* /** @@ -93,7 +93,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_meterage_train + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt index 447c483..cebdace 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt @@ -119,29 +119,25 @@ if (param.isDigitsOnly()) { meterageTrainViewModel.getMeterageTrainList( "", "", "", "", param, "", - "", "", "", "jlglpxjhsp", arrayOf(), - pageIndex + "", "", "", arrayOf(), pageIndex ) } else { if (param.length < 4) { //输入参数长度小于4,默认查名称 meterageTrainViewModel.getMeterageTrainList( "", "", "", param, "", "", - "", "", "", "jlglpxjhsp", arrayOf(), - pageIndex + "", "", "", arrayOf(), pageIndex ) } else { if (AppMemoryCache.prefixCode.contains(param.substring(0, 4))) { meterageTrainViewModel.getMeterageTrainList( "", "", "", "", param, "", - "", "", "", "jlglpxjhsp", arrayOf(), - pageIndex + "", "", "", arrayOf(), pageIndex ) } else { meterageTrainViewModel.getMeterageTrainList( "", "", "", param, "", "", - "", "", "", "jlglpxjhsp", arrayOf(), - pageIndex + "", "", "", arrayOf(), pageIndex ) } } diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchStandardDeviceActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchStandardDeviceActivity.kt index cf96d0d..39b1388 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchStandardDeviceActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchStandardDeviceActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_standard_device.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* /** @@ -99,7 +99,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_standard_device + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/vm/ContractInvoiceViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/ContractInvoiceViewModel.kt new file mode 100644 index 0000000..99b5871 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/vm/ContractInvoiceViewModel.kt @@ -0,0 +1,66 @@ +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.ContractListModel +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 ContractInvoiceViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } + val contractList = MutableLiveData() + + fun getContractList( + customerId: String, + agreementKind: String, + agreementName: String, + agreementType: String, + agreementNo: String, + estimateSignStartDate: String, + estimateSignEndDate: String, + firstParty: String, + status: String, + ids: Array, + offset: Int + ) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.getContractList( + customerId, + agreementKind, + agreementName, + agreementType, + agreementNo, + estimateSignStartDate, + estimateSignEndDate, + firstParty, + status, + ids, + offset + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + contractList.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()) + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/vm/MeterageTrainViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/MeterageTrainViewModel.kt index b1bad75..43e4632 100644 --- a/app/src/main/java/com/casic/xz/meterage/vm/MeterageTrainViewModel.kt +++ b/app/src/main/java/com/casic/xz/meterage/vm/MeterageTrainViewModel.kt @@ -37,7 +37,6 @@ effectiveCompany: String, trainStartTime: String, trainEndTime: String, - formId: String, ids: Array, offset: Int ) = launch({ @@ -52,7 +51,6 @@ effectiveCompany, trainStartTime, trainEndTime, - formId, ids, offset ) diff --git a/app/src/main/res/layout/activity_contract_invoice.xml b/app/src/main/res/layout/activity_contract_invoice.xml new file mode 100644 index 0000000..a926c5b --- /dev/null +++ b/app/src/main/res/layout/activity_contract_invoice.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_search_capability.xml b/app/src/main/res/layout/activity_search_capability.xml deleted file mode 100644 index 93ed590..0000000 --- a/app/src/main/res/layout/activity_search_capability.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/activity_search_contract_reasult.xml b/app/src/main/res/layout/activity_search_contract_reasult.xml new file mode 100644 index 0000000..bcd2ad9 --- /dev/null +++ b/app/src/main/res/layout/activity_search_contract_reasult.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_search_customer.xml b/app/src/main/res/layout/activity_search_customer.xml deleted file mode 100644 index 93ed590..0000000 --- a/app/src/main/res/layout/activity_search_customer.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 9fc7c01..78d7828 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -71,6 +71,7 @@ + @@ -85,6 +86,8 @@ + + diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt index 71fe5a8..ad81434 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt @@ -170,7 +170,7 @@ "标准规范" -> requireContext().navigatePageTo() "能力列表" -> requireContext().navigatePageTo() "计量培训" -> requireContext().navigatePageTo() -// "合同发票" -> requireContext().navigatePageTo() + "合同发票" -> requireContext().navigatePageTo() // "业务统计" -> requireContext().navigatePageTo() "客户列表" -> requireContext().navigatePageTo() // "外场检测" -> requireContext().navigatePageTo() diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt index b47cb32..b12a0bf 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt @@ -184,7 +184,7 @@ requireContext().navigatePageTo() } - //TODO 未实现 + //TODO 通过接口修改数据库字段实现 pushSettingSwitch.setOnCheckedChangeListener { _, isChecked -> SaveKeyValues.putValue(LocaleConstant.PUSH_SETTING, isChecked) if (isChecked) { diff --git a/app/src/main/java/com/casic/xz/meterage/model/ContractListModel.java b/app/src/main/java/com/casic/xz/meterage/model/ContractListModel.java new file mode 100644 index 0000000..111ff52 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/model/ContractListModel.java @@ -0,0 +1,364 @@ +package com.casic.xz.meterage.model; + +import java.util.List; + +public class ContractListModel { + + 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 agreementAmount; + private String agreementEndDate; + private String agreementImportantContent; + private String agreementKind; + private String agreementKindName; + private String agreementName; + private String agreementNo; + private String agreementSource; + private String agreementSourceName; + private String agreementStartDate; + private String agreementType; + private String agreementTypeName; + private String approvalStatus; + private String createTime; + private String createUser; + private String createUserName; + private String customerId; + private String deptId; + private String deptName; + private String director; + private String estimateSignDate; + private String firstParty; + private String id; + private String isDel; + private String minioFileName; + private String orderIdList; + private String orderList; + private String paymentList; + private String processId; + private String remark; + private String secondParty; + private String status; + private String statusName; + private String updateTime; + + public String getAgreementAmount() { + return agreementAmount; + } + + public void setAgreementAmount(String agreementAmount) { + this.agreementAmount = agreementAmount; + } + + public String getAgreementEndDate() { + return agreementEndDate; + } + + public void setAgreementEndDate(String agreementEndDate) { + this.agreementEndDate = agreementEndDate; + } + + public String getAgreementImportantContent() { + return agreementImportantContent; + } + + public void setAgreementImportantContent(String agreementImportantContent) { + this.agreementImportantContent = agreementImportantContent; + } + + public String getAgreementKind() { + return agreementKind; + } + + public void setAgreementKind(String agreementKind) { + this.agreementKind = agreementKind; + } + + public String getAgreementKindName() { + return agreementKindName; + } + + public void setAgreementKindName(String agreementKindName) { + this.agreementKindName = agreementKindName; + } + + public String getAgreementName() { + return agreementName; + } + + public void setAgreementName(String agreementName) { + this.agreementName = agreementName; + } + + public String getAgreementNo() { + return agreementNo; + } + + public void setAgreementNo(String agreementNo) { + this.agreementNo = agreementNo; + } + + public String getAgreementSource() { + return agreementSource; + } + + public void setAgreementSource(String agreementSource) { + this.agreementSource = agreementSource; + } + + public String getAgreementSourceName() { + return agreementSourceName; + } + + public void setAgreementSourceName(String agreementSourceName) { + this.agreementSourceName = agreementSourceName; + } + + public String getAgreementStartDate() { + return agreementStartDate; + } + + public void setAgreementStartDate(String agreementStartDate) { + this.agreementStartDate = agreementStartDate; + } + + public String getAgreementType() { + return agreementType; + } + + public void setAgreementType(String agreementType) { + this.agreementType = agreementType; + } + + public String getAgreementTypeName() { + return agreementTypeName; + } + + public void setAgreementTypeName(String agreementTypeName) { + this.agreementTypeName = agreementTypeName; + } + + public String getApprovalStatus() { + return approvalStatus; + } + + public void setApprovalStatus(String approvalStatus) { + this.approvalStatus = approvalStatus; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getCreateUser() { + return createUser; + } + + public void setCreateUser(String createUser) { + this.createUser = createUser; + } + + public String getCreateUserName() { + return createUserName; + } + + public void setCreateUserName(String createUserName) { + this.createUserName = createUserName; + } + + public String getCustomerId() { + return customerId; + } + + public void setCustomerId(String customerId) { + this.customerId = customerId; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDirector() { + return director; + } + + public void setDirector(String director) { + this.director = director; + } + + public String getEstimateSignDate() { + return estimateSignDate; + } + + public void setEstimateSignDate(String estimateSignDate) { + this.estimateSignDate = estimateSignDate; + } + + public String getFirstParty() { + return firstParty; + } + + public void setFirstParty(String firstParty) { + this.firstParty = firstParty; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getIsDel() { + return isDel; + } + + public void setIsDel(String isDel) { + this.isDel = isDel; + } + + public String getMinioFileName() { + return minioFileName; + } + + public void setMinioFileName(String minioFileName) { + this.minioFileName = minioFileName; + } + + public String getOrderIdList() { + return orderIdList; + } + + public void setOrderIdList(String orderIdList) { + this.orderIdList = orderIdList; + } + + public String getOrderList() { + return orderList; + } + + public void setOrderList(String orderList) { + this.orderList = orderList; + } + + public String getPaymentList() { + return paymentList; + } + + public void setPaymentList(String paymentList) { + this.paymentList = paymentList; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + public String getSecondParty() { + return secondParty; + } + + public void setSecondParty(String secondParty) { + this.secondParty = secondParty; + } + + 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; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt index 85756b0..36059c5 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt @@ -65,4 +65,8 @@ const val USER_ID = "userId" const val PRIVACY_CHECK_BOX = "privacyCheckBox" const val PUSH_SETTING = "pushSetting" + const val METERAGE_TRAIN_FORM_ID = "jlglpxjhsp" + const val STANDARD_FILE_FORM_ID = "jlglwjsp" + const val CERTIFICATE_REPORT_FORM_ID = "ywglzsbg" + const val CONTRACT_FORM_ID = "cwczht" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt b/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt index da58079..99f3bb1 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt @@ -2,37 +2,42 @@ object SearchType { /** + * 首页模糊搜索 + * */ + const val All = "0" + + /** * 搜索仪器设备 * */ - const val Equipment = "0" + const val Equipment = "1" /** * 搜索标准装置 * */ - const val StandardDevice = "1" + const val StandardDevice = "2" /** * 搜索委托书需求 * */ - const val Entrust = "2" + const val Entrust = "3" /** * 搜索能力 * */ - const val Capability = "3" + const val Capability = "4" /** * 搜索计量培训 * */ - const val MeterageTrain = "4" + const val MeterageTrain = "5" /** * 搜索客户 * */ - const val Customer = "5" + const val Customer = "6" /** - * 首页模糊搜索 + * 搜索仪器设备 * */ - const val All = "6" + const val Contract = "7" } 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 3bd698a..bc4d694 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 @@ -446,4 +446,15 @@ @QueryMap limit: Map, @QueryMap offset: Map ): String + + /** + * 合同列表 + */ + @POST("/finance/agreement/listPage") + suspend fun getContractList( + @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 9e7556b..1aaabee 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 @@ -459,7 +459,6 @@ effectiveCompany: String, trainStartTime: String, trainEndTime: String, - formId: String, ids: Array, offset: Int ): String { @@ -473,7 +472,7 @@ param.addProperty("effectiveCompany", effectiveCompany) param.addProperty("trainStartTime", trainStartTime) param.addProperty("trainEndTime", trainEndTime) - param.addProperty("formId", formId) + param.addProperty("formId", LocaleConstant.METERAGE_TRAIN_FORM_ID) param.add("ids", gson.toJsonTree(ids, typeToken).asJsonArray) val requestBody = param.toString().toRequestBody( @@ -843,7 +842,7 @@ offset: Int ): String { val param = JsonObject() - param.addProperty("formId", "jlglwjsp") + param.addProperty("formId", LocaleConstant.STANDARD_FILE_FORM_ID) param.addProperty("fileType", fileType) param.addProperty("fileName", fileName) param.addProperty("fileNo", fileNo) @@ -884,7 +883,7 @@ offset: Int ): String { val param = JsonObject() - param.addProperty("formId", "ywglzsbg") + param.addProperty("formId", LocaleConstant.CERTIFICATE_REPORT_FORM_ID) param.addProperty("approvalStatus", approvalStatus) param.addProperty("certificateReportCode", certificateReportCode) param.addProperty("customerName", customerName) @@ -925,7 +924,7 @@ */ suspend fun submit(id: String): String { val param = JsonObject() - param.addProperty("formId", "ywglzsbg") + param.addProperty("formId", LocaleConstant.CERTIFICATE_REPORT_FORM_ID) param.addProperty("id", id) val requestBody = param.toString().toRequestBody( "application/json;charset=UTF-8".toMediaType() @@ -1009,4 +1008,47 @@ AuthenticationHelper.token!!, requestBody, limitMap, offsetMap ) } + + /** + * 合同列表 + */ + suspend fun getContractList( + customerId: String, + agreementKind: String, + agreementName: String, + agreementType: String, + agreementNo: String, + estimateSignStartDate: String, + estimateSignEndDate: String, + firstParty: String, + status: String, + ids: Array, + offset: Int + ): String { + val param = JsonObject() + param.addProperty("customerId", customerId) + param.addProperty("agreementKind", agreementKind) + param.addProperty("agreementName", agreementName) + param.addProperty("agreementType", agreementType) + param.addProperty("agreementNo", agreementNo) + param.addProperty("estimateSignStartDate", estimateSignStartDate) + param.addProperty("estimateSignEndDate", estimateSignEndDate) + param.addProperty("firstParty", firstParty) + param.addProperty("formId", LocaleConstant.CONTRACT_FORM_ID) + param.addProperty("status", status) + param.add("ids", gson.toJsonTree(ids, typeToken).asJsonArray) + + val requestBody = param.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + + val limitMap = HashMap() + limitMap["limit"] = LocaleConstant.PAGE_LIMIT + + val offsetMap = HashMap() + offsetMap["offset"] = offset + return api.getContractList( + AuthenticationHelper.token!!, requestBody, limitMap, offsetMap + ) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/ContractInvoiceActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/ContractInvoiceActivity.kt new file mode 100644 index 0000000..96148a3 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/home/ContractInvoiceActivity.kt @@ -0,0 +1,192 @@ +package com.casic.xz.meterage.view.home + +import android.content.Context +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration +import com.casic.xz.meterage.R +import com.casic.xz.meterage.base.ApplicationBaseActivity +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.model.ContractListModel +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.view.search.SearchContractActivity +import com.casic.xz.meterage.vm.ContractInvoiceViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +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_contract_invoice.* +import kotlinx.android.synthetic.main.include_empty_view.* +import kotlinx.android.synthetic.main.include_search_title.* + +class ContractInvoiceActivity : ApplicationBaseActivity() { + + private var context: Context = this@ContractInvoiceActivity + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var contractViewModel: ContractInvoiceViewModel + private lateinit var contractAdapter: NormalRecyclerAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.activity_contract_invoice + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "合同发票" + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + contractViewModel = ViewModelProvider(this)[ContractInvoiceViewModel::class.java] + contractViewModel.contractList.observe(this) { + if (it.code == 200) { + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + contractLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows) + contractLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023041001) + } + } + } + + override fun observeRequestState() { + contractViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + rightOperateView.setOnClickListener { + navigatePageTo() + } + + contractLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getContractListByPage() + } + + contractLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getContractListByPage() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + getContractListByPage() + } + + private fun getContractListByPage() { + contractViewModel.getContractList( + "", + "", + "", + "", + "", + "1", + "", + "", + "", + arrayOf(), + pageIndex + ) + } + + private val callback = Handler.Callback { + when (it.what) { + 2023041001 -> { + if (isRefresh || isLoadMore) { + contractAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无合同") { + pageIndex = 1 + getContractListByPage() + } + } else { + emptyView!!.hide() + contractAdapter = object : + NormalRecyclerAdapter( + R.layout.item_contract_rv_l, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, + position: Int, + item: ContractListModel.DataModel.RowsModel + ) { + viewHolder.setText(R.id.contractNameView, item.agreementName) + .setText(R.id.contractStateView, item.statusName) + .setText(R.id.contractCodeView, "合同编号:${item.agreementNo}") + .setText(R.id.firstPartNameView, "甲方单位:${item.firstParty}") + .setText( + R.id.startDateView, + "签订日期:${item.estimateSignDate.formatToYearMonthDay()}" + ) + + if (item.statusName.contains("已完成")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.green.convertColor(context) + ) + } else if (item.statusName.contains("未完成")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.red.convertColor(context) + ) + } else if (item.statusName.contains("已废止")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.gray.convertColor(context) + ) + } + } + } + contractRecyclerView.addItemDecoration( + DividerItemDecoration(this, DividerItemDecoration.VERTICAL) + ) + contractRecyclerView.adapter = contractAdapter + contractAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, t: ContractListModel.DataModel.RowsModel + ) { +// navigatePageTo(t.id) + } + }) + } + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt index 373c386..078f497 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt @@ -117,7 +117,6 @@ "", "", "", - "jlglpxjhsp", arrayOf(), pageIndex ) diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt index 16bcd38..92e256d 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_capability.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* /** @@ -93,7 +93,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_capability + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractActivity.kt new file mode 100644 index 0000000..17f6cda --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractActivity.kt @@ -0,0 +1,113 @@ +package com.casic.xz.meterage.view.search + +import android.view.LayoutInflater +import android.view.View +import com.casic.xz.meterage.R +import com.casic.xz.meterage.base.ApplicationBaseActivity +import com.casic.xz.meterage.bean.SearchHistoryBean +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.utils.DataBaseManager +import com.casic.xz.meterage.utils.SearchType +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton +import com.zhy.view.flowlayout.FlowLayout +import com.zhy.view.flowlayout.TagAdapter +import kotlinx.android.synthetic.main.activity_search_history.* +import kotlinx.android.synthetic.main.include_search_input_title.* + +/** + * 搜索合同 + * */ +class SearchContractActivity : ApplicationBaseActivity() { + + private lateinit var inflater: LayoutInflater + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var historyAdapter: TagAdapter + private var dataBeans: MutableList = ArrayList() + private var isRefresh = false + + override fun initLayoutView(): Int = R.layout.activity_search_history + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + inputView.hint = "请输入合同名称或者编号查询" + } + + override fun initData() { + inflater = LayoutInflater.from(this) + weakReferenceHandler = WeakReferenceHandler { + if (it.what == 2023041001) { + if (isRefresh) { + historyAdapter.notifyDataChanged() + } else { + historyAdapter = object : TagAdapter(dataBeans) { + override fun getView( + parent: FlowLayout?, position: Int, bean: SearchHistoryBean + ): View { + val tagView = inflater.inflate( + R.layout.item_search_rv_l, tagFlowLayout, false + ) as QMUIRoundButton + tagView.text = bean.keywords + return tagView + } + } + tagFlowLayout.adapter = historyAdapter + tagFlowLayout.setOnTagClickListener { _, position, _ -> + inputView.setText(dataBeans[position].keywords) + navigatePageTo(inputView.text.toString()) + true + } + } + } + true + } + } + + override fun onResume() { + super.onResume() + dataBeans = DataBaseManager.get.queryHistoryByType(SearchType.Contract) + weakReferenceHandler.sendEmptyMessage(2023041001) + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + searchTextView.setOnClickListener { + if (!inputView.text.isNullOrBlank()) { + DataBaseManager.get.addSearchHistory( + inputView.text.toString(), SearchType.Contract + ) + } + + navigatePageTo(inputView.text.toString()) + } + + deleteHistoryView.setOnClickListener { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("确定将所有搜索记录删除?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + + } + + override fun onConfirmClick() { + DataBaseManager.get.deleteHistoryByType(SearchType.Contract) + dataBeans.clear() + historyAdapter.notifyDataChanged() + } + }).build().show() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractResultActivity.kt new file mode 100644 index 0000000..5096b88 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractResultActivity.kt @@ -0,0 +1,210 @@ +package com.casic.xz.meterage.view.search + +import android.content.Context +import android.os.Handler +import androidx.core.text.isDigitsOnly +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration +import com.casic.xz.meterage.R +import com.casic.xz.meterage.base.ApplicationBaseActivity +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.model.ContractListModel +import com.casic.xz.meterage.utils.AppMemoryCache +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.vm.ContractInvoiceViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_search_contract_reasult.* +import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class SearchContractResultActivity : ApplicationBaseActivity() { + + private var context: Context = this@SearchContractResultActivity + private lateinit var param: String + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var contractViewModel: ContractInvoiceViewModel + private lateinit var contractAdapter: NormalRecyclerAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.activity_search_contract_reasult + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "查询结果" + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + getContractListByPage() + } + + override fun initData() { + param = intent.getStringExtra(Constant.INTENT_PARAM)!! + + weakReferenceHandler = WeakReferenceHandler(callback) + contractViewModel = ViewModelProvider(this)[ContractInvoiceViewModel::class.java] + contractViewModel.contractList.observe(this) { + if (it.code == 200) { + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + contractLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows) + contractLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023041002) + } + } + } + + override fun observeRequestState() { + contractViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + + contractLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getContractListByPage() + } + + contractLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getContractListByPage() + } + } + + private fun getContractListByPage() { + if (param.isDigitsOnly()) { + contractViewModel.getContractList( + "", "", "", "", param, + "1", "", "", "", arrayOf(), + pageIndex + ) + } else { + if (param.length < 4) { + //输入参数长度小于4,默认查名称 + contractViewModel.getContractList( + "", "", param, "", "", + "1", "", "", "", arrayOf(), + pageIndex + ) + } else { + if (AppMemoryCache.prefixCode.contains(param.substring(0, 4))) { + contractViewModel.getContractList( + "", "", "", "", param, + "1", "", "", "", arrayOf(), + pageIndex + ) + } else { + contractViewModel.getContractList( + "", "", param, "", "", + "1", "", "", "", arrayOf(), + pageIndex + ) + } + } + } + } + + private val callback = Handler.Callback { + when (it.what) { + 2023041002 -> { + if (isRefresh || isLoadMore) { + contractAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无合同") { + pageIndex = 1 + getContractListByPage() + } + } else { + emptyView!!.hide() + contractAdapter = object : + NormalRecyclerAdapter( + R.layout.item_contract_rv_l, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, + position: Int, + item: ContractListModel.DataModel.RowsModel + ) { + viewHolder.setText(R.id.contractNameView, item.agreementName) + .setText(R.id.contractStateView, item.statusName) + .setText(R.id.contractCodeView, "合同编号:${item.agreementNo}") + .setText(R.id.firstPartNameView, "甲方单位:${item.firstParty}") + .setText( + R.id.startDateView, + "签订日期:${item.estimateSignDate.formatToYearMonthDay()}" + ) + + if (item.statusName.contains("已完成")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.green.convertColor(context) + ) + } else if (item.statusName.contains("未完成")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.red.convertColor(context) + ) + } else if (item.statusName.contains("已废止")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.gray.convertColor(context) + ) + } + } + } + contractRecyclerView.addItemDecoration( + DividerItemDecoration(this, DividerItemDecoration.VERTICAL) + ) + contractRecyclerView.adapter = contractAdapter + contractAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, t: ContractListModel.DataModel.RowsModel + ) { +// navigatePageTo(t.id) + } + }) + } + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt index 08d6bd2..3430e24 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_customer.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* /** @@ -93,7 +93,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_customer + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustActivity.kt index 2bff498..159d51d 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_entrust.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* /** @@ -93,7 +93,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_entrust + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt index b105378..f9b1076 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_equipment.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* @@ -100,7 +100,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_equipment + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt index 6dba78b..0a8c595 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_global.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* class SearchGlobalActivity : ApplicationBaseActivity() { @@ -90,7 +90,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_global + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainActivity.kt index 56fda90..da94e79 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_meterage_train.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* /** @@ -93,7 +93,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_meterage_train + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt index 447c483..cebdace 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt @@ -119,29 +119,25 @@ if (param.isDigitsOnly()) { meterageTrainViewModel.getMeterageTrainList( "", "", "", "", param, "", - "", "", "", "jlglpxjhsp", arrayOf(), - pageIndex + "", "", "", arrayOf(), pageIndex ) } else { if (param.length < 4) { //输入参数长度小于4,默认查名称 meterageTrainViewModel.getMeterageTrainList( "", "", "", param, "", "", - "", "", "", "jlglpxjhsp", arrayOf(), - pageIndex + "", "", "", arrayOf(), pageIndex ) } else { if (AppMemoryCache.prefixCode.contains(param.substring(0, 4))) { meterageTrainViewModel.getMeterageTrainList( "", "", "", "", param, "", - "", "", "", "jlglpxjhsp", arrayOf(), - pageIndex + "", "", "", arrayOf(), pageIndex ) } else { meterageTrainViewModel.getMeterageTrainList( "", "", "", param, "", "", - "", "", "", "jlglpxjhsp", arrayOf(), - pageIndex + "", "", "", arrayOf(), pageIndex ) } } diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchStandardDeviceActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchStandardDeviceActivity.kt index cf96d0d..39b1388 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchStandardDeviceActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchStandardDeviceActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_standard_device.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* /** @@ -99,7 +99,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_standard_device + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/vm/ContractInvoiceViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/ContractInvoiceViewModel.kt new file mode 100644 index 0000000..99b5871 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/vm/ContractInvoiceViewModel.kt @@ -0,0 +1,66 @@ +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.ContractListModel +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 ContractInvoiceViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } + val contractList = MutableLiveData() + + fun getContractList( + customerId: String, + agreementKind: String, + agreementName: String, + agreementType: String, + agreementNo: String, + estimateSignStartDate: String, + estimateSignEndDate: String, + firstParty: String, + status: String, + ids: Array, + offset: Int + ) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.getContractList( + customerId, + agreementKind, + agreementName, + agreementType, + agreementNo, + estimateSignStartDate, + estimateSignEndDate, + firstParty, + status, + ids, + offset + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + contractList.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()) + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/vm/MeterageTrainViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/MeterageTrainViewModel.kt index b1bad75..43e4632 100644 --- a/app/src/main/java/com/casic/xz/meterage/vm/MeterageTrainViewModel.kt +++ b/app/src/main/java/com/casic/xz/meterage/vm/MeterageTrainViewModel.kt @@ -37,7 +37,6 @@ effectiveCompany: String, trainStartTime: String, trainEndTime: String, - formId: String, ids: Array, offset: Int ) = launch({ @@ -52,7 +51,6 @@ effectiveCompany, trainStartTime, trainEndTime, - formId, ids, offset ) diff --git a/app/src/main/res/layout/activity_contract_invoice.xml b/app/src/main/res/layout/activity_contract_invoice.xml new file mode 100644 index 0000000..a926c5b --- /dev/null +++ b/app/src/main/res/layout/activity_contract_invoice.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_search_capability.xml b/app/src/main/res/layout/activity_search_capability.xml deleted file mode 100644 index 93ed590..0000000 --- a/app/src/main/res/layout/activity_search_capability.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/activity_search_contract_reasult.xml b/app/src/main/res/layout/activity_search_contract_reasult.xml new file mode 100644 index 0000000..bcd2ad9 --- /dev/null +++ b/app/src/main/res/layout/activity_search_contract_reasult.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_search_customer.xml b/app/src/main/res/layout/activity_search_customer.xml deleted file mode 100644 index 93ed590..0000000 --- a/app/src/main/res/layout/activity_search_customer.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/activity_search_entrust.xml b/app/src/main/res/layout/activity_search_entrust.xml deleted file mode 100644 index 93ed590..0000000 --- a/app/src/main/res/layout/activity_search_entrust.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 9fc7c01..78d7828 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -71,6 +71,7 @@ + @@ -85,6 +86,8 @@ + + diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt index 71fe5a8..ad81434 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt @@ -170,7 +170,7 @@ "标准规范" -> requireContext().navigatePageTo() "能力列表" -> requireContext().navigatePageTo() "计量培训" -> requireContext().navigatePageTo() -// "合同发票" -> requireContext().navigatePageTo() + "合同发票" -> requireContext().navigatePageTo() // "业务统计" -> requireContext().navigatePageTo() "客户列表" -> requireContext().navigatePageTo() // "外场检测" -> requireContext().navigatePageTo() diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt index b47cb32..b12a0bf 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt @@ -184,7 +184,7 @@ requireContext().navigatePageTo() } - //TODO 未实现 + //TODO 通过接口修改数据库字段实现 pushSettingSwitch.setOnCheckedChangeListener { _, isChecked -> SaveKeyValues.putValue(LocaleConstant.PUSH_SETTING, isChecked) if (isChecked) { diff --git a/app/src/main/java/com/casic/xz/meterage/model/ContractListModel.java b/app/src/main/java/com/casic/xz/meterage/model/ContractListModel.java new file mode 100644 index 0000000..111ff52 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/model/ContractListModel.java @@ -0,0 +1,364 @@ +package com.casic.xz.meterage.model; + +import java.util.List; + +public class ContractListModel { + + 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 agreementAmount; + private String agreementEndDate; + private String agreementImportantContent; + private String agreementKind; + private String agreementKindName; + private String agreementName; + private String agreementNo; + private String agreementSource; + private String agreementSourceName; + private String agreementStartDate; + private String agreementType; + private String agreementTypeName; + private String approvalStatus; + private String createTime; + private String createUser; + private String createUserName; + private String customerId; + private String deptId; + private String deptName; + private String director; + private String estimateSignDate; + private String firstParty; + private String id; + private String isDel; + private String minioFileName; + private String orderIdList; + private String orderList; + private String paymentList; + private String processId; + private String remark; + private String secondParty; + private String status; + private String statusName; + private String updateTime; + + public String getAgreementAmount() { + return agreementAmount; + } + + public void setAgreementAmount(String agreementAmount) { + this.agreementAmount = agreementAmount; + } + + public String getAgreementEndDate() { + return agreementEndDate; + } + + public void setAgreementEndDate(String agreementEndDate) { + this.agreementEndDate = agreementEndDate; + } + + public String getAgreementImportantContent() { + return agreementImportantContent; + } + + public void setAgreementImportantContent(String agreementImportantContent) { + this.agreementImportantContent = agreementImportantContent; + } + + public String getAgreementKind() { + return agreementKind; + } + + public void setAgreementKind(String agreementKind) { + this.agreementKind = agreementKind; + } + + public String getAgreementKindName() { + return agreementKindName; + } + + public void setAgreementKindName(String agreementKindName) { + this.agreementKindName = agreementKindName; + } + + public String getAgreementName() { + return agreementName; + } + + public void setAgreementName(String agreementName) { + this.agreementName = agreementName; + } + + public String getAgreementNo() { + return agreementNo; + } + + public void setAgreementNo(String agreementNo) { + this.agreementNo = agreementNo; + } + + public String getAgreementSource() { + return agreementSource; + } + + public void setAgreementSource(String agreementSource) { + this.agreementSource = agreementSource; + } + + public String getAgreementSourceName() { + return agreementSourceName; + } + + public void setAgreementSourceName(String agreementSourceName) { + this.agreementSourceName = agreementSourceName; + } + + public String getAgreementStartDate() { + return agreementStartDate; + } + + public void setAgreementStartDate(String agreementStartDate) { + this.agreementStartDate = agreementStartDate; + } + + public String getAgreementType() { + return agreementType; + } + + public void setAgreementType(String agreementType) { + this.agreementType = agreementType; + } + + public String getAgreementTypeName() { + return agreementTypeName; + } + + public void setAgreementTypeName(String agreementTypeName) { + this.agreementTypeName = agreementTypeName; + } + + public String getApprovalStatus() { + return approvalStatus; + } + + public void setApprovalStatus(String approvalStatus) { + this.approvalStatus = approvalStatus; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getCreateUser() { + return createUser; + } + + public void setCreateUser(String createUser) { + this.createUser = createUser; + } + + public String getCreateUserName() { + return createUserName; + } + + public void setCreateUserName(String createUserName) { + this.createUserName = createUserName; + } + + public String getCustomerId() { + return customerId; + } + + public void setCustomerId(String customerId) { + this.customerId = customerId; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDirector() { + return director; + } + + public void setDirector(String director) { + this.director = director; + } + + public String getEstimateSignDate() { + return estimateSignDate; + } + + public void setEstimateSignDate(String estimateSignDate) { + this.estimateSignDate = estimateSignDate; + } + + public String getFirstParty() { + return firstParty; + } + + public void setFirstParty(String firstParty) { + this.firstParty = firstParty; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getIsDel() { + return isDel; + } + + public void setIsDel(String isDel) { + this.isDel = isDel; + } + + public String getMinioFileName() { + return minioFileName; + } + + public void setMinioFileName(String minioFileName) { + this.minioFileName = minioFileName; + } + + public String getOrderIdList() { + return orderIdList; + } + + public void setOrderIdList(String orderIdList) { + this.orderIdList = orderIdList; + } + + public String getOrderList() { + return orderList; + } + + public void setOrderList(String orderList) { + this.orderList = orderList; + } + + public String getPaymentList() { + return paymentList; + } + + public void setPaymentList(String paymentList) { + this.paymentList = paymentList; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + public String getSecondParty() { + return secondParty; + } + + public void setSecondParty(String secondParty) { + this.secondParty = secondParty; + } + + 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; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt index 85756b0..36059c5 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt @@ -65,4 +65,8 @@ const val USER_ID = "userId" const val PRIVACY_CHECK_BOX = "privacyCheckBox" const val PUSH_SETTING = "pushSetting" + const val METERAGE_TRAIN_FORM_ID = "jlglpxjhsp" + const val STANDARD_FILE_FORM_ID = "jlglwjsp" + const val CERTIFICATE_REPORT_FORM_ID = "ywglzsbg" + const val CONTRACT_FORM_ID = "cwczht" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt b/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt index da58079..99f3bb1 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt @@ -2,37 +2,42 @@ object SearchType { /** + * 首页模糊搜索 + * */ + const val All = "0" + + /** * 搜索仪器设备 * */ - const val Equipment = "0" + const val Equipment = "1" /** * 搜索标准装置 * */ - const val StandardDevice = "1" + const val StandardDevice = "2" /** * 搜索委托书需求 * */ - const val Entrust = "2" + const val Entrust = "3" /** * 搜索能力 * */ - const val Capability = "3" + const val Capability = "4" /** * 搜索计量培训 * */ - const val MeterageTrain = "4" + const val MeterageTrain = "5" /** * 搜索客户 * */ - const val Customer = "5" + const val Customer = "6" /** - * 首页模糊搜索 + * 搜索仪器设备 * */ - const val All = "6" + const val Contract = "7" } 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 3bd698a..bc4d694 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 @@ -446,4 +446,15 @@ @QueryMap limit: Map, @QueryMap offset: Map ): String + + /** + * 合同列表 + */ + @POST("/finance/agreement/listPage") + suspend fun getContractList( + @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 9e7556b..1aaabee 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 @@ -459,7 +459,6 @@ effectiveCompany: String, trainStartTime: String, trainEndTime: String, - formId: String, ids: Array, offset: Int ): String { @@ -473,7 +472,7 @@ param.addProperty("effectiveCompany", effectiveCompany) param.addProperty("trainStartTime", trainStartTime) param.addProperty("trainEndTime", trainEndTime) - param.addProperty("formId", formId) + param.addProperty("formId", LocaleConstant.METERAGE_TRAIN_FORM_ID) param.add("ids", gson.toJsonTree(ids, typeToken).asJsonArray) val requestBody = param.toString().toRequestBody( @@ -843,7 +842,7 @@ offset: Int ): String { val param = JsonObject() - param.addProperty("formId", "jlglwjsp") + param.addProperty("formId", LocaleConstant.STANDARD_FILE_FORM_ID) param.addProperty("fileType", fileType) param.addProperty("fileName", fileName) param.addProperty("fileNo", fileNo) @@ -884,7 +883,7 @@ offset: Int ): String { val param = JsonObject() - param.addProperty("formId", "ywglzsbg") + param.addProperty("formId", LocaleConstant.CERTIFICATE_REPORT_FORM_ID) param.addProperty("approvalStatus", approvalStatus) param.addProperty("certificateReportCode", certificateReportCode) param.addProperty("customerName", customerName) @@ -925,7 +924,7 @@ */ suspend fun submit(id: String): String { val param = JsonObject() - param.addProperty("formId", "ywglzsbg") + param.addProperty("formId", LocaleConstant.CERTIFICATE_REPORT_FORM_ID) param.addProperty("id", id) val requestBody = param.toString().toRequestBody( "application/json;charset=UTF-8".toMediaType() @@ -1009,4 +1008,47 @@ AuthenticationHelper.token!!, requestBody, limitMap, offsetMap ) } + + /** + * 合同列表 + */ + suspend fun getContractList( + customerId: String, + agreementKind: String, + agreementName: String, + agreementType: String, + agreementNo: String, + estimateSignStartDate: String, + estimateSignEndDate: String, + firstParty: String, + status: String, + ids: Array, + offset: Int + ): String { + val param = JsonObject() + param.addProperty("customerId", customerId) + param.addProperty("agreementKind", agreementKind) + param.addProperty("agreementName", agreementName) + param.addProperty("agreementType", agreementType) + param.addProperty("agreementNo", agreementNo) + param.addProperty("estimateSignStartDate", estimateSignStartDate) + param.addProperty("estimateSignEndDate", estimateSignEndDate) + param.addProperty("firstParty", firstParty) + param.addProperty("formId", LocaleConstant.CONTRACT_FORM_ID) + param.addProperty("status", status) + param.add("ids", gson.toJsonTree(ids, typeToken).asJsonArray) + + val requestBody = param.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + + val limitMap = HashMap() + limitMap["limit"] = LocaleConstant.PAGE_LIMIT + + val offsetMap = HashMap() + offsetMap["offset"] = offset + return api.getContractList( + AuthenticationHelper.token!!, requestBody, limitMap, offsetMap + ) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/ContractInvoiceActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/ContractInvoiceActivity.kt new file mode 100644 index 0000000..96148a3 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/home/ContractInvoiceActivity.kt @@ -0,0 +1,192 @@ +package com.casic.xz.meterage.view.home + +import android.content.Context +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration +import com.casic.xz.meterage.R +import com.casic.xz.meterage.base.ApplicationBaseActivity +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.model.ContractListModel +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.view.search.SearchContractActivity +import com.casic.xz.meterage.vm.ContractInvoiceViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +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_contract_invoice.* +import kotlinx.android.synthetic.main.include_empty_view.* +import kotlinx.android.synthetic.main.include_search_title.* + +class ContractInvoiceActivity : ApplicationBaseActivity() { + + private var context: Context = this@ContractInvoiceActivity + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var contractViewModel: ContractInvoiceViewModel + private lateinit var contractAdapter: NormalRecyclerAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.activity_contract_invoice + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "合同发票" + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + contractViewModel = ViewModelProvider(this)[ContractInvoiceViewModel::class.java] + contractViewModel.contractList.observe(this) { + if (it.code == 200) { + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + contractLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows) + contractLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023041001) + } + } + } + + override fun observeRequestState() { + contractViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + rightOperateView.setOnClickListener { + navigatePageTo() + } + + contractLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getContractListByPage() + } + + contractLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getContractListByPage() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + getContractListByPage() + } + + private fun getContractListByPage() { + contractViewModel.getContractList( + "", + "", + "", + "", + "", + "1", + "", + "", + "", + arrayOf(), + pageIndex + ) + } + + private val callback = Handler.Callback { + when (it.what) { + 2023041001 -> { + if (isRefresh || isLoadMore) { + contractAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无合同") { + pageIndex = 1 + getContractListByPage() + } + } else { + emptyView!!.hide() + contractAdapter = object : + NormalRecyclerAdapter( + R.layout.item_contract_rv_l, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, + position: Int, + item: ContractListModel.DataModel.RowsModel + ) { + viewHolder.setText(R.id.contractNameView, item.agreementName) + .setText(R.id.contractStateView, item.statusName) + .setText(R.id.contractCodeView, "合同编号:${item.agreementNo}") + .setText(R.id.firstPartNameView, "甲方单位:${item.firstParty}") + .setText( + R.id.startDateView, + "签订日期:${item.estimateSignDate.formatToYearMonthDay()}" + ) + + if (item.statusName.contains("已完成")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.green.convertColor(context) + ) + } else if (item.statusName.contains("未完成")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.red.convertColor(context) + ) + } else if (item.statusName.contains("已废止")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.gray.convertColor(context) + ) + } + } + } + contractRecyclerView.addItemDecoration( + DividerItemDecoration(this, DividerItemDecoration.VERTICAL) + ) + contractRecyclerView.adapter = contractAdapter + contractAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, t: ContractListModel.DataModel.RowsModel + ) { +// navigatePageTo(t.id) + } + }) + } + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt index 373c386..078f497 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt @@ -117,7 +117,6 @@ "", "", "", - "jlglpxjhsp", arrayOf(), pageIndex ) diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt index 16bcd38..92e256d 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_capability.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* /** @@ -93,7 +93,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_capability + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractActivity.kt new file mode 100644 index 0000000..17f6cda --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractActivity.kt @@ -0,0 +1,113 @@ +package com.casic.xz.meterage.view.search + +import android.view.LayoutInflater +import android.view.View +import com.casic.xz.meterage.R +import com.casic.xz.meterage.base.ApplicationBaseActivity +import com.casic.xz.meterage.bean.SearchHistoryBean +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.utils.DataBaseManager +import com.casic.xz.meterage.utils.SearchType +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton +import com.zhy.view.flowlayout.FlowLayout +import com.zhy.view.flowlayout.TagAdapter +import kotlinx.android.synthetic.main.activity_search_history.* +import kotlinx.android.synthetic.main.include_search_input_title.* + +/** + * 搜索合同 + * */ +class SearchContractActivity : ApplicationBaseActivity() { + + private lateinit var inflater: LayoutInflater + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var historyAdapter: TagAdapter + private var dataBeans: MutableList = ArrayList() + private var isRefresh = false + + override fun initLayoutView(): Int = R.layout.activity_search_history + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + inputView.hint = "请输入合同名称或者编号查询" + } + + override fun initData() { + inflater = LayoutInflater.from(this) + weakReferenceHandler = WeakReferenceHandler { + if (it.what == 2023041001) { + if (isRefresh) { + historyAdapter.notifyDataChanged() + } else { + historyAdapter = object : TagAdapter(dataBeans) { + override fun getView( + parent: FlowLayout?, position: Int, bean: SearchHistoryBean + ): View { + val tagView = inflater.inflate( + R.layout.item_search_rv_l, tagFlowLayout, false + ) as QMUIRoundButton + tagView.text = bean.keywords + return tagView + } + } + tagFlowLayout.adapter = historyAdapter + tagFlowLayout.setOnTagClickListener { _, position, _ -> + inputView.setText(dataBeans[position].keywords) + navigatePageTo(inputView.text.toString()) + true + } + } + } + true + } + } + + override fun onResume() { + super.onResume() + dataBeans = DataBaseManager.get.queryHistoryByType(SearchType.Contract) + weakReferenceHandler.sendEmptyMessage(2023041001) + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + searchTextView.setOnClickListener { + if (!inputView.text.isNullOrBlank()) { + DataBaseManager.get.addSearchHistory( + inputView.text.toString(), SearchType.Contract + ) + } + + navigatePageTo(inputView.text.toString()) + } + + deleteHistoryView.setOnClickListener { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("确定将所有搜索记录删除?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + + } + + override fun onConfirmClick() { + DataBaseManager.get.deleteHistoryByType(SearchType.Contract) + dataBeans.clear() + historyAdapter.notifyDataChanged() + } + }).build().show() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractResultActivity.kt new file mode 100644 index 0000000..5096b88 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractResultActivity.kt @@ -0,0 +1,210 @@ +package com.casic.xz.meterage.view.search + +import android.content.Context +import android.os.Handler +import androidx.core.text.isDigitsOnly +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration +import com.casic.xz.meterage.R +import com.casic.xz.meterage.base.ApplicationBaseActivity +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.model.ContractListModel +import com.casic.xz.meterage.utils.AppMemoryCache +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.vm.ContractInvoiceViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_search_contract_reasult.* +import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class SearchContractResultActivity : ApplicationBaseActivity() { + + private var context: Context = this@SearchContractResultActivity + private lateinit var param: String + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var contractViewModel: ContractInvoiceViewModel + private lateinit var contractAdapter: NormalRecyclerAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.activity_search_contract_reasult + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "查询结果" + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + getContractListByPage() + } + + override fun initData() { + param = intent.getStringExtra(Constant.INTENT_PARAM)!! + + weakReferenceHandler = WeakReferenceHandler(callback) + contractViewModel = ViewModelProvider(this)[ContractInvoiceViewModel::class.java] + contractViewModel.contractList.observe(this) { + if (it.code == 200) { + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + contractLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows) + contractLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023041002) + } + } + } + + override fun observeRequestState() { + contractViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + + contractLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getContractListByPage() + } + + contractLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getContractListByPage() + } + } + + private fun getContractListByPage() { + if (param.isDigitsOnly()) { + contractViewModel.getContractList( + "", "", "", "", param, + "1", "", "", "", arrayOf(), + pageIndex + ) + } else { + if (param.length < 4) { + //输入参数长度小于4,默认查名称 + contractViewModel.getContractList( + "", "", param, "", "", + "1", "", "", "", arrayOf(), + pageIndex + ) + } else { + if (AppMemoryCache.prefixCode.contains(param.substring(0, 4))) { + contractViewModel.getContractList( + "", "", "", "", param, + "1", "", "", "", arrayOf(), + pageIndex + ) + } else { + contractViewModel.getContractList( + "", "", param, "", "", + "1", "", "", "", arrayOf(), + pageIndex + ) + } + } + } + } + + private val callback = Handler.Callback { + when (it.what) { + 2023041002 -> { + if (isRefresh || isLoadMore) { + contractAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无合同") { + pageIndex = 1 + getContractListByPage() + } + } else { + emptyView!!.hide() + contractAdapter = object : + NormalRecyclerAdapter( + R.layout.item_contract_rv_l, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, + position: Int, + item: ContractListModel.DataModel.RowsModel + ) { + viewHolder.setText(R.id.contractNameView, item.agreementName) + .setText(R.id.contractStateView, item.statusName) + .setText(R.id.contractCodeView, "合同编号:${item.agreementNo}") + .setText(R.id.firstPartNameView, "甲方单位:${item.firstParty}") + .setText( + R.id.startDateView, + "签订日期:${item.estimateSignDate.formatToYearMonthDay()}" + ) + + if (item.statusName.contains("已完成")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.green.convertColor(context) + ) + } else if (item.statusName.contains("未完成")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.red.convertColor(context) + ) + } else if (item.statusName.contains("已废止")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.gray.convertColor(context) + ) + } + } + } + contractRecyclerView.addItemDecoration( + DividerItemDecoration(this, DividerItemDecoration.VERTICAL) + ) + contractRecyclerView.adapter = contractAdapter + contractAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, t: ContractListModel.DataModel.RowsModel + ) { +// navigatePageTo(t.id) + } + }) + } + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt index 08d6bd2..3430e24 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_customer.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* /** @@ -93,7 +93,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_customer + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustActivity.kt index 2bff498..159d51d 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_entrust.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* /** @@ -93,7 +93,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_entrust + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt index b105378..f9b1076 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_equipment.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* @@ -100,7 +100,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_equipment + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt index 6dba78b..0a8c595 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_global.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* class SearchGlobalActivity : ApplicationBaseActivity() { @@ -90,7 +90,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_global + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainActivity.kt index 56fda90..da94e79 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_meterage_train.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* /** @@ -93,7 +93,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_meterage_train + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt index 447c483..cebdace 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt @@ -119,29 +119,25 @@ if (param.isDigitsOnly()) { meterageTrainViewModel.getMeterageTrainList( "", "", "", "", param, "", - "", "", "", "jlglpxjhsp", arrayOf(), - pageIndex + "", "", "", arrayOf(), pageIndex ) } else { if (param.length < 4) { //输入参数长度小于4,默认查名称 meterageTrainViewModel.getMeterageTrainList( "", "", "", param, "", "", - "", "", "", "jlglpxjhsp", arrayOf(), - pageIndex + "", "", "", arrayOf(), pageIndex ) } else { if (AppMemoryCache.prefixCode.contains(param.substring(0, 4))) { meterageTrainViewModel.getMeterageTrainList( "", "", "", "", param, "", - "", "", "", "jlglpxjhsp", arrayOf(), - pageIndex + "", "", "", arrayOf(), pageIndex ) } else { meterageTrainViewModel.getMeterageTrainList( "", "", "", param, "", "", - "", "", "", "jlglpxjhsp", arrayOf(), - pageIndex + "", "", "", arrayOf(), pageIndex ) } } diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchStandardDeviceActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchStandardDeviceActivity.kt index cf96d0d..39b1388 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchStandardDeviceActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchStandardDeviceActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_standard_device.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* /** @@ -99,7 +99,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_standard_device + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/vm/ContractInvoiceViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/ContractInvoiceViewModel.kt new file mode 100644 index 0000000..99b5871 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/vm/ContractInvoiceViewModel.kt @@ -0,0 +1,66 @@ +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.ContractListModel +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 ContractInvoiceViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } + val contractList = MutableLiveData() + + fun getContractList( + customerId: String, + agreementKind: String, + agreementName: String, + agreementType: String, + agreementNo: String, + estimateSignStartDate: String, + estimateSignEndDate: String, + firstParty: String, + status: String, + ids: Array, + offset: Int + ) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.getContractList( + customerId, + agreementKind, + agreementName, + agreementType, + agreementNo, + estimateSignStartDate, + estimateSignEndDate, + firstParty, + status, + ids, + offset + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + contractList.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()) + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/vm/MeterageTrainViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/MeterageTrainViewModel.kt index b1bad75..43e4632 100644 --- a/app/src/main/java/com/casic/xz/meterage/vm/MeterageTrainViewModel.kt +++ b/app/src/main/java/com/casic/xz/meterage/vm/MeterageTrainViewModel.kt @@ -37,7 +37,6 @@ effectiveCompany: String, trainStartTime: String, trainEndTime: String, - formId: String, ids: Array, offset: Int ) = launch({ @@ -52,7 +51,6 @@ effectiveCompany, trainStartTime, trainEndTime, - formId, ids, offset ) diff --git a/app/src/main/res/layout/activity_contract_invoice.xml b/app/src/main/res/layout/activity_contract_invoice.xml new file mode 100644 index 0000000..a926c5b --- /dev/null +++ b/app/src/main/res/layout/activity_contract_invoice.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_search_capability.xml b/app/src/main/res/layout/activity_search_capability.xml deleted file mode 100644 index 93ed590..0000000 --- a/app/src/main/res/layout/activity_search_capability.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/activity_search_contract_reasult.xml b/app/src/main/res/layout/activity_search_contract_reasult.xml new file mode 100644 index 0000000..bcd2ad9 --- /dev/null +++ b/app/src/main/res/layout/activity_search_contract_reasult.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_search_customer.xml b/app/src/main/res/layout/activity_search_customer.xml deleted file mode 100644 index 93ed590..0000000 --- a/app/src/main/res/layout/activity_search_customer.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/activity_search_entrust.xml b/app/src/main/res/layout/activity_search_entrust.xml deleted file mode 100644 index 93ed590..0000000 --- a/app/src/main/res/layout/activity_search_entrust.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/activity_search_equipment.xml b/app/src/main/res/layout/activity_search_equipment.xml deleted file mode 100644 index 93ed590..0000000 --- a/app/src/main/res/layout/activity_search_equipment.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 9fc7c01..78d7828 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -71,6 +71,7 @@ + @@ -85,6 +86,8 @@ + + diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt index 71fe5a8..ad81434 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt @@ -170,7 +170,7 @@ "标准规范" -> requireContext().navigatePageTo() "能力列表" -> requireContext().navigatePageTo() "计量培训" -> requireContext().navigatePageTo() -// "合同发票" -> requireContext().navigatePageTo() + "合同发票" -> requireContext().navigatePageTo() // "业务统计" -> requireContext().navigatePageTo() "客户列表" -> requireContext().navigatePageTo() // "外场检测" -> requireContext().navigatePageTo() diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt index b47cb32..b12a0bf 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt @@ -184,7 +184,7 @@ requireContext().navigatePageTo() } - //TODO 未实现 + //TODO 通过接口修改数据库字段实现 pushSettingSwitch.setOnCheckedChangeListener { _, isChecked -> SaveKeyValues.putValue(LocaleConstant.PUSH_SETTING, isChecked) if (isChecked) { diff --git a/app/src/main/java/com/casic/xz/meterage/model/ContractListModel.java b/app/src/main/java/com/casic/xz/meterage/model/ContractListModel.java new file mode 100644 index 0000000..111ff52 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/model/ContractListModel.java @@ -0,0 +1,364 @@ +package com.casic.xz.meterage.model; + +import java.util.List; + +public class ContractListModel { + + 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 agreementAmount; + private String agreementEndDate; + private String agreementImportantContent; + private String agreementKind; + private String agreementKindName; + private String agreementName; + private String agreementNo; + private String agreementSource; + private String agreementSourceName; + private String agreementStartDate; + private String agreementType; + private String agreementTypeName; + private String approvalStatus; + private String createTime; + private String createUser; + private String createUserName; + private String customerId; + private String deptId; + private String deptName; + private String director; + private String estimateSignDate; + private String firstParty; + private String id; + private String isDel; + private String minioFileName; + private String orderIdList; + private String orderList; + private String paymentList; + private String processId; + private String remark; + private String secondParty; + private String status; + private String statusName; + private String updateTime; + + public String getAgreementAmount() { + return agreementAmount; + } + + public void setAgreementAmount(String agreementAmount) { + this.agreementAmount = agreementAmount; + } + + public String getAgreementEndDate() { + return agreementEndDate; + } + + public void setAgreementEndDate(String agreementEndDate) { + this.agreementEndDate = agreementEndDate; + } + + public String getAgreementImportantContent() { + return agreementImportantContent; + } + + public void setAgreementImportantContent(String agreementImportantContent) { + this.agreementImportantContent = agreementImportantContent; + } + + public String getAgreementKind() { + return agreementKind; + } + + public void setAgreementKind(String agreementKind) { + this.agreementKind = agreementKind; + } + + public String getAgreementKindName() { + return agreementKindName; + } + + public void setAgreementKindName(String agreementKindName) { + this.agreementKindName = agreementKindName; + } + + public String getAgreementName() { + return agreementName; + } + + public void setAgreementName(String agreementName) { + this.agreementName = agreementName; + } + + public String getAgreementNo() { + return agreementNo; + } + + public void setAgreementNo(String agreementNo) { + this.agreementNo = agreementNo; + } + + public String getAgreementSource() { + return agreementSource; + } + + public void setAgreementSource(String agreementSource) { + this.agreementSource = agreementSource; + } + + public String getAgreementSourceName() { + return agreementSourceName; + } + + public void setAgreementSourceName(String agreementSourceName) { + this.agreementSourceName = agreementSourceName; + } + + public String getAgreementStartDate() { + return agreementStartDate; + } + + public void setAgreementStartDate(String agreementStartDate) { + this.agreementStartDate = agreementStartDate; + } + + public String getAgreementType() { + return agreementType; + } + + public void setAgreementType(String agreementType) { + this.agreementType = agreementType; + } + + public String getAgreementTypeName() { + return agreementTypeName; + } + + public void setAgreementTypeName(String agreementTypeName) { + this.agreementTypeName = agreementTypeName; + } + + public String getApprovalStatus() { + return approvalStatus; + } + + public void setApprovalStatus(String approvalStatus) { + this.approvalStatus = approvalStatus; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getCreateUser() { + return createUser; + } + + public void setCreateUser(String createUser) { + this.createUser = createUser; + } + + public String getCreateUserName() { + return createUserName; + } + + public void setCreateUserName(String createUserName) { + this.createUserName = createUserName; + } + + public String getCustomerId() { + return customerId; + } + + public void setCustomerId(String customerId) { + this.customerId = customerId; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDirector() { + return director; + } + + public void setDirector(String director) { + this.director = director; + } + + public String getEstimateSignDate() { + return estimateSignDate; + } + + public void setEstimateSignDate(String estimateSignDate) { + this.estimateSignDate = estimateSignDate; + } + + public String getFirstParty() { + return firstParty; + } + + public void setFirstParty(String firstParty) { + this.firstParty = firstParty; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getIsDel() { + return isDel; + } + + public void setIsDel(String isDel) { + this.isDel = isDel; + } + + public String getMinioFileName() { + return minioFileName; + } + + public void setMinioFileName(String minioFileName) { + this.minioFileName = minioFileName; + } + + public String getOrderIdList() { + return orderIdList; + } + + public void setOrderIdList(String orderIdList) { + this.orderIdList = orderIdList; + } + + public String getOrderList() { + return orderList; + } + + public void setOrderList(String orderList) { + this.orderList = orderList; + } + + public String getPaymentList() { + return paymentList; + } + + public void setPaymentList(String paymentList) { + this.paymentList = paymentList; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + public String getSecondParty() { + return secondParty; + } + + public void setSecondParty(String secondParty) { + this.secondParty = secondParty; + } + + 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; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt index 85756b0..36059c5 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt @@ -65,4 +65,8 @@ const val USER_ID = "userId" const val PRIVACY_CHECK_BOX = "privacyCheckBox" const val PUSH_SETTING = "pushSetting" + const val METERAGE_TRAIN_FORM_ID = "jlglpxjhsp" + const val STANDARD_FILE_FORM_ID = "jlglwjsp" + const val CERTIFICATE_REPORT_FORM_ID = "ywglzsbg" + const val CONTRACT_FORM_ID = "cwczht" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt b/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt index da58079..99f3bb1 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt @@ -2,37 +2,42 @@ object SearchType { /** + * 首页模糊搜索 + * */ + const val All = "0" + + /** * 搜索仪器设备 * */ - const val Equipment = "0" + const val Equipment = "1" /** * 搜索标准装置 * */ - const val StandardDevice = "1" + const val StandardDevice = "2" /** * 搜索委托书需求 * */ - const val Entrust = "2" + const val Entrust = "3" /** * 搜索能力 * */ - const val Capability = "3" + const val Capability = "4" /** * 搜索计量培训 * */ - const val MeterageTrain = "4" + const val MeterageTrain = "5" /** * 搜索客户 * */ - const val Customer = "5" + const val Customer = "6" /** - * 首页模糊搜索 + * 搜索仪器设备 * */ - const val All = "6" + const val Contract = "7" } 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 3bd698a..bc4d694 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 @@ -446,4 +446,15 @@ @QueryMap limit: Map, @QueryMap offset: Map ): String + + /** + * 合同列表 + */ + @POST("/finance/agreement/listPage") + suspend fun getContractList( + @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 9e7556b..1aaabee 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 @@ -459,7 +459,6 @@ effectiveCompany: String, trainStartTime: String, trainEndTime: String, - formId: String, ids: Array, offset: Int ): String { @@ -473,7 +472,7 @@ param.addProperty("effectiveCompany", effectiveCompany) param.addProperty("trainStartTime", trainStartTime) param.addProperty("trainEndTime", trainEndTime) - param.addProperty("formId", formId) + param.addProperty("formId", LocaleConstant.METERAGE_TRAIN_FORM_ID) param.add("ids", gson.toJsonTree(ids, typeToken).asJsonArray) val requestBody = param.toString().toRequestBody( @@ -843,7 +842,7 @@ offset: Int ): String { val param = JsonObject() - param.addProperty("formId", "jlglwjsp") + param.addProperty("formId", LocaleConstant.STANDARD_FILE_FORM_ID) param.addProperty("fileType", fileType) param.addProperty("fileName", fileName) param.addProperty("fileNo", fileNo) @@ -884,7 +883,7 @@ offset: Int ): String { val param = JsonObject() - param.addProperty("formId", "ywglzsbg") + param.addProperty("formId", LocaleConstant.CERTIFICATE_REPORT_FORM_ID) param.addProperty("approvalStatus", approvalStatus) param.addProperty("certificateReportCode", certificateReportCode) param.addProperty("customerName", customerName) @@ -925,7 +924,7 @@ */ suspend fun submit(id: String): String { val param = JsonObject() - param.addProperty("formId", "ywglzsbg") + param.addProperty("formId", LocaleConstant.CERTIFICATE_REPORT_FORM_ID) param.addProperty("id", id) val requestBody = param.toString().toRequestBody( "application/json;charset=UTF-8".toMediaType() @@ -1009,4 +1008,47 @@ AuthenticationHelper.token!!, requestBody, limitMap, offsetMap ) } + + /** + * 合同列表 + */ + suspend fun getContractList( + customerId: String, + agreementKind: String, + agreementName: String, + agreementType: String, + agreementNo: String, + estimateSignStartDate: String, + estimateSignEndDate: String, + firstParty: String, + status: String, + ids: Array, + offset: Int + ): String { + val param = JsonObject() + param.addProperty("customerId", customerId) + param.addProperty("agreementKind", agreementKind) + param.addProperty("agreementName", agreementName) + param.addProperty("agreementType", agreementType) + param.addProperty("agreementNo", agreementNo) + param.addProperty("estimateSignStartDate", estimateSignStartDate) + param.addProperty("estimateSignEndDate", estimateSignEndDate) + param.addProperty("firstParty", firstParty) + param.addProperty("formId", LocaleConstant.CONTRACT_FORM_ID) + param.addProperty("status", status) + param.add("ids", gson.toJsonTree(ids, typeToken).asJsonArray) + + val requestBody = param.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + + val limitMap = HashMap() + limitMap["limit"] = LocaleConstant.PAGE_LIMIT + + val offsetMap = HashMap() + offsetMap["offset"] = offset + return api.getContractList( + AuthenticationHelper.token!!, requestBody, limitMap, offsetMap + ) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/ContractInvoiceActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/ContractInvoiceActivity.kt new file mode 100644 index 0000000..96148a3 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/home/ContractInvoiceActivity.kt @@ -0,0 +1,192 @@ +package com.casic.xz.meterage.view.home + +import android.content.Context +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration +import com.casic.xz.meterage.R +import com.casic.xz.meterage.base.ApplicationBaseActivity +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.model.ContractListModel +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.view.search.SearchContractActivity +import com.casic.xz.meterage.vm.ContractInvoiceViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +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_contract_invoice.* +import kotlinx.android.synthetic.main.include_empty_view.* +import kotlinx.android.synthetic.main.include_search_title.* + +class ContractInvoiceActivity : ApplicationBaseActivity() { + + private var context: Context = this@ContractInvoiceActivity + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var contractViewModel: ContractInvoiceViewModel + private lateinit var contractAdapter: NormalRecyclerAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.activity_contract_invoice + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "合同发票" + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + contractViewModel = ViewModelProvider(this)[ContractInvoiceViewModel::class.java] + contractViewModel.contractList.observe(this) { + if (it.code == 200) { + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + contractLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows) + contractLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023041001) + } + } + } + + override fun observeRequestState() { + contractViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + rightOperateView.setOnClickListener { + navigatePageTo() + } + + contractLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getContractListByPage() + } + + contractLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getContractListByPage() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + getContractListByPage() + } + + private fun getContractListByPage() { + contractViewModel.getContractList( + "", + "", + "", + "", + "", + "1", + "", + "", + "", + arrayOf(), + pageIndex + ) + } + + private val callback = Handler.Callback { + when (it.what) { + 2023041001 -> { + if (isRefresh || isLoadMore) { + contractAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无合同") { + pageIndex = 1 + getContractListByPage() + } + } else { + emptyView!!.hide() + contractAdapter = object : + NormalRecyclerAdapter( + R.layout.item_contract_rv_l, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, + position: Int, + item: ContractListModel.DataModel.RowsModel + ) { + viewHolder.setText(R.id.contractNameView, item.agreementName) + .setText(R.id.contractStateView, item.statusName) + .setText(R.id.contractCodeView, "合同编号:${item.agreementNo}") + .setText(R.id.firstPartNameView, "甲方单位:${item.firstParty}") + .setText( + R.id.startDateView, + "签订日期:${item.estimateSignDate.formatToYearMonthDay()}" + ) + + if (item.statusName.contains("已完成")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.green.convertColor(context) + ) + } else if (item.statusName.contains("未完成")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.red.convertColor(context) + ) + } else if (item.statusName.contains("已废止")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.gray.convertColor(context) + ) + } + } + } + contractRecyclerView.addItemDecoration( + DividerItemDecoration(this, DividerItemDecoration.VERTICAL) + ) + contractRecyclerView.adapter = contractAdapter + contractAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, t: ContractListModel.DataModel.RowsModel + ) { +// navigatePageTo(t.id) + } + }) + } + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt index 373c386..078f497 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt @@ -117,7 +117,6 @@ "", "", "", - "jlglpxjhsp", arrayOf(), pageIndex ) diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt index 16bcd38..92e256d 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_capability.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* /** @@ -93,7 +93,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_capability + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractActivity.kt new file mode 100644 index 0000000..17f6cda --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractActivity.kt @@ -0,0 +1,113 @@ +package com.casic.xz.meterage.view.search + +import android.view.LayoutInflater +import android.view.View +import com.casic.xz.meterage.R +import com.casic.xz.meterage.base.ApplicationBaseActivity +import com.casic.xz.meterage.bean.SearchHistoryBean +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.utils.DataBaseManager +import com.casic.xz.meterage.utils.SearchType +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton +import com.zhy.view.flowlayout.FlowLayout +import com.zhy.view.flowlayout.TagAdapter +import kotlinx.android.synthetic.main.activity_search_history.* +import kotlinx.android.synthetic.main.include_search_input_title.* + +/** + * 搜索合同 + * */ +class SearchContractActivity : ApplicationBaseActivity() { + + private lateinit var inflater: LayoutInflater + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var historyAdapter: TagAdapter + private var dataBeans: MutableList = ArrayList() + private var isRefresh = false + + override fun initLayoutView(): Int = R.layout.activity_search_history + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + inputView.hint = "请输入合同名称或者编号查询" + } + + override fun initData() { + inflater = LayoutInflater.from(this) + weakReferenceHandler = WeakReferenceHandler { + if (it.what == 2023041001) { + if (isRefresh) { + historyAdapter.notifyDataChanged() + } else { + historyAdapter = object : TagAdapter(dataBeans) { + override fun getView( + parent: FlowLayout?, position: Int, bean: SearchHistoryBean + ): View { + val tagView = inflater.inflate( + R.layout.item_search_rv_l, tagFlowLayout, false + ) as QMUIRoundButton + tagView.text = bean.keywords + return tagView + } + } + tagFlowLayout.adapter = historyAdapter + tagFlowLayout.setOnTagClickListener { _, position, _ -> + inputView.setText(dataBeans[position].keywords) + navigatePageTo(inputView.text.toString()) + true + } + } + } + true + } + } + + override fun onResume() { + super.onResume() + dataBeans = DataBaseManager.get.queryHistoryByType(SearchType.Contract) + weakReferenceHandler.sendEmptyMessage(2023041001) + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + searchTextView.setOnClickListener { + if (!inputView.text.isNullOrBlank()) { + DataBaseManager.get.addSearchHistory( + inputView.text.toString(), SearchType.Contract + ) + } + + navigatePageTo(inputView.text.toString()) + } + + deleteHistoryView.setOnClickListener { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("确定将所有搜索记录删除?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + + } + + override fun onConfirmClick() { + DataBaseManager.get.deleteHistoryByType(SearchType.Contract) + dataBeans.clear() + historyAdapter.notifyDataChanged() + } + }).build().show() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractResultActivity.kt new file mode 100644 index 0000000..5096b88 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractResultActivity.kt @@ -0,0 +1,210 @@ +package com.casic.xz.meterage.view.search + +import android.content.Context +import android.os.Handler +import androidx.core.text.isDigitsOnly +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration +import com.casic.xz.meterage.R +import com.casic.xz.meterage.base.ApplicationBaseActivity +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.model.ContractListModel +import com.casic.xz.meterage.utils.AppMemoryCache +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.vm.ContractInvoiceViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_search_contract_reasult.* +import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class SearchContractResultActivity : ApplicationBaseActivity() { + + private var context: Context = this@SearchContractResultActivity + private lateinit var param: String + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var contractViewModel: ContractInvoiceViewModel + private lateinit var contractAdapter: NormalRecyclerAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.activity_search_contract_reasult + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "查询结果" + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + getContractListByPage() + } + + override fun initData() { + param = intent.getStringExtra(Constant.INTENT_PARAM)!! + + weakReferenceHandler = WeakReferenceHandler(callback) + contractViewModel = ViewModelProvider(this)[ContractInvoiceViewModel::class.java] + contractViewModel.contractList.observe(this) { + if (it.code == 200) { + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + contractLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows) + contractLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023041002) + } + } + } + + override fun observeRequestState() { + contractViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + + contractLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getContractListByPage() + } + + contractLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getContractListByPage() + } + } + + private fun getContractListByPage() { + if (param.isDigitsOnly()) { + contractViewModel.getContractList( + "", "", "", "", param, + "1", "", "", "", arrayOf(), + pageIndex + ) + } else { + if (param.length < 4) { + //输入参数长度小于4,默认查名称 + contractViewModel.getContractList( + "", "", param, "", "", + "1", "", "", "", arrayOf(), + pageIndex + ) + } else { + if (AppMemoryCache.prefixCode.contains(param.substring(0, 4))) { + contractViewModel.getContractList( + "", "", "", "", param, + "1", "", "", "", arrayOf(), + pageIndex + ) + } else { + contractViewModel.getContractList( + "", "", param, "", "", + "1", "", "", "", arrayOf(), + pageIndex + ) + } + } + } + } + + private val callback = Handler.Callback { + when (it.what) { + 2023041002 -> { + if (isRefresh || isLoadMore) { + contractAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无合同") { + pageIndex = 1 + getContractListByPage() + } + } else { + emptyView!!.hide() + contractAdapter = object : + NormalRecyclerAdapter( + R.layout.item_contract_rv_l, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, + position: Int, + item: ContractListModel.DataModel.RowsModel + ) { + viewHolder.setText(R.id.contractNameView, item.agreementName) + .setText(R.id.contractStateView, item.statusName) + .setText(R.id.contractCodeView, "合同编号:${item.agreementNo}") + .setText(R.id.firstPartNameView, "甲方单位:${item.firstParty}") + .setText( + R.id.startDateView, + "签订日期:${item.estimateSignDate.formatToYearMonthDay()}" + ) + + if (item.statusName.contains("已完成")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.green.convertColor(context) + ) + } else if (item.statusName.contains("未完成")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.red.convertColor(context) + ) + } else if (item.statusName.contains("已废止")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.gray.convertColor(context) + ) + } + } + } + contractRecyclerView.addItemDecoration( + DividerItemDecoration(this, DividerItemDecoration.VERTICAL) + ) + contractRecyclerView.adapter = contractAdapter + contractAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, t: ContractListModel.DataModel.RowsModel + ) { +// navigatePageTo(t.id) + } + }) + } + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt index 08d6bd2..3430e24 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_customer.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* /** @@ -93,7 +93,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_customer + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustActivity.kt index 2bff498..159d51d 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_entrust.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* /** @@ -93,7 +93,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_entrust + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt index b105378..f9b1076 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_equipment.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* @@ -100,7 +100,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_equipment + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt index 6dba78b..0a8c595 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_global.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* class SearchGlobalActivity : ApplicationBaseActivity() { @@ -90,7 +90,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_global + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainActivity.kt index 56fda90..da94e79 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_meterage_train.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* /** @@ -93,7 +93,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_meterage_train + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt index 447c483..cebdace 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt @@ -119,29 +119,25 @@ if (param.isDigitsOnly()) { meterageTrainViewModel.getMeterageTrainList( "", "", "", "", param, "", - "", "", "", "jlglpxjhsp", arrayOf(), - pageIndex + "", "", "", arrayOf(), pageIndex ) } else { if (param.length < 4) { //输入参数长度小于4,默认查名称 meterageTrainViewModel.getMeterageTrainList( "", "", "", param, "", "", - "", "", "", "jlglpxjhsp", arrayOf(), - pageIndex + "", "", "", arrayOf(), pageIndex ) } else { if (AppMemoryCache.prefixCode.contains(param.substring(0, 4))) { meterageTrainViewModel.getMeterageTrainList( "", "", "", "", param, "", - "", "", "", "jlglpxjhsp", arrayOf(), - pageIndex + "", "", "", arrayOf(), pageIndex ) } else { meterageTrainViewModel.getMeterageTrainList( "", "", "", param, "", "", - "", "", "", "jlglpxjhsp", arrayOf(), - pageIndex + "", "", "", arrayOf(), pageIndex ) } } diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchStandardDeviceActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchStandardDeviceActivity.kt index cf96d0d..39b1388 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchStandardDeviceActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchStandardDeviceActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_standard_device.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* /** @@ -99,7 +99,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_standard_device + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/vm/ContractInvoiceViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/ContractInvoiceViewModel.kt new file mode 100644 index 0000000..99b5871 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/vm/ContractInvoiceViewModel.kt @@ -0,0 +1,66 @@ +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.ContractListModel +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 ContractInvoiceViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } + val contractList = MutableLiveData() + + fun getContractList( + customerId: String, + agreementKind: String, + agreementName: String, + agreementType: String, + agreementNo: String, + estimateSignStartDate: String, + estimateSignEndDate: String, + firstParty: String, + status: String, + ids: Array, + offset: Int + ) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.getContractList( + customerId, + agreementKind, + agreementName, + agreementType, + agreementNo, + estimateSignStartDate, + estimateSignEndDate, + firstParty, + status, + ids, + offset + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + contractList.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()) + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/vm/MeterageTrainViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/MeterageTrainViewModel.kt index b1bad75..43e4632 100644 --- a/app/src/main/java/com/casic/xz/meterage/vm/MeterageTrainViewModel.kt +++ b/app/src/main/java/com/casic/xz/meterage/vm/MeterageTrainViewModel.kt @@ -37,7 +37,6 @@ effectiveCompany: String, trainStartTime: String, trainEndTime: String, - formId: String, ids: Array, offset: Int ) = launch({ @@ -52,7 +51,6 @@ effectiveCompany, trainStartTime, trainEndTime, - formId, ids, offset ) diff --git a/app/src/main/res/layout/activity_contract_invoice.xml b/app/src/main/res/layout/activity_contract_invoice.xml new file mode 100644 index 0000000..a926c5b --- /dev/null +++ b/app/src/main/res/layout/activity_contract_invoice.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_search_capability.xml b/app/src/main/res/layout/activity_search_capability.xml deleted file mode 100644 index 93ed590..0000000 --- a/app/src/main/res/layout/activity_search_capability.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/activity_search_contract_reasult.xml b/app/src/main/res/layout/activity_search_contract_reasult.xml new file mode 100644 index 0000000..bcd2ad9 --- /dev/null +++ b/app/src/main/res/layout/activity_search_contract_reasult.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_search_customer.xml b/app/src/main/res/layout/activity_search_customer.xml deleted file mode 100644 index 93ed590..0000000 --- a/app/src/main/res/layout/activity_search_customer.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/activity_search_entrust.xml b/app/src/main/res/layout/activity_search_entrust.xml deleted file mode 100644 index 93ed590..0000000 --- a/app/src/main/res/layout/activity_search_entrust.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/activity_search_equipment.xml b/app/src/main/res/layout/activity_search_equipment.xml deleted file mode 100644 index 93ed590..0000000 --- a/app/src/main/res/layout/activity_search_equipment.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/activity_search_global.xml b/app/src/main/res/layout/activity_search_global.xml deleted file mode 100644 index 93ed590..0000000 --- a/app/src/main/res/layout/activity_search_global.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 9fc7c01..78d7828 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -71,6 +71,7 @@ + @@ -85,6 +86,8 @@ + + diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt index 71fe5a8..ad81434 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt @@ -170,7 +170,7 @@ "标准规范" -> requireContext().navigatePageTo() "能力列表" -> requireContext().navigatePageTo() "计量培训" -> requireContext().navigatePageTo() -// "合同发票" -> requireContext().navigatePageTo() + "合同发票" -> requireContext().navigatePageTo() // "业务统计" -> requireContext().navigatePageTo() "客户列表" -> requireContext().navigatePageTo() // "外场检测" -> requireContext().navigatePageTo() diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt index b47cb32..b12a0bf 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt @@ -184,7 +184,7 @@ requireContext().navigatePageTo() } - //TODO 未实现 + //TODO 通过接口修改数据库字段实现 pushSettingSwitch.setOnCheckedChangeListener { _, isChecked -> SaveKeyValues.putValue(LocaleConstant.PUSH_SETTING, isChecked) if (isChecked) { diff --git a/app/src/main/java/com/casic/xz/meterage/model/ContractListModel.java b/app/src/main/java/com/casic/xz/meterage/model/ContractListModel.java new file mode 100644 index 0000000..111ff52 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/model/ContractListModel.java @@ -0,0 +1,364 @@ +package com.casic.xz.meterage.model; + +import java.util.List; + +public class ContractListModel { + + 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 agreementAmount; + private String agreementEndDate; + private String agreementImportantContent; + private String agreementKind; + private String agreementKindName; + private String agreementName; + private String agreementNo; + private String agreementSource; + private String agreementSourceName; + private String agreementStartDate; + private String agreementType; + private String agreementTypeName; + private String approvalStatus; + private String createTime; + private String createUser; + private String createUserName; + private String customerId; + private String deptId; + private String deptName; + private String director; + private String estimateSignDate; + private String firstParty; + private String id; + private String isDel; + private String minioFileName; + private String orderIdList; + private String orderList; + private String paymentList; + private String processId; + private String remark; + private String secondParty; + private String status; + private String statusName; + private String updateTime; + + public String getAgreementAmount() { + return agreementAmount; + } + + public void setAgreementAmount(String agreementAmount) { + this.agreementAmount = agreementAmount; + } + + public String getAgreementEndDate() { + return agreementEndDate; + } + + public void setAgreementEndDate(String agreementEndDate) { + this.agreementEndDate = agreementEndDate; + } + + public String getAgreementImportantContent() { + return agreementImportantContent; + } + + public void setAgreementImportantContent(String agreementImportantContent) { + this.agreementImportantContent = agreementImportantContent; + } + + public String getAgreementKind() { + return agreementKind; + } + + public void setAgreementKind(String agreementKind) { + this.agreementKind = agreementKind; + } + + public String getAgreementKindName() { + return agreementKindName; + } + + public void setAgreementKindName(String agreementKindName) { + this.agreementKindName = agreementKindName; + } + + public String getAgreementName() { + return agreementName; + } + + public void setAgreementName(String agreementName) { + this.agreementName = agreementName; + } + + public String getAgreementNo() { + return agreementNo; + } + + public void setAgreementNo(String agreementNo) { + this.agreementNo = agreementNo; + } + + public String getAgreementSource() { + return agreementSource; + } + + public void setAgreementSource(String agreementSource) { + this.agreementSource = agreementSource; + } + + public String getAgreementSourceName() { + return agreementSourceName; + } + + public void setAgreementSourceName(String agreementSourceName) { + this.agreementSourceName = agreementSourceName; + } + + public String getAgreementStartDate() { + return agreementStartDate; + } + + public void setAgreementStartDate(String agreementStartDate) { + this.agreementStartDate = agreementStartDate; + } + + public String getAgreementType() { + return agreementType; + } + + public void setAgreementType(String agreementType) { + this.agreementType = agreementType; + } + + public String getAgreementTypeName() { + return agreementTypeName; + } + + public void setAgreementTypeName(String agreementTypeName) { + this.agreementTypeName = agreementTypeName; + } + + public String getApprovalStatus() { + return approvalStatus; + } + + public void setApprovalStatus(String approvalStatus) { + this.approvalStatus = approvalStatus; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getCreateUser() { + return createUser; + } + + public void setCreateUser(String createUser) { + this.createUser = createUser; + } + + public String getCreateUserName() { + return createUserName; + } + + public void setCreateUserName(String createUserName) { + this.createUserName = createUserName; + } + + public String getCustomerId() { + return customerId; + } + + public void setCustomerId(String customerId) { + this.customerId = customerId; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDirector() { + return director; + } + + public void setDirector(String director) { + this.director = director; + } + + public String getEstimateSignDate() { + return estimateSignDate; + } + + public void setEstimateSignDate(String estimateSignDate) { + this.estimateSignDate = estimateSignDate; + } + + public String getFirstParty() { + return firstParty; + } + + public void setFirstParty(String firstParty) { + this.firstParty = firstParty; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getIsDel() { + return isDel; + } + + public void setIsDel(String isDel) { + this.isDel = isDel; + } + + public String getMinioFileName() { + return minioFileName; + } + + public void setMinioFileName(String minioFileName) { + this.minioFileName = minioFileName; + } + + public String getOrderIdList() { + return orderIdList; + } + + public void setOrderIdList(String orderIdList) { + this.orderIdList = orderIdList; + } + + public String getOrderList() { + return orderList; + } + + public void setOrderList(String orderList) { + this.orderList = orderList; + } + + public String getPaymentList() { + return paymentList; + } + + public void setPaymentList(String paymentList) { + this.paymentList = paymentList; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + public String getSecondParty() { + return secondParty; + } + + public void setSecondParty(String secondParty) { + this.secondParty = secondParty; + } + + 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; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt index 85756b0..36059c5 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt @@ -65,4 +65,8 @@ const val USER_ID = "userId" const val PRIVACY_CHECK_BOX = "privacyCheckBox" const val PUSH_SETTING = "pushSetting" + const val METERAGE_TRAIN_FORM_ID = "jlglpxjhsp" + const val STANDARD_FILE_FORM_ID = "jlglwjsp" + const val CERTIFICATE_REPORT_FORM_ID = "ywglzsbg" + const val CONTRACT_FORM_ID = "cwczht" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt b/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt index da58079..99f3bb1 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt @@ -2,37 +2,42 @@ object SearchType { /** + * 首页模糊搜索 + * */ + const val All = "0" + + /** * 搜索仪器设备 * */ - const val Equipment = "0" + const val Equipment = "1" /** * 搜索标准装置 * */ - const val StandardDevice = "1" + const val StandardDevice = "2" /** * 搜索委托书需求 * */ - const val Entrust = "2" + const val Entrust = "3" /** * 搜索能力 * */ - const val Capability = "3" + const val Capability = "4" /** * 搜索计量培训 * */ - const val MeterageTrain = "4" + const val MeterageTrain = "5" /** * 搜索客户 * */ - const val Customer = "5" + const val Customer = "6" /** - * 首页模糊搜索 + * 搜索仪器设备 * */ - const val All = "6" + const val Contract = "7" } 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 3bd698a..bc4d694 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 @@ -446,4 +446,15 @@ @QueryMap limit: Map, @QueryMap offset: Map ): String + + /** + * 合同列表 + */ + @POST("/finance/agreement/listPage") + suspend fun getContractList( + @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 9e7556b..1aaabee 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 @@ -459,7 +459,6 @@ effectiveCompany: String, trainStartTime: String, trainEndTime: String, - formId: String, ids: Array, offset: Int ): String { @@ -473,7 +472,7 @@ param.addProperty("effectiveCompany", effectiveCompany) param.addProperty("trainStartTime", trainStartTime) param.addProperty("trainEndTime", trainEndTime) - param.addProperty("formId", formId) + param.addProperty("formId", LocaleConstant.METERAGE_TRAIN_FORM_ID) param.add("ids", gson.toJsonTree(ids, typeToken).asJsonArray) val requestBody = param.toString().toRequestBody( @@ -843,7 +842,7 @@ offset: Int ): String { val param = JsonObject() - param.addProperty("formId", "jlglwjsp") + param.addProperty("formId", LocaleConstant.STANDARD_FILE_FORM_ID) param.addProperty("fileType", fileType) param.addProperty("fileName", fileName) param.addProperty("fileNo", fileNo) @@ -884,7 +883,7 @@ offset: Int ): String { val param = JsonObject() - param.addProperty("formId", "ywglzsbg") + param.addProperty("formId", LocaleConstant.CERTIFICATE_REPORT_FORM_ID) param.addProperty("approvalStatus", approvalStatus) param.addProperty("certificateReportCode", certificateReportCode) param.addProperty("customerName", customerName) @@ -925,7 +924,7 @@ */ suspend fun submit(id: String): String { val param = JsonObject() - param.addProperty("formId", "ywglzsbg") + param.addProperty("formId", LocaleConstant.CERTIFICATE_REPORT_FORM_ID) param.addProperty("id", id) val requestBody = param.toString().toRequestBody( "application/json;charset=UTF-8".toMediaType() @@ -1009,4 +1008,47 @@ AuthenticationHelper.token!!, requestBody, limitMap, offsetMap ) } + + /** + * 合同列表 + */ + suspend fun getContractList( + customerId: String, + agreementKind: String, + agreementName: String, + agreementType: String, + agreementNo: String, + estimateSignStartDate: String, + estimateSignEndDate: String, + firstParty: String, + status: String, + ids: Array, + offset: Int + ): String { + val param = JsonObject() + param.addProperty("customerId", customerId) + param.addProperty("agreementKind", agreementKind) + param.addProperty("agreementName", agreementName) + param.addProperty("agreementType", agreementType) + param.addProperty("agreementNo", agreementNo) + param.addProperty("estimateSignStartDate", estimateSignStartDate) + param.addProperty("estimateSignEndDate", estimateSignEndDate) + param.addProperty("firstParty", firstParty) + param.addProperty("formId", LocaleConstant.CONTRACT_FORM_ID) + param.addProperty("status", status) + param.add("ids", gson.toJsonTree(ids, typeToken).asJsonArray) + + val requestBody = param.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + + val limitMap = HashMap() + limitMap["limit"] = LocaleConstant.PAGE_LIMIT + + val offsetMap = HashMap() + offsetMap["offset"] = offset + return api.getContractList( + AuthenticationHelper.token!!, requestBody, limitMap, offsetMap + ) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/ContractInvoiceActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/ContractInvoiceActivity.kt new file mode 100644 index 0000000..96148a3 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/home/ContractInvoiceActivity.kt @@ -0,0 +1,192 @@ +package com.casic.xz.meterage.view.home + +import android.content.Context +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration +import com.casic.xz.meterage.R +import com.casic.xz.meterage.base.ApplicationBaseActivity +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.model.ContractListModel +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.view.search.SearchContractActivity +import com.casic.xz.meterage.vm.ContractInvoiceViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +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_contract_invoice.* +import kotlinx.android.synthetic.main.include_empty_view.* +import kotlinx.android.synthetic.main.include_search_title.* + +class ContractInvoiceActivity : ApplicationBaseActivity() { + + private var context: Context = this@ContractInvoiceActivity + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var contractViewModel: ContractInvoiceViewModel + private lateinit var contractAdapter: NormalRecyclerAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.activity_contract_invoice + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "合同发票" + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + contractViewModel = ViewModelProvider(this)[ContractInvoiceViewModel::class.java] + contractViewModel.contractList.observe(this) { + if (it.code == 200) { + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + contractLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows) + contractLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023041001) + } + } + } + + override fun observeRequestState() { + contractViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + rightOperateView.setOnClickListener { + navigatePageTo() + } + + contractLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getContractListByPage() + } + + contractLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getContractListByPage() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + getContractListByPage() + } + + private fun getContractListByPage() { + contractViewModel.getContractList( + "", + "", + "", + "", + "", + "1", + "", + "", + "", + arrayOf(), + pageIndex + ) + } + + private val callback = Handler.Callback { + when (it.what) { + 2023041001 -> { + if (isRefresh || isLoadMore) { + contractAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无合同") { + pageIndex = 1 + getContractListByPage() + } + } else { + emptyView!!.hide() + contractAdapter = object : + NormalRecyclerAdapter( + R.layout.item_contract_rv_l, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, + position: Int, + item: ContractListModel.DataModel.RowsModel + ) { + viewHolder.setText(R.id.contractNameView, item.agreementName) + .setText(R.id.contractStateView, item.statusName) + .setText(R.id.contractCodeView, "合同编号:${item.agreementNo}") + .setText(R.id.firstPartNameView, "甲方单位:${item.firstParty}") + .setText( + R.id.startDateView, + "签订日期:${item.estimateSignDate.formatToYearMonthDay()}" + ) + + if (item.statusName.contains("已完成")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.green.convertColor(context) + ) + } else if (item.statusName.contains("未完成")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.red.convertColor(context) + ) + } else if (item.statusName.contains("已废止")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.gray.convertColor(context) + ) + } + } + } + contractRecyclerView.addItemDecoration( + DividerItemDecoration(this, DividerItemDecoration.VERTICAL) + ) + contractRecyclerView.adapter = contractAdapter + contractAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, t: ContractListModel.DataModel.RowsModel + ) { +// navigatePageTo(t.id) + } + }) + } + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt index 373c386..078f497 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt @@ -117,7 +117,6 @@ "", "", "", - "jlglpxjhsp", arrayOf(), pageIndex ) diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt index 16bcd38..92e256d 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_capability.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* /** @@ -93,7 +93,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_capability + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractActivity.kt new file mode 100644 index 0000000..17f6cda --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractActivity.kt @@ -0,0 +1,113 @@ +package com.casic.xz.meterage.view.search + +import android.view.LayoutInflater +import android.view.View +import com.casic.xz.meterage.R +import com.casic.xz.meterage.base.ApplicationBaseActivity +import com.casic.xz.meterage.bean.SearchHistoryBean +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.utils.DataBaseManager +import com.casic.xz.meterage.utils.SearchType +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton +import com.zhy.view.flowlayout.FlowLayout +import com.zhy.view.flowlayout.TagAdapter +import kotlinx.android.synthetic.main.activity_search_history.* +import kotlinx.android.synthetic.main.include_search_input_title.* + +/** + * 搜索合同 + * */ +class SearchContractActivity : ApplicationBaseActivity() { + + private lateinit var inflater: LayoutInflater + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var historyAdapter: TagAdapter + private var dataBeans: MutableList = ArrayList() + private var isRefresh = false + + override fun initLayoutView(): Int = R.layout.activity_search_history + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + inputView.hint = "请输入合同名称或者编号查询" + } + + override fun initData() { + inflater = LayoutInflater.from(this) + weakReferenceHandler = WeakReferenceHandler { + if (it.what == 2023041001) { + if (isRefresh) { + historyAdapter.notifyDataChanged() + } else { + historyAdapter = object : TagAdapter(dataBeans) { + override fun getView( + parent: FlowLayout?, position: Int, bean: SearchHistoryBean + ): View { + val tagView = inflater.inflate( + R.layout.item_search_rv_l, tagFlowLayout, false + ) as QMUIRoundButton + tagView.text = bean.keywords + return tagView + } + } + tagFlowLayout.adapter = historyAdapter + tagFlowLayout.setOnTagClickListener { _, position, _ -> + inputView.setText(dataBeans[position].keywords) + navigatePageTo(inputView.text.toString()) + true + } + } + } + true + } + } + + override fun onResume() { + super.onResume() + dataBeans = DataBaseManager.get.queryHistoryByType(SearchType.Contract) + weakReferenceHandler.sendEmptyMessage(2023041001) + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + searchTextView.setOnClickListener { + if (!inputView.text.isNullOrBlank()) { + DataBaseManager.get.addSearchHistory( + inputView.text.toString(), SearchType.Contract + ) + } + + navigatePageTo(inputView.text.toString()) + } + + deleteHistoryView.setOnClickListener { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("确定将所有搜索记录删除?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + + } + + override fun onConfirmClick() { + DataBaseManager.get.deleteHistoryByType(SearchType.Contract) + dataBeans.clear() + historyAdapter.notifyDataChanged() + } + }).build().show() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractResultActivity.kt new file mode 100644 index 0000000..5096b88 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractResultActivity.kt @@ -0,0 +1,210 @@ +package com.casic.xz.meterage.view.search + +import android.content.Context +import android.os.Handler +import androidx.core.text.isDigitsOnly +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration +import com.casic.xz.meterage.R +import com.casic.xz.meterage.base.ApplicationBaseActivity +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.model.ContractListModel +import com.casic.xz.meterage.utils.AppMemoryCache +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.vm.ContractInvoiceViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_search_contract_reasult.* +import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class SearchContractResultActivity : ApplicationBaseActivity() { + + private var context: Context = this@SearchContractResultActivity + private lateinit var param: String + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var contractViewModel: ContractInvoiceViewModel + private lateinit var contractAdapter: NormalRecyclerAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.activity_search_contract_reasult + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "查询结果" + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + getContractListByPage() + } + + override fun initData() { + param = intent.getStringExtra(Constant.INTENT_PARAM)!! + + weakReferenceHandler = WeakReferenceHandler(callback) + contractViewModel = ViewModelProvider(this)[ContractInvoiceViewModel::class.java] + contractViewModel.contractList.observe(this) { + if (it.code == 200) { + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + contractLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows) + contractLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023041002) + } + } + } + + override fun observeRequestState() { + contractViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + + contractLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getContractListByPage() + } + + contractLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getContractListByPage() + } + } + + private fun getContractListByPage() { + if (param.isDigitsOnly()) { + contractViewModel.getContractList( + "", "", "", "", param, + "1", "", "", "", arrayOf(), + pageIndex + ) + } else { + if (param.length < 4) { + //输入参数长度小于4,默认查名称 + contractViewModel.getContractList( + "", "", param, "", "", + "1", "", "", "", arrayOf(), + pageIndex + ) + } else { + if (AppMemoryCache.prefixCode.contains(param.substring(0, 4))) { + contractViewModel.getContractList( + "", "", "", "", param, + "1", "", "", "", arrayOf(), + pageIndex + ) + } else { + contractViewModel.getContractList( + "", "", param, "", "", + "1", "", "", "", arrayOf(), + pageIndex + ) + } + } + } + } + + private val callback = Handler.Callback { + when (it.what) { + 2023041002 -> { + if (isRefresh || isLoadMore) { + contractAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无合同") { + pageIndex = 1 + getContractListByPage() + } + } else { + emptyView!!.hide() + contractAdapter = object : + NormalRecyclerAdapter( + R.layout.item_contract_rv_l, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, + position: Int, + item: ContractListModel.DataModel.RowsModel + ) { + viewHolder.setText(R.id.contractNameView, item.agreementName) + .setText(R.id.contractStateView, item.statusName) + .setText(R.id.contractCodeView, "合同编号:${item.agreementNo}") + .setText(R.id.firstPartNameView, "甲方单位:${item.firstParty}") + .setText( + R.id.startDateView, + "签订日期:${item.estimateSignDate.formatToYearMonthDay()}" + ) + + if (item.statusName.contains("已完成")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.green.convertColor(context) + ) + } else if (item.statusName.contains("未完成")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.red.convertColor(context) + ) + } else if (item.statusName.contains("已废止")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.gray.convertColor(context) + ) + } + } + } + contractRecyclerView.addItemDecoration( + DividerItemDecoration(this, DividerItemDecoration.VERTICAL) + ) + contractRecyclerView.adapter = contractAdapter + contractAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, t: ContractListModel.DataModel.RowsModel + ) { +// navigatePageTo(t.id) + } + }) + } + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt index 08d6bd2..3430e24 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_customer.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* /** @@ -93,7 +93,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_customer + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustActivity.kt index 2bff498..159d51d 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_entrust.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* /** @@ -93,7 +93,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_entrust + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt index b105378..f9b1076 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_equipment.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* @@ -100,7 +100,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_equipment + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt index 6dba78b..0a8c595 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_global.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* class SearchGlobalActivity : ApplicationBaseActivity() { @@ -90,7 +90,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_global + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainActivity.kt index 56fda90..da94e79 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_meterage_train.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* /** @@ -93,7 +93,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_meterage_train + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt index 447c483..cebdace 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt @@ -119,29 +119,25 @@ if (param.isDigitsOnly()) { meterageTrainViewModel.getMeterageTrainList( "", "", "", "", param, "", - "", "", "", "jlglpxjhsp", arrayOf(), - pageIndex + "", "", "", arrayOf(), pageIndex ) } else { if (param.length < 4) { //输入参数长度小于4,默认查名称 meterageTrainViewModel.getMeterageTrainList( "", "", "", param, "", "", - "", "", "", "jlglpxjhsp", arrayOf(), - pageIndex + "", "", "", arrayOf(), pageIndex ) } else { if (AppMemoryCache.prefixCode.contains(param.substring(0, 4))) { meterageTrainViewModel.getMeterageTrainList( "", "", "", "", param, "", - "", "", "", "jlglpxjhsp", arrayOf(), - pageIndex + "", "", "", arrayOf(), pageIndex ) } else { meterageTrainViewModel.getMeterageTrainList( "", "", "", param, "", "", - "", "", "", "jlglpxjhsp", arrayOf(), - pageIndex + "", "", "", arrayOf(), pageIndex ) } } diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchStandardDeviceActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchStandardDeviceActivity.kt index cf96d0d..39b1388 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchStandardDeviceActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchStandardDeviceActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_standard_device.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* /** @@ -99,7 +99,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_standard_device + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/vm/ContractInvoiceViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/ContractInvoiceViewModel.kt new file mode 100644 index 0000000..99b5871 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/vm/ContractInvoiceViewModel.kt @@ -0,0 +1,66 @@ +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.ContractListModel +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 ContractInvoiceViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } + val contractList = MutableLiveData() + + fun getContractList( + customerId: String, + agreementKind: String, + agreementName: String, + agreementType: String, + agreementNo: String, + estimateSignStartDate: String, + estimateSignEndDate: String, + firstParty: String, + status: String, + ids: Array, + offset: Int + ) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.getContractList( + customerId, + agreementKind, + agreementName, + agreementType, + agreementNo, + estimateSignStartDate, + estimateSignEndDate, + firstParty, + status, + ids, + offset + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + contractList.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()) + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/vm/MeterageTrainViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/MeterageTrainViewModel.kt index b1bad75..43e4632 100644 --- a/app/src/main/java/com/casic/xz/meterage/vm/MeterageTrainViewModel.kt +++ b/app/src/main/java/com/casic/xz/meterage/vm/MeterageTrainViewModel.kt @@ -37,7 +37,6 @@ effectiveCompany: String, trainStartTime: String, trainEndTime: String, - formId: String, ids: Array, offset: Int ) = launch({ @@ -52,7 +51,6 @@ effectiveCompany, trainStartTime, trainEndTime, - formId, ids, offset ) diff --git a/app/src/main/res/layout/activity_contract_invoice.xml b/app/src/main/res/layout/activity_contract_invoice.xml new file mode 100644 index 0000000..a926c5b --- /dev/null +++ b/app/src/main/res/layout/activity_contract_invoice.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_search_capability.xml b/app/src/main/res/layout/activity_search_capability.xml deleted file mode 100644 index 93ed590..0000000 --- a/app/src/main/res/layout/activity_search_capability.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/activity_search_contract_reasult.xml b/app/src/main/res/layout/activity_search_contract_reasult.xml new file mode 100644 index 0000000..bcd2ad9 --- /dev/null +++ b/app/src/main/res/layout/activity_search_contract_reasult.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_search_customer.xml b/app/src/main/res/layout/activity_search_customer.xml deleted file mode 100644 index 93ed590..0000000 --- a/app/src/main/res/layout/activity_search_customer.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/activity_search_entrust.xml b/app/src/main/res/layout/activity_search_entrust.xml deleted file mode 100644 index 93ed590..0000000 --- a/app/src/main/res/layout/activity_search_entrust.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/activity_search_equipment.xml b/app/src/main/res/layout/activity_search_equipment.xml deleted file mode 100644 index 93ed590..0000000 --- a/app/src/main/res/layout/activity_search_equipment.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/activity_search_global.xml b/app/src/main/res/layout/activity_search_global.xml deleted file mode 100644 index 93ed590..0000000 --- a/app/src/main/res/layout/activity_search_global.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/activity_search_history.xml b/app/src/main/res/layout/activity_search_history.xml new file mode 100644 index 0000000..93ed590 --- /dev/null +++ b/app/src/main/res/layout/activity_search_history.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 9fc7c01..78d7828 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -71,6 +71,7 @@ + @@ -85,6 +86,8 @@ + + diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt index 71fe5a8..ad81434 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt @@ -170,7 +170,7 @@ "标准规范" -> requireContext().navigatePageTo() "能力列表" -> requireContext().navigatePageTo() "计量培训" -> requireContext().navigatePageTo() -// "合同发票" -> requireContext().navigatePageTo() + "合同发票" -> requireContext().navigatePageTo() // "业务统计" -> requireContext().navigatePageTo() "客户列表" -> requireContext().navigatePageTo() // "外场检测" -> requireContext().navigatePageTo() diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt index b47cb32..b12a0bf 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt @@ -184,7 +184,7 @@ requireContext().navigatePageTo() } - //TODO 未实现 + //TODO 通过接口修改数据库字段实现 pushSettingSwitch.setOnCheckedChangeListener { _, isChecked -> SaveKeyValues.putValue(LocaleConstant.PUSH_SETTING, isChecked) if (isChecked) { diff --git a/app/src/main/java/com/casic/xz/meterage/model/ContractListModel.java b/app/src/main/java/com/casic/xz/meterage/model/ContractListModel.java new file mode 100644 index 0000000..111ff52 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/model/ContractListModel.java @@ -0,0 +1,364 @@ +package com.casic.xz.meterage.model; + +import java.util.List; + +public class ContractListModel { + + 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 agreementAmount; + private String agreementEndDate; + private String agreementImportantContent; + private String agreementKind; + private String agreementKindName; + private String agreementName; + private String agreementNo; + private String agreementSource; + private String agreementSourceName; + private String agreementStartDate; + private String agreementType; + private String agreementTypeName; + private String approvalStatus; + private String createTime; + private String createUser; + private String createUserName; + private String customerId; + private String deptId; + private String deptName; + private String director; + private String estimateSignDate; + private String firstParty; + private String id; + private String isDel; + private String minioFileName; + private String orderIdList; + private String orderList; + private String paymentList; + private String processId; + private String remark; + private String secondParty; + private String status; + private String statusName; + private String updateTime; + + public String getAgreementAmount() { + return agreementAmount; + } + + public void setAgreementAmount(String agreementAmount) { + this.agreementAmount = agreementAmount; + } + + public String getAgreementEndDate() { + return agreementEndDate; + } + + public void setAgreementEndDate(String agreementEndDate) { + this.agreementEndDate = agreementEndDate; + } + + public String getAgreementImportantContent() { + return agreementImportantContent; + } + + public void setAgreementImportantContent(String agreementImportantContent) { + this.agreementImportantContent = agreementImportantContent; + } + + public String getAgreementKind() { + return agreementKind; + } + + public void setAgreementKind(String agreementKind) { + this.agreementKind = agreementKind; + } + + public String getAgreementKindName() { + return agreementKindName; + } + + public void setAgreementKindName(String agreementKindName) { + this.agreementKindName = agreementKindName; + } + + public String getAgreementName() { + return agreementName; + } + + public void setAgreementName(String agreementName) { + this.agreementName = agreementName; + } + + public String getAgreementNo() { + return agreementNo; + } + + public void setAgreementNo(String agreementNo) { + this.agreementNo = agreementNo; + } + + public String getAgreementSource() { + return agreementSource; + } + + public void setAgreementSource(String agreementSource) { + this.agreementSource = agreementSource; + } + + public String getAgreementSourceName() { + return agreementSourceName; + } + + public void setAgreementSourceName(String agreementSourceName) { + this.agreementSourceName = agreementSourceName; + } + + public String getAgreementStartDate() { + return agreementStartDate; + } + + public void setAgreementStartDate(String agreementStartDate) { + this.agreementStartDate = agreementStartDate; + } + + public String getAgreementType() { + return agreementType; + } + + public void setAgreementType(String agreementType) { + this.agreementType = agreementType; + } + + public String getAgreementTypeName() { + return agreementTypeName; + } + + public void setAgreementTypeName(String agreementTypeName) { + this.agreementTypeName = agreementTypeName; + } + + public String getApprovalStatus() { + return approvalStatus; + } + + public void setApprovalStatus(String approvalStatus) { + this.approvalStatus = approvalStatus; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getCreateUser() { + return createUser; + } + + public void setCreateUser(String createUser) { + this.createUser = createUser; + } + + public String getCreateUserName() { + return createUserName; + } + + public void setCreateUserName(String createUserName) { + this.createUserName = createUserName; + } + + public String getCustomerId() { + return customerId; + } + + public void setCustomerId(String customerId) { + this.customerId = customerId; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDirector() { + return director; + } + + public void setDirector(String director) { + this.director = director; + } + + public String getEstimateSignDate() { + return estimateSignDate; + } + + public void setEstimateSignDate(String estimateSignDate) { + this.estimateSignDate = estimateSignDate; + } + + public String getFirstParty() { + return firstParty; + } + + public void setFirstParty(String firstParty) { + this.firstParty = firstParty; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getIsDel() { + return isDel; + } + + public void setIsDel(String isDel) { + this.isDel = isDel; + } + + public String getMinioFileName() { + return minioFileName; + } + + public void setMinioFileName(String minioFileName) { + this.minioFileName = minioFileName; + } + + public String getOrderIdList() { + return orderIdList; + } + + public void setOrderIdList(String orderIdList) { + this.orderIdList = orderIdList; + } + + public String getOrderList() { + return orderList; + } + + public void setOrderList(String orderList) { + this.orderList = orderList; + } + + public String getPaymentList() { + return paymentList; + } + + public void setPaymentList(String paymentList) { + this.paymentList = paymentList; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + public String getSecondParty() { + return secondParty; + } + + public void setSecondParty(String secondParty) { + this.secondParty = secondParty; + } + + 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; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt index 85756b0..36059c5 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt @@ -65,4 +65,8 @@ const val USER_ID = "userId" const val PRIVACY_CHECK_BOX = "privacyCheckBox" const val PUSH_SETTING = "pushSetting" + const val METERAGE_TRAIN_FORM_ID = "jlglpxjhsp" + const val STANDARD_FILE_FORM_ID = "jlglwjsp" + const val CERTIFICATE_REPORT_FORM_ID = "ywglzsbg" + const val CONTRACT_FORM_ID = "cwczht" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt b/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt index da58079..99f3bb1 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt @@ -2,37 +2,42 @@ object SearchType { /** + * 首页模糊搜索 + * */ + const val All = "0" + + /** * 搜索仪器设备 * */ - const val Equipment = "0" + const val Equipment = "1" /** * 搜索标准装置 * */ - const val StandardDevice = "1" + const val StandardDevice = "2" /** * 搜索委托书需求 * */ - const val Entrust = "2" + const val Entrust = "3" /** * 搜索能力 * */ - const val Capability = "3" + const val Capability = "4" /** * 搜索计量培训 * */ - const val MeterageTrain = "4" + const val MeterageTrain = "5" /** * 搜索客户 * */ - const val Customer = "5" + const val Customer = "6" /** - * 首页模糊搜索 + * 搜索仪器设备 * */ - const val All = "6" + const val Contract = "7" } 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 3bd698a..bc4d694 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 @@ -446,4 +446,15 @@ @QueryMap limit: Map, @QueryMap offset: Map ): String + + /** + * 合同列表 + */ + @POST("/finance/agreement/listPage") + suspend fun getContractList( + @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 9e7556b..1aaabee 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 @@ -459,7 +459,6 @@ effectiveCompany: String, trainStartTime: String, trainEndTime: String, - formId: String, ids: Array, offset: Int ): String { @@ -473,7 +472,7 @@ param.addProperty("effectiveCompany", effectiveCompany) param.addProperty("trainStartTime", trainStartTime) param.addProperty("trainEndTime", trainEndTime) - param.addProperty("formId", formId) + param.addProperty("formId", LocaleConstant.METERAGE_TRAIN_FORM_ID) param.add("ids", gson.toJsonTree(ids, typeToken).asJsonArray) val requestBody = param.toString().toRequestBody( @@ -843,7 +842,7 @@ offset: Int ): String { val param = JsonObject() - param.addProperty("formId", "jlglwjsp") + param.addProperty("formId", LocaleConstant.STANDARD_FILE_FORM_ID) param.addProperty("fileType", fileType) param.addProperty("fileName", fileName) param.addProperty("fileNo", fileNo) @@ -884,7 +883,7 @@ offset: Int ): String { val param = JsonObject() - param.addProperty("formId", "ywglzsbg") + param.addProperty("formId", LocaleConstant.CERTIFICATE_REPORT_FORM_ID) param.addProperty("approvalStatus", approvalStatus) param.addProperty("certificateReportCode", certificateReportCode) param.addProperty("customerName", customerName) @@ -925,7 +924,7 @@ */ suspend fun submit(id: String): String { val param = JsonObject() - param.addProperty("formId", "ywglzsbg") + param.addProperty("formId", LocaleConstant.CERTIFICATE_REPORT_FORM_ID) param.addProperty("id", id) val requestBody = param.toString().toRequestBody( "application/json;charset=UTF-8".toMediaType() @@ -1009,4 +1008,47 @@ AuthenticationHelper.token!!, requestBody, limitMap, offsetMap ) } + + /** + * 合同列表 + */ + suspend fun getContractList( + customerId: String, + agreementKind: String, + agreementName: String, + agreementType: String, + agreementNo: String, + estimateSignStartDate: String, + estimateSignEndDate: String, + firstParty: String, + status: String, + ids: Array, + offset: Int + ): String { + val param = JsonObject() + param.addProperty("customerId", customerId) + param.addProperty("agreementKind", agreementKind) + param.addProperty("agreementName", agreementName) + param.addProperty("agreementType", agreementType) + param.addProperty("agreementNo", agreementNo) + param.addProperty("estimateSignStartDate", estimateSignStartDate) + param.addProperty("estimateSignEndDate", estimateSignEndDate) + param.addProperty("firstParty", firstParty) + param.addProperty("formId", LocaleConstant.CONTRACT_FORM_ID) + param.addProperty("status", status) + param.add("ids", gson.toJsonTree(ids, typeToken).asJsonArray) + + val requestBody = param.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + + val limitMap = HashMap() + limitMap["limit"] = LocaleConstant.PAGE_LIMIT + + val offsetMap = HashMap() + offsetMap["offset"] = offset + return api.getContractList( + AuthenticationHelper.token!!, requestBody, limitMap, offsetMap + ) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/ContractInvoiceActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/ContractInvoiceActivity.kt new file mode 100644 index 0000000..96148a3 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/home/ContractInvoiceActivity.kt @@ -0,0 +1,192 @@ +package com.casic.xz.meterage.view.home + +import android.content.Context +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration +import com.casic.xz.meterage.R +import com.casic.xz.meterage.base.ApplicationBaseActivity +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.model.ContractListModel +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.view.search.SearchContractActivity +import com.casic.xz.meterage.vm.ContractInvoiceViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +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_contract_invoice.* +import kotlinx.android.synthetic.main.include_empty_view.* +import kotlinx.android.synthetic.main.include_search_title.* + +class ContractInvoiceActivity : ApplicationBaseActivity() { + + private var context: Context = this@ContractInvoiceActivity + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var contractViewModel: ContractInvoiceViewModel + private lateinit var contractAdapter: NormalRecyclerAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.activity_contract_invoice + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "合同发票" + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + contractViewModel = ViewModelProvider(this)[ContractInvoiceViewModel::class.java] + contractViewModel.contractList.observe(this) { + if (it.code == 200) { + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + contractLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows) + contractLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023041001) + } + } + } + + override fun observeRequestState() { + contractViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + rightOperateView.setOnClickListener { + navigatePageTo() + } + + contractLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getContractListByPage() + } + + contractLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getContractListByPage() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + getContractListByPage() + } + + private fun getContractListByPage() { + contractViewModel.getContractList( + "", + "", + "", + "", + "", + "1", + "", + "", + "", + arrayOf(), + pageIndex + ) + } + + private val callback = Handler.Callback { + when (it.what) { + 2023041001 -> { + if (isRefresh || isLoadMore) { + contractAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无合同") { + pageIndex = 1 + getContractListByPage() + } + } else { + emptyView!!.hide() + contractAdapter = object : + NormalRecyclerAdapter( + R.layout.item_contract_rv_l, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, + position: Int, + item: ContractListModel.DataModel.RowsModel + ) { + viewHolder.setText(R.id.contractNameView, item.agreementName) + .setText(R.id.contractStateView, item.statusName) + .setText(R.id.contractCodeView, "合同编号:${item.agreementNo}") + .setText(R.id.firstPartNameView, "甲方单位:${item.firstParty}") + .setText( + R.id.startDateView, + "签订日期:${item.estimateSignDate.formatToYearMonthDay()}" + ) + + if (item.statusName.contains("已完成")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.green.convertColor(context) + ) + } else if (item.statusName.contains("未完成")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.red.convertColor(context) + ) + } else if (item.statusName.contains("已废止")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.gray.convertColor(context) + ) + } + } + } + contractRecyclerView.addItemDecoration( + DividerItemDecoration(this, DividerItemDecoration.VERTICAL) + ) + contractRecyclerView.adapter = contractAdapter + contractAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, t: ContractListModel.DataModel.RowsModel + ) { +// navigatePageTo(t.id) + } + }) + } + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt index 373c386..078f497 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt @@ -117,7 +117,6 @@ "", "", "", - "jlglpxjhsp", arrayOf(), pageIndex ) diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt index 16bcd38..92e256d 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_capability.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* /** @@ -93,7 +93,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_capability + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractActivity.kt new file mode 100644 index 0000000..17f6cda --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractActivity.kt @@ -0,0 +1,113 @@ +package com.casic.xz.meterage.view.search + +import android.view.LayoutInflater +import android.view.View +import com.casic.xz.meterage.R +import com.casic.xz.meterage.base.ApplicationBaseActivity +import com.casic.xz.meterage.bean.SearchHistoryBean +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.utils.DataBaseManager +import com.casic.xz.meterage.utils.SearchType +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton +import com.zhy.view.flowlayout.FlowLayout +import com.zhy.view.flowlayout.TagAdapter +import kotlinx.android.synthetic.main.activity_search_history.* +import kotlinx.android.synthetic.main.include_search_input_title.* + +/** + * 搜索合同 + * */ +class SearchContractActivity : ApplicationBaseActivity() { + + private lateinit var inflater: LayoutInflater + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var historyAdapter: TagAdapter + private var dataBeans: MutableList = ArrayList() + private var isRefresh = false + + override fun initLayoutView(): Int = R.layout.activity_search_history + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + inputView.hint = "请输入合同名称或者编号查询" + } + + override fun initData() { + inflater = LayoutInflater.from(this) + weakReferenceHandler = WeakReferenceHandler { + if (it.what == 2023041001) { + if (isRefresh) { + historyAdapter.notifyDataChanged() + } else { + historyAdapter = object : TagAdapter(dataBeans) { + override fun getView( + parent: FlowLayout?, position: Int, bean: SearchHistoryBean + ): View { + val tagView = inflater.inflate( + R.layout.item_search_rv_l, tagFlowLayout, false + ) as QMUIRoundButton + tagView.text = bean.keywords + return tagView + } + } + tagFlowLayout.adapter = historyAdapter + tagFlowLayout.setOnTagClickListener { _, position, _ -> + inputView.setText(dataBeans[position].keywords) + navigatePageTo(inputView.text.toString()) + true + } + } + } + true + } + } + + override fun onResume() { + super.onResume() + dataBeans = DataBaseManager.get.queryHistoryByType(SearchType.Contract) + weakReferenceHandler.sendEmptyMessage(2023041001) + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + searchTextView.setOnClickListener { + if (!inputView.text.isNullOrBlank()) { + DataBaseManager.get.addSearchHistory( + inputView.text.toString(), SearchType.Contract + ) + } + + navigatePageTo(inputView.text.toString()) + } + + deleteHistoryView.setOnClickListener { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("确定将所有搜索记录删除?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + + } + + override fun onConfirmClick() { + DataBaseManager.get.deleteHistoryByType(SearchType.Contract) + dataBeans.clear() + historyAdapter.notifyDataChanged() + } + }).build().show() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractResultActivity.kt new file mode 100644 index 0000000..5096b88 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractResultActivity.kt @@ -0,0 +1,210 @@ +package com.casic.xz.meterage.view.search + +import android.content.Context +import android.os.Handler +import androidx.core.text.isDigitsOnly +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration +import com.casic.xz.meterage.R +import com.casic.xz.meterage.base.ApplicationBaseActivity +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.model.ContractListModel +import com.casic.xz.meterage.utils.AppMemoryCache +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.vm.ContractInvoiceViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_search_contract_reasult.* +import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class SearchContractResultActivity : ApplicationBaseActivity() { + + private var context: Context = this@SearchContractResultActivity + private lateinit var param: String + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var contractViewModel: ContractInvoiceViewModel + private lateinit var contractAdapter: NormalRecyclerAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.activity_search_contract_reasult + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "查询结果" + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + getContractListByPage() + } + + override fun initData() { + param = intent.getStringExtra(Constant.INTENT_PARAM)!! + + weakReferenceHandler = WeakReferenceHandler(callback) + contractViewModel = ViewModelProvider(this)[ContractInvoiceViewModel::class.java] + contractViewModel.contractList.observe(this) { + if (it.code == 200) { + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + contractLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows) + contractLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023041002) + } + } + } + + override fun observeRequestState() { + contractViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + + contractLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getContractListByPage() + } + + contractLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getContractListByPage() + } + } + + private fun getContractListByPage() { + if (param.isDigitsOnly()) { + contractViewModel.getContractList( + "", "", "", "", param, + "1", "", "", "", arrayOf(), + pageIndex + ) + } else { + if (param.length < 4) { + //输入参数长度小于4,默认查名称 + contractViewModel.getContractList( + "", "", param, "", "", + "1", "", "", "", arrayOf(), + pageIndex + ) + } else { + if (AppMemoryCache.prefixCode.contains(param.substring(0, 4))) { + contractViewModel.getContractList( + "", "", "", "", param, + "1", "", "", "", arrayOf(), + pageIndex + ) + } else { + contractViewModel.getContractList( + "", "", param, "", "", + "1", "", "", "", arrayOf(), + pageIndex + ) + } + } + } + } + + private val callback = Handler.Callback { + when (it.what) { + 2023041002 -> { + if (isRefresh || isLoadMore) { + contractAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无合同") { + pageIndex = 1 + getContractListByPage() + } + } else { + emptyView!!.hide() + contractAdapter = object : + NormalRecyclerAdapter( + R.layout.item_contract_rv_l, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, + position: Int, + item: ContractListModel.DataModel.RowsModel + ) { + viewHolder.setText(R.id.contractNameView, item.agreementName) + .setText(R.id.contractStateView, item.statusName) + .setText(R.id.contractCodeView, "合同编号:${item.agreementNo}") + .setText(R.id.firstPartNameView, "甲方单位:${item.firstParty}") + .setText( + R.id.startDateView, + "签订日期:${item.estimateSignDate.formatToYearMonthDay()}" + ) + + if (item.statusName.contains("已完成")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.green.convertColor(context) + ) + } else if (item.statusName.contains("未完成")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.red.convertColor(context) + ) + } else if (item.statusName.contains("已废止")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.gray.convertColor(context) + ) + } + } + } + contractRecyclerView.addItemDecoration( + DividerItemDecoration(this, DividerItemDecoration.VERTICAL) + ) + contractRecyclerView.adapter = contractAdapter + contractAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, t: ContractListModel.DataModel.RowsModel + ) { +// navigatePageTo(t.id) + } + }) + } + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt index 08d6bd2..3430e24 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_customer.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* /** @@ -93,7 +93,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_customer + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustActivity.kt index 2bff498..159d51d 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_entrust.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* /** @@ -93,7 +93,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_entrust + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt index b105378..f9b1076 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_equipment.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* @@ -100,7 +100,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_equipment + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt index 6dba78b..0a8c595 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_global.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* class SearchGlobalActivity : ApplicationBaseActivity() { @@ -90,7 +90,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_global + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainActivity.kt index 56fda90..da94e79 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_meterage_train.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* /** @@ -93,7 +93,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_meterage_train + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt index 447c483..cebdace 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt @@ -119,29 +119,25 @@ if (param.isDigitsOnly()) { meterageTrainViewModel.getMeterageTrainList( "", "", "", "", param, "", - "", "", "", "jlglpxjhsp", arrayOf(), - pageIndex + "", "", "", arrayOf(), pageIndex ) } else { if (param.length < 4) { //输入参数长度小于4,默认查名称 meterageTrainViewModel.getMeterageTrainList( "", "", "", param, "", "", - "", "", "", "jlglpxjhsp", arrayOf(), - pageIndex + "", "", "", arrayOf(), pageIndex ) } else { if (AppMemoryCache.prefixCode.contains(param.substring(0, 4))) { meterageTrainViewModel.getMeterageTrainList( "", "", "", "", param, "", - "", "", "", "jlglpxjhsp", arrayOf(), - pageIndex + "", "", "", arrayOf(), pageIndex ) } else { meterageTrainViewModel.getMeterageTrainList( "", "", "", param, "", "", - "", "", "", "jlglpxjhsp", arrayOf(), - pageIndex + "", "", "", arrayOf(), pageIndex ) } } diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchStandardDeviceActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchStandardDeviceActivity.kt index cf96d0d..39b1388 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchStandardDeviceActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchStandardDeviceActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_standard_device.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* /** @@ -99,7 +99,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_standard_device + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/vm/ContractInvoiceViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/ContractInvoiceViewModel.kt new file mode 100644 index 0000000..99b5871 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/vm/ContractInvoiceViewModel.kt @@ -0,0 +1,66 @@ +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.ContractListModel +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 ContractInvoiceViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } + val contractList = MutableLiveData() + + fun getContractList( + customerId: String, + agreementKind: String, + agreementName: String, + agreementType: String, + agreementNo: String, + estimateSignStartDate: String, + estimateSignEndDate: String, + firstParty: String, + status: String, + ids: Array, + offset: Int + ) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.getContractList( + customerId, + agreementKind, + agreementName, + agreementType, + agreementNo, + estimateSignStartDate, + estimateSignEndDate, + firstParty, + status, + ids, + offset + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + contractList.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()) + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/vm/MeterageTrainViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/MeterageTrainViewModel.kt index b1bad75..43e4632 100644 --- a/app/src/main/java/com/casic/xz/meterage/vm/MeterageTrainViewModel.kt +++ b/app/src/main/java/com/casic/xz/meterage/vm/MeterageTrainViewModel.kt @@ -37,7 +37,6 @@ effectiveCompany: String, trainStartTime: String, trainEndTime: String, - formId: String, ids: Array, offset: Int ) = launch({ @@ -52,7 +51,6 @@ effectiveCompany, trainStartTime, trainEndTime, - formId, ids, offset ) diff --git a/app/src/main/res/layout/activity_contract_invoice.xml b/app/src/main/res/layout/activity_contract_invoice.xml new file mode 100644 index 0000000..a926c5b --- /dev/null +++ b/app/src/main/res/layout/activity_contract_invoice.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_search_capability.xml b/app/src/main/res/layout/activity_search_capability.xml deleted file mode 100644 index 93ed590..0000000 --- a/app/src/main/res/layout/activity_search_capability.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/activity_search_contract_reasult.xml b/app/src/main/res/layout/activity_search_contract_reasult.xml new file mode 100644 index 0000000..bcd2ad9 --- /dev/null +++ b/app/src/main/res/layout/activity_search_contract_reasult.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_search_customer.xml b/app/src/main/res/layout/activity_search_customer.xml deleted file mode 100644 index 93ed590..0000000 --- a/app/src/main/res/layout/activity_search_customer.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/activity_search_entrust.xml b/app/src/main/res/layout/activity_search_entrust.xml deleted file mode 100644 index 93ed590..0000000 --- a/app/src/main/res/layout/activity_search_entrust.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/activity_search_equipment.xml b/app/src/main/res/layout/activity_search_equipment.xml deleted file mode 100644 index 93ed590..0000000 --- a/app/src/main/res/layout/activity_search_equipment.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/activity_search_global.xml b/app/src/main/res/layout/activity_search_global.xml deleted file mode 100644 index 93ed590..0000000 --- a/app/src/main/res/layout/activity_search_global.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/activity_search_history.xml b/app/src/main/res/layout/activity_search_history.xml new file mode 100644 index 0000000..93ed590 --- /dev/null +++ b/app/src/main/res/layout/activity_search_history.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_search_meterage_train.xml b/app/src/main/res/layout/activity_search_meterage_train.xml deleted file mode 100644 index 93ed590..0000000 --- a/app/src/main/res/layout/activity_search_meterage_train.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 9fc7c01..78d7828 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -71,6 +71,7 @@ + @@ -85,6 +86,8 @@ + + diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt index 71fe5a8..ad81434 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt @@ -170,7 +170,7 @@ "标准规范" -> requireContext().navigatePageTo() "能力列表" -> requireContext().navigatePageTo() "计量培训" -> requireContext().navigatePageTo() -// "合同发票" -> requireContext().navigatePageTo() + "合同发票" -> requireContext().navigatePageTo() // "业务统计" -> requireContext().navigatePageTo() "客户列表" -> requireContext().navigatePageTo() // "外场检测" -> requireContext().navigatePageTo() diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt index b47cb32..b12a0bf 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt @@ -184,7 +184,7 @@ requireContext().navigatePageTo() } - //TODO 未实现 + //TODO 通过接口修改数据库字段实现 pushSettingSwitch.setOnCheckedChangeListener { _, isChecked -> SaveKeyValues.putValue(LocaleConstant.PUSH_SETTING, isChecked) if (isChecked) { diff --git a/app/src/main/java/com/casic/xz/meterage/model/ContractListModel.java b/app/src/main/java/com/casic/xz/meterage/model/ContractListModel.java new file mode 100644 index 0000000..111ff52 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/model/ContractListModel.java @@ -0,0 +1,364 @@ +package com.casic.xz.meterage.model; + +import java.util.List; + +public class ContractListModel { + + 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 agreementAmount; + private String agreementEndDate; + private String agreementImportantContent; + private String agreementKind; + private String agreementKindName; + private String agreementName; + private String agreementNo; + private String agreementSource; + private String agreementSourceName; + private String agreementStartDate; + private String agreementType; + private String agreementTypeName; + private String approvalStatus; + private String createTime; + private String createUser; + private String createUserName; + private String customerId; + private String deptId; + private String deptName; + private String director; + private String estimateSignDate; + private String firstParty; + private String id; + private String isDel; + private String minioFileName; + private String orderIdList; + private String orderList; + private String paymentList; + private String processId; + private String remark; + private String secondParty; + private String status; + private String statusName; + private String updateTime; + + public String getAgreementAmount() { + return agreementAmount; + } + + public void setAgreementAmount(String agreementAmount) { + this.agreementAmount = agreementAmount; + } + + public String getAgreementEndDate() { + return agreementEndDate; + } + + public void setAgreementEndDate(String agreementEndDate) { + this.agreementEndDate = agreementEndDate; + } + + public String getAgreementImportantContent() { + return agreementImportantContent; + } + + public void setAgreementImportantContent(String agreementImportantContent) { + this.agreementImportantContent = agreementImportantContent; + } + + public String getAgreementKind() { + return agreementKind; + } + + public void setAgreementKind(String agreementKind) { + this.agreementKind = agreementKind; + } + + public String getAgreementKindName() { + return agreementKindName; + } + + public void setAgreementKindName(String agreementKindName) { + this.agreementKindName = agreementKindName; + } + + public String getAgreementName() { + return agreementName; + } + + public void setAgreementName(String agreementName) { + this.agreementName = agreementName; + } + + public String getAgreementNo() { + return agreementNo; + } + + public void setAgreementNo(String agreementNo) { + this.agreementNo = agreementNo; + } + + public String getAgreementSource() { + return agreementSource; + } + + public void setAgreementSource(String agreementSource) { + this.agreementSource = agreementSource; + } + + public String getAgreementSourceName() { + return agreementSourceName; + } + + public void setAgreementSourceName(String agreementSourceName) { + this.agreementSourceName = agreementSourceName; + } + + public String getAgreementStartDate() { + return agreementStartDate; + } + + public void setAgreementStartDate(String agreementStartDate) { + this.agreementStartDate = agreementStartDate; + } + + public String getAgreementType() { + return agreementType; + } + + public void setAgreementType(String agreementType) { + this.agreementType = agreementType; + } + + public String getAgreementTypeName() { + return agreementTypeName; + } + + public void setAgreementTypeName(String agreementTypeName) { + this.agreementTypeName = agreementTypeName; + } + + public String getApprovalStatus() { + return approvalStatus; + } + + public void setApprovalStatus(String approvalStatus) { + this.approvalStatus = approvalStatus; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getCreateUser() { + return createUser; + } + + public void setCreateUser(String createUser) { + this.createUser = createUser; + } + + public String getCreateUserName() { + return createUserName; + } + + public void setCreateUserName(String createUserName) { + this.createUserName = createUserName; + } + + public String getCustomerId() { + return customerId; + } + + public void setCustomerId(String customerId) { + this.customerId = customerId; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDirector() { + return director; + } + + public void setDirector(String director) { + this.director = director; + } + + public String getEstimateSignDate() { + return estimateSignDate; + } + + public void setEstimateSignDate(String estimateSignDate) { + this.estimateSignDate = estimateSignDate; + } + + public String getFirstParty() { + return firstParty; + } + + public void setFirstParty(String firstParty) { + this.firstParty = firstParty; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getIsDel() { + return isDel; + } + + public void setIsDel(String isDel) { + this.isDel = isDel; + } + + public String getMinioFileName() { + return minioFileName; + } + + public void setMinioFileName(String minioFileName) { + this.minioFileName = minioFileName; + } + + public String getOrderIdList() { + return orderIdList; + } + + public void setOrderIdList(String orderIdList) { + this.orderIdList = orderIdList; + } + + public String getOrderList() { + return orderList; + } + + public void setOrderList(String orderList) { + this.orderList = orderList; + } + + public String getPaymentList() { + return paymentList; + } + + public void setPaymentList(String paymentList) { + this.paymentList = paymentList; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + public String getSecondParty() { + return secondParty; + } + + public void setSecondParty(String secondParty) { + this.secondParty = secondParty; + } + + 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; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt index 85756b0..36059c5 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt @@ -65,4 +65,8 @@ const val USER_ID = "userId" const val PRIVACY_CHECK_BOX = "privacyCheckBox" const val PUSH_SETTING = "pushSetting" + const val METERAGE_TRAIN_FORM_ID = "jlglpxjhsp" + const val STANDARD_FILE_FORM_ID = "jlglwjsp" + const val CERTIFICATE_REPORT_FORM_ID = "ywglzsbg" + const val CONTRACT_FORM_ID = "cwczht" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt b/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt index da58079..99f3bb1 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt @@ -2,37 +2,42 @@ object SearchType { /** + * 首页模糊搜索 + * */ + const val All = "0" + + /** * 搜索仪器设备 * */ - const val Equipment = "0" + const val Equipment = "1" /** * 搜索标准装置 * */ - const val StandardDevice = "1" + const val StandardDevice = "2" /** * 搜索委托书需求 * */ - const val Entrust = "2" + const val Entrust = "3" /** * 搜索能力 * */ - const val Capability = "3" + const val Capability = "4" /** * 搜索计量培训 * */ - const val MeterageTrain = "4" + const val MeterageTrain = "5" /** * 搜索客户 * */ - const val Customer = "5" + const val Customer = "6" /** - * 首页模糊搜索 + * 搜索仪器设备 * */ - const val All = "6" + const val Contract = "7" } 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 3bd698a..bc4d694 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 @@ -446,4 +446,15 @@ @QueryMap limit: Map, @QueryMap offset: Map ): String + + /** + * 合同列表 + */ + @POST("/finance/agreement/listPage") + suspend fun getContractList( + @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 9e7556b..1aaabee 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 @@ -459,7 +459,6 @@ effectiveCompany: String, trainStartTime: String, trainEndTime: String, - formId: String, ids: Array, offset: Int ): String { @@ -473,7 +472,7 @@ param.addProperty("effectiveCompany", effectiveCompany) param.addProperty("trainStartTime", trainStartTime) param.addProperty("trainEndTime", trainEndTime) - param.addProperty("formId", formId) + param.addProperty("formId", LocaleConstant.METERAGE_TRAIN_FORM_ID) param.add("ids", gson.toJsonTree(ids, typeToken).asJsonArray) val requestBody = param.toString().toRequestBody( @@ -843,7 +842,7 @@ offset: Int ): String { val param = JsonObject() - param.addProperty("formId", "jlglwjsp") + param.addProperty("formId", LocaleConstant.STANDARD_FILE_FORM_ID) param.addProperty("fileType", fileType) param.addProperty("fileName", fileName) param.addProperty("fileNo", fileNo) @@ -884,7 +883,7 @@ offset: Int ): String { val param = JsonObject() - param.addProperty("formId", "ywglzsbg") + param.addProperty("formId", LocaleConstant.CERTIFICATE_REPORT_FORM_ID) param.addProperty("approvalStatus", approvalStatus) param.addProperty("certificateReportCode", certificateReportCode) param.addProperty("customerName", customerName) @@ -925,7 +924,7 @@ */ suspend fun submit(id: String): String { val param = JsonObject() - param.addProperty("formId", "ywglzsbg") + param.addProperty("formId", LocaleConstant.CERTIFICATE_REPORT_FORM_ID) param.addProperty("id", id) val requestBody = param.toString().toRequestBody( "application/json;charset=UTF-8".toMediaType() @@ -1009,4 +1008,47 @@ AuthenticationHelper.token!!, requestBody, limitMap, offsetMap ) } + + /** + * 合同列表 + */ + suspend fun getContractList( + customerId: String, + agreementKind: String, + agreementName: String, + agreementType: String, + agreementNo: String, + estimateSignStartDate: String, + estimateSignEndDate: String, + firstParty: String, + status: String, + ids: Array, + offset: Int + ): String { + val param = JsonObject() + param.addProperty("customerId", customerId) + param.addProperty("agreementKind", agreementKind) + param.addProperty("agreementName", agreementName) + param.addProperty("agreementType", agreementType) + param.addProperty("agreementNo", agreementNo) + param.addProperty("estimateSignStartDate", estimateSignStartDate) + param.addProperty("estimateSignEndDate", estimateSignEndDate) + param.addProperty("firstParty", firstParty) + param.addProperty("formId", LocaleConstant.CONTRACT_FORM_ID) + param.addProperty("status", status) + param.add("ids", gson.toJsonTree(ids, typeToken).asJsonArray) + + val requestBody = param.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + + val limitMap = HashMap() + limitMap["limit"] = LocaleConstant.PAGE_LIMIT + + val offsetMap = HashMap() + offsetMap["offset"] = offset + return api.getContractList( + AuthenticationHelper.token!!, requestBody, limitMap, offsetMap + ) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/ContractInvoiceActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/ContractInvoiceActivity.kt new file mode 100644 index 0000000..96148a3 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/home/ContractInvoiceActivity.kt @@ -0,0 +1,192 @@ +package com.casic.xz.meterage.view.home + +import android.content.Context +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration +import com.casic.xz.meterage.R +import com.casic.xz.meterage.base.ApplicationBaseActivity +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.model.ContractListModel +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.view.search.SearchContractActivity +import com.casic.xz.meterage.vm.ContractInvoiceViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +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_contract_invoice.* +import kotlinx.android.synthetic.main.include_empty_view.* +import kotlinx.android.synthetic.main.include_search_title.* + +class ContractInvoiceActivity : ApplicationBaseActivity() { + + private var context: Context = this@ContractInvoiceActivity + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var contractViewModel: ContractInvoiceViewModel + private lateinit var contractAdapter: NormalRecyclerAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.activity_contract_invoice + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "合同发票" + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + contractViewModel = ViewModelProvider(this)[ContractInvoiceViewModel::class.java] + contractViewModel.contractList.observe(this) { + if (it.code == 200) { + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + contractLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows) + contractLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023041001) + } + } + } + + override fun observeRequestState() { + contractViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + rightOperateView.setOnClickListener { + navigatePageTo() + } + + contractLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getContractListByPage() + } + + contractLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getContractListByPage() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + getContractListByPage() + } + + private fun getContractListByPage() { + contractViewModel.getContractList( + "", + "", + "", + "", + "", + "1", + "", + "", + "", + arrayOf(), + pageIndex + ) + } + + private val callback = Handler.Callback { + when (it.what) { + 2023041001 -> { + if (isRefresh || isLoadMore) { + contractAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无合同") { + pageIndex = 1 + getContractListByPage() + } + } else { + emptyView!!.hide() + contractAdapter = object : + NormalRecyclerAdapter( + R.layout.item_contract_rv_l, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, + position: Int, + item: ContractListModel.DataModel.RowsModel + ) { + viewHolder.setText(R.id.contractNameView, item.agreementName) + .setText(R.id.contractStateView, item.statusName) + .setText(R.id.contractCodeView, "合同编号:${item.agreementNo}") + .setText(R.id.firstPartNameView, "甲方单位:${item.firstParty}") + .setText( + R.id.startDateView, + "签订日期:${item.estimateSignDate.formatToYearMonthDay()}" + ) + + if (item.statusName.contains("已完成")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.green.convertColor(context) + ) + } else if (item.statusName.contains("未完成")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.red.convertColor(context) + ) + } else if (item.statusName.contains("已废止")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.gray.convertColor(context) + ) + } + } + } + contractRecyclerView.addItemDecoration( + DividerItemDecoration(this, DividerItemDecoration.VERTICAL) + ) + contractRecyclerView.adapter = contractAdapter + contractAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, t: ContractListModel.DataModel.RowsModel + ) { +// navigatePageTo(t.id) + } + }) + } + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt index 373c386..078f497 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt @@ -117,7 +117,6 @@ "", "", "", - "jlglpxjhsp", arrayOf(), pageIndex ) diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt index 16bcd38..92e256d 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_capability.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* /** @@ -93,7 +93,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_capability + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractActivity.kt new file mode 100644 index 0000000..17f6cda --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractActivity.kt @@ -0,0 +1,113 @@ +package com.casic.xz.meterage.view.search + +import android.view.LayoutInflater +import android.view.View +import com.casic.xz.meterage.R +import com.casic.xz.meterage.base.ApplicationBaseActivity +import com.casic.xz.meterage.bean.SearchHistoryBean +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.utils.DataBaseManager +import com.casic.xz.meterage.utils.SearchType +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton +import com.zhy.view.flowlayout.FlowLayout +import com.zhy.view.flowlayout.TagAdapter +import kotlinx.android.synthetic.main.activity_search_history.* +import kotlinx.android.synthetic.main.include_search_input_title.* + +/** + * 搜索合同 + * */ +class SearchContractActivity : ApplicationBaseActivity() { + + private lateinit var inflater: LayoutInflater + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var historyAdapter: TagAdapter + private var dataBeans: MutableList = ArrayList() + private var isRefresh = false + + override fun initLayoutView(): Int = R.layout.activity_search_history + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + inputView.hint = "请输入合同名称或者编号查询" + } + + override fun initData() { + inflater = LayoutInflater.from(this) + weakReferenceHandler = WeakReferenceHandler { + if (it.what == 2023041001) { + if (isRefresh) { + historyAdapter.notifyDataChanged() + } else { + historyAdapter = object : TagAdapter(dataBeans) { + override fun getView( + parent: FlowLayout?, position: Int, bean: SearchHistoryBean + ): View { + val tagView = inflater.inflate( + R.layout.item_search_rv_l, tagFlowLayout, false + ) as QMUIRoundButton + tagView.text = bean.keywords + return tagView + } + } + tagFlowLayout.adapter = historyAdapter + tagFlowLayout.setOnTagClickListener { _, position, _ -> + inputView.setText(dataBeans[position].keywords) + navigatePageTo(inputView.text.toString()) + true + } + } + } + true + } + } + + override fun onResume() { + super.onResume() + dataBeans = DataBaseManager.get.queryHistoryByType(SearchType.Contract) + weakReferenceHandler.sendEmptyMessage(2023041001) + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + searchTextView.setOnClickListener { + if (!inputView.text.isNullOrBlank()) { + DataBaseManager.get.addSearchHistory( + inputView.text.toString(), SearchType.Contract + ) + } + + navigatePageTo(inputView.text.toString()) + } + + deleteHistoryView.setOnClickListener { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("确定将所有搜索记录删除?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + + } + + override fun onConfirmClick() { + DataBaseManager.get.deleteHistoryByType(SearchType.Contract) + dataBeans.clear() + historyAdapter.notifyDataChanged() + } + }).build().show() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractResultActivity.kt new file mode 100644 index 0000000..5096b88 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractResultActivity.kt @@ -0,0 +1,210 @@ +package com.casic.xz.meterage.view.search + +import android.content.Context +import android.os.Handler +import androidx.core.text.isDigitsOnly +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration +import com.casic.xz.meterage.R +import com.casic.xz.meterage.base.ApplicationBaseActivity +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.model.ContractListModel +import com.casic.xz.meterage.utils.AppMemoryCache +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.vm.ContractInvoiceViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_search_contract_reasult.* +import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class SearchContractResultActivity : ApplicationBaseActivity() { + + private var context: Context = this@SearchContractResultActivity + private lateinit var param: String + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var contractViewModel: ContractInvoiceViewModel + private lateinit var contractAdapter: NormalRecyclerAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.activity_search_contract_reasult + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "查询结果" + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + getContractListByPage() + } + + override fun initData() { + param = intent.getStringExtra(Constant.INTENT_PARAM)!! + + weakReferenceHandler = WeakReferenceHandler(callback) + contractViewModel = ViewModelProvider(this)[ContractInvoiceViewModel::class.java] + contractViewModel.contractList.observe(this) { + if (it.code == 200) { + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + contractLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows) + contractLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023041002) + } + } + } + + override fun observeRequestState() { + contractViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + + contractLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getContractListByPage() + } + + contractLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getContractListByPage() + } + } + + private fun getContractListByPage() { + if (param.isDigitsOnly()) { + contractViewModel.getContractList( + "", "", "", "", param, + "1", "", "", "", arrayOf(), + pageIndex + ) + } else { + if (param.length < 4) { + //输入参数长度小于4,默认查名称 + contractViewModel.getContractList( + "", "", param, "", "", + "1", "", "", "", arrayOf(), + pageIndex + ) + } else { + if (AppMemoryCache.prefixCode.contains(param.substring(0, 4))) { + contractViewModel.getContractList( + "", "", "", "", param, + "1", "", "", "", arrayOf(), + pageIndex + ) + } else { + contractViewModel.getContractList( + "", "", param, "", "", + "1", "", "", "", arrayOf(), + pageIndex + ) + } + } + } + } + + private val callback = Handler.Callback { + when (it.what) { + 2023041002 -> { + if (isRefresh || isLoadMore) { + contractAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无合同") { + pageIndex = 1 + getContractListByPage() + } + } else { + emptyView!!.hide() + contractAdapter = object : + NormalRecyclerAdapter( + R.layout.item_contract_rv_l, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, + position: Int, + item: ContractListModel.DataModel.RowsModel + ) { + viewHolder.setText(R.id.contractNameView, item.agreementName) + .setText(R.id.contractStateView, item.statusName) + .setText(R.id.contractCodeView, "合同编号:${item.agreementNo}") + .setText(R.id.firstPartNameView, "甲方单位:${item.firstParty}") + .setText( + R.id.startDateView, + "签订日期:${item.estimateSignDate.formatToYearMonthDay()}" + ) + + if (item.statusName.contains("已完成")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.green.convertColor(context) + ) + } else if (item.statusName.contains("未完成")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.red.convertColor(context) + ) + } else if (item.statusName.contains("已废止")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.gray.convertColor(context) + ) + } + } + } + contractRecyclerView.addItemDecoration( + DividerItemDecoration(this, DividerItemDecoration.VERTICAL) + ) + contractRecyclerView.adapter = contractAdapter + contractAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, t: ContractListModel.DataModel.RowsModel + ) { +// navigatePageTo(t.id) + } + }) + } + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt index 08d6bd2..3430e24 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_customer.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* /** @@ -93,7 +93,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_customer + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustActivity.kt index 2bff498..159d51d 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_entrust.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* /** @@ -93,7 +93,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_entrust + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt index b105378..f9b1076 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_equipment.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* @@ -100,7 +100,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_equipment + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt index 6dba78b..0a8c595 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_global.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* class SearchGlobalActivity : ApplicationBaseActivity() { @@ -90,7 +90,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_global + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainActivity.kt index 56fda90..da94e79 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_meterage_train.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* /** @@ -93,7 +93,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_meterage_train + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt index 447c483..cebdace 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt @@ -119,29 +119,25 @@ if (param.isDigitsOnly()) { meterageTrainViewModel.getMeterageTrainList( "", "", "", "", param, "", - "", "", "", "jlglpxjhsp", arrayOf(), - pageIndex + "", "", "", arrayOf(), pageIndex ) } else { if (param.length < 4) { //输入参数长度小于4,默认查名称 meterageTrainViewModel.getMeterageTrainList( "", "", "", param, "", "", - "", "", "", "jlglpxjhsp", arrayOf(), - pageIndex + "", "", "", arrayOf(), pageIndex ) } else { if (AppMemoryCache.prefixCode.contains(param.substring(0, 4))) { meterageTrainViewModel.getMeterageTrainList( "", "", "", "", param, "", - "", "", "", "jlglpxjhsp", arrayOf(), - pageIndex + "", "", "", arrayOf(), pageIndex ) } else { meterageTrainViewModel.getMeterageTrainList( "", "", "", param, "", "", - "", "", "", "jlglpxjhsp", arrayOf(), - pageIndex + "", "", "", arrayOf(), pageIndex ) } } diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchStandardDeviceActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchStandardDeviceActivity.kt index cf96d0d..39b1388 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchStandardDeviceActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchStandardDeviceActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_standard_device.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* /** @@ -99,7 +99,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_standard_device + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/vm/ContractInvoiceViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/ContractInvoiceViewModel.kt new file mode 100644 index 0000000..99b5871 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/vm/ContractInvoiceViewModel.kt @@ -0,0 +1,66 @@ +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.ContractListModel +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 ContractInvoiceViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } + val contractList = MutableLiveData() + + fun getContractList( + customerId: String, + agreementKind: String, + agreementName: String, + agreementType: String, + agreementNo: String, + estimateSignStartDate: String, + estimateSignEndDate: String, + firstParty: String, + status: String, + ids: Array, + offset: Int + ) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.getContractList( + customerId, + agreementKind, + agreementName, + agreementType, + agreementNo, + estimateSignStartDate, + estimateSignEndDate, + firstParty, + status, + ids, + offset + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + contractList.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()) + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/vm/MeterageTrainViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/MeterageTrainViewModel.kt index b1bad75..43e4632 100644 --- a/app/src/main/java/com/casic/xz/meterage/vm/MeterageTrainViewModel.kt +++ b/app/src/main/java/com/casic/xz/meterage/vm/MeterageTrainViewModel.kt @@ -37,7 +37,6 @@ effectiveCompany: String, trainStartTime: String, trainEndTime: String, - formId: String, ids: Array, offset: Int ) = launch({ @@ -52,7 +51,6 @@ effectiveCompany, trainStartTime, trainEndTime, - formId, ids, offset ) diff --git a/app/src/main/res/layout/activity_contract_invoice.xml b/app/src/main/res/layout/activity_contract_invoice.xml new file mode 100644 index 0000000..a926c5b --- /dev/null +++ b/app/src/main/res/layout/activity_contract_invoice.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_search_capability.xml b/app/src/main/res/layout/activity_search_capability.xml deleted file mode 100644 index 93ed590..0000000 --- a/app/src/main/res/layout/activity_search_capability.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/activity_search_contract_reasult.xml b/app/src/main/res/layout/activity_search_contract_reasult.xml new file mode 100644 index 0000000..bcd2ad9 --- /dev/null +++ b/app/src/main/res/layout/activity_search_contract_reasult.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_search_customer.xml b/app/src/main/res/layout/activity_search_customer.xml deleted file mode 100644 index 93ed590..0000000 --- a/app/src/main/res/layout/activity_search_customer.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/activity_search_entrust.xml b/app/src/main/res/layout/activity_search_entrust.xml deleted file mode 100644 index 93ed590..0000000 --- a/app/src/main/res/layout/activity_search_entrust.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/activity_search_equipment.xml b/app/src/main/res/layout/activity_search_equipment.xml deleted file mode 100644 index 93ed590..0000000 --- a/app/src/main/res/layout/activity_search_equipment.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/activity_search_global.xml b/app/src/main/res/layout/activity_search_global.xml deleted file mode 100644 index 93ed590..0000000 --- a/app/src/main/res/layout/activity_search_global.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/activity_search_history.xml b/app/src/main/res/layout/activity_search_history.xml new file mode 100644 index 0000000..93ed590 --- /dev/null +++ b/app/src/main/res/layout/activity_search_history.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_search_meterage_train.xml b/app/src/main/res/layout/activity_search_meterage_train.xml deleted file mode 100644 index 93ed590..0000000 --- a/app/src/main/res/layout/activity_search_meterage_train.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/activity_search_standard_device.xml b/app/src/main/res/layout/activity_search_standard_device.xml deleted file mode 100644 index 93ed590..0000000 --- a/app/src/main/res/layout/activity_search_standard_device.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 9fc7c01..78d7828 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -71,6 +71,7 @@ + @@ -85,6 +86,8 @@ + + diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt index 71fe5a8..ad81434 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt @@ -170,7 +170,7 @@ "标准规范" -> requireContext().navigatePageTo() "能力列表" -> requireContext().navigatePageTo() "计量培训" -> requireContext().navigatePageTo() -// "合同发票" -> requireContext().navigatePageTo() + "合同发票" -> requireContext().navigatePageTo() // "业务统计" -> requireContext().navigatePageTo() "客户列表" -> requireContext().navigatePageTo() // "外场检测" -> requireContext().navigatePageTo() diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt index b47cb32..b12a0bf 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt @@ -184,7 +184,7 @@ requireContext().navigatePageTo() } - //TODO 未实现 + //TODO 通过接口修改数据库字段实现 pushSettingSwitch.setOnCheckedChangeListener { _, isChecked -> SaveKeyValues.putValue(LocaleConstant.PUSH_SETTING, isChecked) if (isChecked) { diff --git a/app/src/main/java/com/casic/xz/meterage/model/ContractListModel.java b/app/src/main/java/com/casic/xz/meterage/model/ContractListModel.java new file mode 100644 index 0000000..111ff52 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/model/ContractListModel.java @@ -0,0 +1,364 @@ +package com.casic.xz.meterage.model; + +import java.util.List; + +public class ContractListModel { + + 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 agreementAmount; + private String agreementEndDate; + private String agreementImportantContent; + private String agreementKind; + private String agreementKindName; + private String agreementName; + private String agreementNo; + private String agreementSource; + private String agreementSourceName; + private String agreementStartDate; + private String agreementType; + private String agreementTypeName; + private String approvalStatus; + private String createTime; + private String createUser; + private String createUserName; + private String customerId; + private String deptId; + private String deptName; + private String director; + private String estimateSignDate; + private String firstParty; + private String id; + private String isDel; + private String minioFileName; + private String orderIdList; + private String orderList; + private String paymentList; + private String processId; + private String remark; + private String secondParty; + private String status; + private String statusName; + private String updateTime; + + public String getAgreementAmount() { + return agreementAmount; + } + + public void setAgreementAmount(String agreementAmount) { + this.agreementAmount = agreementAmount; + } + + public String getAgreementEndDate() { + return agreementEndDate; + } + + public void setAgreementEndDate(String agreementEndDate) { + this.agreementEndDate = agreementEndDate; + } + + public String getAgreementImportantContent() { + return agreementImportantContent; + } + + public void setAgreementImportantContent(String agreementImportantContent) { + this.agreementImportantContent = agreementImportantContent; + } + + public String getAgreementKind() { + return agreementKind; + } + + public void setAgreementKind(String agreementKind) { + this.agreementKind = agreementKind; + } + + public String getAgreementKindName() { + return agreementKindName; + } + + public void setAgreementKindName(String agreementKindName) { + this.agreementKindName = agreementKindName; + } + + public String getAgreementName() { + return agreementName; + } + + public void setAgreementName(String agreementName) { + this.agreementName = agreementName; + } + + public String getAgreementNo() { + return agreementNo; + } + + public void setAgreementNo(String agreementNo) { + this.agreementNo = agreementNo; + } + + public String getAgreementSource() { + return agreementSource; + } + + public void setAgreementSource(String agreementSource) { + this.agreementSource = agreementSource; + } + + public String getAgreementSourceName() { + return agreementSourceName; + } + + public void setAgreementSourceName(String agreementSourceName) { + this.agreementSourceName = agreementSourceName; + } + + public String getAgreementStartDate() { + return agreementStartDate; + } + + public void setAgreementStartDate(String agreementStartDate) { + this.agreementStartDate = agreementStartDate; + } + + public String getAgreementType() { + return agreementType; + } + + public void setAgreementType(String agreementType) { + this.agreementType = agreementType; + } + + public String getAgreementTypeName() { + return agreementTypeName; + } + + public void setAgreementTypeName(String agreementTypeName) { + this.agreementTypeName = agreementTypeName; + } + + public String getApprovalStatus() { + return approvalStatus; + } + + public void setApprovalStatus(String approvalStatus) { + this.approvalStatus = approvalStatus; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getCreateUser() { + return createUser; + } + + public void setCreateUser(String createUser) { + this.createUser = createUser; + } + + public String getCreateUserName() { + return createUserName; + } + + public void setCreateUserName(String createUserName) { + this.createUserName = createUserName; + } + + public String getCustomerId() { + return customerId; + } + + public void setCustomerId(String customerId) { + this.customerId = customerId; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDirector() { + return director; + } + + public void setDirector(String director) { + this.director = director; + } + + public String getEstimateSignDate() { + return estimateSignDate; + } + + public void setEstimateSignDate(String estimateSignDate) { + this.estimateSignDate = estimateSignDate; + } + + public String getFirstParty() { + return firstParty; + } + + public void setFirstParty(String firstParty) { + this.firstParty = firstParty; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getIsDel() { + return isDel; + } + + public void setIsDel(String isDel) { + this.isDel = isDel; + } + + public String getMinioFileName() { + return minioFileName; + } + + public void setMinioFileName(String minioFileName) { + this.minioFileName = minioFileName; + } + + public String getOrderIdList() { + return orderIdList; + } + + public void setOrderIdList(String orderIdList) { + this.orderIdList = orderIdList; + } + + public String getOrderList() { + return orderList; + } + + public void setOrderList(String orderList) { + this.orderList = orderList; + } + + public String getPaymentList() { + return paymentList; + } + + public void setPaymentList(String paymentList) { + this.paymentList = paymentList; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + public String getSecondParty() { + return secondParty; + } + + public void setSecondParty(String secondParty) { + this.secondParty = secondParty; + } + + 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; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt index 85756b0..36059c5 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt @@ -65,4 +65,8 @@ const val USER_ID = "userId" const val PRIVACY_CHECK_BOX = "privacyCheckBox" const val PUSH_SETTING = "pushSetting" + const val METERAGE_TRAIN_FORM_ID = "jlglpxjhsp" + const val STANDARD_FILE_FORM_ID = "jlglwjsp" + const val CERTIFICATE_REPORT_FORM_ID = "ywglzsbg" + const val CONTRACT_FORM_ID = "cwczht" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt b/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt index da58079..99f3bb1 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt @@ -2,37 +2,42 @@ object SearchType { /** + * 首页模糊搜索 + * */ + const val All = "0" + + /** * 搜索仪器设备 * */ - const val Equipment = "0" + const val Equipment = "1" /** * 搜索标准装置 * */ - const val StandardDevice = "1" + const val StandardDevice = "2" /** * 搜索委托书需求 * */ - const val Entrust = "2" + const val Entrust = "3" /** * 搜索能力 * */ - const val Capability = "3" + const val Capability = "4" /** * 搜索计量培训 * */ - const val MeterageTrain = "4" + const val MeterageTrain = "5" /** * 搜索客户 * */ - const val Customer = "5" + const val Customer = "6" /** - * 首页模糊搜索 + * 搜索仪器设备 * */ - const val All = "6" + const val Contract = "7" } 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 3bd698a..bc4d694 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 @@ -446,4 +446,15 @@ @QueryMap limit: Map, @QueryMap offset: Map ): String + + /** + * 合同列表 + */ + @POST("/finance/agreement/listPage") + suspend fun getContractList( + @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 9e7556b..1aaabee 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 @@ -459,7 +459,6 @@ effectiveCompany: String, trainStartTime: String, trainEndTime: String, - formId: String, ids: Array, offset: Int ): String { @@ -473,7 +472,7 @@ param.addProperty("effectiveCompany", effectiveCompany) param.addProperty("trainStartTime", trainStartTime) param.addProperty("trainEndTime", trainEndTime) - param.addProperty("formId", formId) + param.addProperty("formId", LocaleConstant.METERAGE_TRAIN_FORM_ID) param.add("ids", gson.toJsonTree(ids, typeToken).asJsonArray) val requestBody = param.toString().toRequestBody( @@ -843,7 +842,7 @@ offset: Int ): String { val param = JsonObject() - param.addProperty("formId", "jlglwjsp") + param.addProperty("formId", LocaleConstant.STANDARD_FILE_FORM_ID) param.addProperty("fileType", fileType) param.addProperty("fileName", fileName) param.addProperty("fileNo", fileNo) @@ -884,7 +883,7 @@ offset: Int ): String { val param = JsonObject() - param.addProperty("formId", "ywglzsbg") + param.addProperty("formId", LocaleConstant.CERTIFICATE_REPORT_FORM_ID) param.addProperty("approvalStatus", approvalStatus) param.addProperty("certificateReportCode", certificateReportCode) param.addProperty("customerName", customerName) @@ -925,7 +924,7 @@ */ suspend fun submit(id: String): String { val param = JsonObject() - param.addProperty("formId", "ywglzsbg") + param.addProperty("formId", LocaleConstant.CERTIFICATE_REPORT_FORM_ID) param.addProperty("id", id) val requestBody = param.toString().toRequestBody( "application/json;charset=UTF-8".toMediaType() @@ -1009,4 +1008,47 @@ AuthenticationHelper.token!!, requestBody, limitMap, offsetMap ) } + + /** + * 合同列表 + */ + suspend fun getContractList( + customerId: String, + agreementKind: String, + agreementName: String, + agreementType: String, + agreementNo: String, + estimateSignStartDate: String, + estimateSignEndDate: String, + firstParty: String, + status: String, + ids: Array, + offset: Int + ): String { + val param = JsonObject() + param.addProperty("customerId", customerId) + param.addProperty("agreementKind", agreementKind) + param.addProperty("agreementName", agreementName) + param.addProperty("agreementType", agreementType) + param.addProperty("agreementNo", agreementNo) + param.addProperty("estimateSignStartDate", estimateSignStartDate) + param.addProperty("estimateSignEndDate", estimateSignEndDate) + param.addProperty("firstParty", firstParty) + param.addProperty("formId", LocaleConstant.CONTRACT_FORM_ID) + param.addProperty("status", status) + param.add("ids", gson.toJsonTree(ids, typeToken).asJsonArray) + + val requestBody = param.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + + val limitMap = HashMap() + limitMap["limit"] = LocaleConstant.PAGE_LIMIT + + val offsetMap = HashMap() + offsetMap["offset"] = offset + return api.getContractList( + AuthenticationHelper.token!!, requestBody, limitMap, offsetMap + ) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/ContractInvoiceActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/ContractInvoiceActivity.kt new file mode 100644 index 0000000..96148a3 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/home/ContractInvoiceActivity.kt @@ -0,0 +1,192 @@ +package com.casic.xz.meterage.view.home + +import android.content.Context +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration +import com.casic.xz.meterage.R +import com.casic.xz.meterage.base.ApplicationBaseActivity +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.model.ContractListModel +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.view.search.SearchContractActivity +import com.casic.xz.meterage.vm.ContractInvoiceViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +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_contract_invoice.* +import kotlinx.android.synthetic.main.include_empty_view.* +import kotlinx.android.synthetic.main.include_search_title.* + +class ContractInvoiceActivity : ApplicationBaseActivity() { + + private var context: Context = this@ContractInvoiceActivity + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var contractViewModel: ContractInvoiceViewModel + private lateinit var contractAdapter: NormalRecyclerAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.activity_contract_invoice + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "合同发票" + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + contractViewModel = ViewModelProvider(this)[ContractInvoiceViewModel::class.java] + contractViewModel.contractList.observe(this) { + if (it.code == 200) { + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + contractLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows) + contractLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023041001) + } + } + } + + override fun observeRequestState() { + contractViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + rightOperateView.setOnClickListener { + navigatePageTo() + } + + contractLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getContractListByPage() + } + + contractLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getContractListByPage() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + getContractListByPage() + } + + private fun getContractListByPage() { + contractViewModel.getContractList( + "", + "", + "", + "", + "", + "1", + "", + "", + "", + arrayOf(), + pageIndex + ) + } + + private val callback = Handler.Callback { + when (it.what) { + 2023041001 -> { + if (isRefresh || isLoadMore) { + contractAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无合同") { + pageIndex = 1 + getContractListByPage() + } + } else { + emptyView!!.hide() + contractAdapter = object : + NormalRecyclerAdapter( + R.layout.item_contract_rv_l, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, + position: Int, + item: ContractListModel.DataModel.RowsModel + ) { + viewHolder.setText(R.id.contractNameView, item.agreementName) + .setText(R.id.contractStateView, item.statusName) + .setText(R.id.contractCodeView, "合同编号:${item.agreementNo}") + .setText(R.id.firstPartNameView, "甲方单位:${item.firstParty}") + .setText( + R.id.startDateView, + "签订日期:${item.estimateSignDate.formatToYearMonthDay()}" + ) + + if (item.statusName.contains("已完成")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.green.convertColor(context) + ) + } else if (item.statusName.contains("未完成")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.red.convertColor(context) + ) + } else if (item.statusName.contains("已废止")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.gray.convertColor(context) + ) + } + } + } + contractRecyclerView.addItemDecoration( + DividerItemDecoration(this, DividerItemDecoration.VERTICAL) + ) + contractRecyclerView.adapter = contractAdapter + contractAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, t: ContractListModel.DataModel.RowsModel + ) { +// navigatePageTo(t.id) + } + }) + } + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt index 373c386..078f497 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt @@ -117,7 +117,6 @@ "", "", "", - "jlglpxjhsp", arrayOf(), pageIndex ) diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt index 16bcd38..92e256d 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCapabilityActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_capability.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* /** @@ -93,7 +93,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_capability + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractActivity.kt new file mode 100644 index 0000000..17f6cda --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractActivity.kt @@ -0,0 +1,113 @@ +package com.casic.xz.meterage.view.search + +import android.view.LayoutInflater +import android.view.View +import com.casic.xz.meterage.R +import com.casic.xz.meterage.base.ApplicationBaseActivity +import com.casic.xz.meterage.bean.SearchHistoryBean +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.utils.DataBaseManager +import com.casic.xz.meterage.utils.SearchType +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton +import com.zhy.view.flowlayout.FlowLayout +import com.zhy.view.flowlayout.TagAdapter +import kotlinx.android.synthetic.main.activity_search_history.* +import kotlinx.android.synthetic.main.include_search_input_title.* + +/** + * 搜索合同 + * */ +class SearchContractActivity : ApplicationBaseActivity() { + + private lateinit var inflater: LayoutInflater + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var historyAdapter: TagAdapter + private var dataBeans: MutableList = ArrayList() + private var isRefresh = false + + override fun initLayoutView(): Int = R.layout.activity_search_history + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + inputView.hint = "请输入合同名称或者编号查询" + } + + override fun initData() { + inflater = LayoutInflater.from(this) + weakReferenceHandler = WeakReferenceHandler { + if (it.what == 2023041001) { + if (isRefresh) { + historyAdapter.notifyDataChanged() + } else { + historyAdapter = object : TagAdapter(dataBeans) { + override fun getView( + parent: FlowLayout?, position: Int, bean: SearchHistoryBean + ): View { + val tagView = inflater.inflate( + R.layout.item_search_rv_l, tagFlowLayout, false + ) as QMUIRoundButton + tagView.text = bean.keywords + return tagView + } + } + tagFlowLayout.adapter = historyAdapter + tagFlowLayout.setOnTagClickListener { _, position, _ -> + inputView.setText(dataBeans[position].keywords) + navigatePageTo(inputView.text.toString()) + true + } + } + } + true + } + } + + override fun onResume() { + super.onResume() + dataBeans = DataBaseManager.get.queryHistoryByType(SearchType.Contract) + weakReferenceHandler.sendEmptyMessage(2023041001) + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + searchTextView.setOnClickListener { + if (!inputView.text.isNullOrBlank()) { + DataBaseManager.get.addSearchHistory( + inputView.text.toString(), SearchType.Contract + ) + } + + navigatePageTo(inputView.text.toString()) + } + + deleteHistoryView.setOnClickListener { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("确定将所有搜索记录删除?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + + } + + override fun onConfirmClick() { + DataBaseManager.get.deleteHistoryByType(SearchType.Contract) + dataBeans.clear() + historyAdapter.notifyDataChanged() + } + }).build().show() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractResultActivity.kt new file mode 100644 index 0000000..5096b88 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchContractResultActivity.kt @@ -0,0 +1,210 @@ +package com.casic.xz.meterage.view.search + +import android.content.Context +import android.os.Handler +import androidx.core.text.isDigitsOnly +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration +import com.casic.xz.meterage.R +import com.casic.xz.meterage.base.ApplicationBaseActivity +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.model.ContractListModel +import com.casic.xz.meterage.utils.AppMemoryCache +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.vm.ContractInvoiceViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_search_contract_reasult.* +import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class SearchContractResultActivity : ApplicationBaseActivity() { + + private var context: Context = this@SearchContractResultActivity + private lateinit var param: String + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var contractViewModel: ContractInvoiceViewModel + private lateinit var contractAdapter: NormalRecyclerAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.activity_search_contract_reasult + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "查询结果" + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + getContractListByPage() + } + + override fun initData() { + param = intent.getStringExtra(Constant.INTENT_PARAM)!! + + weakReferenceHandler = WeakReferenceHandler(callback) + contractViewModel = ViewModelProvider(this)[ContractInvoiceViewModel::class.java] + contractViewModel.contractList.observe(this) { + if (it.code == 200) { + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + contractLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows) + contractLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023041002) + } + } + } + + override fun observeRequestState() { + contractViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + + contractLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getContractListByPage() + } + + contractLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getContractListByPage() + } + } + + private fun getContractListByPage() { + if (param.isDigitsOnly()) { + contractViewModel.getContractList( + "", "", "", "", param, + "1", "", "", "", arrayOf(), + pageIndex + ) + } else { + if (param.length < 4) { + //输入参数长度小于4,默认查名称 + contractViewModel.getContractList( + "", "", param, "", "", + "1", "", "", "", arrayOf(), + pageIndex + ) + } else { + if (AppMemoryCache.prefixCode.contains(param.substring(0, 4))) { + contractViewModel.getContractList( + "", "", "", "", param, + "1", "", "", "", arrayOf(), + pageIndex + ) + } else { + contractViewModel.getContractList( + "", "", param, "", "", + "1", "", "", "", arrayOf(), + pageIndex + ) + } + } + } + } + + private val callback = Handler.Callback { + when (it.what) { + 2023041002 -> { + if (isRefresh || isLoadMore) { + contractAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无合同") { + pageIndex = 1 + getContractListByPage() + } + } else { + emptyView!!.hide() + contractAdapter = object : + NormalRecyclerAdapter( + R.layout.item_contract_rv_l, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, + position: Int, + item: ContractListModel.DataModel.RowsModel + ) { + viewHolder.setText(R.id.contractNameView, item.agreementName) + .setText(R.id.contractStateView, item.statusName) + .setText(R.id.contractCodeView, "合同编号:${item.agreementNo}") + .setText(R.id.firstPartNameView, "甲方单位:${item.firstParty}") + .setText( + R.id.startDateView, + "签订日期:${item.estimateSignDate.formatToYearMonthDay()}" + ) + + if (item.statusName.contains("已完成")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.green.convertColor(context) + ) + } else if (item.statusName.contains("未完成")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.red.convertColor(context) + ) + } else if (item.statusName.contains("已废止")) { + viewHolder.setBackgroundColor( + R.id.contractStateView, R.color.gray.convertColor(context) + ) + } + } + } + contractRecyclerView.addItemDecoration( + DividerItemDecoration(this, DividerItemDecoration.VERTICAL) + ) + contractRecyclerView.adapter = contractAdapter + contractAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, t: ContractListModel.DataModel.RowsModel + ) { +// navigatePageTo(t.id) + } + }) + } + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt index 08d6bd2..3430e24 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchCustomerActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_customer.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* /** @@ -93,7 +93,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_customer + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustActivity.kt index 2bff498..159d51d 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_entrust.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* /** @@ -93,7 +93,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_entrust + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt index b105378..f9b1076 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_equipment.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* @@ -100,7 +100,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_equipment + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt index 6dba78b..0a8c595 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_global.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* class SearchGlobalActivity : ApplicationBaseActivity() { @@ -90,7 +90,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_global + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainActivity.kt index 56fda90..da94e79 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_meterage_train.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* /** @@ -93,7 +93,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_meterage_train + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt index 447c483..cebdace 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt @@ -119,29 +119,25 @@ if (param.isDigitsOnly()) { meterageTrainViewModel.getMeterageTrainList( "", "", "", "", param, "", - "", "", "", "jlglpxjhsp", arrayOf(), - pageIndex + "", "", "", arrayOf(), pageIndex ) } else { if (param.length < 4) { //输入参数长度小于4,默认查名称 meterageTrainViewModel.getMeterageTrainList( "", "", "", param, "", "", - "", "", "", "jlglpxjhsp", arrayOf(), - pageIndex + "", "", "", arrayOf(), pageIndex ) } else { if (AppMemoryCache.prefixCode.contains(param.substring(0, 4))) { meterageTrainViewModel.getMeterageTrainList( "", "", "", "", param, "", - "", "", "", "jlglpxjhsp", arrayOf(), - pageIndex + "", "", "", arrayOf(), pageIndex ) } else { meterageTrainViewModel.getMeterageTrainList( "", "", "", param, "", "", - "", "", "", "jlglpxjhsp", arrayOf(), - pageIndex + "", "", "", arrayOf(), pageIndex ) } } diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchStandardDeviceActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchStandardDeviceActivity.kt index cf96d0d..39b1388 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchStandardDeviceActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchStandardDeviceActivity.kt @@ -15,7 +15,7 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_standard_device.* +import kotlinx.android.synthetic.main.activity_search_history.* import kotlinx.android.synthetic.main.include_search_input_title.* /** @@ -99,7 +99,7 @@ } } - override fun initLayoutView(): Int = R.layout.activity_search_standard_device + override fun initLayoutView(): Int = R.layout.activity_search_history override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/vm/ContractInvoiceViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/ContractInvoiceViewModel.kt new file mode 100644 index 0000000..99b5871 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/vm/ContractInvoiceViewModel.kt @@ -0,0 +1,66 @@ +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.ContractListModel +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 ContractInvoiceViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } + val contractList = MutableLiveData() + + fun getContractList( + customerId: String, + agreementKind: String, + agreementName: String, + agreementType: String, + agreementNo: String, + estimateSignStartDate: String, + estimateSignEndDate: String, + firstParty: String, + status: String, + ids: Array, + offset: Int + ) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.getContractList( + customerId, + agreementKind, + agreementName, + agreementType, + agreementNo, + estimateSignStartDate, + estimateSignEndDate, + firstParty, + status, + ids, + offset + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + contractList.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()) + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/vm/MeterageTrainViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/MeterageTrainViewModel.kt index b1bad75..43e4632 100644 --- a/app/src/main/java/com/casic/xz/meterage/vm/MeterageTrainViewModel.kt +++ b/app/src/main/java/com/casic/xz/meterage/vm/MeterageTrainViewModel.kt @@ -37,7 +37,6 @@ effectiveCompany: String, trainStartTime: String, trainEndTime: String, - formId: String, ids: Array, offset: Int ) = launch({ @@ -52,7 +51,6 @@ effectiveCompany, trainStartTime, trainEndTime, - formId, ids, offset ) diff --git a/app/src/main/res/layout/activity_contract_invoice.xml b/app/src/main/res/layout/activity_contract_invoice.xml new file mode 100644 index 0000000..a926c5b --- /dev/null +++ b/app/src/main/res/layout/activity_contract_invoice.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_search_capability.xml b/app/src/main/res/layout/activity_search_capability.xml deleted file mode 100644 index 93ed590..0000000 --- a/app/src/main/res/layout/activity_search_capability.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/activity_search_contract_reasult.xml b/app/src/main/res/layout/activity_search_contract_reasult.xml new file mode 100644 index 0000000..bcd2ad9 --- /dev/null +++ b/app/src/main/res/layout/activity_search_contract_reasult.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_search_customer.xml b/app/src/main/res/layout/activity_search_customer.xml deleted file mode 100644 index 93ed590..0000000 --- a/app/src/main/res/layout/activity_search_customer.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/activity_search_entrust.xml b/app/src/main/res/layout/activity_search_entrust.xml deleted file mode 100644 index 93ed590..0000000 --- a/app/src/main/res/layout/activity_search_entrust.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/activity_search_equipment.xml b/app/src/main/res/layout/activity_search_equipment.xml deleted file mode 100644 index 93ed590..0000000 --- a/app/src/main/res/layout/activity_search_equipment.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/activity_search_global.xml b/app/src/main/res/layout/activity_search_global.xml deleted file mode 100644 index 93ed590..0000000 --- a/app/src/main/res/layout/activity_search_global.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/activity_search_history.xml b/app/src/main/res/layout/activity_search_history.xml new file mode 100644 index 0000000..93ed590 --- /dev/null +++ b/app/src/main/res/layout/activity_search_history.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_search_meterage_train.xml b/app/src/main/res/layout/activity_search_meterage_train.xml deleted file mode 100644 index 93ed590..0000000 --- a/app/src/main/res/layout/activity_search_meterage_train.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/activity_search_standard_device.xml b/app/src/main/res/layout/activity_search_standard_device.xml deleted file mode 100644 index 93ed590..0000000 --- a/app/src/main/res/layout/activity_search_standard_device.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/item_contract_rv_l.xml b/app/src/main/res/layout/item_contract_rv_l.xml new file mode 100644 index 0000000..70d4d29 --- /dev/null +++ b/app/src/main/res/layout/item_contract_rv_l.xml @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file