diff --git a/app/build.gradle b/app/build.gradle index 6f0b518..bcfdc0d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ applicationId "com.casic.dcms" minSdkVersion 21 targetSdkVersion 30 - versionCode 19 - versionName "v1.0.0.11" + versionCode 20 + versionName "v1.0.0.12" ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } diff --git a/app/build.gradle b/app/build.gradle index 6f0b518..bcfdc0d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ applicationId "com.casic.dcms" minSdkVersion 21 targetSdkVersion 30 - versionCode 19 - versionName "v1.0.0.11" + versionCode 20 + versionName "v1.0.0.12" ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 68f46c9..3090a91 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -89,7 +89,10 @@ - + + + + - + + + + { + + private Context context; + private List dataRows; + private LayoutInflater layoutInflater; + private QMUITipDialog.Builder dialogBuilder; + + public MaintainRecordAdapter(Context context, List dataRows) { + this.context = context; + this.dataRows = dataRows; + layoutInflater = LayoutInflater.from(context); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = layoutInflater.inflate(R.layout.item_maintain_recycleview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + holder.bindView(dataRows.get(position)); + } + + @Override + public int getItemCount() { + return dataRows.size(); + } + + class ItemViewHolder extends RecyclerView.ViewHolder { + + private TextView bridgeNameView; + private ImageView descriptionImageView; + private TextView maintainContentView; + private TextView maintainTimeView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + bridgeNameView = itemView.findViewById(R.id.bridgeNameView); + descriptionImageView = itemView.findViewById(R.id.descriptionImageView); + maintainContentView = itemView.findViewById(R.id.maintainContentView); + maintainTimeView = itemView.findViewById(R.id.maintainTimeView); + } + + void bindView(MaintainRecordBean.DataBean.RowsBean rowsBean) { + bridgeNameView.setText(rowsBean.getBridgeName()); + String description = rowsBean.getDescription(); + if (TextUtils.isEmpty(description)) { + descriptionImageView.setVisibility(View.GONE); + } else { + descriptionImageView.setVisibility(View.VISIBLE); + descriptionImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + QMUITipDialog tipDialog = new QMUITipDialog.Builder(context) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_NOTHING) + .setTipWord(description) + .create(); + tipDialog.show(); + descriptionImageView.postDelayed(new Runnable() { + @Override + public void run() { + tipDialog.dismiss(); + } + }, 2000); + } + }); + } + maintainContentView.setText(rowsBean.getContent()); + maintainTimeView.setText(rowsBean.getMaintainTimeStr()); + } + } +} diff --git a/app/build.gradle b/app/build.gradle index 6f0b518..bcfdc0d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ applicationId "com.casic.dcms" minSdkVersion 21 targetSdkVersion 30 - versionCode 19 - versionName "v1.0.0.11" + versionCode 20 + versionName "v1.0.0.12" ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 68f46c9..3090a91 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -89,7 +89,10 @@ - + + + + { + + private Context context; + private List dataRows; + private LayoutInflater layoutInflater; + private QMUITipDialog.Builder dialogBuilder; + + public MaintainRecordAdapter(Context context, List dataRows) { + this.context = context; + this.dataRows = dataRows; + layoutInflater = LayoutInflater.from(context); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = layoutInflater.inflate(R.layout.item_maintain_recycleview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + holder.bindView(dataRows.get(position)); + } + + @Override + public int getItemCount() { + return dataRows.size(); + } + + class ItemViewHolder extends RecyclerView.ViewHolder { + + private TextView bridgeNameView; + private ImageView descriptionImageView; + private TextView maintainContentView; + private TextView maintainTimeView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + bridgeNameView = itemView.findViewById(R.id.bridgeNameView); + descriptionImageView = itemView.findViewById(R.id.descriptionImageView); + maintainContentView = itemView.findViewById(R.id.maintainContentView); + maintainTimeView = itemView.findViewById(R.id.maintainTimeView); + } + + void bindView(MaintainRecordBean.DataBean.RowsBean rowsBean) { + bridgeNameView.setText(rowsBean.getBridgeName()); + String description = rowsBean.getDescription(); + if (TextUtils.isEmpty(description)) { + descriptionImageView.setVisibility(View.GONE); + } else { + descriptionImageView.setVisibility(View.VISIBLE); + descriptionImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + QMUITipDialog tipDialog = new QMUITipDialog.Builder(context) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_NOTHING) + .setTipWord(description) + .create(); + tipDialog.show(); + descriptionImageView.postDelayed(new Runnable() { + @Override + public void run() { + tipDialog.dismiss(); + } + }, 2000); + } + }); + } + maintainContentView.setText(rowsBean.getContent()); + maintainTimeView.setText(rowsBean.getMaintainTimeStr()); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java b/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java new file mode 100644 index 0000000..ded4fe1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java @@ -0,0 +1,41 @@ +package com.casic.dcms.bean; + +public class MaintainContentBean { + + private int code; + private String data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/build.gradle b/app/build.gradle index 6f0b518..bcfdc0d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ applicationId "com.casic.dcms" minSdkVersion 21 targetSdkVersion 30 - versionCode 19 - versionName "v1.0.0.11" + versionCode 20 + versionName "v1.0.0.12" ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 68f46c9..3090a91 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -89,7 +89,10 @@ - + + + + { + + private Context context; + private List dataRows; + private LayoutInflater layoutInflater; + private QMUITipDialog.Builder dialogBuilder; + + public MaintainRecordAdapter(Context context, List dataRows) { + this.context = context; + this.dataRows = dataRows; + layoutInflater = LayoutInflater.from(context); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = layoutInflater.inflate(R.layout.item_maintain_recycleview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + holder.bindView(dataRows.get(position)); + } + + @Override + public int getItemCount() { + return dataRows.size(); + } + + class ItemViewHolder extends RecyclerView.ViewHolder { + + private TextView bridgeNameView; + private ImageView descriptionImageView; + private TextView maintainContentView; + private TextView maintainTimeView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + bridgeNameView = itemView.findViewById(R.id.bridgeNameView); + descriptionImageView = itemView.findViewById(R.id.descriptionImageView); + maintainContentView = itemView.findViewById(R.id.maintainContentView); + maintainTimeView = itemView.findViewById(R.id.maintainTimeView); + } + + void bindView(MaintainRecordBean.DataBean.RowsBean rowsBean) { + bridgeNameView.setText(rowsBean.getBridgeName()); + String description = rowsBean.getDescription(); + if (TextUtils.isEmpty(description)) { + descriptionImageView.setVisibility(View.GONE); + } else { + descriptionImageView.setVisibility(View.VISIBLE); + descriptionImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + QMUITipDialog tipDialog = new QMUITipDialog.Builder(context) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_NOTHING) + .setTipWord(description) + .create(); + tipDialog.show(); + descriptionImageView.postDelayed(new Runnable() { + @Override + public void run() { + tipDialog.dismiss(); + } + }, 2000); + } + }); + } + maintainContentView.setText(rowsBean.getContent()); + maintainTimeView.setText(rowsBean.getMaintainTimeStr()); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java b/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java new file mode 100644 index 0000000..ded4fe1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java @@ -0,0 +1,41 @@ +package com.casic.dcms.bean; + +public class MaintainContentBean { + + private int code; + private String data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java b/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java new file mode 100644 index 0000000..2beea74 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java @@ -0,0 +1,301 @@ +package com.casic.dcms.bean; + +import java.util.List; + +public class MaintainRecordBean { + + private int code; + private DataBean data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + + private int total; + private List rows; + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public static class RowsBean { + /** + * bridgeId : 1 + * bridgeName : 永胜桥 + * category : 桥梁 + * code : 1624359572304 + * content : 日常养护,无异常 + * deptid : 1344110695992258561 + * description : + * id : 1407292162033041409 + * latitude : 39.914705918747295 + * longitude : 116.26295490330527 + * maintainTime : 2021-06-22 00:00:00 + * maintainTimeStr : 2021-06-22 + * name : + * personId : 1344179277212151809 + * personName : + * phone : + * status : + * statusName : + * tender : + * tenderCompany : + * ts : 2021-06-22 + * type : + * typeName : + */ + + private String bridgeId; + private String bridgeName; + private String category; + private String code; + private String content; + private String deptid; + private String description; + private String id; + private String latitude; + private String longitude; + private String maintainTime; + private String maintainTimeStr; + private String name; + private String personId; + private String personName; + private String phone; + private String status; + private String statusName; + private String tender; + private String tenderCompany; + private String ts; + private String type; + private String typeName; + + public String getBridgeId() { + return bridgeId; + } + + public void setBridgeId(String bridgeId) { + this.bridgeId = bridgeId; + } + + public String getBridgeName() { + return bridgeName; + } + + public void setBridgeName(String bridgeName) { + this.bridgeName = bridgeName; + } + + public String getCategory() { + return category; + } + + public void setCategory(String category) { + this.category = category; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLatitude() { + return latitude; + } + + public void setLatitude(String latitude) { + this.latitude = latitude; + } + + public String getLongitude() { + return longitude; + } + + public void setLongitude(String longitude) { + this.longitude = longitude; + } + + public String getMaintainTime() { + return maintainTime; + } + + public void setMaintainTime(String maintainTime) { + this.maintainTime = maintainTime; + } + + public String getMaintainTimeStr() { + return maintainTimeStr; + } + + public void setMaintainTimeStr(String maintainTimeStr) { + this.maintainTimeStr = maintainTimeStr; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPersonId() { + return personId; + } + + public void setPersonId(String personId) { + this.personId = personId; + } + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + 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 getTender() { + return tender; + } + + public void setTender(String tender) { + this.tender = tender; + } + + public String getTenderCompany() { + return tenderCompany; + } + + public void setTenderCompany(String tenderCompany) { + this.tenderCompany = tenderCompany; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getTypeName() { + return typeName; + } + + public void setTypeName(String typeName) { + this.typeName = typeName; + } + } + } +} diff --git a/app/build.gradle b/app/build.gradle index 6f0b518..bcfdc0d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ applicationId "com.casic.dcms" minSdkVersion 21 targetSdkVersion 30 - versionCode 19 - versionName "v1.0.0.11" + versionCode 20 + versionName "v1.0.0.12" ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 68f46c9..3090a91 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -89,7 +89,10 @@ - + + + + { + + private Context context; + private List dataRows; + private LayoutInflater layoutInflater; + private QMUITipDialog.Builder dialogBuilder; + + public MaintainRecordAdapter(Context context, List dataRows) { + this.context = context; + this.dataRows = dataRows; + layoutInflater = LayoutInflater.from(context); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = layoutInflater.inflate(R.layout.item_maintain_recycleview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + holder.bindView(dataRows.get(position)); + } + + @Override + public int getItemCount() { + return dataRows.size(); + } + + class ItemViewHolder extends RecyclerView.ViewHolder { + + private TextView bridgeNameView; + private ImageView descriptionImageView; + private TextView maintainContentView; + private TextView maintainTimeView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + bridgeNameView = itemView.findViewById(R.id.bridgeNameView); + descriptionImageView = itemView.findViewById(R.id.descriptionImageView); + maintainContentView = itemView.findViewById(R.id.maintainContentView); + maintainTimeView = itemView.findViewById(R.id.maintainTimeView); + } + + void bindView(MaintainRecordBean.DataBean.RowsBean rowsBean) { + bridgeNameView.setText(rowsBean.getBridgeName()); + String description = rowsBean.getDescription(); + if (TextUtils.isEmpty(description)) { + descriptionImageView.setVisibility(View.GONE); + } else { + descriptionImageView.setVisibility(View.VISIBLE); + descriptionImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + QMUITipDialog tipDialog = new QMUITipDialog.Builder(context) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_NOTHING) + .setTipWord(description) + .create(); + tipDialog.show(); + descriptionImageView.postDelayed(new Runnable() { + @Override + public void run() { + tipDialog.dismiss(); + } + }, 2000); + } + }); + } + maintainContentView.setText(rowsBean.getContent()); + maintainTimeView.setText(rowsBean.getMaintainTimeStr()); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java b/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java new file mode 100644 index 0000000..ded4fe1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java @@ -0,0 +1,41 @@ +package com.casic.dcms.bean; + +public class MaintainContentBean { + + private int code; + private String data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java b/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java new file mode 100644 index 0000000..2beea74 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java @@ -0,0 +1,301 @@ +package com.casic.dcms.bean; + +import java.util.List; + +public class MaintainRecordBean { + + private int code; + private DataBean data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + + private int total; + private List rows; + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public static class RowsBean { + /** + * bridgeId : 1 + * bridgeName : 永胜桥 + * category : 桥梁 + * code : 1624359572304 + * content : 日常养护,无异常 + * deptid : 1344110695992258561 + * description : + * id : 1407292162033041409 + * latitude : 39.914705918747295 + * longitude : 116.26295490330527 + * maintainTime : 2021-06-22 00:00:00 + * maintainTimeStr : 2021-06-22 + * name : + * personId : 1344179277212151809 + * personName : + * phone : + * status : + * statusName : + * tender : + * tenderCompany : + * ts : 2021-06-22 + * type : + * typeName : + */ + + private String bridgeId; + private String bridgeName; + private String category; + private String code; + private String content; + private String deptid; + private String description; + private String id; + private String latitude; + private String longitude; + private String maintainTime; + private String maintainTimeStr; + private String name; + private String personId; + private String personName; + private String phone; + private String status; + private String statusName; + private String tender; + private String tenderCompany; + private String ts; + private String type; + private String typeName; + + public String getBridgeId() { + return bridgeId; + } + + public void setBridgeId(String bridgeId) { + this.bridgeId = bridgeId; + } + + public String getBridgeName() { + return bridgeName; + } + + public void setBridgeName(String bridgeName) { + this.bridgeName = bridgeName; + } + + public String getCategory() { + return category; + } + + public void setCategory(String category) { + this.category = category; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLatitude() { + return latitude; + } + + public void setLatitude(String latitude) { + this.latitude = latitude; + } + + public String getLongitude() { + return longitude; + } + + public void setLongitude(String longitude) { + this.longitude = longitude; + } + + public String getMaintainTime() { + return maintainTime; + } + + public void setMaintainTime(String maintainTime) { + this.maintainTime = maintainTime; + } + + public String getMaintainTimeStr() { + return maintainTimeStr; + } + + public void setMaintainTimeStr(String maintainTimeStr) { + this.maintainTimeStr = maintainTimeStr; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPersonId() { + return personId; + } + + public void setPersonId(String personId) { + this.personId = personId; + } + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + 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 getTender() { + return tender; + } + + public void setTender(String tender) { + this.tender = tender; + } + + public String getTenderCompany() { + return tenderCompany; + } + + public void setTenderCompany(String tenderCompany) { + this.tenderCompany = tenderCompany; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getTypeName() { + return typeName; + } + + public void setTypeName(String typeName) { + this.typeName = typeName; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java new file mode 100644 index 0000000..4f7a588 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IMaintainRecordModel { + Subscription sendRetrofitRequest(String startDate, String endDate, int offset); +} diff --git a/app/build.gradle b/app/build.gradle index 6f0b518..bcfdc0d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ applicationId "com.casic.dcms" minSdkVersion 21 targetSdkVersion 30 - versionCode 19 - versionName "v1.0.0.11" + versionCode 20 + versionName "v1.0.0.12" ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 68f46c9..3090a91 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -89,7 +89,10 @@ - + + + + { + + private Context context; + private List dataRows; + private LayoutInflater layoutInflater; + private QMUITipDialog.Builder dialogBuilder; + + public MaintainRecordAdapter(Context context, List dataRows) { + this.context = context; + this.dataRows = dataRows; + layoutInflater = LayoutInflater.from(context); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = layoutInflater.inflate(R.layout.item_maintain_recycleview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + holder.bindView(dataRows.get(position)); + } + + @Override + public int getItemCount() { + return dataRows.size(); + } + + class ItemViewHolder extends RecyclerView.ViewHolder { + + private TextView bridgeNameView; + private ImageView descriptionImageView; + private TextView maintainContentView; + private TextView maintainTimeView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + bridgeNameView = itemView.findViewById(R.id.bridgeNameView); + descriptionImageView = itemView.findViewById(R.id.descriptionImageView); + maintainContentView = itemView.findViewById(R.id.maintainContentView); + maintainTimeView = itemView.findViewById(R.id.maintainTimeView); + } + + void bindView(MaintainRecordBean.DataBean.RowsBean rowsBean) { + bridgeNameView.setText(rowsBean.getBridgeName()); + String description = rowsBean.getDescription(); + if (TextUtils.isEmpty(description)) { + descriptionImageView.setVisibility(View.GONE); + } else { + descriptionImageView.setVisibility(View.VISIBLE); + descriptionImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + QMUITipDialog tipDialog = new QMUITipDialog.Builder(context) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_NOTHING) + .setTipWord(description) + .create(); + tipDialog.show(); + descriptionImageView.postDelayed(new Runnable() { + @Override + public void run() { + tipDialog.dismiss(); + } + }, 2000); + } + }); + } + maintainContentView.setText(rowsBean.getContent()); + maintainTimeView.setText(rowsBean.getMaintainTimeStr()); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java b/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java new file mode 100644 index 0000000..ded4fe1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java @@ -0,0 +1,41 @@ +package com.casic.dcms.bean; + +public class MaintainContentBean { + + private int code; + private String data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java b/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java new file mode 100644 index 0000000..2beea74 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java @@ -0,0 +1,301 @@ +package com.casic.dcms.bean; + +import java.util.List; + +public class MaintainRecordBean { + + private int code; + private DataBean data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + + private int total; + private List rows; + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public static class RowsBean { + /** + * bridgeId : 1 + * bridgeName : 永胜桥 + * category : 桥梁 + * code : 1624359572304 + * content : 日常养护,无异常 + * deptid : 1344110695992258561 + * description : + * id : 1407292162033041409 + * latitude : 39.914705918747295 + * longitude : 116.26295490330527 + * maintainTime : 2021-06-22 00:00:00 + * maintainTimeStr : 2021-06-22 + * name : + * personId : 1344179277212151809 + * personName : + * phone : + * status : + * statusName : + * tender : + * tenderCompany : + * ts : 2021-06-22 + * type : + * typeName : + */ + + private String bridgeId; + private String bridgeName; + private String category; + private String code; + private String content; + private String deptid; + private String description; + private String id; + private String latitude; + private String longitude; + private String maintainTime; + private String maintainTimeStr; + private String name; + private String personId; + private String personName; + private String phone; + private String status; + private String statusName; + private String tender; + private String tenderCompany; + private String ts; + private String type; + private String typeName; + + public String getBridgeId() { + return bridgeId; + } + + public void setBridgeId(String bridgeId) { + this.bridgeId = bridgeId; + } + + public String getBridgeName() { + return bridgeName; + } + + public void setBridgeName(String bridgeName) { + this.bridgeName = bridgeName; + } + + public String getCategory() { + return category; + } + + public void setCategory(String category) { + this.category = category; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLatitude() { + return latitude; + } + + public void setLatitude(String latitude) { + this.latitude = latitude; + } + + public String getLongitude() { + return longitude; + } + + public void setLongitude(String longitude) { + this.longitude = longitude; + } + + public String getMaintainTime() { + return maintainTime; + } + + public void setMaintainTime(String maintainTime) { + this.maintainTime = maintainTime; + } + + public String getMaintainTimeStr() { + return maintainTimeStr; + } + + public void setMaintainTimeStr(String maintainTimeStr) { + this.maintainTimeStr = maintainTimeStr; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPersonId() { + return personId; + } + + public void setPersonId(String personId) { + this.personId = personId; + } + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + 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 getTender() { + return tender; + } + + public void setTender(String tender) { + this.tender = tender; + } + + public String getTenderCompany() { + return tenderCompany; + } + + public void setTenderCompany(String tenderCompany) { + this.tenderCompany = tenderCompany; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getTypeName() { + return typeName; + } + + public void setTypeName(String typeName) { + this.typeName = typeName; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java new file mode 100644 index 0000000..4f7a588 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IMaintainRecordModel { + Subscription sendRetrofitRequest(String startDate, String endDate, int offset); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java new file mode 100644 index 0000000..dce3f91 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java @@ -0,0 +1,8 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ISubmitMaintainModel { + Subscription sendRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description); +} diff --git a/app/build.gradle b/app/build.gradle index 6f0b518..bcfdc0d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ applicationId "com.casic.dcms" minSdkVersion 21 targetSdkVersion 30 - versionCode 19 - versionName "v1.0.0.11" + versionCode 20 + versionName "v1.0.0.12" ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 68f46c9..3090a91 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -89,7 +89,10 @@ - + + + + { + + private Context context; + private List dataRows; + private LayoutInflater layoutInflater; + private QMUITipDialog.Builder dialogBuilder; + + public MaintainRecordAdapter(Context context, List dataRows) { + this.context = context; + this.dataRows = dataRows; + layoutInflater = LayoutInflater.from(context); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = layoutInflater.inflate(R.layout.item_maintain_recycleview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + holder.bindView(dataRows.get(position)); + } + + @Override + public int getItemCount() { + return dataRows.size(); + } + + class ItemViewHolder extends RecyclerView.ViewHolder { + + private TextView bridgeNameView; + private ImageView descriptionImageView; + private TextView maintainContentView; + private TextView maintainTimeView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + bridgeNameView = itemView.findViewById(R.id.bridgeNameView); + descriptionImageView = itemView.findViewById(R.id.descriptionImageView); + maintainContentView = itemView.findViewById(R.id.maintainContentView); + maintainTimeView = itemView.findViewById(R.id.maintainTimeView); + } + + void bindView(MaintainRecordBean.DataBean.RowsBean rowsBean) { + bridgeNameView.setText(rowsBean.getBridgeName()); + String description = rowsBean.getDescription(); + if (TextUtils.isEmpty(description)) { + descriptionImageView.setVisibility(View.GONE); + } else { + descriptionImageView.setVisibility(View.VISIBLE); + descriptionImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + QMUITipDialog tipDialog = new QMUITipDialog.Builder(context) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_NOTHING) + .setTipWord(description) + .create(); + tipDialog.show(); + descriptionImageView.postDelayed(new Runnable() { + @Override + public void run() { + tipDialog.dismiss(); + } + }, 2000); + } + }); + } + maintainContentView.setText(rowsBean.getContent()); + maintainTimeView.setText(rowsBean.getMaintainTimeStr()); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java b/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java new file mode 100644 index 0000000..ded4fe1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java @@ -0,0 +1,41 @@ +package com.casic.dcms.bean; + +public class MaintainContentBean { + + private int code; + private String data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java b/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java new file mode 100644 index 0000000..2beea74 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java @@ -0,0 +1,301 @@ +package com.casic.dcms.bean; + +import java.util.List; + +public class MaintainRecordBean { + + private int code; + private DataBean data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + + private int total; + private List rows; + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public static class RowsBean { + /** + * bridgeId : 1 + * bridgeName : 永胜桥 + * category : 桥梁 + * code : 1624359572304 + * content : 日常养护,无异常 + * deptid : 1344110695992258561 + * description : + * id : 1407292162033041409 + * latitude : 39.914705918747295 + * longitude : 116.26295490330527 + * maintainTime : 2021-06-22 00:00:00 + * maintainTimeStr : 2021-06-22 + * name : + * personId : 1344179277212151809 + * personName : + * phone : + * status : + * statusName : + * tender : + * tenderCompany : + * ts : 2021-06-22 + * type : + * typeName : + */ + + private String bridgeId; + private String bridgeName; + private String category; + private String code; + private String content; + private String deptid; + private String description; + private String id; + private String latitude; + private String longitude; + private String maintainTime; + private String maintainTimeStr; + private String name; + private String personId; + private String personName; + private String phone; + private String status; + private String statusName; + private String tender; + private String tenderCompany; + private String ts; + private String type; + private String typeName; + + public String getBridgeId() { + return bridgeId; + } + + public void setBridgeId(String bridgeId) { + this.bridgeId = bridgeId; + } + + public String getBridgeName() { + return bridgeName; + } + + public void setBridgeName(String bridgeName) { + this.bridgeName = bridgeName; + } + + public String getCategory() { + return category; + } + + public void setCategory(String category) { + this.category = category; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLatitude() { + return latitude; + } + + public void setLatitude(String latitude) { + this.latitude = latitude; + } + + public String getLongitude() { + return longitude; + } + + public void setLongitude(String longitude) { + this.longitude = longitude; + } + + public String getMaintainTime() { + return maintainTime; + } + + public void setMaintainTime(String maintainTime) { + this.maintainTime = maintainTime; + } + + public String getMaintainTimeStr() { + return maintainTimeStr; + } + + public void setMaintainTimeStr(String maintainTimeStr) { + this.maintainTimeStr = maintainTimeStr; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPersonId() { + return personId; + } + + public void setPersonId(String personId) { + this.personId = personId; + } + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + 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 getTender() { + return tender; + } + + public void setTender(String tender) { + this.tender = tender; + } + + public String getTenderCompany() { + return tenderCompany; + } + + public void setTenderCompany(String tenderCompany) { + this.tenderCompany = tenderCompany; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getTypeName() { + return typeName; + } + + public void setTypeName(String typeName) { + this.typeName = typeName; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java new file mode 100644 index 0000000..4f7a588 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IMaintainRecordModel { + Subscription sendRetrofitRequest(String startDate, String endDate, int offset); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java new file mode 100644 index 0000000..dce3f91 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java @@ -0,0 +1,8 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ISubmitMaintainModel { + Subscription sendRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/MaintainRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/MaintainRecordModelImpl.java new file mode 100644 index 0000000..35fd486 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/MaintainRecordModelImpl.java @@ -0,0 +1,50 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.MaintainRecordBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class MaintainRecordModelImpl implements IMaintainRecordModel { + + private OnGetRecordListener listener; + + public MaintainRecordModelImpl(OnGetRecordListener recordListener) { + this.listener = recordListener; + } + + public interface OnGetRecordListener { + void onSuccess(MaintainRecordBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String startDate, String endDate, int offset) { + Observable observable = RetrofitServiceManager.getMaintainRecordResult(startDate, endDate, offset); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (e.getCause() != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(MaintainRecordBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/build.gradle b/app/build.gradle index 6f0b518..bcfdc0d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ applicationId "com.casic.dcms" minSdkVersion 21 targetSdkVersion 30 - versionCode 19 - versionName "v1.0.0.11" + versionCode 20 + versionName "v1.0.0.12" ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 68f46c9..3090a91 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -89,7 +89,10 @@ - + + + + { + + private Context context; + private List dataRows; + private LayoutInflater layoutInflater; + private QMUITipDialog.Builder dialogBuilder; + + public MaintainRecordAdapter(Context context, List dataRows) { + this.context = context; + this.dataRows = dataRows; + layoutInflater = LayoutInflater.from(context); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = layoutInflater.inflate(R.layout.item_maintain_recycleview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + holder.bindView(dataRows.get(position)); + } + + @Override + public int getItemCount() { + return dataRows.size(); + } + + class ItemViewHolder extends RecyclerView.ViewHolder { + + private TextView bridgeNameView; + private ImageView descriptionImageView; + private TextView maintainContentView; + private TextView maintainTimeView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + bridgeNameView = itemView.findViewById(R.id.bridgeNameView); + descriptionImageView = itemView.findViewById(R.id.descriptionImageView); + maintainContentView = itemView.findViewById(R.id.maintainContentView); + maintainTimeView = itemView.findViewById(R.id.maintainTimeView); + } + + void bindView(MaintainRecordBean.DataBean.RowsBean rowsBean) { + bridgeNameView.setText(rowsBean.getBridgeName()); + String description = rowsBean.getDescription(); + if (TextUtils.isEmpty(description)) { + descriptionImageView.setVisibility(View.GONE); + } else { + descriptionImageView.setVisibility(View.VISIBLE); + descriptionImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + QMUITipDialog tipDialog = new QMUITipDialog.Builder(context) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_NOTHING) + .setTipWord(description) + .create(); + tipDialog.show(); + descriptionImageView.postDelayed(new Runnable() { + @Override + public void run() { + tipDialog.dismiss(); + } + }, 2000); + } + }); + } + maintainContentView.setText(rowsBean.getContent()); + maintainTimeView.setText(rowsBean.getMaintainTimeStr()); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java b/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java new file mode 100644 index 0000000..ded4fe1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java @@ -0,0 +1,41 @@ +package com.casic.dcms.bean; + +public class MaintainContentBean { + + private int code; + private String data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java b/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java new file mode 100644 index 0000000..2beea74 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java @@ -0,0 +1,301 @@ +package com.casic.dcms.bean; + +import java.util.List; + +public class MaintainRecordBean { + + private int code; + private DataBean data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + + private int total; + private List rows; + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public static class RowsBean { + /** + * bridgeId : 1 + * bridgeName : 永胜桥 + * category : 桥梁 + * code : 1624359572304 + * content : 日常养护,无异常 + * deptid : 1344110695992258561 + * description : + * id : 1407292162033041409 + * latitude : 39.914705918747295 + * longitude : 116.26295490330527 + * maintainTime : 2021-06-22 00:00:00 + * maintainTimeStr : 2021-06-22 + * name : + * personId : 1344179277212151809 + * personName : + * phone : + * status : + * statusName : + * tender : + * tenderCompany : + * ts : 2021-06-22 + * type : + * typeName : + */ + + private String bridgeId; + private String bridgeName; + private String category; + private String code; + private String content; + private String deptid; + private String description; + private String id; + private String latitude; + private String longitude; + private String maintainTime; + private String maintainTimeStr; + private String name; + private String personId; + private String personName; + private String phone; + private String status; + private String statusName; + private String tender; + private String tenderCompany; + private String ts; + private String type; + private String typeName; + + public String getBridgeId() { + return bridgeId; + } + + public void setBridgeId(String bridgeId) { + this.bridgeId = bridgeId; + } + + public String getBridgeName() { + return bridgeName; + } + + public void setBridgeName(String bridgeName) { + this.bridgeName = bridgeName; + } + + public String getCategory() { + return category; + } + + public void setCategory(String category) { + this.category = category; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLatitude() { + return latitude; + } + + public void setLatitude(String latitude) { + this.latitude = latitude; + } + + public String getLongitude() { + return longitude; + } + + public void setLongitude(String longitude) { + this.longitude = longitude; + } + + public String getMaintainTime() { + return maintainTime; + } + + public void setMaintainTime(String maintainTime) { + this.maintainTime = maintainTime; + } + + public String getMaintainTimeStr() { + return maintainTimeStr; + } + + public void setMaintainTimeStr(String maintainTimeStr) { + this.maintainTimeStr = maintainTimeStr; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPersonId() { + return personId; + } + + public void setPersonId(String personId) { + this.personId = personId; + } + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + 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 getTender() { + return tender; + } + + public void setTender(String tender) { + this.tender = tender; + } + + public String getTenderCompany() { + return tenderCompany; + } + + public void setTenderCompany(String tenderCompany) { + this.tenderCompany = tenderCompany; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getTypeName() { + return typeName; + } + + public void setTypeName(String typeName) { + this.typeName = typeName; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java new file mode 100644 index 0000000..4f7a588 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IMaintainRecordModel { + Subscription sendRetrofitRequest(String startDate, String endDate, int offset); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java new file mode 100644 index 0000000..dce3f91 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java @@ -0,0 +1,8 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ISubmitMaintainModel { + Subscription sendRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/MaintainRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/MaintainRecordModelImpl.java new file mode 100644 index 0000000..35fd486 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/MaintainRecordModelImpl.java @@ -0,0 +1,50 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.MaintainRecordBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class MaintainRecordModelImpl implements IMaintainRecordModel { + + private OnGetRecordListener listener; + + public MaintainRecordModelImpl(OnGetRecordListener recordListener) { + this.listener = recordListener; + } + + public interface OnGetRecordListener { + void onSuccess(MaintainRecordBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String startDate, String endDate, int offset) { + Observable observable = RetrofitServiceManager.getMaintainRecordResult(startDate, endDate, offset); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (e.getCause() != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(MaintainRecordBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java index 06f6fb4..9e2666d 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java @@ -29,7 +29,7 @@ @Override public Subscription sendRetrofitRequest() { - Observable observable = RetrofitServiceManager.getProcessPerson(); + Observable observable = RetrofitServiceManager.getProcessPersonResult(); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/build.gradle b/app/build.gradle index 6f0b518..bcfdc0d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ applicationId "com.casic.dcms" minSdkVersion 21 targetSdkVersion 30 - versionCode 19 - versionName "v1.0.0.11" + versionCode 20 + versionName "v1.0.0.12" ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 68f46c9..3090a91 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -89,7 +89,10 @@ - + + + + { + + private Context context; + private List dataRows; + private LayoutInflater layoutInflater; + private QMUITipDialog.Builder dialogBuilder; + + public MaintainRecordAdapter(Context context, List dataRows) { + this.context = context; + this.dataRows = dataRows; + layoutInflater = LayoutInflater.from(context); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = layoutInflater.inflate(R.layout.item_maintain_recycleview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + holder.bindView(dataRows.get(position)); + } + + @Override + public int getItemCount() { + return dataRows.size(); + } + + class ItemViewHolder extends RecyclerView.ViewHolder { + + private TextView bridgeNameView; + private ImageView descriptionImageView; + private TextView maintainContentView; + private TextView maintainTimeView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + bridgeNameView = itemView.findViewById(R.id.bridgeNameView); + descriptionImageView = itemView.findViewById(R.id.descriptionImageView); + maintainContentView = itemView.findViewById(R.id.maintainContentView); + maintainTimeView = itemView.findViewById(R.id.maintainTimeView); + } + + void bindView(MaintainRecordBean.DataBean.RowsBean rowsBean) { + bridgeNameView.setText(rowsBean.getBridgeName()); + String description = rowsBean.getDescription(); + if (TextUtils.isEmpty(description)) { + descriptionImageView.setVisibility(View.GONE); + } else { + descriptionImageView.setVisibility(View.VISIBLE); + descriptionImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + QMUITipDialog tipDialog = new QMUITipDialog.Builder(context) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_NOTHING) + .setTipWord(description) + .create(); + tipDialog.show(); + descriptionImageView.postDelayed(new Runnable() { + @Override + public void run() { + tipDialog.dismiss(); + } + }, 2000); + } + }); + } + maintainContentView.setText(rowsBean.getContent()); + maintainTimeView.setText(rowsBean.getMaintainTimeStr()); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java b/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java new file mode 100644 index 0000000..ded4fe1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java @@ -0,0 +1,41 @@ +package com.casic.dcms.bean; + +public class MaintainContentBean { + + private int code; + private String data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java b/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java new file mode 100644 index 0000000..2beea74 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java @@ -0,0 +1,301 @@ +package com.casic.dcms.bean; + +import java.util.List; + +public class MaintainRecordBean { + + private int code; + private DataBean data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + + private int total; + private List rows; + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public static class RowsBean { + /** + * bridgeId : 1 + * bridgeName : 永胜桥 + * category : 桥梁 + * code : 1624359572304 + * content : 日常养护,无异常 + * deptid : 1344110695992258561 + * description : + * id : 1407292162033041409 + * latitude : 39.914705918747295 + * longitude : 116.26295490330527 + * maintainTime : 2021-06-22 00:00:00 + * maintainTimeStr : 2021-06-22 + * name : + * personId : 1344179277212151809 + * personName : + * phone : + * status : + * statusName : + * tender : + * tenderCompany : + * ts : 2021-06-22 + * type : + * typeName : + */ + + private String bridgeId; + private String bridgeName; + private String category; + private String code; + private String content; + private String deptid; + private String description; + private String id; + private String latitude; + private String longitude; + private String maintainTime; + private String maintainTimeStr; + private String name; + private String personId; + private String personName; + private String phone; + private String status; + private String statusName; + private String tender; + private String tenderCompany; + private String ts; + private String type; + private String typeName; + + public String getBridgeId() { + return bridgeId; + } + + public void setBridgeId(String bridgeId) { + this.bridgeId = bridgeId; + } + + public String getBridgeName() { + return bridgeName; + } + + public void setBridgeName(String bridgeName) { + this.bridgeName = bridgeName; + } + + public String getCategory() { + return category; + } + + public void setCategory(String category) { + this.category = category; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLatitude() { + return latitude; + } + + public void setLatitude(String latitude) { + this.latitude = latitude; + } + + public String getLongitude() { + return longitude; + } + + public void setLongitude(String longitude) { + this.longitude = longitude; + } + + public String getMaintainTime() { + return maintainTime; + } + + public void setMaintainTime(String maintainTime) { + this.maintainTime = maintainTime; + } + + public String getMaintainTimeStr() { + return maintainTimeStr; + } + + public void setMaintainTimeStr(String maintainTimeStr) { + this.maintainTimeStr = maintainTimeStr; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPersonId() { + return personId; + } + + public void setPersonId(String personId) { + this.personId = personId; + } + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + 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 getTender() { + return tender; + } + + public void setTender(String tender) { + this.tender = tender; + } + + public String getTenderCompany() { + return tenderCompany; + } + + public void setTenderCompany(String tenderCompany) { + this.tenderCompany = tenderCompany; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getTypeName() { + return typeName; + } + + public void setTypeName(String typeName) { + this.typeName = typeName; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java new file mode 100644 index 0000000..4f7a588 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IMaintainRecordModel { + Subscription sendRetrofitRequest(String startDate, String endDate, int offset); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java new file mode 100644 index 0000000..dce3f91 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java @@ -0,0 +1,8 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ISubmitMaintainModel { + Subscription sendRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/MaintainRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/MaintainRecordModelImpl.java new file mode 100644 index 0000000..35fd486 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/MaintainRecordModelImpl.java @@ -0,0 +1,50 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.MaintainRecordBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class MaintainRecordModelImpl implements IMaintainRecordModel { + + private OnGetRecordListener listener; + + public MaintainRecordModelImpl(OnGetRecordListener recordListener) { + this.listener = recordListener; + } + + public interface OnGetRecordListener { + void onSuccess(MaintainRecordBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String startDate, String endDate, int offset) { + Observable observable = RetrofitServiceManager.getMaintainRecordResult(startDate, endDate, offset); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (e.getCause() != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(MaintainRecordBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java index 06f6fb4..9e2666d 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java @@ -29,7 +29,7 @@ @Override public Subscription sendRetrofitRequest() { - Observable observable = RetrofitServiceManager.getProcessPerson(); + Observable observable = RetrofitServiceManager.getProcessPersonResult(); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/SubmitMaintainModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/SubmitMaintainModelImpl.java new file mode 100644 index 0000000..2924fbe --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/SubmitMaintainModelImpl.java @@ -0,0 +1,52 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class SubmitMaintainModelImpl implements ISubmitMaintainModel { + + private OnSubmitListener listener; + + public SubmitMaintainModelImpl(OnSubmitListener submitListener) { + this.listener = submitListener; + } + + public interface OnSubmitListener { + void onSuccess(ActionResultBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description) { + Observable observable = RetrofitServiceManager.getAddMaintainRecordResult(bridgeId, + content, maintainTime, personId, longitude, latitude, description); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (e.getCause() != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(ActionResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/build.gradle b/app/build.gradle index 6f0b518..bcfdc0d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ applicationId "com.casic.dcms" minSdkVersion 21 targetSdkVersion 30 - versionCode 19 - versionName "v1.0.0.11" + versionCode 20 + versionName "v1.0.0.12" ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 68f46c9..3090a91 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -89,7 +89,10 @@ - + + + + { + + private Context context; + private List dataRows; + private LayoutInflater layoutInflater; + private QMUITipDialog.Builder dialogBuilder; + + public MaintainRecordAdapter(Context context, List dataRows) { + this.context = context; + this.dataRows = dataRows; + layoutInflater = LayoutInflater.from(context); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = layoutInflater.inflate(R.layout.item_maintain_recycleview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + holder.bindView(dataRows.get(position)); + } + + @Override + public int getItemCount() { + return dataRows.size(); + } + + class ItemViewHolder extends RecyclerView.ViewHolder { + + private TextView bridgeNameView; + private ImageView descriptionImageView; + private TextView maintainContentView; + private TextView maintainTimeView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + bridgeNameView = itemView.findViewById(R.id.bridgeNameView); + descriptionImageView = itemView.findViewById(R.id.descriptionImageView); + maintainContentView = itemView.findViewById(R.id.maintainContentView); + maintainTimeView = itemView.findViewById(R.id.maintainTimeView); + } + + void bindView(MaintainRecordBean.DataBean.RowsBean rowsBean) { + bridgeNameView.setText(rowsBean.getBridgeName()); + String description = rowsBean.getDescription(); + if (TextUtils.isEmpty(description)) { + descriptionImageView.setVisibility(View.GONE); + } else { + descriptionImageView.setVisibility(View.VISIBLE); + descriptionImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + QMUITipDialog tipDialog = new QMUITipDialog.Builder(context) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_NOTHING) + .setTipWord(description) + .create(); + tipDialog.show(); + descriptionImageView.postDelayed(new Runnable() { + @Override + public void run() { + tipDialog.dismiss(); + } + }, 2000); + } + }); + } + maintainContentView.setText(rowsBean.getContent()); + maintainTimeView.setText(rowsBean.getMaintainTimeStr()); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java b/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java new file mode 100644 index 0000000..ded4fe1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java @@ -0,0 +1,41 @@ +package com.casic.dcms.bean; + +public class MaintainContentBean { + + private int code; + private String data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java b/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java new file mode 100644 index 0000000..2beea74 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java @@ -0,0 +1,301 @@ +package com.casic.dcms.bean; + +import java.util.List; + +public class MaintainRecordBean { + + private int code; + private DataBean data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + + private int total; + private List rows; + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public static class RowsBean { + /** + * bridgeId : 1 + * bridgeName : 永胜桥 + * category : 桥梁 + * code : 1624359572304 + * content : 日常养护,无异常 + * deptid : 1344110695992258561 + * description : + * id : 1407292162033041409 + * latitude : 39.914705918747295 + * longitude : 116.26295490330527 + * maintainTime : 2021-06-22 00:00:00 + * maintainTimeStr : 2021-06-22 + * name : + * personId : 1344179277212151809 + * personName : + * phone : + * status : + * statusName : + * tender : + * tenderCompany : + * ts : 2021-06-22 + * type : + * typeName : + */ + + private String bridgeId; + private String bridgeName; + private String category; + private String code; + private String content; + private String deptid; + private String description; + private String id; + private String latitude; + private String longitude; + private String maintainTime; + private String maintainTimeStr; + private String name; + private String personId; + private String personName; + private String phone; + private String status; + private String statusName; + private String tender; + private String tenderCompany; + private String ts; + private String type; + private String typeName; + + public String getBridgeId() { + return bridgeId; + } + + public void setBridgeId(String bridgeId) { + this.bridgeId = bridgeId; + } + + public String getBridgeName() { + return bridgeName; + } + + public void setBridgeName(String bridgeName) { + this.bridgeName = bridgeName; + } + + public String getCategory() { + return category; + } + + public void setCategory(String category) { + this.category = category; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLatitude() { + return latitude; + } + + public void setLatitude(String latitude) { + this.latitude = latitude; + } + + public String getLongitude() { + return longitude; + } + + public void setLongitude(String longitude) { + this.longitude = longitude; + } + + public String getMaintainTime() { + return maintainTime; + } + + public void setMaintainTime(String maintainTime) { + this.maintainTime = maintainTime; + } + + public String getMaintainTimeStr() { + return maintainTimeStr; + } + + public void setMaintainTimeStr(String maintainTimeStr) { + this.maintainTimeStr = maintainTimeStr; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPersonId() { + return personId; + } + + public void setPersonId(String personId) { + this.personId = personId; + } + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + 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 getTender() { + return tender; + } + + public void setTender(String tender) { + this.tender = tender; + } + + public String getTenderCompany() { + return tenderCompany; + } + + public void setTenderCompany(String tenderCompany) { + this.tenderCompany = tenderCompany; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getTypeName() { + return typeName; + } + + public void setTypeName(String typeName) { + this.typeName = typeName; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java new file mode 100644 index 0000000..4f7a588 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IMaintainRecordModel { + Subscription sendRetrofitRequest(String startDate, String endDate, int offset); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java new file mode 100644 index 0000000..dce3f91 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java @@ -0,0 +1,8 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ISubmitMaintainModel { + Subscription sendRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/MaintainRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/MaintainRecordModelImpl.java new file mode 100644 index 0000000..35fd486 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/MaintainRecordModelImpl.java @@ -0,0 +1,50 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.MaintainRecordBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class MaintainRecordModelImpl implements IMaintainRecordModel { + + private OnGetRecordListener listener; + + public MaintainRecordModelImpl(OnGetRecordListener recordListener) { + this.listener = recordListener; + } + + public interface OnGetRecordListener { + void onSuccess(MaintainRecordBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String startDate, String endDate, int offset) { + Observable observable = RetrofitServiceManager.getMaintainRecordResult(startDate, endDate, offset); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (e.getCause() != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(MaintainRecordBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java index 06f6fb4..9e2666d 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java @@ -29,7 +29,7 @@ @Override public Subscription sendRetrofitRequest() { - Observable observable = RetrofitServiceManager.getProcessPerson(); + Observable observable = RetrofitServiceManager.getProcessPersonResult(); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/SubmitMaintainModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/SubmitMaintainModelImpl.java new file mode 100644 index 0000000..2924fbe --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/SubmitMaintainModelImpl.java @@ -0,0 +1,52 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class SubmitMaintainModelImpl implements ISubmitMaintainModel { + + private OnSubmitListener listener; + + public SubmitMaintainModelImpl(OnSubmitListener submitListener) { + this.listener = submitListener; + } + + public interface OnSubmitListener { + void onSuccess(ActionResultBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description) { + Observable observable = RetrofitServiceManager.getAddMaintainRecordResult(bridgeId, + content, maintainTime, personId, longitude, latitude, description); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (e.getCause() != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(ActionResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IMaintainRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IMaintainRecordPresenter.java new file mode 100644 index 0000000..938a484 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IMaintainRecordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IMaintainRecordPresenter { + void onReadyRetrofitRequest(String startDate, String endDate, int offset); + + void disposeRetrofitRequest(); +} diff --git a/app/build.gradle b/app/build.gradle index 6f0b518..bcfdc0d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ applicationId "com.casic.dcms" minSdkVersion 21 targetSdkVersion 30 - versionCode 19 - versionName "v1.0.0.11" + versionCode 20 + versionName "v1.0.0.12" ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 68f46c9..3090a91 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -89,7 +89,10 @@ - + + + + { + + private Context context; + private List dataRows; + private LayoutInflater layoutInflater; + private QMUITipDialog.Builder dialogBuilder; + + public MaintainRecordAdapter(Context context, List dataRows) { + this.context = context; + this.dataRows = dataRows; + layoutInflater = LayoutInflater.from(context); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = layoutInflater.inflate(R.layout.item_maintain_recycleview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + holder.bindView(dataRows.get(position)); + } + + @Override + public int getItemCount() { + return dataRows.size(); + } + + class ItemViewHolder extends RecyclerView.ViewHolder { + + private TextView bridgeNameView; + private ImageView descriptionImageView; + private TextView maintainContentView; + private TextView maintainTimeView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + bridgeNameView = itemView.findViewById(R.id.bridgeNameView); + descriptionImageView = itemView.findViewById(R.id.descriptionImageView); + maintainContentView = itemView.findViewById(R.id.maintainContentView); + maintainTimeView = itemView.findViewById(R.id.maintainTimeView); + } + + void bindView(MaintainRecordBean.DataBean.RowsBean rowsBean) { + bridgeNameView.setText(rowsBean.getBridgeName()); + String description = rowsBean.getDescription(); + if (TextUtils.isEmpty(description)) { + descriptionImageView.setVisibility(View.GONE); + } else { + descriptionImageView.setVisibility(View.VISIBLE); + descriptionImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + QMUITipDialog tipDialog = new QMUITipDialog.Builder(context) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_NOTHING) + .setTipWord(description) + .create(); + tipDialog.show(); + descriptionImageView.postDelayed(new Runnable() { + @Override + public void run() { + tipDialog.dismiss(); + } + }, 2000); + } + }); + } + maintainContentView.setText(rowsBean.getContent()); + maintainTimeView.setText(rowsBean.getMaintainTimeStr()); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java b/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java new file mode 100644 index 0000000..ded4fe1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java @@ -0,0 +1,41 @@ +package com.casic.dcms.bean; + +public class MaintainContentBean { + + private int code; + private String data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java b/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java new file mode 100644 index 0000000..2beea74 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java @@ -0,0 +1,301 @@ +package com.casic.dcms.bean; + +import java.util.List; + +public class MaintainRecordBean { + + private int code; + private DataBean data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + + private int total; + private List rows; + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public static class RowsBean { + /** + * bridgeId : 1 + * bridgeName : 永胜桥 + * category : 桥梁 + * code : 1624359572304 + * content : 日常养护,无异常 + * deptid : 1344110695992258561 + * description : + * id : 1407292162033041409 + * latitude : 39.914705918747295 + * longitude : 116.26295490330527 + * maintainTime : 2021-06-22 00:00:00 + * maintainTimeStr : 2021-06-22 + * name : + * personId : 1344179277212151809 + * personName : + * phone : + * status : + * statusName : + * tender : + * tenderCompany : + * ts : 2021-06-22 + * type : + * typeName : + */ + + private String bridgeId; + private String bridgeName; + private String category; + private String code; + private String content; + private String deptid; + private String description; + private String id; + private String latitude; + private String longitude; + private String maintainTime; + private String maintainTimeStr; + private String name; + private String personId; + private String personName; + private String phone; + private String status; + private String statusName; + private String tender; + private String tenderCompany; + private String ts; + private String type; + private String typeName; + + public String getBridgeId() { + return bridgeId; + } + + public void setBridgeId(String bridgeId) { + this.bridgeId = bridgeId; + } + + public String getBridgeName() { + return bridgeName; + } + + public void setBridgeName(String bridgeName) { + this.bridgeName = bridgeName; + } + + public String getCategory() { + return category; + } + + public void setCategory(String category) { + this.category = category; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLatitude() { + return latitude; + } + + public void setLatitude(String latitude) { + this.latitude = latitude; + } + + public String getLongitude() { + return longitude; + } + + public void setLongitude(String longitude) { + this.longitude = longitude; + } + + public String getMaintainTime() { + return maintainTime; + } + + public void setMaintainTime(String maintainTime) { + this.maintainTime = maintainTime; + } + + public String getMaintainTimeStr() { + return maintainTimeStr; + } + + public void setMaintainTimeStr(String maintainTimeStr) { + this.maintainTimeStr = maintainTimeStr; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPersonId() { + return personId; + } + + public void setPersonId(String personId) { + this.personId = personId; + } + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + 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 getTender() { + return tender; + } + + public void setTender(String tender) { + this.tender = tender; + } + + public String getTenderCompany() { + return tenderCompany; + } + + public void setTenderCompany(String tenderCompany) { + this.tenderCompany = tenderCompany; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getTypeName() { + return typeName; + } + + public void setTypeName(String typeName) { + this.typeName = typeName; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java new file mode 100644 index 0000000..4f7a588 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IMaintainRecordModel { + Subscription sendRetrofitRequest(String startDate, String endDate, int offset); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java new file mode 100644 index 0000000..dce3f91 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java @@ -0,0 +1,8 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ISubmitMaintainModel { + Subscription sendRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/MaintainRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/MaintainRecordModelImpl.java new file mode 100644 index 0000000..35fd486 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/MaintainRecordModelImpl.java @@ -0,0 +1,50 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.MaintainRecordBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class MaintainRecordModelImpl implements IMaintainRecordModel { + + private OnGetRecordListener listener; + + public MaintainRecordModelImpl(OnGetRecordListener recordListener) { + this.listener = recordListener; + } + + public interface OnGetRecordListener { + void onSuccess(MaintainRecordBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String startDate, String endDate, int offset) { + Observable observable = RetrofitServiceManager.getMaintainRecordResult(startDate, endDate, offset); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (e.getCause() != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(MaintainRecordBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java index 06f6fb4..9e2666d 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java @@ -29,7 +29,7 @@ @Override public Subscription sendRetrofitRequest() { - Observable observable = RetrofitServiceManager.getProcessPerson(); + Observable observable = RetrofitServiceManager.getProcessPersonResult(); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/SubmitMaintainModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/SubmitMaintainModelImpl.java new file mode 100644 index 0000000..2924fbe --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/SubmitMaintainModelImpl.java @@ -0,0 +1,52 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class SubmitMaintainModelImpl implements ISubmitMaintainModel { + + private OnSubmitListener listener; + + public SubmitMaintainModelImpl(OnSubmitListener submitListener) { + this.listener = submitListener; + } + + public interface OnSubmitListener { + void onSuccess(ActionResultBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description) { + Observable observable = RetrofitServiceManager.getAddMaintainRecordResult(bridgeId, + content, maintainTime, personId, longitude, latitude, description); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (e.getCause() != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(ActionResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IMaintainRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IMaintainRecordPresenter.java new file mode 100644 index 0000000..938a484 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IMaintainRecordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IMaintainRecordPresenter { + void onReadyRetrofitRequest(String startDate, String endDate, int offset); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ISubmitMaintainPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ISubmitMaintainPresenter.java new file mode 100644 index 0000000..511e717 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ISubmitMaintainPresenter.java @@ -0,0 +1,8 @@ +package com.casic.dcms.mvp.presenter; + +public interface ISubmitMaintainPresenter { + void onReadyRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description); + + void disposeRetrofitRequest(); +} diff --git a/app/build.gradle b/app/build.gradle index 6f0b518..bcfdc0d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ applicationId "com.casic.dcms" minSdkVersion 21 targetSdkVersion 30 - versionCode 19 - versionName "v1.0.0.11" + versionCode 20 + versionName "v1.0.0.12" ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 68f46c9..3090a91 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -89,7 +89,10 @@ - + + + + { + + private Context context; + private List dataRows; + private LayoutInflater layoutInflater; + private QMUITipDialog.Builder dialogBuilder; + + public MaintainRecordAdapter(Context context, List dataRows) { + this.context = context; + this.dataRows = dataRows; + layoutInflater = LayoutInflater.from(context); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = layoutInflater.inflate(R.layout.item_maintain_recycleview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + holder.bindView(dataRows.get(position)); + } + + @Override + public int getItemCount() { + return dataRows.size(); + } + + class ItemViewHolder extends RecyclerView.ViewHolder { + + private TextView bridgeNameView; + private ImageView descriptionImageView; + private TextView maintainContentView; + private TextView maintainTimeView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + bridgeNameView = itemView.findViewById(R.id.bridgeNameView); + descriptionImageView = itemView.findViewById(R.id.descriptionImageView); + maintainContentView = itemView.findViewById(R.id.maintainContentView); + maintainTimeView = itemView.findViewById(R.id.maintainTimeView); + } + + void bindView(MaintainRecordBean.DataBean.RowsBean rowsBean) { + bridgeNameView.setText(rowsBean.getBridgeName()); + String description = rowsBean.getDescription(); + if (TextUtils.isEmpty(description)) { + descriptionImageView.setVisibility(View.GONE); + } else { + descriptionImageView.setVisibility(View.VISIBLE); + descriptionImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + QMUITipDialog tipDialog = new QMUITipDialog.Builder(context) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_NOTHING) + .setTipWord(description) + .create(); + tipDialog.show(); + descriptionImageView.postDelayed(new Runnable() { + @Override + public void run() { + tipDialog.dismiss(); + } + }, 2000); + } + }); + } + maintainContentView.setText(rowsBean.getContent()); + maintainTimeView.setText(rowsBean.getMaintainTimeStr()); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java b/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java new file mode 100644 index 0000000..ded4fe1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java @@ -0,0 +1,41 @@ +package com.casic.dcms.bean; + +public class MaintainContentBean { + + private int code; + private String data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java b/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java new file mode 100644 index 0000000..2beea74 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java @@ -0,0 +1,301 @@ +package com.casic.dcms.bean; + +import java.util.List; + +public class MaintainRecordBean { + + private int code; + private DataBean data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + + private int total; + private List rows; + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public static class RowsBean { + /** + * bridgeId : 1 + * bridgeName : 永胜桥 + * category : 桥梁 + * code : 1624359572304 + * content : 日常养护,无异常 + * deptid : 1344110695992258561 + * description : + * id : 1407292162033041409 + * latitude : 39.914705918747295 + * longitude : 116.26295490330527 + * maintainTime : 2021-06-22 00:00:00 + * maintainTimeStr : 2021-06-22 + * name : + * personId : 1344179277212151809 + * personName : + * phone : + * status : + * statusName : + * tender : + * tenderCompany : + * ts : 2021-06-22 + * type : + * typeName : + */ + + private String bridgeId; + private String bridgeName; + private String category; + private String code; + private String content; + private String deptid; + private String description; + private String id; + private String latitude; + private String longitude; + private String maintainTime; + private String maintainTimeStr; + private String name; + private String personId; + private String personName; + private String phone; + private String status; + private String statusName; + private String tender; + private String tenderCompany; + private String ts; + private String type; + private String typeName; + + public String getBridgeId() { + return bridgeId; + } + + public void setBridgeId(String bridgeId) { + this.bridgeId = bridgeId; + } + + public String getBridgeName() { + return bridgeName; + } + + public void setBridgeName(String bridgeName) { + this.bridgeName = bridgeName; + } + + public String getCategory() { + return category; + } + + public void setCategory(String category) { + this.category = category; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLatitude() { + return latitude; + } + + public void setLatitude(String latitude) { + this.latitude = latitude; + } + + public String getLongitude() { + return longitude; + } + + public void setLongitude(String longitude) { + this.longitude = longitude; + } + + public String getMaintainTime() { + return maintainTime; + } + + public void setMaintainTime(String maintainTime) { + this.maintainTime = maintainTime; + } + + public String getMaintainTimeStr() { + return maintainTimeStr; + } + + public void setMaintainTimeStr(String maintainTimeStr) { + this.maintainTimeStr = maintainTimeStr; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPersonId() { + return personId; + } + + public void setPersonId(String personId) { + this.personId = personId; + } + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + 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 getTender() { + return tender; + } + + public void setTender(String tender) { + this.tender = tender; + } + + public String getTenderCompany() { + return tenderCompany; + } + + public void setTenderCompany(String tenderCompany) { + this.tenderCompany = tenderCompany; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getTypeName() { + return typeName; + } + + public void setTypeName(String typeName) { + this.typeName = typeName; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java new file mode 100644 index 0000000..4f7a588 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IMaintainRecordModel { + Subscription sendRetrofitRequest(String startDate, String endDate, int offset); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java new file mode 100644 index 0000000..dce3f91 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java @@ -0,0 +1,8 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ISubmitMaintainModel { + Subscription sendRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/MaintainRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/MaintainRecordModelImpl.java new file mode 100644 index 0000000..35fd486 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/MaintainRecordModelImpl.java @@ -0,0 +1,50 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.MaintainRecordBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class MaintainRecordModelImpl implements IMaintainRecordModel { + + private OnGetRecordListener listener; + + public MaintainRecordModelImpl(OnGetRecordListener recordListener) { + this.listener = recordListener; + } + + public interface OnGetRecordListener { + void onSuccess(MaintainRecordBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String startDate, String endDate, int offset) { + Observable observable = RetrofitServiceManager.getMaintainRecordResult(startDate, endDate, offset); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (e.getCause() != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(MaintainRecordBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java index 06f6fb4..9e2666d 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java @@ -29,7 +29,7 @@ @Override public Subscription sendRetrofitRequest() { - Observable observable = RetrofitServiceManager.getProcessPerson(); + Observable observable = RetrofitServiceManager.getProcessPersonResult(); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/SubmitMaintainModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/SubmitMaintainModelImpl.java new file mode 100644 index 0000000..2924fbe --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/SubmitMaintainModelImpl.java @@ -0,0 +1,52 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class SubmitMaintainModelImpl implements ISubmitMaintainModel { + + private OnSubmitListener listener; + + public SubmitMaintainModelImpl(OnSubmitListener submitListener) { + this.listener = submitListener; + } + + public interface OnSubmitListener { + void onSuccess(ActionResultBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description) { + Observable observable = RetrofitServiceManager.getAddMaintainRecordResult(bridgeId, + content, maintainTime, personId, longitude, latitude, description); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (e.getCause() != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(ActionResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IMaintainRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IMaintainRecordPresenter.java new file mode 100644 index 0000000..938a484 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IMaintainRecordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IMaintainRecordPresenter { + void onReadyRetrofitRequest(String startDate, String endDate, int offset); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ISubmitMaintainPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ISubmitMaintainPresenter.java new file mode 100644 index 0000000..511e717 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ISubmitMaintainPresenter.java @@ -0,0 +1,8 @@ +package com.casic.dcms.mvp.presenter; + +public interface ISubmitMaintainPresenter { + void onReadyRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/MaintainRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/MaintainRecordPresenterImpl.java new file mode 100644 index 0000000..fd99e30 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/MaintainRecordPresenterImpl.java @@ -0,0 +1,39 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.MaintainRecordBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.MaintainRecordModelImpl; +import com.casic.dcms.mvp.view.IMaintainRecordView; + +public class MaintainRecordPresenterImpl extends BasePresenter implements IMaintainRecordPresenter, MaintainRecordModelImpl.OnGetRecordListener { + + private IMaintainRecordView view; + private MaintainRecordModelImpl model; + + public MaintainRecordPresenterImpl(IMaintainRecordView cleanToiletRecordView) { + this.view = cleanToiletRecordView; + model = new MaintainRecordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String startDate, String endDate, int offset) { + view.showProgress(); + addSubscription(model.sendRetrofitRequest(startDate, endDate, offset)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(MaintainRecordBean result) { + view.hideProgress(); + view.obtainRecordResult(result); + } + + @Override + public void onFailure(Throwable throwable) { + view.hideProgress(); + } +} diff --git a/app/build.gradle b/app/build.gradle index 6f0b518..bcfdc0d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ applicationId "com.casic.dcms" minSdkVersion 21 targetSdkVersion 30 - versionCode 19 - versionName "v1.0.0.11" + versionCode 20 + versionName "v1.0.0.12" ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 68f46c9..3090a91 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -89,7 +89,10 @@ - + + + + { + + private Context context; + private List dataRows; + private LayoutInflater layoutInflater; + private QMUITipDialog.Builder dialogBuilder; + + public MaintainRecordAdapter(Context context, List dataRows) { + this.context = context; + this.dataRows = dataRows; + layoutInflater = LayoutInflater.from(context); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = layoutInflater.inflate(R.layout.item_maintain_recycleview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + holder.bindView(dataRows.get(position)); + } + + @Override + public int getItemCount() { + return dataRows.size(); + } + + class ItemViewHolder extends RecyclerView.ViewHolder { + + private TextView bridgeNameView; + private ImageView descriptionImageView; + private TextView maintainContentView; + private TextView maintainTimeView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + bridgeNameView = itemView.findViewById(R.id.bridgeNameView); + descriptionImageView = itemView.findViewById(R.id.descriptionImageView); + maintainContentView = itemView.findViewById(R.id.maintainContentView); + maintainTimeView = itemView.findViewById(R.id.maintainTimeView); + } + + void bindView(MaintainRecordBean.DataBean.RowsBean rowsBean) { + bridgeNameView.setText(rowsBean.getBridgeName()); + String description = rowsBean.getDescription(); + if (TextUtils.isEmpty(description)) { + descriptionImageView.setVisibility(View.GONE); + } else { + descriptionImageView.setVisibility(View.VISIBLE); + descriptionImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + QMUITipDialog tipDialog = new QMUITipDialog.Builder(context) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_NOTHING) + .setTipWord(description) + .create(); + tipDialog.show(); + descriptionImageView.postDelayed(new Runnable() { + @Override + public void run() { + tipDialog.dismiss(); + } + }, 2000); + } + }); + } + maintainContentView.setText(rowsBean.getContent()); + maintainTimeView.setText(rowsBean.getMaintainTimeStr()); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java b/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java new file mode 100644 index 0000000..ded4fe1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java @@ -0,0 +1,41 @@ +package com.casic.dcms.bean; + +public class MaintainContentBean { + + private int code; + private String data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java b/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java new file mode 100644 index 0000000..2beea74 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java @@ -0,0 +1,301 @@ +package com.casic.dcms.bean; + +import java.util.List; + +public class MaintainRecordBean { + + private int code; + private DataBean data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + + private int total; + private List rows; + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public static class RowsBean { + /** + * bridgeId : 1 + * bridgeName : 永胜桥 + * category : 桥梁 + * code : 1624359572304 + * content : 日常养护,无异常 + * deptid : 1344110695992258561 + * description : + * id : 1407292162033041409 + * latitude : 39.914705918747295 + * longitude : 116.26295490330527 + * maintainTime : 2021-06-22 00:00:00 + * maintainTimeStr : 2021-06-22 + * name : + * personId : 1344179277212151809 + * personName : + * phone : + * status : + * statusName : + * tender : + * tenderCompany : + * ts : 2021-06-22 + * type : + * typeName : + */ + + private String bridgeId; + private String bridgeName; + private String category; + private String code; + private String content; + private String deptid; + private String description; + private String id; + private String latitude; + private String longitude; + private String maintainTime; + private String maintainTimeStr; + private String name; + private String personId; + private String personName; + private String phone; + private String status; + private String statusName; + private String tender; + private String tenderCompany; + private String ts; + private String type; + private String typeName; + + public String getBridgeId() { + return bridgeId; + } + + public void setBridgeId(String bridgeId) { + this.bridgeId = bridgeId; + } + + public String getBridgeName() { + return bridgeName; + } + + public void setBridgeName(String bridgeName) { + this.bridgeName = bridgeName; + } + + public String getCategory() { + return category; + } + + public void setCategory(String category) { + this.category = category; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLatitude() { + return latitude; + } + + public void setLatitude(String latitude) { + this.latitude = latitude; + } + + public String getLongitude() { + return longitude; + } + + public void setLongitude(String longitude) { + this.longitude = longitude; + } + + public String getMaintainTime() { + return maintainTime; + } + + public void setMaintainTime(String maintainTime) { + this.maintainTime = maintainTime; + } + + public String getMaintainTimeStr() { + return maintainTimeStr; + } + + public void setMaintainTimeStr(String maintainTimeStr) { + this.maintainTimeStr = maintainTimeStr; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPersonId() { + return personId; + } + + public void setPersonId(String personId) { + this.personId = personId; + } + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + 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 getTender() { + return tender; + } + + public void setTender(String tender) { + this.tender = tender; + } + + public String getTenderCompany() { + return tenderCompany; + } + + public void setTenderCompany(String tenderCompany) { + this.tenderCompany = tenderCompany; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getTypeName() { + return typeName; + } + + public void setTypeName(String typeName) { + this.typeName = typeName; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java new file mode 100644 index 0000000..4f7a588 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IMaintainRecordModel { + Subscription sendRetrofitRequest(String startDate, String endDate, int offset); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java new file mode 100644 index 0000000..dce3f91 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java @@ -0,0 +1,8 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ISubmitMaintainModel { + Subscription sendRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/MaintainRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/MaintainRecordModelImpl.java new file mode 100644 index 0000000..35fd486 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/MaintainRecordModelImpl.java @@ -0,0 +1,50 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.MaintainRecordBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class MaintainRecordModelImpl implements IMaintainRecordModel { + + private OnGetRecordListener listener; + + public MaintainRecordModelImpl(OnGetRecordListener recordListener) { + this.listener = recordListener; + } + + public interface OnGetRecordListener { + void onSuccess(MaintainRecordBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String startDate, String endDate, int offset) { + Observable observable = RetrofitServiceManager.getMaintainRecordResult(startDate, endDate, offset); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (e.getCause() != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(MaintainRecordBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java index 06f6fb4..9e2666d 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java @@ -29,7 +29,7 @@ @Override public Subscription sendRetrofitRequest() { - Observable observable = RetrofitServiceManager.getProcessPerson(); + Observable observable = RetrofitServiceManager.getProcessPersonResult(); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/SubmitMaintainModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/SubmitMaintainModelImpl.java new file mode 100644 index 0000000..2924fbe --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/SubmitMaintainModelImpl.java @@ -0,0 +1,52 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class SubmitMaintainModelImpl implements ISubmitMaintainModel { + + private OnSubmitListener listener; + + public SubmitMaintainModelImpl(OnSubmitListener submitListener) { + this.listener = submitListener; + } + + public interface OnSubmitListener { + void onSuccess(ActionResultBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description) { + Observable observable = RetrofitServiceManager.getAddMaintainRecordResult(bridgeId, + content, maintainTime, personId, longitude, latitude, description); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (e.getCause() != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(ActionResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IMaintainRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IMaintainRecordPresenter.java new file mode 100644 index 0000000..938a484 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IMaintainRecordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IMaintainRecordPresenter { + void onReadyRetrofitRequest(String startDate, String endDate, int offset); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ISubmitMaintainPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ISubmitMaintainPresenter.java new file mode 100644 index 0000000..511e717 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ISubmitMaintainPresenter.java @@ -0,0 +1,8 @@ +package com.casic.dcms.mvp.presenter; + +public interface ISubmitMaintainPresenter { + void onReadyRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/MaintainRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/MaintainRecordPresenterImpl.java new file mode 100644 index 0000000..fd99e30 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/MaintainRecordPresenterImpl.java @@ -0,0 +1,39 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.MaintainRecordBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.MaintainRecordModelImpl; +import com.casic.dcms.mvp.view.IMaintainRecordView; + +public class MaintainRecordPresenterImpl extends BasePresenter implements IMaintainRecordPresenter, MaintainRecordModelImpl.OnGetRecordListener { + + private IMaintainRecordView view; + private MaintainRecordModelImpl model; + + public MaintainRecordPresenterImpl(IMaintainRecordView cleanToiletRecordView) { + this.view = cleanToiletRecordView; + model = new MaintainRecordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String startDate, String endDate, int offset) { + view.showProgress(); + addSubscription(model.sendRetrofitRequest(startDate, endDate, offset)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(MaintainRecordBean result) { + view.hideProgress(); + view.obtainRecordResult(result); + } + + @Override + public void onFailure(Throwable throwable) { + view.hideProgress(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/SubmitMaintainPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/SubmitMaintainPresenterImpl.java new file mode 100644 index 0000000..7722427 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/SubmitMaintainPresenterImpl.java @@ -0,0 +1,42 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.SubmitMaintainModelImpl; +import com.casic.dcms.mvp.view.ISubmitMaintainView; + +public class SubmitMaintainPresenterImpl extends BasePresenter implements ISubmitMaintainPresenter, SubmitMaintainModelImpl.OnSubmitListener { + + private ISubmitMaintainView view; + private SubmitMaintainModelImpl actionModel; + + public SubmitMaintainPresenterImpl(ISubmitMaintainView submitCaseView) { + this.view = submitCaseView; + actionModel = new SubmitMaintainModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description) { + view.showProgress(); + addSubscription(actionModel.sendRetrofitRequest(bridgeId, content, maintainTime, personId, longitude, + latitude, description)); + } + + @Override + public void onSuccess(ActionResultBean resultBean) { + view.hideProgress(); + view.obtainSubmitResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + view.hideProgress(); + view.obtainDataFail(); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/build.gradle b/app/build.gradle index 6f0b518..bcfdc0d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ applicationId "com.casic.dcms" minSdkVersion 21 targetSdkVersion 30 - versionCode 19 - versionName "v1.0.0.11" + versionCode 20 + versionName "v1.0.0.12" ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 68f46c9..3090a91 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -89,7 +89,10 @@ - + + + + { + + private Context context; + private List dataRows; + private LayoutInflater layoutInflater; + private QMUITipDialog.Builder dialogBuilder; + + public MaintainRecordAdapter(Context context, List dataRows) { + this.context = context; + this.dataRows = dataRows; + layoutInflater = LayoutInflater.from(context); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = layoutInflater.inflate(R.layout.item_maintain_recycleview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + holder.bindView(dataRows.get(position)); + } + + @Override + public int getItemCount() { + return dataRows.size(); + } + + class ItemViewHolder extends RecyclerView.ViewHolder { + + private TextView bridgeNameView; + private ImageView descriptionImageView; + private TextView maintainContentView; + private TextView maintainTimeView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + bridgeNameView = itemView.findViewById(R.id.bridgeNameView); + descriptionImageView = itemView.findViewById(R.id.descriptionImageView); + maintainContentView = itemView.findViewById(R.id.maintainContentView); + maintainTimeView = itemView.findViewById(R.id.maintainTimeView); + } + + void bindView(MaintainRecordBean.DataBean.RowsBean rowsBean) { + bridgeNameView.setText(rowsBean.getBridgeName()); + String description = rowsBean.getDescription(); + if (TextUtils.isEmpty(description)) { + descriptionImageView.setVisibility(View.GONE); + } else { + descriptionImageView.setVisibility(View.VISIBLE); + descriptionImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + QMUITipDialog tipDialog = new QMUITipDialog.Builder(context) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_NOTHING) + .setTipWord(description) + .create(); + tipDialog.show(); + descriptionImageView.postDelayed(new Runnable() { + @Override + public void run() { + tipDialog.dismiss(); + } + }, 2000); + } + }); + } + maintainContentView.setText(rowsBean.getContent()); + maintainTimeView.setText(rowsBean.getMaintainTimeStr()); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java b/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java new file mode 100644 index 0000000..ded4fe1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java @@ -0,0 +1,41 @@ +package com.casic.dcms.bean; + +public class MaintainContentBean { + + private int code; + private String data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java b/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java new file mode 100644 index 0000000..2beea74 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java @@ -0,0 +1,301 @@ +package com.casic.dcms.bean; + +import java.util.List; + +public class MaintainRecordBean { + + private int code; + private DataBean data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + + private int total; + private List rows; + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public static class RowsBean { + /** + * bridgeId : 1 + * bridgeName : 永胜桥 + * category : 桥梁 + * code : 1624359572304 + * content : 日常养护,无异常 + * deptid : 1344110695992258561 + * description : + * id : 1407292162033041409 + * latitude : 39.914705918747295 + * longitude : 116.26295490330527 + * maintainTime : 2021-06-22 00:00:00 + * maintainTimeStr : 2021-06-22 + * name : + * personId : 1344179277212151809 + * personName : + * phone : + * status : + * statusName : + * tender : + * tenderCompany : + * ts : 2021-06-22 + * type : + * typeName : + */ + + private String bridgeId; + private String bridgeName; + private String category; + private String code; + private String content; + private String deptid; + private String description; + private String id; + private String latitude; + private String longitude; + private String maintainTime; + private String maintainTimeStr; + private String name; + private String personId; + private String personName; + private String phone; + private String status; + private String statusName; + private String tender; + private String tenderCompany; + private String ts; + private String type; + private String typeName; + + public String getBridgeId() { + return bridgeId; + } + + public void setBridgeId(String bridgeId) { + this.bridgeId = bridgeId; + } + + public String getBridgeName() { + return bridgeName; + } + + public void setBridgeName(String bridgeName) { + this.bridgeName = bridgeName; + } + + public String getCategory() { + return category; + } + + public void setCategory(String category) { + this.category = category; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLatitude() { + return latitude; + } + + public void setLatitude(String latitude) { + this.latitude = latitude; + } + + public String getLongitude() { + return longitude; + } + + public void setLongitude(String longitude) { + this.longitude = longitude; + } + + public String getMaintainTime() { + return maintainTime; + } + + public void setMaintainTime(String maintainTime) { + this.maintainTime = maintainTime; + } + + public String getMaintainTimeStr() { + return maintainTimeStr; + } + + public void setMaintainTimeStr(String maintainTimeStr) { + this.maintainTimeStr = maintainTimeStr; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPersonId() { + return personId; + } + + public void setPersonId(String personId) { + this.personId = personId; + } + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + 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 getTender() { + return tender; + } + + public void setTender(String tender) { + this.tender = tender; + } + + public String getTenderCompany() { + return tenderCompany; + } + + public void setTenderCompany(String tenderCompany) { + this.tenderCompany = tenderCompany; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getTypeName() { + return typeName; + } + + public void setTypeName(String typeName) { + this.typeName = typeName; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java new file mode 100644 index 0000000..4f7a588 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IMaintainRecordModel { + Subscription sendRetrofitRequest(String startDate, String endDate, int offset); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java new file mode 100644 index 0000000..dce3f91 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java @@ -0,0 +1,8 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ISubmitMaintainModel { + Subscription sendRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/MaintainRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/MaintainRecordModelImpl.java new file mode 100644 index 0000000..35fd486 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/MaintainRecordModelImpl.java @@ -0,0 +1,50 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.MaintainRecordBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class MaintainRecordModelImpl implements IMaintainRecordModel { + + private OnGetRecordListener listener; + + public MaintainRecordModelImpl(OnGetRecordListener recordListener) { + this.listener = recordListener; + } + + public interface OnGetRecordListener { + void onSuccess(MaintainRecordBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String startDate, String endDate, int offset) { + Observable observable = RetrofitServiceManager.getMaintainRecordResult(startDate, endDate, offset); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (e.getCause() != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(MaintainRecordBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java index 06f6fb4..9e2666d 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java @@ -29,7 +29,7 @@ @Override public Subscription sendRetrofitRequest() { - Observable observable = RetrofitServiceManager.getProcessPerson(); + Observable observable = RetrofitServiceManager.getProcessPersonResult(); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/SubmitMaintainModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/SubmitMaintainModelImpl.java new file mode 100644 index 0000000..2924fbe --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/SubmitMaintainModelImpl.java @@ -0,0 +1,52 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class SubmitMaintainModelImpl implements ISubmitMaintainModel { + + private OnSubmitListener listener; + + public SubmitMaintainModelImpl(OnSubmitListener submitListener) { + this.listener = submitListener; + } + + public interface OnSubmitListener { + void onSuccess(ActionResultBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description) { + Observable observable = RetrofitServiceManager.getAddMaintainRecordResult(bridgeId, + content, maintainTime, personId, longitude, latitude, description); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (e.getCause() != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(ActionResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IMaintainRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IMaintainRecordPresenter.java new file mode 100644 index 0000000..938a484 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IMaintainRecordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IMaintainRecordPresenter { + void onReadyRetrofitRequest(String startDate, String endDate, int offset); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ISubmitMaintainPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ISubmitMaintainPresenter.java new file mode 100644 index 0000000..511e717 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ISubmitMaintainPresenter.java @@ -0,0 +1,8 @@ +package com.casic.dcms.mvp.presenter; + +public interface ISubmitMaintainPresenter { + void onReadyRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/MaintainRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/MaintainRecordPresenterImpl.java new file mode 100644 index 0000000..fd99e30 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/MaintainRecordPresenterImpl.java @@ -0,0 +1,39 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.MaintainRecordBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.MaintainRecordModelImpl; +import com.casic.dcms.mvp.view.IMaintainRecordView; + +public class MaintainRecordPresenterImpl extends BasePresenter implements IMaintainRecordPresenter, MaintainRecordModelImpl.OnGetRecordListener { + + private IMaintainRecordView view; + private MaintainRecordModelImpl model; + + public MaintainRecordPresenterImpl(IMaintainRecordView cleanToiletRecordView) { + this.view = cleanToiletRecordView; + model = new MaintainRecordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String startDate, String endDate, int offset) { + view.showProgress(); + addSubscription(model.sendRetrofitRequest(startDate, endDate, offset)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(MaintainRecordBean result) { + view.hideProgress(); + view.obtainRecordResult(result); + } + + @Override + public void onFailure(Throwable throwable) { + view.hideProgress(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/SubmitMaintainPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/SubmitMaintainPresenterImpl.java new file mode 100644 index 0000000..7722427 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/SubmitMaintainPresenterImpl.java @@ -0,0 +1,42 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.SubmitMaintainModelImpl; +import com.casic.dcms.mvp.view.ISubmitMaintainView; + +public class SubmitMaintainPresenterImpl extends BasePresenter implements ISubmitMaintainPresenter, SubmitMaintainModelImpl.OnSubmitListener { + + private ISubmitMaintainView view; + private SubmitMaintainModelImpl actionModel; + + public SubmitMaintainPresenterImpl(ISubmitMaintainView submitCaseView) { + this.view = submitCaseView; + actionModel = new SubmitMaintainModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description) { + view.showProgress(); + addSubscription(actionModel.sendRetrofitRequest(bridgeId, content, maintainTime, personId, longitude, + latitude, description)); + } + + @Override + public void onSuccess(ActionResultBean resultBean) { + view.hideProgress(); + view.obtainSubmitResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + view.hideProgress(); + view.obtainDataFail(); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IMaintainRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/IMaintainRecordView.java new file mode 100644 index 0000000..8ff5189 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IMaintainRecordView.java @@ -0,0 +1,11 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.MaintainRecordBean; + +public interface IMaintainRecordView { + void obtainRecordResult(MaintainRecordBean resultBean); + + void showProgress(); + + void hideProgress(); +} diff --git a/app/build.gradle b/app/build.gradle index 6f0b518..bcfdc0d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ applicationId "com.casic.dcms" minSdkVersion 21 targetSdkVersion 30 - versionCode 19 - versionName "v1.0.0.11" + versionCode 20 + versionName "v1.0.0.12" ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 68f46c9..3090a91 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -89,7 +89,10 @@ - + + + + { + + private Context context; + private List dataRows; + private LayoutInflater layoutInflater; + private QMUITipDialog.Builder dialogBuilder; + + public MaintainRecordAdapter(Context context, List dataRows) { + this.context = context; + this.dataRows = dataRows; + layoutInflater = LayoutInflater.from(context); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = layoutInflater.inflate(R.layout.item_maintain_recycleview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + holder.bindView(dataRows.get(position)); + } + + @Override + public int getItemCount() { + return dataRows.size(); + } + + class ItemViewHolder extends RecyclerView.ViewHolder { + + private TextView bridgeNameView; + private ImageView descriptionImageView; + private TextView maintainContentView; + private TextView maintainTimeView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + bridgeNameView = itemView.findViewById(R.id.bridgeNameView); + descriptionImageView = itemView.findViewById(R.id.descriptionImageView); + maintainContentView = itemView.findViewById(R.id.maintainContentView); + maintainTimeView = itemView.findViewById(R.id.maintainTimeView); + } + + void bindView(MaintainRecordBean.DataBean.RowsBean rowsBean) { + bridgeNameView.setText(rowsBean.getBridgeName()); + String description = rowsBean.getDescription(); + if (TextUtils.isEmpty(description)) { + descriptionImageView.setVisibility(View.GONE); + } else { + descriptionImageView.setVisibility(View.VISIBLE); + descriptionImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + QMUITipDialog tipDialog = new QMUITipDialog.Builder(context) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_NOTHING) + .setTipWord(description) + .create(); + tipDialog.show(); + descriptionImageView.postDelayed(new Runnable() { + @Override + public void run() { + tipDialog.dismiss(); + } + }, 2000); + } + }); + } + maintainContentView.setText(rowsBean.getContent()); + maintainTimeView.setText(rowsBean.getMaintainTimeStr()); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java b/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java new file mode 100644 index 0000000..ded4fe1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java @@ -0,0 +1,41 @@ +package com.casic.dcms.bean; + +public class MaintainContentBean { + + private int code; + private String data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java b/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java new file mode 100644 index 0000000..2beea74 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java @@ -0,0 +1,301 @@ +package com.casic.dcms.bean; + +import java.util.List; + +public class MaintainRecordBean { + + private int code; + private DataBean data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + + private int total; + private List rows; + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public static class RowsBean { + /** + * bridgeId : 1 + * bridgeName : 永胜桥 + * category : 桥梁 + * code : 1624359572304 + * content : 日常养护,无异常 + * deptid : 1344110695992258561 + * description : + * id : 1407292162033041409 + * latitude : 39.914705918747295 + * longitude : 116.26295490330527 + * maintainTime : 2021-06-22 00:00:00 + * maintainTimeStr : 2021-06-22 + * name : + * personId : 1344179277212151809 + * personName : + * phone : + * status : + * statusName : + * tender : + * tenderCompany : + * ts : 2021-06-22 + * type : + * typeName : + */ + + private String bridgeId; + private String bridgeName; + private String category; + private String code; + private String content; + private String deptid; + private String description; + private String id; + private String latitude; + private String longitude; + private String maintainTime; + private String maintainTimeStr; + private String name; + private String personId; + private String personName; + private String phone; + private String status; + private String statusName; + private String tender; + private String tenderCompany; + private String ts; + private String type; + private String typeName; + + public String getBridgeId() { + return bridgeId; + } + + public void setBridgeId(String bridgeId) { + this.bridgeId = bridgeId; + } + + public String getBridgeName() { + return bridgeName; + } + + public void setBridgeName(String bridgeName) { + this.bridgeName = bridgeName; + } + + public String getCategory() { + return category; + } + + public void setCategory(String category) { + this.category = category; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLatitude() { + return latitude; + } + + public void setLatitude(String latitude) { + this.latitude = latitude; + } + + public String getLongitude() { + return longitude; + } + + public void setLongitude(String longitude) { + this.longitude = longitude; + } + + public String getMaintainTime() { + return maintainTime; + } + + public void setMaintainTime(String maintainTime) { + this.maintainTime = maintainTime; + } + + public String getMaintainTimeStr() { + return maintainTimeStr; + } + + public void setMaintainTimeStr(String maintainTimeStr) { + this.maintainTimeStr = maintainTimeStr; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPersonId() { + return personId; + } + + public void setPersonId(String personId) { + this.personId = personId; + } + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + 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 getTender() { + return tender; + } + + public void setTender(String tender) { + this.tender = tender; + } + + public String getTenderCompany() { + return tenderCompany; + } + + public void setTenderCompany(String tenderCompany) { + this.tenderCompany = tenderCompany; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getTypeName() { + return typeName; + } + + public void setTypeName(String typeName) { + this.typeName = typeName; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java new file mode 100644 index 0000000..4f7a588 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IMaintainRecordModel { + Subscription sendRetrofitRequest(String startDate, String endDate, int offset); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java new file mode 100644 index 0000000..dce3f91 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java @@ -0,0 +1,8 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ISubmitMaintainModel { + Subscription sendRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/MaintainRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/MaintainRecordModelImpl.java new file mode 100644 index 0000000..35fd486 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/MaintainRecordModelImpl.java @@ -0,0 +1,50 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.MaintainRecordBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class MaintainRecordModelImpl implements IMaintainRecordModel { + + private OnGetRecordListener listener; + + public MaintainRecordModelImpl(OnGetRecordListener recordListener) { + this.listener = recordListener; + } + + public interface OnGetRecordListener { + void onSuccess(MaintainRecordBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String startDate, String endDate, int offset) { + Observable observable = RetrofitServiceManager.getMaintainRecordResult(startDate, endDate, offset); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (e.getCause() != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(MaintainRecordBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java index 06f6fb4..9e2666d 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java @@ -29,7 +29,7 @@ @Override public Subscription sendRetrofitRequest() { - Observable observable = RetrofitServiceManager.getProcessPerson(); + Observable observable = RetrofitServiceManager.getProcessPersonResult(); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/SubmitMaintainModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/SubmitMaintainModelImpl.java new file mode 100644 index 0000000..2924fbe --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/SubmitMaintainModelImpl.java @@ -0,0 +1,52 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class SubmitMaintainModelImpl implements ISubmitMaintainModel { + + private OnSubmitListener listener; + + public SubmitMaintainModelImpl(OnSubmitListener submitListener) { + this.listener = submitListener; + } + + public interface OnSubmitListener { + void onSuccess(ActionResultBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description) { + Observable observable = RetrofitServiceManager.getAddMaintainRecordResult(bridgeId, + content, maintainTime, personId, longitude, latitude, description); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (e.getCause() != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(ActionResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IMaintainRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IMaintainRecordPresenter.java new file mode 100644 index 0000000..938a484 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IMaintainRecordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IMaintainRecordPresenter { + void onReadyRetrofitRequest(String startDate, String endDate, int offset); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ISubmitMaintainPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ISubmitMaintainPresenter.java new file mode 100644 index 0000000..511e717 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ISubmitMaintainPresenter.java @@ -0,0 +1,8 @@ +package com.casic.dcms.mvp.presenter; + +public interface ISubmitMaintainPresenter { + void onReadyRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/MaintainRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/MaintainRecordPresenterImpl.java new file mode 100644 index 0000000..fd99e30 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/MaintainRecordPresenterImpl.java @@ -0,0 +1,39 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.MaintainRecordBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.MaintainRecordModelImpl; +import com.casic.dcms.mvp.view.IMaintainRecordView; + +public class MaintainRecordPresenterImpl extends BasePresenter implements IMaintainRecordPresenter, MaintainRecordModelImpl.OnGetRecordListener { + + private IMaintainRecordView view; + private MaintainRecordModelImpl model; + + public MaintainRecordPresenterImpl(IMaintainRecordView cleanToiletRecordView) { + this.view = cleanToiletRecordView; + model = new MaintainRecordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String startDate, String endDate, int offset) { + view.showProgress(); + addSubscription(model.sendRetrofitRequest(startDate, endDate, offset)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(MaintainRecordBean result) { + view.hideProgress(); + view.obtainRecordResult(result); + } + + @Override + public void onFailure(Throwable throwable) { + view.hideProgress(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/SubmitMaintainPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/SubmitMaintainPresenterImpl.java new file mode 100644 index 0000000..7722427 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/SubmitMaintainPresenterImpl.java @@ -0,0 +1,42 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.SubmitMaintainModelImpl; +import com.casic.dcms.mvp.view.ISubmitMaintainView; + +public class SubmitMaintainPresenterImpl extends BasePresenter implements ISubmitMaintainPresenter, SubmitMaintainModelImpl.OnSubmitListener { + + private ISubmitMaintainView view; + private SubmitMaintainModelImpl actionModel; + + public SubmitMaintainPresenterImpl(ISubmitMaintainView submitCaseView) { + this.view = submitCaseView; + actionModel = new SubmitMaintainModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description) { + view.showProgress(); + addSubscription(actionModel.sendRetrofitRequest(bridgeId, content, maintainTime, personId, longitude, + latitude, description)); + } + + @Override + public void onSuccess(ActionResultBean resultBean) { + view.hideProgress(); + view.obtainSubmitResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + view.hideProgress(); + view.obtainDataFail(); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IMaintainRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/IMaintainRecordView.java new file mode 100644 index 0000000..8ff5189 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IMaintainRecordView.java @@ -0,0 +1,11 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.MaintainRecordBean; + +public interface IMaintainRecordView { + void obtainRecordResult(MaintainRecordBean resultBean); + + void showProgress(); + + void hideProgress(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ISubmitMaintainView.java b/app/src/main/java/com/casic/dcms/mvp/view/ISubmitMaintainView.java new file mode 100644 index 0000000..75a0629 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/ISubmitMaintainView.java @@ -0,0 +1,13 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.ActionResultBean; + +public interface ISubmitMaintainView { + void showProgress(); + + void hideProgress(); + + void obtainSubmitResult(ActionResultBean resultBean); + + void obtainDataFail(); +} diff --git a/app/build.gradle b/app/build.gradle index 6f0b518..bcfdc0d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ applicationId "com.casic.dcms" minSdkVersion 21 targetSdkVersion 30 - versionCode 19 - versionName "v1.0.0.11" + versionCode 20 + versionName "v1.0.0.12" ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 68f46c9..3090a91 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -89,7 +89,10 @@ - + + + + { + + private Context context; + private List dataRows; + private LayoutInflater layoutInflater; + private QMUITipDialog.Builder dialogBuilder; + + public MaintainRecordAdapter(Context context, List dataRows) { + this.context = context; + this.dataRows = dataRows; + layoutInflater = LayoutInflater.from(context); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = layoutInflater.inflate(R.layout.item_maintain_recycleview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + holder.bindView(dataRows.get(position)); + } + + @Override + public int getItemCount() { + return dataRows.size(); + } + + class ItemViewHolder extends RecyclerView.ViewHolder { + + private TextView bridgeNameView; + private ImageView descriptionImageView; + private TextView maintainContentView; + private TextView maintainTimeView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + bridgeNameView = itemView.findViewById(R.id.bridgeNameView); + descriptionImageView = itemView.findViewById(R.id.descriptionImageView); + maintainContentView = itemView.findViewById(R.id.maintainContentView); + maintainTimeView = itemView.findViewById(R.id.maintainTimeView); + } + + void bindView(MaintainRecordBean.DataBean.RowsBean rowsBean) { + bridgeNameView.setText(rowsBean.getBridgeName()); + String description = rowsBean.getDescription(); + if (TextUtils.isEmpty(description)) { + descriptionImageView.setVisibility(View.GONE); + } else { + descriptionImageView.setVisibility(View.VISIBLE); + descriptionImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + QMUITipDialog tipDialog = new QMUITipDialog.Builder(context) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_NOTHING) + .setTipWord(description) + .create(); + tipDialog.show(); + descriptionImageView.postDelayed(new Runnable() { + @Override + public void run() { + tipDialog.dismiss(); + } + }, 2000); + } + }); + } + maintainContentView.setText(rowsBean.getContent()); + maintainTimeView.setText(rowsBean.getMaintainTimeStr()); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java b/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java new file mode 100644 index 0000000..ded4fe1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java @@ -0,0 +1,41 @@ +package com.casic.dcms.bean; + +public class MaintainContentBean { + + private int code; + private String data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java b/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java new file mode 100644 index 0000000..2beea74 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java @@ -0,0 +1,301 @@ +package com.casic.dcms.bean; + +import java.util.List; + +public class MaintainRecordBean { + + private int code; + private DataBean data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + + private int total; + private List rows; + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public static class RowsBean { + /** + * bridgeId : 1 + * bridgeName : 永胜桥 + * category : 桥梁 + * code : 1624359572304 + * content : 日常养护,无异常 + * deptid : 1344110695992258561 + * description : + * id : 1407292162033041409 + * latitude : 39.914705918747295 + * longitude : 116.26295490330527 + * maintainTime : 2021-06-22 00:00:00 + * maintainTimeStr : 2021-06-22 + * name : + * personId : 1344179277212151809 + * personName : + * phone : + * status : + * statusName : + * tender : + * tenderCompany : + * ts : 2021-06-22 + * type : + * typeName : + */ + + private String bridgeId; + private String bridgeName; + private String category; + private String code; + private String content; + private String deptid; + private String description; + private String id; + private String latitude; + private String longitude; + private String maintainTime; + private String maintainTimeStr; + private String name; + private String personId; + private String personName; + private String phone; + private String status; + private String statusName; + private String tender; + private String tenderCompany; + private String ts; + private String type; + private String typeName; + + public String getBridgeId() { + return bridgeId; + } + + public void setBridgeId(String bridgeId) { + this.bridgeId = bridgeId; + } + + public String getBridgeName() { + return bridgeName; + } + + public void setBridgeName(String bridgeName) { + this.bridgeName = bridgeName; + } + + public String getCategory() { + return category; + } + + public void setCategory(String category) { + this.category = category; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLatitude() { + return latitude; + } + + public void setLatitude(String latitude) { + this.latitude = latitude; + } + + public String getLongitude() { + return longitude; + } + + public void setLongitude(String longitude) { + this.longitude = longitude; + } + + public String getMaintainTime() { + return maintainTime; + } + + public void setMaintainTime(String maintainTime) { + this.maintainTime = maintainTime; + } + + public String getMaintainTimeStr() { + return maintainTimeStr; + } + + public void setMaintainTimeStr(String maintainTimeStr) { + this.maintainTimeStr = maintainTimeStr; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPersonId() { + return personId; + } + + public void setPersonId(String personId) { + this.personId = personId; + } + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + 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 getTender() { + return tender; + } + + public void setTender(String tender) { + this.tender = tender; + } + + public String getTenderCompany() { + return tenderCompany; + } + + public void setTenderCompany(String tenderCompany) { + this.tenderCompany = tenderCompany; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getTypeName() { + return typeName; + } + + public void setTypeName(String typeName) { + this.typeName = typeName; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java new file mode 100644 index 0000000..4f7a588 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IMaintainRecordModel { + Subscription sendRetrofitRequest(String startDate, String endDate, int offset); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java new file mode 100644 index 0000000..dce3f91 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java @@ -0,0 +1,8 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ISubmitMaintainModel { + Subscription sendRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/MaintainRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/MaintainRecordModelImpl.java new file mode 100644 index 0000000..35fd486 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/MaintainRecordModelImpl.java @@ -0,0 +1,50 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.MaintainRecordBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class MaintainRecordModelImpl implements IMaintainRecordModel { + + private OnGetRecordListener listener; + + public MaintainRecordModelImpl(OnGetRecordListener recordListener) { + this.listener = recordListener; + } + + public interface OnGetRecordListener { + void onSuccess(MaintainRecordBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String startDate, String endDate, int offset) { + Observable observable = RetrofitServiceManager.getMaintainRecordResult(startDate, endDate, offset); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (e.getCause() != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(MaintainRecordBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java index 06f6fb4..9e2666d 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java @@ -29,7 +29,7 @@ @Override public Subscription sendRetrofitRequest() { - Observable observable = RetrofitServiceManager.getProcessPerson(); + Observable observable = RetrofitServiceManager.getProcessPersonResult(); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/SubmitMaintainModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/SubmitMaintainModelImpl.java new file mode 100644 index 0000000..2924fbe --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/SubmitMaintainModelImpl.java @@ -0,0 +1,52 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class SubmitMaintainModelImpl implements ISubmitMaintainModel { + + private OnSubmitListener listener; + + public SubmitMaintainModelImpl(OnSubmitListener submitListener) { + this.listener = submitListener; + } + + public interface OnSubmitListener { + void onSuccess(ActionResultBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description) { + Observable observable = RetrofitServiceManager.getAddMaintainRecordResult(bridgeId, + content, maintainTime, personId, longitude, latitude, description); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (e.getCause() != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(ActionResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IMaintainRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IMaintainRecordPresenter.java new file mode 100644 index 0000000..938a484 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IMaintainRecordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IMaintainRecordPresenter { + void onReadyRetrofitRequest(String startDate, String endDate, int offset); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ISubmitMaintainPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ISubmitMaintainPresenter.java new file mode 100644 index 0000000..511e717 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ISubmitMaintainPresenter.java @@ -0,0 +1,8 @@ +package com.casic.dcms.mvp.presenter; + +public interface ISubmitMaintainPresenter { + void onReadyRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/MaintainRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/MaintainRecordPresenterImpl.java new file mode 100644 index 0000000..fd99e30 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/MaintainRecordPresenterImpl.java @@ -0,0 +1,39 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.MaintainRecordBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.MaintainRecordModelImpl; +import com.casic.dcms.mvp.view.IMaintainRecordView; + +public class MaintainRecordPresenterImpl extends BasePresenter implements IMaintainRecordPresenter, MaintainRecordModelImpl.OnGetRecordListener { + + private IMaintainRecordView view; + private MaintainRecordModelImpl model; + + public MaintainRecordPresenterImpl(IMaintainRecordView cleanToiletRecordView) { + this.view = cleanToiletRecordView; + model = new MaintainRecordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String startDate, String endDate, int offset) { + view.showProgress(); + addSubscription(model.sendRetrofitRequest(startDate, endDate, offset)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(MaintainRecordBean result) { + view.hideProgress(); + view.obtainRecordResult(result); + } + + @Override + public void onFailure(Throwable throwable) { + view.hideProgress(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/SubmitMaintainPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/SubmitMaintainPresenterImpl.java new file mode 100644 index 0000000..7722427 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/SubmitMaintainPresenterImpl.java @@ -0,0 +1,42 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.SubmitMaintainModelImpl; +import com.casic.dcms.mvp.view.ISubmitMaintainView; + +public class SubmitMaintainPresenterImpl extends BasePresenter implements ISubmitMaintainPresenter, SubmitMaintainModelImpl.OnSubmitListener { + + private ISubmitMaintainView view; + private SubmitMaintainModelImpl actionModel; + + public SubmitMaintainPresenterImpl(ISubmitMaintainView submitCaseView) { + this.view = submitCaseView; + actionModel = new SubmitMaintainModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description) { + view.showProgress(); + addSubscription(actionModel.sendRetrofitRequest(bridgeId, content, maintainTime, personId, longitude, + latitude, description)); + } + + @Override + public void onSuccess(ActionResultBean resultBean) { + view.hideProgress(); + view.obtainSubmitResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + view.hideProgress(); + view.obtainDataFail(); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IMaintainRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/IMaintainRecordView.java new file mode 100644 index 0000000..8ff5189 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IMaintainRecordView.java @@ -0,0 +1,11 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.MaintainRecordBean; + +public interface IMaintainRecordView { + void obtainRecordResult(MaintainRecordBean resultBean); + + void showProgress(); + + void hideProgress(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ISubmitMaintainView.java b/app/src/main/java/com/casic/dcms/mvp/view/ISubmitMaintainView.java new file mode 100644 index 0000000..75a0629 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/ISubmitMaintainView.java @@ -0,0 +1,13 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.ActionResultBean; + +public interface ISubmitMaintainView { + void showProgress(); + + void hideProgress(); + + void obtainSubmitResult(ActionResultBean resultBean); + + void obtainDataFail(); +} diff --git a/app/src/main/java/com/casic/dcms/ui/BridgeMaintainActivity.java b/app/src/main/java/com/casic/dcms/ui/BridgeMaintainActivity.java new file mode 100644 index 0000000..84b0eef --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/BridgeMaintainActivity.java @@ -0,0 +1,239 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.content.Intent; +import android.location.Location; +import android.text.TextUtils; +import android.view.View; +import android.widget.EditText; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.amap.api.services.core.LatLonPoint; +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.mvp.presenter.SubmitMaintainPresenterImpl; +import com.casic.dcms.mvp.view.ISubmitMaintainView; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; +import com.casic.dcms.utils.SaveKeyValues; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.utils.callback.IAddressListener; +import com.casic.dcms.utils.callback.ILocationListener; +import com.casic.dcms.widgets.SignInDialog; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.util.Timer; +import java.util.TimerTask; + +import butterknife.BindView; +import butterknife.OnClick; + +public class BridgeMaintainActivity extends BaseActivity implements View.OnClickListener, ISubmitMaintainView { + + private static final String TAG = "BridgeMaintainActivity"; + private Context context = this; + @BindView(R.id.topLayout) + QMUITopBarLayout topLayout; + @BindView(R.id.bridgeNameView) + TextView bridgeNameView; + @BindView(R.id.maintainView) + TextView maintainView; + @BindView(R.id.maintainDateView) + TextView maintainDateView; + @BindView(R.id.liablePersonView) + TextView liablePersonView; + @BindView(R.id.submitButton) + QMUIRoundButton submitButton; + //以下非必填 + @BindView(R.id.remarksView) + EditText remarksView; + + private String bridgeId = ""; + private SubmitMaintainPresenterImpl submitMaintainPresenter; + + @Override + public int initLayoutView() { + return R.layout.activity_bridge; + } + + @Override + protected void setupTopBarLayout() { + topLayout.setTitle("路桥养护").setTextColor(ContextCompat.getColor(this, R.color.white)); + topLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + topLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + topLayout.addRightImageButton(R.drawable.ic_more, 2).setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + startActivity(new Intent(context, MaintainRecordActivity.class)); + } + }); + } + + @Override + public void initData() { + submitMaintainPresenter = new SubmitMaintainPresenterImpl(this); + } + + @Override + public void initEvent() { + submitButton.setChangeAlphaWhenPress(true); + liablePersonView.setText(StringHelper.getUserAccount()); + liablePersonView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); + + new Timer().schedule(new TimerTask() { + @Override + public void run() { + String systemDate = TimeOrDateUtil.timestampToDate(System.currentTimeMillis()); + maintainDateView.post(new Runnable() { + @Override + public void run() { + maintainDateView.setText(systemDate); + maintainDateView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); + } + }); + } + }, 0, 1000); + } + + @OnClick({R.id.bridgeLayout, R.id.maintainContentLayout, R.id.submitButton}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.bridgeLayout: + new QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("选择桥梁") + .addItem("永胜桥") + .addItem("黄洲桥") + .addItem("光明桥") + .setGravityCenter(true) + .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + + bridgeId = String.valueOf((1 + position)); + bridgeNameView.setText(tag); + bridgeNameView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); + } + }).build().show(); + break; + case R.id.maintainContentLayout: + new QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("养护内容") + .addItem("日常养护,无异常") + .addItem("清除表面污垢") + .addItem("修补混凝土空洞、破损、剥落和表面风化及裂缝") + .addItem("清除暴露钢筋的锈渍、恢复保护层") + .addItem("处理各种横、纵向构件的开裂、开焊和锈蚀") + .setGravityCenter(true) + .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + + maintainView.setText(tag); + maintainView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); + } + }).build().show(); + break; + case R.id.submitButton: + //获取定位信息 + LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + + } + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + if (aMapLocation != null) { + if (TextUtils.isEmpty(bridgeId)) { + ToastHelper.showToast("请先选择养护的桥梁", ToastHelper.WARING); + return; + } + String maintainContent = maintainView.getText().toString(); + if (TextUtils.isEmpty(maintainContent)) { + ToastHelper.showToast("请选择养护的内容", ToastHelper.WARING); + return; + } + + double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + LatLonPoint latLonPoint = new LatLonPoint(gcjToWgs[1], gcjToWgs[0]); + LocationHelper.antiCodingLocation(context, latLonPoint, new IAddressListener() { + @Override + public void onGetAddress(String address) { + SaveKeyValues.putValue("maintainAddress", address); + } + }); + //提交养护记录 + submitMaintainPresenter.onReadyRetrofitRequest(bridgeId, maintainContent, + maintainDateView.getText().toString(), + StringHelper.getUserId(), String.valueOf(gcjToWgs[0]), + String.valueOf(gcjToWgs[1]), + StringHelper.filterString(remarksView.getText().toString())); + } else { + ToastHelper.showToast("当前信号较弱,无法提交养护记录", ToastHelper.WARING); + } + } + }, true); + break; + default: + throw new IllegalStateException("Unexpected value: " + v.getId()); + } + } + + @Override + public void showProgress() { + OtherUtils.showLoadingDialog(this, "养护记录签到中,请稍后"); + } + + @Override + public void hideProgress() { + OtherUtils.dismissLoadingDialog(); + } + + @Override + public void obtainSubmitResult(ActionResultBean resultBean) { + String maintainAddress = (String) SaveKeyValues.getValue("maintainAddress", ""); + if (resultBean.isSuccess()) { + new SignInDialog.Builder() + .setContext(this) + .setTitle("桥梁养护记录提交成功") + .setAddress(maintainAddress.equals("") ? "详细位置解析失败" : maintainAddress) + .setOnDialogClickListener(new SignInDialog.OnDialogClickListener() { + @Override + public void onViewClick() { + startActivity(new Intent(context, MaintainRecordActivity.class)); + finish(); + } + }).build().show(); + } + } + + @Override + public void obtainDataFail() { + ToastHelper.showToast("操作失败", ToastHelper.ERROR); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (submitMaintainPresenter != null) { + submitMaintainPresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/build.gradle b/app/build.gradle index 6f0b518..bcfdc0d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ applicationId "com.casic.dcms" minSdkVersion 21 targetSdkVersion 30 - versionCode 19 - versionName "v1.0.0.11" + versionCode 20 + versionName "v1.0.0.12" ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 68f46c9..3090a91 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -89,7 +89,10 @@ - + + + + { + + private Context context; + private List dataRows; + private LayoutInflater layoutInflater; + private QMUITipDialog.Builder dialogBuilder; + + public MaintainRecordAdapter(Context context, List dataRows) { + this.context = context; + this.dataRows = dataRows; + layoutInflater = LayoutInflater.from(context); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = layoutInflater.inflate(R.layout.item_maintain_recycleview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + holder.bindView(dataRows.get(position)); + } + + @Override + public int getItemCount() { + return dataRows.size(); + } + + class ItemViewHolder extends RecyclerView.ViewHolder { + + private TextView bridgeNameView; + private ImageView descriptionImageView; + private TextView maintainContentView; + private TextView maintainTimeView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + bridgeNameView = itemView.findViewById(R.id.bridgeNameView); + descriptionImageView = itemView.findViewById(R.id.descriptionImageView); + maintainContentView = itemView.findViewById(R.id.maintainContentView); + maintainTimeView = itemView.findViewById(R.id.maintainTimeView); + } + + void bindView(MaintainRecordBean.DataBean.RowsBean rowsBean) { + bridgeNameView.setText(rowsBean.getBridgeName()); + String description = rowsBean.getDescription(); + if (TextUtils.isEmpty(description)) { + descriptionImageView.setVisibility(View.GONE); + } else { + descriptionImageView.setVisibility(View.VISIBLE); + descriptionImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + QMUITipDialog tipDialog = new QMUITipDialog.Builder(context) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_NOTHING) + .setTipWord(description) + .create(); + tipDialog.show(); + descriptionImageView.postDelayed(new Runnable() { + @Override + public void run() { + tipDialog.dismiss(); + } + }, 2000); + } + }); + } + maintainContentView.setText(rowsBean.getContent()); + maintainTimeView.setText(rowsBean.getMaintainTimeStr()); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java b/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java new file mode 100644 index 0000000..ded4fe1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java @@ -0,0 +1,41 @@ +package com.casic.dcms.bean; + +public class MaintainContentBean { + + private int code; + private String data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java b/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java new file mode 100644 index 0000000..2beea74 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java @@ -0,0 +1,301 @@ +package com.casic.dcms.bean; + +import java.util.List; + +public class MaintainRecordBean { + + private int code; + private DataBean data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + + private int total; + private List rows; + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public static class RowsBean { + /** + * bridgeId : 1 + * bridgeName : 永胜桥 + * category : 桥梁 + * code : 1624359572304 + * content : 日常养护,无异常 + * deptid : 1344110695992258561 + * description : + * id : 1407292162033041409 + * latitude : 39.914705918747295 + * longitude : 116.26295490330527 + * maintainTime : 2021-06-22 00:00:00 + * maintainTimeStr : 2021-06-22 + * name : + * personId : 1344179277212151809 + * personName : + * phone : + * status : + * statusName : + * tender : + * tenderCompany : + * ts : 2021-06-22 + * type : + * typeName : + */ + + private String bridgeId; + private String bridgeName; + private String category; + private String code; + private String content; + private String deptid; + private String description; + private String id; + private String latitude; + private String longitude; + private String maintainTime; + private String maintainTimeStr; + private String name; + private String personId; + private String personName; + private String phone; + private String status; + private String statusName; + private String tender; + private String tenderCompany; + private String ts; + private String type; + private String typeName; + + public String getBridgeId() { + return bridgeId; + } + + public void setBridgeId(String bridgeId) { + this.bridgeId = bridgeId; + } + + public String getBridgeName() { + return bridgeName; + } + + public void setBridgeName(String bridgeName) { + this.bridgeName = bridgeName; + } + + public String getCategory() { + return category; + } + + public void setCategory(String category) { + this.category = category; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLatitude() { + return latitude; + } + + public void setLatitude(String latitude) { + this.latitude = latitude; + } + + public String getLongitude() { + return longitude; + } + + public void setLongitude(String longitude) { + this.longitude = longitude; + } + + public String getMaintainTime() { + return maintainTime; + } + + public void setMaintainTime(String maintainTime) { + this.maintainTime = maintainTime; + } + + public String getMaintainTimeStr() { + return maintainTimeStr; + } + + public void setMaintainTimeStr(String maintainTimeStr) { + this.maintainTimeStr = maintainTimeStr; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPersonId() { + return personId; + } + + public void setPersonId(String personId) { + this.personId = personId; + } + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + 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 getTender() { + return tender; + } + + public void setTender(String tender) { + this.tender = tender; + } + + public String getTenderCompany() { + return tenderCompany; + } + + public void setTenderCompany(String tenderCompany) { + this.tenderCompany = tenderCompany; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getTypeName() { + return typeName; + } + + public void setTypeName(String typeName) { + this.typeName = typeName; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java new file mode 100644 index 0000000..4f7a588 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IMaintainRecordModel { + Subscription sendRetrofitRequest(String startDate, String endDate, int offset); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java new file mode 100644 index 0000000..dce3f91 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java @@ -0,0 +1,8 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ISubmitMaintainModel { + Subscription sendRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/MaintainRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/MaintainRecordModelImpl.java new file mode 100644 index 0000000..35fd486 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/MaintainRecordModelImpl.java @@ -0,0 +1,50 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.MaintainRecordBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class MaintainRecordModelImpl implements IMaintainRecordModel { + + private OnGetRecordListener listener; + + public MaintainRecordModelImpl(OnGetRecordListener recordListener) { + this.listener = recordListener; + } + + public interface OnGetRecordListener { + void onSuccess(MaintainRecordBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String startDate, String endDate, int offset) { + Observable observable = RetrofitServiceManager.getMaintainRecordResult(startDate, endDate, offset); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (e.getCause() != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(MaintainRecordBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java index 06f6fb4..9e2666d 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java @@ -29,7 +29,7 @@ @Override public Subscription sendRetrofitRequest() { - Observable observable = RetrofitServiceManager.getProcessPerson(); + Observable observable = RetrofitServiceManager.getProcessPersonResult(); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/SubmitMaintainModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/SubmitMaintainModelImpl.java new file mode 100644 index 0000000..2924fbe --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/SubmitMaintainModelImpl.java @@ -0,0 +1,52 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class SubmitMaintainModelImpl implements ISubmitMaintainModel { + + private OnSubmitListener listener; + + public SubmitMaintainModelImpl(OnSubmitListener submitListener) { + this.listener = submitListener; + } + + public interface OnSubmitListener { + void onSuccess(ActionResultBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description) { + Observable observable = RetrofitServiceManager.getAddMaintainRecordResult(bridgeId, + content, maintainTime, personId, longitude, latitude, description); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (e.getCause() != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(ActionResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IMaintainRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IMaintainRecordPresenter.java new file mode 100644 index 0000000..938a484 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IMaintainRecordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IMaintainRecordPresenter { + void onReadyRetrofitRequest(String startDate, String endDate, int offset); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ISubmitMaintainPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ISubmitMaintainPresenter.java new file mode 100644 index 0000000..511e717 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ISubmitMaintainPresenter.java @@ -0,0 +1,8 @@ +package com.casic.dcms.mvp.presenter; + +public interface ISubmitMaintainPresenter { + void onReadyRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/MaintainRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/MaintainRecordPresenterImpl.java new file mode 100644 index 0000000..fd99e30 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/MaintainRecordPresenterImpl.java @@ -0,0 +1,39 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.MaintainRecordBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.MaintainRecordModelImpl; +import com.casic.dcms.mvp.view.IMaintainRecordView; + +public class MaintainRecordPresenterImpl extends BasePresenter implements IMaintainRecordPresenter, MaintainRecordModelImpl.OnGetRecordListener { + + private IMaintainRecordView view; + private MaintainRecordModelImpl model; + + public MaintainRecordPresenterImpl(IMaintainRecordView cleanToiletRecordView) { + this.view = cleanToiletRecordView; + model = new MaintainRecordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String startDate, String endDate, int offset) { + view.showProgress(); + addSubscription(model.sendRetrofitRequest(startDate, endDate, offset)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(MaintainRecordBean result) { + view.hideProgress(); + view.obtainRecordResult(result); + } + + @Override + public void onFailure(Throwable throwable) { + view.hideProgress(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/SubmitMaintainPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/SubmitMaintainPresenterImpl.java new file mode 100644 index 0000000..7722427 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/SubmitMaintainPresenterImpl.java @@ -0,0 +1,42 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.SubmitMaintainModelImpl; +import com.casic.dcms.mvp.view.ISubmitMaintainView; + +public class SubmitMaintainPresenterImpl extends BasePresenter implements ISubmitMaintainPresenter, SubmitMaintainModelImpl.OnSubmitListener { + + private ISubmitMaintainView view; + private SubmitMaintainModelImpl actionModel; + + public SubmitMaintainPresenterImpl(ISubmitMaintainView submitCaseView) { + this.view = submitCaseView; + actionModel = new SubmitMaintainModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description) { + view.showProgress(); + addSubscription(actionModel.sendRetrofitRequest(bridgeId, content, maintainTime, personId, longitude, + latitude, description)); + } + + @Override + public void onSuccess(ActionResultBean resultBean) { + view.hideProgress(); + view.obtainSubmitResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + view.hideProgress(); + view.obtainDataFail(); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IMaintainRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/IMaintainRecordView.java new file mode 100644 index 0000000..8ff5189 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IMaintainRecordView.java @@ -0,0 +1,11 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.MaintainRecordBean; + +public interface IMaintainRecordView { + void obtainRecordResult(MaintainRecordBean resultBean); + + void showProgress(); + + void hideProgress(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ISubmitMaintainView.java b/app/src/main/java/com/casic/dcms/mvp/view/ISubmitMaintainView.java new file mode 100644 index 0000000..75a0629 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/ISubmitMaintainView.java @@ -0,0 +1,13 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.ActionResultBean; + +public interface ISubmitMaintainView { + void showProgress(); + + void hideProgress(); + + void obtainSubmitResult(ActionResultBean resultBean); + + void obtainDataFail(); +} diff --git a/app/src/main/java/com/casic/dcms/ui/BridgeMaintainActivity.java b/app/src/main/java/com/casic/dcms/ui/BridgeMaintainActivity.java new file mode 100644 index 0000000..84b0eef --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/BridgeMaintainActivity.java @@ -0,0 +1,239 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.content.Intent; +import android.location.Location; +import android.text.TextUtils; +import android.view.View; +import android.widget.EditText; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.amap.api.services.core.LatLonPoint; +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.mvp.presenter.SubmitMaintainPresenterImpl; +import com.casic.dcms.mvp.view.ISubmitMaintainView; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; +import com.casic.dcms.utils.SaveKeyValues; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.utils.callback.IAddressListener; +import com.casic.dcms.utils.callback.ILocationListener; +import com.casic.dcms.widgets.SignInDialog; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.util.Timer; +import java.util.TimerTask; + +import butterknife.BindView; +import butterknife.OnClick; + +public class BridgeMaintainActivity extends BaseActivity implements View.OnClickListener, ISubmitMaintainView { + + private static final String TAG = "BridgeMaintainActivity"; + private Context context = this; + @BindView(R.id.topLayout) + QMUITopBarLayout topLayout; + @BindView(R.id.bridgeNameView) + TextView bridgeNameView; + @BindView(R.id.maintainView) + TextView maintainView; + @BindView(R.id.maintainDateView) + TextView maintainDateView; + @BindView(R.id.liablePersonView) + TextView liablePersonView; + @BindView(R.id.submitButton) + QMUIRoundButton submitButton; + //以下非必填 + @BindView(R.id.remarksView) + EditText remarksView; + + private String bridgeId = ""; + private SubmitMaintainPresenterImpl submitMaintainPresenter; + + @Override + public int initLayoutView() { + return R.layout.activity_bridge; + } + + @Override + protected void setupTopBarLayout() { + topLayout.setTitle("路桥养护").setTextColor(ContextCompat.getColor(this, R.color.white)); + topLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + topLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + topLayout.addRightImageButton(R.drawable.ic_more, 2).setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + startActivity(new Intent(context, MaintainRecordActivity.class)); + } + }); + } + + @Override + public void initData() { + submitMaintainPresenter = new SubmitMaintainPresenterImpl(this); + } + + @Override + public void initEvent() { + submitButton.setChangeAlphaWhenPress(true); + liablePersonView.setText(StringHelper.getUserAccount()); + liablePersonView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); + + new Timer().schedule(new TimerTask() { + @Override + public void run() { + String systemDate = TimeOrDateUtil.timestampToDate(System.currentTimeMillis()); + maintainDateView.post(new Runnable() { + @Override + public void run() { + maintainDateView.setText(systemDate); + maintainDateView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); + } + }); + } + }, 0, 1000); + } + + @OnClick({R.id.bridgeLayout, R.id.maintainContentLayout, R.id.submitButton}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.bridgeLayout: + new QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("选择桥梁") + .addItem("永胜桥") + .addItem("黄洲桥") + .addItem("光明桥") + .setGravityCenter(true) + .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + + bridgeId = String.valueOf((1 + position)); + bridgeNameView.setText(tag); + bridgeNameView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); + } + }).build().show(); + break; + case R.id.maintainContentLayout: + new QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("养护内容") + .addItem("日常养护,无异常") + .addItem("清除表面污垢") + .addItem("修补混凝土空洞、破损、剥落和表面风化及裂缝") + .addItem("清除暴露钢筋的锈渍、恢复保护层") + .addItem("处理各种横、纵向构件的开裂、开焊和锈蚀") + .setGravityCenter(true) + .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + + maintainView.setText(tag); + maintainView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); + } + }).build().show(); + break; + case R.id.submitButton: + //获取定位信息 + LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + + } + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + if (aMapLocation != null) { + if (TextUtils.isEmpty(bridgeId)) { + ToastHelper.showToast("请先选择养护的桥梁", ToastHelper.WARING); + return; + } + String maintainContent = maintainView.getText().toString(); + if (TextUtils.isEmpty(maintainContent)) { + ToastHelper.showToast("请选择养护的内容", ToastHelper.WARING); + return; + } + + double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + LatLonPoint latLonPoint = new LatLonPoint(gcjToWgs[1], gcjToWgs[0]); + LocationHelper.antiCodingLocation(context, latLonPoint, new IAddressListener() { + @Override + public void onGetAddress(String address) { + SaveKeyValues.putValue("maintainAddress", address); + } + }); + //提交养护记录 + submitMaintainPresenter.onReadyRetrofitRequest(bridgeId, maintainContent, + maintainDateView.getText().toString(), + StringHelper.getUserId(), String.valueOf(gcjToWgs[0]), + String.valueOf(gcjToWgs[1]), + StringHelper.filterString(remarksView.getText().toString())); + } else { + ToastHelper.showToast("当前信号较弱,无法提交养护记录", ToastHelper.WARING); + } + } + }, true); + break; + default: + throw new IllegalStateException("Unexpected value: " + v.getId()); + } + } + + @Override + public void showProgress() { + OtherUtils.showLoadingDialog(this, "养护记录签到中,请稍后"); + } + + @Override + public void hideProgress() { + OtherUtils.dismissLoadingDialog(); + } + + @Override + public void obtainSubmitResult(ActionResultBean resultBean) { + String maintainAddress = (String) SaveKeyValues.getValue("maintainAddress", ""); + if (resultBean.isSuccess()) { + new SignInDialog.Builder() + .setContext(this) + .setTitle("桥梁养护记录提交成功") + .setAddress(maintainAddress.equals("") ? "详细位置解析失败" : maintainAddress) + .setOnDialogClickListener(new SignInDialog.OnDialogClickListener() { + @Override + public void onViewClick() { + startActivity(new Intent(context, MaintainRecordActivity.class)); + finish(); + } + }).build().show(); + } + } + + @Override + public void obtainDataFail() { + ToastHelper.showToast("操作失败", ToastHelper.ERROR); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (submitMaintainPresenter != null) { + submitMaintainPresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java index 7221e95..381b704 100644 --- a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java @@ -25,6 +25,7 @@ import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.datepicker.DatePopupWindow; +import com.qmuiteam.qmui.widget.QMUIEmptyView; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; @@ -38,8 +39,8 @@ public class CleanResultListActivity extends BaseCaseActivity implements ICleanToiletRecordView { - // @BindView(R.id.emptyView) -// QMUIEmptyView emptyView; + @BindView(R.id.emptyView) + QMUIEmptyView emptyView; @BindView(R.id.dateView) TextView dateView; @BindView(R.id.calendarView) @@ -126,7 +127,6 @@ @Override public void obtainCleanRecordResult(CleanRecordBean resultBean) { -// Log.d("TAG", "obtainCleanRecordResult: " + new Gson().toJson(resultBean)); if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); if (isRefresh) { @@ -175,9 +175,9 @@ } else { //首次加载数据 if (resultActivity.dataBeans.size() == 0) { -// resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); + resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); } else { -// resultActivity.emptyView.hide(); + resultActivity.emptyView.hide(); resultActivity.adapter = new RecordListAdapter(resultActivity, resultActivity.dataBeans); resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); diff --git a/app/build.gradle b/app/build.gradle index 6f0b518..bcfdc0d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ applicationId "com.casic.dcms" minSdkVersion 21 targetSdkVersion 30 - versionCode 19 - versionName "v1.0.0.11" + versionCode 20 + versionName "v1.0.0.12" ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 68f46c9..3090a91 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -89,7 +89,10 @@ - + + + + { + + private Context context; + private List dataRows; + private LayoutInflater layoutInflater; + private QMUITipDialog.Builder dialogBuilder; + + public MaintainRecordAdapter(Context context, List dataRows) { + this.context = context; + this.dataRows = dataRows; + layoutInflater = LayoutInflater.from(context); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = layoutInflater.inflate(R.layout.item_maintain_recycleview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + holder.bindView(dataRows.get(position)); + } + + @Override + public int getItemCount() { + return dataRows.size(); + } + + class ItemViewHolder extends RecyclerView.ViewHolder { + + private TextView bridgeNameView; + private ImageView descriptionImageView; + private TextView maintainContentView; + private TextView maintainTimeView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + bridgeNameView = itemView.findViewById(R.id.bridgeNameView); + descriptionImageView = itemView.findViewById(R.id.descriptionImageView); + maintainContentView = itemView.findViewById(R.id.maintainContentView); + maintainTimeView = itemView.findViewById(R.id.maintainTimeView); + } + + void bindView(MaintainRecordBean.DataBean.RowsBean rowsBean) { + bridgeNameView.setText(rowsBean.getBridgeName()); + String description = rowsBean.getDescription(); + if (TextUtils.isEmpty(description)) { + descriptionImageView.setVisibility(View.GONE); + } else { + descriptionImageView.setVisibility(View.VISIBLE); + descriptionImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + QMUITipDialog tipDialog = new QMUITipDialog.Builder(context) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_NOTHING) + .setTipWord(description) + .create(); + tipDialog.show(); + descriptionImageView.postDelayed(new Runnable() { + @Override + public void run() { + tipDialog.dismiss(); + } + }, 2000); + } + }); + } + maintainContentView.setText(rowsBean.getContent()); + maintainTimeView.setText(rowsBean.getMaintainTimeStr()); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java b/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java new file mode 100644 index 0000000..ded4fe1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java @@ -0,0 +1,41 @@ +package com.casic.dcms.bean; + +public class MaintainContentBean { + + private int code; + private String data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java b/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java new file mode 100644 index 0000000..2beea74 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java @@ -0,0 +1,301 @@ +package com.casic.dcms.bean; + +import java.util.List; + +public class MaintainRecordBean { + + private int code; + private DataBean data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + + private int total; + private List rows; + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public static class RowsBean { + /** + * bridgeId : 1 + * bridgeName : 永胜桥 + * category : 桥梁 + * code : 1624359572304 + * content : 日常养护,无异常 + * deptid : 1344110695992258561 + * description : + * id : 1407292162033041409 + * latitude : 39.914705918747295 + * longitude : 116.26295490330527 + * maintainTime : 2021-06-22 00:00:00 + * maintainTimeStr : 2021-06-22 + * name : + * personId : 1344179277212151809 + * personName : + * phone : + * status : + * statusName : + * tender : + * tenderCompany : + * ts : 2021-06-22 + * type : + * typeName : + */ + + private String bridgeId; + private String bridgeName; + private String category; + private String code; + private String content; + private String deptid; + private String description; + private String id; + private String latitude; + private String longitude; + private String maintainTime; + private String maintainTimeStr; + private String name; + private String personId; + private String personName; + private String phone; + private String status; + private String statusName; + private String tender; + private String tenderCompany; + private String ts; + private String type; + private String typeName; + + public String getBridgeId() { + return bridgeId; + } + + public void setBridgeId(String bridgeId) { + this.bridgeId = bridgeId; + } + + public String getBridgeName() { + return bridgeName; + } + + public void setBridgeName(String bridgeName) { + this.bridgeName = bridgeName; + } + + public String getCategory() { + return category; + } + + public void setCategory(String category) { + this.category = category; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLatitude() { + return latitude; + } + + public void setLatitude(String latitude) { + this.latitude = latitude; + } + + public String getLongitude() { + return longitude; + } + + public void setLongitude(String longitude) { + this.longitude = longitude; + } + + public String getMaintainTime() { + return maintainTime; + } + + public void setMaintainTime(String maintainTime) { + this.maintainTime = maintainTime; + } + + public String getMaintainTimeStr() { + return maintainTimeStr; + } + + public void setMaintainTimeStr(String maintainTimeStr) { + this.maintainTimeStr = maintainTimeStr; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPersonId() { + return personId; + } + + public void setPersonId(String personId) { + this.personId = personId; + } + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + 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 getTender() { + return tender; + } + + public void setTender(String tender) { + this.tender = tender; + } + + public String getTenderCompany() { + return tenderCompany; + } + + public void setTenderCompany(String tenderCompany) { + this.tenderCompany = tenderCompany; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getTypeName() { + return typeName; + } + + public void setTypeName(String typeName) { + this.typeName = typeName; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java new file mode 100644 index 0000000..4f7a588 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IMaintainRecordModel { + Subscription sendRetrofitRequest(String startDate, String endDate, int offset); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java new file mode 100644 index 0000000..dce3f91 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java @@ -0,0 +1,8 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ISubmitMaintainModel { + Subscription sendRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/MaintainRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/MaintainRecordModelImpl.java new file mode 100644 index 0000000..35fd486 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/MaintainRecordModelImpl.java @@ -0,0 +1,50 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.MaintainRecordBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class MaintainRecordModelImpl implements IMaintainRecordModel { + + private OnGetRecordListener listener; + + public MaintainRecordModelImpl(OnGetRecordListener recordListener) { + this.listener = recordListener; + } + + public interface OnGetRecordListener { + void onSuccess(MaintainRecordBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String startDate, String endDate, int offset) { + Observable observable = RetrofitServiceManager.getMaintainRecordResult(startDate, endDate, offset); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (e.getCause() != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(MaintainRecordBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java index 06f6fb4..9e2666d 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java @@ -29,7 +29,7 @@ @Override public Subscription sendRetrofitRequest() { - Observable observable = RetrofitServiceManager.getProcessPerson(); + Observable observable = RetrofitServiceManager.getProcessPersonResult(); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/SubmitMaintainModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/SubmitMaintainModelImpl.java new file mode 100644 index 0000000..2924fbe --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/SubmitMaintainModelImpl.java @@ -0,0 +1,52 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class SubmitMaintainModelImpl implements ISubmitMaintainModel { + + private OnSubmitListener listener; + + public SubmitMaintainModelImpl(OnSubmitListener submitListener) { + this.listener = submitListener; + } + + public interface OnSubmitListener { + void onSuccess(ActionResultBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description) { + Observable observable = RetrofitServiceManager.getAddMaintainRecordResult(bridgeId, + content, maintainTime, personId, longitude, latitude, description); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (e.getCause() != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(ActionResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IMaintainRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IMaintainRecordPresenter.java new file mode 100644 index 0000000..938a484 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IMaintainRecordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IMaintainRecordPresenter { + void onReadyRetrofitRequest(String startDate, String endDate, int offset); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ISubmitMaintainPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ISubmitMaintainPresenter.java new file mode 100644 index 0000000..511e717 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ISubmitMaintainPresenter.java @@ -0,0 +1,8 @@ +package com.casic.dcms.mvp.presenter; + +public interface ISubmitMaintainPresenter { + void onReadyRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/MaintainRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/MaintainRecordPresenterImpl.java new file mode 100644 index 0000000..fd99e30 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/MaintainRecordPresenterImpl.java @@ -0,0 +1,39 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.MaintainRecordBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.MaintainRecordModelImpl; +import com.casic.dcms.mvp.view.IMaintainRecordView; + +public class MaintainRecordPresenterImpl extends BasePresenter implements IMaintainRecordPresenter, MaintainRecordModelImpl.OnGetRecordListener { + + private IMaintainRecordView view; + private MaintainRecordModelImpl model; + + public MaintainRecordPresenterImpl(IMaintainRecordView cleanToiletRecordView) { + this.view = cleanToiletRecordView; + model = new MaintainRecordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String startDate, String endDate, int offset) { + view.showProgress(); + addSubscription(model.sendRetrofitRequest(startDate, endDate, offset)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(MaintainRecordBean result) { + view.hideProgress(); + view.obtainRecordResult(result); + } + + @Override + public void onFailure(Throwable throwable) { + view.hideProgress(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/SubmitMaintainPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/SubmitMaintainPresenterImpl.java new file mode 100644 index 0000000..7722427 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/SubmitMaintainPresenterImpl.java @@ -0,0 +1,42 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.SubmitMaintainModelImpl; +import com.casic.dcms.mvp.view.ISubmitMaintainView; + +public class SubmitMaintainPresenterImpl extends BasePresenter implements ISubmitMaintainPresenter, SubmitMaintainModelImpl.OnSubmitListener { + + private ISubmitMaintainView view; + private SubmitMaintainModelImpl actionModel; + + public SubmitMaintainPresenterImpl(ISubmitMaintainView submitCaseView) { + this.view = submitCaseView; + actionModel = new SubmitMaintainModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description) { + view.showProgress(); + addSubscription(actionModel.sendRetrofitRequest(bridgeId, content, maintainTime, personId, longitude, + latitude, description)); + } + + @Override + public void onSuccess(ActionResultBean resultBean) { + view.hideProgress(); + view.obtainSubmitResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + view.hideProgress(); + view.obtainDataFail(); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IMaintainRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/IMaintainRecordView.java new file mode 100644 index 0000000..8ff5189 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IMaintainRecordView.java @@ -0,0 +1,11 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.MaintainRecordBean; + +public interface IMaintainRecordView { + void obtainRecordResult(MaintainRecordBean resultBean); + + void showProgress(); + + void hideProgress(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ISubmitMaintainView.java b/app/src/main/java/com/casic/dcms/mvp/view/ISubmitMaintainView.java new file mode 100644 index 0000000..75a0629 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/ISubmitMaintainView.java @@ -0,0 +1,13 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.ActionResultBean; + +public interface ISubmitMaintainView { + void showProgress(); + + void hideProgress(); + + void obtainSubmitResult(ActionResultBean resultBean); + + void obtainDataFail(); +} diff --git a/app/src/main/java/com/casic/dcms/ui/BridgeMaintainActivity.java b/app/src/main/java/com/casic/dcms/ui/BridgeMaintainActivity.java new file mode 100644 index 0000000..84b0eef --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/BridgeMaintainActivity.java @@ -0,0 +1,239 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.content.Intent; +import android.location.Location; +import android.text.TextUtils; +import android.view.View; +import android.widget.EditText; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.amap.api.services.core.LatLonPoint; +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.mvp.presenter.SubmitMaintainPresenterImpl; +import com.casic.dcms.mvp.view.ISubmitMaintainView; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; +import com.casic.dcms.utils.SaveKeyValues; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.utils.callback.IAddressListener; +import com.casic.dcms.utils.callback.ILocationListener; +import com.casic.dcms.widgets.SignInDialog; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.util.Timer; +import java.util.TimerTask; + +import butterknife.BindView; +import butterknife.OnClick; + +public class BridgeMaintainActivity extends BaseActivity implements View.OnClickListener, ISubmitMaintainView { + + private static final String TAG = "BridgeMaintainActivity"; + private Context context = this; + @BindView(R.id.topLayout) + QMUITopBarLayout topLayout; + @BindView(R.id.bridgeNameView) + TextView bridgeNameView; + @BindView(R.id.maintainView) + TextView maintainView; + @BindView(R.id.maintainDateView) + TextView maintainDateView; + @BindView(R.id.liablePersonView) + TextView liablePersonView; + @BindView(R.id.submitButton) + QMUIRoundButton submitButton; + //以下非必填 + @BindView(R.id.remarksView) + EditText remarksView; + + private String bridgeId = ""; + private SubmitMaintainPresenterImpl submitMaintainPresenter; + + @Override + public int initLayoutView() { + return R.layout.activity_bridge; + } + + @Override + protected void setupTopBarLayout() { + topLayout.setTitle("路桥养护").setTextColor(ContextCompat.getColor(this, R.color.white)); + topLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + topLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + topLayout.addRightImageButton(R.drawable.ic_more, 2).setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + startActivity(new Intent(context, MaintainRecordActivity.class)); + } + }); + } + + @Override + public void initData() { + submitMaintainPresenter = new SubmitMaintainPresenterImpl(this); + } + + @Override + public void initEvent() { + submitButton.setChangeAlphaWhenPress(true); + liablePersonView.setText(StringHelper.getUserAccount()); + liablePersonView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); + + new Timer().schedule(new TimerTask() { + @Override + public void run() { + String systemDate = TimeOrDateUtil.timestampToDate(System.currentTimeMillis()); + maintainDateView.post(new Runnable() { + @Override + public void run() { + maintainDateView.setText(systemDate); + maintainDateView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); + } + }); + } + }, 0, 1000); + } + + @OnClick({R.id.bridgeLayout, R.id.maintainContentLayout, R.id.submitButton}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.bridgeLayout: + new QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("选择桥梁") + .addItem("永胜桥") + .addItem("黄洲桥") + .addItem("光明桥") + .setGravityCenter(true) + .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + + bridgeId = String.valueOf((1 + position)); + bridgeNameView.setText(tag); + bridgeNameView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); + } + }).build().show(); + break; + case R.id.maintainContentLayout: + new QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("养护内容") + .addItem("日常养护,无异常") + .addItem("清除表面污垢") + .addItem("修补混凝土空洞、破损、剥落和表面风化及裂缝") + .addItem("清除暴露钢筋的锈渍、恢复保护层") + .addItem("处理各种横、纵向构件的开裂、开焊和锈蚀") + .setGravityCenter(true) + .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + + maintainView.setText(tag); + maintainView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); + } + }).build().show(); + break; + case R.id.submitButton: + //获取定位信息 + LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + + } + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + if (aMapLocation != null) { + if (TextUtils.isEmpty(bridgeId)) { + ToastHelper.showToast("请先选择养护的桥梁", ToastHelper.WARING); + return; + } + String maintainContent = maintainView.getText().toString(); + if (TextUtils.isEmpty(maintainContent)) { + ToastHelper.showToast("请选择养护的内容", ToastHelper.WARING); + return; + } + + double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + LatLonPoint latLonPoint = new LatLonPoint(gcjToWgs[1], gcjToWgs[0]); + LocationHelper.antiCodingLocation(context, latLonPoint, new IAddressListener() { + @Override + public void onGetAddress(String address) { + SaveKeyValues.putValue("maintainAddress", address); + } + }); + //提交养护记录 + submitMaintainPresenter.onReadyRetrofitRequest(bridgeId, maintainContent, + maintainDateView.getText().toString(), + StringHelper.getUserId(), String.valueOf(gcjToWgs[0]), + String.valueOf(gcjToWgs[1]), + StringHelper.filterString(remarksView.getText().toString())); + } else { + ToastHelper.showToast("当前信号较弱,无法提交养护记录", ToastHelper.WARING); + } + } + }, true); + break; + default: + throw new IllegalStateException("Unexpected value: " + v.getId()); + } + } + + @Override + public void showProgress() { + OtherUtils.showLoadingDialog(this, "养护记录签到中,请稍后"); + } + + @Override + public void hideProgress() { + OtherUtils.dismissLoadingDialog(); + } + + @Override + public void obtainSubmitResult(ActionResultBean resultBean) { + String maintainAddress = (String) SaveKeyValues.getValue("maintainAddress", ""); + if (resultBean.isSuccess()) { + new SignInDialog.Builder() + .setContext(this) + .setTitle("桥梁养护记录提交成功") + .setAddress(maintainAddress.equals("") ? "详细位置解析失败" : maintainAddress) + .setOnDialogClickListener(new SignInDialog.OnDialogClickListener() { + @Override + public void onViewClick() { + startActivity(new Intent(context, MaintainRecordActivity.class)); + finish(); + } + }).build().show(); + } + } + + @Override + public void obtainDataFail() { + ToastHelper.showToast("操作失败", ToastHelper.ERROR); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (submitMaintainPresenter != null) { + submitMaintainPresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java index 7221e95..381b704 100644 --- a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java @@ -25,6 +25,7 @@ import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.datepicker.DatePopupWindow; +import com.qmuiteam.qmui.widget.QMUIEmptyView; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; @@ -38,8 +39,8 @@ public class CleanResultListActivity extends BaseCaseActivity implements ICleanToiletRecordView { - // @BindView(R.id.emptyView) -// QMUIEmptyView emptyView; + @BindView(R.id.emptyView) + QMUIEmptyView emptyView; @BindView(R.id.dateView) TextView dateView; @BindView(R.id.calendarView) @@ -126,7 +127,6 @@ @Override public void obtainCleanRecordResult(CleanRecordBean resultBean) { -// Log.d("TAG", "obtainCleanRecordResult: " + new Gson().toJson(resultBean)); if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); if (isRefresh) { @@ -175,9 +175,9 @@ } else { //首次加载数据 if (resultActivity.dataBeans.size() == 0) { -// resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); + resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); } else { -// resultActivity.emptyView.hide(); + resultActivity.emptyView.hide(); resultActivity.adapter = new RecordListAdapter(resultActivity, resultActivity.dataBeans); resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); diff --git a/app/src/main/java/com/casic/dcms/ui/MaintainRecordActivity.java b/app/src/main/java/com/casic/dcms/ui/MaintainRecordActivity.java new file mode 100644 index 0000000..05c41c9 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/MaintainRecordActivity.java @@ -0,0 +1,194 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.content.Intent; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.MaintainRecordAdapter; +import com.casic.dcms.base.BaseCaseActivity; +import com.casic.dcms.bean.MaintainRecordBean; +import com.casic.dcms.mvp.presenter.MaintainRecordPresenterImpl; +import com.casic.dcms.mvp.view.IMaintainRecordView; +import com.casic.dcms.utils.CalendarUtil; +import com.casic.dcms.utils.OtherUtils; +import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.datepicker.DatePopupWindow; +import com.qmuiteam.qmui.widget.QMUIEmptyView; +import com.scwang.smartrefresh.layout.SmartRefreshLayout; +import com.scwang.smartrefresh.layout.api.RefreshLayout; +import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; +import com.scwang.smartrefresh.layout.listener.OnRefreshListener; + +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class MaintainRecordActivity extends BaseCaseActivity implements IMaintainRecordView { + + @BindView(R.id.emptyView) + QMUIEmptyView emptyView; + @BindView(R.id.dateView) + TextView dateView; + @BindView(R.id.calendarView) + ImageView calendarView; + @BindView(R.id.refreshLayout) + SmartRefreshLayout refreshLayout; + @BindView(R.id.recordRecyclerView) + RecyclerView recordRecyclerView; + + private Context context = this; + private int pageIndex = 1; + private boolean isRefresh, isLoadMore = false; + private WeakReferenceHandler weakReferenceHandler; + private List dataBeans = new ArrayList<>(); + private MaintainRecordPresenterImpl recordPresenter; + private MaintainRecordAdapter adapter; + private int startGroup = -1; + private int endGroup = -1; + private int startChild = -1; + private int endChild = -1; + + @Override + protected String setTitleName() { + return "桥梁养护记录"; + } + + @Override + public int initLayoutView() { + return R.layout.activity_maintain_record; + } + + @Override + public void initData() { + weakReferenceHandler = new WeakReferenceHandler(this); + recordPresenter = new MaintainRecordPresenterImpl(this); + recordPresenter.onReadyRetrofitRequest("", "", pageIndex); + } + + @Override + public void initEvent() { + calendarView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + new DatePopupWindow + .Builder(MaintainRecordActivity.this, CalendarUtil.obtainLastTwoMonth(), v)//初始化 + .setInitSelect(startGroup, startChild, endGroup, endChild)//设置上一次选中的区间状态 + .setInitDay(true)//默认为true,UI内容为共几天、开始、结束;当为false时,UI内容为共几晚、入住、离开 + .setDateOnClickListener(new DatePopupWindow.DateOnClickListener() {//设置监听 + //点击完成按钮后回调返回方法 + @Override + public void getDate(String startDate, String endDate, int startGroupPosition, int + startChildPosition, int endGroupPosition, int endChildPosition) { + startGroup = startGroupPosition;//开始月份位置 + startChild = startChildPosition;//开始对应月份中日的位置 + endGroup = endGroupPosition;//结束月份位置 + endChild = endChildPosition;//结束对应月份中日的位置 + dateView.setText(startDate + "~" + endDate); + recordPresenter.onReadyRetrofitRequest(startDate, endDate, pageIndex); + } + }).builder(); + } + }); + refreshLayout.setOnRefreshListener(new OnRefreshListener() { + @Override + public void onRefresh(@NonNull final RefreshLayout refreshLayout) { + isRefresh = true; + //刷新之后页码重置 + pageIndex = 1; + recordPresenter.onReadyRetrofitRequest("", "", pageIndex); + } + }); + refreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() { + @Override + public void onLoadMore(@NonNull final RefreshLayout refreshLayout) { + isLoadMore = true; + pageIndex++; + recordPresenter.onReadyRetrofitRequest("", "", pageIndex); + } + }); + } + + @Override + public void obtainRecordResult(MaintainRecordBean resultBean) { + if (resultBean.isSuccess()) { + List dataRows = resultBean.getData().getRows(); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + ToastHelper.showToast("到底了,别拉了", ToastHelper.INFO); + } + dataBeans.addAll(dataRows); + refreshLayout.finishLoadMore(); + isLoadMore = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(20210622); + } + } + + @Override + public void showProgress() { + OtherUtils.showLoadingDialog(this, "查询记录中,请稍后"); + } + + @Override + public void hideProgress() { + OtherUtils.dismissLoadingDialog(); + } + + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(MaintainRecordActivity activity) { + reference = new WeakReference<>(activity); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + MaintainRecordActivity resultActivity = reference.get(); + if (msg.what == 20210622) { + if (resultActivity.isRefresh || resultActivity.isLoadMore) { + resultActivity.adapter.notifyDataSetChanged(); + } else { + //首次加载数据 + if (resultActivity.dataBeans.size() == 0) { + resultActivity.emptyView.show("抱歉,没有查到相关养护记录", null); + } else { + resultActivity.emptyView.hide(); + resultActivity.adapter = new MaintainRecordAdapter(resultActivity, resultActivity.dataBeans); + resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); + resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); + resultActivity.recordRecyclerView.setAdapter(resultActivity.adapter); + } + } + } + } + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (recordPresenter != null) { + recordPresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/build.gradle b/app/build.gradle index 6f0b518..bcfdc0d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ applicationId "com.casic.dcms" minSdkVersion 21 targetSdkVersion 30 - versionCode 19 - versionName "v1.0.0.11" + versionCode 20 + versionName "v1.0.0.12" ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 68f46c9..3090a91 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -89,7 +89,10 @@ - + + + + { + + private Context context; + private List dataRows; + private LayoutInflater layoutInflater; + private QMUITipDialog.Builder dialogBuilder; + + public MaintainRecordAdapter(Context context, List dataRows) { + this.context = context; + this.dataRows = dataRows; + layoutInflater = LayoutInflater.from(context); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = layoutInflater.inflate(R.layout.item_maintain_recycleview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + holder.bindView(dataRows.get(position)); + } + + @Override + public int getItemCount() { + return dataRows.size(); + } + + class ItemViewHolder extends RecyclerView.ViewHolder { + + private TextView bridgeNameView; + private ImageView descriptionImageView; + private TextView maintainContentView; + private TextView maintainTimeView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + bridgeNameView = itemView.findViewById(R.id.bridgeNameView); + descriptionImageView = itemView.findViewById(R.id.descriptionImageView); + maintainContentView = itemView.findViewById(R.id.maintainContentView); + maintainTimeView = itemView.findViewById(R.id.maintainTimeView); + } + + void bindView(MaintainRecordBean.DataBean.RowsBean rowsBean) { + bridgeNameView.setText(rowsBean.getBridgeName()); + String description = rowsBean.getDescription(); + if (TextUtils.isEmpty(description)) { + descriptionImageView.setVisibility(View.GONE); + } else { + descriptionImageView.setVisibility(View.VISIBLE); + descriptionImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + QMUITipDialog tipDialog = new QMUITipDialog.Builder(context) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_NOTHING) + .setTipWord(description) + .create(); + tipDialog.show(); + descriptionImageView.postDelayed(new Runnable() { + @Override + public void run() { + tipDialog.dismiss(); + } + }, 2000); + } + }); + } + maintainContentView.setText(rowsBean.getContent()); + maintainTimeView.setText(rowsBean.getMaintainTimeStr()); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java b/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java new file mode 100644 index 0000000..ded4fe1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java @@ -0,0 +1,41 @@ +package com.casic.dcms.bean; + +public class MaintainContentBean { + + private int code; + private String data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java b/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java new file mode 100644 index 0000000..2beea74 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java @@ -0,0 +1,301 @@ +package com.casic.dcms.bean; + +import java.util.List; + +public class MaintainRecordBean { + + private int code; + private DataBean data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + + private int total; + private List rows; + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public static class RowsBean { + /** + * bridgeId : 1 + * bridgeName : 永胜桥 + * category : 桥梁 + * code : 1624359572304 + * content : 日常养护,无异常 + * deptid : 1344110695992258561 + * description : + * id : 1407292162033041409 + * latitude : 39.914705918747295 + * longitude : 116.26295490330527 + * maintainTime : 2021-06-22 00:00:00 + * maintainTimeStr : 2021-06-22 + * name : + * personId : 1344179277212151809 + * personName : + * phone : + * status : + * statusName : + * tender : + * tenderCompany : + * ts : 2021-06-22 + * type : + * typeName : + */ + + private String bridgeId; + private String bridgeName; + private String category; + private String code; + private String content; + private String deptid; + private String description; + private String id; + private String latitude; + private String longitude; + private String maintainTime; + private String maintainTimeStr; + private String name; + private String personId; + private String personName; + private String phone; + private String status; + private String statusName; + private String tender; + private String tenderCompany; + private String ts; + private String type; + private String typeName; + + public String getBridgeId() { + return bridgeId; + } + + public void setBridgeId(String bridgeId) { + this.bridgeId = bridgeId; + } + + public String getBridgeName() { + return bridgeName; + } + + public void setBridgeName(String bridgeName) { + this.bridgeName = bridgeName; + } + + public String getCategory() { + return category; + } + + public void setCategory(String category) { + this.category = category; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLatitude() { + return latitude; + } + + public void setLatitude(String latitude) { + this.latitude = latitude; + } + + public String getLongitude() { + return longitude; + } + + public void setLongitude(String longitude) { + this.longitude = longitude; + } + + public String getMaintainTime() { + return maintainTime; + } + + public void setMaintainTime(String maintainTime) { + this.maintainTime = maintainTime; + } + + public String getMaintainTimeStr() { + return maintainTimeStr; + } + + public void setMaintainTimeStr(String maintainTimeStr) { + this.maintainTimeStr = maintainTimeStr; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPersonId() { + return personId; + } + + public void setPersonId(String personId) { + this.personId = personId; + } + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + 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 getTender() { + return tender; + } + + public void setTender(String tender) { + this.tender = tender; + } + + public String getTenderCompany() { + return tenderCompany; + } + + public void setTenderCompany(String tenderCompany) { + this.tenderCompany = tenderCompany; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getTypeName() { + return typeName; + } + + public void setTypeName(String typeName) { + this.typeName = typeName; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java new file mode 100644 index 0000000..4f7a588 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IMaintainRecordModel { + Subscription sendRetrofitRequest(String startDate, String endDate, int offset); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java new file mode 100644 index 0000000..dce3f91 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java @@ -0,0 +1,8 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ISubmitMaintainModel { + Subscription sendRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/MaintainRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/MaintainRecordModelImpl.java new file mode 100644 index 0000000..35fd486 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/MaintainRecordModelImpl.java @@ -0,0 +1,50 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.MaintainRecordBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class MaintainRecordModelImpl implements IMaintainRecordModel { + + private OnGetRecordListener listener; + + public MaintainRecordModelImpl(OnGetRecordListener recordListener) { + this.listener = recordListener; + } + + public interface OnGetRecordListener { + void onSuccess(MaintainRecordBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String startDate, String endDate, int offset) { + Observable observable = RetrofitServiceManager.getMaintainRecordResult(startDate, endDate, offset); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (e.getCause() != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(MaintainRecordBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java index 06f6fb4..9e2666d 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java @@ -29,7 +29,7 @@ @Override public Subscription sendRetrofitRequest() { - Observable observable = RetrofitServiceManager.getProcessPerson(); + Observable observable = RetrofitServiceManager.getProcessPersonResult(); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/SubmitMaintainModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/SubmitMaintainModelImpl.java new file mode 100644 index 0000000..2924fbe --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/SubmitMaintainModelImpl.java @@ -0,0 +1,52 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class SubmitMaintainModelImpl implements ISubmitMaintainModel { + + private OnSubmitListener listener; + + public SubmitMaintainModelImpl(OnSubmitListener submitListener) { + this.listener = submitListener; + } + + public interface OnSubmitListener { + void onSuccess(ActionResultBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description) { + Observable observable = RetrofitServiceManager.getAddMaintainRecordResult(bridgeId, + content, maintainTime, personId, longitude, latitude, description); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (e.getCause() != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(ActionResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IMaintainRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IMaintainRecordPresenter.java new file mode 100644 index 0000000..938a484 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IMaintainRecordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IMaintainRecordPresenter { + void onReadyRetrofitRequest(String startDate, String endDate, int offset); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ISubmitMaintainPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ISubmitMaintainPresenter.java new file mode 100644 index 0000000..511e717 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ISubmitMaintainPresenter.java @@ -0,0 +1,8 @@ +package com.casic.dcms.mvp.presenter; + +public interface ISubmitMaintainPresenter { + void onReadyRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/MaintainRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/MaintainRecordPresenterImpl.java new file mode 100644 index 0000000..fd99e30 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/MaintainRecordPresenterImpl.java @@ -0,0 +1,39 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.MaintainRecordBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.MaintainRecordModelImpl; +import com.casic.dcms.mvp.view.IMaintainRecordView; + +public class MaintainRecordPresenterImpl extends BasePresenter implements IMaintainRecordPresenter, MaintainRecordModelImpl.OnGetRecordListener { + + private IMaintainRecordView view; + private MaintainRecordModelImpl model; + + public MaintainRecordPresenterImpl(IMaintainRecordView cleanToiletRecordView) { + this.view = cleanToiletRecordView; + model = new MaintainRecordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String startDate, String endDate, int offset) { + view.showProgress(); + addSubscription(model.sendRetrofitRequest(startDate, endDate, offset)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(MaintainRecordBean result) { + view.hideProgress(); + view.obtainRecordResult(result); + } + + @Override + public void onFailure(Throwable throwable) { + view.hideProgress(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/SubmitMaintainPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/SubmitMaintainPresenterImpl.java new file mode 100644 index 0000000..7722427 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/SubmitMaintainPresenterImpl.java @@ -0,0 +1,42 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.SubmitMaintainModelImpl; +import com.casic.dcms.mvp.view.ISubmitMaintainView; + +public class SubmitMaintainPresenterImpl extends BasePresenter implements ISubmitMaintainPresenter, SubmitMaintainModelImpl.OnSubmitListener { + + private ISubmitMaintainView view; + private SubmitMaintainModelImpl actionModel; + + public SubmitMaintainPresenterImpl(ISubmitMaintainView submitCaseView) { + this.view = submitCaseView; + actionModel = new SubmitMaintainModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description) { + view.showProgress(); + addSubscription(actionModel.sendRetrofitRequest(bridgeId, content, maintainTime, personId, longitude, + latitude, description)); + } + + @Override + public void onSuccess(ActionResultBean resultBean) { + view.hideProgress(); + view.obtainSubmitResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + view.hideProgress(); + view.obtainDataFail(); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IMaintainRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/IMaintainRecordView.java new file mode 100644 index 0000000..8ff5189 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IMaintainRecordView.java @@ -0,0 +1,11 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.MaintainRecordBean; + +public interface IMaintainRecordView { + void obtainRecordResult(MaintainRecordBean resultBean); + + void showProgress(); + + void hideProgress(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ISubmitMaintainView.java b/app/src/main/java/com/casic/dcms/mvp/view/ISubmitMaintainView.java new file mode 100644 index 0000000..75a0629 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/ISubmitMaintainView.java @@ -0,0 +1,13 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.ActionResultBean; + +public interface ISubmitMaintainView { + void showProgress(); + + void hideProgress(); + + void obtainSubmitResult(ActionResultBean resultBean); + + void obtainDataFail(); +} diff --git a/app/src/main/java/com/casic/dcms/ui/BridgeMaintainActivity.java b/app/src/main/java/com/casic/dcms/ui/BridgeMaintainActivity.java new file mode 100644 index 0000000..84b0eef --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/BridgeMaintainActivity.java @@ -0,0 +1,239 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.content.Intent; +import android.location.Location; +import android.text.TextUtils; +import android.view.View; +import android.widget.EditText; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.amap.api.services.core.LatLonPoint; +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.mvp.presenter.SubmitMaintainPresenterImpl; +import com.casic.dcms.mvp.view.ISubmitMaintainView; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; +import com.casic.dcms.utils.SaveKeyValues; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.utils.callback.IAddressListener; +import com.casic.dcms.utils.callback.ILocationListener; +import com.casic.dcms.widgets.SignInDialog; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.util.Timer; +import java.util.TimerTask; + +import butterknife.BindView; +import butterknife.OnClick; + +public class BridgeMaintainActivity extends BaseActivity implements View.OnClickListener, ISubmitMaintainView { + + private static final String TAG = "BridgeMaintainActivity"; + private Context context = this; + @BindView(R.id.topLayout) + QMUITopBarLayout topLayout; + @BindView(R.id.bridgeNameView) + TextView bridgeNameView; + @BindView(R.id.maintainView) + TextView maintainView; + @BindView(R.id.maintainDateView) + TextView maintainDateView; + @BindView(R.id.liablePersonView) + TextView liablePersonView; + @BindView(R.id.submitButton) + QMUIRoundButton submitButton; + //以下非必填 + @BindView(R.id.remarksView) + EditText remarksView; + + private String bridgeId = ""; + private SubmitMaintainPresenterImpl submitMaintainPresenter; + + @Override + public int initLayoutView() { + return R.layout.activity_bridge; + } + + @Override + protected void setupTopBarLayout() { + topLayout.setTitle("路桥养护").setTextColor(ContextCompat.getColor(this, R.color.white)); + topLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + topLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + topLayout.addRightImageButton(R.drawable.ic_more, 2).setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + startActivity(new Intent(context, MaintainRecordActivity.class)); + } + }); + } + + @Override + public void initData() { + submitMaintainPresenter = new SubmitMaintainPresenterImpl(this); + } + + @Override + public void initEvent() { + submitButton.setChangeAlphaWhenPress(true); + liablePersonView.setText(StringHelper.getUserAccount()); + liablePersonView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); + + new Timer().schedule(new TimerTask() { + @Override + public void run() { + String systemDate = TimeOrDateUtil.timestampToDate(System.currentTimeMillis()); + maintainDateView.post(new Runnable() { + @Override + public void run() { + maintainDateView.setText(systemDate); + maintainDateView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); + } + }); + } + }, 0, 1000); + } + + @OnClick({R.id.bridgeLayout, R.id.maintainContentLayout, R.id.submitButton}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.bridgeLayout: + new QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("选择桥梁") + .addItem("永胜桥") + .addItem("黄洲桥") + .addItem("光明桥") + .setGravityCenter(true) + .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + + bridgeId = String.valueOf((1 + position)); + bridgeNameView.setText(tag); + bridgeNameView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); + } + }).build().show(); + break; + case R.id.maintainContentLayout: + new QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("养护内容") + .addItem("日常养护,无异常") + .addItem("清除表面污垢") + .addItem("修补混凝土空洞、破损、剥落和表面风化及裂缝") + .addItem("清除暴露钢筋的锈渍、恢复保护层") + .addItem("处理各种横、纵向构件的开裂、开焊和锈蚀") + .setGravityCenter(true) + .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + + maintainView.setText(tag); + maintainView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); + } + }).build().show(); + break; + case R.id.submitButton: + //获取定位信息 + LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + + } + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + if (aMapLocation != null) { + if (TextUtils.isEmpty(bridgeId)) { + ToastHelper.showToast("请先选择养护的桥梁", ToastHelper.WARING); + return; + } + String maintainContent = maintainView.getText().toString(); + if (TextUtils.isEmpty(maintainContent)) { + ToastHelper.showToast("请选择养护的内容", ToastHelper.WARING); + return; + } + + double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + LatLonPoint latLonPoint = new LatLonPoint(gcjToWgs[1], gcjToWgs[0]); + LocationHelper.antiCodingLocation(context, latLonPoint, new IAddressListener() { + @Override + public void onGetAddress(String address) { + SaveKeyValues.putValue("maintainAddress", address); + } + }); + //提交养护记录 + submitMaintainPresenter.onReadyRetrofitRequest(bridgeId, maintainContent, + maintainDateView.getText().toString(), + StringHelper.getUserId(), String.valueOf(gcjToWgs[0]), + String.valueOf(gcjToWgs[1]), + StringHelper.filterString(remarksView.getText().toString())); + } else { + ToastHelper.showToast("当前信号较弱,无法提交养护记录", ToastHelper.WARING); + } + } + }, true); + break; + default: + throw new IllegalStateException("Unexpected value: " + v.getId()); + } + } + + @Override + public void showProgress() { + OtherUtils.showLoadingDialog(this, "养护记录签到中,请稍后"); + } + + @Override + public void hideProgress() { + OtherUtils.dismissLoadingDialog(); + } + + @Override + public void obtainSubmitResult(ActionResultBean resultBean) { + String maintainAddress = (String) SaveKeyValues.getValue("maintainAddress", ""); + if (resultBean.isSuccess()) { + new SignInDialog.Builder() + .setContext(this) + .setTitle("桥梁养护记录提交成功") + .setAddress(maintainAddress.equals("") ? "详细位置解析失败" : maintainAddress) + .setOnDialogClickListener(new SignInDialog.OnDialogClickListener() { + @Override + public void onViewClick() { + startActivity(new Intent(context, MaintainRecordActivity.class)); + finish(); + } + }).build().show(); + } + } + + @Override + public void obtainDataFail() { + ToastHelper.showToast("操作失败", ToastHelper.ERROR); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (submitMaintainPresenter != null) { + submitMaintainPresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java index 7221e95..381b704 100644 --- a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java @@ -25,6 +25,7 @@ import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.datepicker.DatePopupWindow; +import com.qmuiteam.qmui.widget.QMUIEmptyView; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; @@ -38,8 +39,8 @@ public class CleanResultListActivity extends BaseCaseActivity implements ICleanToiletRecordView { - // @BindView(R.id.emptyView) -// QMUIEmptyView emptyView; + @BindView(R.id.emptyView) + QMUIEmptyView emptyView; @BindView(R.id.dateView) TextView dateView; @BindView(R.id.calendarView) @@ -126,7 +127,6 @@ @Override public void obtainCleanRecordResult(CleanRecordBean resultBean) { -// Log.d("TAG", "obtainCleanRecordResult: " + new Gson().toJson(resultBean)); if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); if (isRefresh) { @@ -175,9 +175,9 @@ } else { //首次加载数据 if (resultActivity.dataBeans.size() == 0) { -// resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); + resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); } else { -// resultActivity.emptyView.hide(); + resultActivity.emptyView.hide(); resultActivity.adapter = new RecordListAdapter(resultActivity, resultActivity.dataBeans); resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); diff --git a/app/src/main/java/com/casic/dcms/ui/MaintainRecordActivity.java b/app/src/main/java/com/casic/dcms/ui/MaintainRecordActivity.java new file mode 100644 index 0000000..05c41c9 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/MaintainRecordActivity.java @@ -0,0 +1,194 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.content.Intent; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.MaintainRecordAdapter; +import com.casic.dcms.base.BaseCaseActivity; +import com.casic.dcms.bean.MaintainRecordBean; +import com.casic.dcms.mvp.presenter.MaintainRecordPresenterImpl; +import com.casic.dcms.mvp.view.IMaintainRecordView; +import com.casic.dcms.utils.CalendarUtil; +import com.casic.dcms.utils.OtherUtils; +import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.datepicker.DatePopupWindow; +import com.qmuiteam.qmui.widget.QMUIEmptyView; +import com.scwang.smartrefresh.layout.SmartRefreshLayout; +import com.scwang.smartrefresh.layout.api.RefreshLayout; +import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; +import com.scwang.smartrefresh.layout.listener.OnRefreshListener; + +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class MaintainRecordActivity extends BaseCaseActivity implements IMaintainRecordView { + + @BindView(R.id.emptyView) + QMUIEmptyView emptyView; + @BindView(R.id.dateView) + TextView dateView; + @BindView(R.id.calendarView) + ImageView calendarView; + @BindView(R.id.refreshLayout) + SmartRefreshLayout refreshLayout; + @BindView(R.id.recordRecyclerView) + RecyclerView recordRecyclerView; + + private Context context = this; + private int pageIndex = 1; + private boolean isRefresh, isLoadMore = false; + private WeakReferenceHandler weakReferenceHandler; + private List dataBeans = new ArrayList<>(); + private MaintainRecordPresenterImpl recordPresenter; + private MaintainRecordAdapter adapter; + private int startGroup = -1; + private int endGroup = -1; + private int startChild = -1; + private int endChild = -1; + + @Override + protected String setTitleName() { + return "桥梁养护记录"; + } + + @Override + public int initLayoutView() { + return R.layout.activity_maintain_record; + } + + @Override + public void initData() { + weakReferenceHandler = new WeakReferenceHandler(this); + recordPresenter = new MaintainRecordPresenterImpl(this); + recordPresenter.onReadyRetrofitRequest("", "", pageIndex); + } + + @Override + public void initEvent() { + calendarView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + new DatePopupWindow + .Builder(MaintainRecordActivity.this, CalendarUtil.obtainLastTwoMonth(), v)//初始化 + .setInitSelect(startGroup, startChild, endGroup, endChild)//设置上一次选中的区间状态 + .setInitDay(true)//默认为true,UI内容为共几天、开始、结束;当为false时,UI内容为共几晚、入住、离开 + .setDateOnClickListener(new DatePopupWindow.DateOnClickListener() {//设置监听 + //点击完成按钮后回调返回方法 + @Override + public void getDate(String startDate, String endDate, int startGroupPosition, int + startChildPosition, int endGroupPosition, int endChildPosition) { + startGroup = startGroupPosition;//开始月份位置 + startChild = startChildPosition;//开始对应月份中日的位置 + endGroup = endGroupPosition;//结束月份位置 + endChild = endChildPosition;//结束对应月份中日的位置 + dateView.setText(startDate + "~" + endDate); + recordPresenter.onReadyRetrofitRequest(startDate, endDate, pageIndex); + } + }).builder(); + } + }); + refreshLayout.setOnRefreshListener(new OnRefreshListener() { + @Override + public void onRefresh(@NonNull final RefreshLayout refreshLayout) { + isRefresh = true; + //刷新之后页码重置 + pageIndex = 1; + recordPresenter.onReadyRetrofitRequest("", "", pageIndex); + } + }); + refreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() { + @Override + public void onLoadMore(@NonNull final RefreshLayout refreshLayout) { + isLoadMore = true; + pageIndex++; + recordPresenter.onReadyRetrofitRequest("", "", pageIndex); + } + }); + } + + @Override + public void obtainRecordResult(MaintainRecordBean resultBean) { + if (resultBean.isSuccess()) { + List dataRows = resultBean.getData().getRows(); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + ToastHelper.showToast("到底了,别拉了", ToastHelper.INFO); + } + dataBeans.addAll(dataRows); + refreshLayout.finishLoadMore(); + isLoadMore = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(20210622); + } + } + + @Override + public void showProgress() { + OtherUtils.showLoadingDialog(this, "查询记录中,请稍后"); + } + + @Override + public void hideProgress() { + OtherUtils.dismissLoadingDialog(); + } + + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(MaintainRecordActivity activity) { + reference = new WeakReference<>(activity); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + MaintainRecordActivity resultActivity = reference.get(); + if (msg.what == 20210622) { + if (resultActivity.isRefresh || resultActivity.isLoadMore) { + resultActivity.adapter.notifyDataSetChanged(); + } else { + //首次加载数据 + if (resultActivity.dataBeans.size() == 0) { + resultActivity.emptyView.show("抱歉,没有查到相关养护记录", null); + } else { + resultActivity.emptyView.hide(); + resultActivity.adapter = new MaintainRecordAdapter(resultActivity, resultActivity.dataBeans); + resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); + resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); + resultActivity.recordRecyclerView.setAdapter(resultActivity.adapter); + } + } + } + } + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (recordPresenter != null) { + recordPresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/PipelineManagerActivity.java b/app/src/main/java/com/casic/dcms/ui/PipelineManagerActivity.java new file mode 100644 index 0000000..fa77936 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/PipelineManagerActivity.java @@ -0,0 +1,27 @@ +package com.casic.dcms.ui; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; + +public class PipelineManagerActivity extends BaseActivity { + + @Override + public int initLayoutView() { + return R.layout.activity_pipe; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/build.gradle b/app/build.gradle index 6f0b518..bcfdc0d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ applicationId "com.casic.dcms" minSdkVersion 21 targetSdkVersion 30 - versionCode 19 - versionName "v1.0.0.11" + versionCode 20 + versionName "v1.0.0.12" ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 68f46c9..3090a91 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -89,7 +89,10 @@ - + + + + { + + private Context context; + private List dataRows; + private LayoutInflater layoutInflater; + private QMUITipDialog.Builder dialogBuilder; + + public MaintainRecordAdapter(Context context, List dataRows) { + this.context = context; + this.dataRows = dataRows; + layoutInflater = LayoutInflater.from(context); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = layoutInflater.inflate(R.layout.item_maintain_recycleview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + holder.bindView(dataRows.get(position)); + } + + @Override + public int getItemCount() { + return dataRows.size(); + } + + class ItemViewHolder extends RecyclerView.ViewHolder { + + private TextView bridgeNameView; + private ImageView descriptionImageView; + private TextView maintainContentView; + private TextView maintainTimeView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + bridgeNameView = itemView.findViewById(R.id.bridgeNameView); + descriptionImageView = itemView.findViewById(R.id.descriptionImageView); + maintainContentView = itemView.findViewById(R.id.maintainContentView); + maintainTimeView = itemView.findViewById(R.id.maintainTimeView); + } + + void bindView(MaintainRecordBean.DataBean.RowsBean rowsBean) { + bridgeNameView.setText(rowsBean.getBridgeName()); + String description = rowsBean.getDescription(); + if (TextUtils.isEmpty(description)) { + descriptionImageView.setVisibility(View.GONE); + } else { + descriptionImageView.setVisibility(View.VISIBLE); + descriptionImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + QMUITipDialog tipDialog = new QMUITipDialog.Builder(context) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_NOTHING) + .setTipWord(description) + .create(); + tipDialog.show(); + descriptionImageView.postDelayed(new Runnable() { + @Override + public void run() { + tipDialog.dismiss(); + } + }, 2000); + } + }); + } + maintainContentView.setText(rowsBean.getContent()); + maintainTimeView.setText(rowsBean.getMaintainTimeStr()); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java b/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java new file mode 100644 index 0000000..ded4fe1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java @@ -0,0 +1,41 @@ +package com.casic.dcms.bean; + +public class MaintainContentBean { + + private int code; + private String data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java b/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java new file mode 100644 index 0000000..2beea74 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java @@ -0,0 +1,301 @@ +package com.casic.dcms.bean; + +import java.util.List; + +public class MaintainRecordBean { + + private int code; + private DataBean data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + + private int total; + private List rows; + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public static class RowsBean { + /** + * bridgeId : 1 + * bridgeName : 永胜桥 + * category : 桥梁 + * code : 1624359572304 + * content : 日常养护,无异常 + * deptid : 1344110695992258561 + * description : + * id : 1407292162033041409 + * latitude : 39.914705918747295 + * longitude : 116.26295490330527 + * maintainTime : 2021-06-22 00:00:00 + * maintainTimeStr : 2021-06-22 + * name : + * personId : 1344179277212151809 + * personName : + * phone : + * status : + * statusName : + * tender : + * tenderCompany : + * ts : 2021-06-22 + * type : + * typeName : + */ + + private String bridgeId; + private String bridgeName; + private String category; + private String code; + private String content; + private String deptid; + private String description; + private String id; + private String latitude; + private String longitude; + private String maintainTime; + private String maintainTimeStr; + private String name; + private String personId; + private String personName; + private String phone; + private String status; + private String statusName; + private String tender; + private String tenderCompany; + private String ts; + private String type; + private String typeName; + + public String getBridgeId() { + return bridgeId; + } + + public void setBridgeId(String bridgeId) { + this.bridgeId = bridgeId; + } + + public String getBridgeName() { + return bridgeName; + } + + public void setBridgeName(String bridgeName) { + this.bridgeName = bridgeName; + } + + public String getCategory() { + return category; + } + + public void setCategory(String category) { + this.category = category; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLatitude() { + return latitude; + } + + public void setLatitude(String latitude) { + this.latitude = latitude; + } + + public String getLongitude() { + return longitude; + } + + public void setLongitude(String longitude) { + this.longitude = longitude; + } + + public String getMaintainTime() { + return maintainTime; + } + + public void setMaintainTime(String maintainTime) { + this.maintainTime = maintainTime; + } + + public String getMaintainTimeStr() { + return maintainTimeStr; + } + + public void setMaintainTimeStr(String maintainTimeStr) { + this.maintainTimeStr = maintainTimeStr; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPersonId() { + return personId; + } + + public void setPersonId(String personId) { + this.personId = personId; + } + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + 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 getTender() { + return tender; + } + + public void setTender(String tender) { + this.tender = tender; + } + + public String getTenderCompany() { + return tenderCompany; + } + + public void setTenderCompany(String tenderCompany) { + this.tenderCompany = tenderCompany; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getTypeName() { + return typeName; + } + + public void setTypeName(String typeName) { + this.typeName = typeName; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java new file mode 100644 index 0000000..4f7a588 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IMaintainRecordModel { + Subscription sendRetrofitRequest(String startDate, String endDate, int offset); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java new file mode 100644 index 0000000..dce3f91 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java @@ -0,0 +1,8 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ISubmitMaintainModel { + Subscription sendRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/MaintainRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/MaintainRecordModelImpl.java new file mode 100644 index 0000000..35fd486 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/MaintainRecordModelImpl.java @@ -0,0 +1,50 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.MaintainRecordBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class MaintainRecordModelImpl implements IMaintainRecordModel { + + private OnGetRecordListener listener; + + public MaintainRecordModelImpl(OnGetRecordListener recordListener) { + this.listener = recordListener; + } + + public interface OnGetRecordListener { + void onSuccess(MaintainRecordBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String startDate, String endDate, int offset) { + Observable observable = RetrofitServiceManager.getMaintainRecordResult(startDate, endDate, offset); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (e.getCause() != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(MaintainRecordBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java index 06f6fb4..9e2666d 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java @@ -29,7 +29,7 @@ @Override public Subscription sendRetrofitRequest() { - Observable observable = RetrofitServiceManager.getProcessPerson(); + Observable observable = RetrofitServiceManager.getProcessPersonResult(); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/SubmitMaintainModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/SubmitMaintainModelImpl.java new file mode 100644 index 0000000..2924fbe --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/SubmitMaintainModelImpl.java @@ -0,0 +1,52 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class SubmitMaintainModelImpl implements ISubmitMaintainModel { + + private OnSubmitListener listener; + + public SubmitMaintainModelImpl(OnSubmitListener submitListener) { + this.listener = submitListener; + } + + public interface OnSubmitListener { + void onSuccess(ActionResultBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description) { + Observable observable = RetrofitServiceManager.getAddMaintainRecordResult(bridgeId, + content, maintainTime, personId, longitude, latitude, description); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (e.getCause() != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(ActionResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IMaintainRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IMaintainRecordPresenter.java new file mode 100644 index 0000000..938a484 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IMaintainRecordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IMaintainRecordPresenter { + void onReadyRetrofitRequest(String startDate, String endDate, int offset); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ISubmitMaintainPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ISubmitMaintainPresenter.java new file mode 100644 index 0000000..511e717 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ISubmitMaintainPresenter.java @@ -0,0 +1,8 @@ +package com.casic.dcms.mvp.presenter; + +public interface ISubmitMaintainPresenter { + void onReadyRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/MaintainRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/MaintainRecordPresenterImpl.java new file mode 100644 index 0000000..fd99e30 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/MaintainRecordPresenterImpl.java @@ -0,0 +1,39 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.MaintainRecordBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.MaintainRecordModelImpl; +import com.casic.dcms.mvp.view.IMaintainRecordView; + +public class MaintainRecordPresenterImpl extends BasePresenter implements IMaintainRecordPresenter, MaintainRecordModelImpl.OnGetRecordListener { + + private IMaintainRecordView view; + private MaintainRecordModelImpl model; + + public MaintainRecordPresenterImpl(IMaintainRecordView cleanToiletRecordView) { + this.view = cleanToiletRecordView; + model = new MaintainRecordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String startDate, String endDate, int offset) { + view.showProgress(); + addSubscription(model.sendRetrofitRequest(startDate, endDate, offset)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(MaintainRecordBean result) { + view.hideProgress(); + view.obtainRecordResult(result); + } + + @Override + public void onFailure(Throwable throwable) { + view.hideProgress(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/SubmitMaintainPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/SubmitMaintainPresenterImpl.java new file mode 100644 index 0000000..7722427 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/SubmitMaintainPresenterImpl.java @@ -0,0 +1,42 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.SubmitMaintainModelImpl; +import com.casic.dcms.mvp.view.ISubmitMaintainView; + +public class SubmitMaintainPresenterImpl extends BasePresenter implements ISubmitMaintainPresenter, SubmitMaintainModelImpl.OnSubmitListener { + + private ISubmitMaintainView view; + private SubmitMaintainModelImpl actionModel; + + public SubmitMaintainPresenterImpl(ISubmitMaintainView submitCaseView) { + this.view = submitCaseView; + actionModel = new SubmitMaintainModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description) { + view.showProgress(); + addSubscription(actionModel.sendRetrofitRequest(bridgeId, content, maintainTime, personId, longitude, + latitude, description)); + } + + @Override + public void onSuccess(ActionResultBean resultBean) { + view.hideProgress(); + view.obtainSubmitResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + view.hideProgress(); + view.obtainDataFail(); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IMaintainRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/IMaintainRecordView.java new file mode 100644 index 0000000..8ff5189 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IMaintainRecordView.java @@ -0,0 +1,11 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.MaintainRecordBean; + +public interface IMaintainRecordView { + void obtainRecordResult(MaintainRecordBean resultBean); + + void showProgress(); + + void hideProgress(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ISubmitMaintainView.java b/app/src/main/java/com/casic/dcms/mvp/view/ISubmitMaintainView.java new file mode 100644 index 0000000..75a0629 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/ISubmitMaintainView.java @@ -0,0 +1,13 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.ActionResultBean; + +public interface ISubmitMaintainView { + void showProgress(); + + void hideProgress(); + + void obtainSubmitResult(ActionResultBean resultBean); + + void obtainDataFail(); +} diff --git a/app/src/main/java/com/casic/dcms/ui/BridgeMaintainActivity.java b/app/src/main/java/com/casic/dcms/ui/BridgeMaintainActivity.java new file mode 100644 index 0000000..84b0eef --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/BridgeMaintainActivity.java @@ -0,0 +1,239 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.content.Intent; +import android.location.Location; +import android.text.TextUtils; +import android.view.View; +import android.widget.EditText; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.amap.api.services.core.LatLonPoint; +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.mvp.presenter.SubmitMaintainPresenterImpl; +import com.casic.dcms.mvp.view.ISubmitMaintainView; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; +import com.casic.dcms.utils.SaveKeyValues; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.utils.callback.IAddressListener; +import com.casic.dcms.utils.callback.ILocationListener; +import com.casic.dcms.widgets.SignInDialog; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.util.Timer; +import java.util.TimerTask; + +import butterknife.BindView; +import butterknife.OnClick; + +public class BridgeMaintainActivity extends BaseActivity implements View.OnClickListener, ISubmitMaintainView { + + private static final String TAG = "BridgeMaintainActivity"; + private Context context = this; + @BindView(R.id.topLayout) + QMUITopBarLayout topLayout; + @BindView(R.id.bridgeNameView) + TextView bridgeNameView; + @BindView(R.id.maintainView) + TextView maintainView; + @BindView(R.id.maintainDateView) + TextView maintainDateView; + @BindView(R.id.liablePersonView) + TextView liablePersonView; + @BindView(R.id.submitButton) + QMUIRoundButton submitButton; + //以下非必填 + @BindView(R.id.remarksView) + EditText remarksView; + + private String bridgeId = ""; + private SubmitMaintainPresenterImpl submitMaintainPresenter; + + @Override + public int initLayoutView() { + return R.layout.activity_bridge; + } + + @Override + protected void setupTopBarLayout() { + topLayout.setTitle("路桥养护").setTextColor(ContextCompat.getColor(this, R.color.white)); + topLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + topLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + topLayout.addRightImageButton(R.drawable.ic_more, 2).setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + startActivity(new Intent(context, MaintainRecordActivity.class)); + } + }); + } + + @Override + public void initData() { + submitMaintainPresenter = new SubmitMaintainPresenterImpl(this); + } + + @Override + public void initEvent() { + submitButton.setChangeAlphaWhenPress(true); + liablePersonView.setText(StringHelper.getUserAccount()); + liablePersonView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); + + new Timer().schedule(new TimerTask() { + @Override + public void run() { + String systemDate = TimeOrDateUtil.timestampToDate(System.currentTimeMillis()); + maintainDateView.post(new Runnable() { + @Override + public void run() { + maintainDateView.setText(systemDate); + maintainDateView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); + } + }); + } + }, 0, 1000); + } + + @OnClick({R.id.bridgeLayout, R.id.maintainContentLayout, R.id.submitButton}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.bridgeLayout: + new QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("选择桥梁") + .addItem("永胜桥") + .addItem("黄洲桥") + .addItem("光明桥") + .setGravityCenter(true) + .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + + bridgeId = String.valueOf((1 + position)); + bridgeNameView.setText(tag); + bridgeNameView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); + } + }).build().show(); + break; + case R.id.maintainContentLayout: + new QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("养护内容") + .addItem("日常养护,无异常") + .addItem("清除表面污垢") + .addItem("修补混凝土空洞、破损、剥落和表面风化及裂缝") + .addItem("清除暴露钢筋的锈渍、恢复保护层") + .addItem("处理各种横、纵向构件的开裂、开焊和锈蚀") + .setGravityCenter(true) + .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + + maintainView.setText(tag); + maintainView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); + } + }).build().show(); + break; + case R.id.submitButton: + //获取定位信息 + LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + + } + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + if (aMapLocation != null) { + if (TextUtils.isEmpty(bridgeId)) { + ToastHelper.showToast("请先选择养护的桥梁", ToastHelper.WARING); + return; + } + String maintainContent = maintainView.getText().toString(); + if (TextUtils.isEmpty(maintainContent)) { + ToastHelper.showToast("请选择养护的内容", ToastHelper.WARING); + return; + } + + double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + LatLonPoint latLonPoint = new LatLonPoint(gcjToWgs[1], gcjToWgs[0]); + LocationHelper.antiCodingLocation(context, latLonPoint, new IAddressListener() { + @Override + public void onGetAddress(String address) { + SaveKeyValues.putValue("maintainAddress", address); + } + }); + //提交养护记录 + submitMaintainPresenter.onReadyRetrofitRequest(bridgeId, maintainContent, + maintainDateView.getText().toString(), + StringHelper.getUserId(), String.valueOf(gcjToWgs[0]), + String.valueOf(gcjToWgs[1]), + StringHelper.filterString(remarksView.getText().toString())); + } else { + ToastHelper.showToast("当前信号较弱,无法提交养护记录", ToastHelper.WARING); + } + } + }, true); + break; + default: + throw new IllegalStateException("Unexpected value: " + v.getId()); + } + } + + @Override + public void showProgress() { + OtherUtils.showLoadingDialog(this, "养护记录签到中,请稍后"); + } + + @Override + public void hideProgress() { + OtherUtils.dismissLoadingDialog(); + } + + @Override + public void obtainSubmitResult(ActionResultBean resultBean) { + String maintainAddress = (String) SaveKeyValues.getValue("maintainAddress", ""); + if (resultBean.isSuccess()) { + new SignInDialog.Builder() + .setContext(this) + .setTitle("桥梁养护记录提交成功") + .setAddress(maintainAddress.equals("") ? "详细位置解析失败" : maintainAddress) + .setOnDialogClickListener(new SignInDialog.OnDialogClickListener() { + @Override + public void onViewClick() { + startActivity(new Intent(context, MaintainRecordActivity.class)); + finish(); + } + }).build().show(); + } + } + + @Override + public void obtainDataFail() { + ToastHelper.showToast("操作失败", ToastHelper.ERROR); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (submitMaintainPresenter != null) { + submitMaintainPresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java index 7221e95..381b704 100644 --- a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java @@ -25,6 +25,7 @@ import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.datepicker.DatePopupWindow; +import com.qmuiteam.qmui.widget.QMUIEmptyView; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; @@ -38,8 +39,8 @@ public class CleanResultListActivity extends BaseCaseActivity implements ICleanToiletRecordView { - // @BindView(R.id.emptyView) -// QMUIEmptyView emptyView; + @BindView(R.id.emptyView) + QMUIEmptyView emptyView; @BindView(R.id.dateView) TextView dateView; @BindView(R.id.calendarView) @@ -126,7 +127,6 @@ @Override public void obtainCleanRecordResult(CleanRecordBean resultBean) { -// Log.d("TAG", "obtainCleanRecordResult: " + new Gson().toJson(resultBean)); if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); if (isRefresh) { @@ -175,9 +175,9 @@ } else { //首次加载数据 if (resultActivity.dataBeans.size() == 0) { -// resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); + resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); } else { -// resultActivity.emptyView.hide(); + resultActivity.emptyView.hide(); resultActivity.adapter = new RecordListAdapter(resultActivity, resultActivity.dataBeans); resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); diff --git a/app/src/main/java/com/casic/dcms/ui/MaintainRecordActivity.java b/app/src/main/java/com/casic/dcms/ui/MaintainRecordActivity.java new file mode 100644 index 0000000..05c41c9 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/MaintainRecordActivity.java @@ -0,0 +1,194 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.content.Intent; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.MaintainRecordAdapter; +import com.casic.dcms.base.BaseCaseActivity; +import com.casic.dcms.bean.MaintainRecordBean; +import com.casic.dcms.mvp.presenter.MaintainRecordPresenterImpl; +import com.casic.dcms.mvp.view.IMaintainRecordView; +import com.casic.dcms.utils.CalendarUtil; +import com.casic.dcms.utils.OtherUtils; +import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.datepicker.DatePopupWindow; +import com.qmuiteam.qmui.widget.QMUIEmptyView; +import com.scwang.smartrefresh.layout.SmartRefreshLayout; +import com.scwang.smartrefresh.layout.api.RefreshLayout; +import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; +import com.scwang.smartrefresh.layout.listener.OnRefreshListener; + +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class MaintainRecordActivity extends BaseCaseActivity implements IMaintainRecordView { + + @BindView(R.id.emptyView) + QMUIEmptyView emptyView; + @BindView(R.id.dateView) + TextView dateView; + @BindView(R.id.calendarView) + ImageView calendarView; + @BindView(R.id.refreshLayout) + SmartRefreshLayout refreshLayout; + @BindView(R.id.recordRecyclerView) + RecyclerView recordRecyclerView; + + private Context context = this; + private int pageIndex = 1; + private boolean isRefresh, isLoadMore = false; + private WeakReferenceHandler weakReferenceHandler; + private List dataBeans = new ArrayList<>(); + private MaintainRecordPresenterImpl recordPresenter; + private MaintainRecordAdapter adapter; + private int startGroup = -1; + private int endGroup = -1; + private int startChild = -1; + private int endChild = -1; + + @Override + protected String setTitleName() { + return "桥梁养护记录"; + } + + @Override + public int initLayoutView() { + return R.layout.activity_maintain_record; + } + + @Override + public void initData() { + weakReferenceHandler = new WeakReferenceHandler(this); + recordPresenter = new MaintainRecordPresenterImpl(this); + recordPresenter.onReadyRetrofitRequest("", "", pageIndex); + } + + @Override + public void initEvent() { + calendarView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + new DatePopupWindow + .Builder(MaintainRecordActivity.this, CalendarUtil.obtainLastTwoMonth(), v)//初始化 + .setInitSelect(startGroup, startChild, endGroup, endChild)//设置上一次选中的区间状态 + .setInitDay(true)//默认为true,UI内容为共几天、开始、结束;当为false时,UI内容为共几晚、入住、离开 + .setDateOnClickListener(new DatePopupWindow.DateOnClickListener() {//设置监听 + //点击完成按钮后回调返回方法 + @Override + public void getDate(String startDate, String endDate, int startGroupPosition, int + startChildPosition, int endGroupPosition, int endChildPosition) { + startGroup = startGroupPosition;//开始月份位置 + startChild = startChildPosition;//开始对应月份中日的位置 + endGroup = endGroupPosition;//结束月份位置 + endChild = endChildPosition;//结束对应月份中日的位置 + dateView.setText(startDate + "~" + endDate); + recordPresenter.onReadyRetrofitRequest(startDate, endDate, pageIndex); + } + }).builder(); + } + }); + refreshLayout.setOnRefreshListener(new OnRefreshListener() { + @Override + public void onRefresh(@NonNull final RefreshLayout refreshLayout) { + isRefresh = true; + //刷新之后页码重置 + pageIndex = 1; + recordPresenter.onReadyRetrofitRequest("", "", pageIndex); + } + }); + refreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() { + @Override + public void onLoadMore(@NonNull final RefreshLayout refreshLayout) { + isLoadMore = true; + pageIndex++; + recordPresenter.onReadyRetrofitRequest("", "", pageIndex); + } + }); + } + + @Override + public void obtainRecordResult(MaintainRecordBean resultBean) { + if (resultBean.isSuccess()) { + List dataRows = resultBean.getData().getRows(); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + ToastHelper.showToast("到底了,别拉了", ToastHelper.INFO); + } + dataBeans.addAll(dataRows); + refreshLayout.finishLoadMore(); + isLoadMore = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(20210622); + } + } + + @Override + public void showProgress() { + OtherUtils.showLoadingDialog(this, "查询记录中,请稍后"); + } + + @Override + public void hideProgress() { + OtherUtils.dismissLoadingDialog(); + } + + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(MaintainRecordActivity activity) { + reference = new WeakReference<>(activity); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + MaintainRecordActivity resultActivity = reference.get(); + if (msg.what == 20210622) { + if (resultActivity.isRefresh || resultActivity.isLoadMore) { + resultActivity.adapter.notifyDataSetChanged(); + } else { + //首次加载数据 + if (resultActivity.dataBeans.size() == 0) { + resultActivity.emptyView.show("抱歉,没有查到相关养护记录", null); + } else { + resultActivity.emptyView.hide(); + resultActivity.adapter = new MaintainRecordAdapter(resultActivity, resultActivity.dataBeans); + resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); + resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); + resultActivity.recordRecyclerView.setAdapter(resultActivity.adapter); + } + } + } + } + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (recordPresenter != null) { + recordPresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/PipelineManagerActivity.java b/app/src/main/java/com/casic/dcms/ui/PipelineManagerActivity.java new file mode 100644 index 0000000..fa77936 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/PipelineManagerActivity.java @@ -0,0 +1,27 @@ +package com.casic.dcms.ui; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; + +public class PipelineManagerActivity extends BaseActivity { + + @Override + public int initLayoutView() { + return R.layout.activity_pipe; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java index ac995d3..4959539 100644 --- a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java @@ -300,7 +300,8 @@ @Override public void onAMapLocationGet(AMapLocation aMapLocation) { if (aMapLocation != null) { - Point point = new Point(aMapLocation.getLongitude(), aMapLocation.getLatitude(), mapView.getSpatialReference()); + double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); mapView.setViewpointCenterAsync(point, 1200);//标注到指定经纬度并放大地图显示 //添加图片Marker addPictureMarker(point); @@ -311,11 +312,9 @@ ToastHelper.showToast("公厕标识不能为空", ToastHelper.WARING); return; } - double longitude = aMapLocation.getLongitude(); - double latitude = aMapLocation.getLatitude(); String cleanTime = TimeOrDateUtil.timestampToCompleteDate(System.currentTimeMillis()); cleanToiletPresenter.onReadyRetrofitRequest(toiletId, StringHelper.getUserId(), - String.valueOf(longitude), String.valueOf(latitude), cleanTime, imagePath, + String.valueOf(gcjToWgs[0]), String.valueOf(gcjToWgs[1]), cleanTime, imagePath, StringHelper.filterString(workContentView.getText().toString())); } } @@ -416,15 +415,18 @@ @Override public void obtainCleanResult(ActionResultBean resultBean) { -// Log.d(TAG, "obtainCleanResult: " + new Gson().toJson(resultBean)); if (resultBean.isSuccess()) { - new SignInDialog.Builder().setContext(this).setAddress(locationStreetView.getText().toString()).setOnDialogClickListener(new SignInDialog.OnDialogClickListener() { - @Override - public void onViewClick() { - startActivity(new Intent(context, CleanResultListActivity.class)); - PublicToiletActivity.this.finish(); - } - }).build().show(); + new SignInDialog.Builder() + .setContext(this) + .setTitle("保洁保卡成功") + .setAddress(locationStreetView.getText().toString()) + .setOnDialogClickListener(new SignInDialog.OnDialogClickListener() { + @Override + public void onViewClick() { + startActivity(new Intent(context, CleanResultListActivity.class)); + PublicToiletActivity.this.finish(); + } + }).build().show(); } } diff --git a/app/build.gradle b/app/build.gradle index 6f0b518..bcfdc0d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ applicationId "com.casic.dcms" minSdkVersion 21 targetSdkVersion 30 - versionCode 19 - versionName "v1.0.0.11" + versionCode 20 + versionName "v1.0.0.12" ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 68f46c9..3090a91 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -89,7 +89,10 @@ - + + + + { + + private Context context; + private List dataRows; + private LayoutInflater layoutInflater; + private QMUITipDialog.Builder dialogBuilder; + + public MaintainRecordAdapter(Context context, List dataRows) { + this.context = context; + this.dataRows = dataRows; + layoutInflater = LayoutInflater.from(context); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = layoutInflater.inflate(R.layout.item_maintain_recycleview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + holder.bindView(dataRows.get(position)); + } + + @Override + public int getItemCount() { + return dataRows.size(); + } + + class ItemViewHolder extends RecyclerView.ViewHolder { + + private TextView bridgeNameView; + private ImageView descriptionImageView; + private TextView maintainContentView; + private TextView maintainTimeView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + bridgeNameView = itemView.findViewById(R.id.bridgeNameView); + descriptionImageView = itemView.findViewById(R.id.descriptionImageView); + maintainContentView = itemView.findViewById(R.id.maintainContentView); + maintainTimeView = itemView.findViewById(R.id.maintainTimeView); + } + + void bindView(MaintainRecordBean.DataBean.RowsBean rowsBean) { + bridgeNameView.setText(rowsBean.getBridgeName()); + String description = rowsBean.getDescription(); + if (TextUtils.isEmpty(description)) { + descriptionImageView.setVisibility(View.GONE); + } else { + descriptionImageView.setVisibility(View.VISIBLE); + descriptionImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + QMUITipDialog tipDialog = new QMUITipDialog.Builder(context) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_NOTHING) + .setTipWord(description) + .create(); + tipDialog.show(); + descriptionImageView.postDelayed(new Runnable() { + @Override + public void run() { + tipDialog.dismiss(); + } + }, 2000); + } + }); + } + maintainContentView.setText(rowsBean.getContent()); + maintainTimeView.setText(rowsBean.getMaintainTimeStr()); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java b/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java new file mode 100644 index 0000000..ded4fe1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java @@ -0,0 +1,41 @@ +package com.casic.dcms.bean; + +public class MaintainContentBean { + + private int code; + private String data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java b/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java new file mode 100644 index 0000000..2beea74 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java @@ -0,0 +1,301 @@ +package com.casic.dcms.bean; + +import java.util.List; + +public class MaintainRecordBean { + + private int code; + private DataBean data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + + private int total; + private List rows; + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public static class RowsBean { + /** + * bridgeId : 1 + * bridgeName : 永胜桥 + * category : 桥梁 + * code : 1624359572304 + * content : 日常养护,无异常 + * deptid : 1344110695992258561 + * description : + * id : 1407292162033041409 + * latitude : 39.914705918747295 + * longitude : 116.26295490330527 + * maintainTime : 2021-06-22 00:00:00 + * maintainTimeStr : 2021-06-22 + * name : + * personId : 1344179277212151809 + * personName : + * phone : + * status : + * statusName : + * tender : + * tenderCompany : + * ts : 2021-06-22 + * type : + * typeName : + */ + + private String bridgeId; + private String bridgeName; + private String category; + private String code; + private String content; + private String deptid; + private String description; + private String id; + private String latitude; + private String longitude; + private String maintainTime; + private String maintainTimeStr; + private String name; + private String personId; + private String personName; + private String phone; + private String status; + private String statusName; + private String tender; + private String tenderCompany; + private String ts; + private String type; + private String typeName; + + public String getBridgeId() { + return bridgeId; + } + + public void setBridgeId(String bridgeId) { + this.bridgeId = bridgeId; + } + + public String getBridgeName() { + return bridgeName; + } + + public void setBridgeName(String bridgeName) { + this.bridgeName = bridgeName; + } + + public String getCategory() { + return category; + } + + public void setCategory(String category) { + this.category = category; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLatitude() { + return latitude; + } + + public void setLatitude(String latitude) { + this.latitude = latitude; + } + + public String getLongitude() { + return longitude; + } + + public void setLongitude(String longitude) { + this.longitude = longitude; + } + + public String getMaintainTime() { + return maintainTime; + } + + public void setMaintainTime(String maintainTime) { + this.maintainTime = maintainTime; + } + + public String getMaintainTimeStr() { + return maintainTimeStr; + } + + public void setMaintainTimeStr(String maintainTimeStr) { + this.maintainTimeStr = maintainTimeStr; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPersonId() { + return personId; + } + + public void setPersonId(String personId) { + this.personId = personId; + } + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + 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 getTender() { + return tender; + } + + public void setTender(String tender) { + this.tender = tender; + } + + public String getTenderCompany() { + return tenderCompany; + } + + public void setTenderCompany(String tenderCompany) { + this.tenderCompany = tenderCompany; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getTypeName() { + return typeName; + } + + public void setTypeName(String typeName) { + this.typeName = typeName; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java new file mode 100644 index 0000000..4f7a588 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IMaintainRecordModel { + Subscription sendRetrofitRequest(String startDate, String endDate, int offset); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java new file mode 100644 index 0000000..dce3f91 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java @@ -0,0 +1,8 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ISubmitMaintainModel { + Subscription sendRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/MaintainRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/MaintainRecordModelImpl.java new file mode 100644 index 0000000..35fd486 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/MaintainRecordModelImpl.java @@ -0,0 +1,50 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.MaintainRecordBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class MaintainRecordModelImpl implements IMaintainRecordModel { + + private OnGetRecordListener listener; + + public MaintainRecordModelImpl(OnGetRecordListener recordListener) { + this.listener = recordListener; + } + + public interface OnGetRecordListener { + void onSuccess(MaintainRecordBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String startDate, String endDate, int offset) { + Observable observable = RetrofitServiceManager.getMaintainRecordResult(startDate, endDate, offset); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (e.getCause() != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(MaintainRecordBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java index 06f6fb4..9e2666d 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java @@ -29,7 +29,7 @@ @Override public Subscription sendRetrofitRequest() { - Observable observable = RetrofitServiceManager.getProcessPerson(); + Observable observable = RetrofitServiceManager.getProcessPersonResult(); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/SubmitMaintainModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/SubmitMaintainModelImpl.java new file mode 100644 index 0000000..2924fbe --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/SubmitMaintainModelImpl.java @@ -0,0 +1,52 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class SubmitMaintainModelImpl implements ISubmitMaintainModel { + + private OnSubmitListener listener; + + public SubmitMaintainModelImpl(OnSubmitListener submitListener) { + this.listener = submitListener; + } + + public interface OnSubmitListener { + void onSuccess(ActionResultBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description) { + Observable observable = RetrofitServiceManager.getAddMaintainRecordResult(bridgeId, + content, maintainTime, personId, longitude, latitude, description); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (e.getCause() != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(ActionResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IMaintainRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IMaintainRecordPresenter.java new file mode 100644 index 0000000..938a484 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IMaintainRecordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IMaintainRecordPresenter { + void onReadyRetrofitRequest(String startDate, String endDate, int offset); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ISubmitMaintainPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ISubmitMaintainPresenter.java new file mode 100644 index 0000000..511e717 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ISubmitMaintainPresenter.java @@ -0,0 +1,8 @@ +package com.casic.dcms.mvp.presenter; + +public interface ISubmitMaintainPresenter { + void onReadyRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/MaintainRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/MaintainRecordPresenterImpl.java new file mode 100644 index 0000000..fd99e30 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/MaintainRecordPresenterImpl.java @@ -0,0 +1,39 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.MaintainRecordBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.MaintainRecordModelImpl; +import com.casic.dcms.mvp.view.IMaintainRecordView; + +public class MaintainRecordPresenterImpl extends BasePresenter implements IMaintainRecordPresenter, MaintainRecordModelImpl.OnGetRecordListener { + + private IMaintainRecordView view; + private MaintainRecordModelImpl model; + + public MaintainRecordPresenterImpl(IMaintainRecordView cleanToiletRecordView) { + this.view = cleanToiletRecordView; + model = new MaintainRecordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String startDate, String endDate, int offset) { + view.showProgress(); + addSubscription(model.sendRetrofitRequest(startDate, endDate, offset)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(MaintainRecordBean result) { + view.hideProgress(); + view.obtainRecordResult(result); + } + + @Override + public void onFailure(Throwable throwable) { + view.hideProgress(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/SubmitMaintainPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/SubmitMaintainPresenterImpl.java new file mode 100644 index 0000000..7722427 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/SubmitMaintainPresenterImpl.java @@ -0,0 +1,42 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.SubmitMaintainModelImpl; +import com.casic.dcms.mvp.view.ISubmitMaintainView; + +public class SubmitMaintainPresenterImpl extends BasePresenter implements ISubmitMaintainPresenter, SubmitMaintainModelImpl.OnSubmitListener { + + private ISubmitMaintainView view; + private SubmitMaintainModelImpl actionModel; + + public SubmitMaintainPresenterImpl(ISubmitMaintainView submitCaseView) { + this.view = submitCaseView; + actionModel = new SubmitMaintainModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description) { + view.showProgress(); + addSubscription(actionModel.sendRetrofitRequest(bridgeId, content, maintainTime, personId, longitude, + latitude, description)); + } + + @Override + public void onSuccess(ActionResultBean resultBean) { + view.hideProgress(); + view.obtainSubmitResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + view.hideProgress(); + view.obtainDataFail(); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IMaintainRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/IMaintainRecordView.java new file mode 100644 index 0000000..8ff5189 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IMaintainRecordView.java @@ -0,0 +1,11 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.MaintainRecordBean; + +public interface IMaintainRecordView { + void obtainRecordResult(MaintainRecordBean resultBean); + + void showProgress(); + + void hideProgress(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ISubmitMaintainView.java b/app/src/main/java/com/casic/dcms/mvp/view/ISubmitMaintainView.java new file mode 100644 index 0000000..75a0629 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/ISubmitMaintainView.java @@ -0,0 +1,13 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.ActionResultBean; + +public interface ISubmitMaintainView { + void showProgress(); + + void hideProgress(); + + void obtainSubmitResult(ActionResultBean resultBean); + + void obtainDataFail(); +} diff --git a/app/src/main/java/com/casic/dcms/ui/BridgeMaintainActivity.java b/app/src/main/java/com/casic/dcms/ui/BridgeMaintainActivity.java new file mode 100644 index 0000000..84b0eef --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/BridgeMaintainActivity.java @@ -0,0 +1,239 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.content.Intent; +import android.location.Location; +import android.text.TextUtils; +import android.view.View; +import android.widget.EditText; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.amap.api.services.core.LatLonPoint; +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.mvp.presenter.SubmitMaintainPresenterImpl; +import com.casic.dcms.mvp.view.ISubmitMaintainView; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; +import com.casic.dcms.utils.SaveKeyValues; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.utils.callback.IAddressListener; +import com.casic.dcms.utils.callback.ILocationListener; +import com.casic.dcms.widgets.SignInDialog; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.util.Timer; +import java.util.TimerTask; + +import butterknife.BindView; +import butterknife.OnClick; + +public class BridgeMaintainActivity extends BaseActivity implements View.OnClickListener, ISubmitMaintainView { + + private static final String TAG = "BridgeMaintainActivity"; + private Context context = this; + @BindView(R.id.topLayout) + QMUITopBarLayout topLayout; + @BindView(R.id.bridgeNameView) + TextView bridgeNameView; + @BindView(R.id.maintainView) + TextView maintainView; + @BindView(R.id.maintainDateView) + TextView maintainDateView; + @BindView(R.id.liablePersonView) + TextView liablePersonView; + @BindView(R.id.submitButton) + QMUIRoundButton submitButton; + //以下非必填 + @BindView(R.id.remarksView) + EditText remarksView; + + private String bridgeId = ""; + private SubmitMaintainPresenterImpl submitMaintainPresenter; + + @Override + public int initLayoutView() { + return R.layout.activity_bridge; + } + + @Override + protected void setupTopBarLayout() { + topLayout.setTitle("路桥养护").setTextColor(ContextCompat.getColor(this, R.color.white)); + topLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + topLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + topLayout.addRightImageButton(R.drawable.ic_more, 2).setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + startActivity(new Intent(context, MaintainRecordActivity.class)); + } + }); + } + + @Override + public void initData() { + submitMaintainPresenter = new SubmitMaintainPresenterImpl(this); + } + + @Override + public void initEvent() { + submitButton.setChangeAlphaWhenPress(true); + liablePersonView.setText(StringHelper.getUserAccount()); + liablePersonView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); + + new Timer().schedule(new TimerTask() { + @Override + public void run() { + String systemDate = TimeOrDateUtil.timestampToDate(System.currentTimeMillis()); + maintainDateView.post(new Runnable() { + @Override + public void run() { + maintainDateView.setText(systemDate); + maintainDateView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); + } + }); + } + }, 0, 1000); + } + + @OnClick({R.id.bridgeLayout, R.id.maintainContentLayout, R.id.submitButton}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.bridgeLayout: + new QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("选择桥梁") + .addItem("永胜桥") + .addItem("黄洲桥") + .addItem("光明桥") + .setGravityCenter(true) + .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + + bridgeId = String.valueOf((1 + position)); + bridgeNameView.setText(tag); + bridgeNameView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); + } + }).build().show(); + break; + case R.id.maintainContentLayout: + new QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("养护内容") + .addItem("日常养护,无异常") + .addItem("清除表面污垢") + .addItem("修补混凝土空洞、破损、剥落和表面风化及裂缝") + .addItem("清除暴露钢筋的锈渍、恢复保护层") + .addItem("处理各种横、纵向构件的开裂、开焊和锈蚀") + .setGravityCenter(true) + .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + + maintainView.setText(tag); + maintainView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); + } + }).build().show(); + break; + case R.id.submitButton: + //获取定位信息 + LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + + } + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + if (aMapLocation != null) { + if (TextUtils.isEmpty(bridgeId)) { + ToastHelper.showToast("请先选择养护的桥梁", ToastHelper.WARING); + return; + } + String maintainContent = maintainView.getText().toString(); + if (TextUtils.isEmpty(maintainContent)) { + ToastHelper.showToast("请选择养护的内容", ToastHelper.WARING); + return; + } + + double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + LatLonPoint latLonPoint = new LatLonPoint(gcjToWgs[1], gcjToWgs[0]); + LocationHelper.antiCodingLocation(context, latLonPoint, new IAddressListener() { + @Override + public void onGetAddress(String address) { + SaveKeyValues.putValue("maintainAddress", address); + } + }); + //提交养护记录 + submitMaintainPresenter.onReadyRetrofitRequest(bridgeId, maintainContent, + maintainDateView.getText().toString(), + StringHelper.getUserId(), String.valueOf(gcjToWgs[0]), + String.valueOf(gcjToWgs[1]), + StringHelper.filterString(remarksView.getText().toString())); + } else { + ToastHelper.showToast("当前信号较弱,无法提交养护记录", ToastHelper.WARING); + } + } + }, true); + break; + default: + throw new IllegalStateException("Unexpected value: " + v.getId()); + } + } + + @Override + public void showProgress() { + OtherUtils.showLoadingDialog(this, "养护记录签到中,请稍后"); + } + + @Override + public void hideProgress() { + OtherUtils.dismissLoadingDialog(); + } + + @Override + public void obtainSubmitResult(ActionResultBean resultBean) { + String maintainAddress = (String) SaveKeyValues.getValue("maintainAddress", ""); + if (resultBean.isSuccess()) { + new SignInDialog.Builder() + .setContext(this) + .setTitle("桥梁养护记录提交成功") + .setAddress(maintainAddress.equals("") ? "详细位置解析失败" : maintainAddress) + .setOnDialogClickListener(new SignInDialog.OnDialogClickListener() { + @Override + public void onViewClick() { + startActivity(new Intent(context, MaintainRecordActivity.class)); + finish(); + } + }).build().show(); + } + } + + @Override + public void obtainDataFail() { + ToastHelper.showToast("操作失败", ToastHelper.ERROR); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (submitMaintainPresenter != null) { + submitMaintainPresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java index 7221e95..381b704 100644 --- a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java @@ -25,6 +25,7 @@ import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.datepicker.DatePopupWindow; +import com.qmuiteam.qmui.widget.QMUIEmptyView; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; @@ -38,8 +39,8 @@ public class CleanResultListActivity extends BaseCaseActivity implements ICleanToiletRecordView { - // @BindView(R.id.emptyView) -// QMUIEmptyView emptyView; + @BindView(R.id.emptyView) + QMUIEmptyView emptyView; @BindView(R.id.dateView) TextView dateView; @BindView(R.id.calendarView) @@ -126,7 +127,6 @@ @Override public void obtainCleanRecordResult(CleanRecordBean resultBean) { -// Log.d("TAG", "obtainCleanRecordResult: " + new Gson().toJson(resultBean)); if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); if (isRefresh) { @@ -175,9 +175,9 @@ } else { //首次加载数据 if (resultActivity.dataBeans.size() == 0) { -// resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); + resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); } else { -// resultActivity.emptyView.hide(); + resultActivity.emptyView.hide(); resultActivity.adapter = new RecordListAdapter(resultActivity, resultActivity.dataBeans); resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); diff --git a/app/src/main/java/com/casic/dcms/ui/MaintainRecordActivity.java b/app/src/main/java/com/casic/dcms/ui/MaintainRecordActivity.java new file mode 100644 index 0000000..05c41c9 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/MaintainRecordActivity.java @@ -0,0 +1,194 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.content.Intent; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.MaintainRecordAdapter; +import com.casic.dcms.base.BaseCaseActivity; +import com.casic.dcms.bean.MaintainRecordBean; +import com.casic.dcms.mvp.presenter.MaintainRecordPresenterImpl; +import com.casic.dcms.mvp.view.IMaintainRecordView; +import com.casic.dcms.utils.CalendarUtil; +import com.casic.dcms.utils.OtherUtils; +import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.datepicker.DatePopupWindow; +import com.qmuiteam.qmui.widget.QMUIEmptyView; +import com.scwang.smartrefresh.layout.SmartRefreshLayout; +import com.scwang.smartrefresh.layout.api.RefreshLayout; +import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; +import com.scwang.smartrefresh.layout.listener.OnRefreshListener; + +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class MaintainRecordActivity extends BaseCaseActivity implements IMaintainRecordView { + + @BindView(R.id.emptyView) + QMUIEmptyView emptyView; + @BindView(R.id.dateView) + TextView dateView; + @BindView(R.id.calendarView) + ImageView calendarView; + @BindView(R.id.refreshLayout) + SmartRefreshLayout refreshLayout; + @BindView(R.id.recordRecyclerView) + RecyclerView recordRecyclerView; + + private Context context = this; + private int pageIndex = 1; + private boolean isRefresh, isLoadMore = false; + private WeakReferenceHandler weakReferenceHandler; + private List dataBeans = new ArrayList<>(); + private MaintainRecordPresenterImpl recordPresenter; + private MaintainRecordAdapter adapter; + private int startGroup = -1; + private int endGroup = -1; + private int startChild = -1; + private int endChild = -1; + + @Override + protected String setTitleName() { + return "桥梁养护记录"; + } + + @Override + public int initLayoutView() { + return R.layout.activity_maintain_record; + } + + @Override + public void initData() { + weakReferenceHandler = new WeakReferenceHandler(this); + recordPresenter = new MaintainRecordPresenterImpl(this); + recordPresenter.onReadyRetrofitRequest("", "", pageIndex); + } + + @Override + public void initEvent() { + calendarView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + new DatePopupWindow + .Builder(MaintainRecordActivity.this, CalendarUtil.obtainLastTwoMonth(), v)//初始化 + .setInitSelect(startGroup, startChild, endGroup, endChild)//设置上一次选中的区间状态 + .setInitDay(true)//默认为true,UI内容为共几天、开始、结束;当为false时,UI内容为共几晚、入住、离开 + .setDateOnClickListener(new DatePopupWindow.DateOnClickListener() {//设置监听 + //点击完成按钮后回调返回方法 + @Override + public void getDate(String startDate, String endDate, int startGroupPosition, int + startChildPosition, int endGroupPosition, int endChildPosition) { + startGroup = startGroupPosition;//开始月份位置 + startChild = startChildPosition;//开始对应月份中日的位置 + endGroup = endGroupPosition;//结束月份位置 + endChild = endChildPosition;//结束对应月份中日的位置 + dateView.setText(startDate + "~" + endDate); + recordPresenter.onReadyRetrofitRequest(startDate, endDate, pageIndex); + } + }).builder(); + } + }); + refreshLayout.setOnRefreshListener(new OnRefreshListener() { + @Override + public void onRefresh(@NonNull final RefreshLayout refreshLayout) { + isRefresh = true; + //刷新之后页码重置 + pageIndex = 1; + recordPresenter.onReadyRetrofitRequest("", "", pageIndex); + } + }); + refreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() { + @Override + public void onLoadMore(@NonNull final RefreshLayout refreshLayout) { + isLoadMore = true; + pageIndex++; + recordPresenter.onReadyRetrofitRequest("", "", pageIndex); + } + }); + } + + @Override + public void obtainRecordResult(MaintainRecordBean resultBean) { + if (resultBean.isSuccess()) { + List dataRows = resultBean.getData().getRows(); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + ToastHelper.showToast("到底了,别拉了", ToastHelper.INFO); + } + dataBeans.addAll(dataRows); + refreshLayout.finishLoadMore(); + isLoadMore = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(20210622); + } + } + + @Override + public void showProgress() { + OtherUtils.showLoadingDialog(this, "查询记录中,请稍后"); + } + + @Override + public void hideProgress() { + OtherUtils.dismissLoadingDialog(); + } + + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(MaintainRecordActivity activity) { + reference = new WeakReference<>(activity); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + MaintainRecordActivity resultActivity = reference.get(); + if (msg.what == 20210622) { + if (resultActivity.isRefresh || resultActivity.isLoadMore) { + resultActivity.adapter.notifyDataSetChanged(); + } else { + //首次加载数据 + if (resultActivity.dataBeans.size() == 0) { + resultActivity.emptyView.show("抱歉,没有查到相关养护记录", null); + } else { + resultActivity.emptyView.hide(); + resultActivity.adapter = new MaintainRecordAdapter(resultActivity, resultActivity.dataBeans); + resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); + resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); + resultActivity.recordRecyclerView.setAdapter(resultActivity.adapter); + } + } + } + } + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (recordPresenter != null) { + recordPresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/PipelineManagerActivity.java b/app/src/main/java/com/casic/dcms/ui/PipelineManagerActivity.java new file mode 100644 index 0000000..fa77936 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/PipelineManagerActivity.java @@ -0,0 +1,27 @@ +package com.casic.dcms.ui; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; + +public class PipelineManagerActivity extends BaseActivity { + + @Override + public int initLayoutView() { + return R.layout.activity_pipe; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java index ac995d3..4959539 100644 --- a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java @@ -300,7 +300,8 @@ @Override public void onAMapLocationGet(AMapLocation aMapLocation) { if (aMapLocation != null) { - Point point = new Point(aMapLocation.getLongitude(), aMapLocation.getLatitude(), mapView.getSpatialReference()); + double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); mapView.setViewpointCenterAsync(point, 1200);//标注到指定经纬度并放大地图显示 //添加图片Marker addPictureMarker(point); @@ -311,11 +312,9 @@ ToastHelper.showToast("公厕标识不能为空", ToastHelper.WARING); return; } - double longitude = aMapLocation.getLongitude(); - double latitude = aMapLocation.getLatitude(); String cleanTime = TimeOrDateUtil.timestampToCompleteDate(System.currentTimeMillis()); cleanToiletPresenter.onReadyRetrofitRequest(toiletId, StringHelper.getUserId(), - String.valueOf(longitude), String.valueOf(latitude), cleanTime, imagePath, + String.valueOf(gcjToWgs[0]), String.valueOf(gcjToWgs[1]), cleanTime, imagePath, StringHelper.filterString(workContentView.getText().toString())); } } @@ -416,15 +415,18 @@ @Override public void obtainCleanResult(ActionResultBean resultBean) { -// Log.d(TAG, "obtainCleanResult: " + new Gson().toJson(resultBean)); if (resultBean.isSuccess()) { - new SignInDialog.Builder().setContext(this).setAddress(locationStreetView.getText().toString()).setOnDialogClickListener(new SignInDialog.OnDialogClickListener() { - @Override - public void onViewClick() { - startActivity(new Intent(context, CleanResultListActivity.class)); - PublicToiletActivity.this.finish(); - } - }).build().show(); + new SignInDialog.Builder() + .setContext(this) + .setTitle("保洁保卡成功") + .setAddress(locationStreetView.getText().toString()) + .setOnDialogClickListener(new SignInDialog.OnDialogClickListener() { + @Override + public void onViewClick() { + startActivity(new Intent(context, CleanResultListActivity.class)); + PublicToiletActivity.this.finish(); + } + }).build().show(); } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java index 03438b0..42d29a4 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java @@ -18,6 +18,7 @@ import com.casic.dcms.mvp.presenter.UserDataPresenterImpl; import com.casic.dcms.mvp.view.IHomePageView; import com.casic.dcms.mvp.view.IUserDataView; +import com.casic.dcms.ui.BridgeMaintainActivity; import com.casic.dcms.ui.CaseCheckActivity; import com.casic.dcms.ui.CaseHandleActivity; import com.casic.dcms.ui.CaseOnMapActivity; @@ -32,6 +33,7 @@ import com.casic.dcms.ui.OvertimeCaseActivity; import com.casic.dcms.ui.PackageHandleActivity; import com.casic.dcms.ui.PersonOnlineActivity; +import com.casic.dcms.ui.PipelineManagerActivity; import com.casic.dcms.ui.PublicToiletActivity; import com.casic.dcms.ui.UrgentCaseActivity; import com.casic.dcms.utils.StringHelper; @@ -161,6 +163,12 @@ case "部门处置": intent.setClass(context, DeptHandleActivity.class); break; + case "路桥养护": + intent.setClass(context, BridgeMaintainActivity.class); + break; + case "管网管理": + intent.setClass(context, PipelineManagerActivity.class); + break; default: break; } diff --git a/app/build.gradle b/app/build.gradle index 6f0b518..bcfdc0d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ applicationId "com.casic.dcms" minSdkVersion 21 targetSdkVersion 30 - versionCode 19 - versionName "v1.0.0.11" + versionCode 20 + versionName "v1.0.0.12" ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 68f46c9..3090a91 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -89,7 +89,10 @@ - + + + + { + + private Context context; + private List dataRows; + private LayoutInflater layoutInflater; + private QMUITipDialog.Builder dialogBuilder; + + public MaintainRecordAdapter(Context context, List dataRows) { + this.context = context; + this.dataRows = dataRows; + layoutInflater = LayoutInflater.from(context); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = layoutInflater.inflate(R.layout.item_maintain_recycleview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + holder.bindView(dataRows.get(position)); + } + + @Override + public int getItemCount() { + return dataRows.size(); + } + + class ItemViewHolder extends RecyclerView.ViewHolder { + + private TextView bridgeNameView; + private ImageView descriptionImageView; + private TextView maintainContentView; + private TextView maintainTimeView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + bridgeNameView = itemView.findViewById(R.id.bridgeNameView); + descriptionImageView = itemView.findViewById(R.id.descriptionImageView); + maintainContentView = itemView.findViewById(R.id.maintainContentView); + maintainTimeView = itemView.findViewById(R.id.maintainTimeView); + } + + void bindView(MaintainRecordBean.DataBean.RowsBean rowsBean) { + bridgeNameView.setText(rowsBean.getBridgeName()); + String description = rowsBean.getDescription(); + if (TextUtils.isEmpty(description)) { + descriptionImageView.setVisibility(View.GONE); + } else { + descriptionImageView.setVisibility(View.VISIBLE); + descriptionImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + QMUITipDialog tipDialog = new QMUITipDialog.Builder(context) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_NOTHING) + .setTipWord(description) + .create(); + tipDialog.show(); + descriptionImageView.postDelayed(new Runnable() { + @Override + public void run() { + tipDialog.dismiss(); + } + }, 2000); + } + }); + } + maintainContentView.setText(rowsBean.getContent()); + maintainTimeView.setText(rowsBean.getMaintainTimeStr()); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java b/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java new file mode 100644 index 0000000..ded4fe1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java @@ -0,0 +1,41 @@ +package com.casic.dcms.bean; + +public class MaintainContentBean { + + private int code; + private String data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java b/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java new file mode 100644 index 0000000..2beea74 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java @@ -0,0 +1,301 @@ +package com.casic.dcms.bean; + +import java.util.List; + +public class MaintainRecordBean { + + private int code; + private DataBean data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + + private int total; + private List rows; + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public static class RowsBean { + /** + * bridgeId : 1 + * bridgeName : 永胜桥 + * category : 桥梁 + * code : 1624359572304 + * content : 日常养护,无异常 + * deptid : 1344110695992258561 + * description : + * id : 1407292162033041409 + * latitude : 39.914705918747295 + * longitude : 116.26295490330527 + * maintainTime : 2021-06-22 00:00:00 + * maintainTimeStr : 2021-06-22 + * name : + * personId : 1344179277212151809 + * personName : + * phone : + * status : + * statusName : + * tender : + * tenderCompany : + * ts : 2021-06-22 + * type : + * typeName : + */ + + private String bridgeId; + private String bridgeName; + private String category; + private String code; + private String content; + private String deptid; + private String description; + private String id; + private String latitude; + private String longitude; + private String maintainTime; + private String maintainTimeStr; + private String name; + private String personId; + private String personName; + private String phone; + private String status; + private String statusName; + private String tender; + private String tenderCompany; + private String ts; + private String type; + private String typeName; + + public String getBridgeId() { + return bridgeId; + } + + public void setBridgeId(String bridgeId) { + this.bridgeId = bridgeId; + } + + public String getBridgeName() { + return bridgeName; + } + + public void setBridgeName(String bridgeName) { + this.bridgeName = bridgeName; + } + + public String getCategory() { + return category; + } + + public void setCategory(String category) { + this.category = category; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLatitude() { + return latitude; + } + + public void setLatitude(String latitude) { + this.latitude = latitude; + } + + public String getLongitude() { + return longitude; + } + + public void setLongitude(String longitude) { + this.longitude = longitude; + } + + public String getMaintainTime() { + return maintainTime; + } + + public void setMaintainTime(String maintainTime) { + this.maintainTime = maintainTime; + } + + public String getMaintainTimeStr() { + return maintainTimeStr; + } + + public void setMaintainTimeStr(String maintainTimeStr) { + this.maintainTimeStr = maintainTimeStr; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPersonId() { + return personId; + } + + public void setPersonId(String personId) { + this.personId = personId; + } + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + 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 getTender() { + return tender; + } + + public void setTender(String tender) { + this.tender = tender; + } + + public String getTenderCompany() { + return tenderCompany; + } + + public void setTenderCompany(String tenderCompany) { + this.tenderCompany = tenderCompany; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getTypeName() { + return typeName; + } + + public void setTypeName(String typeName) { + this.typeName = typeName; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java new file mode 100644 index 0000000..4f7a588 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IMaintainRecordModel { + Subscription sendRetrofitRequest(String startDate, String endDate, int offset); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java new file mode 100644 index 0000000..dce3f91 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java @@ -0,0 +1,8 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ISubmitMaintainModel { + Subscription sendRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/MaintainRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/MaintainRecordModelImpl.java new file mode 100644 index 0000000..35fd486 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/MaintainRecordModelImpl.java @@ -0,0 +1,50 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.MaintainRecordBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class MaintainRecordModelImpl implements IMaintainRecordModel { + + private OnGetRecordListener listener; + + public MaintainRecordModelImpl(OnGetRecordListener recordListener) { + this.listener = recordListener; + } + + public interface OnGetRecordListener { + void onSuccess(MaintainRecordBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String startDate, String endDate, int offset) { + Observable observable = RetrofitServiceManager.getMaintainRecordResult(startDate, endDate, offset); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (e.getCause() != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(MaintainRecordBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java index 06f6fb4..9e2666d 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java @@ -29,7 +29,7 @@ @Override public Subscription sendRetrofitRequest() { - Observable observable = RetrofitServiceManager.getProcessPerson(); + Observable observable = RetrofitServiceManager.getProcessPersonResult(); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/SubmitMaintainModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/SubmitMaintainModelImpl.java new file mode 100644 index 0000000..2924fbe --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/SubmitMaintainModelImpl.java @@ -0,0 +1,52 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class SubmitMaintainModelImpl implements ISubmitMaintainModel { + + private OnSubmitListener listener; + + public SubmitMaintainModelImpl(OnSubmitListener submitListener) { + this.listener = submitListener; + } + + public interface OnSubmitListener { + void onSuccess(ActionResultBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description) { + Observable observable = RetrofitServiceManager.getAddMaintainRecordResult(bridgeId, + content, maintainTime, personId, longitude, latitude, description); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (e.getCause() != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(ActionResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IMaintainRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IMaintainRecordPresenter.java new file mode 100644 index 0000000..938a484 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IMaintainRecordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IMaintainRecordPresenter { + void onReadyRetrofitRequest(String startDate, String endDate, int offset); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ISubmitMaintainPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ISubmitMaintainPresenter.java new file mode 100644 index 0000000..511e717 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ISubmitMaintainPresenter.java @@ -0,0 +1,8 @@ +package com.casic.dcms.mvp.presenter; + +public interface ISubmitMaintainPresenter { + void onReadyRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/MaintainRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/MaintainRecordPresenterImpl.java new file mode 100644 index 0000000..fd99e30 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/MaintainRecordPresenterImpl.java @@ -0,0 +1,39 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.MaintainRecordBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.MaintainRecordModelImpl; +import com.casic.dcms.mvp.view.IMaintainRecordView; + +public class MaintainRecordPresenterImpl extends BasePresenter implements IMaintainRecordPresenter, MaintainRecordModelImpl.OnGetRecordListener { + + private IMaintainRecordView view; + private MaintainRecordModelImpl model; + + public MaintainRecordPresenterImpl(IMaintainRecordView cleanToiletRecordView) { + this.view = cleanToiletRecordView; + model = new MaintainRecordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String startDate, String endDate, int offset) { + view.showProgress(); + addSubscription(model.sendRetrofitRequest(startDate, endDate, offset)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(MaintainRecordBean result) { + view.hideProgress(); + view.obtainRecordResult(result); + } + + @Override + public void onFailure(Throwable throwable) { + view.hideProgress(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/SubmitMaintainPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/SubmitMaintainPresenterImpl.java new file mode 100644 index 0000000..7722427 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/SubmitMaintainPresenterImpl.java @@ -0,0 +1,42 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.SubmitMaintainModelImpl; +import com.casic.dcms.mvp.view.ISubmitMaintainView; + +public class SubmitMaintainPresenterImpl extends BasePresenter implements ISubmitMaintainPresenter, SubmitMaintainModelImpl.OnSubmitListener { + + private ISubmitMaintainView view; + private SubmitMaintainModelImpl actionModel; + + public SubmitMaintainPresenterImpl(ISubmitMaintainView submitCaseView) { + this.view = submitCaseView; + actionModel = new SubmitMaintainModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description) { + view.showProgress(); + addSubscription(actionModel.sendRetrofitRequest(bridgeId, content, maintainTime, personId, longitude, + latitude, description)); + } + + @Override + public void onSuccess(ActionResultBean resultBean) { + view.hideProgress(); + view.obtainSubmitResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + view.hideProgress(); + view.obtainDataFail(); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IMaintainRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/IMaintainRecordView.java new file mode 100644 index 0000000..8ff5189 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IMaintainRecordView.java @@ -0,0 +1,11 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.MaintainRecordBean; + +public interface IMaintainRecordView { + void obtainRecordResult(MaintainRecordBean resultBean); + + void showProgress(); + + void hideProgress(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ISubmitMaintainView.java b/app/src/main/java/com/casic/dcms/mvp/view/ISubmitMaintainView.java new file mode 100644 index 0000000..75a0629 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/ISubmitMaintainView.java @@ -0,0 +1,13 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.ActionResultBean; + +public interface ISubmitMaintainView { + void showProgress(); + + void hideProgress(); + + void obtainSubmitResult(ActionResultBean resultBean); + + void obtainDataFail(); +} diff --git a/app/src/main/java/com/casic/dcms/ui/BridgeMaintainActivity.java b/app/src/main/java/com/casic/dcms/ui/BridgeMaintainActivity.java new file mode 100644 index 0000000..84b0eef --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/BridgeMaintainActivity.java @@ -0,0 +1,239 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.content.Intent; +import android.location.Location; +import android.text.TextUtils; +import android.view.View; +import android.widget.EditText; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.amap.api.services.core.LatLonPoint; +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.mvp.presenter.SubmitMaintainPresenterImpl; +import com.casic.dcms.mvp.view.ISubmitMaintainView; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; +import com.casic.dcms.utils.SaveKeyValues; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.utils.callback.IAddressListener; +import com.casic.dcms.utils.callback.ILocationListener; +import com.casic.dcms.widgets.SignInDialog; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.util.Timer; +import java.util.TimerTask; + +import butterknife.BindView; +import butterknife.OnClick; + +public class BridgeMaintainActivity extends BaseActivity implements View.OnClickListener, ISubmitMaintainView { + + private static final String TAG = "BridgeMaintainActivity"; + private Context context = this; + @BindView(R.id.topLayout) + QMUITopBarLayout topLayout; + @BindView(R.id.bridgeNameView) + TextView bridgeNameView; + @BindView(R.id.maintainView) + TextView maintainView; + @BindView(R.id.maintainDateView) + TextView maintainDateView; + @BindView(R.id.liablePersonView) + TextView liablePersonView; + @BindView(R.id.submitButton) + QMUIRoundButton submitButton; + //以下非必填 + @BindView(R.id.remarksView) + EditText remarksView; + + private String bridgeId = ""; + private SubmitMaintainPresenterImpl submitMaintainPresenter; + + @Override + public int initLayoutView() { + return R.layout.activity_bridge; + } + + @Override + protected void setupTopBarLayout() { + topLayout.setTitle("路桥养护").setTextColor(ContextCompat.getColor(this, R.color.white)); + topLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + topLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + topLayout.addRightImageButton(R.drawable.ic_more, 2).setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + startActivity(new Intent(context, MaintainRecordActivity.class)); + } + }); + } + + @Override + public void initData() { + submitMaintainPresenter = new SubmitMaintainPresenterImpl(this); + } + + @Override + public void initEvent() { + submitButton.setChangeAlphaWhenPress(true); + liablePersonView.setText(StringHelper.getUserAccount()); + liablePersonView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); + + new Timer().schedule(new TimerTask() { + @Override + public void run() { + String systemDate = TimeOrDateUtil.timestampToDate(System.currentTimeMillis()); + maintainDateView.post(new Runnable() { + @Override + public void run() { + maintainDateView.setText(systemDate); + maintainDateView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); + } + }); + } + }, 0, 1000); + } + + @OnClick({R.id.bridgeLayout, R.id.maintainContentLayout, R.id.submitButton}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.bridgeLayout: + new QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("选择桥梁") + .addItem("永胜桥") + .addItem("黄洲桥") + .addItem("光明桥") + .setGravityCenter(true) + .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + + bridgeId = String.valueOf((1 + position)); + bridgeNameView.setText(tag); + bridgeNameView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); + } + }).build().show(); + break; + case R.id.maintainContentLayout: + new QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("养护内容") + .addItem("日常养护,无异常") + .addItem("清除表面污垢") + .addItem("修补混凝土空洞、破损、剥落和表面风化及裂缝") + .addItem("清除暴露钢筋的锈渍、恢复保护层") + .addItem("处理各种横、纵向构件的开裂、开焊和锈蚀") + .setGravityCenter(true) + .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + + maintainView.setText(tag); + maintainView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); + } + }).build().show(); + break; + case R.id.submitButton: + //获取定位信息 + LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + + } + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + if (aMapLocation != null) { + if (TextUtils.isEmpty(bridgeId)) { + ToastHelper.showToast("请先选择养护的桥梁", ToastHelper.WARING); + return; + } + String maintainContent = maintainView.getText().toString(); + if (TextUtils.isEmpty(maintainContent)) { + ToastHelper.showToast("请选择养护的内容", ToastHelper.WARING); + return; + } + + double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + LatLonPoint latLonPoint = new LatLonPoint(gcjToWgs[1], gcjToWgs[0]); + LocationHelper.antiCodingLocation(context, latLonPoint, new IAddressListener() { + @Override + public void onGetAddress(String address) { + SaveKeyValues.putValue("maintainAddress", address); + } + }); + //提交养护记录 + submitMaintainPresenter.onReadyRetrofitRequest(bridgeId, maintainContent, + maintainDateView.getText().toString(), + StringHelper.getUserId(), String.valueOf(gcjToWgs[0]), + String.valueOf(gcjToWgs[1]), + StringHelper.filterString(remarksView.getText().toString())); + } else { + ToastHelper.showToast("当前信号较弱,无法提交养护记录", ToastHelper.WARING); + } + } + }, true); + break; + default: + throw new IllegalStateException("Unexpected value: " + v.getId()); + } + } + + @Override + public void showProgress() { + OtherUtils.showLoadingDialog(this, "养护记录签到中,请稍后"); + } + + @Override + public void hideProgress() { + OtherUtils.dismissLoadingDialog(); + } + + @Override + public void obtainSubmitResult(ActionResultBean resultBean) { + String maintainAddress = (String) SaveKeyValues.getValue("maintainAddress", ""); + if (resultBean.isSuccess()) { + new SignInDialog.Builder() + .setContext(this) + .setTitle("桥梁养护记录提交成功") + .setAddress(maintainAddress.equals("") ? "详细位置解析失败" : maintainAddress) + .setOnDialogClickListener(new SignInDialog.OnDialogClickListener() { + @Override + public void onViewClick() { + startActivity(new Intent(context, MaintainRecordActivity.class)); + finish(); + } + }).build().show(); + } + } + + @Override + public void obtainDataFail() { + ToastHelper.showToast("操作失败", ToastHelper.ERROR); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (submitMaintainPresenter != null) { + submitMaintainPresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java index 7221e95..381b704 100644 --- a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java @@ -25,6 +25,7 @@ import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.datepicker.DatePopupWindow; +import com.qmuiteam.qmui.widget.QMUIEmptyView; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; @@ -38,8 +39,8 @@ public class CleanResultListActivity extends BaseCaseActivity implements ICleanToiletRecordView { - // @BindView(R.id.emptyView) -// QMUIEmptyView emptyView; + @BindView(R.id.emptyView) + QMUIEmptyView emptyView; @BindView(R.id.dateView) TextView dateView; @BindView(R.id.calendarView) @@ -126,7 +127,6 @@ @Override public void obtainCleanRecordResult(CleanRecordBean resultBean) { -// Log.d("TAG", "obtainCleanRecordResult: " + new Gson().toJson(resultBean)); if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); if (isRefresh) { @@ -175,9 +175,9 @@ } else { //首次加载数据 if (resultActivity.dataBeans.size() == 0) { -// resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); + resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); } else { -// resultActivity.emptyView.hide(); + resultActivity.emptyView.hide(); resultActivity.adapter = new RecordListAdapter(resultActivity, resultActivity.dataBeans); resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); diff --git a/app/src/main/java/com/casic/dcms/ui/MaintainRecordActivity.java b/app/src/main/java/com/casic/dcms/ui/MaintainRecordActivity.java new file mode 100644 index 0000000..05c41c9 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/MaintainRecordActivity.java @@ -0,0 +1,194 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.content.Intent; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.MaintainRecordAdapter; +import com.casic.dcms.base.BaseCaseActivity; +import com.casic.dcms.bean.MaintainRecordBean; +import com.casic.dcms.mvp.presenter.MaintainRecordPresenterImpl; +import com.casic.dcms.mvp.view.IMaintainRecordView; +import com.casic.dcms.utils.CalendarUtil; +import com.casic.dcms.utils.OtherUtils; +import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.datepicker.DatePopupWindow; +import com.qmuiteam.qmui.widget.QMUIEmptyView; +import com.scwang.smartrefresh.layout.SmartRefreshLayout; +import com.scwang.smartrefresh.layout.api.RefreshLayout; +import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; +import com.scwang.smartrefresh.layout.listener.OnRefreshListener; + +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class MaintainRecordActivity extends BaseCaseActivity implements IMaintainRecordView { + + @BindView(R.id.emptyView) + QMUIEmptyView emptyView; + @BindView(R.id.dateView) + TextView dateView; + @BindView(R.id.calendarView) + ImageView calendarView; + @BindView(R.id.refreshLayout) + SmartRefreshLayout refreshLayout; + @BindView(R.id.recordRecyclerView) + RecyclerView recordRecyclerView; + + private Context context = this; + private int pageIndex = 1; + private boolean isRefresh, isLoadMore = false; + private WeakReferenceHandler weakReferenceHandler; + private List dataBeans = new ArrayList<>(); + private MaintainRecordPresenterImpl recordPresenter; + private MaintainRecordAdapter adapter; + private int startGroup = -1; + private int endGroup = -1; + private int startChild = -1; + private int endChild = -1; + + @Override + protected String setTitleName() { + return "桥梁养护记录"; + } + + @Override + public int initLayoutView() { + return R.layout.activity_maintain_record; + } + + @Override + public void initData() { + weakReferenceHandler = new WeakReferenceHandler(this); + recordPresenter = new MaintainRecordPresenterImpl(this); + recordPresenter.onReadyRetrofitRequest("", "", pageIndex); + } + + @Override + public void initEvent() { + calendarView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + new DatePopupWindow + .Builder(MaintainRecordActivity.this, CalendarUtil.obtainLastTwoMonth(), v)//初始化 + .setInitSelect(startGroup, startChild, endGroup, endChild)//设置上一次选中的区间状态 + .setInitDay(true)//默认为true,UI内容为共几天、开始、结束;当为false时,UI内容为共几晚、入住、离开 + .setDateOnClickListener(new DatePopupWindow.DateOnClickListener() {//设置监听 + //点击完成按钮后回调返回方法 + @Override + public void getDate(String startDate, String endDate, int startGroupPosition, int + startChildPosition, int endGroupPosition, int endChildPosition) { + startGroup = startGroupPosition;//开始月份位置 + startChild = startChildPosition;//开始对应月份中日的位置 + endGroup = endGroupPosition;//结束月份位置 + endChild = endChildPosition;//结束对应月份中日的位置 + dateView.setText(startDate + "~" + endDate); + recordPresenter.onReadyRetrofitRequest(startDate, endDate, pageIndex); + } + }).builder(); + } + }); + refreshLayout.setOnRefreshListener(new OnRefreshListener() { + @Override + public void onRefresh(@NonNull final RefreshLayout refreshLayout) { + isRefresh = true; + //刷新之后页码重置 + pageIndex = 1; + recordPresenter.onReadyRetrofitRequest("", "", pageIndex); + } + }); + refreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() { + @Override + public void onLoadMore(@NonNull final RefreshLayout refreshLayout) { + isLoadMore = true; + pageIndex++; + recordPresenter.onReadyRetrofitRequest("", "", pageIndex); + } + }); + } + + @Override + public void obtainRecordResult(MaintainRecordBean resultBean) { + if (resultBean.isSuccess()) { + List dataRows = resultBean.getData().getRows(); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + ToastHelper.showToast("到底了,别拉了", ToastHelper.INFO); + } + dataBeans.addAll(dataRows); + refreshLayout.finishLoadMore(); + isLoadMore = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(20210622); + } + } + + @Override + public void showProgress() { + OtherUtils.showLoadingDialog(this, "查询记录中,请稍后"); + } + + @Override + public void hideProgress() { + OtherUtils.dismissLoadingDialog(); + } + + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(MaintainRecordActivity activity) { + reference = new WeakReference<>(activity); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + MaintainRecordActivity resultActivity = reference.get(); + if (msg.what == 20210622) { + if (resultActivity.isRefresh || resultActivity.isLoadMore) { + resultActivity.adapter.notifyDataSetChanged(); + } else { + //首次加载数据 + if (resultActivity.dataBeans.size() == 0) { + resultActivity.emptyView.show("抱歉,没有查到相关养护记录", null); + } else { + resultActivity.emptyView.hide(); + resultActivity.adapter = new MaintainRecordAdapter(resultActivity, resultActivity.dataBeans); + resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); + resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); + resultActivity.recordRecyclerView.setAdapter(resultActivity.adapter); + } + } + } + } + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (recordPresenter != null) { + recordPresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/PipelineManagerActivity.java b/app/src/main/java/com/casic/dcms/ui/PipelineManagerActivity.java new file mode 100644 index 0000000..fa77936 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/PipelineManagerActivity.java @@ -0,0 +1,27 @@ +package com.casic.dcms.ui; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; + +public class PipelineManagerActivity extends BaseActivity { + + @Override + public int initLayoutView() { + return R.layout.activity_pipe; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java index ac995d3..4959539 100644 --- a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java @@ -300,7 +300,8 @@ @Override public void onAMapLocationGet(AMapLocation aMapLocation) { if (aMapLocation != null) { - Point point = new Point(aMapLocation.getLongitude(), aMapLocation.getLatitude(), mapView.getSpatialReference()); + double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); mapView.setViewpointCenterAsync(point, 1200);//标注到指定经纬度并放大地图显示 //添加图片Marker addPictureMarker(point); @@ -311,11 +312,9 @@ ToastHelper.showToast("公厕标识不能为空", ToastHelper.WARING); return; } - double longitude = aMapLocation.getLongitude(); - double latitude = aMapLocation.getLatitude(); String cleanTime = TimeOrDateUtil.timestampToCompleteDate(System.currentTimeMillis()); cleanToiletPresenter.onReadyRetrofitRequest(toiletId, StringHelper.getUserId(), - String.valueOf(longitude), String.valueOf(latitude), cleanTime, imagePath, + String.valueOf(gcjToWgs[0]), String.valueOf(gcjToWgs[1]), cleanTime, imagePath, StringHelper.filterString(workContentView.getText().toString())); } } @@ -416,15 +415,18 @@ @Override public void obtainCleanResult(ActionResultBean resultBean) { -// Log.d(TAG, "obtainCleanResult: " + new Gson().toJson(resultBean)); if (resultBean.isSuccess()) { - new SignInDialog.Builder().setContext(this).setAddress(locationStreetView.getText().toString()).setOnDialogClickListener(new SignInDialog.OnDialogClickListener() { - @Override - public void onViewClick() { - startActivity(new Intent(context, CleanResultListActivity.class)); - PublicToiletActivity.this.finish(); - } - }).build().show(); + new SignInDialog.Builder() + .setContext(this) + .setTitle("保洁保卡成功") + .setAddress(locationStreetView.getText().toString()) + .setOnDialogClickListener(new SignInDialog.OnDialogClickListener() { + @Override + public void onViewClick() { + startActivity(new Intent(context, CleanResultListActivity.class)); + PublicToiletActivity.this.finish(); + } + }).build().show(); } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java index 03438b0..42d29a4 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java @@ -18,6 +18,7 @@ import com.casic.dcms.mvp.presenter.UserDataPresenterImpl; import com.casic.dcms.mvp.view.IHomePageView; import com.casic.dcms.mvp.view.IUserDataView; +import com.casic.dcms.ui.BridgeMaintainActivity; import com.casic.dcms.ui.CaseCheckActivity; import com.casic.dcms.ui.CaseHandleActivity; import com.casic.dcms.ui.CaseOnMapActivity; @@ -32,6 +33,7 @@ import com.casic.dcms.ui.OvertimeCaseActivity; import com.casic.dcms.ui.PackageHandleActivity; import com.casic.dcms.ui.PersonOnlineActivity; +import com.casic.dcms.ui.PipelineManagerActivity; import com.casic.dcms.ui.PublicToiletActivity; import com.casic.dcms.ui.UrgentCaseActivity; import com.casic.dcms.utils.StringHelper; @@ -161,6 +163,12 @@ case "部门处置": intent.setClass(context, DeptHandleActivity.class); break; + case "路桥养护": + intent.setClass(context, BridgeMaintainActivity.class); + break; + case "管网管理": + intent.setClass(context, PipelineManagerActivity.class); + break; default: break; } diff --git a/app/src/main/java/com/casic/dcms/utils/Constant.java b/app/src/main/java/com/casic/dcms/utils/Constant.java index d9c1d60..9bbbdb0 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -35,7 +35,8 @@ public static final String IP_KEY = "BASE_IP"; - public static final long FIVE_YEARS = 5L * 365 * 1000 * 60 * 60 * 24L; + public static final long FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L; + public static final long ONE_YEAR = 365 * 60 * 60 * 24 * 1000L; public static final long IMAGE_MINUS_SIZE = 100 * 1024; public static final long HTTP_TIMEOUT = 30L; public static final int PERMISSIONS_CODE = 999; diff --git a/app/build.gradle b/app/build.gradle index 6f0b518..bcfdc0d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ applicationId "com.casic.dcms" minSdkVersion 21 targetSdkVersion 30 - versionCode 19 - versionName "v1.0.0.11" + versionCode 20 + versionName "v1.0.0.12" ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 68f46c9..3090a91 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -89,7 +89,10 @@ - + + + + { + + private Context context; + private List dataRows; + private LayoutInflater layoutInflater; + private QMUITipDialog.Builder dialogBuilder; + + public MaintainRecordAdapter(Context context, List dataRows) { + this.context = context; + this.dataRows = dataRows; + layoutInflater = LayoutInflater.from(context); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = layoutInflater.inflate(R.layout.item_maintain_recycleview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + holder.bindView(dataRows.get(position)); + } + + @Override + public int getItemCount() { + return dataRows.size(); + } + + class ItemViewHolder extends RecyclerView.ViewHolder { + + private TextView bridgeNameView; + private ImageView descriptionImageView; + private TextView maintainContentView; + private TextView maintainTimeView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + bridgeNameView = itemView.findViewById(R.id.bridgeNameView); + descriptionImageView = itemView.findViewById(R.id.descriptionImageView); + maintainContentView = itemView.findViewById(R.id.maintainContentView); + maintainTimeView = itemView.findViewById(R.id.maintainTimeView); + } + + void bindView(MaintainRecordBean.DataBean.RowsBean rowsBean) { + bridgeNameView.setText(rowsBean.getBridgeName()); + String description = rowsBean.getDescription(); + if (TextUtils.isEmpty(description)) { + descriptionImageView.setVisibility(View.GONE); + } else { + descriptionImageView.setVisibility(View.VISIBLE); + descriptionImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + QMUITipDialog tipDialog = new QMUITipDialog.Builder(context) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_NOTHING) + .setTipWord(description) + .create(); + tipDialog.show(); + descriptionImageView.postDelayed(new Runnable() { + @Override + public void run() { + tipDialog.dismiss(); + } + }, 2000); + } + }); + } + maintainContentView.setText(rowsBean.getContent()); + maintainTimeView.setText(rowsBean.getMaintainTimeStr()); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java b/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java new file mode 100644 index 0000000..ded4fe1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java @@ -0,0 +1,41 @@ +package com.casic.dcms.bean; + +public class MaintainContentBean { + + private int code; + private String data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java b/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java new file mode 100644 index 0000000..2beea74 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java @@ -0,0 +1,301 @@ +package com.casic.dcms.bean; + +import java.util.List; + +public class MaintainRecordBean { + + private int code; + private DataBean data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + + private int total; + private List rows; + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public static class RowsBean { + /** + * bridgeId : 1 + * bridgeName : 永胜桥 + * category : 桥梁 + * code : 1624359572304 + * content : 日常养护,无异常 + * deptid : 1344110695992258561 + * description : + * id : 1407292162033041409 + * latitude : 39.914705918747295 + * longitude : 116.26295490330527 + * maintainTime : 2021-06-22 00:00:00 + * maintainTimeStr : 2021-06-22 + * name : + * personId : 1344179277212151809 + * personName : + * phone : + * status : + * statusName : + * tender : + * tenderCompany : + * ts : 2021-06-22 + * type : + * typeName : + */ + + private String bridgeId; + private String bridgeName; + private String category; + private String code; + private String content; + private String deptid; + private String description; + private String id; + private String latitude; + private String longitude; + private String maintainTime; + private String maintainTimeStr; + private String name; + private String personId; + private String personName; + private String phone; + private String status; + private String statusName; + private String tender; + private String tenderCompany; + private String ts; + private String type; + private String typeName; + + public String getBridgeId() { + return bridgeId; + } + + public void setBridgeId(String bridgeId) { + this.bridgeId = bridgeId; + } + + public String getBridgeName() { + return bridgeName; + } + + public void setBridgeName(String bridgeName) { + this.bridgeName = bridgeName; + } + + public String getCategory() { + return category; + } + + public void setCategory(String category) { + this.category = category; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLatitude() { + return latitude; + } + + public void setLatitude(String latitude) { + this.latitude = latitude; + } + + public String getLongitude() { + return longitude; + } + + public void setLongitude(String longitude) { + this.longitude = longitude; + } + + public String getMaintainTime() { + return maintainTime; + } + + public void setMaintainTime(String maintainTime) { + this.maintainTime = maintainTime; + } + + public String getMaintainTimeStr() { + return maintainTimeStr; + } + + public void setMaintainTimeStr(String maintainTimeStr) { + this.maintainTimeStr = maintainTimeStr; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPersonId() { + return personId; + } + + public void setPersonId(String personId) { + this.personId = personId; + } + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + 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 getTender() { + return tender; + } + + public void setTender(String tender) { + this.tender = tender; + } + + public String getTenderCompany() { + return tenderCompany; + } + + public void setTenderCompany(String tenderCompany) { + this.tenderCompany = tenderCompany; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getTypeName() { + return typeName; + } + + public void setTypeName(String typeName) { + this.typeName = typeName; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java new file mode 100644 index 0000000..4f7a588 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IMaintainRecordModel { + Subscription sendRetrofitRequest(String startDate, String endDate, int offset); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java new file mode 100644 index 0000000..dce3f91 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java @@ -0,0 +1,8 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ISubmitMaintainModel { + Subscription sendRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/MaintainRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/MaintainRecordModelImpl.java new file mode 100644 index 0000000..35fd486 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/MaintainRecordModelImpl.java @@ -0,0 +1,50 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.MaintainRecordBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class MaintainRecordModelImpl implements IMaintainRecordModel { + + private OnGetRecordListener listener; + + public MaintainRecordModelImpl(OnGetRecordListener recordListener) { + this.listener = recordListener; + } + + public interface OnGetRecordListener { + void onSuccess(MaintainRecordBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String startDate, String endDate, int offset) { + Observable observable = RetrofitServiceManager.getMaintainRecordResult(startDate, endDate, offset); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (e.getCause() != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(MaintainRecordBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java index 06f6fb4..9e2666d 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java @@ -29,7 +29,7 @@ @Override public Subscription sendRetrofitRequest() { - Observable observable = RetrofitServiceManager.getProcessPerson(); + Observable observable = RetrofitServiceManager.getProcessPersonResult(); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/SubmitMaintainModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/SubmitMaintainModelImpl.java new file mode 100644 index 0000000..2924fbe --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/SubmitMaintainModelImpl.java @@ -0,0 +1,52 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class SubmitMaintainModelImpl implements ISubmitMaintainModel { + + private OnSubmitListener listener; + + public SubmitMaintainModelImpl(OnSubmitListener submitListener) { + this.listener = submitListener; + } + + public interface OnSubmitListener { + void onSuccess(ActionResultBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description) { + Observable observable = RetrofitServiceManager.getAddMaintainRecordResult(bridgeId, + content, maintainTime, personId, longitude, latitude, description); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (e.getCause() != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(ActionResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IMaintainRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IMaintainRecordPresenter.java new file mode 100644 index 0000000..938a484 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IMaintainRecordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IMaintainRecordPresenter { + void onReadyRetrofitRequest(String startDate, String endDate, int offset); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ISubmitMaintainPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ISubmitMaintainPresenter.java new file mode 100644 index 0000000..511e717 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ISubmitMaintainPresenter.java @@ -0,0 +1,8 @@ +package com.casic.dcms.mvp.presenter; + +public interface ISubmitMaintainPresenter { + void onReadyRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/MaintainRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/MaintainRecordPresenterImpl.java new file mode 100644 index 0000000..fd99e30 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/MaintainRecordPresenterImpl.java @@ -0,0 +1,39 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.MaintainRecordBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.MaintainRecordModelImpl; +import com.casic.dcms.mvp.view.IMaintainRecordView; + +public class MaintainRecordPresenterImpl extends BasePresenter implements IMaintainRecordPresenter, MaintainRecordModelImpl.OnGetRecordListener { + + private IMaintainRecordView view; + private MaintainRecordModelImpl model; + + public MaintainRecordPresenterImpl(IMaintainRecordView cleanToiletRecordView) { + this.view = cleanToiletRecordView; + model = new MaintainRecordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String startDate, String endDate, int offset) { + view.showProgress(); + addSubscription(model.sendRetrofitRequest(startDate, endDate, offset)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(MaintainRecordBean result) { + view.hideProgress(); + view.obtainRecordResult(result); + } + + @Override + public void onFailure(Throwable throwable) { + view.hideProgress(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/SubmitMaintainPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/SubmitMaintainPresenterImpl.java new file mode 100644 index 0000000..7722427 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/SubmitMaintainPresenterImpl.java @@ -0,0 +1,42 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.SubmitMaintainModelImpl; +import com.casic.dcms.mvp.view.ISubmitMaintainView; + +public class SubmitMaintainPresenterImpl extends BasePresenter implements ISubmitMaintainPresenter, SubmitMaintainModelImpl.OnSubmitListener { + + private ISubmitMaintainView view; + private SubmitMaintainModelImpl actionModel; + + public SubmitMaintainPresenterImpl(ISubmitMaintainView submitCaseView) { + this.view = submitCaseView; + actionModel = new SubmitMaintainModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description) { + view.showProgress(); + addSubscription(actionModel.sendRetrofitRequest(bridgeId, content, maintainTime, personId, longitude, + latitude, description)); + } + + @Override + public void onSuccess(ActionResultBean resultBean) { + view.hideProgress(); + view.obtainSubmitResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + view.hideProgress(); + view.obtainDataFail(); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IMaintainRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/IMaintainRecordView.java new file mode 100644 index 0000000..8ff5189 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IMaintainRecordView.java @@ -0,0 +1,11 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.MaintainRecordBean; + +public interface IMaintainRecordView { + void obtainRecordResult(MaintainRecordBean resultBean); + + void showProgress(); + + void hideProgress(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ISubmitMaintainView.java b/app/src/main/java/com/casic/dcms/mvp/view/ISubmitMaintainView.java new file mode 100644 index 0000000..75a0629 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/ISubmitMaintainView.java @@ -0,0 +1,13 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.ActionResultBean; + +public interface ISubmitMaintainView { + void showProgress(); + + void hideProgress(); + + void obtainSubmitResult(ActionResultBean resultBean); + + void obtainDataFail(); +} diff --git a/app/src/main/java/com/casic/dcms/ui/BridgeMaintainActivity.java b/app/src/main/java/com/casic/dcms/ui/BridgeMaintainActivity.java new file mode 100644 index 0000000..84b0eef --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/BridgeMaintainActivity.java @@ -0,0 +1,239 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.content.Intent; +import android.location.Location; +import android.text.TextUtils; +import android.view.View; +import android.widget.EditText; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.amap.api.services.core.LatLonPoint; +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.mvp.presenter.SubmitMaintainPresenterImpl; +import com.casic.dcms.mvp.view.ISubmitMaintainView; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; +import com.casic.dcms.utils.SaveKeyValues; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.utils.callback.IAddressListener; +import com.casic.dcms.utils.callback.ILocationListener; +import com.casic.dcms.widgets.SignInDialog; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.util.Timer; +import java.util.TimerTask; + +import butterknife.BindView; +import butterknife.OnClick; + +public class BridgeMaintainActivity extends BaseActivity implements View.OnClickListener, ISubmitMaintainView { + + private static final String TAG = "BridgeMaintainActivity"; + private Context context = this; + @BindView(R.id.topLayout) + QMUITopBarLayout topLayout; + @BindView(R.id.bridgeNameView) + TextView bridgeNameView; + @BindView(R.id.maintainView) + TextView maintainView; + @BindView(R.id.maintainDateView) + TextView maintainDateView; + @BindView(R.id.liablePersonView) + TextView liablePersonView; + @BindView(R.id.submitButton) + QMUIRoundButton submitButton; + //以下非必填 + @BindView(R.id.remarksView) + EditText remarksView; + + private String bridgeId = ""; + private SubmitMaintainPresenterImpl submitMaintainPresenter; + + @Override + public int initLayoutView() { + return R.layout.activity_bridge; + } + + @Override + protected void setupTopBarLayout() { + topLayout.setTitle("路桥养护").setTextColor(ContextCompat.getColor(this, R.color.white)); + topLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + topLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + topLayout.addRightImageButton(R.drawable.ic_more, 2).setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + startActivity(new Intent(context, MaintainRecordActivity.class)); + } + }); + } + + @Override + public void initData() { + submitMaintainPresenter = new SubmitMaintainPresenterImpl(this); + } + + @Override + public void initEvent() { + submitButton.setChangeAlphaWhenPress(true); + liablePersonView.setText(StringHelper.getUserAccount()); + liablePersonView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); + + new Timer().schedule(new TimerTask() { + @Override + public void run() { + String systemDate = TimeOrDateUtil.timestampToDate(System.currentTimeMillis()); + maintainDateView.post(new Runnable() { + @Override + public void run() { + maintainDateView.setText(systemDate); + maintainDateView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); + } + }); + } + }, 0, 1000); + } + + @OnClick({R.id.bridgeLayout, R.id.maintainContentLayout, R.id.submitButton}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.bridgeLayout: + new QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("选择桥梁") + .addItem("永胜桥") + .addItem("黄洲桥") + .addItem("光明桥") + .setGravityCenter(true) + .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + + bridgeId = String.valueOf((1 + position)); + bridgeNameView.setText(tag); + bridgeNameView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); + } + }).build().show(); + break; + case R.id.maintainContentLayout: + new QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("养护内容") + .addItem("日常养护,无异常") + .addItem("清除表面污垢") + .addItem("修补混凝土空洞、破损、剥落和表面风化及裂缝") + .addItem("清除暴露钢筋的锈渍、恢复保护层") + .addItem("处理各种横、纵向构件的开裂、开焊和锈蚀") + .setGravityCenter(true) + .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + + maintainView.setText(tag); + maintainView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); + } + }).build().show(); + break; + case R.id.submitButton: + //获取定位信息 + LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + + } + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + if (aMapLocation != null) { + if (TextUtils.isEmpty(bridgeId)) { + ToastHelper.showToast("请先选择养护的桥梁", ToastHelper.WARING); + return; + } + String maintainContent = maintainView.getText().toString(); + if (TextUtils.isEmpty(maintainContent)) { + ToastHelper.showToast("请选择养护的内容", ToastHelper.WARING); + return; + } + + double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + LatLonPoint latLonPoint = new LatLonPoint(gcjToWgs[1], gcjToWgs[0]); + LocationHelper.antiCodingLocation(context, latLonPoint, new IAddressListener() { + @Override + public void onGetAddress(String address) { + SaveKeyValues.putValue("maintainAddress", address); + } + }); + //提交养护记录 + submitMaintainPresenter.onReadyRetrofitRequest(bridgeId, maintainContent, + maintainDateView.getText().toString(), + StringHelper.getUserId(), String.valueOf(gcjToWgs[0]), + String.valueOf(gcjToWgs[1]), + StringHelper.filterString(remarksView.getText().toString())); + } else { + ToastHelper.showToast("当前信号较弱,无法提交养护记录", ToastHelper.WARING); + } + } + }, true); + break; + default: + throw new IllegalStateException("Unexpected value: " + v.getId()); + } + } + + @Override + public void showProgress() { + OtherUtils.showLoadingDialog(this, "养护记录签到中,请稍后"); + } + + @Override + public void hideProgress() { + OtherUtils.dismissLoadingDialog(); + } + + @Override + public void obtainSubmitResult(ActionResultBean resultBean) { + String maintainAddress = (String) SaveKeyValues.getValue("maintainAddress", ""); + if (resultBean.isSuccess()) { + new SignInDialog.Builder() + .setContext(this) + .setTitle("桥梁养护记录提交成功") + .setAddress(maintainAddress.equals("") ? "详细位置解析失败" : maintainAddress) + .setOnDialogClickListener(new SignInDialog.OnDialogClickListener() { + @Override + public void onViewClick() { + startActivity(new Intent(context, MaintainRecordActivity.class)); + finish(); + } + }).build().show(); + } + } + + @Override + public void obtainDataFail() { + ToastHelper.showToast("操作失败", ToastHelper.ERROR); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (submitMaintainPresenter != null) { + submitMaintainPresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java index 7221e95..381b704 100644 --- a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java @@ -25,6 +25,7 @@ import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.datepicker.DatePopupWindow; +import com.qmuiteam.qmui.widget.QMUIEmptyView; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; @@ -38,8 +39,8 @@ public class CleanResultListActivity extends BaseCaseActivity implements ICleanToiletRecordView { - // @BindView(R.id.emptyView) -// QMUIEmptyView emptyView; + @BindView(R.id.emptyView) + QMUIEmptyView emptyView; @BindView(R.id.dateView) TextView dateView; @BindView(R.id.calendarView) @@ -126,7 +127,6 @@ @Override public void obtainCleanRecordResult(CleanRecordBean resultBean) { -// Log.d("TAG", "obtainCleanRecordResult: " + new Gson().toJson(resultBean)); if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); if (isRefresh) { @@ -175,9 +175,9 @@ } else { //首次加载数据 if (resultActivity.dataBeans.size() == 0) { -// resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); + resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); } else { -// resultActivity.emptyView.hide(); + resultActivity.emptyView.hide(); resultActivity.adapter = new RecordListAdapter(resultActivity, resultActivity.dataBeans); resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); diff --git a/app/src/main/java/com/casic/dcms/ui/MaintainRecordActivity.java b/app/src/main/java/com/casic/dcms/ui/MaintainRecordActivity.java new file mode 100644 index 0000000..05c41c9 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/MaintainRecordActivity.java @@ -0,0 +1,194 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.content.Intent; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.MaintainRecordAdapter; +import com.casic.dcms.base.BaseCaseActivity; +import com.casic.dcms.bean.MaintainRecordBean; +import com.casic.dcms.mvp.presenter.MaintainRecordPresenterImpl; +import com.casic.dcms.mvp.view.IMaintainRecordView; +import com.casic.dcms.utils.CalendarUtil; +import com.casic.dcms.utils.OtherUtils; +import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.datepicker.DatePopupWindow; +import com.qmuiteam.qmui.widget.QMUIEmptyView; +import com.scwang.smartrefresh.layout.SmartRefreshLayout; +import com.scwang.smartrefresh.layout.api.RefreshLayout; +import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; +import com.scwang.smartrefresh.layout.listener.OnRefreshListener; + +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class MaintainRecordActivity extends BaseCaseActivity implements IMaintainRecordView { + + @BindView(R.id.emptyView) + QMUIEmptyView emptyView; + @BindView(R.id.dateView) + TextView dateView; + @BindView(R.id.calendarView) + ImageView calendarView; + @BindView(R.id.refreshLayout) + SmartRefreshLayout refreshLayout; + @BindView(R.id.recordRecyclerView) + RecyclerView recordRecyclerView; + + private Context context = this; + private int pageIndex = 1; + private boolean isRefresh, isLoadMore = false; + private WeakReferenceHandler weakReferenceHandler; + private List dataBeans = new ArrayList<>(); + private MaintainRecordPresenterImpl recordPresenter; + private MaintainRecordAdapter adapter; + private int startGroup = -1; + private int endGroup = -1; + private int startChild = -1; + private int endChild = -1; + + @Override + protected String setTitleName() { + return "桥梁养护记录"; + } + + @Override + public int initLayoutView() { + return R.layout.activity_maintain_record; + } + + @Override + public void initData() { + weakReferenceHandler = new WeakReferenceHandler(this); + recordPresenter = new MaintainRecordPresenterImpl(this); + recordPresenter.onReadyRetrofitRequest("", "", pageIndex); + } + + @Override + public void initEvent() { + calendarView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + new DatePopupWindow + .Builder(MaintainRecordActivity.this, CalendarUtil.obtainLastTwoMonth(), v)//初始化 + .setInitSelect(startGroup, startChild, endGroup, endChild)//设置上一次选中的区间状态 + .setInitDay(true)//默认为true,UI内容为共几天、开始、结束;当为false时,UI内容为共几晚、入住、离开 + .setDateOnClickListener(new DatePopupWindow.DateOnClickListener() {//设置监听 + //点击完成按钮后回调返回方法 + @Override + public void getDate(String startDate, String endDate, int startGroupPosition, int + startChildPosition, int endGroupPosition, int endChildPosition) { + startGroup = startGroupPosition;//开始月份位置 + startChild = startChildPosition;//开始对应月份中日的位置 + endGroup = endGroupPosition;//结束月份位置 + endChild = endChildPosition;//结束对应月份中日的位置 + dateView.setText(startDate + "~" + endDate); + recordPresenter.onReadyRetrofitRequest(startDate, endDate, pageIndex); + } + }).builder(); + } + }); + refreshLayout.setOnRefreshListener(new OnRefreshListener() { + @Override + public void onRefresh(@NonNull final RefreshLayout refreshLayout) { + isRefresh = true; + //刷新之后页码重置 + pageIndex = 1; + recordPresenter.onReadyRetrofitRequest("", "", pageIndex); + } + }); + refreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() { + @Override + public void onLoadMore(@NonNull final RefreshLayout refreshLayout) { + isLoadMore = true; + pageIndex++; + recordPresenter.onReadyRetrofitRequest("", "", pageIndex); + } + }); + } + + @Override + public void obtainRecordResult(MaintainRecordBean resultBean) { + if (resultBean.isSuccess()) { + List dataRows = resultBean.getData().getRows(); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + ToastHelper.showToast("到底了,别拉了", ToastHelper.INFO); + } + dataBeans.addAll(dataRows); + refreshLayout.finishLoadMore(); + isLoadMore = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(20210622); + } + } + + @Override + public void showProgress() { + OtherUtils.showLoadingDialog(this, "查询记录中,请稍后"); + } + + @Override + public void hideProgress() { + OtherUtils.dismissLoadingDialog(); + } + + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(MaintainRecordActivity activity) { + reference = new WeakReference<>(activity); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + MaintainRecordActivity resultActivity = reference.get(); + if (msg.what == 20210622) { + if (resultActivity.isRefresh || resultActivity.isLoadMore) { + resultActivity.adapter.notifyDataSetChanged(); + } else { + //首次加载数据 + if (resultActivity.dataBeans.size() == 0) { + resultActivity.emptyView.show("抱歉,没有查到相关养护记录", null); + } else { + resultActivity.emptyView.hide(); + resultActivity.adapter = new MaintainRecordAdapter(resultActivity, resultActivity.dataBeans); + resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); + resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); + resultActivity.recordRecyclerView.setAdapter(resultActivity.adapter); + } + } + } + } + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (recordPresenter != null) { + recordPresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/PipelineManagerActivity.java b/app/src/main/java/com/casic/dcms/ui/PipelineManagerActivity.java new file mode 100644 index 0000000..fa77936 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/PipelineManagerActivity.java @@ -0,0 +1,27 @@ +package com.casic.dcms.ui; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; + +public class PipelineManagerActivity extends BaseActivity { + + @Override + public int initLayoutView() { + return R.layout.activity_pipe; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java index ac995d3..4959539 100644 --- a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java @@ -300,7 +300,8 @@ @Override public void onAMapLocationGet(AMapLocation aMapLocation) { if (aMapLocation != null) { - Point point = new Point(aMapLocation.getLongitude(), aMapLocation.getLatitude(), mapView.getSpatialReference()); + double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); mapView.setViewpointCenterAsync(point, 1200);//标注到指定经纬度并放大地图显示 //添加图片Marker addPictureMarker(point); @@ -311,11 +312,9 @@ ToastHelper.showToast("公厕标识不能为空", ToastHelper.WARING); return; } - double longitude = aMapLocation.getLongitude(); - double latitude = aMapLocation.getLatitude(); String cleanTime = TimeOrDateUtil.timestampToCompleteDate(System.currentTimeMillis()); cleanToiletPresenter.onReadyRetrofitRequest(toiletId, StringHelper.getUserId(), - String.valueOf(longitude), String.valueOf(latitude), cleanTime, imagePath, + String.valueOf(gcjToWgs[0]), String.valueOf(gcjToWgs[1]), cleanTime, imagePath, StringHelper.filterString(workContentView.getText().toString())); } } @@ -416,15 +415,18 @@ @Override public void obtainCleanResult(ActionResultBean resultBean) { -// Log.d(TAG, "obtainCleanResult: " + new Gson().toJson(resultBean)); if (resultBean.isSuccess()) { - new SignInDialog.Builder().setContext(this).setAddress(locationStreetView.getText().toString()).setOnDialogClickListener(new SignInDialog.OnDialogClickListener() { - @Override - public void onViewClick() { - startActivity(new Intent(context, CleanResultListActivity.class)); - PublicToiletActivity.this.finish(); - } - }).build().show(); + new SignInDialog.Builder() + .setContext(this) + .setTitle("保洁保卡成功") + .setAddress(locationStreetView.getText().toString()) + .setOnDialogClickListener(new SignInDialog.OnDialogClickListener() { + @Override + public void onViewClick() { + startActivity(new Intent(context, CleanResultListActivity.class)); + PublicToiletActivity.this.finish(); + } + }).build().show(); } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java index 03438b0..42d29a4 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java @@ -18,6 +18,7 @@ import com.casic.dcms.mvp.presenter.UserDataPresenterImpl; import com.casic.dcms.mvp.view.IHomePageView; import com.casic.dcms.mvp.view.IUserDataView; +import com.casic.dcms.ui.BridgeMaintainActivity; import com.casic.dcms.ui.CaseCheckActivity; import com.casic.dcms.ui.CaseHandleActivity; import com.casic.dcms.ui.CaseOnMapActivity; @@ -32,6 +33,7 @@ import com.casic.dcms.ui.OvertimeCaseActivity; import com.casic.dcms.ui.PackageHandleActivity; import com.casic.dcms.ui.PersonOnlineActivity; +import com.casic.dcms.ui.PipelineManagerActivity; import com.casic.dcms.ui.PublicToiletActivity; import com.casic.dcms.ui.UrgentCaseActivity; import com.casic.dcms.utils.StringHelper; @@ -161,6 +163,12 @@ case "部门处置": intent.setClass(context, DeptHandleActivity.class); break; + case "路桥养护": + intent.setClass(context, BridgeMaintainActivity.class); + break; + case "管网管理": + intent.setClass(context, PipelineManagerActivity.class); + break; default: break; } diff --git a/app/src/main/java/com/casic/dcms/utils/Constant.java b/app/src/main/java/com/casic/dcms/utils/Constant.java index d9c1d60..9bbbdb0 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -35,7 +35,8 @@ public static final String IP_KEY = "BASE_IP"; - public static final long FIVE_YEARS = 5L * 365 * 1000 * 60 * 60 * 24L; + public static final long FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L; + public static final long ONE_YEAR = 365 * 60 * 60 * 24 * 1000L; public static final long IMAGE_MINUS_SIZE = 100 * 1024; public static final long HTTP_TIMEOUT = 30L; public static final int PERMISSIONS_CODE = 999; diff --git a/app/src/main/java/com/casic/dcms/utils/LocationHelper.java b/app/src/main/java/com/casic/dcms/utils/LocationHelper.java index 8d95580..79aedbf 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocationHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/LocationHelper.java @@ -40,7 +40,6 @@ private static final double a = 6378245.0; // a: 卫星椭球坐标投影到平面地图坐标系的投影因子。 private static final double ee = 0.00669342162296594323; // ee: 椭球的偏心率平方。 - /** * 高德sdk定位 */ diff --git a/app/build.gradle b/app/build.gradle index 6f0b518..bcfdc0d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ applicationId "com.casic.dcms" minSdkVersion 21 targetSdkVersion 30 - versionCode 19 - versionName "v1.0.0.11" + versionCode 20 + versionName "v1.0.0.12" ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 68f46c9..3090a91 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -89,7 +89,10 @@ - + + + + { + + private Context context; + private List dataRows; + private LayoutInflater layoutInflater; + private QMUITipDialog.Builder dialogBuilder; + + public MaintainRecordAdapter(Context context, List dataRows) { + this.context = context; + this.dataRows = dataRows; + layoutInflater = LayoutInflater.from(context); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = layoutInflater.inflate(R.layout.item_maintain_recycleview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + holder.bindView(dataRows.get(position)); + } + + @Override + public int getItemCount() { + return dataRows.size(); + } + + class ItemViewHolder extends RecyclerView.ViewHolder { + + private TextView bridgeNameView; + private ImageView descriptionImageView; + private TextView maintainContentView; + private TextView maintainTimeView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + bridgeNameView = itemView.findViewById(R.id.bridgeNameView); + descriptionImageView = itemView.findViewById(R.id.descriptionImageView); + maintainContentView = itemView.findViewById(R.id.maintainContentView); + maintainTimeView = itemView.findViewById(R.id.maintainTimeView); + } + + void bindView(MaintainRecordBean.DataBean.RowsBean rowsBean) { + bridgeNameView.setText(rowsBean.getBridgeName()); + String description = rowsBean.getDescription(); + if (TextUtils.isEmpty(description)) { + descriptionImageView.setVisibility(View.GONE); + } else { + descriptionImageView.setVisibility(View.VISIBLE); + descriptionImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + QMUITipDialog tipDialog = new QMUITipDialog.Builder(context) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_NOTHING) + .setTipWord(description) + .create(); + tipDialog.show(); + descriptionImageView.postDelayed(new Runnable() { + @Override + public void run() { + tipDialog.dismiss(); + } + }, 2000); + } + }); + } + maintainContentView.setText(rowsBean.getContent()); + maintainTimeView.setText(rowsBean.getMaintainTimeStr()); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java b/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java new file mode 100644 index 0000000..ded4fe1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java @@ -0,0 +1,41 @@ +package com.casic.dcms.bean; + +public class MaintainContentBean { + + private int code; + private String data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java b/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java new file mode 100644 index 0000000..2beea74 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java @@ -0,0 +1,301 @@ +package com.casic.dcms.bean; + +import java.util.List; + +public class MaintainRecordBean { + + private int code; + private DataBean data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + + private int total; + private List rows; + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public static class RowsBean { + /** + * bridgeId : 1 + * bridgeName : 永胜桥 + * category : 桥梁 + * code : 1624359572304 + * content : 日常养护,无异常 + * deptid : 1344110695992258561 + * description : + * id : 1407292162033041409 + * latitude : 39.914705918747295 + * longitude : 116.26295490330527 + * maintainTime : 2021-06-22 00:00:00 + * maintainTimeStr : 2021-06-22 + * name : + * personId : 1344179277212151809 + * personName : + * phone : + * status : + * statusName : + * tender : + * tenderCompany : + * ts : 2021-06-22 + * type : + * typeName : + */ + + private String bridgeId; + private String bridgeName; + private String category; + private String code; + private String content; + private String deptid; + private String description; + private String id; + private String latitude; + private String longitude; + private String maintainTime; + private String maintainTimeStr; + private String name; + private String personId; + private String personName; + private String phone; + private String status; + private String statusName; + private String tender; + private String tenderCompany; + private String ts; + private String type; + private String typeName; + + public String getBridgeId() { + return bridgeId; + } + + public void setBridgeId(String bridgeId) { + this.bridgeId = bridgeId; + } + + public String getBridgeName() { + return bridgeName; + } + + public void setBridgeName(String bridgeName) { + this.bridgeName = bridgeName; + } + + public String getCategory() { + return category; + } + + public void setCategory(String category) { + this.category = category; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLatitude() { + return latitude; + } + + public void setLatitude(String latitude) { + this.latitude = latitude; + } + + public String getLongitude() { + return longitude; + } + + public void setLongitude(String longitude) { + this.longitude = longitude; + } + + public String getMaintainTime() { + return maintainTime; + } + + public void setMaintainTime(String maintainTime) { + this.maintainTime = maintainTime; + } + + public String getMaintainTimeStr() { + return maintainTimeStr; + } + + public void setMaintainTimeStr(String maintainTimeStr) { + this.maintainTimeStr = maintainTimeStr; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPersonId() { + return personId; + } + + public void setPersonId(String personId) { + this.personId = personId; + } + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + 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 getTender() { + return tender; + } + + public void setTender(String tender) { + this.tender = tender; + } + + public String getTenderCompany() { + return tenderCompany; + } + + public void setTenderCompany(String tenderCompany) { + this.tenderCompany = tenderCompany; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getTypeName() { + return typeName; + } + + public void setTypeName(String typeName) { + this.typeName = typeName; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java new file mode 100644 index 0000000..4f7a588 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IMaintainRecordModel { + Subscription sendRetrofitRequest(String startDate, String endDate, int offset); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java new file mode 100644 index 0000000..dce3f91 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java @@ -0,0 +1,8 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ISubmitMaintainModel { + Subscription sendRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/MaintainRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/MaintainRecordModelImpl.java new file mode 100644 index 0000000..35fd486 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/MaintainRecordModelImpl.java @@ -0,0 +1,50 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.MaintainRecordBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class MaintainRecordModelImpl implements IMaintainRecordModel { + + private OnGetRecordListener listener; + + public MaintainRecordModelImpl(OnGetRecordListener recordListener) { + this.listener = recordListener; + } + + public interface OnGetRecordListener { + void onSuccess(MaintainRecordBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String startDate, String endDate, int offset) { + Observable observable = RetrofitServiceManager.getMaintainRecordResult(startDate, endDate, offset); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (e.getCause() != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(MaintainRecordBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java index 06f6fb4..9e2666d 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java @@ -29,7 +29,7 @@ @Override public Subscription sendRetrofitRequest() { - Observable observable = RetrofitServiceManager.getProcessPerson(); + Observable observable = RetrofitServiceManager.getProcessPersonResult(); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/SubmitMaintainModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/SubmitMaintainModelImpl.java new file mode 100644 index 0000000..2924fbe --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/SubmitMaintainModelImpl.java @@ -0,0 +1,52 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class SubmitMaintainModelImpl implements ISubmitMaintainModel { + + private OnSubmitListener listener; + + public SubmitMaintainModelImpl(OnSubmitListener submitListener) { + this.listener = submitListener; + } + + public interface OnSubmitListener { + void onSuccess(ActionResultBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description) { + Observable observable = RetrofitServiceManager.getAddMaintainRecordResult(bridgeId, + content, maintainTime, personId, longitude, latitude, description); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (e.getCause() != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(ActionResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IMaintainRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IMaintainRecordPresenter.java new file mode 100644 index 0000000..938a484 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IMaintainRecordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IMaintainRecordPresenter { + void onReadyRetrofitRequest(String startDate, String endDate, int offset); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ISubmitMaintainPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ISubmitMaintainPresenter.java new file mode 100644 index 0000000..511e717 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ISubmitMaintainPresenter.java @@ -0,0 +1,8 @@ +package com.casic.dcms.mvp.presenter; + +public interface ISubmitMaintainPresenter { + void onReadyRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/MaintainRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/MaintainRecordPresenterImpl.java new file mode 100644 index 0000000..fd99e30 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/MaintainRecordPresenterImpl.java @@ -0,0 +1,39 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.MaintainRecordBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.MaintainRecordModelImpl; +import com.casic.dcms.mvp.view.IMaintainRecordView; + +public class MaintainRecordPresenterImpl extends BasePresenter implements IMaintainRecordPresenter, MaintainRecordModelImpl.OnGetRecordListener { + + private IMaintainRecordView view; + private MaintainRecordModelImpl model; + + public MaintainRecordPresenterImpl(IMaintainRecordView cleanToiletRecordView) { + this.view = cleanToiletRecordView; + model = new MaintainRecordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String startDate, String endDate, int offset) { + view.showProgress(); + addSubscription(model.sendRetrofitRequest(startDate, endDate, offset)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(MaintainRecordBean result) { + view.hideProgress(); + view.obtainRecordResult(result); + } + + @Override + public void onFailure(Throwable throwable) { + view.hideProgress(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/SubmitMaintainPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/SubmitMaintainPresenterImpl.java new file mode 100644 index 0000000..7722427 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/SubmitMaintainPresenterImpl.java @@ -0,0 +1,42 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.SubmitMaintainModelImpl; +import com.casic.dcms.mvp.view.ISubmitMaintainView; + +public class SubmitMaintainPresenterImpl extends BasePresenter implements ISubmitMaintainPresenter, SubmitMaintainModelImpl.OnSubmitListener { + + private ISubmitMaintainView view; + private SubmitMaintainModelImpl actionModel; + + public SubmitMaintainPresenterImpl(ISubmitMaintainView submitCaseView) { + this.view = submitCaseView; + actionModel = new SubmitMaintainModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description) { + view.showProgress(); + addSubscription(actionModel.sendRetrofitRequest(bridgeId, content, maintainTime, personId, longitude, + latitude, description)); + } + + @Override + public void onSuccess(ActionResultBean resultBean) { + view.hideProgress(); + view.obtainSubmitResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + view.hideProgress(); + view.obtainDataFail(); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IMaintainRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/IMaintainRecordView.java new file mode 100644 index 0000000..8ff5189 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IMaintainRecordView.java @@ -0,0 +1,11 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.MaintainRecordBean; + +public interface IMaintainRecordView { + void obtainRecordResult(MaintainRecordBean resultBean); + + void showProgress(); + + void hideProgress(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ISubmitMaintainView.java b/app/src/main/java/com/casic/dcms/mvp/view/ISubmitMaintainView.java new file mode 100644 index 0000000..75a0629 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/ISubmitMaintainView.java @@ -0,0 +1,13 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.ActionResultBean; + +public interface ISubmitMaintainView { + void showProgress(); + + void hideProgress(); + + void obtainSubmitResult(ActionResultBean resultBean); + + void obtainDataFail(); +} diff --git a/app/src/main/java/com/casic/dcms/ui/BridgeMaintainActivity.java b/app/src/main/java/com/casic/dcms/ui/BridgeMaintainActivity.java new file mode 100644 index 0000000..84b0eef --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/BridgeMaintainActivity.java @@ -0,0 +1,239 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.content.Intent; +import android.location.Location; +import android.text.TextUtils; +import android.view.View; +import android.widget.EditText; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.amap.api.services.core.LatLonPoint; +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.mvp.presenter.SubmitMaintainPresenterImpl; +import com.casic.dcms.mvp.view.ISubmitMaintainView; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; +import com.casic.dcms.utils.SaveKeyValues; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.utils.callback.IAddressListener; +import com.casic.dcms.utils.callback.ILocationListener; +import com.casic.dcms.widgets.SignInDialog; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.util.Timer; +import java.util.TimerTask; + +import butterknife.BindView; +import butterknife.OnClick; + +public class BridgeMaintainActivity extends BaseActivity implements View.OnClickListener, ISubmitMaintainView { + + private static final String TAG = "BridgeMaintainActivity"; + private Context context = this; + @BindView(R.id.topLayout) + QMUITopBarLayout topLayout; + @BindView(R.id.bridgeNameView) + TextView bridgeNameView; + @BindView(R.id.maintainView) + TextView maintainView; + @BindView(R.id.maintainDateView) + TextView maintainDateView; + @BindView(R.id.liablePersonView) + TextView liablePersonView; + @BindView(R.id.submitButton) + QMUIRoundButton submitButton; + //以下非必填 + @BindView(R.id.remarksView) + EditText remarksView; + + private String bridgeId = ""; + private SubmitMaintainPresenterImpl submitMaintainPresenter; + + @Override + public int initLayoutView() { + return R.layout.activity_bridge; + } + + @Override + protected void setupTopBarLayout() { + topLayout.setTitle("路桥养护").setTextColor(ContextCompat.getColor(this, R.color.white)); + topLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + topLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + topLayout.addRightImageButton(R.drawable.ic_more, 2).setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + startActivity(new Intent(context, MaintainRecordActivity.class)); + } + }); + } + + @Override + public void initData() { + submitMaintainPresenter = new SubmitMaintainPresenterImpl(this); + } + + @Override + public void initEvent() { + submitButton.setChangeAlphaWhenPress(true); + liablePersonView.setText(StringHelper.getUserAccount()); + liablePersonView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); + + new Timer().schedule(new TimerTask() { + @Override + public void run() { + String systemDate = TimeOrDateUtil.timestampToDate(System.currentTimeMillis()); + maintainDateView.post(new Runnable() { + @Override + public void run() { + maintainDateView.setText(systemDate); + maintainDateView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); + } + }); + } + }, 0, 1000); + } + + @OnClick({R.id.bridgeLayout, R.id.maintainContentLayout, R.id.submitButton}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.bridgeLayout: + new QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("选择桥梁") + .addItem("永胜桥") + .addItem("黄洲桥") + .addItem("光明桥") + .setGravityCenter(true) + .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + + bridgeId = String.valueOf((1 + position)); + bridgeNameView.setText(tag); + bridgeNameView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); + } + }).build().show(); + break; + case R.id.maintainContentLayout: + new QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("养护内容") + .addItem("日常养护,无异常") + .addItem("清除表面污垢") + .addItem("修补混凝土空洞、破损、剥落和表面风化及裂缝") + .addItem("清除暴露钢筋的锈渍、恢复保护层") + .addItem("处理各种横、纵向构件的开裂、开焊和锈蚀") + .setGravityCenter(true) + .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + + maintainView.setText(tag); + maintainView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); + } + }).build().show(); + break; + case R.id.submitButton: + //获取定位信息 + LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + + } + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + if (aMapLocation != null) { + if (TextUtils.isEmpty(bridgeId)) { + ToastHelper.showToast("请先选择养护的桥梁", ToastHelper.WARING); + return; + } + String maintainContent = maintainView.getText().toString(); + if (TextUtils.isEmpty(maintainContent)) { + ToastHelper.showToast("请选择养护的内容", ToastHelper.WARING); + return; + } + + double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + LatLonPoint latLonPoint = new LatLonPoint(gcjToWgs[1], gcjToWgs[0]); + LocationHelper.antiCodingLocation(context, latLonPoint, new IAddressListener() { + @Override + public void onGetAddress(String address) { + SaveKeyValues.putValue("maintainAddress", address); + } + }); + //提交养护记录 + submitMaintainPresenter.onReadyRetrofitRequest(bridgeId, maintainContent, + maintainDateView.getText().toString(), + StringHelper.getUserId(), String.valueOf(gcjToWgs[0]), + String.valueOf(gcjToWgs[1]), + StringHelper.filterString(remarksView.getText().toString())); + } else { + ToastHelper.showToast("当前信号较弱,无法提交养护记录", ToastHelper.WARING); + } + } + }, true); + break; + default: + throw new IllegalStateException("Unexpected value: " + v.getId()); + } + } + + @Override + public void showProgress() { + OtherUtils.showLoadingDialog(this, "养护记录签到中,请稍后"); + } + + @Override + public void hideProgress() { + OtherUtils.dismissLoadingDialog(); + } + + @Override + public void obtainSubmitResult(ActionResultBean resultBean) { + String maintainAddress = (String) SaveKeyValues.getValue("maintainAddress", ""); + if (resultBean.isSuccess()) { + new SignInDialog.Builder() + .setContext(this) + .setTitle("桥梁养护记录提交成功") + .setAddress(maintainAddress.equals("") ? "详细位置解析失败" : maintainAddress) + .setOnDialogClickListener(new SignInDialog.OnDialogClickListener() { + @Override + public void onViewClick() { + startActivity(new Intent(context, MaintainRecordActivity.class)); + finish(); + } + }).build().show(); + } + } + + @Override + public void obtainDataFail() { + ToastHelper.showToast("操作失败", ToastHelper.ERROR); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (submitMaintainPresenter != null) { + submitMaintainPresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java index 7221e95..381b704 100644 --- a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java @@ -25,6 +25,7 @@ import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.datepicker.DatePopupWindow; +import com.qmuiteam.qmui.widget.QMUIEmptyView; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; @@ -38,8 +39,8 @@ public class CleanResultListActivity extends BaseCaseActivity implements ICleanToiletRecordView { - // @BindView(R.id.emptyView) -// QMUIEmptyView emptyView; + @BindView(R.id.emptyView) + QMUIEmptyView emptyView; @BindView(R.id.dateView) TextView dateView; @BindView(R.id.calendarView) @@ -126,7 +127,6 @@ @Override public void obtainCleanRecordResult(CleanRecordBean resultBean) { -// Log.d("TAG", "obtainCleanRecordResult: " + new Gson().toJson(resultBean)); if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); if (isRefresh) { @@ -175,9 +175,9 @@ } else { //首次加载数据 if (resultActivity.dataBeans.size() == 0) { -// resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); + resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); } else { -// resultActivity.emptyView.hide(); + resultActivity.emptyView.hide(); resultActivity.adapter = new RecordListAdapter(resultActivity, resultActivity.dataBeans); resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); diff --git a/app/src/main/java/com/casic/dcms/ui/MaintainRecordActivity.java b/app/src/main/java/com/casic/dcms/ui/MaintainRecordActivity.java new file mode 100644 index 0000000..05c41c9 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/MaintainRecordActivity.java @@ -0,0 +1,194 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.content.Intent; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.MaintainRecordAdapter; +import com.casic.dcms.base.BaseCaseActivity; +import com.casic.dcms.bean.MaintainRecordBean; +import com.casic.dcms.mvp.presenter.MaintainRecordPresenterImpl; +import com.casic.dcms.mvp.view.IMaintainRecordView; +import com.casic.dcms.utils.CalendarUtil; +import com.casic.dcms.utils.OtherUtils; +import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.datepicker.DatePopupWindow; +import com.qmuiteam.qmui.widget.QMUIEmptyView; +import com.scwang.smartrefresh.layout.SmartRefreshLayout; +import com.scwang.smartrefresh.layout.api.RefreshLayout; +import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; +import com.scwang.smartrefresh.layout.listener.OnRefreshListener; + +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class MaintainRecordActivity extends BaseCaseActivity implements IMaintainRecordView { + + @BindView(R.id.emptyView) + QMUIEmptyView emptyView; + @BindView(R.id.dateView) + TextView dateView; + @BindView(R.id.calendarView) + ImageView calendarView; + @BindView(R.id.refreshLayout) + SmartRefreshLayout refreshLayout; + @BindView(R.id.recordRecyclerView) + RecyclerView recordRecyclerView; + + private Context context = this; + private int pageIndex = 1; + private boolean isRefresh, isLoadMore = false; + private WeakReferenceHandler weakReferenceHandler; + private List dataBeans = new ArrayList<>(); + private MaintainRecordPresenterImpl recordPresenter; + private MaintainRecordAdapter adapter; + private int startGroup = -1; + private int endGroup = -1; + private int startChild = -1; + private int endChild = -1; + + @Override + protected String setTitleName() { + return "桥梁养护记录"; + } + + @Override + public int initLayoutView() { + return R.layout.activity_maintain_record; + } + + @Override + public void initData() { + weakReferenceHandler = new WeakReferenceHandler(this); + recordPresenter = new MaintainRecordPresenterImpl(this); + recordPresenter.onReadyRetrofitRequest("", "", pageIndex); + } + + @Override + public void initEvent() { + calendarView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + new DatePopupWindow + .Builder(MaintainRecordActivity.this, CalendarUtil.obtainLastTwoMonth(), v)//初始化 + .setInitSelect(startGroup, startChild, endGroup, endChild)//设置上一次选中的区间状态 + .setInitDay(true)//默认为true,UI内容为共几天、开始、结束;当为false时,UI内容为共几晚、入住、离开 + .setDateOnClickListener(new DatePopupWindow.DateOnClickListener() {//设置监听 + //点击完成按钮后回调返回方法 + @Override + public void getDate(String startDate, String endDate, int startGroupPosition, int + startChildPosition, int endGroupPosition, int endChildPosition) { + startGroup = startGroupPosition;//开始月份位置 + startChild = startChildPosition;//开始对应月份中日的位置 + endGroup = endGroupPosition;//结束月份位置 + endChild = endChildPosition;//结束对应月份中日的位置 + dateView.setText(startDate + "~" + endDate); + recordPresenter.onReadyRetrofitRequest(startDate, endDate, pageIndex); + } + }).builder(); + } + }); + refreshLayout.setOnRefreshListener(new OnRefreshListener() { + @Override + public void onRefresh(@NonNull final RefreshLayout refreshLayout) { + isRefresh = true; + //刷新之后页码重置 + pageIndex = 1; + recordPresenter.onReadyRetrofitRequest("", "", pageIndex); + } + }); + refreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() { + @Override + public void onLoadMore(@NonNull final RefreshLayout refreshLayout) { + isLoadMore = true; + pageIndex++; + recordPresenter.onReadyRetrofitRequest("", "", pageIndex); + } + }); + } + + @Override + public void obtainRecordResult(MaintainRecordBean resultBean) { + if (resultBean.isSuccess()) { + List dataRows = resultBean.getData().getRows(); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + ToastHelper.showToast("到底了,别拉了", ToastHelper.INFO); + } + dataBeans.addAll(dataRows); + refreshLayout.finishLoadMore(); + isLoadMore = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(20210622); + } + } + + @Override + public void showProgress() { + OtherUtils.showLoadingDialog(this, "查询记录中,请稍后"); + } + + @Override + public void hideProgress() { + OtherUtils.dismissLoadingDialog(); + } + + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(MaintainRecordActivity activity) { + reference = new WeakReference<>(activity); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + MaintainRecordActivity resultActivity = reference.get(); + if (msg.what == 20210622) { + if (resultActivity.isRefresh || resultActivity.isLoadMore) { + resultActivity.adapter.notifyDataSetChanged(); + } else { + //首次加载数据 + if (resultActivity.dataBeans.size() == 0) { + resultActivity.emptyView.show("抱歉,没有查到相关养护记录", null); + } else { + resultActivity.emptyView.hide(); + resultActivity.adapter = new MaintainRecordAdapter(resultActivity, resultActivity.dataBeans); + resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); + resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); + resultActivity.recordRecyclerView.setAdapter(resultActivity.adapter); + } + } + } + } + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (recordPresenter != null) { + recordPresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/PipelineManagerActivity.java b/app/src/main/java/com/casic/dcms/ui/PipelineManagerActivity.java new file mode 100644 index 0000000..fa77936 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/PipelineManagerActivity.java @@ -0,0 +1,27 @@ +package com.casic.dcms.ui; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; + +public class PipelineManagerActivity extends BaseActivity { + + @Override + public int initLayoutView() { + return R.layout.activity_pipe; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java index ac995d3..4959539 100644 --- a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java @@ -300,7 +300,8 @@ @Override public void onAMapLocationGet(AMapLocation aMapLocation) { if (aMapLocation != null) { - Point point = new Point(aMapLocation.getLongitude(), aMapLocation.getLatitude(), mapView.getSpatialReference()); + double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); mapView.setViewpointCenterAsync(point, 1200);//标注到指定经纬度并放大地图显示 //添加图片Marker addPictureMarker(point); @@ -311,11 +312,9 @@ ToastHelper.showToast("公厕标识不能为空", ToastHelper.WARING); return; } - double longitude = aMapLocation.getLongitude(); - double latitude = aMapLocation.getLatitude(); String cleanTime = TimeOrDateUtil.timestampToCompleteDate(System.currentTimeMillis()); cleanToiletPresenter.onReadyRetrofitRequest(toiletId, StringHelper.getUserId(), - String.valueOf(longitude), String.valueOf(latitude), cleanTime, imagePath, + String.valueOf(gcjToWgs[0]), String.valueOf(gcjToWgs[1]), cleanTime, imagePath, StringHelper.filterString(workContentView.getText().toString())); } } @@ -416,15 +415,18 @@ @Override public void obtainCleanResult(ActionResultBean resultBean) { -// Log.d(TAG, "obtainCleanResult: " + new Gson().toJson(resultBean)); if (resultBean.isSuccess()) { - new SignInDialog.Builder().setContext(this).setAddress(locationStreetView.getText().toString()).setOnDialogClickListener(new SignInDialog.OnDialogClickListener() { - @Override - public void onViewClick() { - startActivity(new Intent(context, CleanResultListActivity.class)); - PublicToiletActivity.this.finish(); - } - }).build().show(); + new SignInDialog.Builder() + .setContext(this) + .setTitle("保洁保卡成功") + .setAddress(locationStreetView.getText().toString()) + .setOnDialogClickListener(new SignInDialog.OnDialogClickListener() { + @Override + public void onViewClick() { + startActivity(new Intent(context, CleanResultListActivity.class)); + PublicToiletActivity.this.finish(); + } + }).build().show(); } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java index 03438b0..42d29a4 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java @@ -18,6 +18,7 @@ import com.casic.dcms.mvp.presenter.UserDataPresenterImpl; import com.casic.dcms.mvp.view.IHomePageView; import com.casic.dcms.mvp.view.IUserDataView; +import com.casic.dcms.ui.BridgeMaintainActivity; import com.casic.dcms.ui.CaseCheckActivity; import com.casic.dcms.ui.CaseHandleActivity; import com.casic.dcms.ui.CaseOnMapActivity; @@ -32,6 +33,7 @@ import com.casic.dcms.ui.OvertimeCaseActivity; import com.casic.dcms.ui.PackageHandleActivity; import com.casic.dcms.ui.PersonOnlineActivity; +import com.casic.dcms.ui.PipelineManagerActivity; import com.casic.dcms.ui.PublicToiletActivity; import com.casic.dcms.ui.UrgentCaseActivity; import com.casic.dcms.utils.StringHelper; @@ -161,6 +163,12 @@ case "部门处置": intent.setClass(context, DeptHandleActivity.class); break; + case "路桥养护": + intent.setClass(context, BridgeMaintainActivity.class); + break; + case "管网管理": + intent.setClass(context, PipelineManagerActivity.class); + break; default: break; } diff --git a/app/src/main/java/com/casic/dcms/utils/Constant.java b/app/src/main/java/com/casic/dcms/utils/Constant.java index d9c1d60..9bbbdb0 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -35,7 +35,8 @@ public static final String IP_KEY = "BASE_IP"; - public static final long FIVE_YEARS = 5L * 365 * 1000 * 60 * 60 * 24L; + public static final long FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L; + public static final long ONE_YEAR = 365 * 60 * 60 * 24 * 1000L; public static final long IMAGE_MINUS_SIZE = 100 * 1024; public static final long HTTP_TIMEOUT = 30L; public static final int PERMISSIONS_CODE = 999; diff --git a/app/src/main/java/com/casic/dcms/utils/LocationHelper.java b/app/src/main/java/com/casic/dcms/utils/LocationHelper.java index 8d95580..79aedbf 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocationHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/LocationHelper.java @@ -40,7 +40,6 @@ private static final double a = 6378245.0; // a: 卫星椭球坐标投影到平面地图坐标系的投影因子。 private static final double ee = 0.00669342162296594323; // ee: 椭球的偏心率平方。 - /** * 高德sdk定位 */ diff --git a/app/src/main/java/com/casic/dcms/utils/StringHelper.java b/app/src/main/java/com/casic/dcms/utils/StringHelper.java index 6bea75a..2faeae4 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -250,8 +250,12 @@ return R.drawable.ic_shangpu; case "部门处置": return R.drawable.ic_dept; + case "路桥养护": + return R.drawable.ic_bridge; + case "管网管理": + return R.drawable.ic_pipe; default: - return R.mipmap.app_logo; + return R.drawable.ic_default_icon; } } diff --git a/app/build.gradle b/app/build.gradle index 6f0b518..bcfdc0d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ applicationId "com.casic.dcms" minSdkVersion 21 targetSdkVersion 30 - versionCode 19 - versionName "v1.0.0.11" + versionCode 20 + versionName "v1.0.0.12" ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 68f46c9..3090a91 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -89,7 +89,10 @@ - + + + + { + + private Context context; + private List dataRows; + private LayoutInflater layoutInflater; + private QMUITipDialog.Builder dialogBuilder; + + public MaintainRecordAdapter(Context context, List dataRows) { + this.context = context; + this.dataRows = dataRows; + layoutInflater = LayoutInflater.from(context); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = layoutInflater.inflate(R.layout.item_maintain_recycleview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + holder.bindView(dataRows.get(position)); + } + + @Override + public int getItemCount() { + return dataRows.size(); + } + + class ItemViewHolder extends RecyclerView.ViewHolder { + + private TextView bridgeNameView; + private ImageView descriptionImageView; + private TextView maintainContentView; + private TextView maintainTimeView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + bridgeNameView = itemView.findViewById(R.id.bridgeNameView); + descriptionImageView = itemView.findViewById(R.id.descriptionImageView); + maintainContentView = itemView.findViewById(R.id.maintainContentView); + maintainTimeView = itemView.findViewById(R.id.maintainTimeView); + } + + void bindView(MaintainRecordBean.DataBean.RowsBean rowsBean) { + bridgeNameView.setText(rowsBean.getBridgeName()); + String description = rowsBean.getDescription(); + if (TextUtils.isEmpty(description)) { + descriptionImageView.setVisibility(View.GONE); + } else { + descriptionImageView.setVisibility(View.VISIBLE); + descriptionImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + QMUITipDialog tipDialog = new QMUITipDialog.Builder(context) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_NOTHING) + .setTipWord(description) + .create(); + tipDialog.show(); + descriptionImageView.postDelayed(new Runnable() { + @Override + public void run() { + tipDialog.dismiss(); + } + }, 2000); + } + }); + } + maintainContentView.setText(rowsBean.getContent()); + maintainTimeView.setText(rowsBean.getMaintainTimeStr()); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java b/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java new file mode 100644 index 0000000..ded4fe1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java @@ -0,0 +1,41 @@ +package com.casic.dcms.bean; + +public class MaintainContentBean { + + private int code; + private String data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java b/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java new file mode 100644 index 0000000..2beea74 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java @@ -0,0 +1,301 @@ +package com.casic.dcms.bean; + +import java.util.List; + +public class MaintainRecordBean { + + private int code; + private DataBean data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + + private int total; + private List rows; + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public static class RowsBean { + /** + * bridgeId : 1 + * bridgeName : 永胜桥 + * category : 桥梁 + * code : 1624359572304 + * content : 日常养护,无异常 + * deptid : 1344110695992258561 + * description : + * id : 1407292162033041409 + * latitude : 39.914705918747295 + * longitude : 116.26295490330527 + * maintainTime : 2021-06-22 00:00:00 + * maintainTimeStr : 2021-06-22 + * name : + * personId : 1344179277212151809 + * personName : + * phone : + * status : + * statusName : + * tender : + * tenderCompany : + * ts : 2021-06-22 + * type : + * typeName : + */ + + private String bridgeId; + private String bridgeName; + private String category; + private String code; + private String content; + private String deptid; + private String description; + private String id; + private String latitude; + private String longitude; + private String maintainTime; + private String maintainTimeStr; + private String name; + private String personId; + private String personName; + private String phone; + private String status; + private String statusName; + private String tender; + private String tenderCompany; + private String ts; + private String type; + private String typeName; + + public String getBridgeId() { + return bridgeId; + } + + public void setBridgeId(String bridgeId) { + this.bridgeId = bridgeId; + } + + public String getBridgeName() { + return bridgeName; + } + + public void setBridgeName(String bridgeName) { + this.bridgeName = bridgeName; + } + + public String getCategory() { + return category; + } + + public void setCategory(String category) { + this.category = category; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLatitude() { + return latitude; + } + + public void setLatitude(String latitude) { + this.latitude = latitude; + } + + public String getLongitude() { + return longitude; + } + + public void setLongitude(String longitude) { + this.longitude = longitude; + } + + public String getMaintainTime() { + return maintainTime; + } + + public void setMaintainTime(String maintainTime) { + this.maintainTime = maintainTime; + } + + public String getMaintainTimeStr() { + return maintainTimeStr; + } + + public void setMaintainTimeStr(String maintainTimeStr) { + this.maintainTimeStr = maintainTimeStr; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPersonId() { + return personId; + } + + public void setPersonId(String personId) { + this.personId = personId; + } + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + 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 getTender() { + return tender; + } + + public void setTender(String tender) { + this.tender = tender; + } + + public String getTenderCompany() { + return tenderCompany; + } + + public void setTenderCompany(String tenderCompany) { + this.tenderCompany = tenderCompany; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getTypeName() { + return typeName; + } + + public void setTypeName(String typeName) { + this.typeName = typeName; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java new file mode 100644 index 0000000..4f7a588 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IMaintainRecordModel { + Subscription sendRetrofitRequest(String startDate, String endDate, int offset); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java new file mode 100644 index 0000000..dce3f91 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java @@ -0,0 +1,8 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ISubmitMaintainModel { + Subscription sendRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/MaintainRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/MaintainRecordModelImpl.java new file mode 100644 index 0000000..35fd486 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/MaintainRecordModelImpl.java @@ -0,0 +1,50 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.MaintainRecordBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class MaintainRecordModelImpl implements IMaintainRecordModel { + + private OnGetRecordListener listener; + + public MaintainRecordModelImpl(OnGetRecordListener recordListener) { + this.listener = recordListener; + } + + public interface OnGetRecordListener { + void onSuccess(MaintainRecordBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String startDate, String endDate, int offset) { + Observable observable = RetrofitServiceManager.getMaintainRecordResult(startDate, endDate, offset); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (e.getCause() != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(MaintainRecordBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java index 06f6fb4..9e2666d 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java @@ -29,7 +29,7 @@ @Override public Subscription sendRetrofitRequest() { - Observable observable = RetrofitServiceManager.getProcessPerson(); + Observable observable = RetrofitServiceManager.getProcessPersonResult(); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/SubmitMaintainModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/SubmitMaintainModelImpl.java new file mode 100644 index 0000000..2924fbe --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/SubmitMaintainModelImpl.java @@ -0,0 +1,52 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class SubmitMaintainModelImpl implements ISubmitMaintainModel { + + private OnSubmitListener listener; + + public SubmitMaintainModelImpl(OnSubmitListener submitListener) { + this.listener = submitListener; + } + + public interface OnSubmitListener { + void onSuccess(ActionResultBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description) { + Observable observable = RetrofitServiceManager.getAddMaintainRecordResult(bridgeId, + content, maintainTime, personId, longitude, latitude, description); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (e.getCause() != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(ActionResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IMaintainRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IMaintainRecordPresenter.java new file mode 100644 index 0000000..938a484 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IMaintainRecordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IMaintainRecordPresenter { + void onReadyRetrofitRequest(String startDate, String endDate, int offset); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ISubmitMaintainPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ISubmitMaintainPresenter.java new file mode 100644 index 0000000..511e717 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ISubmitMaintainPresenter.java @@ -0,0 +1,8 @@ +package com.casic.dcms.mvp.presenter; + +public interface ISubmitMaintainPresenter { + void onReadyRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/MaintainRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/MaintainRecordPresenterImpl.java new file mode 100644 index 0000000..fd99e30 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/MaintainRecordPresenterImpl.java @@ -0,0 +1,39 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.MaintainRecordBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.MaintainRecordModelImpl; +import com.casic.dcms.mvp.view.IMaintainRecordView; + +public class MaintainRecordPresenterImpl extends BasePresenter implements IMaintainRecordPresenter, MaintainRecordModelImpl.OnGetRecordListener { + + private IMaintainRecordView view; + private MaintainRecordModelImpl model; + + public MaintainRecordPresenterImpl(IMaintainRecordView cleanToiletRecordView) { + this.view = cleanToiletRecordView; + model = new MaintainRecordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String startDate, String endDate, int offset) { + view.showProgress(); + addSubscription(model.sendRetrofitRequest(startDate, endDate, offset)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(MaintainRecordBean result) { + view.hideProgress(); + view.obtainRecordResult(result); + } + + @Override + public void onFailure(Throwable throwable) { + view.hideProgress(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/SubmitMaintainPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/SubmitMaintainPresenterImpl.java new file mode 100644 index 0000000..7722427 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/SubmitMaintainPresenterImpl.java @@ -0,0 +1,42 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.SubmitMaintainModelImpl; +import com.casic.dcms.mvp.view.ISubmitMaintainView; + +public class SubmitMaintainPresenterImpl extends BasePresenter implements ISubmitMaintainPresenter, SubmitMaintainModelImpl.OnSubmitListener { + + private ISubmitMaintainView view; + private SubmitMaintainModelImpl actionModel; + + public SubmitMaintainPresenterImpl(ISubmitMaintainView submitCaseView) { + this.view = submitCaseView; + actionModel = new SubmitMaintainModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description) { + view.showProgress(); + addSubscription(actionModel.sendRetrofitRequest(bridgeId, content, maintainTime, personId, longitude, + latitude, description)); + } + + @Override + public void onSuccess(ActionResultBean resultBean) { + view.hideProgress(); + view.obtainSubmitResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + view.hideProgress(); + view.obtainDataFail(); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IMaintainRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/IMaintainRecordView.java new file mode 100644 index 0000000..8ff5189 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IMaintainRecordView.java @@ -0,0 +1,11 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.MaintainRecordBean; + +public interface IMaintainRecordView { + void obtainRecordResult(MaintainRecordBean resultBean); + + void showProgress(); + + void hideProgress(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ISubmitMaintainView.java b/app/src/main/java/com/casic/dcms/mvp/view/ISubmitMaintainView.java new file mode 100644 index 0000000..75a0629 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/ISubmitMaintainView.java @@ -0,0 +1,13 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.ActionResultBean; + +public interface ISubmitMaintainView { + void showProgress(); + + void hideProgress(); + + void obtainSubmitResult(ActionResultBean resultBean); + + void obtainDataFail(); +} diff --git a/app/src/main/java/com/casic/dcms/ui/BridgeMaintainActivity.java b/app/src/main/java/com/casic/dcms/ui/BridgeMaintainActivity.java new file mode 100644 index 0000000..84b0eef --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/BridgeMaintainActivity.java @@ -0,0 +1,239 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.content.Intent; +import android.location.Location; +import android.text.TextUtils; +import android.view.View; +import android.widget.EditText; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.amap.api.services.core.LatLonPoint; +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.mvp.presenter.SubmitMaintainPresenterImpl; +import com.casic.dcms.mvp.view.ISubmitMaintainView; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; +import com.casic.dcms.utils.SaveKeyValues; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.utils.callback.IAddressListener; +import com.casic.dcms.utils.callback.ILocationListener; +import com.casic.dcms.widgets.SignInDialog; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.util.Timer; +import java.util.TimerTask; + +import butterknife.BindView; +import butterknife.OnClick; + +public class BridgeMaintainActivity extends BaseActivity implements View.OnClickListener, ISubmitMaintainView { + + private static final String TAG = "BridgeMaintainActivity"; + private Context context = this; + @BindView(R.id.topLayout) + QMUITopBarLayout topLayout; + @BindView(R.id.bridgeNameView) + TextView bridgeNameView; + @BindView(R.id.maintainView) + TextView maintainView; + @BindView(R.id.maintainDateView) + TextView maintainDateView; + @BindView(R.id.liablePersonView) + TextView liablePersonView; + @BindView(R.id.submitButton) + QMUIRoundButton submitButton; + //以下非必填 + @BindView(R.id.remarksView) + EditText remarksView; + + private String bridgeId = ""; + private SubmitMaintainPresenterImpl submitMaintainPresenter; + + @Override + public int initLayoutView() { + return R.layout.activity_bridge; + } + + @Override + protected void setupTopBarLayout() { + topLayout.setTitle("路桥养护").setTextColor(ContextCompat.getColor(this, R.color.white)); + topLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + topLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + topLayout.addRightImageButton(R.drawable.ic_more, 2).setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + startActivity(new Intent(context, MaintainRecordActivity.class)); + } + }); + } + + @Override + public void initData() { + submitMaintainPresenter = new SubmitMaintainPresenterImpl(this); + } + + @Override + public void initEvent() { + submitButton.setChangeAlphaWhenPress(true); + liablePersonView.setText(StringHelper.getUserAccount()); + liablePersonView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); + + new Timer().schedule(new TimerTask() { + @Override + public void run() { + String systemDate = TimeOrDateUtil.timestampToDate(System.currentTimeMillis()); + maintainDateView.post(new Runnable() { + @Override + public void run() { + maintainDateView.setText(systemDate); + maintainDateView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); + } + }); + } + }, 0, 1000); + } + + @OnClick({R.id.bridgeLayout, R.id.maintainContentLayout, R.id.submitButton}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.bridgeLayout: + new QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("选择桥梁") + .addItem("永胜桥") + .addItem("黄洲桥") + .addItem("光明桥") + .setGravityCenter(true) + .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + + bridgeId = String.valueOf((1 + position)); + bridgeNameView.setText(tag); + bridgeNameView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); + } + }).build().show(); + break; + case R.id.maintainContentLayout: + new QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("养护内容") + .addItem("日常养护,无异常") + .addItem("清除表面污垢") + .addItem("修补混凝土空洞、破损、剥落和表面风化及裂缝") + .addItem("清除暴露钢筋的锈渍、恢复保护层") + .addItem("处理各种横、纵向构件的开裂、开焊和锈蚀") + .setGravityCenter(true) + .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + + maintainView.setText(tag); + maintainView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); + } + }).build().show(); + break; + case R.id.submitButton: + //获取定位信息 + LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + + } + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + if (aMapLocation != null) { + if (TextUtils.isEmpty(bridgeId)) { + ToastHelper.showToast("请先选择养护的桥梁", ToastHelper.WARING); + return; + } + String maintainContent = maintainView.getText().toString(); + if (TextUtils.isEmpty(maintainContent)) { + ToastHelper.showToast("请选择养护的内容", ToastHelper.WARING); + return; + } + + double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + LatLonPoint latLonPoint = new LatLonPoint(gcjToWgs[1], gcjToWgs[0]); + LocationHelper.antiCodingLocation(context, latLonPoint, new IAddressListener() { + @Override + public void onGetAddress(String address) { + SaveKeyValues.putValue("maintainAddress", address); + } + }); + //提交养护记录 + submitMaintainPresenter.onReadyRetrofitRequest(bridgeId, maintainContent, + maintainDateView.getText().toString(), + StringHelper.getUserId(), String.valueOf(gcjToWgs[0]), + String.valueOf(gcjToWgs[1]), + StringHelper.filterString(remarksView.getText().toString())); + } else { + ToastHelper.showToast("当前信号较弱,无法提交养护记录", ToastHelper.WARING); + } + } + }, true); + break; + default: + throw new IllegalStateException("Unexpected value: " + v.getId()); + } + } + + @Override + public void showProgress() { + OtherUtils.showLoadingDialog(this, "养护记录签到中,请稍后"); + } + + @Override + public void hideProgress() { + OtherUtils.dismissLoadingDialog(); + } + + @Override + public void obtainSubmitResult(ActionResultBean resultBean) { + String maintainAddress = (String) SaveKeyValues.getValue("maintainAddress", ""); + if (resultBean.isSuccess()) { + new SignInDialog.Builder() + .setContext(this) + .setTitle("桥梁养护记录提交成功") + .setAddress(maintainAddress.equals("") ? "详细位置解析失败" : maintainAddress) + .setOnDialogClickListener(new SignInDialog.OnDialogClickListener() { + @Override + public void onViewClick() { + startActivity(new Intent(context, MaintainRecordActivity.class)); + finish(); + } + }).build().show(); + } + } + + @Override + public void obtainDataFail() { + ToastHelper.showToast("操作失败", ToastHelper.ERROR); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (submitMaintainPresenter != null) { + submitMaintainPresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java index 7221e95..381b704 100644 --- a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java @@ -25,6 +25,7 @@ import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.datepicker.DatePopupWindow; +import com.qmuiteam.qmui.widget.QMUIEmptyView; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; @@ -38,8 +39,8 @@ public class CleanResultListActivity extends BaseCaseActivity implements ICleanToiletRecordView { - // @BindView(R.id.emptyView) -// QMUIEmptyView emptyView; + @BindView(R.id.emptyView) + QMUIEmptyView emptyView; @BindView(R.id.dateView) TextView dateView; @BindView(R.id.calendarView) @@ -126,7 +127,6 @@ @Override public void obtainCleanRecordResult(CleanRecordBean resultBean) { -// Log.d("TAG", "obtainCleanRecordResult: " + new Gson().toJson(resultBean)); if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); if (isRefresh) { @@ -175,9 +175,9 @@ } else { //首次加载数据 if (resultActivity.dataBeans.size() == 0) { -// resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); + resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); } else { -// resultActivity.emptyView.hide(); + resultActivity.emptyView.hide(); resultActivity.adapter = new RecordListAdapter(resultActivity, resultActivity.dataBeans); resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); diff --git a/app/src/main/java/com/casic/dcms/ui/MaintainRecordActivity.java b/app/src/main/java/com/casic/dcms/ui/MaintainRecordActivity.java new file mode 100644 index 0000000..05c41c9 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/MaintainRecordActivity.java @@ -0,0 +1,194 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.content.Intent; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.MaintainRecordAdapter; +import com.casic.dcms.base.BaseCaseActivity; +import com.casic.dcms.bean.MaintainRecordBean; +import com.casic.dcms.mvp.presenter.MaintainRecordPresenterImpl; +import com.casic.dcms.mvp.view.IMaintainRecordView; +import com.casic.dcms.utils.CalendarUtil; +import com.casic.dcms.utils.OtherUtils; +import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.datepicker.DatePopupWindow; +import com.qmuiteam.qmui.widget.QMUIEmptyView; +import com.scwang.smartrefresh.layout.SmartRefreshLayout; +import com.scwang.smartrefresh.layout.api.RefreshLayout; +import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; +import com.scwang.smartrefresh.layout.listener.OnRefreshListener; + +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class MaintainRecordActivity extends BaseCaseActivity implements IMaintainRecordView { + + @BindView(R.id.emptyView) + QMUIEmptyView emptyView; + @BindView(R.id.dateView) + TextView dateView; + @BindView(R.id.calendarView) + ImageView calendarView; + @BindView(R.id.refreshLayout) + SmartRefreshLayout refreshLayout; + @BindView(R.id.recordRecyclerView) + RecyclerView recordRecyclerView; + + private Context context = this; + private int pageIndex = 1; + private boolean isRefresh, isLoadMore = false; + private WeakReferenceHandler weakReferenceHandler; + private List dataBeans = new ArrayList<>(); + private MaintainRecordPresenterImpl recordPresenter; + private MaintainRecordAdapter adapter; + private int startGroup = -1; + private int endGroup = -1; + private int startChild = -1; + private int endChild = -1; + + @Override + protected String setTitleName() { + return "桥梁养护记录"; + } + + @Override + public int initLayoutView() { + return R.layout.activity_maintain_record; + } + + @Override + public void initData() { + weakReferenceHandler = new WeakReferenceHandler(this); + recordPresenter = new MaintainRecordPresenterImpl(this); + recordPresenter.onReadyRetrofitRequest("", "", pageIndex); + } + + @Override + public void initEvent() { + calendarView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + new DatePopupWindow + .Builder(MaintainRecordActivity.this, CalendarUtil.obtainLastTwoMonth(), v)//初始化 + .setInitSelect(startGroup, startChild, endGroup, endChild)//设置上一次选中的区间状态 + .setInitDay(true)//默认为true,UI内容为共几天、开始、结束;当为false时,UI内容为共几晚、入住、离开 + .setDateOnClickListener(new DatePopupWindow.DateOnClickListener() {//设置监听 + //点击完成按钮后回调返回方法 + @Override + public void getDate(String startDate, String endDate, int startGroupPosition, int + startChildPosition, int endGroupPosition, int endChildPosition) { + startGroup = startGroupPosition;//开始月份位置 + startChild = startChildPosition;//开始对应月份中日的位置 + endGroup = endGroupPosition;//结束月份位置 + endChild = endChildPosition;//结束对应月份中日的位置 + dateView.setText(startDate + "~" + endDate); + recordPresenter.onReadyRetrofitRequest(startDate, endDate, pageIndex); + } + }).builder(); + } + }); + refreshLayout.setOnRefreshListener(new OnRefreshListener() { + @Override + public void onRefresh(@NonNull final RefreshLayout refreshLayout) { + isRefresh = true; + //刷新之后页码重置 + pageIndex = 1; + recordPresenter.onReadyRetrofitRequest("", "", pageIndex); + } + }); + refreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() { + @Override + public void onLoadMore(@NonNull final RefreshLayout refreshLayout) { + isLoadMore = true; + pageIndex++; + recordPresenter.onReadyRetrofitRequest("", "", pageIndex); + } + }); + } + + @Override + public void obtainRecordResult(MaintainRecordBean resultBean) { + if (resultBean.isSuccess()) { + List dataRows = resultBean.getData().getRows(); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + ToastHelper.showToast("到底了,别拉了", ToastHelper.INFO); + } + dataBeans.addAll(dataRows); + refreshLayout.finishLoadMore(); + isLoadMore = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(20210622); + } + } + + @Override + public void showProgress() { + OtherUtils.showLoadingDialog(this, "查询记录中,请稍后"); + } + + @Override + public void hideProgress() { + OtherUtils.dismissLoadingDialog(); + } + + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(MaintainRecordActivity activity) { + reference = new WeakReference<>(activity); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + MaintainRecordActivity resultActivity = reference.get(); + if (msg.what == 20210622) { + if (resultActivity.isRefresh || resultActivity.isLoadMore) { + resultActivity.adapter.notifyDataSetChanged(); + } else { + //首次加载数据 + if (resultActivity.dataBeans.size() == 0) { + resultActivity.emptyView.show("抱歉,没有查到相关养护记录", null); + } else { + resultActivity.emptyView.hide(); + resultActivity.adapter = new MaintainRecordAdapter(resultActivity, resultActivity.dataBeans); + resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); + resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); + resultActivity.recordRecyclerView.setAdapter(resultActivity.adapter); + } + } + } + } + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (recordPresenter != null) { + recordPresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/PipelineManagerActivity.java b/app/src/main/java/com/casic/dcms/ui/PipelineManagerActivity.java new file mode 100644 index 0000000..fa77936 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/PipelineManagerActivity.java @@ -0,0 +1,27 @@ +package com.casic.dcms.ui; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; + +public class PipelineManagerActivity extends BaseActivity { + + @Override + public int initLayoutView() { + return R.layout.activity_pipe; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java index ac995d3..4959539 100644 --- a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java @@ -300,7 +300,8 @@ @Override public void onAMapLocationGet(AMapLocation aMapLocation) { if (aMapLocation != null) { - Point point = new Point(aMapLocation.getLongitude(), aMapLocation.getLatitude(), mapView.getSpatialReference()); + double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); mapView.setViewpointCenterAsync(point, 1200);//标注到指定经纬度并放大地图显示 //添加图片Marker addPictureMarker(point); @@ -311,11 +312,9 @@ ToastHelper.showToast("公厕标识不能为空", ToastHelper.WARING); return; } - double longitude = aMapLocation.getLongitude(); - double latitude = aMapLocation.getLatitude(); String cleanTime = TimeOrDateUtil.timestampToCompleteDate(System.currentTimeMillis()); cleanToiletPresenter.onReadyRetrofitRequest(toiletId, StringHelper.getUserId(), - String.valueOf(longitude), String.valueOf(latitude), cleanTime, imagePath, + String.valueOf(gcjToWgs[0]), String.valueOf(gcjToWgs[1]), cleanTime, imagePath, StringHelper.filterString(workContentView.getText().toString())); } } @@ -416,15 +415,18 @@ @Override public void obtainCleanResult(ActionResultBean resultBean) { -// Log.d(TAG, "obtainCleanResult: " + new Gson().toJson(resultBean)); if (resultBean.isSuccess()) { - new SignInDialog.Builder().setContext(this).setAddress(locationStreetView.getText().toString()).setOnDialogClickListener(new SignInDialog.OnDialogClickListener() { - @Override - public void onViewClick() { - startActivity(new Intent(context, CleanResultListActivity.class)); - PublicToiletActivity.this.finish(); - } - }).build().show(); + new SignInDialog.Builder() + .setContext(this) + .setTitle("保洁保卡成功") + .setAddress(locationStreetView.getText().toString()) + .setOnDialogClickListener(new SignInDialog.OnDialogClickListener() { + @Override + public void onViewClick() { + startActivity(new Intent(context, CleanResultListActivity.class)); + PublicToiletActivity.this.finish(); + } + }).build().show(); } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java index 03438b0..42d29a4 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java @@ -18,6 +18,7 @@ import com.casic.dcms.mvp.presenter.UserDataPresenterImpl; import com.casic.dcms.mvp.view.IHomePageView; import com.casic.dcms.mvp.view.IUserDataView; +import com.casic.dcms.ui.BridgeMaintainActivity; import com.casic.dcms.ui.CaseCheckActivity; import com.casic.dcms.ui.CaseHandleActivity; import com.casic.dcms.ui.CaseOnMapActivity; @@ -32,6 +33,7 @@ import com.casic.dcms.ui.OvertimeCaseActivity; import com.casic.dcms.ui.PackageHandleActivity; import com.casic.dcms.ui.PersonOnlineActivity; +import com.casic.dcms.ui.PipelineManagerActivity; import com.casic.dcms.ui.PublicToiletActivity; import com.casic.dcms.ui.UrgentCaseActivity; import com.casic.dcms.utils.StringHelper; @@ -161,6 +163,12 @@ case "部门处置": intent.setClass(context, DeptHandleActivity.class); break; + case "路桥养护": + intent.setClass(context, BridgeMaintainActivity.class); + break; + case "管网管理": + intent.setClass(context, PipelineManagerActivity.class); + break; default: break; } diff --git a/app/src/main/java/com/casic/dcms/utils/Constant.java b/app/src/main/java/com/casic/dcms/utils/Constant.java index d9c1d60..9bbbdb0 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -35,7 +35,8 @@ public static final String IP_KEY = "BASE_IP"; - public static final long FIVE_YEARS = 5L * 365 * 1000 * 60 * 60 * 24L; + public static final long FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L; + public static final long ONE_YEAR = 365 * 60 * 60 * 24 * 1000L; public static final long IMAGE_MINUS_SIZE = 100 * 1024; public static final long HTTP_TIMEOUT = 30L; public static final int PERMISSIONS_CODE = 999; diff --git a/app/src/main/java/com/casic/dcms/utils/LocationHelper.java b/app/src/main/java/com/casic/dcms/utils/LocationHelper.java index 8d95580..79aedbf 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocationHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/LocationHelper.java @@ -40,7 +40,6 @@ private static final double a = 6378245.0; // a: 卫星椭球坐标投影到平面地图坐标系的投影因子。 private static final double ee = 0.00669342162296594323; // ee: 椭球的偏心率平方。 - /** * 高德sdk定位 */ diff --git a/app/src/main/java/com/casic/dcms/utils/StringHelper.java b/app/src/main/java/com/casic/dcms/utils/StringHelper.java index 6bea75a..2faeae4 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -250,8 +250,12 @@ return R.drawable.ic_shangpu; case "部门处置": return R.drawable.ic_dept; + case "路桥养护": + return R.drawable.ic_bridge; + case "管网管理": + return R.drawable.ic_pipe; default: - return R.mipmap.app_logo; + return R.drawable.ic_default_icon; } } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index dc53815..f0be407 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -21,6 +21,8 @@ import com.casic.dcms.bean.HighEventBean; import com.casic.dcms.bean.HomePageBean; import com.casic.dcms.bean.LoginResultBean; +import com.casic.dcms.bean.MaintainContentBean; +import com.casic.dcms.bean.MaintainRecordBean; import com.casic.dcms.bean.NewVersionBean; import com.casic.dcms.bean.OnlinePersonBean; import com.casic.dcms.bean.OvertimeCaseBean; @@ -616,4 +618,42 @@ @POST("/mgr/simplelist") Observable obtainNextProcessPerson(@Header("token") String token, @Field("roleTips") String roleTips); + + /** + * 根据养护类型获取养护内容 + *

+ * http://111.198.10.15:11409/bridge/maintain/contentByType + */ + @FormUrlEncoded + @POST("/bridge/maintain/contentByType") + Observable obtainMaintainContent(@Header("token") String token, + @Field("type") String type); + + /** + * 桥梁新增打卡记录 + *

+ * http://111.198.10.15:11409/bridge/maintain/addApp + */ + @FormUrlEncoded + @POST("/bridge/maintain/addApp") + Observable addMaintainRecord(@Header("token") String token, + @Field("bridgeId") String bridgeId, + @Field("content") String content, + @Field("maintainTime") String maintainTime, + @Field("personId") String personId, + @Field("longitude") String longitude, + @Field("latitude") String latitude, + @Field("description") String description); + + /** + * 桥梁养护记录 + *

+ * http://111.198.10.15:11409/bridge/maintain/listPage?startDate=2021-06-21&endDate=2021-06-22 + */ + @GET("/bridge/maintain/listPage") + Observable obtainMaintainRecord(@Header("token") String token, + @Query("startDate") String beginDate, + @Query("endDate") String endDate, + @Query("limit") int limit, + @Query("offset") int offset); } diff --git a/app/build.gradle b/app/build.gradle index 6f0b518..bcfdc0d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ applicationId "com.casic.dcms" minSdkVersion 21 targetSdkVersion 30 - versionCode 19 - versionName "v1.0.0.11" + versionCode 20 + versionName "v1.0.0.12" ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 68f46c9..3090a91 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -89,7 +89,10 @@ - + + + + { + + private Context context; + private List dataRows; + private LayoutInflater layoutInflater; + private QMUITipDialog.Builder dialogBuilder; + + public MaintainRecordAdapter(Context context, List dataRows) { + this.context = context; + this.dataRows = dataRows; + layoutInflater = LayoutInflater.from(context); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = layoutInflater.inflate(R.layout.item_maintain_recycleview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + holder.bindView(dataRows.get(position)); + } + + @Override + public int getItemCount() { + return dataRows.size(); + } + + class ItemViewHolder extends RecyclerView.ViewHolder { + + private TextView bridgeNameView; + private ImageView descriptionImageView; + private TextView maintainContentView; + private TextView maintainTimeView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + bridgeNameView = itemView.findViewById(R.id.bridgeNameView); + descriptionImageView = itemView.findViewById(R.id.descriptionImageView); + maintainContentView = itemView.findViewById(R.id.maintainContentView); + maintainTimeView = itemView.findViewById(R.id.maintainTimeView); + } + + void bindView(MaintainRecordBean.DataBean.RowsBean rowsBean) { + bridgeNameView.setText(rowsBean.getBridgeName()); + String description = rowsBean.getDescription(); + if (TextUtils.isEmpty(description)) { + descriptionImageView.setVisibility(View.GONE); + } else { + descriptionImageView.setVisibility(View.VISIBLE); + descriptionImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + QMUITipDialog tipDialog = new QMUITipDialog.Builder(context) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_NOTHING) + .setTipWord(description) + .create(); + tipDialog.show(); + descriptionImageView.postDelayed(new Runnable() { + @Override + public void run() { + tipDialog.dismiss(); + } + }, 2000); + } + }); + } + maintainContentView.setText(rowsBean.getContent()); + maintainTimeView.setText(rowsBean.getMaintainTimeStr()); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java b/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java new file mode 100644 index 0000000..ded4fe1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java @@ -0,0 +1,41 @@ +package com.casic.dcms.bean; + +public class MaintainContentBean { + + private int code; + private String data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java b/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java new file mode 100644 index 0000000..2beea74 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java @@ -0,0 +1,301 @@ +package com.casic.dcms.bean; + +import java.util.List; + +public class MaintainRecordBean { + + private int code; + private DataBean data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + + private int total; + private List rows; + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public static class RowsBean { + /** + * bridgeId : 1 + * bridgeName : 永胜桥 + * category : 桥梁 + * code : 1624359572304 + * content : 日常养护,无异常 + * deptid : 1344110695992258561 + * description : + * id : 1407292162033041409 + * latitude : 39.914705918747295 + * longitude : 116.26295490330527 + * maintainTime : 2021-06-22 00:00:00 + * maintainTimeStr : 2021-06-22 + * name : + * personId : 1344179277212151809 + * personName : + * phone : + * status : + * statusName : + * tender : + * tenderCompany : + * ts : 2021-06-22 + * type : + * typeName : + */ + + private String bridgeId; + private String bridgeName; + private String category; + private String code; + private String content; + private String deptid; + private String description; + private String id; + private String latitude; + private String longitude; + private String maintainTime; + private String maintainTimeStr; + private String name; + private String personId; + private String personName; + private String phone; + private String status; + private String statusName; + private String tender; + private String tenderCompany; + private String ts; + private String type; + private String typeName; + + public String getBridgeId() { + return bridgeId; + } + + public void setBridgeId(String bridgeId) { + this.bridgeId = bridgeId; + } + + public String getBridgeName() { + return bridgeName; + } + + public void setBridgeName(String bridgeName) { + this.bridgeName = bridgeName; + } + + public String getCategory() { + return category; + } + + public void setCategory(String category) { + this.category = category; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLatitude() { + return latitude; + } + + public void setLatitude(String latitude) { + this.latitude = latitude; + } + + public String getLongitude() { + return longitude; + } + + public void setLongitude(String longitude) { + this.longitude = longitude; + } + + public String getMaintainTime() { + return maintainTime; + } + + public void setMaintainTime(String maintainTime) { + this.maintainTime = maintainTime; + } + + public String getMaintainTimeStr() { + return maintainTimeStr; + } + + public void setMaintainTimeStr(String maintainTimeStr) { + this.maintainTimeStr = maintainTimeStr; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPersonId() { + return personId; + } + + public void setPersonId(String personId) { + this.personId = personId; + } + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + 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 getTender() { + return tender; + } + + public void setTender(String tender) { + this.tender = tender; + } + + public String getTenderCompany() { + return tenderCompany; + } + + public void setTenderCompany(String tenderCompany) { + this.tenderCompany = tenderCompany; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getTypeName() { + return typeName; + } + + public void setTypeName(String typeName) { + this.typeName = typeName; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java new file mode 100644 index 0000000..4f7a588 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IMaintainRecordModel { + Subscription sendRetrofitRequest(String startDate, String endDate, int offset); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java new file mode 100644 index 0000000..dce3f91 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java @@ -0,0 +1,8 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ISubmitMaintainModel { + Subscription sendRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/MaintainRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/MaintainRecordModelImpl.java new file mode 100644 index 0000000..35fd486 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/MaintainRecordModelImpl.java @@ -0,0 +1,50 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.MaintainRecordBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class MaintainRecordModelImpl implements IMaintainRecordModel { + + private OnGetRecordListener listener; + + public MaintainRecordModelImpl(OnGetRecordListener recordListener) { + this.listener = recordListener; + } + + public interface OnGetRecordListener { + void onSuccess(MaintainRecordBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String startDate, String endDate, int offset) { + Observable observable = RetrofitServiceManager.getMaintainRecordResult(startDate, endDate, offset); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (e.getCause() != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(MaintainRecordBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java index 06f6fb4..9e2666d 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java @@ -29,7 +29,7 @@ @Override public Subscription sendRetrofitRequest() { - Observable observable = RetrofitServiceManager.getProcessPerson(); + Observable observable = RetrofitServiceManager.getProcessPersonResult(); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/SubmitMaintainModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/SubmitMaintainModelImpl.java new file mode 100644 index 0000000..2924fbe --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/SubmitMaintainModelImpl.java @@ -0,0 +1,52 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class SubmitMaintainModelImpl implements ISubmitMaintainModel { + + private OnSubmitListener listener; + + public SubmitMaintainModelImpl(OnSubmitListener submitListener) { + this.listener = submitListener; + } + + public interface OnSubmitListener { + void onSuccess(ActionResultBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description) { + Observable observable = RetrofitServiceManager.getAddMaintainRecordResult(bridgeId, + content, maintainTime, personId, longitude, latitude, description); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (e.getCause() != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(ActionResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IMaintainRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IMaintainRecordPresenter.java new file mode 100644 index 0000000..938a484 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IMaintainRecordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IMaintainRecordPresenter { + void onReadyRetrofitRequest(String startDate, String endDate, int offset); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ISubmitMaintainPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ISubmitMaintainPresenter.java new file mode 100644 index 0000000..511e717 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ISubmitMaintainPresenter.java @@ -0,0 +1,8 @@ +package com.casic.dcms.mvp.presenter; + +public interface ISubmitMaintainPresenter { + void onReadyRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/MaintainRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/MaintainRecordPresenterImpl.java new file mode 100644 index 0000000..fd99e30 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/MaintainRecordPresenterImpl.java @@ -0,0 +1,39 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.MaintainRecordBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.MaintainRecordModelImpl; +import com.casic.dcms.mvp.view.IMaintainRecordView; + +public class MaintainRecordPresenterImpl extends BasePresenter implements IMaintainRecordPresenter, MaintainRecordModelImpl.OnGetRecordListener { + + private IMaintainRecordView view; + private MaintainRecordModelImpl model; + + public MaintainRecordPresenterImpl(IMaintainRecordView cleanToiletRecordView) { + this.view = cleanToiletRecordView; + model = new MaintainRecordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String startDate, String endDate, int offset) { + view.showProgress(); + addSubscription(model.sendRetrofitRequest(startDate, endDate, offset)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(MaintainRecordBean result) { + view.hideProgress(); + view.obtainRecordResult(result); + } + + @Override + public void onFailure(Throwable throwable) { + view.hideProgress(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/SubmitMaintainPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/SubmitMaintainPresenterImpl.java new file mode 100644 index 0000000..7722427 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/SubmitMaintainPresenterImpl.java @@ -0,0 +1,42 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.SubmitMaintainModelImpl; +import com.casic.dcms.mvp.view.ISubmitMaintainView; + +public class SubmitMaintainPresenterImpl extends BasePresenter implements ISubmitMaintainPresenter, SubmitMaintainModelImpl.OnSubmitListener { + + private ISubmitMaintainView view; + private SubmitMaintainModelImpl actionModel; + + public SubmitMaintainPresenterImpl(ISubmitMaintainView submitCaseView) { + this.view = submitCaseView; + actionModel = new SubmitMaintainModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description) { + view.showProgress(); + addSubscription(actionModel.sendRetrofitRequest(bridgeId, content, maintainTime, personId, longitude, + latitude, description)); + } + + @Override + public void onSuccess(ActionResultBean resultBean) { + view.hideProgress(); + view.obtainSubmitResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + view.hideProgress(); + view.obtainDataFail(); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IMaintainRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/IMaintainRecordView.java new file mode 100644 index 0000000..8ff5189 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IMaintainRecordView.java @@ -0,0 +1,11 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.MaintainRecordBean; + +public interface IMaintainRecordView { + void obtainRecordResult(MaintainRecordBean resultBean); + + void showProgress(); + + void hideProgress(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ISubmitMaintainView.java b/app/src/main/java/com/casic/dcms/mvp/view/ISubmitMaintainView.java new file mode 100644 index 0000000..75a0629 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/ISubmitMaintainView.java @@ -0,0 +1,13 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.ActionResultBean; + +public interface ISubmitMaintainView { + void showProgress(); + + void hideProgress(); + + void obtainSubmitResult(ActionResultBean resultBean); + + void obtainDataFail(); +} diff --git a/app/src/main/java/com/casic/dcms/ui/BridgeMaintainActivity.java b/app/src/main/java/com/casic/dcms/ui/BridgeMaintainActivity.java new file mode 100644 index 0000000..84b0eef --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/BridgeMaintainActivity.java @@ -0,0 +1,239 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.content.Intent; +import android.location.Location; +import android.text.TextUtils; +import android.view.View; +import android.widget.EditText; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.amap.api.services.core.LatLonPoint; +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.mvp.presenter.SubmitMaintainPresenterImpl; +import com.casic.dcms.mvp.view.ISubmitMaintainView; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; +import com.casic.dcms.utils.SaveKeyValues; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.utils.callback.IAddressListener; +import com.casic.dcms.utils.callback.ILocationListener; +import com.casic.dcms.widgets.SignInDialog; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.util.Timer; +import java.util.TimerTask; + +import butterknife.BindView; +import butterknife.OnClick; + +public class BridgeMaintainActivity extends BaseActivity implements View.OnClickListener, ISubmitMaintainView { + + private static final String TAG = "BridgeMaintainActivity"; + private Context context = this; + @BindView(R.id.topLayout) + QMUITopBarLayout topLayout; + @BindView(R.id.bridgeNameView) + TextView bridgeNameView; + @BindView(R.id.maintainView) + TextView maintainView; + @BindView(R.id.maintainDateView) + TextView maintainDateView; + @BindView(R.id.liablePersonView) + TextView liablePersonView; + @BindView(R.id.submitButton) + QMUIRoundButton submitButton; + //以下非必填 + @BindView(R.id.remarksView) + EditText remarksView; + + private String bridgeId = ""; + private SubmitMaintainPresenterImpl submitMaintainPresenter; + + @Override + public int initLayoutView() { + return R.layout.activity_bridge; + } + + @Override + protected void setupTopBarLayout() { + topLayout.setTitle("路桥养护").setTextColor(ContextCompat.getColor(this, R.color.white)); + topLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + topLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + topLayout.addRightImageButton(R.drawable.ic_more, 2).setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + startActivity(new Intent(context, MaintainRecordActivity.class)); + } + }); + } + + @Override + public void initData() { + submitMaintainPresenter = new SubmitMaintainPresenterImpl(this); + } + + @Override + public void initEvent() { + submitButton.setChangeAlphaWhenPress(true); + liablePersonView.setText(StringHelper.getUserAccount()); + liablePersonView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); + + new Timer().schedule(new TimerTask() { + @Override + public void run() { + String systemDate = TimeOrDateUtil.timestampToDate(System.currentTimeMillis()); + maintainDateView.post(new Runnable() { + @Override + public void run() { + maintainDateView.setText(systemDate); + maintainDateView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); + } + }); + } + }, 0, 1000); + } + + @OnClick({R.id.bridgeLayout, R.id.maintainContentLayout, R.id.submitButton}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.bridgeLayout: + new QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("选择桥梁") + .addItem("永胜桥") + .addItem("黄洲桥") + .addItem("光明桥") + .setGravityCenter(true) + .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + + bridgeId = String.valueOf((1 + position)); + bridgeNameView.setText(tag); + bridgeNameView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); + } + }).build().show(); + break; + case R.id.maintainContentLayout: + new QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("养护内容") + .addItem("日常养护,无异常") + .addItem("清除表面污垢") + .addItem("修补混凝土空洞、破损、剥落和表面风化及裂缝") + .addItem("清除暴露钢筋的锈渍、恢复保护层") + .addItem("处理各种横、纵向构件的开裂、开焊和锈蚀") + .setGravityCenter(true) + .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + + maintainView.setText(tag); + maintainView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); + } + }).build().show(); + break; + case R.id.submitButton: + //获取定位信息 + LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + + } + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + if (aMapLocation != null) { + if (TextUtils.isEmpty(bridgeId)) { + ToastHelper.showToast("请先选择养护的桥梁", ToastHelper.WARING); + return; + } + String maintainContent = maintainView.getText().toString(); + if (TextUtils.isEmpty(maintainContent)) { + ToastHelper.showToast("请选择养护的内容", ToastHelper.WARING); + return; + } + + double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + LatLonPoint latLonPoint = new LatLonPoint(gcjToWgs[1], gcjToWgs[0]); + LocationHelper.antiCodingLocation(context, latLonPoint, new IAddressListener() { + @Override + public void onGetAddress(String address) { + SaveKeyValues.putValue("maintainAddress", address); + } + }); + //提交养护记录 + submitMaintainPresenter.onReadyRetrofitRequest(bridgeId, maintainContent, + maintainDateView.getText().toString(), + StringHelper.getUserId(), String.valueOf(gcjToWgs[0]), + String.valueOf(gcjToWgs[1]), + StringHelper.filterString(remarksView.getText().toString())); + } else { + ToastHelper.showToast("当前信号较弱,无法提交养护记录", ToastHelper.WARING); + } + } + }, true); + break; + default: + throw new IllegalStateException("Unexpected value: " + v.getId()); + } + } + + @Override + public void showProgress() { + OtherUtils.showLoadingDialog(this, "养护记录签到中,请稍后"); + } + + @Override + public void hideProgress() { + OtherUtils.dismissLoadingDialog(); + } + + @Override + public void obtainSubmitResult(ActionResultBean resultBean) { + String maintainAddress = (String) SaveKeyValues.getValue("maintainAddress", ""); + if (resultBean.isSuccess()) { + new SignInDialog.Builder() + .setContext(this) + .setTitle("桥梁养护记录提交成功") + .setAddress(maintainAddress.equals("") ? "详细位置解析失败" : maintainAddress) + .setOnDialogClickListener(new SignInDialog.OnDialogClickListener() { + @Override + public void onViewClick() { + startActivity(new Intent(context, MaintainRecordActivity.class)); + finish(); + } + }).build().show(); + } + } + + @Override + public void obtainDataFail() { + ToastHelper.showToast("操作失败", ToastHelper.ERROR); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (submitMaintainPresenter != null) { + submitMaintainPresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java index 7221e95..381b704 100644 --- a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java @@ -25,6 +25,7 @@ import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.datepicker.DatePopupWindow; +import com.qmuiteam.qmui.widget.QMUIEmptyView; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; @@ -38,8 +39,8 @@ public class CleanResultListActivity extends BaseCaseActivity implements ICleanToiletRecordView { - // @BindView(R.id.emptyView) -// QMUIEmptyView emptyView; + @BindView(R.id.emptyView) + QMUIEmptyView emptyView; @BindView(R.id.dateView) TextView dateView; @BindView(R.id.calendarView) @@ -126,7 +127,6 @@ @Override public void obtainCleanRecordResult(CleanRecordBean resultBean) { -// Log.d("TAG", "obtainCleanRecordResult: " + new Gson().toJson(resultBean)); if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); if (isRefresh) { @@ -175,9 +175,9 @@ } else { //首次加载数据 if (resultActivity.dataBeans.size() == 0) { -// resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); + resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); } else { -// resultActivity.emptyView.hide(); + resultActivity.emptyView.hide(); resultActivity.adapter = new RecordListAdapter(resultActivity, resultActivity.dataBeans); resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); diff --git a/app/src/main/java/com/casic/dcms/ui/MaintainRecordActivity.java b/app/src/main/java/com/casic/dcms/ui/MaintainRecordActivity.java new file mode 100644 index 0000000..05c41c9 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/MaintainRecordActivity.java @@ -0,0 +1,194 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.content.Intent; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.MaintainRecordAdapter; +import com.casic.dcms.base.BaseCaseActivity; +import com.casic.dcms.bean.MaintainRecordBean; +import com.casic.dcms.mvp.presenter.MaintainRecordPresenterImpl; +import com.casic.dcms.mvp.view.IMaintainRecordView; +import com.casic.dcms.utils.CalendarUtil; +import com.casic.dcms.utils.OtherUtils; +import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.datepicker.DatePopupWindow; +import com.qmuiteam.qmui.widget.QMUIEmptyView; +import com.scwang.smartrefresh.layout.SmartRefreshLayout; +import com.scwang.smartrefresh.layout.api.RefreshLayout; +import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; +import com.scwang.smartrefresh.layout.listener.OnRefreshListener; + +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class MaintainRecordActivity extends BaseCaseActivity implements IMaintainRecordView { + + @BindView(R.id.emptyView) + QMUIEmptyView emptyView; + @BindView(R.id.dateView) + TextView dateView; + @BindView(R.id.calendarView) + ImageView calendarView; + @BindView(R.id.refreshLayout) + SmartRefreshLayout refreshLayout; + @BindView(R.id.recordRecyclerView) + RecyclerView recordRecyclerView; + + private Context context = this; + private int pageIndex = 1; + private boolean isRefresh, isLoadMore = false; + private WeakReferenceHandler weakReferenceHandler; + private List dataBeans = new ArrayList<>(); + private MaintainRecordPresenterImpl recordPresenter; + private MaintainRecordAdapter adapter; + private int startGroup = -1; + private int endGroup = -1; + private int startChild = -1; + private int endChild = -1; + + @Override + protected String setTitleName() { + return "桥梁养护记录"; + } + + @Override + public int initLayoutView() { + return R.layout.activity_maintain_record; + } + + @Override + public void initData() { + weakReferenceHandler = new WeakReferenceHandler(this); + recordPresenter = new MaintainRecordPresenterImpl(this); + recordPresenter.onReadyRetrofitRequest("", "", pageIndex); + } + + @Override + public void initEvent() { + calendarView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + new DatePopupWindow + .Builder(MaintainRecordActivity.this, CalendarUtil.obtainLastTwoMonth(), v)//初始化 + .setInitSelect(startGroup, startChild, endGroup, endChild)//设置上一次选中的区间状态 + .setInitDay(true)//默认为true,UI内容为共几天、开始、结束;当为false时,UI内容为共几晚、入住、离开 + .setDateOnClickListener(new DatePopupWindow.DateOnClickListener() {//设置监听 + //点击完成按钮后回调返回方法 + @Override + public void getDate(String startDate, String endDate, int startGroupPosition, int + startChildPosition, int endGroupPosition, int endChildPosition) { + startGroup = startGroupPosition;//开始月份位置 + startChild = startChildPosition;//开始对应月份中日的位置 + endGroup = endGroupPosition;//结束月份位置 + endChild = endChildPosition;//结束对应月份中日的位置 + dateView.setText(startDate + "~" + endDate); + recordPresenter.onReadyRetrofitRequest(startDate, endDate, pageIndex); + } + }).builder(); + } + }); + refreshLayout.setOnRefreshListener(new OnRefreshListener() { + @Override + public void onRefresh(@NonNull final RefreshLayout refreshLayout) { + isRefresh = true; + //刷新之后页码重置 + pageIndex = 1; + recordPresenter.onReadyRetrofitRequest("", "", pageIndex); + } + }); + refreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() { + @Override + public void onLoadMore(@NonNull final RefreshLayout refreshLayout) { + isLoadMore = true; + pageIndex++; + recordPresenter.onReadyRetrofitRequest("", "", pageIndex); + } + }); + } + + @Override + public void obtainRecordResult(MaintainRecordBean resultBean) { + if (resultBean.isSuccess()) { + List dataRows = resultBean.getData().getRows(); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + ToastHelper.showToast("到底了,别拉了", ToastHelper.INFO); + } + dataBeans.addAll(dataRows); + refreshLayout.finishLoadMore(); + isLoadMore = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(20210622); + } + } + + @Override + public void showProgress() { + OtherUtils.showLoadingDialog(this, "查询记录中,请稍后"); + } + + @Override + public void hideProgress() { + OtherUtils.dismissLoadingDialog(); + } + + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(MaintainRecordActivity activity) { + reference = new WeakReference<>(activity); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + MaintainRecordActivity resultActivity = reference.get(); + if (msg.what == 20210622) { + if (resultActivity.isRefresh || resultActivity.isLoadMore) { + resultActivity.adapter.notifyDataSetChanged(); + } else { + //首次加载数据 + if (resultActivity.dataBeans.size() == 0) { + resultActivity.emptyView.show("抱歉,没有查到相关养护记录", null); + } else { + resultActivity.emptyView.hide(); + resultActivity.adapter = new MaintainRecordAdapter(resultActivity, resultActivity.dataBeans); + resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); + resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); + resultActivity.recordRecyclerView.setAdapter(resultActivity.adapter); + } + } + } + } + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (recordPresenter != null) { + recordPresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/PipelineManagerActivity.java b/app/src/main/java/com/casic/dcms/ui/PipelineManagerActivity.java new file mode 100644 index 0000000..fa77936 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/PipelineManagerActivity.java @@ -0,0 +1,27 @@ +package com.casic.dcms.ui; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; + +public class PipelineManagerActivity extends BaseActivity { + + @Override + public int initLayoutView() { + return R.layout.activity_pipe; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java index ac995d3..4959539 100644 --- a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java @@ -300,7 +300,8 @@ @Override public void onAMapLocationGet(AMapLocation aMapLocation) { if (aMapLocation != null) { - Point point = new Point(aMapLocation.getLongitude(), aMapLocation.getLatitude(), mapView.getSpatialReference()); + double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); mapView.setViewpointCenterAsync(point, 1200);//标注到指定经纬度并放大地图显示 //添加图片Marker addPictureMarker(point); @@ -311,11 +312,9 @@ ToastHelper.showToast("公厕标识不能为空", ToastHelper.WARING); return; } - double longitude = aMapLocation.getLongitude(); - double latitude = aMapLocation.getLatitude(); String cleanTime = TimeOrDateUtil.timestampToCompleteDate(System.currentTimeMillis()); cleanToiletPresenter.onReadyRetrofitRequest(toiletId, StringHelper.getUserId(), - String.valueOf(longitude), String.valueOf(latitude), cleanTime, imagePath, + String.valueOf(gcjToWgs[0]), String.valueOf(gcjToWgs[1]), cleanTime, imagePath, StringHelper.filterString(workContentView.getText().toString())); } } @@ -416,15 +415,18 @@ @Override public void obtainCleanResult(ActionResultBean resultBean) { -// Log.d(TAG, "obtainCleanResult: " + new Gson().toJson(resultBean)); if (resultBean.isSuccess()) { - new SignInDialog.Builder().setContext(this).setAddress(locationStreetView.getText().toString()).setOnDialogClickListener(new SignInDialog.OnDialogClickListener() { - @Override - public void onViewClick() { - startActivity(new Intent(context, CleanResultListActivity.class)); - PublicToiletActivity.this.finish(); - } - }).build().show(); + new SignInDialog.Builder() + .setContext(this) + .setTitle("保洁保卡成功") + .setAddress(locationStreetView.getText().toString()) + .setOnDialogClickListener(new SignInDialog.OnDialogClickListener() { + @Override + public void onViewClick() { + startActivity(new Intent(context, CleanResultListActivity.class)); + PublicToiletActivity.this.finish(); + } + }).build().show(); } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java index 03438b0..42d29a4 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java @@ -18,6 +18,7 @@ import com.casic.dcms.mvp.presenter.UserDataPresenterImpl; import com.casic.dcms.mvp.view.IHomePageView; import com.casic.dcms.mvp.view.IUserDataView; +import com.casic.dcms.ui.BridgeMaintainActivity; import com.casic.dcms.ui.CaseCheckActivity; import com.casic.dcms.ui.CaseHandleActivity; import com.casic.dcms.ui.CaseOnMapActivity; @@ -32,6 +33,7 @@ import com.casic.dcms.ui.OvertimeCaseActivity; import com.casic.dcms.ui.PackageHandleActivity; import com.casic.dcms.ui.PersonOnlineActivity; +import com.casic.dcms.ui.PipelineManagerActivity; import com.casic.dcms.ui.PublicToiletActivity; import com.casic.dcms.ui.UrgentCaseActivity; import com.casic.dcms.utils.StringHelper; @@ -161,6 +163,12 @@ case "部门处置": intent.setClass(context, DeptHandleActivity.class); break; + case "路桥养护": + intent.setClass(context, BridgeMaintainActivity.class); + break; + case "管网管理": + intent.setClass(context, PipelineManagerActivity.class); + break; default: break; } diff --git a/app/src/main/java/com/casic/dcms/utils/Constant.java b/app/src/main/java/com/casic/dcms/utils/Constant.java index d9c1d60..9bbbdb0 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -35,7 +35,8 @@ public static final String IP_KEY = "BASE_IP"; - public static final long FIVE_YEARS = 5L * 365 * 1000 * 60 * 60 * 24L; + public static final long FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L; + public static final long ONE_YEAR = 365 * 60 * 60 * 24 * 1000L; public static final long IMAGE_MINUS_SIZE = 100 * 1024; public static final long HTTP_TIMEOUT = 30L; public static final int PERMISSIONS_CODE = 999; diff --git a/app/src/main/java/com/casic/dcms/utils/LocationHelper.java b/app/src/main/java/com/casic/dcms/utils/LocationHelper.java index 8d95580..79aedbf 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocationHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/LocationHelper.java @@ -40,7 +40,6 @@ private static final double a = 6378245.0; // a: 卫星椭球坐标投影到平面地图坐标系的投影因子。 private static final double ee = 0.00669342162296594323; // ee: 椭球的偏心率平方。 - /** * 高德sdk定位 */ diff --git a/app/src/main/java/com/casic/dcms/utils/StringHelper.java b/app/src/main/java/com/casic/dcms/utils/StringHelper.java index 6bea75a..2faeae4 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -250,8 +250,12 @@ return R.drawable.ic_shangpu; case "部门处置": return R.drawable.ic_dept; + case "路桥养护": + return R.drawable.ic_bridge; + case "管网管理": + return R.drawable.ic_pipe; default: - return R.mipmap.app_logo; + return R.drawable.ic_default_icon; } } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index dc53815..f0be407 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -21,6 +21,8 @@ import com.casic.dcms.bean.HighEventBean; import com.casic.dcms.bean.HomePageBean; import com.casic.dcms.bean.LoginResultBean; +import com.casic.dcms.bean.MaintainContentBean; +import com.casic.dcms.bean.MaintainRecordBean; import com.casic.dcms.bean.NewVersionBean; import com.casic.dcms.bean.OnlinePersonBean; import com.casic.dcms.bean.OvertimeCaseBean; @@ -616,4 +618,42 @@ @POST("/mgr/simplelist") Observable obtainNextProcessPerson(@Header("token") String token, @Field("roleTips") String roleTips); + + /** + * 根据养护类型获取养护内容 + *

+ * http://111.198.10.15:11409/bridge/maintain/contentByType + */ + @FormUrlEncoded + @POST("/bridge/maintain/contentByType") + Observable obtainMaintainContent(@Header("token") String token, + @Field("type") String type); + + /** + * 桥梁新增打卡记录 + *

+ * http://111.198.10.15:11409/bridge/maintain/addApp + */ + @FormUrlEncoded + @POST("/bridge/maintain/addApp") + Observable addMaintainRecord(@Header("token") String token, + @Field("bridgeId") String bridgeId, + @Field("content") String content, + @Field("maintainTime") String maintainTime, + @Field("personId") String personId, + @Field("longitude") String longitude, + @Field("latitude") String latitude, + @Field("description") String description); + + /** + * 桥梁养护记录 + *

+ * http://111.198.10.15:11409/bridge/maintain/listPage?startDate=2021-06-21&endDate=2021-06-22 + */ + @GET("/bridge/maintain/listPage") + Observable obtainMaintainRecord(@Header("token") String token, + @Query("startDate") String beginDate, + @Query("endDate") String endDate, + @Query("limit") int limit, + @Query("offset") int offset); } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index 67e8da1..283354a 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -23,6 +23,8 @@ import com.casic.dcms.bean.HighEventBean; import com.casic.dcms.bean.HomePageBean; import com.casic.dcms.bean.LoginResultBean; +import com.casic.dcms.bean.MaintainContentBean; +import com.casic.dcms.bean.MaintainRecordBean; import com.casic.dcms.bean.NewVersionBean; import com.casic.dcms.bean.OnlinePersonBean; import com.casic.dcms.bean.OvertimeCaseBean; @@ -638,9 +640,41 @@ /** * 获取下级处置员 */ - public static Observable getProcessPerson() { + public static Observable getProcessPersonResult() { Retrofit retrofit = createRetrofit(); RetrofitService service = retrofit.create(RetrofitService.class); return service.obtainNextProcessPerson(AuthenticationHelper.getToken(), "process"); } + + /** + * 根据养护类型获取养护内容 + */ + public static Observable getMaintainContentResult(String type) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainMaintainContent(AuthenticationHelper.getToken(), type); + } + + /** + * 桥梁新增打卡记录 + */ + public static Observable getAddMaintainRecordResult(String bridgeId, String content, + String maintainTime, String personId, + String longitude, String latitude, + String description) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.addMaintainRecord(AuthenticationHelper.getToken(), bridgeId, content, maintainTime, + personId, longitude, latitude, description); + } + + /** + * 桥梁养护记录 + */ + public static Observable getMaintainRecordResult(String startDate, String endDate, int offset) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainMaintainRecord(AuthenticationHelper.getToken(), startDate, endDate, Constant.PAGE_LIMIT, + offset); + } } diff --git a/app/build.gradle b/app/build.gradle index 6f0b518..bcfdc0d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ applicationId "com.casic.dcms" minSdkVersion 21 targetSdkVersion 30 - versionCode 19 - versionName "v1.0.0.11" + versionCode 20 + versionName "v1.0.0.12" ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 68f46c9..3090a91 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -89,7 +89,10 @@ - + + + + { + + private Context context; + private List dataRows; + private LayoutInflater layoutInflater; + private QMUITipDialog.Builder dialogBuilder; + + public MaintainRecordAdapter(Context context, List dataRows) { + this.context = context; + this.dataRows = dataRows; + layoutInflater = LayoutInflater.from(context); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = layoutInflater.inflate(R.layout.item_maintain_recycleview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + holder.bindView(dataRows.get(position)); + } + + @Override + public int getItemCount() { + return dataRows.size(); + } + + class ItemViewHolder extends RecyclerView.ViewHolder { + + private TextView bridgeNameView; + private ImageView descriptionImageView; + private TextView maintainContentView; + private TextView maintainTimeView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + bridgeNameView = itemView.findViewById(R.id.bridgeNameView); + descriptionImageView = itemView.findViewById(R.id.descriptionImageView); + maintainContentView = itemView.findViewById(R.id.maintainContentView); + maintainTimeView = itemView.findViewById(R.id.maintainTimeView); + } + + void bindView(MaintainRecordBean.DataBean.RowsBean rowsBean) { + bridgeNameView.setText(rowsBean.getBridgeName()); + String description = rowsBean.getDescription(); + if (TextUtils.isEmpty(description)) { + descriptionImageView.setVisibility(View.GONE); + } else { + descriptionImageView.setVisibility(View.VISIBLE); + descriptionImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + QMUITipDialog tipDialog = new QMUITipDialog.Builder(context) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_NOTHING) + .setTipWord(description) + .create(); + tipDialog.show(); + descriptionImageView.postDelayed(new Runnable() { + @Override + public void run() { + tipDialog.dismiss(); + } + }, 2000); + } + }); + } + maintainContentView.setText(rowsBean.getContent()); + maintainTimeView.setText(rowsBean.getMaintainTimeStr()); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java b/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java new file mode 100644 index 0000000..ded4fe1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java @@ -0,0 +1,41 @@ +package com.casic.dcms.bean; + +public class MaintainContentBean { + + private int code; + private String data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java b/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java new file mode 100644 index 0000000..2beea74 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java @@ -0,0 +1,301 @@ +package com.casic.dcms.bean; + +import java.util.List; + +public class MaintainRecordBean { + + private int code; + private DataBean data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + + private int total; + private List rows; + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public static class RowsBean { + /** + * bridgeId : 1 + * bridgeName : 永胜桥 + * category : 桥梁 + * code : 1624359572304 + * content : 日常养护,无异常 + * deptid : 1344110695992258561 + * description : + * id : 1407292162033041409 + * latitude : 39.914705918747295 + * longitude : 116.26295490330527 + * maintainTime : 2021-06-22 00:00:00 + * maintainTimeStr : 2021-06-22 + * name : + * personId : 1344179277212151809 + * personName : + * phone : + * status : + * statusName : + * tender : + * tenderCompany : + * ts : 2021-06-22 + * type : + * typeName : + */ + + private String bridgeId; + private String bridgeName; + private String category; + private String code; + private String content; + private String deptid; + private String description; + private String id; + private String latitude; + private String longitude; + private String maintainTime; + private String maintainTimeStr; + private String name; + private String personId; + private String personName; + private String phone; + private String status; + private String statusName; + private String tender; + private String tenderCompany; + private String ts; + private String type; + private String typeName; + + public String getBridgeId() { + return bridgeId; + } + + public void setBridgeId(String bridgeId) { + this.bridgeId = bridgeId; + } + + public String getBridgeName() { + return bridgeName; + } + + public void setBridgeName(String bridgeName) { + this.bridgeName = bridgeName; + } + + public String getCategory() { + return category; + } + + public void setCategory(String category) { + this.category = category; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLatitude() { + return latitude; + } + + public void setLatitude(String latitude) { + this.latitude = latitude; + } + + public String getLongitude() { + return longitude; + } + + public void setLongitude(String longitude) { + this.longitude = longitude; + } + + public String getMaintainTime() { + return maintainTime; + } + + public void setMaintainTime(String maintainTime) { + this.maintainTime = maintainTime; + } + + public String getMaintainTimeStr() { + return maintainTimeStr; + } + + public void setMaintainTimeStr(String maintainTimeStr) { + this.maintainTimeStr = maintainTimeStr; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPersonId() { + return personId; + } + + public void setPersonId(String personId) { + this.personId = personId; + } + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + 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 getTender() { + return tender; + } + + public void setTender(String tender) { + this.tender = tender; + } + + public String getTenderCompany() { + return tenderCompany; + } + + public void setTenderCompany(String tenderCompany) { + this.tenderCompany = tenderCompany; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getTypeName() { + return typeName; + } + + public void setTypeName(String typeName) { + this.typeName = typeName; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java new file mode 100644 index 0000000..4f7a588 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IMaintainRecordModel { + Subscription sendRetrofitRequest(String startDate, String endDate, int offset); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java new file mode 100644 index 0000000..dce3f91 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java @@ -0,0 +1,8 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ISubmitMaintainModel { + Subscription sendRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/MaintainRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/MaintainRecordModelImpl.java new file mode 100644 index 0000000..35fd486 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/MaintainRecordModelImpl.java @@ -0,0 +1,50 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.MaintainRecordBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class MaintainRecordModelImpl implements IMaintainRecordModel { + + private OnGetRecordListener listener; + + public MaintainRecordModelImpl(OnGetRecordListener recordListener) { + this.listener = recordListener; + } + + public interface OnGetRecordListener { + void onSuccess(MaintainRecordBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String startDate, String endDate, int offset) { + Observable observable = RetrofitServiceManager.getMaintainRecordResult(startDate, endDate, offset); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (e.getCause() != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(MaintainRecordBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java index 06f6fb4..9e2666d 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java @@ -29,7 +29,7 @@ @Override public Subscription sendRetrofitRequest() { - Observable observable = RetrofitServiceManager.getProcessPerson(); + Observable observable = RetrofitServiceManager.getProcessPersonResult(); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/SubmitMaintainModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/SubmitMaintainModelImpl.java new file mode 100644 index 0000000..2924fbe --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/SubmitMaintainModelImpl.java @@ -0,0 +1,52 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class SubmitMaintainModelImpl implements ISubmitMaintainModel { + + private OnSubmitListener listener; + + public SubmitMaintainModelImpl(OnSubmitListener submitListener) { + this.listener = submitListener; + } + + public interface OnSubmitListener { + void onSuccess(ActionResultBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description) { + Observable observable = RetrofitServiceManager.getAddMaintainRecordResult(bridgeId, + content, maintainTime, personId, longitude, latitude, description); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (e.getCause() != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(ActionResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IMaintainRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IMaintainRecordPresenter.java new file mode 100644 index 0000000..938a484 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IMaintainRecordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IMaintainRecordPresenter { + void onReadyRetrofitRequest(String startDate, String endDate, int offset); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ISubmitMaintainPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ISubmitMaintainPresenter.java new file mode 100644 index 0000000..511e717 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ISubmitMaintainPresenter.java @@ -0,0 +1,8 @@ +package com.casic.dcms.mvp.presenter; + +public interface ISubmitMaintainPresenter { + void onReadyRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/MaintainRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/MaintainRecordPresenterImpl.java new file mode 100644 index 0000000..fd99e30 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/MaintainRecordPresenterImpl.java @@ -0,0 +1,39 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.MaintainRecordBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.MaintainRecordModelImpl; +import com.casic.dcms.mvp.view.IMaintainRecordView; + +public class MaintainRecordPresenterImpl extends BasePresenter implements IMaintainRecordPresenter, MaintainRecordModelImpl.OnGetRecordListener { + + private IMaintainRecordView view; + private MaintainRecordModelImpl model; + + public MaintainRecordPresenterImpl(IMaintainRecordView cleanToiletRecordView) { + this.view = cleanToiletRecordView; + model = new MaintainRecordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String startDate, String endDate, int offset) { + view.showProgress(); + addSubscription(model.sendRetrofitRequest(startDate, endDate, offset)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(MaintainRecordBean result) { + view.hideProgress(); + view.obtainRecordResult(result); + } + + @Override + public void onFailure(Throwable throwable) { + view.hideProgress(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/SubmitMaintainPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/SubmitMaintainPresenterImpl.java new file mode 100644 index 0000000..7722427 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/SubmitMaintainPresenterImpl.java @@ -0,0 +1,42 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.SubmitMaintainModelImpl; +import com.casic.dcms.mvp.view.ISubmitMaintainView; + +public class SubmitMaintainPresenterImpl extends BasePresenter implements ISubmitMaintainPresenter, SubmitMaintainModelImpl.OnSubmitListener { + + private ISubmitMaintainView view; + private SubmitMaintainModelImpl actionModel; + + public SubmitMaintainPresenterImpl(ISubmitMaintainView submitCaseView) { + this.view = submitCaseView; + actionModel = new SubmitMaintainModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description) { + view.showProgress(); + addSubscription(actionModel.sendRetrofitRequest(bridgeId, content, maintainTime, personId, longitude, + latitude, description)); + } + + @Override + public void onSuccess(ActionResultBean resultBean) { + view.hideProgress(); + view.obtainSubmitResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + view.hideProgress(); + view.obtainDataFail(); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IMaintainRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/IMaintainRecordView.java new file mode 100644 index 0000000..8ff5189 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IMaintainRecordView.java @@ -0,0 +1,11 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.MaintainRecordBean; + +public interface IMaintainRecordView { + void obtainRecordResult(MaintainRecordBean resultBean); + + void showProgress(); + + void hideProgress(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ISubmitMaintainView.java b/app/src/main/java/com/casic/dcms/mvp/view/ISubmitMaintainView.java new file mode 100644 index 0000000..75a0629 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/ISubmitMaintainView.java @@ -0,0 +1,13 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.ActionResultBean; + +public interface ISubmitMaintainView { + void showProgress(); + + void hideProgress(); + + void obtainSubmitResult(ActionResultBean resultBean); + + void obtainDataFail(); +} diff --git a/app/src/main/java/com/casic/dcms/ui/BridgeMaintainActivity.java b/app/src/main/java/com/casic/dcms/ui/BridgeMaintainActivity.java new file mode 100644 index 0000000..84b0eef --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/BridgeMaintainActivity.java @@ -0,0 +1,239 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.content.Intent; +import android.location.Location; +import android.text.TextUtils; +import android.view.View; +import android.widget.EditText; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.amap.api.services.core.LatLonPoint; +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.mvp.presenter.SubmitMaintainPresenterImpl; +import com.casic.dcms.mvp.view.ISubmitMaintainView; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; +import com.casic.dcms.utils.SaveKeyValues; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.utils.callback.IAddressListener; +import com.casic.dcms.utils.callback.ILocationListener; +import com.casic.dcms.widgets.SignInDialog; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.util.Timer; +import java.util.TimerTask; + +import butterknife.BindView; +import butterknife.OnClick; + +public class BridgeMaintainActivity extends BaseActivity implements View.OnClickListener, ISubmitMaintainView { + + private static final String TAG = "BridgeMaintainActivity"; + private Context context = this; + @BindView(R.id.topLayout) + QMUITopBarLayout topLayout; + @BindView(R.id.bridgeNameView) + TextView bridgeNameView; + @BindView(R.id.maintainView) + TextView maintainView; + @BindView(R.id.maintainDateView) + TextView maintainDateView; + @BindView(R.id.liablePersonView) + TextView liablePersonView; + @BindView(R.id.submitButton) + QMUIRoundButton submitButton; + //以下非必填 + @BindView(R.id.remarksView) + EditText remarksView; + + private String bridgeId = ""; + private SubmitMaintainPresenterImpl submitMaintainPresenter; + + @Override + public int initLayoutView() { + return R.layout.activity_bridge; + } + + @Override + protected void setupTopBarLayout() { + topLayout.setTitle("路桥养护").setTextColor(ContextCompat.getColor(this, R.color.white)); + topLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + topLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + topLayout.addRightImageButton(R.drawable.ic_more, 2).setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + startActivity(new Intent(context, MaintainRecordActivity.class)); + } + }); + } + + @Override + public void initData() { + submitMaintainPresenter = new SubmitMaintainPresenterImpl(this); + } + + @Override + public void initEvent() { + submitButton.setChangeAlphaWhenPress(true); + liablePersonView.setText(StringHelper.getUserAccount()); + liablePersonView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); + + new Timer().schedule(new TimerTask() { + @Override + public void run() { + String systemDate = TimeOrDateUtil.timestampToDate(System.currentTimeMillis()); + maintainDateView.post(new Runnable() { + @Override + public void run() { + maintainDateView.setText(systemDate); + maintainDateView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); + } + }); + } + }, 0, 1000); + } + + @OnClick({R.id.bridgeLayout, R.id.maintainContentLayout, R.id.submitButton}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.bridgeLayout: + new QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("选择桥梁") + .addItem("永胜桥") + .addItem("黄洲桥") + .addItem("光明桥") + .setGravityCenter(true) + .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + + bridgeId = String.valueOf((1 + position)); + bridgeNameView.setText(tag); + bridgeNameView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); + } + }).build().show(); + break; + case R.id.maintainContentLayout: + new QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("养护内容") + .addItem("日常养护,无异常") + .addItem("清除表面污垢") + .addItem("修补混凝土空洞、破损、剥落和表面风化及裂缝") + .addItem("清除暴露钢筋的锈渍、恢复保护层") + .addItem("处理各种横、纵向构件的开裂、开焊和锈蚀") + .setGravityCenter(true) + .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + + maintainView.setText(tag); + maintainView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); + } + }).build().show(); + break; + case R.id.submitButton: + //获取定位信息 + LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + + } + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + if (aMapLocation != null) { + if (TextUtils.isEmpty(bridgeId)) { + ToastHelper.showToast("请先选择养护的桥梁", ToastHelper.WARING); + return; + } + String maintainContent = maintainView.getText().toString(); + if (TextUtils.isEmpty(maintainContent)) { + ToastHelper.showToast("请选择养护的内容", ToastHelper.WARING); + return; + } + + double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + LatLonPoint latLonPoint = new LatLonPoint(gcjToWgs[1], gcjToWgs[0]); + LocationHelper.antiCodingLocation(context, latLonPoint, new IAddressListener() { + @Override + public void onGetAddress(String address) { + SaveKeyValues.putValue("maintainAddress", address); + } + }); + //提交养护记录 + submitMaintainPresenter.onReadyRetrofitRequest(bridgeId, maintainContent, + maintainDateView.getText().toString(), + StringHelper.getUserId(), String.valueOf(gcjToWgs[0]), + String.valueOf(gcjToWgs[1]), + StringHelper.filterString(remarksView.getText().toString())); + } else { + ToastHelper.showToast("当前信号较弱,无法提交养护记录", ToastHelper.WARING); + } + } + }, true); + break; + default: + throw new IllegalStateException("Unexpected value: " + v.getId()); + } + } + + @Override + public void showProgress() { + OtherUtils.showLoadingDialog(this, "养护记录签到中,请稍后"); + } + + @Override + public void hideProgress() { + OtherUtils.dismissLoadingDialog(); + } + + @Override + public void obtainSubmitResult(ActionResultBean resultBean) { + String maintainAddress = (String) SaveKeyValues.getValue("maintainAddress", ""); + if (resultBean.isSuccess()) { + new SignInDialog.Builder() + .setContext(this) + .setTitle("桥梁养护记录提交成功") + .setAddress(maintainAddress.equals("") ? "详细位置解析失败" : maintainAddress) + .setOnDialogClickListener(new SignInDialog.OnDialogClickListener() { + @Override + public void onViewClick() { + startActivity(new Intent(context, MaintainRecordActivity.class)); + finish(); + } + }).build().show(); + } + } + + @Override + public void obtainDataFail() { + ToastHelper.showToast("操作失败", ToastHelper.ERROR); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (submitMaintainPresenter != null) { + submitMaintainPresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java index 7221e95..381b704 100644 --- a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java @@ -25,6 +25,7 @@ import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.datepicker.DatePopupWindow; +import com.qmuiteam.qmui.widget.QMUIEmptyView; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; @@ -38,8 +39,8 @@ public class CleanResultListActivity extends BaseCaseActivity implements ICleanToiletRecordView { - // @BindView(R.id.emptyView) -// QMUIEmptyView emptyView; + @BindView(R.id.emptyView) + QMUIEmptyView emptyView; @BindView(R.id.dateView) TextView dateView; @BindView(R.id.calendarView) @@ -126,7 +127,6 @@ @Override public void obtainCleanRecordResult(CleanRecordBean resultBean) { -// Log.d("TAG", "obtainCleanRecordResult: " + new Gson().toJson(resultBean)); if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); if (isRefresh) { @@ -175,9 +175,9 @@ } else { //首次加载数据 if (resultActivity.dataBeans.size() == 0) { -// resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); + resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); } else { -// resultActivity.emptyView.hide(); + resultActivity.emptyView.hide(); resultActivity.adapter = new RecordListAdapter(resultActivity, resultActivity.dataBeans); resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); diff --git a/app/src/main/java/com/casic/dcms/ui/MaintainRecordActivity.java b/app/src/main/java/com/casic/dcms/ui/MaintainRecordActivity.java new file mode 100644 index 0000000..05c41c9 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/MaintainRecordActivity.java @@ -0,0 +1,194 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.content.Intent; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.MaintainRecordAdapter; +import com.casic.dcms.base.BaseCaseActivity; +import com.casic.dcms.bean.MaintainRecordBean; +import com.casic.dcms.mvp.presenter.MaintainRecordPresenterImpl; +import com.casic.dcms.mvp.view.IMaintainRecordView; +import com.casic.dcms.utils.CalendarUtil; +import com.casic.dcms.utils.OtherUtils; +import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.datepicker.DatePopupWindow; +import com.qmuiteam.qmui.widget.QMUIEmptyView; +import com.scwang.smartrefresh.layout.SmartRefreshLayout; +import com.scwang.smartrefresh.layout.api.RefreshLayout; +import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; +import com.scwang.smartrefresh.layout.listener.OnRefreshListener; + +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class MaintainRecordActivity extends BaseCaseActivity implements IMaintainRecordView { + + @BindView(R.id.emptyView) + QMUIEmptyView emptyView; + @BindView(R.id.dateView) + TextView dateView; + @BindView(R.id.calendarView) + ImageView calendarView; + @BindView(R.id.refreshLayout) + SmartRefreshLayout refreshLayout; + @BindView(R.id.recordRecyclerView) + RecyclerView recordRecyclerView; + + private Context context = this; + private int pageIndex = 1; + private boolean isRefresh, isLoadMore = false; + private WeakReferenceHandler weakReferenceHandler; + private List dataBeans = new ArrayList<>(); + private MaintainRecordPresenterImpl recordPresenter; + private MaintainRecordAdapter adapter; + private int startGroup = -1; + private int endGroup = -1; + private int startChild = -1; + private int endChild = -1; + + @Override + protected String setTitleName() { + return "桥梁养护记录"; + } + + @Override + public int initLayoutView() { + return R.layout.activity_maintain_record; + } + + @Override + public void initData() { + weakReferenceHandler = new WeakReferenceHandler(this); + recordPresenter = new MaintainRecordPresenterImpl(this); + recordPresenter.onReadyRetrofitRequest("", "", pageIndex); + } + + @Override + public void initEvent() { + calendarView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + new DatePopupWindow + .Builder(MaintainRecordActivity.this, CalendarUtil.obtainLastTwoMonth(), v)//初始化 + .setInitSelect(startGroup, startChild, endGroup, endChild)//设置上一次选中的区间状态 + .setInitDay(true)//默认为true,UI内容为共几天、开始、结束;当为false时,UI内容为共几晚、入住、离开 + .setDateOnClickListener(new DatePopupWindow.DateOnClickListener() {//设置监听 + //点击完成按钮后回调返回方法 + @Override + public void getDate(String startDate, String endDate, int startGroupPosition, int + startChildPosition, int endGroupPosition, int endChildPosition) { + startGroup = startGroupPosition;//开始月份位置 + startChild = startChildPosition;//开始对应月份中日的位置 + endGroup = endGroupPosition;//结束月份位置 + endChild = endChildPosition;//结束对应月份中日的位置 + dateView.setText(startDate + "~" + endDate); + recordPresenter.onReadyRetrofitRequest(startDate, endDate, pageIndex); + } + }).builder(); + } + }); + refreshLayout.setOnRefreshListener(new OnRefreshListener() { + @Override + public void onRefresh(@NonNull final RefreshLayout refreshLayout) { + isRefresh = true; + //刷新之后页码重置 + pageIndex = 1; + recordPresenter.onReadyRetrofitRequest("", "", pageIndex); + } + }); + refreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() { + @Override + public void onLoadMore(@NonNull final RefreshLayout refreshLayout) { + isLoadMore = true; + pageIndex++; + recordPresenter.onReadyRetrofitRequest("", "", pageIndex); + } + }); + } + + @Override + public void obtainRecordResult(MaintainRecordBean resultBean) { + if (resultBean.isSuccess()) { + List dataRows = resultBean.getData().getRows(); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + ToastHelper.showToast("到底了,别拉了", ToastHelper.INFO); + } + dataBeans.addAll(dataRows); + refreshLayout.finishLoadMore(); + isLoadMore = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(20210622); + } + } + + @Override + public void showProgress() { + OtherUtils.showLoadingDialog(this, "查询记录中,请稍后"); + } + + @Override + public void hideProgress() { + OtherUtils.dismissLoadingDialog(); + } + + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(MaintainRecordActivity activity) { + reference = new WeakReference<>(activity); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + MaintainRecordActivity resultActivity = reference.get(); + if (msg.what == 20210622) { + if (resultActivity.isRefresh || resultActivity.isLoadMore) { + resultActivity.adapter.notifyDataSetChanged(); + } else { + //首次加载数据 + if (resultActivity.dataBeans.size() == 0) { + resultActivity.emptyView.show("抱歉,没有查到相关养护记录", null); + } else { + resultActivity.emptyView.hide(); + resultActivity.adapter = new MaintainRecordAdapter(resultActivity, resultActivity.dataBeans); + resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); + resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); + resultActivity.recordRecyclerView.setAdapter(resultActivity.adapter); + } + } + } + } + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (recordPresenter != null) { + recordPresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/PipelineManagerActivity.java b/app/src/main/java/com/casic/dcms/ui/PipelineManagerActivity.java new file mode 100644 index 0000000..fa77936 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/PipelineManagerActivity.java @@ -0,0 +1,27 @@ +package com.casic.dcms.ui; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; + +public class PipelineManagerActivity extends BaseActivity { + + @Override + public int initLayoutView() { + return R.layout.activity_pipe; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java index ac995d3..4959539 100644 --- a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java @@ -300,7 +300,8 @@ @Override public void onAMapLocationGet(AMapLocation aMapLocation) { if (aMapLocation != null) { - Point point = new Point(aMapLocation.getLongitude(), aMapLocation.getLatitude(), mapView.getSpatialReference()); + double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); mapView.setViewpointCenterAsync(point, 1200);//标注到指定经纬度并放大地图显示 //添加图片Marker addPictureMarker(point); @@ -311,11 +312,9 @@ ToastHelper.showToast("公厕标识不能为空", ToastHelper.WARING); return; } - double longitude = aMapLocation.getLongitude(); - double latitude = aMapLocation.getLatitude(); String cleanTime = TimeOrDateUtil.timestampToCompleteDate(System.currentTimeMillis()); cleanToiletPresenter.onReadyRetrofitRequest(toiletId, StringHelper.getUserId(), - String.valueOf(longitude), String.valueOf(latitude), cleanTime, imagePath, + String.valueOf(gcjToWgs[0]), String.valueOf(gcjToWgs[1]), cleanTime, imagePath, StringHelper.filterString(workContentView.getText().toString())); } } @@ -416,15 +415,18 @@ @Override public void obtainCleanResult(ActionResultBean resultBean) { -// Log.d(TAG, "obtainCleanResult: " + new Gson().toJson(resultBean)); if (resultBean.isSuccess()) { - new SignInDialog.Builder().setContext(this).setAddress(locationStreetView.getText().toString()).setOnDialogClickListener(new SignInDialog.OnDialogClickListener() { - @Override - public void onViewClick() { - startActivity(new Intent(context, CleanResultListActivity.class)); - PublicToiletActivity.this.finish(); - } - }).build().show(); + new SignInDialog.Builder() + .setContext(this) + .setTitle("保洁保卡成功") + .setAddress(locationStreetView.getText().toString()) + .setOnDialogClickListener(new SignInDialog.OnDialogClickListener() { + @Override + public void onViewClick() { + startActivity(new Intent(context, CleanResultListActivity.class)); + PublicToiletActivity.this.finish(); + } + }).build().show(); } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java index 03438b0..42d29a4 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java @@ -18,6 +18,7 @@ import com.casic.dcms.mvp.presenter.UserDataPresenterImpl; import com.casic.dcms.mvp.view.IHomePageView; import com.casic.dcms.mvp.view.IUserDataView; +import com.casic.dcms.ui.BridgeMaintainActivity; import com.casic.dcms.ui.CaseCheckActivity; import com.casic.dcms.ui.CaseHandleActivity; import com.casic.dcms.ui.CaseOnMapActivity; @@ -32,6 +33,7 @@ import com.casic.dcms.ui.OvertimeCaseActivity; import com.casic.dcms.ui.PackageHandleActivity; import com.casic.dcms.ui.PersonOnlineActivity; +import com.casic.dcms.ui.PipelineManagerActivity; import com.casic.dcms.ui.PublicToiletActivity; import com.casic.dcms.ui.UrgentCaseActivity; import com.casic.dcms.utils.StringHelper; @@ -161,6 +163,12 @@ case "部门处置": intent.setClass(context, DeptHandleActivity.class); break; + case "路桥养护": + intent.setClass(context, BridgeMaintainActivity.class); + break; + case "管网管理": + intent.setClass(context, PipelineManagerActivity.class); + break; default: break; } diff --git a/app/src/main/java/com/casic/dcms/utils/Constant.java b/app/src/main/java/com/casic/dcms/utils/Constant.java index d9c1d60..9bbbdb0 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -35,7 +35,8 @@ public static final String IP_KEY = "BASE_IP"; - public static final long FIVE_YEARS = 5L * 365 * 1000 * 60 * 60 * 24L; + public static final long FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L; + public static final long ONE_YEAR = 365 * 60 * 60 * 24 * 1000L; public static final long IMAGE_MINUS_SIZE = 100 * 1024; public static final long HTTP_TIMEOUT = 30L; public static final int PERMISSIONS_CODE = 999; diff --git a/app/src/main/java/com/casic/dcms/utils/LocationHelper.java b/app/src/main/java/com/casic/dcms/utils/LocationHelper.java index 8d95580..79aedbf 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocationHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/LocationHelper.java @@ -40,7 +40,6 @@ private static final double a = 6378245.0; // a: 卫星椭球坐标投影到平面地图坐标系的投影因子。 private static final double ee = 0.00669342162296594323; // ee: 椭球的偏心率平方。 - /** * 高德sdk定位 */ diff --git a/app/src/main/java/com/casic/dcms/utils/StringHelper.java b/app/src/main/java/com/casic/dcms/utils/StringHelper.java index 6bea75a..2faeae4 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -250,8 +250,12 @@ return R.drawable.ic_shangpu; case "部门处置": return R.drawable.ic_dept; + case "路桥养护": + return R.drawable.ic_bridge; + case "管网管理": + return R.drawable.ic_pipe; default: - return R.mipmap.app_logo; + return R.drawable.ic_default_icon; } } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index dc53815..f0be407 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -21,6 +21,8 @@ import com.casic.dcms.bean.HighEventBean; import com.casic.dcms.bean.HomePageBean; import com.casic.dcms.bean.LoginResultBean; +import com.casic.dcms.bean.MaintainContentBean; +import com.casic.dcms.bean.MaintainRecordBean; import com.casic.dcms.bean.NewVersionBean; import com.casic.dcms.bean.OnlinePersonBean; import com.casic.dcms.bean.OvertimeCaseBean; @@ -616,4 +618,42 @@ @POST("/mgr/simplelist") Observable obtainNextProcessPerson(@Header("token") String token, @Field("roleTips") String roleTips); + + /** + * 根据养护类型获取养护内容 + *

+ * http://111.198.10.15:11409/bridge/maintain/contentByType + */ + @FormUrlEncoded + @POST("/bridge/maintain/contentByType") + Observable obtainMaintainContent(@Header("token") String token, + @Field("type") String type); + + /** + * 桥梁新增打卡记录 + *

+ * http://111.198.10.15:11409/bridge/maintain/addApp + */ + @FormUrlEncoded + @POST("/bridge/maintain/addApp") + Observable addMaintainRecord(@Header("token") String token, + @Field("bridgeId") String bridgeId, + @Field("content") String content, + @Field("maintainTime") String maintainTime, + @Field("personId") String personId, + @Field("longitude") String longitude, + @Field("latitude") String latitude, + @Field("description") String description); + + /** + * 桥梁养护记录 + *

+ * http://111.198.10.15:11409/bridge/maintain/listPage?startDate=2021-06-21&endDate=2021-06-22 + */ + @GET("/bridge/maintain/listPage") + Observable obtainMaintainRecord(@Header("token") String token, + @Query("startDate") String beginDate, + @Query("endDate") String endDate, + @Query("limit") int limit, + @Query("offset") int offset); } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index 67e8da1..283354a 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -23,6 +23,8 @@ import com.casic.dcms.bean.HighEventBean; import com.casic.dcms.bean.HomePageBean; import com.casic.dcms.bean.LoginResultBean; +import com.casic.dcms.bean.MaintainContentBean; +import com.casic.dcms.bean.MaintainRecordBean; import com.casic.dcms.bean.NewVersionBean; import com.casic.dcms.bean.OnlinePersonBean; import com.casic.dcms.bean.OvertimeCaseBean; @@ -638,9 +640,41 @@ /** * 获取下级处置员 */ - public static Observable getProcessPerson() { + public static Observable getProcessPersonResult() { Retrofit retrofit = createRetrofit(); RetrofitService service = retrofit.create(RetrofitService.class); return service.obtainNextProcessPerson(AuthenticationHelper.getToken(), "process"); } + + /** + * 根据养护类型获取养护内容 + */ + public static Observable getMaintainContentResult(String type) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainMaintainContent(AuthenticationHelper.getToken(), type); + } + + /** + * 桥梁新增打卡记录 + */ + public static Observable getAddMaintainRecordResult(String bridgeId, String content, + String maintainTime, String personId, + String longitude, String latitude, + String description) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.addMaintainRecord(AuthenticationHelper.getToken(), bridgeId, content, maintainTime, + personId, longitude, latitude, description); + } + + /** + * 桥梁养护记录 + */ + public static Observable getMaintainRecordResult(String startDate, String endDate, int offset) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainMaintainRecord(AuthenticationHelper.getToken(), startDate, endDate, Constant.PAGE_LIMIT, + offset); + } } diff --git a/app/src/main/java/com/casic/dcms/widgets/SignInDialog.java b/app/src/main/java/com/casic/dcms/widgets/SignInDialog.java index ae61dd1..b96ff2f 100644 --- a/app/src/main/java/com/casic/dcms/widgets/SignInDialog.java +++ b/app/src/main/java/com/casic/dcms/widgets/SignInDialog.java @@ -2,13 +2,19 @@ import android.app.Dialog; import android.content.Context; +import android.graphics.Color; +import android.graphics.drawable.ColorDrawable; import android.os.Bundle; import android.text.TextUtils; import android.view.View; +import android.view.Window; +import android.view.WindowManager; import android.widget.TextView; import com.casic.dcms.R; +import com.casic.dcms.base.BaseApplication; import com.casic.dcms.utils.TimeOrDateUtil; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; import java.util.Timer; import java.util.TimerTask; @@ -16,11 +22,13 @@ public class SignInDialog extends Dialog implements View.OnClickListener { private static final String TAG = "SignInDialog"; + private String title; private String address; private OnDialogClickListener listener; private SignInDialog(Builder builder) { super(builder.mContext); + this.title = builder.title; this.address = builder.address; this.listener = builder.listener; } @@ -28,6 +36,16 @@ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + + //手动设置dialog宽度 + Window window = getWindow(); + window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); + window.getDecorView().setBackgroundColor(Color.TRANSPARENT); + WindowManager.LayoutParams params = window.getAttributes(); + params.width = QMUIDisplayHelper.dp2px(BaseApplication.getInstance(), 300); + params.height = WindowManager.LayoutParams.WRAP_CONTENT; + window.setAttributes(params); + setContentView(R.layout.dialog_sign_in); initView(); } @@ -41,6 +59,10 @@ clockView.post(() -> clockView.setText(systemTime)); } }, 0, 1000); + TextView optionTitleView = findViewById(R.id.optionTitleView); + if (!TextUtils.isEmpty(title)) { + optionTitleView.setText(title); + } TextView signInPlaceView = findViewById(R.id.signInPlaceView); if (!TextUtils.isEmpty(address)) { signInPlaceView.setText(address); @@ -62,6 +84,7 @@ public static class Builder { private Context mContext; + private String title; private String address; private OnDialogClickListener listener; @@ -70,6 +93,11 @@ return this; } + public Builder setTitle(String title) { + this.title = title; + return this; + } + public Builder setAddress(String address) { this.address = address; return this; diff --git a/app/build.gradle b/app/build.gradle index 6f0b518..bcfdc0d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ applicationId "com.casic.dcms" minSdkVersion 21 targetSdkVersion 30 - versionCode 19 - versionName "v1.0.0.11" + versionCode 20 + versionName "v1.0.0.12" ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 68f46c9..3090a91 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -89,7 +89,10 @@ - + + + + { + + private Context context; + private List dataRows; + private LayoutInflater layoutInflater; + private QMUITipDialog.Builder dialogBuilder; + + public MaintainRecordAdapter(Context context, List dataRows) { + this.context = context; + this.dataRows = dataRows; + layoutInflater = LayoutInflater.from(context); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = layoutInflater.inflate(R.layout.item_maintain_recycleview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + holder.bindView(dataRows.get(position)); + } + + @Override + public int getItemCount() { + return dataRows.size(); + } + + class ItemViewHolder extends RecyclerView.ViewHolder { + + private TextView bridgeNameView; + private ImageView descriptionImageView; + private TextView maintainContentView; + private TextView maintainTimeView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + bridgeNameView = itemView.findViewById(R.id.bridgeNameView); + descriptionImageView = itemView.findViewById(R.id.descriptionImageView); + maintainContentView = itemView.findViewById(R.id.maintainContentView); + maintainTimeView = itemView.findViewById(R.id.maintainTimeView); + } + + void bindView(MaintainRecordBean.DataBean.RowsBean rowsBean) { + bridgeNameView.setText(rowsBean.getBridgeName()); + String description = rowsBean.getDescription(); + if (TextUtils.isEmpty(description)) { + descriptionImageView.setVisibility(View.GONE); + } else { + descriptionImageView.setVisibility(View.VISIBLE); + descriptionImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + QMUITipDialog tipDialog = new QMUITipDialog.Builder(context) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_NOTHING) + .setTipWord(description) + .create(); + tipDialog.show(); + descriptionImageView.postDelayed(new Runnable() { + @Override + public void run() { + tipDialog.dismiss(); + } + }, 2000); + } + }); + } + maintainContentView.setText(rowsBean.getContent()); + maintainTimeView.setText(rowsBean.getMaintainTimeStr()); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java b/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java new file mode 100644 index 0000000..ded4fe1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java @@ -0,0 +1,41 @@ +package com.casic.dcms.bean; + +public class MaintainContentBean { + + private int code; + private String data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java b/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java new file mode 100644 index 0000000..2beea74 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java @@ -0,0 +1,301 @@ +package com.casic.dcms.bean; + +import java.util.List; + +public class MaintainRecordBean { + + private int code; + private DataBean data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + + private int total; + private List rows; + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public static class RowsBean { + /** + * bridgeId : 1 + * bridgeName : 永胜桥 + * category : 桥梁 + * code : 1624359572304 + * content : 日常养护,无异常 + * deptid : 1344110695992258561 + * description : + * id : 1407292162033041409 + * latitude : 39.914705918747295 + * longitude : 116.26295490330527 + * maintainTime : 2021-06-22 00:00:00 + * maintainTimeStr : 2021-06-22 + * name : + * personId : 1344179277212151809 + * personName : + * phone : + * status : + * statusName : + * tender : + * tenderCompany : + * ts : 2021-06-22 + * type : + * typeName : + */ + + private String bridgeId; + private String bridgeName; + private String category; + private String code; + private String content; + private String deptid; + private String description; + private String id; + private String latitude; + private String longitude; + private String maintainTime; + private String maintainTimeStr; + private String name; + private String personId; + private String personName; + private String phone; + private String status; + private String statusName; + private String tender; + private String tenderCompany; + private String ts; + private String type; + private String typeName; + + public String getBridgeId() { + return bridgeId; + } + + public void setBridgeId(String bridgeId) { + this.bridgeId = bridgeId; + } + + public String getBridgeName() { + return bridgeName; + } + + public void setBridgeName(String bridgeName) { + this.bridgeName = bridgeName; + } + + public String getCategory() { + return category; + } + + public void setCategory(String category) { + this.category = category; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLatitude() { + return latitude; + } + + public void setLatitude(String latitude) { + this.latitude = latitude; + } + + public String getLongitude() { + return longitude; + } + + public void setLongitude(String longitude) { + this.longitude = longitude; + } + + public String getMaintainTime() { + return maintainTime; + } + + public void setMaintainTime(String maintainTime) { + this.maintainTime = maintainTime; + } + + public String getMaintainTimeStr() { + return maintainTimeStr; + } + + public void setMaintainTimeStr(String maintainTimeStr) { + this.maintainTimeStr = maintainTimeStr; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPersonId() { + return personId; + } + + public void setPersonId(String personId) { + this.personId = personId; + } + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + 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 getTender() { + return tender; + } + + public void setTender(String tender) { + this.tender = tender; + } + + public String getTenderCompany() { + return tenderCompany; + } + + public void setTenderCompany(String tenderCompany) { + this.tenderCompany = tenderCompany; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getTypeName() { + return typeName; + } + + public void setTypeName(String typeName) { + this.typeName = typeName; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java new file mode 100644 index 0000000..4f7a588 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IMaintainRecordModel { + Subscription sendRetrofitRequest(String startDate, String endDate, int offset); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java new file mode 100644 index 0000000..dce3f91 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java @@ -0,0 +1,8 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ISubmitMaintainModel { + Subscription sendRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/MaintainRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/MaintainRecordModelImpl.java new file mode 100644 index 0000000..35fd486 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/MaintainRecordModelImpl.java @@ -0,0 +1,50 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.MaintainRecordBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class MaintainRecordModelImpl implements IMaintainRecordModel { + + private OnGetRecordListener listener; + + public MaintainRecordModelImpl(OnGetRecordListener recordListener) { + this.listener = recordListener; + } + + public interface OnGetRecordListener { + void onSuccess(MaintainRecordBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String startDate, String endDate, int offset) { + Observable observable = RetrofitServiceManager.getMaintainRecordResult(startDate, endDate, offset); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (e.getCause() != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(MaintainRecordBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java index 06f6fb4..9e2666d 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java @@ -29,7 +29,7 @@ @Override public Subscription sendRetrofitRequest() { - Observable observable = RetrofitServiceManager.getProcessPerson(); + Observable observable = RetrofitServiceManager.getProcessPersonResult(); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/SubmitMaintainModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/SubmitMaintainModelImpl.java new file mode 100644 index 0000000..2924fbe --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/SubmitMaintainModelImpl.java @@ -0,0 +1,52 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class SubmitMaintainModelImpl implements ISubmitMaintainModel { + + private OnSubmitListener listener; + + public SubmitMaintainModelImpl(OnSubmitListener submitListener) { + this.listener = submitListener; + } + + public interface OnSubmitListener { + void onSuccess(ActionResultBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description) { + Observable observable = RetrofitServiceManager.getAddMaintainRecordResult(bridgeId, + content, maintainTime, personId, longitude, latitude, description); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (e.getCause() != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(ActionResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IMaintainRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IMaintainRecordPresenter.java new file mode 100644 index 0000000..938a484 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IMaintainRecordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IMaintainRecordPresenter { + void onReadyRetrofitRequest(String startDate, String endDate, int offset); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ISubmitMaintainPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ISubmitMaintainPresenter.java new file mode 100644 index 0000000..511e717 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ISubmitMaintainPresenter.java @@ -0,0 +1,8 @@ +package com.casic.dcms.mvp.presenter; + +public interface ISubmitMaintainPresenter { + void onReadyRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/MaintainRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/MaintainRecordPresenterImpl.java new file mode 100644 index 0000000..fd99e30 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/MaintainRecordPresenterImpl.java @@ -0,0 +1,39 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.MaintainRecordBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.MaintainRecordModelImpl; +import com.casic.dcms.mvp.view.IMaintainRecordView; + +public class MaintainRecordPresenterImpl extends BasePresenter implements IMaintainRecordPresenter, MaintainRecordModelImpl.OnGetRecordListener { + + private IMaintainRecordView view; + private MaintainRecordModelImpl model; + + public MaintainRecordPresenterImpl(IMaintainRecordView cleanToiletRecordView) { + this.view = cleanToiletRecordView; + model = new MaintainRecordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String startDate, String endDate, int offset) { + view.showProgress(); + addSubscription(model.sendRetrofitRequest(startDate, endDate, offset)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(MaintainRecordBean result) { + view.hideProgress(); + view.obtainRecordResult(result); + } + + @Override + public void onFailure(Throwable throwable) { + view.hideProgress(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/SubmitMaintainPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/SubmitMaintainPresenterImpl.java new file mode 100644 index 0000000..7722427 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/SubmitMaintainPresenterImpl.java @@ -0,0 +1,42 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.SubmitMaintainModelImpl; +import com.casic.dcms.mvp.view.ISubmitMaintainView; + +public class SubmitMaintainPresenterImpl extends BasePresenter implements ISubmitMaintainPresenter, SubmitMaintainModelImpl.OnSubmitListener { + + private ISubmitMaintainView view; + private SubmitMaintainModelImpl actionModel; + + public SubmitMaintainPresenterImpl(ISubmitMaintainView submitCaseView) { + this.view = submitCaseView; + actionModel = new SubmitMaintainModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description) { + view.showProgress(); + addSubscription(actionModel.sendRetrofitRequest(bridgeId, content, maintainTime, personId, longitude, + latitude, description)); + } + + @Override + public void onSuccess(ActionResultBean resultBean) { + view.hideProgress(); + view.obtainSubmitResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + view.hideProgress(); + view.obtainDataFail(); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IMaintainRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/IMaintainRecordView.java new file mode 100644 index 0000000..8ff5189 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IMaintainRecordView.java @@ -0,0 +1,11 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.MaintainRecordBean; + +public interface IMaintainRecordView { + void obtainRecordResult(MaintainRecordBean resultBean); + + void showProgress(); + + void hideProgress(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ISubmitMaintainView.java b/app/src/main/java/com/casic/dcms/mvp/view/ISubmitMaintainView.java new file mode 100644 index 0000000..75a0629 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/ISubmitMaintainView.java @@ -0,0 +1,13 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.ActionResultBean; + +public interface ISubmitMaintainView { + void showProgress(); + + void hideProgress(); + + void obtainSubmitResult(ActionResultBean resultBean); + + void obtainDataFail(); +} diff --git a/app/src/main/java/com/casic/dcms/ui/BridgeMaintainActivity.java b/app/src/main/java/com/casic/dcms/ui/BridgeMaintainActivity.java new file mode 100644 index 0000000..84b0eef --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/BridgeMaintainActivity.java @@ -0,0 +1,239 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.content.Intent; +import android.location.Location; +import android.text.TextUtils; +import android.view.View; +import android.widget.EditText; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.amap.api.services.core.LatLonPoint; +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.mvp.presenter.SubmitMaintainPresenterImpl; +import com.casic.dcms.mvp.view.ISubmitMaintainView; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; +import com.casic.dcms.utils.SaveKeyValues; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.utils.callback.IAddressListener; +import com.casic.dcms.utils.callback.ILocationListener; +import com.casic.dcms.widgets.SignInDialog; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.util.Timer; +import java.util.TimerTask; + +import butterknife.BindView; +import butterknife.OnClick; + +public class BridgeMaintainActivity extends BaseActivity implements View.OnClickListener, ISubmitMaintainView { + + private static final String TAG = "BridgeMaintainActivity"; + private Context context = this; + @BindView(R.id.topLayout) + QMUITopBarLayout topLayout; + @BindView(R.id.bridgeNameView) + TextView bridgeNameView; + @BindView(R.id.maintainView) + TextView maintainView; + @BindView(R.id.maintainDateView) + TextView maintainDateView; + @BindView(R.id.liablePersonView) + TextView liablePersonView; + @BindView(R.id.submitButton) + QMUIRoundButton submitButton; + //以下非必填 + @BindView(R.id.remarksView) + EditText remarksView; + + private String bridgeId = ""; + private SubmitMaintainPresenterImpl submitMaintainPresenter; + + @Override + public int initLayoutView() { + return R.layout.activity_bridge; + } + + @Override + protected void setupTopBarLayout() { + topLayout.setTitle("路桥养护").setTextColor(ContextCompat.getColor(this, R.color.white)); + topLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + topLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + topLayout.addRightImageButton(R.drawable.ic_more, 2).setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + startActivity(new Intent(context, MaintainRecordActivity.class)); + } + }); + } + + @Override + public void initData() { + submitMaintainPresenter = new SubmitMaintainPresenterImpl(this); + } + + @Override + public void initEvent() { + submitButton.setChangeAlphaWhenPress(true); + liablePersonView.setText(StringHelper.getUserAccount()); + liablePersonView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); + + new Timer().schedule(new TimerTask() { + @Override + public void run() { + String systemDate = TimeOrDateUtil.timestampToDate(System.currentTimeMillis()); + maintainDateView.post(new Runnable() { + @Override + public void run() { + maintainDateView.setText(systemDate); + maintainDateView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); + } + }); + } + }, 0, 1000); + } + + @OnClick({R.id.bridgeLayout, R.id.maintainContentLayout, R.id.submitButton}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.bridgeLayout: + new QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("选择桥梁") + .addItem("永胜桥") + .addItem("黄洲桥") + .addItem("光明桥") + .setGravityCenter(true) + .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + + bridgeId = String.valueOf((1 + position)); + bridgeNameView.setText(tag); + bridgeNameView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); + } + }).build().show(); + break; + case R.id.maintainContentLayout: + new QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("养护内容") + .addItem("日常养护,无异常") + .addItem("清除表面污垢") + .addItem("修补混凝土空洞、破损、剥落和表面风化及裂缝") + .addItem("清除暴露钢筋的锈渍、恢复保护层") + .addItem("处理各种横、纵向构件的开裂、开焊和锈蚀") + .setGravityCenter(true) + .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + + maintainView.setText(tag); + maintainView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); + } + }).build().show(); + break; + case R.id.submitButton: + //获取定位信息 + LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + + } + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + if (aMapLocation != null) { + if (TextUtils.isEmpty(bridgeId)) { + ToastHelper.showToast("请先选择养护的桥梁", ToastHelper.WARING); + return; + } + String maintainContent = maintainView.getText().toString(); + if (TextUtils.isEmpty(maintainContent)) { + ToastHelper.showToast("请选择养护的内容", ToastHelper.WARING); + return; + } + + double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + LatLonPoint latLonPoint = new LatLonPoint(gcjToWgs[1], gcjToWgs[0]); + LocationHelper.antiCodingLocation(context, latLonPoint, new IAddressListener() { + @Override + public void onGetAddress(String address) { + SaveKeyValues.putValue("maintainAddress", address); + } + }); + //提交养护记录 + submitMaintainPresenter.onReadyRetrofitRequest(bridgeId, maintainContent, + maintainDateView.getText().toString(), + StringHelper.getUserId(), String.valueOf(gcjToWgs[0]), + String.valueOf(gcjToWgs[1]), + StringHelper.filterString(remarksView.getText().toString())); + } else { + ToastHelper.showToast("当前信号较弱,无法提交养护记录", ToastHelper.WARING); + } + } + }, true); + break; + default: + throw new IllegalStateException("Unexpected value: " + v.getId()); + } + } + + @Override + public void showProgress() { + OtherUtils.showLoadingDialog(this, "养护记录签到中,请稍后"); + } + + @Override + public void hideProgress() { + OtherUtils.dismissLoadingDialog(); + } + + @Override + public void obtainSubmitResult(ActionResultBean resultBean) { + String maintainAddress = (String) SaveKeyValues.getValue("maintainAddress", ""); + if (resultBean.isSuccess()) { + new SignInDialog.Builder() + .setContext(this) + .setTitle("桥梁养护记录提交成功") + .setAddress(maintainAddress.equals("") ? "详细位置解析失败" : maintainAddress) + .setOnDialogClickListener(new SignInDialog.OnDialogClickListener() { + @Override + public void onViewClick() { + startActivity(new Intent(context, MaintainRecordActivity.class)); + finish(); + } + }).build().show(); + } + } + + @Override + public void obtainDataFail() { + ToastHelper.showToast("操作失败", ToastHelper.ERROR); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (submitMaintainPresenter != null) { + submitMaintainPresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java index 7221e95..381b704 100644 --- a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java @@ -25,6 +25,7 @@ import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.datepicker.DatePopupWindow; +import com.qmuiteam.qmui.widget.QMUIEmptyView; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; @@ -38,8 +39,8 @@ public class CleanResultListActivity extends BaseCaseActivity implements ICleanToiletRecordView { - // @BindView(R.id.emptyView) -// QMUIEmptyView emptyView; + @BindView(R.id.emptyView) + QMUIEmptyView emptyView; @BindView(R.id.dateView) TextView dateView; @BindView(R.id.calendarView) @@ -126,7 +127,6 @@ @Override public void obtainCleanRecordResult(CleanRecordBean resultBean) { -// Log.d("TAG", "obtainCleanRecordResult: " + new Gson().toJson(resultBean)); if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); if (isRefresh) { @@ -175,9 +175,9 @@ } else { //首次加载数据 if (resultActivity.dataBeans.size() == 0) { -// resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); + resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); } else { -// resultActivity.emptyView.hide(); + resultActivity.emptyView.hide(); resultActivity.adapter = new RecordListAdapter(resultActivity, resultActivity.dataBeans); resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); diff --git a/app/src/main/java/com/casic/dcms/ui/MaintainRecordActivity.java b/app/src/main/java/com/casic/dcms/ui/MaintainRecordActivity.java new file mode 100644 index 0000000..05c41c9 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/MaintainRecordActivity.java @@ -0,0 +1,194 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.content.Intent; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.MaintainRecordAdapter; +import com.casic.dcms.base.BaseCaseActivity; +import com.casic.dcms.bean.MaintainRecordBean; +import com.casic.dcms.mvp.presenter.MaintainRecordPresenterImpl; +import com.casic.dcms.mvp.view.IMaintainRecordView; +import com.casic.dcms.utils.CalendarUtil; +import com.casic.dcms.utils.OtherUtils; +import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.datepicker.DatePopupWindow; +import com.qmuiteam.qmui.widget.QMUIEmptyView; +import com.scwang.smartrefresh.layout.SmartRefreshLayout; +import com.scwang.smartrefresh.layout.api.RefreshLayout; +import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; +import com.scwang.smartrefresh.layout.listener.OnRefreshListener; + +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class MaintainRecordActivity extends BaseCaseActivity implements IMaintainRecordView { + + @BindView(R.id.emptyView) + QMUIEmptyView emptyView; + @BindView(R.id.dateView) + TextView dateView; + @BindView(R.id.calendarView) + ImageView calendarView; + @BindView(R.id.refreshLayout) + SmartRefreshLayout refreshLayout; + @BindView(R.id.recordRecyclerView) + RecyclerView recordRecyclerView; + + private Context context = this; + private int pageIndex = 1; + private boolean isRefresh, isLoadMore = false; + private WeakReferenceHandler weakReferenceHandler; + private List dataBeans = new ArrayList<>(); + private MaintainRecordPresenterImpl recordPresenter; + private MaintainRecordAdapter adapter; + private int startGroup = -1; + private int endGroup = -1; + private int startChild = -1; + private int endChild = -1; + + @Override + protected String setTitleName() { + return "桥梁养护记录"; + } + + @Override + public int initLayoutView() { + return R.layout.activity_maintain_record; + } + + @Override + public void initData() { + weakReferenceHandler = new WeakReferenceHandler(this); + recordPresenter = new MaintainRecordPresenterImpl(this); + recordPresenter.onReadyRetrofitRequest("", "", pageIndex); + } + + @Override + public void initEvent() { + calendarView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + new DatePopupWindow + .Builder(MaintainRecordActivity.this, CalendarUtil.obtainLastTwoMonth(), v)//初始化 + .setInitSelect(startGroup, startChild, endGroup, endChild)//设置上一次选中的区间状态 + .setInitDay(true)//默认为true,UI内容为共几天、开始、结束;当为false时,UI内容为共几晚、入住、离开 + .setDateOnClickListener(new DatePopupWindow.DateOnClickListener() {//设置监听 + //点击完成按钮后回调返回方法 + @Override + public void getDate(String startDate, String endDate, int startGroupPosition, int + startChildPosition, int endGroupPosition, int endChildPosition) { + startGroup = startGroupPosition;//开始月份位置 + startChild = startChildPosition;//开始对应月份中日的位置 + endGroup = endGroupPosition;//结束月份位置 + endChild = endChildPosition;//结束对应月份中日的位置 + dateView.setText(startDate + "~" + endDate); + recordPresenter.onReadyRetrofitRequest(startDate, endDate, pageIndex); + } + }).builder(); + } + }); + refreshLayout.setOnRefreshListener(new OnRefreshListener() { + @Override + public void onRefresh(@NonNull final RefreshLayout refreshLayout) { + isRefresh = true; + //刷新之后页码重置 + pageIndex = 1; + recordPresenter.onReadyRetrofitRequest("", "", pageIndex); + } + }); + refreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() { + @Override + public void onLoadMore(@NonNull final RefreshLayout refreshLayout) { + isLoadMore = true; + pageIndex++; + recordPresenter.onReadyRetrofitRequest("", "", pageIndex); + } + }); + } + + @Override + public void obtainRecordResult(MaintainRecordBean resultBean) { + if (resultBean.isSuccess()) { + List dataRows = resultBean.getData().getRows(); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + ToastHelper.showToast("到底了,别拉了", ToastHelper.INFO); + } + dataBeans.addAll(dataRows); + refreshLayout.finishLoadMore(); + isLoadMore = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(20210622); + } + } + + @Override + public void showProgress() { + OtherUtils.showLoadingDialog(this, "查询记录中,请稍后"); + } + + @Override + public void hideProgress() { + OtherUtils.dismissLoadingDialog(); + } + + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(MaintainRecordActivity activity) { + reference = new WeakReference<>(activity); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + MaintainRecordActivity resultActivity = reference.get(); + if (msg.what == 20210622) { + if (resultActivity.isRefresh || resultActivity.isLoadMore) { + resultActivity.adapter.notifyDataSetChanged(); + } else { + //首次加载数据 + if (resultActivity.dataBeans.size() == 0) { + resultActivity.emptyView.show("抱歉,没有查到相关养护记录", null); + } else { + resultActivity.emptyView.hide(); + resultActivity.adapter = new MaintainRecordAdapter(resultActivity, resultActivity.dataBeans); + resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); + resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); + resultActivity.recordRecyclerView.setAdapter(resultActivity.adapter); + } + } + } + } + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (recordPresenter != null) { + recordPresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/PipelineManagerActivity.java b/app/src/main/java/com/casic/dcms/ui/PipelineManagerActivity.java new file mode 100644 index 0000000..fa77936 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/PipelineManagerActivity.java @@ -0,0 +1,27 @@ +package com.casic.dcms.ui; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; + +public class PipelineManagerActivity extends BaseActivity { + + @Override + public int initLayoutView() { + return R.layout.activity_pipe; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java index ac995d3..4959539 100644 --- a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java @@ -300,7 +300,8 @@ @Override public void onAMapLocationGet(AMapLocation aMapLocation) { if (aMapLocation != null) { - Point point = new Point(aMapLocation.getLongitude(), aMapLocation.getLatitude(), mapView.getSpatialReference()); + double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); mapView.setViewpointCenterAsync(point, 1200);//标注到指定经纬度并放大地图显示 //添加图片Marker addPictureMarker(point); @@ -311,11 +312,9 @@ ToastHelper.showToast("公厕标识不能为空", ToastHelper.WARING); return; } - double longitude = aMapLocation.getLongitude(); - double latitude = aMapLocation.getLatitude(); String cleanTime = TimeOrDateUtil.timestampToCompleteDate(System.currentTimeMillis()); cleanToiletPresenter.onReadyRetrofitRequest(toiletId, StringHelper.getUserId(), - String.valueOf(longitude), String.valueOf(latitude), cleanTime, imagePath, + String.valueOf(gcjToWgs[0]), String.valueOf(gcjToWgs[1]), cleanTime, imagePath, StringHelper.filterString(workContentView.getText().toString())); } } @@ -416,15 +415,18 @@ @Override public void obtainCleanResult(ActionResultBean resultBean) { -// Log.d(TAG, "obtainCleanResult: " + new Gson().toJson(resultBean)); if (resultBean.isSuccess()) { - new SignInDialog.Builder().setContext(this).setAddress(locationStreetView.getText().toString()).setOnDialogClickListener(new SignInDialog.OnDialogClickListener() { - @Override - public void onViewClick() { - startActivity(new Intent(context, CleanResultListActivity.class)); - PublicToiletActivity.this.finish(); - } - }).build().show(); + new SignInDialog.Builder() + .setContext(this) + .setTitle("保洁保卡成功") + .setAddress(locationStreetView.getText().toString()) + .setOnDialogClickListener(new SignInDialog.OnDialogClickListener() { + @Override + public void onViewClick() { + startActivity(new Intent(context, CleanResultListActivity.class)); + PublicToiletActivity.this.finish(); + } + }).build().show(); } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java index 03438b0..42d29a4 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java @@ -18,6 +18,7 @@ import com.casic.dcms.mvp.presenter.UserDataPresenterImpl; import com.casic.dcms.mvp.view.IHomePageView; import com.casic.dcms.mvp.view.IUserDataView; +import com.casic.dcms.ui.BridgeMaintainActivity; import com.casic.dcms.ui.CaseCheckActivity; import com.casic.dcms.ui.CaseHandleActivity; import com.casic.dcms.ui.CaseOnMapActivity; @@ -32,6 +33,7 @@ import com.casic.dcms.ui.OvertimeCaseActivity; import com.casic.dcms.ui.PackageHandleActivity; import com.casic.dcms.ui.PersonOnlineActivity; +import com.casic.dcms.ui.PipelineManagerActivity; import com.casic.dcms.ui.PublicToiletActivity; import com.casic.dcms.ui.UrgentCaseActivity; import com.casic.dcms.utils.StringHelper; @@ -161,6 +163,12 @@ case "部门处置": intent.setClass(context, DeptHandleActivity.class); break; + case "路桥养护": + intent.setClass(context, BridgeMaintainActivity.class); + break; + case "管网管理": + intent.setClass(context, PipelineManagerActivity.class); + break; default: break; } diff --git a/app/src/main/java/com/casic/dcms/utils/Constant.java b/app/src/main/java/com/casic/dcms/utils/Constant.java index d9c1d60..9bbbdb0 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -35,7 +35,8 @@ public static final String IP_KEY = "BASE_IP"; - public static final long FIVE_YEARS = 5L * 365 * 1000 * 60 * 60 * 24L; + public static final long FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L; + public static final long ONE_YEAR = 365 * 60 * 60 * 24 * 1000L; public static final long IMAGE_MINUS_SIZE = 100 * 1024; public static final long HTTP_TIMEOUT = 30L; public static final int PERMISSIONS_CODE = 999; diff --git a/app/src/main/java/com/casic/dcms/utils/LocationHelper.java b/app/src/main/java/com/casic/dcms/utils/LocationHelper.java index 8d95580..79aedbf 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocationHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/LocationHelper.java @@ -40,7 +40,6 @@ private static final double a = 6378245.0; // a: 卫星椭球坐标投影到平面地图坐标系的投影因子。 private static final double ee = 0.00669342162296594323; // ee: 椭球的偏心率平方。 - /** * 高德sdk定位 */ diff --git a/app/src/main/java/com/casic/dcms/utils/StringHelper.java b/app/src/main/java/com/casic/dcms/utils/StringHelper.java index 6bea75a..2faeae4 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -250,8 +250,12 @@ return R.drawable.ic_shangpu; case "部门处置": return R.drawable.ic_dept; + case "路桥养护": + return R.drawable.ic_bridge; + case "管网管理": + return R.drawable.ic_pipe; default: - return R.mipmap.app_logo; + return R.drawable.ic_default_icon; } } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index dc53815..f0be407 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -21,6 +21,8 @@ import com.casic.dcms.bean.HighEventBean; import com.casic.dcms.bean.HomePageBean; import com.casic.dcms.bean.LoginResultBean; +import com.casic.dcms.bean.MaintainContentBean; +import com.casic.dcms.bean.MaintainRecordBean; import com.casic.dcms.bean.NewVersionBean; import com.casic.dcms.bean.OnlinePersonBean; import com.casic.dcms.bean.OvertimeCaseBean; @@ -616,4 +618,42 @@ @POST("/mgr/simplelist") Observable obtainNextProcessPerson(@Header("token") String token, @Field("roleTips") String roleTips); + + /** + * 根据养护类型获取养护内容 + *

+ * http://111.198.10.15:11409/bridge/maintain/contentByType + */ + @FormUrlEncoded + @POST("/bridge/maintain/contentByType") + Observable obtainMaintainContent(@Header("token") String token, + @Field("type") String type); + + /** + * 桥梁新增打卡记录 + *

+ * http://111.198.10.15:11409/bridge/maintain/addApp + */ + @FormUrlEncoded + @POST("/bridge/maintain/addApp") + Observable addMaintainRecord(@Header("token") String token, + @Field("bridgeId") String bridgeId, + @Field("content") String content, + @Field("maintainTime") String maintainTime, + @Field("personId") String personId, + @Field("longitude") String longitude, + @Field("latitude") String latitude, + @Field("description") String description); + + /** + * 桥梁养护记录 + *

+ * http://111.198.10.15:11409/bridge/maintain/listPage?startDate=2021-06-21&endDate=2021-06-22 + */ + @GET("/bridge/maintain/listPage") + Observable obtainMaintainRecord(@Header("token") String token, + @Query("startDate") String beginDate, + @Query("endDate") String endDate, + @Query("limit") int limit, + @Query("offset") int offset); } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index 67e8da1..283354a 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -23,6 +23,8 @@ import com.casic.dcms.bean.HighEventBean; import com.casic.dcms.bean.HomePageBean; import com.casic.dcms.bean.LoginResultBean; +import com.casic.dcms.bean.MaintainContentBean; +import com.casic.dcms.bean.MaintainRecordBean; import com.casic.dcms.bean.NewVersionBean; import com.casic.dcms.bean.OnlinePersonBean; import com.casic.dcms.bean.OvertimeCaseBean; @@ -638,9 +640,41 @@ /** * 获取下级处置员 */ - public static Observable getProcessPerson() { + public static Observable getProcessPersonResult() { Retrofit retrofit = createRetrofit(); RetrofitService service = retrofit.create(RetrofitService.class); return service.obtainNextProcessPerson(AuthenticationHelper.getToken(), "process"); } + + /** + * 根据养护类型获取养护内容 + */ + public static Observable getMaintainContentResult(String type) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainMaintainContent(AuthenticationHelper.getToken(), type); + } + + /** + * 桥梁新增打卡记录 + */ + public static Observable getAddMaintainRecordResult(String bridgeId, String content, + String maintainTime, String personId, + String longitude, String latitude, + String description) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.addMaintainRecord(AuthenticationHelper.getToken(), bridgeId, content, maintainTime, + personId, longitude, latitude, description); + } + + /** + * 桥梁养护记录 + */ + public static Observable getMaintainRecordResult(String startDate, String endDate, int offset) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainMaintainRecord(AuthenticationHelper.getToken(), startDate, endDate, Constant.PAGE_LIMIT, + offset); + } } diff --git a/app/src/main/java/com/casic/dcms/widgets/SignInDialog.java b/app/src/main/java/com/casic/dcms/widgets/SignInDialog.java index ae61dd1..b96ff2f 100644 --- a/app/src/main/java/com/casic/dcms/widgets/SignInDialog.java +++ b/app/src/main/java/com/casic/dcms/widgets/SignInDialog.java @@ -2,13 +2,19 @@ import android.app.Dialog; import android.content.Context; +import android.graphics.Color; +import android.graphics.drawable.ColorDrawable; import android.os.Bundle; import android.text.TextUtils; import android.view.View; +import android.view.Window; +import android.view.WindowManager; import android.widget.TextView; import com.casic.dcms.R; +import com.casic.dcms.base.BaseApplication; import com.casic.dcms.utils.TimeOrDateUtil; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; import java.util.Timer; import java.util.TimerTask; @@ -16,11 +22,13 @@ public class SignInDialog extends Dialog implements View.OnClickListener { private static final String TAG = "SignInDialog"; + private String title; private String address; private OnDialogClickListener listener; private SignInDialog(Builder builder) { super(builder.mContext); + this.title = builder.title; this.address = builder.address; this.listener = builder.listener; } @@ -28,6 +36,16 @@ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + + //手动设置dialog宽度 + Window window = getWindow(); + window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); + window.getDecorView().setBackgroundColor(Color.TRANSPARENT); + WindowManager.LayoutParams params = window.getAttributes(); + params.width = QMUIDisplayHelper.dp2px(BaseApplication.getInstance(), 300); + params.height = WindowManager.LayoutParams.WRAP_CONTENT; + window.setAttributes(params); + setContentView(R.layout.dialog_sign_in); initView(); } @@ -41,6 +59,10 @@ clockView.post(() -> clockView.setText(systemTime)); } }, 0, 1000); + TextView optionTitleView = findViewById(R.id.optionTitleView); + if (!TextUtils.isEmpty(title)) { + optionTitleView.setText(title); + } TextView signInPlaceView = findViewById(R.id.signInPlaceView); if (!TextUtils.isEmpty(address)) { signInPlaceView.setText(address); @@ -62,6 +84,7 @@ public static class Builder { private Context mContext; + private String title; private String address; private OnDialogClickListener listener; @@ -70,6 +93,11 @@ return this; } + public Builder setTitle(String title) { + this.title = title; + return this; + } + public Builder setAddress(String address) { this.address = address; return this; diff --git a/app/src/main/res/drawable/ic_bridge.xml b/app/src/main/res/drawable/ic_bridge.xml new file mode 100644 index 0000000..7aa4637 --- /dev/null +++ b/app/src/main/res/drawable/ic_bridge.xml @@ -0,0 +1,11 @@ + + + diff --git a/app/build.gradle b/app/build.gradle index 6f0b518..bcfdc0d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ applicationId "com.casic.dcms" minSdkVersion 21 targetSdkVersion 30 - versionCode 19 - versionName "v1.0.0.11" + versionCode 20 + versionName "v1.0.0.12" ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 68f46c9..3090a91 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -89,7 +89,10 @@ - + + + + { + + private Context context; + private List dataRows; + private LayoutInflater layoutInflater; + private QMUITipDialog.Builder dialogBuilder; + + public MaintainRecordAdapter(Context context, List dataRows) { + this.context = context; + this.dataRows = dataRows; + layoutInflater = LayoutInflater.from(context); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = layoutInflater.inflate(R.layout.item_maintain_recycleview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + holder.bindView(dataRows.get(position)); + } + + @Override + public int getItemCount() { + return dataRows.size(); + } + + class ItemViewHolder extends RecyclerView.ViewHolder { + + private TextView bridgeNameView; + private ImageView descriptionImageView; + private TextView maintainContentView; + private TextView maintainTimeView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + bridgeNameView = itemView.findViewById(R.id.bridgeNameView); + descriptionImageView = itemView.findViewById(R.id.descriptionImageView); + maintainContentView = itemView.findViewById(R.id.maintainContentView); + maintainTimeView = itemView.findViewById(R.id.maintainTimeView); + } + + void bindView(MaintainRecordBean.DataBean.RowsBean rowsBean) { + bridgeNameView.setText(rowsBean.getBridgeName()); + String description = rowsBean.getDescription(); + if (TextUtils.isEmpty(description)) { + descriptionImageView.setVisibility(View.GONE); + } else { + descriptionImageView.setVisibility(View.VISIBLE); + descriptionImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + QMUITipDialog tipDialog = new QMUITipDialog.Builder(context) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_NOTHING) + .setTipWord(description) + .create(); + tipDialog.show(); + descriptionImageView.postDelayed(new Runnable() { + @Override + public void run() { + tipDialog.dismiss(); + } + }, 2000); + } + }); + } + maintainContentView.setText(rowsBean.getContent()); + maintainTimeView.setText(rowsBean.getMaintainTimeStr()); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java b/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java new file mode 100644 index 0000000..ded4fe1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java @@ -0,0 +1,41 @@ +package com.casic.dcms.bean; + +public class MaintainContentBean { + + private int code; + private String data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java b/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java new file mode 100644 index 0000000..2beea74 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java @@ -0,0 +1,301 @@ +package com.casic.dcms.bean; + +import java.util.List; + +public class MaintainRecordBean { + + private int code; + private DataBean data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + + private int total; + private List rows; + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public static class RowsBean { + /** + * bridgeId : 1 + * bridgeName : 永胜桥 + * category : 桥梁 + * code : 1624359572304 + * content : 日常养护,无异常 + * deptid : 1344110695992258561 + * description : + * id : 1407292162033041409 + * latitude : 39.914705918747295 + * longitude : 116.26295490330527 + * maintainTime : 2021-06-22 00:00:00 + * maintainTimeStr : 2021-06-22 + * name : + * personId : 1344179277212151809 + * personName : + * phone : + * status : + * statusName : + * tender : + * tenderCompany : + * ts : 2021-06-22 + * type : + * typeName : + */ + + private String bridgeId; + private String bridgeName; + private String category; + private String code; + private String content; + private String deptid; + private String description; + private String id; + private String latitude; + private String longitude; + private String maintainTime; + private String maintainTimeStr; + private String name; + private String personId; + private String personName; + private String phone; + private String status; + private String statusName; + private String tender; + private String tenderCompany; + private String ts; + private String type; + private String typeName; + + public String getBridgeId() { + return bridgeId; + } + + public void setBridgeId(String bridgeId) { + this.bridgeId = bridgeId; + } + + public String getBridgeName() { + return bridgeName; + } + + public void setBridgeName(String bridgeName) { + this.bridgeName = bridgeName; + } + + public String getCategory() { + return category; + } + + public void setCategory(String category) { + this.category = category; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLatitude() { + return latitude; + } + + public void setLatitude(String latitude) { + this.latitude = latitude; + } + + public String getLongitude() { + return longitude; + } + + public void setLongitude(String longitude) { + this.longitude = longitude; + } + + public String getMaintainTime() { + return maintainTime; + } + + public void setMaintainTime(String maintainTime) { + this.maintainTime = maintainTime; + } + + public String getMaintainTimeStr() { + return maintainTimeStr; + } + + public void setMaintainTimeStr(String maintainTimeStr) { + this.maintainTimeStr = maintainTimeStr; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPersonId() { + return personId; + } + + public void setPersonId(String personId) { + this.personId = personId; + } + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + 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 getTender() { + return tender; + } + + public void setTender(String tender) { + this.tender = tender; + } + + public String getTenderCompany() { + return tenderCompany; + } + + public void setTenderCompany(String tenderCompany) { + this.tenderCompany = tenderCompany; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getTypeName() { + return typeName; + } + + public void setTypeName(String typeName) { + this.typeName = typeName; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java new file mode 100644 index 0000000..4f7a588 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IMaintainRecordModel { + Subscription sendRetrofitRequest(String startDate, String endDate, int offset); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java new file mode 100644 index 0000000..dce3f91 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java @@ -0,0 +1,8 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ISubmitMaintainModel { + Subscription sendRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/MaintainRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/MaintainRecordModelImpl.java new file mode 100644 index 0000000..35fd486 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/MaintainRecordModelImpl.java @@ -0,0 +1,50 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.MaintainRecordBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class MaintainRecordModelImpl implements IMaintainRecordModel { + + private OnGetRecordListener listener; + + public MaintainRecordModelImpl(OnGetRecordListener recordListener) { + this.listener = recordListener; + } + + public interface OnGetRecordListener { + void onSuccess(MaintainRecordBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String startDate, String endDate, int offset) { + Observable observable = RetrofitServiceManager.getMaintainRecordResult(startDate, endDate, offset); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (e.getCause() != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(MaintainRecordBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java index 06f6fb4..9e2666d 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java @@ -29,7 +29,7 @@ @Override public Subscription sendRetrofitRequest() { - Observable observable = RetrofitServiceManager.getProcessPerson(); + Observable observable = RetrofitServiceManager.getProcessPersonResult(); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/SubmitMaintainModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/SubmitMaintainModelImpl.java new file mode 100644 index 0000000..2924fbe --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/SubmitMaintainModelImpl.java @@ -0,0 +1,52 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class SubmitMaintainModelImpl implements ISubmitMaintainModel { + + private OnSubmitListener listener; + + public SubmitMaintainModelImpl(OnSubmitListener submitListener) { + this.listener = submitListener; + } + + public interface OnSubmitListener { + void onSuccess(ActionResultBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description) { + Observable observable = RetrofitServiceManager.getAddMaintainRecordResult(bridgeId, + content, maintainTime, personId, longitude, latitude, description); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (e.getCause() != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(ActionResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IMaintainRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IMaintainRecordPresenter.java new file mode 100644 index 0000000..938a484 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IMaintainRecordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IMaintainRecordPresenter { + void onReadyRetrofitRequest(String startDate, String endDate, int offset); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ISubmitMaintainPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ISubmitMaintainPresenter.java new file mode 100644 index 0000000..511e717 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ISubmitMaintainPresenter.java @@ -0,0 +1,8 @@ +package com.casic.dcms.mvp.presenter; + +public interface ISubmitMaintainPresenter { + void onReadyRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/MaintainRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/MaintainRecordPresenterImpl.java new file mode 100644 index 0000000..fd99e30 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/MaintainRecordPresenterImpl.java @@ -0,0 +1,39 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.MaintainRecordBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.MaintainRecordModelImpl; +import com.casic.dcms.mvp.view.IMaintainRecordView; + +public class MaintainRecordPresenterImpl extends BasePresenter implements IMaintainRecordPresenter, MaintainRecordModelImpl.OnGetRecordListener { + + private IMaintainRecordView view; + private MaintainRecordModelImpl model; + + public MaintainRecordPresenterImpl(IMaintainRecordView cleanToiletRecordView) { + this.view = cleanToiletRecordView; + model = new MaintainRecordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String startDate, String endDate, int offset) { + view.showProgress(); + addSubscription(model.sendRetrofitRequest(startDate, endDate, offset)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(MaintainRecordBean result) { + view.hideProgress(); + view.obtainRecordResult(result); + } + + @Override + public void onFailure(Throwable throwable) { + view.hideProgress(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/SubmitMaintainPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/SubmitMaintainPresenterImpl.java new file mode 100644 index 0000000..7722427 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/SubmitMaintainPresenterImpl.java @@ -0,0 +1,42 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.SubmitMaintainModelImpl; +import com.casic.dcms.mvp.view.ISubmitMaintainView; + +public class SubmitMaintainPresenterImpl extends BasePresenter implements ISubmitMaintainPresenter, SubmitMaintainModelImpl.OnSubmitListener { + + private ISubmitMaintainView view; + private SubmitMaintainModelImpl actionModel; + + public SubmitMaintainPresenterImpl(ISubmitMaintainView submitCaseView) { + this.view = submitCaseView; + actionModel = new SubmitMaintainModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description) { + view.showProgress(); + addSubscription(actionModel.sendRetrofitRequest(bridgeId, content, maintainTime, personId, longitude, + latitude, description)); + } + + @Override + public void onSuccess(ActionResultBean resultBean) { + view.hideProgress(); + view.obtainSubmitResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + view.hideProgress(); + view.obtainDataFail(); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IMaintainRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/IMaintainRecordView.java new file mode 100644 index 0000000..8ff5189 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IMaintainRecordView.java @@ -0,0 +1,11 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.MaintainRecordBean; + +public interface IMaintainRecordView { + void obtainRecordResult(MaintainRecordBean resultBean); + + void showProgress(); + + void hideProgress(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ISubmitMaintainView.java b/app/src/main/java/com/casic/dcms/mvp/view/ISubmitMaintainView.java new file mode 100644 index 0000000..75a0629 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/ISubmitMaintainView.java @@ -0,0 +1,13 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.ActionResultBean; + +public interface ISubmitMaintainView { + void showProgress(); + + void hideProgress(); + + void obtainSubmitResult(ActionResultBean resultBean); + + void obtainDataFail(); +} diff --git a/app/src/main/java/com/casic/dcms/ui/BridgeMaintainActivity.java b/app/src/main/java/com/casic/dcms/ui/BridgeMaintainActivity.java new file mode 100644 index 0000000..84b0eef --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/BridgeMaintainActivity.java @@ -0,0 +1,239 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.content.Intent; +import android.location.Location; +import android.text.TextUtils; +import android.view.View; +import android.widget.EditText; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.amap.api.services.core.LatLonPoint; +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.mvp.presenter.SubmitMaintainPresenterImpl; +import com.casic.dcms.mvp.view.ISubmitMaintainView; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; +import com.casic.dcms.utils.SaveKeyValues; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.utils.callback.IAddressListener; +import com.casic.dcms.utils.callback.ILocationListener; +import com.casic.dcms.widgets.SignInDialog; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.util.Timer; +import java.util.TimerTask; + +import butterknife.BindView; +import butterknife.OnClick; + +public class BridgeMaintainActivity extends BaseActivity implements View.OnClickListener, ISubmitMaintainView { + + private static final String TAG = "BridgeMaintainActivity"; + private Context context = this; + @BindView(R.id.topLayout) + QMUITopBarLayout topLayout; + @BindView(R.id.bridgeNameView) + TextView bridgeNameView; + @BindView(R.id.maintainView) + TextView maintainView; + @BindView(R.id.maintainDateView) + TextView maintainDateView; + @BindView(R.id.liablePersonView) + TextView liablePersonView; + @BindView(R.id.submitButton) + QMUIRoundButton submitButton; + //以下非必填 + @BindView(R.id.remarksView) + EditText remarksView; + + private String bridgeId = ""; + private SubmitMaintainPresenterImpl submitMaintainPresenter; + + @Override + public int initLayoutView() { + return R.layout.activity_bridge; + } + + @Override + protected void setupTopBarLayout() { + topLayout.setTitle("路桥养护").setTextColor(ContextCompat.getColor(this, R.color.white)); + topLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + topLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + topLayout.addRightImageButton(R.drawable.ic_more, 2).setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + startActivity(new Intent(context, MaintainRecordActivity.class)); + } + }); + } + + @Override + public void initData() { + submitMaintainPresenter = new SubmitMaintainPresenterImpl(this); + } + + @Override + public void initEvent() { + submitButton.setChangeAlphaWhenPress(true); + liablePersonView.setText(StringHelper.getUserAccount()); + liablePersonView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); + + new Timer().schedule(new TimerTask() { + @Override + public void run() { + String systemDate = TimeOrDateUtil.timestampToDate(System.currentTimeMillis()); + maintainDateView.post(new Runnable() { + @Override + public void run() { + maintainDateView.setText(systemDate); + maintainDateView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); + } + }); + } + }, 0, 1000); + } + + @OnClick({R.id.bridgeLayout, R.id.maintainContentLayout, R.id.submitButton}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.bridgeLayout: + new QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("选择桥梁") + .addItem("永胜桥") + .addItem("黄洲桥") + .addItem("光明桥") + .setGravityCenter(true) + .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + + bridgeId = String.valueOf((1 + position)); + bridgeNameView.setText(tag); + bridgeNameView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); + } + }).build().show(); + break; + case R.id.maintainContentLayout: + new QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("养护内容") + .addItem("日常养护,无异常") + .addItem("清除表面污垢") + .addItem("修补混凝土空洞、破损、剥落和表面风化及裂缝") + .addItem("清除暴露钢筋的锈渍、恢复保护层") + .addItem("处理各种横、纵向构件的开裂、开焊和锈蚀") + .setGravityCenter(true) + .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + + maintainView.setText(tag); + maintainView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); + } + }).build().show(); + break; + case R.id.submitButton: + //获取定位信息 + LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + + } + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + if (aMapLocation != null) { + if (TextUtils.isEmpty(bridgeId)) { + ToastHelper.showToast("请先选择养护的桥梁", ToastHelper.WARING); + return; + } + String maintainContent = maintainView.getText().toString(); + if (TextUtils.isEmpty(maintainContent)) { + ToastHelper.showToast("请选择养护的内容", ToastHelper.WARING); + return; + } + + double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + LatLonPoint latLonPoint = new LatLonPoint(gcjToWgs[1], gcjToWgs[0]); + LocationHelper.antiCodingLocation(context, latLonPoint, new IAddressListener() { + @Override + public void onGetAddress(String address) { + SaveKeyValues.putValue("maintainAddress", address); + } + }); + //提交养护记录 + submitMaintainPresenter.onReadyRetrofitRequest(bridgeId, maintainContent, + maintainDateView.getText().toString(), + StringHelper.getUserId(), String.valueOf(gcjToWgs[0]), + String.valueOf(gcjToWgs[1]), + StringHelper.filterString(remarksView.getText().toString())); + } else { + ToastHelper.showToast("当前信号较弱,无法提交养护记录", ToastHelper.WARING); + } + } + }, true); + break; + default: + throw new IllegalStateException("Unexpected value: " + v.getId()); + } + } + + @Override + public void showProgress() { + OtherUtils.showLoadingDialog(this, "养护记录签到中,请稍后"); + } + + @Override + public void hideProgress() { + OtherUtils.dismissLoadingDialog(); + } + + @Override + public void obtainSubmitResult(ActionResultBean resultBean) { + String maintainAddress = (String) SaveKeyValues.getValue("maintainAddress", ""); + if (resultBean.isSuccess()) { + new SignInDialog.Builder() + .setContext(this) + .setTitle("桥梁养护记录提交成功") + .setAddress(maintainAddress.equals("") ? "详细位置解析失败" : maintainAddress) + .setOnDialogClickListener(new SignInDialog.OnDialogClickListener() { + @Override + public void onViewClick() { + startActivity(new Intent(context, MaintainRecordActivity.class)); + finish(); + } + }).build().show(); + } + } + + @Override + public void obtainDataFail() { + ToastHelper.showToast("操作失败", ToastHelper.ERROR); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (submitMaintainPresenter != null) { + submitMaintainPresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java index 7221e95..381b704 100644 --- a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java @@ -25,6 +25,7 @@ import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.datepicker.DatePopupWindow; +import com.qmuiteam.qmui.widget.QMUIEmptyView; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; @@ -38,8 +39,8 @@ public class CleanResultListActivity extends BaseCaseActivity implements ICleanToiletRecordView { - // @BindView(R.id.emptyView) -// QMUIEmptyView emptyView; + @BindView(R.id.emptyView) + QMUIEmptyView emptyView; @BindView(R.id.dateView) TextView dateView; @BindView(R.id.calendarView) @@ -126,7 +127,6 @@ @Override public void obtainCleanRecordResult(CleanRecordBean resultBean) { -// Log.d("TAG", "obtainCleanRecordResult: " + new Gson().toJson(resultBean)); if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); if (isRefresh) { @@ -175,9 +175,9 @@ } else { //首次加载数据 if (resultActivity.dataBeans.size() == 0) { -// resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); + resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); } else { -// resultActivity.emptyView.hide(); + resultActivity.emptyView.hide(); resultActivity.adapter = new RecordListAdapter(resultActivity, resultActivity.dataBeans); resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); diff --git a/app/src/main/java/com/casic/dcms/ui/MaintainRecordActivity.java b/app/src/main/java/com/casic/dcms/ui/MaintainRecordActivity.java new file mode 100644 index 0000000..05c41c9 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/MaintainRecordActivity.java @@ -0,0 +1,194 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.content.Intent; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.MaintainRecordAdapter; +import com.casic.dcms.base.BaseCaseActivity; +import com.casic.dcms.bean.MaintainRecordBean; +import com.casic.dcms.mvp.presenter.MaintainRecordPresenterImpl; +import com.casic.dcms.mvp.view.IMaintainRecordView; +import com.casic.dcms.utils.CalendarUtil; +import com.casic.dcms.utils.OtherUtils; +import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.datepicker.DatePopupWindow; +import com.qmuiteam.qmui.widget.QMUIEmptyView; +import com.scwang.smartrefresh.layout.SmartRefreshLayout; +import com.scwang.smartrefresh.layout.api.RefreshLayout; +import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; +import com.scwang.smartrefresh.layout.listener.OnRefreshListener; + +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class MaintainRecordActivity extends BaseCaseActivity implements IMaintainRecordView { + + @BindView(R.id.emptyView) + QMUIEmptyView emptyView; + @BindView(R.id.dateView) + TextView dateView; + @BindView(R.id.calendarView) + ImageView calendarView; + @BindView(R.id.refreshLayout) + SmartRefreshLayout refreshLayout; + @BindView(R.id.recordRecyclerView) + RecyclerView recordRecyclerView; + + private Context context = this; + private int pageIndex = 1; + private boolean isRefresh, isLoadMore = false; + private WeakReferenceHandler weakReferenceHandler; + private List dataBeans = new ArrayList<>(); + private MaintainRecordPresenterImpl recordPresenter; + private MaintainRecordAdapter adapter; + private int startGroup = -1; + private int endGroup = -1; + private int startChild = -1; + private int endChild = -1; + + @Override + protected String setTitleName() { + return "桥梁养护记录"; + } + + @Override + public int initLayoutView() { + return R.layout.activity_maintain_record; + } + + @Override + public void initData() { + weakReferenceHandler = new WeakReferenceHandler(this); + recordPresenter = new MaintainRecordPresenterImpl(this); + recordPresenter.onReadyRetrofitRequest("", "", pageIndex); + } + + @Override + public void initEvent() { + calendarView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + new DatePopupWindow + .Builder(MaintainRecordActivity.this, CalendarUtil.obtainLastTwoMonth(), v)//初始化 + .setInitSelect(startGroup, startChild, endGroup, endChild)//设置上一次选中的区间状态 + .setInitDay(true)//默认为true,UI内容为共几天、开始、结束;当为false时,UI内容为共几晚、入住、离开 + .setDateOnClickListener(new DatePopupWindow.DateOnClickListener() {//设置监听 + //点击完成按钮后回调返回方法 + @Override + public void getDate(String startDate, String endDate, int startGroupPosition, int + startChildPosition, int endGroupPosition, int endChildPosition) { + startGroup = startGroupPosition;//开始月份位置 + startChild = startChildPosition;//开始对应月份中日的位置 + endGroup = endGroupPosition;//结束月份位置 + endChild = endChildPosition;//结束对应月份中日的位置 + dateView.setText(startDate + "~" + endDate); + recordPresenter.onReadyRetrofitRequest(startDate, endDate, pageIndex); + } + }).builder(); + } + }); + refreshLayout.setOnRefreshListener(new OnRefreshListener() { + @Override + public void onRefresh(@NonNull final RefreshLayout refreshLayout) { + isRefresh = true; + //刷新之后页码重置 + pageIndex = 1; + recordPresenter.onReadyRetrofitRequest("", "", pageIndex); + } + }); + refreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() { + @Override + public void onLoadMore(@NonNull final RefreshLayout refreshLayout) { + isLoadMore = true; + pageIndex++; + recordPresenter.onReadyRetrofitRequest("", "", pageIndex); + } + }); + } + + @Override + public void obtainRecordResult(MaintainRecordBean resultBean) { + if (resultBean.isSuccess()) { + List dataRows = resultBean.getData().getRows(); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + ToastHelper.showToast("到底了,别拉了", ToastHelper.INFO); + } + dataBeans.addAll(dataRows); + refreshLayout.finishLoadMore(); + isLoadMore = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(20210622); + } + } + + @Override + public void showProgress() { + OtherUtils.showLoadingDialog(this, "查询记录中,请稍后"); + } + + @Override + public void hideProgress() { + OtherUtils.dismissLoadingDialog(); + } + + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(MaintainRecordActivity activity) { + reference = new WeakReference<>(activity); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + MaintainRecordActivity resultActivity = reference.get(); + if (msg.what == 20210622) { + if (resultActivity.isRefresh || resultActivity.isLoadMore) { + resultActivity.adapter.notifyDataSetChanged(); + } else { + //首次加载数据 + if (resultActivity.dataBeans.size() == 0) { + resultActivity.emptyView.show("抱歉,没有查到相关养护记录", null); + } else { + resultActivity.emptyView.hide(); + resultActivity.adapter = new MaintainRecordAdapter(resultActivity, resultActivity.dataBeans); + resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); + resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); + resultActivity.recordRecyclerView.setAdapter(resultActivity.adapter); + } + } + } + } + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (recordPresenter != null) { + recordPresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/PipelineManagerActivity.java b/app/src/main/java/com/casic/dcms/ui/PipelineManagerActivity.java new file mode 100644 index 0000000..fa77936 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/PipelineManagerActivity.java @@ -0,0 +1,27 @@ +package com.casic.dcms.ui; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; + +public class PipelineManagerActivity extends BaseActivity { + + @Override + public int initLayoutView() { + return R.layout.activity_pipe; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java index ac995d3..4959539 100644 --- a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java @@ -300,7 +300,8 @@ @Override public void onAMapLocationGet(AMapLocation aMapLocation) { if (aMapLocation != null) { - Point point = new Point(aMapLocation.getLongitude(), aMapLocation.getLatitude(), mapView.getSpatialReference()); + double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); mapView.setViewpointCenterAsync(point, 1200);//标注到指定经纬度并放大地图显示 //添加图片Marker addPictureMarker(point); @@ -311,11 +312,9 @@ ToastHelper.showToast("公厕标识不能为空", ToastHelper.WARING); return; } - double longitude = aMapLocation.getLongitude(); - double latitude = aMapLocation.getLatitude(); String cleanTime = TimeOrDateUtil.timestampToCompleteDate(System.currentTimeMillis()); cleanToiletPresenter.onReadyRetrofitRequest(toiletId, StringHelper.getUserId(), - String.valueOf(longitude), String.valueOf(latitude), cleanTime, imagePath, + String.valueOf(gcjToWgs[0]), String.valueOf(gcjToWgs[1]), cleanTime, imagePath, StringHelper.filterString(workContentView.getText().toString())); } } @@ -416,15 +415,18 @@ @Override public void obtainCleanResult(ActionResultBean resultBean) { -// Log.d(TAG, "obtainCleanResult: " + new Gson().toJson(resultBean)); if (resultBean.isSuccess()) { - new SignInDialog.Builder().setContext(this).setAddress(locationStreetView.getText().toString()).setOnDialogClickListener(new SignInDialog.OnDialogClickListener() { - @Override - public void onViewClick() { - startActivity(new Intent(context, CleanResultListActivity.class)); - PublicToiletActivity.this.finish(); - } - }).build().show(); + new SignInDialog.Builder() + .setContext(this) + .setTitle("保洁保卡成功") + .setAddress(locationStreetView.getText().toString()) + .setOnDialogClickListener(new SignInDialog.OnDialogClickListener() { + @Override + public void onViewClick() { + startActivity(new Intent(context, CleanResultListActivity.class)); + PublicToiletActivity.this.finish(); + } + }).build().show(); } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java index 03438b0..42d29a4 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java @@ -18,6 +18,7 @@ import com.casic.dcms.mvp.presenter.UserDataPresenterImpl; import com.casic.dcms.mvp.view.IHomePageView; import com.casic.dcms.mvp.view.IUserDataView; +import com.casic.dcms.ui.BridgeMaintainActivity; import com.casic.dcms.ui.CaseCheckActivity; import com.casic.dcms.ui.CaseHandleActivity; import com.casic.dcms.ui.CaseOnMapActivity; @@ -32,6 +33,7 @@ import com.casic.dcms.ui.OvertimeCaseActivity; import com.casic.dcms.ui.PackageHandleActivity; import com.casic.dcms.ui.PersonOnlineActivity; +import com.casic.dcms.ui.PipelineManagerActivity; import com.casic.dcms.ui.PublicToiletActivity; import com.casic.dcms.ui.UrgentCaseActivity; import com.casic.dcms.utils.StringHelper; @@ -161,6 +163,12 @@ case "部门处置": intent.setClass(context, DeptHandleActivity.class); break; + case "路桥养护": + intent.setClass(context, BridgeMaintainActivity.class); + break; + case "管网管理": + intent.setClass(context, PipelineManagerActivity.class); + break; default: break; } diff --git a/app/src/main/java/com/casic/dcms/utils/Constant.java b/app/src/main/java/com/casic/dcms/utils/Constant.java index d9c1d60..9bbbdb0 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -35,7 +35,8 @@ public static final String IP_KEY = "BASE_IP"; - public static final long FIVE_YEARS = 5L * 365 * 1000 * 60 * 60 * 24L; + public static final long FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L; + public static final long ONE_YEAR = 365 * 60 * 60 * 24 * 1000L; public static final long IMAGE_MINUS_SIZE = 100 * 1024; public static final long HTTP_TIMEOUT = 30L; public static final int PERMISSIONS_CODE = 999; diff --git a/app/src/main/java/com/casic/dcms/utils/LocationHelper.java b/app/src/main/java/com/casic/dcms/utils/LocationHelper.java index 8d95580..79aedbf 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocationHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/LocationHelper.java @@ -40,7 +40,6 @@ private static final double a = 6378245.0; // a: 卫星椭球坐标投影到平面地图坐标系的投影因子。 private static final double ee = 0.00669342162296594323; // ee: 椭球的偏心率平方。 - /** * 高德sdk定位 */ diff --git a/app/src/main/java/com/casic/dcms/utils/StringHelper.java b/app/src/main/java/com/casic/dcms/utils/StringHelper.java index 6bea75a..2faeae4 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -250,8 +250,12 @@ return R.drawable.ic_shangpu; case "部门处置": return R.drawable.ic_dept; + case "路桥养护": + return R.drawable.ic_bridge; + case "管网管理": + return R.drawable.ic_pipe; default: - return R.mipmap.app_logo; + return R.drawable.ic_default_icon; } } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index dc53815..f0be407 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -21,6 +21,8 @@ import com.casic.dcms.bean.HighEventBean; import com.casic.dcms.bean.HomePageBean; import com.casic.dcms.bean.LoginResultBean; +import com.casic.dcms.bean.MaintainContentBean; +import com.casic.dcms.bean.MaintainRecordBean; import com.casic.dcms.bean.NewVersionBean; import com.casic.dcms.bean.OnlinePersonBean; import com.casic.dcms.bean.OvertimeCaseBean; @@ -616,4 +618,42 @@ @POST("/mgr/simplelist") Observable obtainNextProcessPerson(@Header("token") String token, @Field("roleTips") String roleTips); + + /** + * 根据养护类型获取养护内容 + *

+ * http://111.198.10.15:11409/bridge/maintain/contentByType + */ + @FormUrlEncoded + @POST("/bridge/maintain/contentByType") + Observable obtainMaintainContent(@Header("token") String token, + @Field("type") String type); + + /** + * 桥梁新增打卡记录 + *

+ * http://111.198.10.15:11409/bridge/maintain/addApp + */ + @FormUrlEncoded + @POST("/bridge/maintain/addApp") + Observable addMaintainRecord(@Header("token") String token, + @Field("bridgeId") String bridgeId, + @Field("content") String content, + @Field("maintainTime") String maintainTime, + @Field("personId") String personId, + @Field("longitude") String longitude, + @Field("latitude") String latitude, + @Field("description") String description); + + /** + * 桥梁养护记录 + *

+ * http://111.198.10.15:11409/bridge/maintain/listPage?startDate=2021-06-21&endDate=2021-06-22 + */ + @GET("/bridge/maintain/listPage") + Observable obtainMaintainRecord(@Header("token") String token, + @Query("startDate") String beginDate, + @Query("endDate") String endDate, + @Query("limit") int limit, + @Query("offset") int offset); } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index 67e8da1..283354a 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -23,6 +23,8 @@ import com.casic.dcms.bean.HighEventBean; import com.casic.dcms.bean.HomePageBean; import com.casic.dcms.bean.LoginResultBean; +import com.casic.dcms.bean.MaintainContentBean; +import com.casic.dcms.bean.MaintainRecordBean; import com.casic.dcms.bean.NewVersionBean; import com.casic.dcms.bean.OnlinePersonBean; import com.casic.dcms.bean.OvertimeCaseBean; @@ -638,9 +640,41 @@ /** * 获取下级处置员 */ - public static Observable getProcessPerson() { + public static Observable getProcessPersonResult() { Retrofit retrofit = createRetrofit(); RetrofitService service = retrofit.create(RetrofitService.class); return service.obtainNextProcessPerson(AuthenticationHelper.getToken(), "process"); } + + /** + * 根据养护类型获取养护内容 + */ + public static Observable getMaintainContentResult(String type) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainMaintainContent(AuthenticationHelper.getToken(), type); + } + + /** + * 桥梁新增打卡记录 + */ + public static Observable getAddMaintainRecordResult(String bridgeId, String content, + String maintainTime, String personId, + String longitude, String latitude, + String description) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.addMaintainRecord(AuthenticationHelper.getToken(), bridgeId, content, maintainTime, + personId, longitude, latitude, description); + } + + /** + * 桥梁养护记录 + */ + public static Observable getMaintainRecordResult(String startDate, String endDate, int offset) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainMaintainRecord(AuthenticationHelper.getToken(), startDate, endDate, Constant.PAGE_LIMIT, + offset); + } } diff --git a/app/src/main/java/com/casic/dcms/widgets/SignInDialog.java b/app/src/main/java/com/casic/dcms/widgets/SignInDialog.java index ae61dd1..b96ff2f 100644 --- a/app/src/main/java/com/casic/dcms/widgets/SignInDialog.java +++ b/app/src/main/java/com/casic/dcms/widgets/SignInDialog.java @@ -2,13 +2,19 @@ import android.app.Dialog; import android.content.Context; +import android.graphics.Color; +import android.graphics.drawable.ColorDrawable; import android.os.Bundle; import android.text.TextUtils; import android.view.View; +import android.view.Window; +import android.view.WindowManager; import android.widget.TextView; import com.casic.dcms.R; +import com.casic.dcms.base.BaseApplication; import com.casic.dcms.utils.TimeOrDateUtil; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; import java.util.Timer; import java.util.TimerTask; @@ -16,11 +22,13 @@ public class SignInDialog extends Dialog implements View.OnClickListener { private static final String TAG = "SignInDialog"; + private String title; private String address; private OnDialogClickListener listener; private SignInDialog(Builder builder) { super(builder.mContext); + this.title = builder.title; this.address = builder.address; this.listener = builder.listener; } @@ -28,6 +36,16 @@ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + + //手动设置dialog宽度 + Window window = getWindow(); + window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); + window.getDecorView().setBackgroundColor(Color.TRANSPARENT); + WindowManager.LayoutParams params = window.getAttributes(); + params.width = QMUIDisplayHelper.dp2px(BaseApplication.getInstance(), 300); + params.height = WindowManager.LayoutParams.WRAP_CONTENT; + window.setAttributes(params); + setContentView(R.layout.dialog_sign_in); initView(); } @@ -41,6 +59,10 @@ clockView.post(() -> clockView.setText(systemTime)); } }, 0, 1000); + TextView optionTitleView = findViewById(R.id.optionTitleView); + if (!TextUtils.isEmpty(title)) { + optionTitleView.setText(title); + } TextView signInPlaceView = findViewById(R.id.signInPlaceView); if (!TextUtils.isEmpty(address)) { signInPlaceView.setText(address); @@ -62,6 +84,7 @@ public static class Builder { private Context mContext; + private String title; private String address; private OnDialogClickListener listener; @@ -70,6 +93,11 @@ return this; } + public Builder setTitle(String title) { + this.title = title; + return this; + } + public Builder setAddress(String address) { this.address = address; return this; diff --git a/app/src/main/res/drawable/ic_bridge.xml b/app/src/main/res/drawable/ic_bridge.xml new file mode 100644 index 0000000..7aa4637 --- /dev/null +++ b/app/src/main/res/drawable/ic_bridge.xml @@ -0,0 +1,11 @@ + + + diff --git a/app/src/main/res/drawable/ic_default_icon.xml b/app/src/main/res/drawable/ic_default_icon.xml new file mode 100644 index 0000000..3c41da5 --- /dev/null +++ b/app/src/main/res/drawable/ic_default_icon.xml @@ -0,0 +1,18 @@ + + + + + + diff --git a/app/build.gradle b/app/build.gradle index 6f0b518..bcfdc0d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ applicationId "com.casic.dcms" minSdkVersion 21 targetSdkVersion 30 - versionCode 19 - versionName "v1.0.0.11" + versionCode 20 + versionName "v1.0.0.12" ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 68f46c9..3090a91 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -89,7 +89,10 @@ - + + + + { + + private Context context; + private List dataRows; + private LayoutInflater layoutInflater; + private QMUITipDialog.Builder dialogBuilder; + + public MaintainRecordAdapter(Context context, List dataRows) { + this.context = context; + this.dataRows = dataRows; + layoutInflater = LayoutInflater.from(context); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = layoutInflater.inflate(R.layout.item_maintain_recycleview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + holder.bindView(dataRows.get(position)); + } + + @Override + public int getItemCount() { + return dataRows.size(); + } + + class ItemViewHolder extends RecyclerView.ViewHolder { + + private TextView bridgeNameView; + private ImageView descriptionImageView; + private TextView maintainContentView; + private TextView maintainTimeView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + bridgeNameView = itemView.findViewById(R.id.bridgeNameView); + descriptionImageView = itemView.findViewById(R.id.descriptionImageView); + maintainContentView = itemView.findViewById(R.id.maintainContentView); + maintainTimeView = itemView.findViewById(R.id.maintainTimeView); + } + + void bindView(MaintainRecordBean.DataBean.RowsBean rowsBean) { + bridgeNameView.setText(rowsBean.getBridgeName()); + String description = rowsBean.getDescription(); + if (TextUtils.isEmpty(description)) { + descriptionImageView.setVisibility(View.GONE); + } else { + descriptionImageView.setVisibility(View.VISIBLE); + descriptionImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + QMUITipDialog tipDialog = new QMUITipDialog.Builder(context) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_NOTHING) + .setTipWord(description) + .create(); + tipDialog.show(); + descriptionImageView.postDelayed(new Runnable() { + @Override + public void run() { + tipDialog.dismiss(); + } + }, 2000); + } + }); + } + maintainContentView.setText(rowsBean.getContent()); + maintainTimeView.setText(rowsBean.getMaintainTimeStr()); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java b/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java new file mode 100644 index 0000000..ded4fe1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java @@ -0,0 +1,41 @@ +package com.casic.dcms.bean; + +public class MaintainContentBean { + + private int code; + private String data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java b/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java new file mode 100644 index 0000000..2beea74 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java @@ -0,0 +1,301 @@ +package com.casic.dcms.bean; + +import java.util.List; + +public class MaintainRecordBean { + + private int code; + private DataBean data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + + private int total; + private List rows; + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public static class RowsBean { + /** + * bridgeId : 1 + * bridgeName : 永胜桥 + * category : 桥梁 + * code : 1624359572304 + * content : 日常养护,无异常 + * deptid : 1344110695992258561 + * description : + * id : 1407292162033041409 + * latitude : 39.914705918747295 + * longitude : 116.26295490330527 + * maintainTime : 2021-06-22 00:00:00 + * maintainTimeStr : 2021-06-22 + * name : + * personId : 1344179277212151809 + * personName : + * phone : + * status : + * statusName : + * tender : + * tenderCompany : + * ts : 2021-06-22 + * type : + * typeName : + */ + + private String bridgeId; + private String bridgeName; + private String category; + private String code; + private String content; + private String deptid; + private String description; + private String id; + private String latitude; + private String longitude; + private String maintainTime; + private String maintainTimeStr; + private String name; + private String personId; + private String personName; + private String phone; + private String status; + private String statusName; + private String tender; + private String tenderCompany; + private String ts; + private String type; + private String typeName; + + public String getBridgeId() { + return bridgeId; + } + + public void setBridgeId(String bridgeId) { + this.bridgeId = bridgeId; + } + + public String getBridgeName() { + return bridgeName; + } + + public void setBridgeName(String bridgeName) { + this.bridgeName = bridgeName; + } + + public String getCategory() { + return category; + } + + public void setCategory(String category) { + this.category = category; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLatitude() { + return latitude; + } + + public void setLatitude(String latitude) { + this.latitude = latitude; + } + + public String getLongitude() { + return longitude; + } + + public void setLongitude(String longitude) { + this.longitude = longitude; + } + + public String getMaintainTime() { + return maintainTime; + } + + public void setMaintainTime(String maintainTime) { + this.maintainTime = maintainTime; + } + + public String getMaintainTimeStr() { + return maintainTimeStr; + } + + public void setMaintainTimeStr(String maintainTimeStr) { + this.maintainTimeStr = maintainTimeStr; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPersonId() { + return personId; + } + + public void setPersonId(String personId) { + this.personId = personId; + } + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + 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 getTender() { + return tender; + } + + public void setTender(String tender) { + this.tender = tender; + } + + public String getTenderCompany() { + return tenderCompany; + } + + public void setTenderCompany(String tenderCompany) { + this.tenderCompany = tenderCompany; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getTypeName() { + return typeName; + } + + public void setTypeName(String typeName) { + this.typeName = typeName; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java new file mode 100644 index 0000000..4f7a588 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IMaintainRecordModel { + Subscription sendRetrofitRequest(String startDate, String endDate, int offset); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java new file mode 100644 index 0000000..dce3f91 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java @@ -0,0 +1,8 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ISubmitMaintainModel { + Subscription sendRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/MaintainRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/MaintainRecordModelImpl.java new file mode 100644 index 0000000..35fd486 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/MaintainRecordModelImpl.java @@ -0,0 +1,50 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.MaintainRecordBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class MaintainRecordModelImpl implements IMaintainRecordModel { + + private OnGetRecordListener listener; + + public MaintainRecordModelImpl(OnGetRecordListener recordListener) { + this.listener = recordListener; + } + + public interface OnGetRecordListener { + void onSuccess(MaintainRecordBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String startDate, String endDate, int offset) { + Observable observable = RetrofitServiceManager.getMaintainRecordResult(startDate, endDate, offset); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (e.getCause() != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(MaintainRecordBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java index 06f6fb4..9e2666d 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java @@ -29,7 +29,7 @@ @Override public Subscription sendRetrofitRequest() { - Observable observable = RetrofitServiceManager.getProcessPerson(); + Observable observable = RetrofitServiceManager.getProcessPersonResult(); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/SubmitMaintainModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/SubmitMaintainModelImpl.java new file mode 100644 index 0000000..2924fbe --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/SubmitMaintainModelImpl.java @@ -0,0 +1,52 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class SubmitMaintainModelImpl implements ISubmitMaintainModel { + + private OnSubmitListener listener; + + public SubmitMaintainModelImpl(OnSubmitListener submitListener) { + this.listener = submitListener; + } + + public interface OnSubmitListener { + void onSuccess(ActionResultBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description) { + Observable observable = RetrofitServiceManager.getAddMaintainRecordResult(bridgeId, + content, maintainTime, personId, longitude, latitude, description); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (e.getCause() != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(ActionResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IMaintainRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IMaintainRecordPresenter.java new file mode 100644 index 0000000..938a484 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IMaintainRecordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IMaintainRecordPresenter { + void onReadyRetrofitRequest(String startDate, String endDate, int offset); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ISubmitMaintainPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ISubmitMaintainPresenter.java new file mode 100644 index 0000000..511e717 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ISubmitMaintainPresenter.java @@ -0,0 +1,8 @@ +package com.casic.dcms.mvp.presenter; + +public interface ISubmitMaintainPresenter { + void onReadyRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/MaintainRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/MaintainRecordPresenterImpl.java new file mode 100644 index 0000000..fd99e30 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/MaintainRecordPresenterImpl.java @@ -0,0 +1,39 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.MaintainRecordBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.MaintainRecordModelImpl; +import com.casic.dcms.mvp.view.IMaintainRecordView; + +public class MaintainRecordPresenterImpl extends BasePresenter implements IMaintainRecordPresenter, MaintainRecordModelImpl.OnGetRecordListener { + + private IMaintainRecordView view; + private MaintainRecordModelImpl model; + + public MaintainRecordPresenterImpl(IMaintainRecordView cleanToiletRecordView) { + this.view = cleanToiletRecordView; + model = new MaintainRecordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String startDate, String endDate, int offset) { + view.showProgress(); + addSubscription(model.sendRetrofitRequest(startDate, endDate, offset)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(MaintainRecordBean result) { + view.hideProgress(); + view.obtainRecordResult(result); + } + + @Override + public void onFailure(Throwable throwable) { + view.hideProgress(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/SubmitMaintainPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/SubmitMaintainPresenterImpl.java new file mode 100644 index 0000000..7722427 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/SubmitMaintainPresenterImpl.java @@ -0,0 +1,42 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.SubmitMaintainModelImpl; +import com.casic.dcms.mvp.view.ISubmitMaintainView; + +public class SubmitMaintainPresenterImpl extends BasePresenter implements ISubmitMaintainPresenter, SubmitMaintainModelImpl.OnSubmitListener { + + private ISubmitMaintainView view; + private SubmitMaintainModelImpl actionModel; + + public SubmitMaintainPresenterImpl(ISubmitMaintainView submitCaseView) { + this.view = submitCaseView; + actionModel = new SubmitMaintainModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description) { + view.showProgress(); + addSubscription(actionModel.sendRetrofitRequest(bridgeId, content, maintainTime, personId, longitude, + latitude, description)); + } + + @Override + public void onSuccess(ActionResultBean resultBean) { + view.hideProgress(); + view.obtainSubmitResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + view.hideProgress(); + view.obtainDataFail(); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IMaintainRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/IMaintainRecordView.java new file mode 100644 index 0000000..8ff5189 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IMaintainRecordView.java @@ -0,0 +1,11 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.MaintainRecordBean; + +public interface IMaintainRecordView { + void obtainRecordResult(MaintainRecordBean resultBean); + + void showProgress(); + + void hideProgress(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ISubmitMaintainView.java b/app/src/main/java/com/casic/dcms/mvp/view/ISubmitMaintainView.java new file mode 100644 index 0000000..75a0629 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/ISubmitMaintainView.java @@ -0,0 +1,13 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.ActionResultBean; + +public interface ISubmitMaintainView { + void showProgress(); + + void hideProgress(); + + void obtainSubmitResult(ActionResultBean resultBean); + + void obtainDataFail(); +} diff --git a/app/src/main/java/com/casic/dcms/ui/BridgeMaintainActivity.java b/app/src/main/java/com/casic/dcms/ui/BridgeMaintainActivity.java new file mode 100644 index 0000000..84b0eef --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/BridgeMaintainActivity.java @@ -0,0 +1,239 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.content.Intent; +import android.location.Location; +import android.text.TextUtils; +import android.view.View; +import android.widget.EditText; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.amap.api.services.core.LatLonPoint; +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.mvp.presenter.SubmitMaintainPresenterImpl; +import com.casic.dcms.mvp.view.ISubmitMaintainView; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; +import com.casic.dcms.utils.SaveKeyValues; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.utils.callback.IAddressListener; +import com.casic.dcms.utils.callback.ILocationListener; +import com.casic.dcms.widgets.SignInDialog; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.util.Timer; +import java.util.TimerTask; + +import butterknife.BindView; +import butterknife.OnClick; + +public class BridgeMaintainActivity extends BaseActivity implements View.OnClickListener, ISubmitMaintainView { + + private static final String TAG = "BridgeMaintainActivity"; + private Context context = this; + @BindView(R.id.topLayout) + QMUITopBarLayout topLayout; + @BindView(R.id.bridgeNameView) + TextView bridgeNameView; + @BindView(R.id.maintainView) + TextView maintainView; + @BindView(R.id.maintainDateView) + TextView maintainDateView; + @BindView(R.id.liablePersonView) + TextView liablePersonView; + @BindView(R.id.submitButton) + QMUIRoundButton submitButton; + //以下非必填 + @BindView(R.id.remarksView) + EditText remarksView; + + private String bridgeId = ""; + private SubmitMaintainPresenterImpl submitMaintainPresenter; + + @Override + public int initLayoutView() { + return R.layout.activity_bridge; + } + + @Override + protected void setupTopBarLayout() { + topLayout.setTitle("路桥养护").setTextColor(ContextCompat.getColor(this, R.color.white)); + topLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + topLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + topLayout.addRightImageButton(R.drawable.ic_more, 2).setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + startActivity(new Intent(context, MaintainRecordActivity.class)); + } + }); + } + + @Override + public void initData() { + submitMaintainPresenter = new SubmitMaintainPresenterImpl(this); + } + + @Override + public void initEvent() { + submitButton.setChangeAlphaWhenPress(true); + liablePersonView.setText(StringHelper.getUserAccount()); + liablePersonView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); + + new Timer().schedule(new TimerTask() { + @Override + public void run() { + String systemDate = TimeOrDateUtil.timestampToDate(System.currentTimeMillis()); + maintainDateView.post(new Runnable() { + @Override + public void run() { + maintainDateView.setText(systemDate); + maintainDateView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); + } + }); + } + }, 0, 1000); + } + + @OnClick({R.id.bridgeLayout, R.id.maintainContentLayout, R.id.submitButton}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.bridgeLayout: + new QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("选择桥梁") + .addItem("永胜桥") + .addItem("黄洲桥") + .addItem("光明桥") + .setGravityCenter(true) + .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + + bridgeId = String.valueOf((1 + position)); + bridgeNameView.setText(tag); + bridgeNameView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); + } + }).build().show(); + break; + case R.id.maintainContentLayout: + new QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("养护内容") + .addItem("日常养护,无异常") + .addItem("清除表面污垢") + .addItem("修补混凝土空洞、破损、剥落和表面风化及裂缝") + .addItem("清除暴露钢筋的锈渍、恢复保护层") + .addItem("处理各种横、纵向构件的开裂、开焊和锈蚀") + .setGravityCenter(true) + .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + + maintainView.setText(tag); + maintainView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); + } + }).build().show(); + break; + case R.id.submitButton: + //获取定位信息 + LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + + } + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + if (aMapLocation != null) { + if (TextUtils.isEmpty(bridgeId)) { + ToastHelper.showToast("请先选择养护的桥梁", ToastHelper.WARING); + return; + } + String maintainContent = maintainView.getText().toString(); + if (TextUtils.isEmpty(maintainContent)) { + ToastHelper.showToast("请选择养护的内容", ToastHelper.WARING); + return; + } + + double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + LatLonPoint latLonPoint = new LatLonPoint(gcjToWgs[1], gcjToWgs[0]); + LocationHelper.antiCodingLocation(context, latLonPoint, new IAddressListener() { + @Override + public void onGetAddress(String address) { + SaveKeyValues.putValue("maintainAddress", address); + } + }); + //提交养护记录 + submitMaintainPresenter.onReadyRetrofitRequest(bridgeId, maintainContent, + maintainDateView.getText().toString(), + StringHelper.getUserId(), String.valueOf(gcjToWgs[0]), + String.valueOf(gcjToWgs[1]), + StringHelper.filterString(remarksView.getText().toString())); + } else { + ToastHelper.showToast("当前信号较弱,无法提交养护记录", ToastHelper.WARING); + } + } + }, true); + break; + default: + throw new IllegalStateException("Unexpected value: " + v.getId()); + } + } + + @Override + public void showProgress() { + OtherUtils.showLoadingDialog(this, "养护记录签到中,请稍后"); + } + + @Override + public void hideProgress() { + OtherUtils.dismissLoadingDialog(); + } + + @Override + public void obtainSubmitResult(ActionResultBean resultBean) { + String maintainAddress = (String) SaveKeyValues.getValue("maintainAddress", ""); + if (resultBean.isSuccess()) { + new SignInDialog.Builder() + .setContext(this) + .setTitle("桥梁养护记录提交成功") + .setAddress(maintainAddress.equals("") ? "详细位置解析失败" : maintainAddress) + .setOnDialogClickListener(new SignInDialog.OnDialogClickListener() { + @Override + public void onViewClick() { + startActivity(new Intent(context, MaintainRecordActivity.class)); + finish(); + } + }).build().show(); + } + } + + @Override + public void obtainDataFail() { + ToastHelper.showToast("操作失败", ToastHelper.ERROR); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (submitMaintainPresenter != null) { + submitMaintainPresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java index 7221e95..381b704 100644 --- a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java @@ -25,6 +25,7 @@ import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.datepicker.DatePopupWindow; +import com.qmuiteam.qmui.widget.QMUIEmptyView; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; @@ -38,8 +39,8 @@ public class CleanResultListActivity extends BaseCaseActivity implements ICleanToiletRecordView { - // @BindView(R.id.emptyView) -// QMUIEmptyView emptyView; + @BindView(R.id.emptyView) + QMUIEmptyView emptyView; @BindView(R.id.dateView) TextView dateView; @BindView(R.id.calendarView) @@ -126,7 +127,6 @@ @Override public void obtainCleanRecordResult(CleanRecordBean resultBean) { -// Log.d("TAG", "obtainCleanRecordResult: " + new Gson().toJson(resultBean)); if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); if (isRefresh) { @@ -175,9 +175,9 @@ } else { //首次加载数据 if (resultActivity.dataBeans.size() == 0) { -// resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); + resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); } else { -// resultActivity.emptyView.hide(); + resultActivity.emptyView.hide(); resultActivity.adapter = new RecordListAdapter(resultActivity, resultActivity.dataBeans); resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); diff --git a/app/src/main/java/com/casic/dcms/ui/MaintainRecordActivity.java b/app/src/main/java/com/casic/dcms/ui/MaintainRecordActivity.java new file mode 100644 index 0000000..05c41c9 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/MaintainRecordActivity.java @@ -0,0 +1,194 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.content.Intent; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.MaintainRecordAdapter; +import com.casic.dcms.base.BaseCaseActivity; +import com.casic.dcms.bean.MaintainRecordBean; +import com.casic.dcms.mvp.presenter.MaintainRecordPresenterImpl; +import com.casic.dcms.mvp.view.IMaintainRecordView; +import com.casic.dcms.utils.CalendarUtil; +import com.casic.dcms.utils.OtherUtils; +import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.datepicker.DatePopupWindow; +import com.qmuiteam.qmui.widget.QMUIEmptyView; +import com.scwang.smartrefresh.layout.SmartRefreshLayout; +import com.scwang.smartrefresh.layout.api.RefreshLayout; +import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; +import com.scwang.smartrefresh.layout.listener.OnRefreshListener; + +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class MaintainRecordActivity extends BaseCaseActivity implements IMaintainRecordView { + + @BindView(R.id.emptyView) + QMUIEmptyView emptyView; + @BindView(R.id.dateView) + TextView dateView; + @BindView(R.id.calendarView) + ImageView calendarView; + @BindView(R.id.refreshLayout) + SmartRefreshLayout refreshLayout; + @BindView(R.id.recordRecyclerView) + RecyclerView recordRecyclerView; + + private Context context = this; + private int pageIndex = 1; + private boolean isRefresh, isLoadMore = false; + private WeakReferenceHandler weakReferenceHandler; + private List dataBeans = new ArrayList<>(); + private MaintainRecordPresenterImpl recordPresenter; + private MaintainRecordAdapter adapter; + private int startGroup = -1; + private int endGroup = -1; + private int startChild = -1; + private int endChild = -1; + + @Override + protected String setTitleName() { + return "桥梁养护记录"; + } + + @Override + public int initLayoutView() { + return R.layout.activity_maintain_record; + } + + @Override + public void initData() { + weakReferenceHandler = new WeakReferenceHandler(this); + recordPresenter = new MaintainRecordPresenterImpl(this); + recordPresenter.onReadyRetrofitRequest("", "", pageIndex); + } + + @Override + public void initEvent() { + calendarView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + new DatePopupWindow + .Builder(MaintainRecordActivity.this, CalendarUtil.obtainLastTwoMonth(), v)//初始化 + .setInitSelect(startGroup, startChild, endGroup, endChild)//设置上一次选中的区间状态 + .setInitDay(true)//默认为true,UI内容为共几天、开始、结束;当为false时,UI内容为共几晚、入住、离开 + .setDateOnClickListener(new DatePopupWindow.DateOnClickListener() {//设置监听 + //点击完成按钮后回调返回方法 + @Override + public void getDate(String startDate, String endDate, int startGroupPosition, int + startChildPosition, int endGroupPosition, int endChildPosition) { + startGroup = startGroupPosition;//开始月份位置 + startChild = startChildPosition;//开始对应月份中日的位置 + endGroup = endGroupPosition;//结束月份位置 + endChild = endChildPosition;//结束对应月份中日的位置 + dateView.setText(startDate + "~" + endDate); + recordPresenter.onReadyRetrofitRequest(startDate, endDate, pageIndex); + } + }).builder(); + } + }); + refreshLayout.setOnRefreshListener(new OnRefreshListener() { + @Override + public void onRefresh(@NonNull final RefreshLayout refreshLayout) { + isRefresh = true; + //刷新之后页码重置 + pageIndex = 1; + recordPresenter.onReadyRetrofitRequest("", "", pageIndex); + } + }); + refreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() { + @Override + public void onLoadMore(@NonNull final RefreshLayout refreshLayout) { + isLoadMore = true; + pageIndex++; + recordPresenter.onReadyRetrofitRequest("", "", pageIndex); + } + }); + } + + @Override + public void obtainRecordResult(MaintainRecordBean resultBean) { + if (resultBean.isSuccess()) { + List dataRows = resultBean.getData().getRows(); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + ToastHelper.showToast("到底了,别拉了", ToastHelper.INFO); + } + dataBeans.addAll(dataRows); + refreshLayout.finishLoadMore(); + isLoadMore = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(20210622); + } + } + + @Override + public void showProgress() { + OtherUtils.showLoadingDialog(this, "查询记录中,请稍后"); + } + + @Override + public void hideProgress() { + OtherUtils.dismissLoadingDialog(); + } + + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(MaintainRecordActivity activity) { + reference = new WeakReference<>(activity); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + MaintainRecordActivity resultActivity = reference.get(); + if (msg.what == 20210622) { + if (resultActivity.isRefresh || resultActivity.isLoadMore) { + resultActivity.adapter.notifyDataSetChanged(); + } else { + //首次加载数据 + if (resultActivity.dataBeans.size() == 0) { + resultActivity.emptyView.show("抱歉,没有查到相关养护记录", null); + } else { + resultActivity.emptyView.hide(); + resultActivity.adapter = new MaintainRecordAdapter(resultActivity, resultActivity.dataBeans); + resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); + resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); + resultActivity.recordRecyclerView.setAdapter(resultActivity.adapter); + } + } + } + } + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (recordPresenter != null) { + recordPresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/PipelineManagerActivity.java b/app/src/main/java/com/casic/dcms/ui/PipelineManagerActivity.java new file mode 100644 index 0000000..fa77936 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/PipelineManagerActivity.java @@ -0,0 +1,27 @@ +package com.casic.dcms.ui; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; + +public class PipelineManagerActivity extends BaseActivity { + + @Override + public int initLayoutView() { + return R.layout.activity_pipe; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java index ac995d3..4959539 100644 --- a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java @@ -300,7 +300,8 @@ @Override public void onAMapLocationGet(AMapLocation aMapLocation) { if (aMapLocation != null) { - Point point = new Point(aMapLocation.getLongitude(), aMapLocation.getLatitude(), mapView.getSpatialReference()); + double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); mapView.setViewpointCenterAsync(point, 1200);//标注到指定经纬度并放大地图显示 //添加图片Marker addPictureMarker(point); @@ -311,11 +312,9 @@ ToastHelper.showToast("公厕标识不能为空", ToastHelper.WARING); return; } - double longitude = aMapLocation.getLongitude(); - double latitude = aMapLocation.getLatitude(); String cleanTime = TimeOrDateUtil.timestampToCompleteDate(System.currentTimeMillis()); cleanToiletPresenter.onReadyRetrofitRequest(toiletId, StringHelper.getUserId(), - String.valueOf(longitude), String.valueOf(latitude), cleanTime, imagePath, + String.valueOf(gcjToWgs[0]), String.valueOf(gcjToWgs[1]), cleanTime, imagePath, StringHelper.filterString(workContentView.getText().toString())); } } @@ -416,15 +415,18 @@ @Override public void obtainCleanResult(ActionResultBean resultBean) { -// Log.d(TAG, "obtainCleanResult: " + new Gson().toJson(resultBean)); if (resultBean.isSuccess()) { - new SignInDialog.Builder().setContext(this).setAddress(locationStreetView.getText().toString()).setOnDialogClickListener(new SignInDialog.OnDialogClickListener() { - @Override - public void onViewClick() { - startActivity(new Intent(context, CleanResultListActivity.class)); - PublicToiletActivity.this.finish(); - } - }).build().show(); + new SignInDialog.Builder() + .setContext(this) + .setTitle("保洁保卡成功") + .setAddress(locationStreetView.getText().toString()) + .setOnDialogClickListener(new SignInDialog.OnDialogClickListener() { + @Override + public void onViewClick() { + startActivity(new Intent(context, CleanResultListActivity.class)); + PublicToiletActivity.this.finish(); + } + }).build().show(); } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java index 03438b0..42d29a4 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java @@ -18,6 +18,7 @@ import com.casic.dcms.mvp.presenter.UserDataPresenterImpl; import com.casic.dcms.mvp.view.IHomePageView; import com.casic.dcms.mvp.view.IUserDataView; +import com.casic.dcms.ui.BridgeMaintainActivity; import com.casic.dcms.ui.CaseCheckActivity; import com.casic.dcms.ui.CaseHandleActivity; import com.casic.dcms.ui.CaseOnMapActivity; @@ -32,6 +33,7 @@ import com.casic.dcms.ui.OvertimeCaseActivity; import com.casic.dcms.ui.PackageHandleActivity; import com.casic.dcms.ui.PersonOnlineActivity; +import com.casic.dcms.ui.PipelineManagerActivity; import com.casic.dcms.ui.PublicToiletActivity; import com.casic.dcms.ui.UrgentCaseActivity; import com.casic.dcms.utils.StringHelper; @@ -161,6 +163,12 @@ case "部门处置": intent.setClass(context, DeptHandleActivity.class); break; + case "路桥养护": + intent.setClass(context, BridgeMaintainActivity.class); + break; + case "管网管理": + intent.setClass(context, PipelineManagerActivity.class); + break; default: break; } diff --git a/app/src/main/java/com/casic/dcms/utils/Constant.java b/app/src/main/java/com/casic/dcms/utils/Constant.java index d9c1d60..9bbbdb0 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -35,7 +35,8 @@ public static final String IP_KEY = "BASE_IP"; - public static final long FIVE_YEARS = 5L * 365 * 1000 * 60 * 60 * 24L; + public static final long FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L; + public static final long ONE_YEAR = 365 * 60 * 60 * 24 * 1000L; public static final long IMAGE_MINUS_SIZE = 100 * 1024; public static final long HTTP_TIMEOUT = 30L; public static final int PERMISSIONS_CODE = 999; diff --git a/app/src/main/java/com/casic/dcms/utils/LocationHelper.java b/app/src/main/java/com/casic/dcms/utils/LocationHelper.java index 8d95580..79aedbf 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocationHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/LocationHelper.java @@ -40,7 +40,6 @@ private static final double a = 6378245.0; // a: 卫星椭球坐标投影到平面地图坐标系的投影因子。 private static final double ee = 0.00669342162296594323; // ee: 椭球的偏心率平方。 - /** * 高德sdk定位 */ diff --git a/app/src/main/java/com/casic/dcms/utils/StringHelper.java b/app/src/main/java/com/casic/dcms/utils/StringHelper.java index 6bea75a..2faeae4 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -250,8 +250,12 @@ return R.drawable.ic_shangpu; case "部门处置": return R.drawable.ic_dept; + case "路桥养护": + return R.drawable.ic_bridge; + case "管网管理": + return R.drawable.ic_pipe; default: - return R.mipmap.app_logo; + return R.drawable.ic_default_icon; } } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index dc53815..f0be407 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -21,6 +21,8 @@ import com.casic.dcms.bean.HighEventBean; import com.casic.dcms.bean.HomePageBean; import com.casic.dcms.bean.LoginResultBean; +import com.casic.dcms.bean.MaintainContentBean; +import com.casic.dcms.bean.MaintainRecordBean; import com.casic.dcms.bean.NewVersionBean; import com.casic.dcms.bean.OnlinePersonBean; import com.casic.dcms.bean.OvertimeCaseBean; @@ -616,4 +618,42 @@ @POST("/mgr/simplelist") Observable obtainNextProcessPerson(@Header("token") String token, @Field("roleTips") String roleTips); + + /** + * 根据养护类型获取养护内容 + *

+ * http://111.198.10.15:11409/bridge/maintain/contentByType + */ + @FormUrlEncoded + @POST("/bridge/maintain/contentByType") + Observable obtainMaintainContent(@Header("token") String token, + @Field("type") String type); + + /** + * 桥梁新增打卡记录 + *

+ * http://111.198.10.15:11409/bridge/maintain/addApp + */ + @FormUrlEncoded + @POST("/bridge/maintain/addApp") + Observable addMaintainRecord(@Header("token") String token, + @Field("bridgeId") String bridgeId, + @Field("content") String content, + @Field("maintainTime") String maintainTime, + @Field("personId") String personId, + @Field("longitude") String longitude, + @Field("latitude") String latitude, + @Field("description") String description); + + /** + * 桥梁养护记录 + *

+ * http://111.198.10.15:11409/bridge/maintain/listPage?startDate=2021-06-21&endDate=2021-06-22 + */ + @GET("/bridge/maintain/listPage") + Observable obtainMaintainRecord(@Header("token") String token, + @Query("startDate") String beginDate, + @Query("endDate") String endDate, + @Query("limit") int limit, + @Query("offset") int offset); } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index 67e8da1..283354a 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -23,6 +23,8 @@ import com.casic.dcms.bean.HighEventBean; import com.casic.dcms.bean.HomePageBean; import com.casic.dcms.bean.LoginResultBean; +import com.casic.dcms.bean.MaintainContentBean; +import com.casic.dcms.bean.MaintainRecordBean; import com.casic.dcms.bean.NewVersionBean; import com.casic.dcms.bean.OnlinePersonBean; import com.casic.dcms.bean.OvertimeCaseBean; @@ -638,9 +640,41 @@ /** * 获取下级处置员 */ - public static Observable getProcessPerson() { + public static Observable getProcessPersonResult() { Retrofit retrofit = createRetrofit(); RetrofitService service = retrofit.create(RetrofitService.class); return service.obtainNextProcessPerson(AuthenticationHelper.getToken(), "process"); } + + /** + * 根据养护类型获取养护内容 + */ + public static Observable getMaintainContentResult(String type) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainMaintainContent(AuthenticationHelper.getToken(), type); + } + + /** + * 桥梁新增打卡记录 + */ + public static Observable getAddMaintainRecordResult(String bridgeId, String content, + String maintainTime, String personId, + String longitude, String latitude, + String description) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.addMaintainRecord(AuthenticationHelper.getToken(), bridgeId, content, maintainTime, + personId, longitude, latitude, description); + } + + /** + * 桥梁养护记录 + */ + public static Observable getMaintainRecordResult(String startDate, String endDate, int offset) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainMaintainRecord(AuthenticationHelper.getToken(), startDate, endDate, Constant.PAGE_LIMIT, + offset); + } } diff --git a/app/src/main/java/com/casic/dcms/widgets/SignInDialog.java b/app/src/main/java/com/casic/dcms/widgets/SignInDialog.java index ae61dd1..b96ff2f 100644 --- a/app/src/main/java/com/casic/dcms/widgets/SignInDialog.java +++ b/app/src/main/java/com/casic/dcms/widgets/SignInDialog.java @@ -2,13 +2,19 @@ import android.app.Dialog; import android.content.Context; +import android.graphics.Color; +import android.graphics.drawable.ColorDrawable; import android.os.Bundle; import android.text.TextUtils; import android.view.View; +import android.view.Window; +import android.view.WindowManager; import android.widget.TextView; import com.casic.dcms.R; +import com.casic.dcms.base.BaseApplication; import com.casic.dcms.utils.TimeOrDateUtil; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; import java.util.Timer; import java.util.TimerTask; @@ -16,11 +22,13 @@ public class SignInDialog extends Dialog implements View.OnClickListener { private static final String TAG = "SignInDialog"; + private String title; private String address; private OnDialogClickListener listener; private SignInDialog(Builder builder) { super(builder.mContext); + this.title = builder.title; this.address = builder.address; this.listener = builder.listener; } @@ -28,6 +36,16 @@ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + + //手动设置dialog宽度 + Window window = getWindow(); + window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); + window.getDecorView().setBackgroundColor(Color.TRANSPARENT); + WindowManager.LayoutParams params = window.getAttributes(); + params.width = QMUIDisplayHelper.dp2px(BaseApplication.getInstance(), 300); + params.height = WindowManager.LayoutParams.WRAP_CONTENT; + window.setAttributes(params); + setContentView(R.layout.dialog_sign_in); initView(); } @@ -41,6 +59,10 @@ clockView.post(() -> clockView.setText(systemTime)); } }, 0, 1000); + TextView optionTitleView = findViewById(R.id.optionTitleView); + if (!TextUtils.isEmpty(title)) { + optionTitleView.setText(title); + } TextView signInPlaceView = findViewById(R.id.signInPlaceView); if (!TextUtils.isEmpty(address)) { signInPlaceView.setText(address); @@ -62,6 +84,7 @@ public static class Builder { private Context mContext; + private String title; private String address; private OnDialogClickListener listener; @@ -70,6 +93,11 @@ return this; } + public Builder setTitle(String title) { + this.title = title; + return this; + } + public Builder setAddress(String address) { this.address = address; return this; diff --git a/app/src/main/res/drawable/ic_bridge.xml b/app/src/main/res/drawable/ic_bridge.xml new file mode 100644 index 0000000..7aa4637 --- /dev/null +++ b/app/src/main/res/drawable/ic_bridge.xml @@ -0,0 +1,11 @@ + + + diff --git a/app/src/main/res/drawable/ic_default_icon.xml b/app/src/main/res/drawable/ic_default_icon.xml new file mode 100644 index 0000000..3c41da5 --- /dev/null +++ b/app/src/main/res/drawable/ic_default_icon.xml @@ -0,0 +1,18 @@ + + + + + + diff --git a/app/src/main/res/drawable/ic_info.xml b/app/src/main/res/drawable/ic_info.xml new file mode 100644 index 0000000..6562ce3 --- /dev/null +++ b/app/src/main/res/drawable/ic_info.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/build.gradle b/app/build.gradle index 6f0b518..bcfdc0d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ applicationId "com.casic.dcms" minSdkVersion 21 targetSdkVersion 30 - versionCode 19 - versionName "v1.0.0.11" + versionCode 20 + versionName "v1.0.0.12" ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 68f46c9..3090a91 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -89,7 +89,10 @@ - + + + + { + + private Context context; + private List dataRows; + private LayoutInflater layoutInflater; + private QMUITipDialog.Builder dialogBuilder; + + public MaintainRecordAdapter(Context context, List dataRows) { + this.context = context; + this.dataRows = dataRows; + layoutInflater = LayoutInflater.from(context); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = layoutInflater.inflate(R.layout.item_maintain_recycleview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + holder.bindView(dataRows.get(position)); + } + + @Override + public int getItemCount() { + return dataRows.size(); + } + + class ItemViewHolder extends RecyclerView.ViewHolder { + + private TextView bridgeNameView; + private ImageView descriptionImageView; + private TextView maintainContentView; + private TextView maintainTimeView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + bridgeNameView = itemView.findViewById(R.id.bridgeNameView); + descriptionImageView = itemView.findViewById(R.id.descriptionImageView); + maintainContentView = itemView.findViewById(R.id.maintainContentView); + maintainTimeView = itemView.findViewById(R.id.maintainTimeView); + } + + void bindView(MaintainRecordBean.DataBean.RowsBean rowsBean) { + bridgeNameView.setText(rowsBean.getBridgeName()); + String description = rowsBean.getDescription(); + if (TextUtils.isEmpty(description)) { + descriptionImageView.setVisibility(View.GONE); + } else { + descriptionImageView.setVisibility(View.VISIBLE); + descriptionImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + QMUITipDialog tipDialog = new QMUITipDialog.Builder(context) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_NOTHING) + .setTipWord(description) + .create(); + tipDialog.show(); + descriptionImageView.postDelayed(new Runnable() { + @Override + public void run() { + tipDialog.dismiss(); + } + }, 2000); + } + }); + } + maintainContentView.setText(rowsBean.getContent()); + maintainTimeView.setText(rowsBean.getMaintainTimeStr()); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java b/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java new file mode 100644 index 0000000..ded4fe1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java @@ -0,0 +1,41 @@ +package com.casic.dcms.bean; + +public class MaintainContentBean { + + private int code; + private String data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java b/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java new file mode 100644 index 0000000..2beea74 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java @@ -0,0 +1,301 @@ +package com.casic.dcms.bean; + +import java.util.List; + +public class MaintainRecordBean { + + private int code; + private DataBean data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + + private int total; + private List rows; + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public static class RowsBean { + /** + * bridgeId : 1 + * bridgeName : 永胜桥 + * category : 桥梁 + * code : 1624359572304 + * content : 日常养护,无异常 + * deptid : 1344110695992258561 + * description : + * id : 1407292162033041409 + * latitude : 39.914705918747295 + * longitude : 116.26295490330527 + * maintainTime : 2021-06-22 00:00:00 + * maintainTimeStr : 2021-06-22 + * name : + * personId : 1344179277212151809 + * personName : + * phone : + * status : + * statusName : + * tender : + * tenderCompany : + * ts : 2021-06-22 + * type : + * typeName : + */ + + private String bridgeId; + private String bridgeName; + private String category; + private String code; + private String content; + private String deptid; + private String description; + private String id; + private String latitude; + private String longitude; + private String maintainTime; + private String maintainTimeStr; + private String name; + private String personId; + private String personName; + private String phone; + private String status; + private String statusName; + private String tender; + private String tenderCompany; + private String ts; + private String type; + private String typeName; + + public String getBridgeId() { + return bridgeId; + } + + public void setBridgeId(String bridgeId) { + this.bridgeId = bridgeId; + } + + public String getBridgeName() { + return bridgeName; + } + + public void setBridgeName(String bridgeName) { + this.bridgeName = bridgeName; + } + + public String getCategory() { + return category; + } + + public void setCategory(String category) { + this.category = category; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLatitude() { + return latitude; + } + + public void setLatitude(String latitude) { + this.latitude = latitude; + } + + public String getLongitude() { + return longitude; + } + + public void setLongitude(String longitude) { + this.longitude = longitude; + } + + public String getMaintainTime() { + return maintainTime; + } + + public void setMaintainTime(String maintainTime) { + this.maintainTime = maintainTime; + } + + public String getMaintainTimeStr() { + return maintainTimeStr; + } + + public void setMaintainTimeStr(String maintainTimeStr) { + this.maintainTimeStr = maintainTimeStr; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPersonId() { + return personId; + } + + public void setPersonId(String personId) { + this.personId = personId; + } + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + 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 getTender() { + return tender; + } + + public void setTender(String tender) { + this.tender = tender; + } + + public String getTenderCompany() { + return tenderCompany; + } + + public void setTenderCompany(String tenderCompany) { + this.tenderCompany = tenderCompany; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getTypeName() { + return typeName; + } + + public void setTypeName(String typeName) { + this.typeName = typeName; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java new file mode 100644 index 0000000..4f7a588 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IMaintainRecordModel { + Subscription sendRetrofitRequest(String startDate, String endDate, int offset); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java new file mode 100644 index 0000000..dce3f91 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java @@ -0,0 +1,8 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ISubmitMaintainModel { + Subscription sendRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/MaintainRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/MaintainRecordModelImpl.java new file mode 100644 index 0000000..35fd486 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/MaintainRecordModelImpl.java @@ -0,0 +1,50 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.MaintainRecordBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class MaintainRecordModelImpl implements IMaintainRecordModel { + + private OnGetRecordListener listener; + + public MaintainRecordModelImpl(OnGetRecordListener recordListener) { + this.listener = recordListener; + } + + public interface OnGetRecordListener { + void onSuccess(MaintainRecordBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String startDate, String endDate, int offset) { + Observable observable = RetrofitServiceManager.getMaintainRecordResult(startDate, endDate, offset); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (e.getCause() != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(MaintainRecordBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java index 06f6fb4..9e2666d 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java @@ -29,7 +29,7 @@ @Override public Subscription sendRetrofitRequest() { - Observable observable = RetrofitServiceManager.getProcessPerson(); + Observable observable = RetrofitServiceManager.getProcessPersonResult(); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/SubmitMaintainModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/SubmitMaintainModelImpl.java new file mode 100644 index 0000000..2924fbe --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/SubmitMaintainModelImpl.java @@ -0,0 +1,52 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class SubmitMaintainModelImpl implements ISubmitMaintainModel { + + private OnSubmitListener listener; + + public SubmitMaintainModelImpl(OnSubmitListener submitListener) { + this.listener = submitListener; + } + + public interface OnSubmitListener { + void onSuccess(ActionResultBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description) { + Observable observable = RetrofitServiceManager.getAddMaintainRecordResult(bridgeId, + content, maintainTime, personId, longitude, latitude, description); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (e.getCause() != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(ActionResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IMaintainRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IMaintainRecordPresenter.java new file mode 100644 index 0000000..938a484 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IMaintainRecordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IMaintainRecordPresenter { + void onReadyRetrofitRequest(String startDate, String endDate, int offset); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ISubmitMaintainPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ISubmitMaintainPresenter.java new file mode 100644 index 0000000..511e717 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ISubmitMaintainPresenter.java @@ -0,0 +1,8 @@ +package com.casic.dcms.mvp.presenter; + +public interface ISubmitMaintainPresenter { + void onReadyRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/MaintainRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/MaintainRecordPresenterImpl.java new file mode 100644 index 0000000..fd99e30 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/MaintainRecordPresenterImpl.java @@ -0,0 +1,39 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.MaintainRecordBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.MaintainRecordModelImpl; +import com.casic.dcms.mvp.view.IMaintainRecordView; + +public class MaintainRecordPresenterImpl extends BasePresenter implements IMaintainRecordPresenter, MaintainRecordModelImpl.OnGetRecordListener { + + private IMaintainRecordView view; + private MaintainRecordModelImpl model; + + public MaintainRecordPresenterImpl(IMaintainRecordView cleanToiletRecordView) { + this.view = cleanToiletRecordView; + model = new MaintainRecordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String startDate, String endDate, int offset) { + view.showProgress(); + addSubscription(model.sendRetrofitRequest(startDate, endDate, offset)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(MaintainRecordBean result) { + view.hideProgress(); + view.obtainRecordResult(result); + } + + @Override + public void onFailure(Throwable throwable) { + view.hideProgress(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/SubmitMaintainPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/SubmitMaintainPresenterImpl.java new file mode 100644 index 0000000..7722427 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/SubmitMaintainPresenterImpl.java @@ -0,0 +1,42 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.SubmitMaintainModelImpl; +import com.casic.dcms.mvp.view.ISubmitMaintainView; + +public class SubmitMaintainPresenterImpl extends BasePresenter implements ISubmitMaintainPresenter, SubmitMaintainModelImpl.OnSubmitListener { + + private ISubmitMaintainView view; + private SubmitMaintainModelImpl actionModel; + + public SubmitMaintainPresenterImpl(ISubmitMaintainView submitCaseView) { + this.view = submitCaseView; + actionModel = new SubmitMaintainModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description) { + view.showProgress(); + addSubscription(actionModel.sendRetrofitRequest(bridgeId, content, maintainTime, personId, longitude, + latitude, description)); + } + + @Override + public void onSuccess(ActionResultBean resultBean) { + view.hideProgress(); + view.obtainSubmitResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + view.hideProgress(); + view.obtainDataFail(); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IMaintainRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/IMaintainRecordView.java new file mode 100644 index 0000000..8ff5189 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IMaintainRecordView.java @@ -0,0 +1,11 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.MaintainRecordBean; + +public interface IMaintainRecordView { + void obtainRecordResult(MaintainRecordBean resultBean); + + void showProgress(); + + void hideProgress(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ISubmitMaintainView.java b/app/src/main/java/com/casic/dcms/mvp/view/ISubmitMaintainView.java new file mode 100644 index 0000000..75a0629 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/ISubmitMaintainView.java @@ -0,0 +1,13 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.ActionResultBean; + +public interface ISubmitMaintainView { + void showProgress(); + + void hideProgress(); + + void obtainSubmitResult(ActionResultBean resultBean); + + void obtainDataFail(); +} diff --git a/app/src/main/java/com/casic/dcms/ui/BridgeMaintainActivity.java b/app/src/main/java/com/casic/dcms/ui/BridgeMaintainActivity.java new file mode 100644 index 0000000..84b0eef --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/BridgeMaintainActivity.java @@ -0,0 +1,239 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.content.Intent; +import android.location.Location; +import android.text.TextUtils; +import android.view.View; +import android.widget.EditText; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.amap.api.services.core.LatLonPoint; +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.mvp.presenter.SubmitMaintainPresenterImpl; +import com.casic.dcms.mvp.view.ISubmitMaintainView; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; +import com.casic.dcms.utils.SaveKeyValues; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.utils.callback.IAddressListener; +import com.casic.dcms.utils.callback.ILocationListener; +import com.casic.dcms.widgets.SignInDialog; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.util.Timer; +import java.util.TimerTask; + +import butterknife.BindView; +import butterknife.OnClick; + +public class BridgeMaintainActivity extends BaseActivity implements View.OnClickListener, ISubmitMaintainView { + + private static final String TAG = "BridgeMaintainActivity"; + private Context context = this; + @BindView(R.id.topLayout) + QMUITopBarLayout topLayout; + @BindView(R.id.bridgeNameView) + TextView bridgeNameView; + @BindView(R.id.maintainView) + TextView maintainView; + @BindView(R.id.maintainDateView) + TextView maintainDateView; + @BindView(R.id.liablePersonView) + TextView liablePersonView; + @BindView(R.id.submitButton) + QMUIRoundButton submitButton; + //以下非必填 + @BindView(R.id.remarksView) + EditText remarksView; + + private String bridgeId = ""; + private SubmitMaintainPresenterImpl submitMaintainPresenter; + + @Override + public int initLayoutView() { + return R.layout.activity_bridge; + } + + @Override + protected void setupTopBarLayout() { + topLayout.setTitle("路桥养护").setTextColor(ContextCompat.getColor(this, R.color.white)); + topLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + topLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + topLayout.addRightImageButton(R.drawable.ic_more, 2).setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + startActivity(new Intent(context, MaintainRecordActivity.class)); + } + }); + } + + @Override + public void initData() { + submitMaintainPresenter = new SubmitMaintainPresenterImpl(this); + } + + @Override + public void initEvent() { + submitButton.setChangeAlphaWhenPress(true); + liablePersonView.setText(StringHelper.getUserAccount()); + liablePersonView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); + + new Timer().schedule(new TimerTask() { + @Override + public void run() { + String systemDate = TimeOrDateUtil.timestampToDate(System.currentTimeMillis()); + maintainDateView.post(new Runnable() { + @Override + public void run() { + maintainDateView.setText(systemDate); + maintainDateView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); + } + }); + } + }, 0, 1000); + } + + @OnClick({R.id.bridgeLayout, R.id.maintainContentLayout, R.id.submitButton}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.bridgeLayout: + new QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("选择桥梁") + .addItem("永胜桥") + .addItem("黄洲桥") + .addItem("光明桥") + .setGravityCenter(true) + .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + + bridgeId = String.valueOf((1 + position)); + bridgeNameView.setText(tag); + bridgeNameView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); + } + }).build().show(); + break; + case R.id.maintainContentLayout: + new QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("养护内容") + .addItem("日常养护,无异常") + .addItem("清除表面污垢") + .addItem("修补混凝土空洞、破损、剥落和表面风化及裂缝") + .addItem("清除暴露钢筋的锈渍、恢复保护层") + .addItem("处理各种横、纵向构件的开裂、开焊和锈蚀") + .setGravityCenter(true) + .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + + maintainView.setText(tag); + maintainView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); + } + }).build().show(); + break; + case R.id.submitButton: + //获取定位信息 + LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + + } + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + if (aMapLocation != null) { + if (TextUtils.isEmpty(bridgeId)) { + ToastHelper.showToast("请先选择养护的桥梁", ToastHelper.WARING); + return; + } + String maintainContent = maintainView.getText().toString(); + if (TextUtils.isEmpty(maintainContent)) { + ToastHelper.showToast("请选择养护的内容", ToastHelper.WARING); + return; + } + + double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + LatLonPoint latLonPoint = new LatLonPoint(gcjToWgs[1], gcjToWgs[0]); + LocationHelper.antiCodingLocation(context, latLonPoint, new IAddressListener() { + @Override + public void onGetAddress(String address) { + SaveKeyValues.putValue("maintainAddress", address); + } + }); + //提交养护记录 + submitMaintainPresenter.onReadyRetrofitRequest(bridgeId, maintainContent, + maintainDateView.getText().toString(), + StringHelper.getUserId(), String.valueOf(gcjToWgs[0]), + String.valueOf(gcjToWgs[1]), + StringHelper.filterString(remarksView.getText().toString())); + } else { + ToastHelper.showToast("当前信号较弱,无法提交养护记录", ToastHelper.WARING); + } + } + }, true); + break; + default: + throw new IllegalStateException("Unexpected value: " + v.getId()); + } + } + + @Override + public void showProgress() { + OtherUtils.showLoadingDialog(this, "养护记录签到中,请稍后"); + } + + @Override + public void hideProgress() { + OtherUtils.dismissLoadingDialog(); + } + + @Override + public void obtainSubmitResult(ActionResultBean resultBean) { + String maintainAddress = (String) SaveKeyValues.getValue("maintainAddress", ""); + if (resultBean.isSuccess()) { + new SignInDialog.Builder() + .setContext(this) + .setTitle("桥梁养护记录提交成功") + .setAddress(maintainAddress.equals("") ? "详细位置解析失败" : maintainAddress) + .setOnDialogClickListener(new SignInDialog.OnDialogClickListener() { + @Override + public void onViewClick() { + startActivity(new Intent(context, MaintainRecordActivity.class)); + finish(); + } + }).build().show(); + } + } + + @Override + public void obtainDataFail() { + ToastHelper.showToast("操作失败", ToastHelper.ERROR); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (submitMaintainPresenter != null) { + submitMaintainPresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java index 7221e95..381b704 100644 --- a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java @@ -25,6 +25,7 @@ import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.datepicker.DatePopupWindow; +import com.qmuiteam.qmui.widget.QMUIEmptyView; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; @@ -38,8 +39,8 @@ public class CleanResultListActivity extends BaseCaseActivity implements ICleanToiletRecordView { - // @BindView(R.id.emptyView) -// QMUIEmptyView emptyView; + @BindView(R.id.emptyView) + QMUIEmptyView emptyView; @BindView(R.id.dateView) TextView dateView; @BindView(R.id.calendarView) @@ -126,7 +127,6 @@ @Override public void obtainCleanRecordResult(CleanRecordBean resultBean) { -// Log.d("TAG", "obtainCleanRecordResult: " + new Gson().toJson(resultBean)); if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); if (isRefresh) { @@ -175,9 +175,9 @@ } else { //首次加载数据 if (resultActivity.dataBeans.size() == 0) { -// resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); + resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); } else { -// resultActivity.emptyView.hide(); + resultActivity.emptyView.hide(); resultActivity.adapter = new RecordListAdapter(resultActivity, resultActivity.dataBeans); resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); diff --git a/app/src/main/java/com/casic/dcms/ui/MaintainRecordActivity.java b/app/src/main/java/com/casic/dcms/ui/MaintainRecordActivity.java new file mode 100644 index 0000000..05c41c9 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/MaintainRecordActivity.java @@ -0,0 +1,194 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.content.Intent; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.MaintainRecordAdapter; +import com.casic.dcms.base.BaseCaseActivity; +import com.casic.dcms.bean.MaintainRecordBean; +import com.casic.dcms.mvp.presenter.MaintainRecordPresenterImpl; +import com.casic.dcms.mvp.view.IMaintainRecordView; +import com.casic.dcms.utils.CalendarUtil; +import com.casic.dcms.utils.OtherUtils; +import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.datepicker.DatePopupWindow; +import com.qmuiteam.qmui.widget.QMUIEmptyView; +import com.scwang.smartrefresh.layout.SmartRefreshLayout; +import com.scwang.smartrefresh.layout.api.RefreshLayout; +import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; +import com.scwang.smartrefresh.layout.listener.OnRefreshListener; + +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class MaintainRecordActivity extends BaseCaseActivity implements IMaintainRecordView { + + @BindView(R.id.emptyView) + QMUIEmptyView emptyView; + @BindView(R.id.dateView) + TextView dateView; + @BindView(R.id.calendarView) + ImageView calendarView; + @BindView(R.id.refreshLayout) + SmartRefreshLayout refreshLayout; + @BindView(R.id.recordRecyclerView) + RecyclerView recordRecyclerView; + + private Context context = this; + private int pageIndex = 1; + private boolean isRefresh, isLoadMore = false; + private WeakReferenceHandler weakReferenceHandler; + private List dataBeans = new ArrayList<>(); + private MaintainRecordPresenterImpl recordPresenter; + private MaintainRecordAdapter adapter; + private int startGroup = -1; + private int endGroup = -1; + private int startChild = -1; + private int endChild = -1; + + @Override + protected String setTitleName() { + return "桥梁养护记录"; + } + + @Override + public int initLayoutView() { + return R.layout.activity_maintain_record; + } + + @Override + public void initData() { + weakReferenceHandler = new WeakReferenceHandler(this); + recordPresenter = new MaintainRecordPresenterImpl(this); + recordPresenter.onReadyRetrofitRequest("", "", pageIndex); + } + + @Override + public void initEvent() { + calendarView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + new DatePopupWindow + .Builder(MaintainRecordActivity.this, CalendarUtil.obtainLastTwoMonth(), v)//初始化 + .setInitSelect(startGroup, startChild, endGroup, endChild)//设置上一次选中的区间状态 + .setInitDay(true)//默认为true,UI内容为共几天、开始、结束;当为false时,UI内容为共几晚、入住、离开 + .setDateOnClickListener(new DatePopupWindow.DateOnClickListener() {//设置监听 + //点击完成按钮后回调返回方法 + @Override + public void getDate(String startDate, String endDate, int startGroupPosition, int + startChildPosition, int endGroupPosition, int endChildPosition) { + startGroup = startGroupPosition;//开始月份位置 + startChild = startChildPosition;//开始对应月份中日的位置 + endGroup = endGroupPosition;//结束月份位置 + endChild = endChildPosition;//结束对应月份中日的位置 + dateView.setText(startDate + "~" + endDate); + recordPresenter.onReadyRetrofitRequest(startDate, endDate, pageIndex); + } + }).builder(); + } + }); + refreshLayout.setOnRefreshListener(new OnRefreshListener() { + @Override + public void onRefresh(@NonNull final RefreshLayout refreshLayout) { + isRefresh = true; + //刷新之后页码重置 + pageIndex = 1; + recordPresenter.onReadyRetrofitRequest("", "", pageIndex); + } + }); + refreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() { + @Override + public void onLoadMore(@NonNull final RefreshLayout refreshLayout) { + isLoadMore = true; + pageIndex++; + recordPresenter.onReadyRetrofitRequest("", "", pageIndex); + } + }); + } + + @Override + public void obtainRecordResult(MaintainRecordBean resultBean) { + if (resultBean.isSuccess()) { + List dataRows = resultBean.getData().getRows(); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + ToastHelper.showToast("到底了,别拉了", ToastHelper.INFO); + } + dataBeans.addAll(dataRows); + refreshLayout.finishLoadMore(); + isLoadMore = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(20210622); + } + } + + @Override + public void showProgress() { + OtherUtils.showLoadingDialog(this, "查询记录中,请稍后"); + } + + @Override + public void hideProgress() { + OtherUtils.dismissLoadingDialog(); + } + + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(MaintainRecordActivity activity) { + reference = new WeakReference<>(activity); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + MaintainRecordActivity resultActivity = reference.get(); + if (msg.what == 20210622) { + if (resultActivity.isRefresh || resultActivity.isLoadMore) { + resultActivity.adapter.notifyDataSetChanged(); + } else { + //首次加载数据 + if (resultActivity.dataBeans.size() == 0) { + resultActivity.emptyView.show("抱歉,没有查到相关养护记录", null); + } else { + resultActivity.emptyView.hide(); + resultActivity.adapter = new MaintainRecordAdapter(resultActivity, resultActivity.dataBeans); + resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); + resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); + resultActivity.recordRecyclerView.setAdapter(resultActivity.adapter); + } + } + } + } + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (recordPresenter != null) { + recordPresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/PipelineManagerActivity.java b/app/src/main/java/com/casic/dcms/ui/PipelineManagerActivity.java new file mode 100644 index 0000000..fa77936 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/PipelineManagerActivity.java @@ -0,0 +1,27 @@ +package com.casic.dcms.ui; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; + +public class PipelineManagerActivity extends BaseActivity { + + @Override + public int initLayoutView() { + return R.layout.activity_pipe; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java index ac995d3..4959539 100644 --- a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java @@ -300,7 +300,8 @@ @Override public void onAMapLocationGet(AMapLocation aMapLocation) { if (aMapLocation != null) { - Point point = new Point(aMapLocation.getLongitude(), aMapLocation.getLatitude(), mapView.getSpatialReference()); + double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); mapView.setViewpointCenterAsync(point, 1200);//标注到指定经纬度并放大地图显示 //添加图片Marker addPictureMarker(point); @@ -311,11 +312,9 @@ ToastHelper.showToast("公厕标识不能为空", ToastHelper.WARING); return; } - double longitude = aMapLocation.getLongitude(); - double latitude = aMapLocation.getLatitude(); String cleanTime = TimeOrDateUtil.timestampToCompleteDate(System.currentTimeMillis()); cleanToiletPresenter.onReadyRetrofitRequest(toiletId, StringHelper.getUserId(), - String.valueOf(longitude), String.valueOf(latitude), cleanTime, imagePath, + String.valueOf(gcjToWgs[0]), String.valueOf(gcjToWgs[1]), cleanTime, imagePath, StringHelper.filterString(workContentView.getText().toString())); } } @@ -416,15 +415,18 @@ @Override public void obtainCleanResult(ActionResultBean resultBean) { -// Log.d(TAG, "obtainCleanResult: " + new Gson().toJson(resultBean)); if (resultBean.isSuccess()) { - new SignInDialog.Builder().setContext(this).setAddress(locationStreetView.getText().toString()).setOnDialogClickListener(new SignInDialog.OnDialogClickListener() { - @Override - public void onViewClick() { - startActivity(new Intent(context, CleanResultListActivity.class)); - PublicToiletActivity.this.finish(); - } - }).build().show(); + new SignInDialog.Builder() + .setContext(this) + .setTitle("保洁保卡成功") + .setAddress(locationStreetView.getText().toString()) + .setOnDialogClickListener(new SignInDialog.OnDialogClickListener() { + @Override + public void onViewClick() { + startActivity(new Intent(context, CleanResultListActivity.class)); + PublicToiletActivity.this.finish(); + } + }).build().show(); } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java index 03438b0..42d29a4 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java @@ -18,6 +18,7 @@ import com.casic.dcms.mvp.presenter.UserDataPresenterImpl; import com.casic.dcms.mvp.view.IHomePageView; import com.casic.dcms.mvp.view.IUserDataView; +import com.casic.dcms.ui.BridgeMaintainActivity; import com.casic.dcms.ui.CaseCheckActivity; import com.casic.dcms.ui.CaseHandleActivity; import com.casic.dcms.ui.CaseOnMapActivity; @@ -32,6 +33,7 @@ import com.casic.dcms.ui.OvertimeCaseActivity; import com.casic.dcms.ui.PackageHandleActivity; import com.casic.dcms.ui.PersonOnlineActivity; +import com.casic.dcms.ui.PipelineManagerActivity; import com.casic.dcms.ui.PublicToiletActivity; import com.casic.dcms.ui.UrgentCaseActivity; import com.casic.dcms.utils.StringHelper; @@ -161,6 +163,12 @@ case "部门处置": intent.setClass(context, DeptHandleActivity.class); break; + case "路桥养护": + intent.setClass(context, BridgeMaintainActivity.class); + break; + case "管网管理": + intent.setClass(context, PipelineManagerActivity.class); + break; default: break; } diff --git a/app/src/main/java/com/casic/dcms/utils/Constant.java b/app/src/main/java/com/casic/dcms/utils/Constant.java index d9c1d60..9bbbdb0 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -35,7 +35,8 @@ public static final String IP_KEY = "BASE_IP"; - public static final long FIVE_YEARS = 5L * 365 * 1000 * 60 * 60 * 24L; + public static final long FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L; + public static final long ONE_YEAR = 365 * 60 * 60 * 24 * 1000L; public static final long IMAGE_MINUS_SIZE = 100 * 1024; public static final long HTTP_TIMEOUT = 30L; public static final int PERMISSIONS_CODE = 999; diff --git a/app/src/main/java/com/casic/dcms/utils/LocationHelper.java b/app/src/main/java/com/casic/dcms/utils/LocationHelper.java index 8d95580..79aedbf 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocationHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/LocationHelper.java @@ -40,7 +40,6 @@ private static final double a = 6378245.0; // a: 卫星椭球坐标投影到平面地图坐标系的投影因子。 private static final double ee = 0.00669342162296594323; // ee: 椭球的偏心率平方。 - /** * 高德sdk定位 */ diff --git a/app/src/main/java/com/casic/dcms/utils/StringHelper.java b/app/src/main/java/com/casic/dcms/utils/StringHelper.java index 6bea75a..2faeae4 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -250,8 +250,12 @@ return R.drawable.ic_shangpu; case "部门处置": return R.drawable.ic_dept; + case "路桥养护": + return R.drawable.ic_bridge; + case "管网管理": + return R.drawable.ic_pipe; default: - return R.mipmap.app_logo; + return R.drawable.ic_default_icon; } } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index dc53815..f0be407 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -21,6 +21,8 @@ import com.casic.dcms.bean.HighEventBean; import com.casic.dcms.bean.HomePageBean; import com.casic.dcms.bean.LoginResultBean; +import com.casic.dcms.bean.MaintainContentBean; +import com.casic.dcms.bean.MaintainRecordBean; import com.casic.dcms.bean.NewVersionBean; import com.casic.dcms.bean.OnlinePersonBean; import com.casic.dcms.bean.OvertimeCaseBean; @@ -616,4 +618,42 @@ @POST("/mgr/simplelist") Observable obtainNextProcessPerson(@Header("token") String token, @Field("roleTips") String roleTips); + + /** + * 根据养护类型获取养护内容 + *

+ * http://111.198.10.15:11409/bridge/maintain/contentByType + */ + @FormUrlEncoded + @POST("/bridge/maintain/contentByType") + Observable obtainMaintainContent(@Header("token") String token, + @Field("type") String type); + + /** + * 桥梁新增打卡记录 + *

+ * http://111.198.10.15:11409/bridge/maintain/addApp + */ + @FormUrlEncoded + @POST("/bridge/maintain/addApp") + Observable addMaintainRecord(@Header("token") String token, + @Field("bridgeId") String bridgeId, + @Field("content") String content, + @Field("maintainTime") String maintainTime, + @Field("personId") String personId, + @Field("longitude") String longitude, + @Field("latitude") String latitude, + @Field("description") String description); + + /** + * 桥梁养护记录 + *

+ * http://111.198.10.15:11409/bridge/maintain/listPage?startDate=2021-06-21&endDate=2021-06-22 + */ + @GET("/bridge/maintain/listPage") + Observable obtainMaintainRecord(@Header("token") String token, + @Query("startDate") String beginDate, + @Query("endDate") String endDate, + @Query("limit") int limit, + @Query("offset") int offset); } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index 67e8da1..283354a 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -23,6 +23,8 @@ import com.casic.dcms.bean.HighEventBean; import com.casic.dcms.bean.HomePageBean; import com.casic.dcms.bean.LoginResultBean; +import com.casic.dcms.bean.MaintainContentBean; +import com.casic.dcms.bean.MaintainRecordBean; import com.casic.dcms.bean.NewVersionBean; import com.casic.dcms.bean.OnlinePersonBean; import com.casic.dcms.bean.OvertimeCaseBean; @@ -638,9 +640,41 @@ /** * 获取下级处置员 */ - public static Observable getProcessPerson() { + public static Observable getProcessPersonResult() { Retrofit retrofit = createRetrofit(); RetrofitService service = retrofit.create(RetrofitService.class); return service.obtainNextProcessPerson(AuthenticationHelper.getToken(), "process"); } + + /** + * 根据养护类型获取养护内容 + */ + public static Observable getMaintainContentResult(String type) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainMaintainContent(AuthenticationHelper.getToken(), type); + } + + /** + * 桥梁新增打卡记录 + */ + public static Observable getAddMaintainRecordResult(String bridgeId, String content, + String maintainTime, String personId, + String longitude, String latitude, + String description) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.addMaintainRecord(AuthenticationHelper.getToken(), bridgeId, content, maintainTime, + personId, longitude, latitude, description); + } + + /** + * 桥梁养护记录 + */ + public static Observable getMaintainRecordResult(String startDate, String endDate, int offset) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainMaintainRecord(AuthenticationHelper.getToken(), startDate, endDate, Constant.PAGE_LIMIT, + offset); + } } diff --git a/app/src/main/java/com/casic/dcms/widgets/SignInDialog.java b/app/src/main/java/com/casic/dcms/widgets/SignInDialog.java index ae61dd1..b96ff2f 100644 --- a/app/src/main/java/com/casic/dcms/widgets/SignInDialog.java +++ b/app/src/main/java/com/casic/dcms/widgets/SignInDialog.java @@ -2,13 +2,19 @@ import android.app.Dialog; import android.content.Context; +import android.graphics.Color; +import android.graphics.drawable.ColorDrawable; import android.os.Bundle; import android.text.TextUtils; import android.view.View; +import android.view.Window; +import android.view.WindowManager; import android.widget.TextView; import com.casic.dcms.R; +import com.casic.dcms.base.BaseApplication; import com.casic.dcms.utils.TimeOrDateUtil; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; import java.util.Timer; import java.util.TimerTask; @@ -16,11 +22,13 @@ public class SignInDialog extends Dialog implements View.OnClickListener { private static final String TAG = "SignInDialog"; + private String title; private String address; private OnDialogClickListener listener; private SignInDialog(Builder builder) { super(builder.mContext); + this.title = builder.title; this.address = builder.address; this.listener = builder.listener; } @@ -28,6 +36,16 @@ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + + //手动设置dialog宽度 + Window window = getWindow(); + window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); + window.getDecorView().setBackgroundColor(Color.TRANSPARENT); + WindowManager.LayoutParams params = window.getAttributes(); + params.width = QMUIDisplayHelper.dp2px(BaseApplication.getInstance(), 300); + params.height = WindowManager.LayoutParams.WRAP_CONTENT; + window.setAttributes(params); + setContentView(R.layout.dialog_sign_in); initView(); } @@ -41,6 +59,10 @@ clockView.post(() -> clockView.setText(systemTime)); } }, 0, 1000); + TextView optionTitleView = findViewById(R.id.optionTitleView); + if (!TextUtils.isEmpty(title)) { + optionTitleView.setText(title); + } TextView signInPlaceView = findViewById(R.id.signInPlaceView); if (!TextUtils.isEmpty(address)) { signInPlaceView.setText(address); @@ -62,6 +84,7 @@ public static class Builder { private Context mContext; + private String title; private String address; private OnDialogClickListener listener; @@ -70,6 +93,11 @@ return this; } + public Builder setTitle(String title) { + this.title = title; + return this; + } + public Builder setAddress(String address) { this.address = address; return this; diff --git a/app/src/main/res/drawable/ic_bridge.xml b/app/src/main/res/drawable/ic_bridge.xml new file mode 100644 index 0000000..7aa4637 --- /dev/null +++ b/app/src/main/res/drawable/ic_bridge.xml @@ -0,0 +1,11 @@ + + + diff --git a/app/src/main/res/drawable/ic_default_icon.xml b/app/src/main/res/drawable/ic_default_icon.xml new file mode 100644 index 0000000..3c41da5 --- /dev/null +++ b/app/src/main/res/drawable/ic_default_icon.xml @@ -0,0 +1,18 @@ + + + + + + diff --git a/app/src/main/res/drawable/ic_info.xml b/app/src/main/res/drawable/ic_info.xml new file mode 100644 index 0000000..6562ce3 --- /dev/null +++ b/app/src/main/res/drawable/ic_info.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/src/main/res/drawable/ic_pipe.xml b/app/src/main/res/drawable/ic_pipe.xml new file mode 100644 index 0000000..b005f98 --- /dev/null +++ b/app/src/main/res/drawable/ic_pipe.xml @@ -0,0 +1,20 @@ + + + + + + diff --git a/app/build.gradle b/app/build.gradle index 6f0b518..bcfdc0d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ applicationId "com.casic.dcms" minSdkVersion 21 targetSdkVersion 30 - versionCode 19 - versionName "v1.0.0.11" + versionCode 20 + versionName "v1.0.0.12" ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 68f46c9..3090a91 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -89,7 +89,10 @@ - + + + + { + + private Context context; + private List dataRows; + private LayoutInflater layoutInflater; + private QMUITipDialog.Builder dialogBuilder; + + public MaintainRecordAdapter(Context context, List dataRows) { + this.context = context; + this.dataRows = dataRows; + layoutInflater = LayoutInflater.from(context); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = layoutInflater.inflate(R.layout.item_maintain_recycleview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + holder.bindView(dataRows.get(position)); + } + + @Override + public int getItemCount() { + return dataRows.size(); + } + + class ItemViewHolder extends RecyclerView.ViewHolder { + + private TextView bridgeNameView; + private ImageView descriptionImageView; + private TextView maintainContentView; + private TextView maintainTimeView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + bridgeNameView = itemView.findViewById(R.id.bridgeNameView); + descriptionImageView = itemView.findViewById(R.id.descriptionImageView); + maintainContentView = itemView.findViewById(R.id.maintainContentView); + maintainTimeView = itemView.findViewById(R.id.maintainTimeView); + } + + void bindView(MaintainRecordBean.DataBean.RowsBean rowsBean) { + bridgeNameView.setText(rowsBean.getBridgeName()); + String description = rowsBean.getDescription(); + if (TextUtils.isEmpty(description)) { + descriptionImageView.setVisibility(View.GONE); + } else { + descriptionImageView.setVisibility(View.VISIBLE); + descriptionImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + QMUITipDialog tipDialog = new QMUITipDialog.Builder(context) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_NOTHING) + .setTipWord(description) + .create(); + tipDialog.show(); + descriptionImageView.postDelayed(new Runnable() { + @Override + public void run() { + tipDialog.dismiss(); + } + }, 2000); + } + }); + } + maintainContentView.setText(rowsBean.getContent()); + maintainTimeView.setText(rowsBean.getMaintainTimeStr()); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java b/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java new file mode 100644 index 0000000..ded4fe1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java @@ -0,0 +1,41 @@ +package com.casic.dcms.bean; + +public class MaintainContentBean { + + private int code; + private String data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java b/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java new file mode 100644 index 0000000..2beea74 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java @@ -0,0 +1,301 @@ +package com.casic.dcms.bean; + +import java.util.List; + +public class MaintainRecordBean { + + private int code; + private DataBean data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + + private int total; + private List rows; + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public static class RowsBean { + /** + * bridgeId : 1 + * bridgeName : 永胜桥 + * category : 桥梁 + * code : 1624359572304 + * content : 日常养护,无异常 + * deptid : 1344110695992258561 + * description : + * id : 1407292162033041409 + * latitude : 39.914705918747295 + * longitude : 116.26295490330527 + * maintainTime : 2021-06-22 00:00:00 + * maintainTimeStr : 2021-06-22 + * name : + * personId : 1344179277212151809 + * personName : + * phone : + * status : + * statusName : + * tender : + * tenderCompany : + * ts : 2021-06-22 + * type : + * typeName : + */ + + private String bridgeId; + private String bridgeName; + private String category; + private String code; + private String content; + private String deptid; + private String description; + private String id; + private String latitude; + private String longitude; + private String maintainTime; + private String maintainTimeStr; + private String name; + private String personId; + private String personName; + private String phone; + private String status; + private String statusName; + private String tender; + private String tenderCompany; + private String ts; + private String type; + private String typeName; + + public String getBridgeId() { + return bridgeId; + } + + public void setBridgeId(String bridgeId) { + this.bridgeId = bridgeId; + } + + public String getBridgeName() { + return bridgeName; + } + + public void setBridgeName(String bridgeName) { + this.bridgeName = bridgeName; + } + + public String getCategory() { + return category; + } + + public void setCategory(String category) { + this.category = category; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLatitude() { + return latitude; + } + + public void setLatitude(String latitude) { + this.latitude = latitude; + } + + public String getLongitude() { + return longitude; + } + + public void setLongitude(String longitude) { + this.longitude = longitude; + } + + public String getMaintainTime() { + return maintainTime; + } + + public void setMaintainTime(String maintainTime) { + this.maintainTime = maintainTime; + } + + public String getMaintainTimeStr() { + return maintainTimeStr; + } + + public void setMaintainTimeStr(String maintainTimeStr) { + this.maintainTimeStr = maintainTimeStr; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPersonId() { + return personId; + } + + public void setPersonId(String personId) { + this.personId = personId; + } + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + 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 getTender() { + return tender; + } + + public void setTender(String tender) { + this.tender = tender; + } + + public String getTenderCompany() { + return tenderCompany; + } + + public void setTenderCompany(String tenderCompany) { + this.tenderCompany = tenderCompany; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getTypeName() { + return typeName; + } + + public void setTypeName(String typeName) { + this.typeName = typeName; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java new file mode 100644 index 0000000..4f7a588 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IMaintainRecordModel { + Subscription sendRetrofitRequest(String startDate, String endDate, int offset); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java new file mode 100644 index 0000000..dce3f91 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java @@ -0,0 +1,8 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ISubmitMaintainModel { + Subscription sendRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/MaintainRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/MaintainRecordModelImpl.java new file mode 100644 index 0000000..35fd486 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/MaintainRecordModelImpl.java @@ -0,0 +1,50 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.MaintainRecordBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class MaintainRecordModelImpl implements IMaintainRecordModel { + + private OnGetRecordListener listener; + + public MaintainRecordModelImpl(OnGetRecordListener recordListener) { + this.listener = recordListener; + } + + public interface OnGetRecordListener { + void onSuccess(MaintainRecordBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String startDate, String endDate, int offset) { + Observable observable = RetrofitServiceManager.getMaintainRecordResult(startDate, endDate, offset); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (e.getCause() != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(MaintainRecordBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java index 06f6fb4..9e2666d 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java @@ -29,7 +29,7 @@ @Override public Subscription sendRetrofitRequest() { - Observable observable = RetrofitServiceManager.getProcessPerson(); + Observable observable = RetrofitServiceManager.getProcessPersonResult(); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/SubmitMaintainModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/SubmitMaintainModelImpl.java new file mode 100644 index 0000000..2924fbe --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/SubmitMaintainModelImpl.java @@ -0,0 +1,52 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class SubmitMaintainModelImpl implements ISubmitMaintainModel { + + private OnSubmitListener listener; + + public SubmitMaintainModelImpl(OnSubmitListener submitListener) { + this.listener = submitListener; + } + + public interface OnSubmitListener { + void onSuccess(ActionResultBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description) { + Observable observable = RetrofitServiceManager.getAddMaintainRecordResult(bridgeId, + content, maintainTime, personId, longitude, latitude, description); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (e.getCause() != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(ActionResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IMaintainRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IMaintainRecordPresenter.java new file mode 100644 index 0000000..938a484 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IMaintainRecordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IMaintainRecordPresenter { + void onReadyRetrofitRequest(String startDate, String endDate, int offset); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ISubmitMaintainPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ISubmitMaintainPresenter.java new file mode 100644 index 0000000..511e717 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ISubmitMaintainPresenter.java @@ -0,0 +1,8 @@ +package com.casic.dcms.mvp.presenter; + +public interface ISubmitMaintainPresenter { + void onReadyRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/MaintainRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/MaintainRecordPresenterImpl.java new file mode 100644 index 0000000..fd99e30 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/MaintainRecordPresenterImpl.java @@ -0,0 +1,39 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.MaintainRecordBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.MaintainRecordModelImpl; +import com.casic.dcms.mvp.view.IMaintainRecordView; + +public class MaintainRecordPresenterImpl extends BasePresenter implements IMaintainRecordPresenter, MaintainRecordModelImpl.OnGetRecordListener { + + private IMaintainRecordView view; + private MaintainRecordModelImpl model; + + public MaintainRecordPresenterImpl(IMaintainRecordView cleanToiletRecordView) { + this.view = cleanToiletRecordView; + model = new MaintainRecordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String startDate, String endDate, int offset) { + view.showProgress(); + addSubscription(model.sendRetrofitRequest(startDate, endDate, offset)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(MaintainRecordBean result) { + view.hideProgress(); + view.obtainRecordResult(result); + } + + @Override + public void onFailure(Throwable throwable) { + view.hideProgress(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/SubmitMaintainPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/SubmitMaintainPresenterImpl.java new file mode 100644 index 0000000..7722427 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/SubmitMaintainPresenterImpl.java @@ -0,0 +1,42 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.SubmitMaintainModelImpl; +import com.casic.dcms.mvp.view.ISubmitMaintainView; + +public class SubmitMaintainPresenterImpl extends BasePresenter implements ISubmitMaintainPresenter, SubmitMaintainModelImpl.OnSubmitListener { + + private ISubmitMaintainView view; + private SubmitMaintainModelImpl actionModel; + + public SubmitMaintainPresenterImpl(ISubmitMaintainView submitCaseView) { + this.view = submitCaseView; + actionModel = new SubmitMaintainModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description) { + view.showProgress(); + addSubscription(actionModel.sendRetrofitRequest(bridgeId, content, maintainTime, personId, longitude, + latitude, description)); + } + + @Override + public void onSuccess(ActionResultBean resultBean) { + view.hideProgress(); + view.obtainSubmitResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + view.hideProgress(); + view.obtainDataFail(); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IMaintainRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/IMaintainRecordView.java new file mode 100644 index 0000000..8ff5189 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IMaintainRecordView.java @@ -0,0 +1,11 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.MaintainRecordBean; + +public interface IMaintainRecordView { + void obtainRecordResult(MaintainRecordBean resultBean); + + void showProgress(); + + void hideProgress(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ISubmitMaintainView.java b/app/src/main/java/com/casic/dcms/mvp/view/ISubmitMaintainView.java new file mode 100644 index 0000000..75a0629 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/ISubmitMaintainView.java @@ -0,0 +1,13 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.ActionResultBean; + +public interface ISubmitMaintainView { + void showProgress(); + + void hideProgress(); + + void obtainSubmitResult(ActionResultBean resultBean); + + void obtainDataFail(); +} diff --git a/app/src/main/java/com/casic/dcms/ui/BridgeMaintainActivity.java b/app/src/main/java/com/casic/dcms/ui/BridgeMaintainActivity.java new file mode 100644 index 0000000..84b0eef --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/BridgeMaintainActivity.java @@ -0,0 +1,239 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.content.Intent; +import android.location.Location; +import android.text.TextUtils; +import android.view.View; +import android.widget.EditText; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.amap.api.services.core.LatLonPoint; +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.mvp.presenter.SubmitMaintainPresenterImpl; +import com.casic.dcms.mvp.view.ISubmitMaintainView; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; +import com.casic.dcms.utils.SaveKeyValues; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.utils.callback.IAddressListener; +import com.casic.dcms.utils.callback.ILocationListener; +import com.casic.dcms.widgets.SignInDialog; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.util.Timer; +import java.util.TimerTask; + +import butterknife.BindView; +import butterknife.OnClick; + +public class BridgeMaintainActivity extends BaseActivity implements View.OnClickListener, ISubmitMaintainView { + + private static final String TAG = "BridgeMaintainActivity"; + private Context context = this; + @BindView(R.id.topLayout) + QMUITopBarLayout topLayout; + @BindView(R.id.bridgeNameView) + TextView bridgeNameView; + @BindView(R.id.maintainView) + TextView maintainView; + @BindView(R.id.maintainDateView) + TextView maintainDateView; + @BindView(R.id.liablePersonView) + TextView liablePersonView; + @BindView(R.id.submitButton) + QMUIRoundButton submitButton; + //以下非必填 + @BindView(R.id.remarksView) + EditText remarksView; + + private String bridgeId = ""; + private SubmitMaintainPresenterImpl submitMaintainPresenter; + + @Override + public int initLayoutView() { + return R.layout.activity_bridge; + } + + @Override + protected void setupTopBarLayout() { + topLayout.setTitle("路桥养护").setTextColor(ContextCompat.getColor(this, R.color.white)); + topLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + topLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + topLayout.addRightImageButton(R.drawable.ic_more, 2).setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + startActivity(new Intent(context, MaintainRecordActivity.class)); + } + }); + } + + @Override + public void initData() { + submitMaintainPresenter = new SubmitMaintainPresenterImpl(this); + } + + @Override + public void initEvent() { + submitButton.setChangeAlphaWhenPress(true); + liablePersonView.setText(StringHelper.getUserAccount()); + liablePersonView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); + + new Timer().schedule(new TimerTask() { + @Override + public void run() { + String systemDate = TimeOrDateUtil.timestampToDate(System.currentTimeMillis()); + maintainDateView.post(new Runnable() { + @Override + public void run() { + maintainDateView.setText(systemDate); + maintainDateView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); + } + }); + } + }, 0, 1000); + } + + @OnClick({R.id.bridgeLayout, R.id.maintainContentLayout, R.id.submitButton}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.bridgeLayout: + new QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("选择桥梁") + .addItem("永胜桥") + .addItem("黄洲桥") + .addItem("光明桥") + .setGravityCenter(true) + .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + + bridgeId = String.valueOf((1 + position)); + bridgeNameView.setText(tag); + bridgeNameView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); + } + }).build().show(); + break; + case R.id.maintainContentLayout: + new QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("养护内容") + .addItem("日常养护,无异常") + .addItem("清除表面污垢") + .addItem("修补混凝土空洞、破损、剥落和表面风化及裂缝") + .addItem("清除暴露钢筋的锈渍、恢复保护层") + .addItem("处理各种横、纵向构件的开裂、开焊和锈蚀") + .setGravityCenter(true) + .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + + maintainView.setText(tag); + maintainView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); + } + }).build().show(); + break; + case R.id.submitButton: + //获取定位信息 + LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + + } + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + if (aMapLocation != null) { + if (TextUtils.isEmpty(bridgeId)) { + ToastHelper.showToast("请先选择养护的桥梁", ToastHelper.WARING); + return; + } + String maintainContent = maintainView.getText().toString(); + if (TextUtils.isEmpty(maintainContent)) { + ToastHelper.showToast("请选择养护的内容", ToastHelper.WARING); + return; + } + + double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + LatLonPoint latLonPoint = new LatLonPoint(gcjToWgs[1], gcjToWgs[0]); + LocationHelper.antiCodingLocation(context, latLonPoint, new IAddressListener() { + @Override + public void onGetAddress(String address) { + SaveKeyValues.putValue("maintainAddress", address); + } + }); + //提交养护记录 + submitMaintainPresenter.onReadyRetrofitRequest(bridgeId, maintainContent, + maintainDateView.getText().toString(), + StringHelper.getUserId(), String.valueOf(gcjToWgs[0]), + String.valueOf(gcjToWgs[1]), + StringHelper.filterString(remarksView.getText().toString())); + } else { + ToastHelper.showToast("当前信号较弱,无法提交养护记录", ToastHelper.WARING); + } + } + }, true); + break; + default: + throw new IllegalStateException("Unexpected value: " + v.getId()); + } + } + + @Override + public void showProgress() { + OtherUtils.showLoadingDialog(this, "养护记录签到中,请稍后"); + } + + @Override + public void hideProgress() { + OtherUtils.dismissLoadingDialog(); + } + + @Override + public void obtainSubmitResult(ActionResultBean resultBean) { + String maintainAddress = (String) SaveKeyValues.getValue("maintainAddress", ""); + if (resultBean.isSuccess()) { + new SignInDialog.Builder() + .setContext(this) + .setTitle("桥梁养护记录提交成功") + .setAddress(maintainAddress.equals("") ? "详细位置解析失败" : maintainAddress) + .setOnDialogClickListener(new SignInDialog.OnDialogClickListener() { + @Override + public void onViewClick() { + startActivity(new Intent(context, MaintainRecordActivity.class)); + finish(); + } + }).build().show(); + } + } + + @Override + public void obtainDataFail() { + ToastHelper.showToast("操作失败", ToastHelper.ERROR); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (submitMaintainPresenter != null) { + submitMaintainPresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java index 7221e95..381b704 100644 --- a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java @@ -25,6 +25,7 @@ import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.datepicker.DatePopupWindow; +import com.qmuiteam.qmui.widget.QMUIEmptyView; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; @@ -38,8 +39,8 @@ public class CleanResultListActivity extends BaseCaseActivity implements ICleanToiletRecordView { - // @BindView(R.id.emptyView) -// QMUIEmptyView emptyView; + @BindView(R.id.emptyView) + QMUIEmptyView emptyView; @BindView(R.id.dateView) TextView dateView; @BindView(R.id.calendarView) @@ -126,7 +127,6 @@ @Override public void obtainCleanRecordResult(CleanRecordBean resultBean) { -// Log.d("TAG", "obtainCleanRecordResult: " + new Gson().toJson(resultBean)); if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); if (isRefresh) { @@ -175,9 +175,9 @@ } else { //首次加载数据 if (resultActivity.dataBeans.size() == 0) { -// resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); + resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); } else { -// resultActivity.emptyView.hide(); + resultActivity.emptyView.hide(); resultActivity.adapter = new RecordListAdapter(resultActivity, resultActivity.dataBeans); resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); diff --git a/app/src/main/java/com/casic/dcms/ui/MaintainRecordActivity.java b/app/src/main/java/com/casic/dcms/ui/MaintainRecordActivity.java new file mode 100644 index 0000000..05c41c9 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/MaintainRecordActivity.java @@ -0,0 +1,194 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.content.Intent; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.MaintainRecordAdapter; +import com.casic.dcms.base.BaseCaseActivity; +import com.casic.dcms.bean.MaintainRecordBean; +import com.casic.dcms.mvp.presenter.MaintainRecordPresenterImpl; +import com.casic.dcms.mvp.view.IMaintainRecordView; +import com.casic.dcms.utils.CalendarUtil; +import com.casic.dcms.utils.OtherUtils; +import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.datepicker.DatePopupWindow; +import com.qmuiteam.qmui.widget.QMUIEmptyView; +import com.scwang.smartrefresh.layout.SmartRefreshLayout; +import com.scwang.smartrefresh.layout.api.RefreshLayout; +import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; +import com.scwang.smartrefresh.layout.listener.OnRefreshListener; + +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class MaintainRecordActivity extends BaseCaseActivity implements IMaintainRecordView { + + @BindView(R.id.emptyView) + QMUIEmptyView emptyView; + @BindView(R.id.dateView) + TextView dateView; + @BindView(R.id.calendarView) + ImageView calendarView; + @BindView(R.id.refreshLayout) + SmartRefreshLayout refreshLayout; + @BindView(R.id.recordRecyclerView) + RecyclerView recordRecyclerView; + + private Context context = this; + private int pageIndex = 1; + private boolean isRefresh, isLoadMore = false; + private WeakReferenceHandler weakReferenceHandler; + private List dataBeans = new ArrayList<>(); + private MaintainRecordPresenterImpl recordPresenter; + private MaintainRecordAdapter adapter; + private int startGroup = -1; + private int endGroup = -1; + private int startChild = -1; + private int endChild = -1; + + @Override + protected String setTitleName() { + return "桥梁养护记录"; + } + + @Override + public int initLayoutView() { + return R.layout.activity_maintain_record; + } + + @Override + public void initData() { + weakReferenceHandler = new WeakReferenceHandler(this); + recordPresenter = new MaintainRecordPresenterImpl(this); + recordPresenter.onReadyRetrofitRequest("", "", pageIndex); + } + + @Override + public void initEvent() { + calendarView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + new DatePopupWindow + .Builder(MaintainRecordActivity.this, CalendarUtil.obtainLastTwoMonth(), v)//初始化 + .setInitSelect(startGroup, startChild, endGroup, endChild)//设置上一次选中的区间状态 + .setInitDay(true)//默认为true,UI内容为共几天、开始、结束;当为false时,UI内容为共几晚、入住、离开 + .setDateOnClickListener(new DatePopupWindow.DateOnClickListener() {//设置监听 + //点击完成按钮后回调返回方法 + @Override + public void getDate(String startDate, String endDate, int startGroupPosition, int + startChildPosition, int endGroupPosition, int endChildPosition) { + startGroup = startGroupPosition;//开始月份位置 + startChild = startChildPosition;//开始对应月份中日的位置 + endGroup = endGroupPosition;//结束月份位置 + endChild = endChildPosition;//结束对应月份中日的位置 + dateView.setText(startDate + "~" + endDate); + recordPresenter.onReadyRetrofitRequest(startDate, endDate, pageIndex); + } + }).builder(); + } + }); + refreshLayout.setOnRefreshListener(new OnRefreshListener() { + @Override + public void onRefresh(@NonNull final RefreshLayout refreshLayout) { + isRefresh = true; + //刷新之后页码重置 + pageIndex = 1; + recordPresenter.onReadyRetrofitRequest("", "", pageIndex); + } + }); + refreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() { + @Override + public void onLoadMore(@NonNull final RefreshLayout refreshLayout) { + isLoadMore = true; + pageIndex++; + recordPresenter.onReadyRetrofitRequest("", "", pageIndex); + } + }); + } + + @Override + public void obtainRecordResult(MaintainRecordBean resultBean) { + if (resultBean.isSuccess()) { + List dataRows = resultBean.getData().getRows(); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + ToastHelper.showToast("到底了,别拉了", ToastHelper.INFO); + } + dataBeans.addAll(dataRows); + refreshLayout.finishLoadMore(); + isLoadMore = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(20210622); + } + } + + @Override + public void showProgress() { + OtherUtils.showLoadingDialog(this, "查询记录中,请稍后"); + } + + @Override + public void hideProgress() { + OtherUtils.dismissLoadingDialog(); + } + + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(MaintainRecordActivity activity) { + reference = new WeakReference<>(activity); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + MaintainRecordActivity resultActivity = reference.get(); + if (msg.what == 20210622) { + if (resultActivity.isRefresh || resultActivity.isLoadMore) { + resultActivity.adapter.notifyDataSetChanged(); + } else { + //首次加载数据 + if (resultActivity.dataBeans.size() == 0) { + resultActivity.emptyView.show("抱歉,没有查到相关养护记录", null); + } else { + resultActivity.emptyView.hide(); + resultActivity.adapter = new MaintainRecordAdapter(resultActivity, resultActivity.dataBeans); + resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); + resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); + resultActivity.recordRecyclerView.setAdapter(resultActivity.adapter); + } + } + } + } + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (recordPresenter != null) { + recordPresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/PipelineManagerActivity.java b/app/src/main/java/com/casic/dcms/ui/PipelineManagerActivity.java new file mode 100644 index 0000000..fa77936 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/PipelineManagerActivity.java @@ -0,0 +1,27 @@ +package com.casic.dcms.ui; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; + +public class PipelineManagerActivity extends BaseActivity { + + @Override + public int initLayoutView() { + return R.layout.activity_pipe; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java index ac995d3..4959539 100644 --- a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java @@ -300,7 +300,8 @@ @Override public void onAMapLocationGet(AMapLocation aMapLocation) { if (aMapLocation != null) { - Point point = new Point(aMapLocation.getLongitude(), aMapLocation.getLatitude(), mapView.getSpatialReference()); + double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); mapView.setViewpointCenterAsync(point, 1200);//标注到指定经纬度并放大地图显示 //添加图片Marker addPictureMarker(point); @@ -311,11 +312,9 @@ ToastHelper.showToast("公厕标识不能为空", ToastHelper.WARING); return; } - double longitude = aMapLocation.getLongitude(); - double latitude = aMapLocation.getLatitude(); String cleanTime = TimeOrDateUtil.timestampToCompleteDate(System.currentTimeMillis()); cleanToiletPresenter.onReadyRetrofitRequest(toiletId, StringHelper.getUserId(), - String.valueOf(longitude), String.valueOf(latitude), cleanTime, imagePath, + String.valueOf(gcjToWgs[0]), String.valueOf(gcjToWgs[1]), cleanTime, imagePath, StringHelper.filterString(workContentView.getText().toString())); } } @@ -416,15 +415,18 @@ @Override public void obtainCleanResult(ActionResultBean resultBean) { -// Log.d(TAG, "obtainCleanResult: " + new Gson().toJson(resultBean)); if (resultBean.isSuccess()) { - new SignInDialog.Builder().setContext(this).setAddress(locationStreetView.getText().toString()).setOnDialogClickListener(new SignInDialog.OnDialogClickListener() { - @Override - public void onViewClick() { - startActivity(new Intent(context, CleanResultListActivity.class)); - PublicToiletActivity.this.finish(); - } - }).build().show(); + new SignInDialog.Builder() + .setContext(this) + .setTitle("保洁保卡成功") + .setAddress(locationStreetView.getText().toString()) + .setOnDialogClickListener(new SignInDialog.OnDialogClickListener() { + @Override + public void onViewClick() { + startActivity(new Intent(context, CleanResultListActivity.class)); + PublicToiletActivity.this.finish(); + } + }).build().show(); } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java index 03438b0..42d29a4 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java @@ -18,6 +18,7 @@ import com.casic.dcms.mvp.presenter.UserDataPresenterImpl; import com.casic.dcms.mvp.view.IHomePageView; import com.casic.dcms.mvp.view.IUserDataView; +import com.casic.dcms.ui.BridgeMaintainActivity; import com.casic.dcms.ui.CaseCheckActivity; import com.casic.dcms.ui.CaseHandleActivity; import com.casic.dcms.ui.CaseOnMapActivity; @@ -32,6 +33,7 @@ import com.casic.dcms.ui.OvertimeCaseActivity; import com.casic.dcms.ui.PackageHandleActivity; import com.casic.dcms.ui.PersonOnlineActivity; +import com.casic.dcms.ui.PipelineManagerActivity; import com.casic.dcms.ui.PublicToiletActivity; import com.casic.dcms.ui.UrgentCaseActivity; import com.casic.dcms.utils.StringHelper; @@ -161,6 +163,12 @@ case "部门处置": intent.setClass(context, DeptHandleActivity.class); break; + case "路桥养护": + intent.setClass(context, BridgeMaintainActivity.class); + break; + case "管网管理": + intent.setClass(context, PipelineManagerActivity.class); + break; default: break; } diff --git a/app/src/main/java/com/casic/dcms/utils/Constant.java b/app/src/main/java/com/casic/dcms/utils/Constant.java index d9c1d60..9bbbdb0 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -35,7 +35,8 @@ public static final String IP_KEY = "BASE_IP"; - public static final long FIVE_YEARS = 5L * 365 * 1000 * 60 * 60 * 24L; + public static final long FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L; + public static final long ONE_YEAR = 365 * 60 * 60 * 24 * 1000L; public static final long IMAGE_MINUS_SIZE = 100 * 1024; public static final long HTTP_TIMEOUT = 30L; public static final int PERMISSIONS_CODE = 999; diff --git a/app/src/main/java/com/casic/dcms/utils/LocationHelper.java b/app/src/main/java/com/casic/dcms/utils/LocationHelper.java index 8d95580..79aedbf 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocationHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/LocationHelper.java @@ -40,7 +40,6 @@ private static final double a = 6378245.0; // a: 卫星椭球坐标投影到平面地图坐标系的投影因子。 private static final double ee = 0.00669342162296594323; // ee: 椭球的偏心率平方。 - /** * 高德sdk定位 */ diff --git a/app/src/main/java/com/casic/dcms/utils/StringHelper.java b/app/src/main/java/com/casic/dcms/utils/StringHelper.java index 6bea75a..2faeae4 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -250,8 +250,12 @@ return R.drawable.ic_shangpu; case "部门处置": return R.drawable.ic_dept; + case "路桥养护": + return R.drawable.ic_bridge; + case "管网管理": + return R.drawable.ic_pipe; default: - return R.mipmap.app_logo; + return R.drawable.ic_default_icon; } } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index dc53815..f0be407 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -21,6 +21,8 @@ import com.casic.dcms.bean.HighEventBean; import com.casic.dcms.bean.HomePageBean; import com.casic.dcms.bean.LoginResultBean; +import com.casic.dcms.bean.MaintainContentBean; +import com.casic.dcms.bean.MaintainRecordBean; import com.casic.dcms.bean.NewVersionBean; import com.casic.dcms.bean.OnlinePersonBean; import com.casic.dcms.bean.OvertimeCaseBean; @@ -616,4 +618,42 @@ @POST("/mgr/simplelist") Observable obtainNextProcessPerson(@Header("token") String token, @Field("roleTips") String roleTips); + + /** + * 根据养护类型获取养护内容 + *

+ * http://111.198.10.15:11409/bridge/maintain/contentByType + */ + @FormUrlEncoded + @POST("/bridge/maintain/contentByType") + Observable obtainMaintainContent(@Header("token") String token, + @Field("type") String type); + + /** + * 桥梁新增打卡记录 + *

+ * http://111.198.10.15:11409/bridge/maintain/addApp + */ + @FormUrlEncoded + @POST("/bridge/maintain/addApp") + Observable addMaintainRecord(@Header("token") String token, + @Field("bridgeId") String bridgeId, + @Field("content") String content, + @Field("maintainTime") String maintainTime, + @Field("personId") String personId, + @Field("longitude") String longitude, + @Field("latitude") String latitude, + @Field("description") String description); + + /** + * 桥梁养护记录 + *

+ * http://111.198.10.15:11409/bridge/maintain/listPage?startDate=2021-06-21&endDate=2021-06-22 + */ + @GET("/bridge/maintain/listPage") + Observable obtainMaintainRecord(@Header("token") String token, + @Query("startDate") String beginDate, + @Query("endDate") String endDate, + @Query("limit") int limit, + @Query("offset") int offset); } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index 67e8da1..283354a 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -23,6 +23,8 @@ import com.casic.dcms.bean.HighEventBean; import com.casic.dcms.bean.HomePageBean; import com.casic.dcms.bean.LoginResultBean; +import com.casic.dcms.bean.MaintainContentBean; +import com.casic.dcms.bean.MaintainRecordBean; import com.casic.dcms.bean.NewVersionBean; import com.casic.dcms.bean.OnlinePersonBean; import com.casic.dcms.bean.OvertimeCaseBean; @@ -638,9 +640,41 @@ /** * 获取下级处置员 */ - public static Observable getProcessPerson() { + public static Observable getProcessPersonResult() { Retrofit retrofit = createRetrofit(); RetrofitService service = retrofit.create(RetrofitService.class); return service.obtainNextProcessPerson(AuthenticationHelper.getToken(), "process"); } + + /** + * 根据养护类型获取养护内容 + */ + public static Observable getMaintainContentResult(String type) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainMaintainContent(AuthenticationHelper.getToken(), type); + } + + /** + * 桥梁新增打卡记录 + */ + public static Observable getAddMaintainRecordResult(String bridgeId, String content, + String maintainTime, String personId, + String longitude, String latitude, + String description) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.addMaintainRecord(AuthenticationHelper.getToken(), bridgeId, content, maintainTime, + personId, longitude, latitude, description); + } + + /** + * 桥梁养护记录 + */ + public static Observable getMaintainRecordResult(String startDate, String endDate, int offset) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainMaintainRecord(AuthenticationHelper.getToken(), startDate, endDate, Constant.PAGE_LIMIT, + offset); + } } diff --git a/app/src/main/java/com/casic/dcms/widgets/SignInDialog.java b/app/src/main/java/com/casic/dcms/widgets/SignInDialog.java index ae61dd1..b96ff2f 100644 --- a/app/src/main/java/com/casic/dcms/widgets/SignInDialog.java +++ b/app/src/main/java/com/casic/dcms/widgets/SignInDialog.java @@ -2,13 +2,19 @@ import android.app.Dialog; import android.content.Context; +import android.graphics.Color; +import android.graphics.drawable.ColorDrawable; import android.os.Bundle; import android.text.TextUtils; import android.view.View; +import android.view.Window; +import android.view.WindowManager; import android.widget.TextView; import com.casic.dcms.R; +import com.casic.dcms.base.BaseApplication; import com.casic.dcms.utils.TimeOrDateUtil; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; import java.util.Timer; import java.util.TimerTask; @@ -16,11 +22,13 @@ public class SignInDialog extends Dialog implements View.OnClickListener { private static final String TAG = "SignInDialog"; + private String title; private String address; private OnDialogClickListener listener; private SignInDialog(Builder builder) { super(builder.mContext); + this.title = builder.title; this.address = builder.address; this.listener = builder.listener; } @@ -28,6 +36,16 @@ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + + //手动设置dialog宽度 + Window window = getWindow(); + window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); + window.getDecorView().setBackgroundColor(Color.TRANSPARENT); + WindowManager.LayoutParams params = window.getAttributes(); + params.width = QMUIDisplayHelper.dp2px(BaseApplication.getInstance(), 300); + params.height = WindowManager.LayoutParams.WRAP_CONTENT; + window.setAttributes(params); + setContentView(R.layout.dialog_sign_in); initView(); } @@ -41,6 +59,10 @@ clockView.post(() -> clockView.setText(systemTime)); } }, 0, 1000); + TextView optionTitleView = findViewById(R.id.optionTitleView); + if (!TextUtils.isEmpty(title)) { + optionTitleView.setText(title); + } TextView signInPlaceView = findViewById(R.id.signInPlaceView); if (!TextUtils.isEmpty(address)) { signInPlaceView.setText(address); @@ -62,6 +84,7 @@ public static class Builder { private Context mContext; + private String title; private String address; private OnDialogClickListener listener; @@ -70,6 +93,11 @@ return this; } + public Builder setTitle(String title) { + this.title = title; + return this; + } + public Builder setAddress(String address) { this.address = address; return this; diff --git a/app/src/main/res/drawable/ic_bridge.xml b/app/src/main/res/drawable/ic_bridge.xml new file mode 100644 index 0000000..7aa4637 --- /dev/null +++ b/app/src/main/res/drawable/ic_bridge.xml @@ -0,0 +1,11 @@ + + + diff --git a/app/src/main/res/drawable/ic_default_icon.xml b/app/src/main/res/drawable/ic_default_icon.xml new file mode 100644 index 0000000..3c41da5 --- /dev/null +++ b/app/src/main/res/drawable/ic_default_icon.xml @@ -0,0 +1,18 @@ + + + + + + diff --git a/app/src/main/res/drawable/ic_info.xml b/app/src/main/res/drawable/ic_info.xml new file mode 100644 index 0000000..6562ce3 --- /dev/null +++ b/app/src/main/res/drawable/ic_info.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/src/main/res/drawable/ic_pipe.xml b/app/src/main/res/drawable/ic_pipe.xml new file mode 100644 index 0000000..b005f98 --- /dev/null +++ b/app/src/main/res/drawable/ic_pipe.xml @@ -0,0 +1,20 @@ + + + + + + diff --git a/app/src/main/res/layout/activity_bridge.xml b/app/src/main/res/layout/activity_bridge.xml new file mode 100644 index 0000000..5367773 --- /dev/null +++ b/app/src/main/res/layout/activity_bridge.xml @@ -0,0 +1,177 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 6f0b518..bcfdc0d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ applicationId "com.casic.dcms" minSdkVersion 21 targetSdkVersion 30 - versionCode 19 - versionName "v1.0.0.11" + versionCode 20 + versionName "v1.0.0.12" ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 68f46c9..3090a91 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -89,7 +89,10 @@ - + + + + { + + private Context context; + private List dataRows; + private LayoutInflater layoutInflater; + private QMUITipDialog.Builder dialogBuilder; + + public MaintainRecordAdapter(Context context, List dataRows) { + this.context = context; + this.dataRows = dataRows; + layoutInflater = LayoutInflater.from(context); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = layoutInflater.inflate(R.layout.item_maintain_recycleview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + holder.bindView(dataRows.get(position)); + } + + @Override + public int getItemCount() { + return dataRows.size(); + } + + class ItemViewHolder extends RecyclerView.ViewHolder { + + private TextView bridgeNameView; + private ImageView descriptionImageView; + private TextView maintainContentView; + private TextView maintainTimeView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + bridgeNameView = itemView.findViewById(R.id.bridgeNameView); + descriptionImageView = itemView.findViewById(R.id.descriptionImageView); + maintainContentView = itemView.findViewById(R.id.maintainContentView); + maintainTimeView = itemView.findViewById(R.id.maintainTimeView); + } + + void bindView(MaintainRecordBean.DataBean.RowsBean rowsBean) { + bridgeNameView.setText(rowsBean.getBridgeName()); + String description = rowsBean.getDescription(); + if (TextUtils.isEmpty(description)) { + descriptionImageView.setVisibility(View.GONE); + } else { + descriptionImageView.setVisibility(View.VISIBLE); + descriptionImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + QMUITipDialog tipDialog = new QMUITipDialog.Builder(context) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_NOTHING) + .setTipWord(description) + .create(); + tipDialog.show(); + descriptionImageView.postDelayed(new Runnable() { + @Override + public void run() { + tipDialog.dismiss(); + } + }, 2000); + } + }); + } + maintainContentView.setText(rowsBean.getContent()); + maintainTimeView.setText(rowsBean.getMaintainTimeStr()); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java b/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java new file mode 100644 index 0000000..ded4fe1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java @@ -0,0 +1,41 @@ +package com.casic.dcms.bean; + +public class MaintainContentBean { + + private int code; + private String data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java b/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java new file mode 100644 index 0000000..2beea74 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java @@ -0,0 +1,301 @@ +package com.casic.dcms.bean; + +import java.util.List; + +public class MaintainRecordBean { + + private int code; + private DataBean data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + + private int total; + private List rows; + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public static class RowsBean { + /** + * bridgeId : 1 + * bridgeName : 永胜桥 + * category : 桥梁 + * code : 1624359572304 + * content : 日常养护,无异常 + * deptid : 1344110695992258561 + * description : + * id : 1407292162033041409 + * latitude : 39.914705918747295 + * longitude : 116.26295490330527 + * maintainTime : 2021-06-22 00:00:00 + * maintainTimeStr : 2021-06-22 + * name : + * personId : 1344179277212151809 + * personName : + * phone : + * status : + * statusName : + * tender : + * tenderCompany : + * ts : 2021-06-22 + * type : + * typeName : + */ + + private String bridgeId; + private String bridgeName; + private String category; + private String code; + private String content; + private String deptid; + private String description; + private String id; + private String latitude; + private String longitude; + private String maintainTime; + private String maintainTimeStr; + private String name; + private String personId; + private String personName; + private String phone; + private String status; + private String statusName; + private String tender; + private String tenderCompany; + private String ts; + private String type; + private String typeName; + + public String getBridgeId() { + return bridgeId; + } + + public void setBridgeId(String bridgeId) { + this.bridgeId = bridgeId; + } + + public String getBridgeName() { + return bridgeName; + } + + public void setBridgeName(String bridgeName) { + this.bridgeName = bridgeName; + } + + public String getCategory() { + return category; + } + + public void setCategory(String category) { + this.category = category; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLatitude() { + return latitude; + } + + public void setLatitude(String latitude) { + this.latitude = latitude; + } + + public String getLongitude() { + return longitude; + } + + public void setLongitude(String longitude) { + this.longitude = longitude; + } + + public String getMaintainTime() { + return maintainTime; + } + + public void setMaintainTime(String maintainTime) { + this.maintainTime = maintainTime; + } + + public String getMaintainTimeStr() { + return maintainTimeStr; + } + + public void setMaintainTimeStr(String maintainTimeStr) { + this.maintainTimeStr = maintainTimeStr; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPersonId() { + return personId; + } + + public void setPersonId(String personId) { + this.personId = personId; + } + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + 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 getTender() { + return tender; + } + + public void setTender(String tender) { + this.tender = tender; + } + + public String getTenderCompany() { + return tenderCompany; + } + + public void setTenderCompany(String tenderCompany) { + this.tenderCompany = tenderCompany; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getTypeName() { + return typeName; + } + + public void setTypeName(String typeName) { + this.typeName = typeName; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java new file mode 100644 index 0000000..4f7a588 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IMaintainRecordModel { + Subscription sendRetrofitRequest(String startDate, String endDate, int offset); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java new file mode 100644 index 0000000..dce3f91 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java @@ -0,0 +1,8 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ISubmitMaintainModel { + Subscription sendRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/MaintainRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/MaintainRecordModelImpl.java new file mode 100644 index 0000000..35fd486 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/MaintainRecordModelImpl.java @@ -0,0 +1,50 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.MaintainRecordBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class MaintainRecordModelImpl implements IMaintainRecordModel { + + private OnGetRecordListener listener; + + public MaintainRecordModelImpl(OnGetRecordListener recordListener) { + this.listener = recordListener; + } + + public interface OnGetRecordListener { + void onSuccess(MaintainRecordBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String startDate, String endDate, int offset) { + Observable observable = RetrofitServiceManager.getMaintainRecordResult(startDate, endDate, offset); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (e.getCause() != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(MaintainRecordBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java index 06f6fb4..9e2666d 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java @@ -29,7 +29,7 @@ @Override public Subscription sendRetrofitRequest() { - Observable observable = RetrofitServiceManager.getProcessPerson(); + Observable observable = RetrofitServiceManager.getProcessPersonResult(); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/SubmitMaintainModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/SubmitMaintainModelImpl.java new file mode 100644 index 0000000..2924fbe --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/SubmitMaintainModelImpl.java @@ -0,0 +1,52 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class SubmitMaintainModelImpl implements ISubmitMaintainModel { + + private OnSubmitListener listener; + + public SubmitMaintainModelImpl(OnSubmitListener submitListener) { + this.listener = submitListener; + } + + public interface OnSubmitListener { + void onSuccess(ActionResultBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description) { + Observable observable = RetrofitServiceManager.getAddMaintainRecordResult(bridgeId, + content, maintainTime, personId, longitude, latitude, description); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (e.getCause() != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(ActionResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IMaintainRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IMaintainRecordPresenter.java new file mode 100644 index 0000000..938a484 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IMaintainRecordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IMaintainRecordPresenter { + void onReadyRetrofitRequest(String startDate, String endDate, int offset); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ISubmitMaintainPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ISubmitMaintainPresenter.java new file mode 100644 index 0000000..511e717 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ISubmitMaintainPresenter.java @@ -0,0 +1,8 @@ +package com.casic.dcms.mvp.presenter; + +public interface ISubmitMaintainPresenter { + void onReadyRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/MaintainRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/MaintainRecordPresenterImpl.java new file mode 100644 index 0000000..fd99e30 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/MaintainRecordPresenterImpl.java @@ -0,0 +1,39 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.MaintainRecordBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.MaintainRecordModelImpl; +import com.casic.dcms.mvp.view.IMaintainRecordView; + +public class MaintainRecordPresenterImpl extends BasePresenter implements IMaintainRecordPresenter, MaintainRecordModelImpl.OnGetRecordListener { + + private IMaintainRecordView view; + private MaintainRecordModelImpl model; + + public MaintainRecordPresenterImpl(IMaintainRecordView cleanToiletRecordView) { + this.view = cleanToiletRecordView; + model = new MaintainRecordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String startDate, String endDate, int offset) { + view.showProgress(); + addSubscription(model.sendRetrofitRequest(startDate, endDate, offset)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(MaintainRecordBean result) { + view.hideProgress(); + view.obtainRecordResult(result); + } + + @Override + public void onFailure(Throwable throwable) { + view.hideProgress(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/SubmitMaintainPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/SubmitMaintainPresenterImpl.java new file mode 100644 index 0000000..7722427 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/SubmitMaintainPresenterImpl.java @@ -0,0 +1,42 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.SubmitMaintainModelImpl; +import com.casic.dcms.mvp.view.ISubmitMaintainView; + +public class SubmitMaintainPresenterImpl extends BasePresenter implements ISubmitMaintainPresenter, SubmitMaintainModelImpl.OnSubmitListener { + + private ISubmitMaintainView view; + private SubmitMaintainModelImpl actionModel; + + public SubmitMaintainPresenterImpl(ISubmitMaintainView submitCaseView) { + this.view = submitCaseView; + actionModel = new SubmitMaintainModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description) { + view.showProgress(); + addSubscription(actionModel.sendRetrofitRequest(bridgeId, content, maintainTime, personId, longitude, + latitude, description)); + } + + @Override + public void onSuccess(ActionResultBean resultBean) { + view.hideProgress(); + view.obtainSubmitResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + view.hideProgress(); + view.obtainDataFail(); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IMaintainRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/IMaintainRecordView.java new file mode 100644 index 0000000..8ff5189 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IMaintainRecordView.java @@ -0,0 +1,11 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.MaintainRecordBean; + +public interface IMaintainRecordView { + void obtainRecordResult(MaintainRecordBean resultBean); + + void showProgress(); + + void hideProgress(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ISubmitMaintainView.java b/app/src/main/java/com/casic/dcms/mvp/view/ISubmitMaintainView.java new file mode 100644 index 0000000..75a0629 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/ISubmitMaintainView.java @@ -0,0 +1,13 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.ActionResultBean; + +public interface ISubmitMaintainView { + void showProgress(); + + void hideProgress(); + + void obtainSubmitResult(ActionResultBean resultBean); + + void obtainDataFail(); +} diff --git a/app/src/main/java/com/casic/dcms/ui/BridgeMaintainActivity.java b/app/src/main/java/com/casic/dcms/ui/BridgeMaintainActivity.java new file mode 100644 index 0000000..84b0eef --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/BridgeMaintainActivity.java @@ -0,0 +1,239 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.content.Intent; +import android.location.Location; +import android.text.TextUtils; +import android.view.View; +import android.widget.EditText; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.amap.api.services.core.LatLonPoint; +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.mvp.presenter.SubmitMaintainPresenterImpl; +import com.casic.dcms.mvp.view.ISubmitMaintainView; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; +import com.casic.dcms.utils.SaveKeyValues; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.utils.callback.IAddressListener; +import com.casic.dcms.utils.callback.ILocationListener; +import com.casic.dcms.widgets.SignInDialog; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.util.Timer; +import java.util.TimerTask; + +import butterknife.BindView; +import butterknife.OnClick; + +public class BridgeMaintainActivity extends BaseActivity implements View.OnClickListener, ISubmitMaintainView { + + private static final String TAG = "BridgeMaintainActivity"; + private Context context = this; + @BindView(R.id.topLayout) + QMUITopBarLayout topLayout; + @BindView(R.id.bridgeNameView) + TextView bridgeNameView; + @BindView(R.id.maintainView) + TextView maintainView; + @BindView(R.id.maintainDateView) + TextView maintainDateView; + @BindView(R.id.liablePersonView) + TextView liablePersonView; + @BindView(R.id.submitButton) + QMUIRoundButton submitButton; + //以下非必填 + @BindView(R.id.remarksView) + EditText remarksView; + + private String bridgeId = ""; + private SubmitMaintainPresenterImpl submitMaintainPresenter; + + @Override + public int initLayoutView() { + return R.layout.activity_bridge; + } + + @Override + protected void setupTopBarLayout() { + topLayout.setTitle("路桥养护").setTextColor(ContextCompat.getColor(this, R.color.white)); + topLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + topLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + topLayout.addRightImageButton(R.drawable.ic_more, 2).setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + startActivity(new Intent(context, MaintainRecordActivity.class)); + } + }); + } + + @Override + public void initData() { + submitMaintainPresenter = new SubmitMaintainPresenterImpl(this); + } + + @Override + public void initEvent() { + submitButton.setChangeAlphaWhenPress(true); + liablePersonView.setText(StringHelper.getUserAccount()); + liablePersonView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); + + new Timer().schedule(new TimerTask() { + @Override + public void run() { + String systemDate = TimeOrDateUtil.timestampToDate(System.currentTimeMillis()); + maintainDateView.post(new Runnable() { + @Override + public void run() { + maintainDateView.setText(systemDate); + maintainDateView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); + } + }); + } + }, 0, 1000); + } + + @OnClick({R.id.bridgeLayout, R.id.maintainContentLayout, R.id.submitButton}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.bridgeLayout: + new QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("选择桥梁") + .addItem("永胜桥") + .addItem("黄洲桥") + .addItem("光明桥") + .setGravityCenter(true) + .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + + bridgeId = String.valueOf((1 + position)); + bridgeNameView.setText(tag); + bridgeNameView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); + } + }).build().show(); + break; + case R.id.maintainContentLayout: + new QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("养护内容") + .addItem("日常养护,无异常") + .addItem("清除表面污垢") + .addItem("修补混凝土空洞、破损、剥落和表面风化及裂缝") + .addItem("清除暴露钢筋的锈渍、恢复保护层") + .addItem("处理各种横、纵向构件的开裂、开焊和锈蚀") + .setGravityCenter(true) + .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + + maintainView.setText(tag); + maintainView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); + } + }).build().show(); + break; + case R.id.submitButton: + //获取定位信息 + LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + + } + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + if (aMapLocation != null) { + if (TextUtils.isEmpty(bridgeId)) { + ToastHelper.showToast("请先选择养护的桥梁", ToastHelper.WARING); + return; + } + String maintainContent = maintainView.getText().toString(); + if (TextUtils.isEmpty(maintainContent)) { + ToastHelper.showToast("请选择养护的内容", ToastHelper.WARING); + return; + } + + double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + LatLonPoint latLonPoint = new LatLonPoint(gcjToWgs[1], gcjToWgs[0]); + LocationHelper.antiCodingLocation(context, latLonPoint, new IAddressListener() { + @Override + public void onGetAddress(String address) { + SaveKeyValues.putValue("maintainAddress", address); + } + }); + //提交养护记录 + submitMaintainPresenter.onReadyRetrofitRequest(bridgeId, maintainContent, + maintainDateView.getText().toString(), + StringHelper.getUserId(), String.valueOf(gcjToWgs[0]), + String.valueOf(gcjToWgs[1]), + StringHelper.filterString(remarksView.getText().toString())); + } else { + ToastHelper.showToast("当前信号较弱,无法提交养护记录", ToastHelper.WARING); + } + } + }, true); + break; + default: + throw new IllegalStateException("Unexpected value: " + v.getId()); + } + } + + @Override + public void showProgress() { + OtherUtils.showLoadingDialog(this, "养护记录签到中,请稍后"); + } + + @Override + public void hideProgress() { + OtherUtils.dismissLoadingDialog(); + } + + @Override + public void obtainSubmitResult(ActionResultBean resultBean) { + String maintainAddress = (String) SaveKeyValues.getValue("maintainAddress", ""); + if (resultBean.isSuccess()) { + new SignInDialog.Builder() + .setContext(this) + .setTitle("桥梁养护记录提交成功") + .setAddress(maintainAddress.equals("") ? "详细位置解析失败" : maintainAddress) + .setOnDialogClickListener(new SignInDialog.OnDialogClickListener() { + @Override + public void onViewClick() { + startActivity(new Intent(context, MaintainRecordActivity.class)); + finish(); + } + }).build().show(); + } + } + + @Override + public void obtainDataFail() { + ToastHelper.showToast("操作失败", ToastHelper.ERROR); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (submitMaintainPresenter != null) { + submitMaintainPresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java index 7221e95..381b704 100644 --- a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java @@ -25,6 +25,7 @@ import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.datepicker.DatePopupWindow; +import com.qmuiteam.qmui.widget.QMUIEmptyView; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; @@ -38,8 +39,8 @@ public class CleanResultListActivity extends BaseCaseActivity implements ICleanToiletRecordView { - // @BindView(R.id.emptyView) -// QMUIEmptyView emptyView; + @BindView(R.id.emptyView) + QMUIEmptyView emptyView; @BindView(R.id.dateView) TextView dateView; @BindView(R.id.calendarView) @@ -126,7 +127,6 @@ @Override public void obtainCleanRecordResult(CleanRecordBean resultBean) { -// Log.d("TAG", "obtainCleanRecordResult: " + new Gson().toJson(resultBean)); if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); if (isRefresh) { @@ -175,9 +175,9 @@ } else { //首次加载数据 if (resultActivity.dataBeans.size() == 0) { -// resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); + resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); } else { -// resultActivity.emptyView.hide(); + resultActivity.emptyView.hide(); resultActivity.adapter = new RecordListAdapter(resultActivity, resultActivity.dataBeans); resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); diff --git a/app/src/main/java/com/casic/dcms/ui/MaintainRecordActivity.java b/app/src/main/java/com/casic/dcms/ui/MaintainRecordActivity.java new file mode 100644 index 0000000..05c41c9 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/MaintainRecordActivity.java @@ -0,0 +1,194 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.content.Intent; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.MaintainRecordAdapter; +import com.casic.dcms.base.BaseCaseActivity; +import com.casic.dcms.bean.MaintainRecordBean; +import com.casic.dcms.mvp.presenter.MaintainRecordPresenterImpl; +import com.casic.dcms.mvp.view.IMaintainRecordView; +import com.casic.dcms.utils.CalendarUtil; +import com.casic.dcms.utils.OtherUtils; +import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.datepicker.DatePopupWindow; +import com.qmuiteam.qmui.widget.QMUIEmptyView; +import com.scwang.smartrefresh.layout.SmartRefreshLayout; +import com.scwang.smartrefresh.layout.api.RefreshLayout; +import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; +import com.scwang.smartrefresh.layout.listener.OnRefreshListener; + +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class MaintainRecordActivity extends BaseCaseActivity implements IMaintainRecordView { + + @BindView(R.id.emptyView) + QMUIEmptyView emptyView; + @BindView(R.id.dateView) + TextView dateView; + @BindView(R.id.calendarView) + ImageView calendarView; + @BindView(R.id.refreshLayout) + SmartRefreshLayout refreshLayout; + @BindView(R.id.recordRecyclerView) + RecyclerView recordRecyclerView; + + private Context context = this; + private int pageIndex = 1; + private boolean isRefresh, isLoadMore = false; + private WeakReferenceHandler weakReferenceHandler; + private List dataBeans = new ArrayList<>(); + private MaintainRecordPresenterImpl recordPresenter; + private MaintainRecordAdapter adapter; + private int startGroup = -1; + private int endGroup = -1; + private int startChild = -1; + private int endChild = -1; + + @Override + protected String setTitleName() { + return "桥梁养护记录"; + } + + @Override + public int initLayoutView() { + return R.layout.activity_maintain_record; + } + + @Override + public void initData() { + weakReferenceHandler = new WeakReferenceHandler(this); + recordPresenter = new MaintainRecordPresenterImpl(this); + recordPresenter.onReadyRetrofitRequest("", "", pageIndex); + } + + @Override + public void initEvent() { + calendarView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + new DatePopupWindow + .Builder(MaintainRecordActivity.this, CalendarUtil.obtainLastTwoMonth(), v)//初始化 + .setInitSelect(startGroup, startChild, endGroup, endChild)//设置上一次选中的区间状态 + .setInitDay(true)//默认为true,UI内容为共几天、开始、结束;当为false时,UI内容为共几晚、入住、离开 + .setDateOnClickListener(new DatePopupWindow.DateOnClickListener() {//设置监听 + //点击完成按钮后回调返回方法 + @Override + public void getDate(String startDate, String endDate, int startGroupPosition, int + startChildPosition, int endGroupPosition, int endChildPosition) { + startGroup = startGroupPosition;//开始月份位置 + startChild = startChildPosition;//开始对应月份中日的位置 + endGroup = endGroupPosition;//结束月份位置 + endChild = endChildPosition;//结束对应月份中日的位置 + dateView.setText(startDate + "~" + endDate); + recordPresenter.onReadyRetrofitRequest(startDate, endDate, pageIndex); + } + }).builder(); + } + }); + refreshLayout.setOnRefreshListener(new OnRefreshListener() { + @Override + public void onRefresh(@NonNull final RefreshLayout refreshLayout) { + isRefresh = true; + //刷新之后页码重置 + pageIndex = 1; + recordPresenter.onReadyRetrofitRequest("", "", pageIndex); + } + }); + refreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() { + @Override + public void onLoadMore(@NonNull final RefreshLayout refreshLayout) { + isLoadMore = true; + pageIndex++; + recordPresenter.onReadyRetrofitRequest("", "", pageIndex); + } + }); + } + + @Override + public void obtainRecordResult(MaintainRecordBean resultBean) { + if (resultBean.isSuccess()) { + List dataRows = resultBean.getData().getRows(); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + ToastHelper.showToast("到底了,别拉了", ToastHelper.INFO); + } + dataBeans.addAll(dataRows); + refreshLayout.finishLoadMore(); + isLoadMore = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(20210622); + } + } + + @Override + public void showProgress() { + OtherUtils.showLoadingDialog(this, "查询记录中,请稍后"); + } + + @Override + public void hideProgress() { + OtherUtils.dismissLoadingDialog(); + } + + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(MaintainRecordActivity activity) { + reference = new WeakReference<>(activity); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + MaintainRecordActivity resultActivity = reference.get(); + if (msg.what == 20210622) { + if (resultActivity.isRefresh || resultActivity.isLoadMore) { + resultActivity.adapter.notifyDataSetChanged(); + } else { + //首次加载数据 + if (resultActivity.dataBeans.size() == 0) { + resultActivity.emptyView.show("抱歉,没有查到相关养护记录", null); + } else { + resultActivity.emptyView.hide(); + resultActivity.adapter = new MaintainRecordAdapter(resultActivity, resultActivity.dataBeans); + resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); + resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); + resultActivity.recordRecyclerView.setAdapter(resultActivity.adapter); + } + } + } + } + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (recordPresenter != null) { + recordPresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/PipelineManagerActivity.java b/app/src/main/java/com/casic/dcms/ui/PipelineManagerActivity.java new file mode 100644 index 0000000..fa77936 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/PipelineManagerActivity.java @@ -0,0 +1,27 @@ +package com.casic.dcms.ui; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; + +public class PipelineManagerActivity extends BaseActivity { + + @Override + public int initLayoutView() { + return R.layout.activity_pipe; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java index ac995d3..4959539 100644 --- a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java @@ -300,7 +300,8 @@ @Override public void onAMapLocationGet(AMapLocation aMapLocation) { if (aMapLocation != null) { - Point point = new Point(aMapLocation.getLongitude(), aMapLocation.getLatitude(), mapView.getSpatialReference()); + double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); mapView.setViewpointCenterAsync(point, 1200);//标注到指定经纬度并放大地图显示 //添加图片Marker addPictureMarker(point); @@ -311,11 +312,9 @@ ToastHelper.showToast("公厕标识不能为空", ToastHelper.WARING); return; } - double longitude = aMapLocation.getLongitude(); - double latitude = aMapLocation.getLatitude(); String cleanTime = TimeOrDateUtil.timestampToCompleteDate(System.currentTimeMillis()); cleanToiletPresenter.onReadyRetrofitRequest(toiletId, StringHelper.getUserId(), - String.valueOf(longitude), String.valueOf(latitude), cleanTime, imagePath, + String.valueOf(gcjToWgs[0]), String.valueOf(gcjToWgs[1]), cleanTime, imagePath, StringHelper.filterString(workContentView.getText().toString())); } } @@ -416,15 +415,18 @@ @Override public void obtainCleanResult(ActionResultBean resultBean) { -// Log.d(TAG, "obtainCleanResult: " + new Gson().toJson(resultBean)); if (resultBean.isSuccess()) { - new SignInDialog.Builder().setContext(this).setAddress(locationStreetView.getText().toString()).setOnDialogClickListener(new SignInDialog.OnDialogClickListener() { - @Override - public void onViewClick() { - startActivity(new Intent(context, CleanResultListActivity.class)); - PublicToiletActivity.this.finish(); - } - }).build().show(); + new SignInDialog.Builder() + .setContext(this) + .setTitle("保洁保卡成功") + .setAddress(locationStreetView.getText().toString()) + .setOnDialogClickListener(new SignInDialog.OnDialogClickListener() { + @Override + public void onViewClick() { + startActivity(new Intent(context, CleanResultListActivity.class)); + PublicToiletActivity.this.finish(); + } + }).build().show(); } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java index 03438b0..42d29a4 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java @@ -18,6 +18,7 @@ import com.casic.dcms.mvp.presenter.UserDataPresenterImpl; import com.casic.dcms.mvp.view.IHomePageView; import com.casic.dcms.mvp.view.IUserDataView; +import com.casic.dcms.ui.BridgeMaintainActivity; import com.casic.dcms.ui.CaseCheckActivity; import com.casic.dcms.ui.CaseHandleActivity; import com.casic.dcms.ui.CaseOnMapActivity; @@ -32,6 +33,7 @@ import com.casic.dcms.ui.OvertimeCaseActivity; import com.casic.dcms.ui.PackageHandleActivity; import com.casic.dcms.ui.PersonOnlineActivity; +import com.casic.dcms.ui.PipelineManagerActivity; import com.casic.dcms.ui.PublicToiletActivity; import com.casic.dcms.ui.UrgentCaseActivity; import com.casic.dcms.utils.StringHelper; @@ -161,6 +163,12 @@ case "部门处置": intent.setClass(context, DeptHandleActivity.class); break; + case "路桥养护": + intent.setClass(context, BridgeMaintainActivity.class); + break; + case "管网管理": + intent.setClass(context, PipelineManagerActivity.class); + break; default: break; } diff --git a/app/src/main/java/com/casic/dcms/utils/Constant.java b/app/src/main/java/com/casic/dcms/utils/Constant.java index d9c1d60..9bbbdb0 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -35,7 +35,8 @@ public static final String IP_KEY = "BASE_IP"; - public static final long FIVE_YEARS = 5L * 365 * 1000 * 60 * 60 * 24L; + public static final long FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L; + public static final long ONE_YEAR = 365 * 60 * 60 * 24 * 1000L; public static final long IMAGE_MINUS_SIZE = 100 * 1024; public static final long HTTP_TIMEOUT = 30L; public static final int PERMISSIONS_CODE = 999; diff --git a/app/src/main/java/com/casic/dcms/utils/LocationHelper.java b/app/src/main/java/com/casic/dcms/utils/LocationHelper.java index 8d95580..79aedbf 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocationHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/LocationHelper.java @@ -40,7 +40,6 @@ private static final double a = 6378245.0; // a: 卫星椭球坐标投影到平面地图坐标系的投影因子。 private static final double ee = 0.00669342162296594323; // ee: 椭球的偏心率平方。 - /** * 高德sdk定位 */ diff --git a/app/src/main/java/com/casic/dcms/utils/StringHelper.java b/app/src/main/java/com/casic/dcms/utils/StringHelper.java index 6bea75a..2faeae4 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -250,8 +250,12 @@ return R.drawable.ic_shangpu; case "部门处置": return R.drawable.ic_dept; + case "路桥养护": + return R.drawable.ic_bridge; + case "管网管理": + return R.drawable.ic_pipe; default: - return R.mipmap.app_logo; + return R.drawable.ic_default_icon; } } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index dc53815..f0be407 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -21,6 +21,8 @@ import com.casic.dcms.bean.HighEventBean; import com.casic.dcms.bean.HomePageBean; import com.casic.dcms.bean.LoginResultBean; +import com.casic.dcms.bean.MaintainContentBean; +import com.casic.dcms.bean.MaintainRecordBean; import com.casic.dcms.bean.NewVersionBean; import com.casic.dcms.bean.OnlinePersonBean; import com.casic.dcms.bean.OvertimeCaseBean; @@ -616,4 +618,42 @@ @POST("/mgr/simplelist") Observable obtainNextProcessPerson(@Header("token") String token, @Field("roleTips") String roleTips); + + /** + * 根据养护类型获取养护内容 + *

+ * http://111.198.10.15:11409/bridge/maintain/contentByType + */ + @FormUrlEncoded + @POST("/bridge/maintain/contentByType") + Observable obtainMaintainContent(@Header("token") String token, + @Field("type") String type); + + /** + * 桥梁新增打卡记录 + *

+ * http://111.198.10.15:11409/bridge/maintain/addApp + */ + @FormUrlEncoded + @POST("/bridge/maintain/addApp") + Observable addMaintainRecord(@Header("token") String token, + @Field("bridgeId") String bridgeId, + @Field("content") String content, + @Field("maintainTime") String maintainTime, + @Field("personId") String personId, + @Field("longitude") String longitude, + @Field("latitude") String latitude, + @Field("description") String description); + + /** + * 桥梁养护记录 + *

+ * http://111.198.10.15:11409/bridge/maintain/listPage?startDate=2021-06-21&endDate=2021-06-22 + */ + @GET("/bridge/maintain/listPage") + Observable obtainMaintainRecord(@Header("token") String token, + @Query("startDate") String beginDate, + @Query("endDate") String endDate, + @Query("limit") int limit, + @Query("offset") int offset); } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index 67e8da1..283354a 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -23,6 +23,8 @@ import com.casic.dcms.bean.HighEventBean; import com.casic.dcms.bean.HomePageBean; import com.casic.dcms.bean.LoginResultBean; +import com.casic.dcms.bean.MaintainContentBean; +import com.casic.dcms.bean.MaintainRecordBean; import com.casic.dcms.bean.NewVersionBean; import com.casic.dcms.bean.OnlinePersonBean; import com.casic.dcms.bean.OvertimeCaseBean; @@ -638,9 +640,41 @@ /** * 获取下级处置员 */ - public static Observable getProcessPerson() { + public static Observable getProcessPersonResult() { Retrofit retrofit = createRetrofit(); RetrofitService service = retrofit.create(RetrofitService.class); return service.obtainNextProcessPerson(AuthenticationHelper.getToken(), "process"); } + + /** + * 根据养护类型获取养护内容 + */ + public static Observable getMaintainContentResult(String type) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainMaintainContent(AuthenticationHelper.getToken(), type); + } + + /** + * 桥梁新增打卡记录 + */ + public static Observable getAddMaintainRecordResult(String bridgeId, String content, + String maintainTime, String personId, + String longitude, String latitude, + String description) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.addMaintainRecord(AuthenticationHelper.getToken(), bridgeId, content, maintainTime, + personId, longitude, latitude, description); + } + + /** + * 桥梁养护记录 + */ + public static Observable getMaintainRecordResult(String startDate, String endDate, int offset) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainMaintainRecord(AuthenticationHelper.getToken(), startDate, endDate, Constant.PAGE_LIMIT, + offset); + } } diff --git a/app/src/main/java/com/casic/dcms/widgets/SignInDialog.java b/app/src/main/java/com/casic/dcms/widgets/SignInDialog.java index ae61dd1..b96ff2f 100644 --- a/app/src/main/java/com/casic/dcms/widgets/SignInDialog.java +++ b/app/src/main/java/com/casic/dcms/widgets/SignInDialog.java @@ -2,13 +2,19 @@ import android.app.Dialog; import android.content.Context; +import android.graphics.Color; +import android.graphics.drawable.ColorDrawable; import android.os.Bundle; import android.text.TextUtils; import android.view.View; +import android.view.Window; +import android.view.WindowManager; import android.widget.TextView; import com.casic.dcms.R; +import com.casic.dcms.base.BaseApplication; import com.casic.dcms.utils.TimeOrDateUtil; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; import java.util.Timer; import java.util.TimerTask; @@ -16,11 +22,13 @@ public class SignInDialog extends Dialog implements View.OnClickListener { private static final String TAG = "SignInDialog"; + private String title; private String address; private OnDialogClickListener listener; private SignInDialog(Builder builder) { super(builder.mContext); + this.title = builder.title; this.address = builder.address; this.listener = builder.listener; } @@ -28,6 +36,16 @@ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + + //手动设置dialog宽度 + Window window = getWindow(); + window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); + window.getDecorView().setBackgroundColor(Color.TRANSPARENT); + WindowManager.LayoutParams params = window.getAttributes(); + params.width = QMUIDisplayHelper.dp2px(BaseApplication.getInstance(), 300); + params.height = WindowManager.LayoutParams.WRAP_CONTENT; + window.setAttributes(params); + setContentView(R.layout.dialog_sign_in); initView(); } @@ -41,6 +59,10 @@ clockView.post(() -> clockView.setText(systemTime)); } }, 0, 1000); + TextView optionTitleView = findViewById(R.id.optionTitleView); + if (!TextUtils.isEmpty(title)) { + optionTitleView.setText(title); + } TextView signInPlaceView = findViewById(R.id.signInPlaceView); if (!TextUtils.isEmpty(address)) { signInPlaceView.setText(address); @@ -62,6 +84,7 @@ public static class Builder { private Context mContext; + private String title; private String address; private OnDialogClickListener listener; @@ -70,6 +93,11 @@ return this; } + public Builder setTitle(String title) { + this.title = title; + return this; + } + public Builder setAddress(String address) { this.address = address; return this; diff --git a/app/src/main/res/drawable/ic_bridge.xml b/app/src/main/res/drawable/ic_bridge.xml new file mode 100644 index 0000000..7aa4637 --- /dev/null +++ b/app/src/main/res/drawable/ic_bridge.xml @@ -0,0 +1,11 @@ + + + diff --git a/app/src/main/res/drawable/ic_default_icon.xml b/app/src/main/res/drawable/ic_default_icon.xml new file mode 100644 index 0000000..3c41da5 --- /dev/null +++ b/app/src/main/res/drawable/ic_default_icon.xml @@ -0,0 +1,18 @@ + + + + + + diff --git a/app/src/main/res/drawable/ic_info.xml b/app/src/main/res/drawable/ic_info.xml new file mode 100644 index 0000000..6562ce3 --- /dev/null +++ b/app/src/main/res/drawable/ic_info.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/src/main/res/drawable/ic_pipe.xml b/app/src/main/res/drawable/ic_pipe.xml new file mode 100644 index 0000000..b005f98 --- /dev/null +++ b/app/src/main/res/drawable/ic_pipe.xml @@ -0,0 +1,20 @@ + + + + + + diff --git a/app/src/main/res/layout/activity_bridge.xml b/app/src/main/res/layout/activity_bridge.xml new file mode 100644 index 0000000..5367773 --- /dev/null +++ b/app/src/main/res/layout/activity_bridge.xml @@ -0,0 +1,177 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_clean_list.xml b/app/src/main/res/layout/activity_clean_list.xml index 6776de4..3c09b26 100644 --- a/app/src/main/res/layout/activity_clean_list.xml +++ b/app/src/main/res/layout/activity_clean_list.xml @@ -7,11 +7,6 @@ - - - - - @@ -40,6 +35,11 @@ android:src="@drawable/ic_calendar" /> + + - + + + + { + + private Context context; + private List dataRows; + private LayoutInflater layoutInflater; + private QMUITipDialog.Builder dialogBuilder; + + public MaintainRecordAdapter(Context context, List dataRows) { + this.context = context; + this.dataRows = dataRows; + layoutInflater = LayoutInflater.from(context); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = layoutInflater.inflate(R.layout.item_maintain_recycleview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + holder.bindView(dataRows.get(position)); + } + + @Override + public int getItemCount() { + return dataRows.size(); + } + + class ItemViewHolder extends RecyclerView.ViewHolder { + + private TextView bridgeNameView; + private ImageView descriptionImageView; + private TextView maintainContentView; + private TextView maintainTimeView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + bridgeNameView = itemView.findViewById(R.id.bridgeNameView); + descriptionImageView = itemView.findViewById(R.id.descriptionImageView); + maintainContentView = itemView.findViewById(R.id.maintainContentView); + maintainTimeView = itemView.findViewById(R.id.maintainTimeView); + } + + void bindView(MaintainRecordBean.DataBean.RowsBean rowsBean) { + bridgeNameView.setText(rowsBean.getBridgeName()); + String description = rowsBean.getDescription(); + if (TextUtils.isEmpty(description)) { + descriptionImageView.setVisibility(View.GONE); + } else { + descriptionImageView.setVisibility(View.VISIBLE); + descriptionImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + QMUITipDialog tipDialog = new QMUITipDialog.Builder(context) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_NOTHING) + .setTipWord(description) + .create(); + tipDialog.show(); + descriptionImageView.postDelayed(new Runnable() { + @Override + public void run() { + tipDialog.dismiss(); + } + }, 2000); + } + }); + } + maintainContentView.setText(rowsBean.getContent()); + maintainTimeView.setText(rowsBean.getMaintainTimeStr()); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java b/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java new file mode 100644 index 0000000..ded4fe1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java @@ -0,0 +1,41 @@ +package com.casic.dcms.bean; + +public class MaintainContentBean { + + private int code; + private String data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java b/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java new file mode 100644 index 0000000..2beea74 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java @@ -0,0 +1,301 @@ +package com.casic.dcms.bean; + +import java.util.List; + +public class MaintainRecordBean { + + private int code; + private DataBean data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + + private int total; + private List rows; + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public static class RowsBean { + /** + * bridgeId : 1 + * bridgeName : 永胜桥 + * category : 桥梁 + * code : 1624359572304 + * content : 日常养护,无异常 + * deptid : 1344110695992258561 + * description : + * id : 1407292162033041409 + * latitude : 39.914705918747295 + * longitude : 116.26295490330527 + * maintainTime : 2021-06-22 00:00:00 + * maintainTimeStr : 2021-06-22 + * name : + * personId : 1344179277212151809 + * personName : + * phone : + * status : + * statusName : + * tender : + * tenderCompany : + * ts : 2021-06-22 + * type : + * typeName : + */ + + private String bridgeId; + private String bridgeName; + private String category; + private String code; + private String content; + private String deptid; + private String description; + private String id; + private String latitude; + private String longitude; + private String maintainTime; + private String maintainTimeStr; + private String name; + private String personId; + private String personName; + private String phone; + private String status; + private String statusName; + private String tender; + private String tenderCompany; + private String ts; + private String type; + private String typeName; + + public String getBridgeId() { + return bridgeId; + } + + public void setBridgeId(String bridgeId) { + this.bridgeId = bridgeId; + } + + public String getBridgeName() { + return bridgeName; + } + + public void setBridgeName(String bridgeName) { + this.bridgeName = bridgeName; + } + + public String getCategory() { + return category; + } + + public void setCategory(String category) { + this.category = category; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLatitude() { + return latitude; + } + + public void setLatitude(String latitude) { + this.latitude = latitude; + } + + public String getLongitude() { + return longitude; + } + + public void setLongitude(String longitude) { + this.longitude = longitude; + } + + public String getMaintainTime() { + return maintainTime; + } + + public void setMaintainTime(String maintainTime) { + this.maintainTime = maintainTime; + } + + public String getMaintainTimeStr() { + return maintainTimeStr; + } + + public void setMaintainTimeStr(String maintainTimeStr) { + this.maintainTimeStr = maintainTimeStr; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPersonId() { + return personId; + } + + public void setPersonId(String personId) { + this.personId = personId; + } + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + 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 getTender() { + return tender; + } + + public void setTender(String tender) { + this.tender = tender; + } + + public String getTenderCompany() { + return tenderCompany; + } + + public void setTenderCompany(String tenderCompany) { + this.tenderCompany = tenderCompany; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getTypeName() { + return typeName; + } + + public void setTypeName(String typeName) { + this.typeName = typeName; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java new file mode 100644 index 0000000..4f7a588 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IMaintainRecordModel { + Subscription sendRetrofitRequest(String startDate, String endDate, int offset); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java new file mode 100644 index 0000000..dce3f91 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java @@ -0,0 +1,8 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ISubmitMaintainModel { + Subscription sendRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/MaintainRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/MaintainRecordModelImpl.java new file mode 100644 index 0000000..35fd486 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/MaintainRecordModelImpl.java @@ -0,0 +1,50 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.MaintainRecordBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class MaintainRecordModelImpl implements IMaintainRecordModel { + + private OnGetRecordListener listener; + + public MaintainRecordModelImpl(OnGetRecordListener recordListener) { + this.listener = recordListener; + } + + public interface OnGetRecordListener { + void onSuccess(MaintainRecordBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String startDate, String endDate, int offset) { + Observable observable = RetrofitServiceManager.getMaintainRecordResult(startDate, endDate, offset); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (e.getCause() != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(MaintainRecordBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java index 06f6fb4..9e2666d 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java @@ -29,7 +29,7 @@ @Override public Subscription sendRetrofitRequest() { - Observable observable = RetrofitServiceManager.getProcessPerson(); + Observable observable = RetrofitServiceManager.getProcessPersonResult(); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/SubmitMaintainModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/SubmitMaintainModelImpl.java new file mode 100644 index 0000000..2924fbe --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/SubmitMaintainModelImpl.java @@ -0,0 +1,52 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class SubmitMaintainModelImpl implements ISubmitMaintainModel { + + private OnSubmitListener listener; + + public SubmitMaintainModelImpl(OnSubmitListener submitListener) { + this.listener = submitListener; + } + + public interface OnSubmitListener { + void onSuccess(ActionResultBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description) { + Observable observable = RetrofitServiceManager.getAddMaintainRecordResult(bridgeId, + content, maintainTime, personId, longitude, latitude, description); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (e.getCause() != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(ActionResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IMaintainRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IMaintainRecordPresenter.java new file mode 100644 index 0000000..938a484 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IMaintainRecordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IMaintainRecordPresenter { + void onReadyRetrofitRequest(String startDate, String endDate, int offset); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ISubmitMaintainPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ISubmitMaintainPresenter.java new file mode 100644 index 0000000..511e717 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ISubmitMaintainPresenter.java @@ -0,0 +1,8 @@ +package com.casic.dcms.mvp.presenter; + +public interface ISubmitMaintainPresenter { + void onReadyRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/MaintainRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/MaintainRecordPresenterImpl.java new file mode 100644 index 0000000..fd99e30 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/MaintainRecordPresenterImpl.java @@ -0,0 +1,39 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.MaintainRecordBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.MaintainRecordModelImpl; +import com.casic.dcms.mvp.view.IMaintainRecordView; + +public class MaintainRecordPresenterImpl extends BasePresenter implements IMaintainRecordPresenter, MaintainRecordModelImpl.OnGetRecordListener { + + private IMaintainRecordView view; + private MaintainRecordModelImpl model; + + public MaintainRecordPresenterImpl(IMaintainRecordView cleanToiletRecordView) { + this.view = cleanToiletRecordView; + model = new MaintainRecordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String startDate, String endDate, int offset) { + view.showProgress(); + addSubscription(model.sendRetrofitRequest(startDate, endDate, offset)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(MaintainRecordBean result) { + view.hideProgress(); + view.obtainRecordResult(result); + } + + @Override + public void onFailure(Throwable throwable) { + view.hideProgress(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/SubmitMaintainPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/SubmitMaintainPresenterImpl.java new file mode 100644 index 0000000..7722427 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/SubmitMaintainPresenterImpl.java @@ -0,0 +1,42 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.SubmitMaintainModelImpl; +import com.casic.dcms.mvp.view.ISubmitMaintainView; + +public class SubmitMaintainPresenterImpl extends BasePresenter implements ISubmitMaintainPresenter, SubmitMaintainModelImpl.OnSubmitListener { + + private ISubmitMaintainView view; + private SubmitMaintainModelImpl actionModel; + + public SubmitMaintainPresenterImpl(ISubmitMaintainView submitCaseView) { + this.view = submitCaseView; + actionModel = new SubmitMaintainModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description) { + view.showProgress(); + addSubscription(actionModel.sendRetrofitRequest(bridgeId, content, maintainTime, personId, longitude, + latitude, description)); + } + + @Override + public void onSuccess(ActionResultBean resultBean) { + view.hideProgress(); + view.obtainSubmitResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + view.hideProgress(); + view.obtainDataFail(); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IMaintainRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/IMaintainRecordView.java new file mode 100644 index 0000000..8ff5189 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IMaintainRecordView.java @@ -0,0 +1,11 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.MaintainRecordBean; + +public interface IMaintainRecordView { + void obtainRecordResult(MaintainRecordBean resultBean); + + void showProgress(); + + void hideProgress(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ISubmitMaintainView.java b/app/src/main/java/com/casic/dcms/mvp/view/ISubmitMaintainView.java new file mode 100644 index 0000000..75a0629 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/ISubmitMaintainView.java @@ -0,0 +1,13 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.ActionResultBean; + +public interface ISubmitMaintainView { + void showProgress(); + + void hideProgress(); + + void obtainSubmitResult(ActionResultBean resultBean); + + void obtainDataFail(); +} diff --git a/app/src/main/java/com/casic/dcms/ui/BridgeMaintainActivity.java b/app/src/main/java/com/casic/dcms/ui/BridgeMaintainActivity.java new file mode 100644 index 0000000..84b0eef --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/BridgeMaintainActivity.java @@ -0,0 +1,239 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.content.Intent; +import android.location.Location; +import android.text.TextUtils; +import android.view.View; +import android.widget.EditText; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.amap.api.services.core.LatLonPoint; +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.mvp.presenter.SubmitMaintainPresenterImpl; +import com.casic.dcms.mvp.view.ISubmitMaintainView; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; +import com.casic.dcms.utils.SaveKeyValues; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.utils.callback.IAddressListener; +import com.casic.dcms.utils.callback.ILocationListener; +import com.casic.dcms.widgets.SignInDialog; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.util.Timer; +import java.util.TimerTask; + +import butterknife.BindView; +import butterknife.OnClick; + +public class BridgeMaintainActivity extends BaseActivity implements View.OnClickListener, ISubmitMaintainView { + + private static final String TAG = "BridgeMaintainActivity"; + private Context context = this; + @BindView(R.id.topLayout) + QMUITopBarLayout topLayout; + @BindView(R.id.bridgeNameView) + TextView bridgeNameView; + @BindView(R.id.maintainView) + TextView maintainView; + @BindView(R.id.maintainDateView) + TextView maintainDateView; + @BindView(R.id.liablePersonView) + TextView liablePersonView; + @BindView(R.id.submitButton) + QMUIRoundButton submitButton; + //以下非必填 + @BindView(R.id.remarksView) + EditText remarksView; + + private String bridgeId = ""; + private SubmitMaintainPresenterImpl submitMaintainPresenter; + + @Override + public int initLayoutView() { + return R.layout.activity_bridge; + } + + @Override + protected void setupTopBarLayout() { + topLayout.setTitle("路桥养护").setTextColor(ContextCompat.getColor(this, R.color.white)); + topLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + topLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + topLayout.addRightImageButton(R.drawable.ic_more, 2).setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + startActivity(new Intent(context, MaintainRecordActivity.class)); + } + }); + } + + @Override + public void initData() { + submitMaintainPresenter = new SubmitMaintainPresenterImpl(this); + } + + @Override + public void initEvent() { + submitButton.setChangeAlphaWhenPress(true); + liablePersonView.setText(StringHelper.getUserAccount()); + liablePersonView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); + + new Timer().schedule(new TimerTask() { + @Override + public void run() { + String systemDate = TimeOrDateUtil.timestampToDate(System.currentTimeMillis()); + maintainDateView.post(new Runnable() { + @Override + public void run() { + maintainDateView.setText(systemDate); + maintainDateView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); + } + }); + } + }, 0, 1000); + } + + @OnClick({R.id.bridgeLayout, R.id.maintainContentLayout, R.id.submitButton}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.bridgeLayout: + new QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("选择桥梁") + .addItem("永胜桥") + .addItem("黄洲桥") + .addItem("光明桥") + .setGravityCenter(true) + .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + + bridgeId = String.valueOf((1 + position)); + bridgeNameView.setText(tag); + bridgeNameView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); + } + }).build().show(); + break; + case R.id.maintainContentLayout: + new QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("养护内容") + .addItem("日常养护,无异常") + .addItem("清除表面污垢") + .addItem("修补混凝土空洞、破损、剥落和表面风化及裂缝") + .addItem("清除暴露钢筋的锈渍、恢复保护层") + .addItem("处理各种横、纵向构件的开裂、开焊和锈蚀") + .setGravityCenter(true) + .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + + maintainView.setText(tag); + maintainView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); + } + }).build().show(); + break; + case R.id.submitButton: + //获取定位信息 + LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + + } + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + if (aMapLocation != null) { + if (TextUtils.isEmpty(bridgeId)) { + ToastHelper.showToast("请先选择养护的桥梁", ToastHelper.WARING); + return; + } + String maintainContent = maintainView.getText().toString(); + if (TextUtils.isEmpty(maintainContent)) { + ToastHelper.showToast("请选择养护的内容", ToastHelper.WARING); + return; + } + + double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + LatLonPoint latLonPoint = new LatLonPoint(gcjToWgs[1], gcjToWgs[0]); + LocationHelper.antiCodingLocation(context, latLonPoint, new IAddressListener() { + @Override + public void onGetAddress(String address) { + SaveKeyValues.putValue("maintainAddress", address); + } + }); + //提交养护记录 + submitMaintainPresenter.onReadyRetrofitRequest(bridgeId, maintainContent, + maintainDateView.getText().toString(), + StringHelper.getUserId(), String.valueOf(gcjToWgs[0]), + String.valueOf(gcjToWgs[1]), + StringHelper.filterString(remarksView.getText().toString())); + } else { + ToastHelper.showToast("当前信号较弱,无法提交养护记录", ToastHelper.WARING); + } + } + }, true); + break; + default: + throw new IllegalStateException("Unexpected value: " + v.getId()); + } + } + + @Override + public void showProgress() { + OtherUtils.showLoadingDialog(this, "养护记录签到中,请稍后"); + } + + @Override + public void hideProgress() { + OtherUtils.dismissLoadingDialog(); + } + + @Override + public void obtainSubmitResult(ActionResultBean resultBean) { + String maintainAddress = (String) SaveKeyValues.getValue("maintainAddress", ""); + if (resultBean.isSuccess()) { + new SignInDialog.Builder() + .setContext(this) + .setTitle("桥梁养护记录提交成功") + .setAddress(maintainAddress.equals("") ? "详细位置解析失败" : maintainAddress) + .setOnDialogClickListener(new SignInDialog.OnDialogClickListener() { + @Override + public void onViewClick() { + startActivity(new Intent(context, MaintainRecordActivity.class)); + finish(); + } + }).build().show(); + } + } + + @Override + public void obtainDataFail() { + ToastHelper.showToast("操作失败", ToastHelper.ERROR); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (submitMaintainPresenter != null) { + submitMaintainPresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java index 7221e95..381b704 100644 --- a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java @@ -25,6 +25,7 @@ import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.datepicker.DatePopupWindow; +import com.qmuiteam.qmui.widget.QMUIEmptyView; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; @@ -38,8 +39,8 @@ public class CleanResultListActivity extends BaseCaseActivity implements ICleanToiletRecordView { - // @BindView(R.id.emptyView) -// QMUIEmptyView emptyView; + @BindView(R.id.emptyView) + QMUIEmptyView emptyView; @BindView(R.id.dateView) TextView dateView; @BindView(R.id.calendarView) @@ -126,7 +127,6 @@ @Override public void obtainCleanRecordResult(CleanRecordBean resultBean) { -// Log.d("TAG", "obtainCleanRecordResult: " + new Gson().toJson(resultBean)); if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); if (isRefresh) { @@ -175,9 +175,9 @@ } else { //首次加载数据 if (resultActivity.dataBeans.size() == 0) { -// resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); + resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); } else { -// resultActivity.emptyView.hide(); + resultActivity.emptyView.hide(); resultActivity.adapter = new RecordListAdapter(resultActivity, resultActivity.dataBeans); resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); diff --git a/app/src/main/java/com/casic/dcms/ui/MaintainRecordActivity.java b/app/src/main/java/com/casic/dcms/ui/MaintainRecordActivity.java new file mode 100644 index 0000000..05c41c9 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/MaintainRecordActivity.java @@ -0,0 +1,194 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.content.Intent; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.MaintainRecordAdapter; +import com.casic.dcms.base.BaseCaseActivity; +import com.casic.dcms.bean.MaintainRecordBean; +import com.casic.dcms.mvp.presenter.MaintainRecordPresenterImpl; +import com.casic.dcms.mvp.view.IMaintainRecordView; +import com.casic.dcms.utils.CalendarUtil; +import com.casic.dcms.utils.OtherUtils; +import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.datepicker.DatePopupWindow; +import com.qmuiteam.qmui.widget.QMUIEmptyView; +import com.scwang.smartrefresh.layout.SmartRefreshLayout; +import com.scwang.smartrefresh.layout.api.RefreshLayout; +import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; +import com.scwang.smartrefresh.layout.listener.OnRefreshListener; + +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class MaintainRecordActivity extends BaseCaseActivity implements IMaintainRecordView { + + @BindView(R.id.emptyView) + QMUIEmptyView emptyView; + @BindView(R.id.dateView) + TextView dateView; + @BindView(R.id.calendarView) + ImageView calendarView; + @BindView(R.id.refreshLayout) + SmartRefreshLayout refreshLayout; + @BindView(R.id.recordRecyclerView) + RecyclerView recordRecyclerView; + + private Context context = this; + private int pageIndex = 1; + private boolean isRefresh, isLoadMore = false; + private WeakReferenceHandler weakReferenceHandler; + private List dataBeans = new ArrayList<>(); + private MaintainRecordPresenterImpl recordPresenter; + private MaintainRecordAdapter adapter; + private int startGroup = -1; + private int endGroup = -1; + private int startChild = -1; + private int endChild = -1; + + @Override + protected String setTitleName() { + return "桥梁养护记录"; + } + + @Override + public int initLayoutView() { + return R.layout.activity_maintain_record; + } + + @Override + public void initData() { + weakReferenceHandler = new WeakReferenceHandler(this); + recordPresenter = new MaintainRecordPresenterImpl(this); + recordPresenter.onReadyRetrofitRequest("", "", pageIndex); + } + + @Override + public void initEvent() { + calendarView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + new DatePopupWindow + .Builder(MaintainRecordActivity.this, CalendarUtil.obtainLastTwoMonth(), v)//初始化 + .setInitSelect(startGroup, startChild, endGroup, endChild)//设置上一次选中的区间状态 + .setInitDay(true)//默认为true,UI内容为共几天、开始、结束;当为false时,UI内容为共几晚、入住、离开 + .setDateOnClickListener(new DatePopupWindow.DateOnClickListener() {//设置监听 + //点击完成按钮后回调返回方法 + @Override + public void getDate(String startDate, String endDate, int startGroupPosition, int + startChildPosition, int endGroupPosition, int endChildPosition) { + startGroup = startGroupPosition;//开始月份位置 + startChild = startChildPosition;//开始对应月份中日的位置 + endGroup = endGroupPosition;//结束月份位置 + endChild = endChildPosition;//结束对应月份中日的位置 + dateView.setText(startDate + "~" + endDate); + recordPresenter.onReadyRetrofitRequest(startDate, endDate, pageIndex); + } + }).builder(); + } + }); + refreshLayout.setOnRefreshListener(new OnRefreshListener() { + @Override + public void onRefresh(@NonNull final RefreshLayout refreshLayout) { + isRefresh = true; + //刷新之后页码重置 + pageIndex = 1; + recordPresenter.onReadyRetrofitRequest("", "", pageIndex); + } + }); + refreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() { + @Override + public void onLoadMore(@NonNull final RefreshLayout refreshLayout) { + isLoadMore = true; + pageIndex++; + recordPresenter.onReadyRetrofitRequest("", "", pageIndex); + } + }); + } + + @Override + public void obtainRecordResult(MaintainRecordBean resultBean) { + if (resultBean.isSuccess()) { + List dataRows = resultBean.getData().getRows(); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + ToastHelper.showToast("到底了,别拉了", ToastHelper.INFO); + } + dataBeans.addAll(dataRows); + refreshLayout.finishLoadMore(); + isLoadMore = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(20210622); + } + } + + @Override + public void showProgress() { + OtherUtils.showLoadingDialog(this, "查询记录中,请稍后"); + } + + @Override + public void hideProgress() { + OtherUtils.dismissLoadingDialog(); + } + + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(MaintainRecordActivity activity) { + reference = new WeakReference<>(activity); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + MaintainRecordActivity resultActivity = reference.get(); + if (msg.what == 20210622) { + if (resultActivity.isRefresh || resultActivity.isLoadMore) { + resultActivity.adapter.notifyDataSetChanged(); + } else { + //首次加载数据 + if (resultActivity.dataBeans.size() == 0) { + resultActivity.emptyView.show("抱歉,没有查到相关养护记录", null); + } else { + resultActivity.emptyView.hide(); + resultActivity.adapter = new MaintainRecordAdapter(resultActivity, resultActivity.dataBeans); + resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); + resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); + resultActivity.recordRecyclerView.setAdapter(resultActivity.adapter); + } + } + } + } + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (recordPresenter != null) { + recordPresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/PipelineManagerActivity.java b/app/src/main/java/com/casic/dcms/ui/PipelineManagerActivity.java new file mode 100644 index 0000000..fa77936 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/PipelineManagerActivity.java @@ -0,0 +1,27 @@ +package com.casic.dcms.ui; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; + +public class PipelineManagerActivity extends BaseActivity { + + @Override + public int initLayoutView() { + return R.layout.activity_pipe; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java index ac995d3..4959539 100644 --- a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java @@ -300,7 +300,8 @@ @Override public void onAMapLocationGet(AMapLocation aMapLocation) { if (aMapLocation != null) { - Point point = new Point(aMapLocation.getLongitude(), aMapLocation.getLatitude(), mapView.getSpatialReference()); + double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); mapView.setViewpointCenterAsync(point, 1200);//标注到指定经纬度并放大地图显示 //添加图片Marker addPictureMarker(point); @@ -311,11 +312,9 @@ ToastHelper.showToast("公厕标识不能为空", ToastHelper.WARING); return; } - double longitude = aMapLocation.getLongitude(); - double latitude = aMapLocation.getLatitude(); String cleanTime = TimeOrDateUtil.timestampToCompleteDate(System.currentTimeMillis()); cleanToiletPresenter.onReadyRetrofitRequest(toiletId, StringHelper.getUserId(), - String.valueOf(longitude), String.valueOf(latitude), cleanTime, imagePath, + String.valueOf(gcjToWgs[0]), String.valueOf(gcjToWgs[1]), cleanTime, imagePath, StringHelper.filterString(workContentView.getText().toString())); } } @@ -416,15 +415,18 @@ @Override public void obtainCleanResult(ActionResultBean resultBean) { -// Log.d(TAG, "obtainCleanResult: " + new Gson().toJson(resultBean)); if (resultBean.isSuccess()) { - new SignInDialog.Builder().setContext(this).setAddress(locationStreetView.getText().toString()).setOnDialogClickListener(new SignInDialog.OnDialogClickListener() { - @Override - public void onViewClick() { - startActivity(new Intent(context, CleanResultListActivity.class)); - PublicToiletActivity.this.finish(); - } - }).build().show(); + new SignInDialog.Builder() + .setContext(this) + .setTitle("保洁保卡成功") + .setAddress(locationStreetView.getText().toString()) + .setOnDialogClickListener(new SignInDialog.OnDialogClickListener() { + @Override + public void onViewClick() { + startActivity(new Intent(context, CleanResultListActivity.class)); + PublicToiletActivity.this.finish(); + } + }).build().show(); } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java index 03438b0..42d29a4 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java @@ -18,6 +18,7 @@ import com.casic.dcms.mvp.presenter.UserDataPresenterImpl; import com.casic.dcms.mvp.view.IHomePageView; import com.casic.dcms.mvp.view.IUserDataView; +import com.casic.dcms.ui.BridgeMaintainActivity; import com.casic.dcms.ui.CaseCheckActivity; import com.casic.dcms.ui.CaseHandleActivity; import com.casic.dcms.ui.CaseOnMapActivity; @@ -32,6 +33,7 @@ import com.casic.dcms.ui.OvertimeCaseActivity; import com.casic.dcms.ui.PackageHandleActivity; import com.casic.dcms.ui.PersonOnlineActivity; +import com.casic.dcms.ui.PipelineManagerActivity; import com.casic.dcms.ui.PublicToiletActivity; import com.casic.dcms.ui.UrgentCaseActivity; import com.casic.dcms.utils.StringHelper; @@ -161,6 +163,12 @@ case "部门处置": intent.setClass(context, DeptHandleActivity.class); break; + case "路桥养护": + intent.setClass(context, BridgeMaintainActivity.class); + break; + case "管网管理": + intent.setClass(context, PipelineManagerActivity.class); + break; default: break; } diff --git a/app/src/main/java/com/casic/dcms/utils/Constant.java b/app/src/main/java/com/casic/dcms/utils/Constant.java index d9c1d60..9bbbdb0 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -35,7 +35,8 @@ public static final String IP_KEY = "BASE_IP"; - public static final long FIVE_YEARS = 5L * 365 * 1000 * 60 * 60 * 24L; + public static final long FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L; + public static final long ONE_YEAR = 365 * 60 * 60 * 24 * 1000L; public static final long IMAGE_MINUS_SIZE = 100 * 1024; public static final long HTTP_TIMEOUT = 30L; public static final int PERMISSIONS_CODE = 999; diff --git a/app/src/main/java/com/casic/dcms/utils/LocationHelper.java b/app/src/main/java/com/casic/dcms/utils/LocationHelper.java index 8d95580..79aedbf 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocationHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/LocationHelper.java @@ -40,7 +40,6 @@ private static final double a = 6378245.0; // a: 卫星椭球坐标投影到平面地图坐标系的投影因子。 private static final double ee = 0.00669342162296594323; // ee: 椭球的偏心率平方。 - /** * 高德sdk定位 */ diff --git a/app/src/main/java/com/casic/dcms/utils/StringHelper.java b/app/src/main/java/com/casic/dcms/utils/StringHelper.java index 6bea75a..2faeae4 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -250,8 +250,12 @@ return R.drawable.ic_shangpu; case "部门处置": return R.drawable.ic_dept; + case "路桥养护": + return R.drawable.ic_bridge; + case "管网管理": + return R.drawable.ic_pipe; default: - return R.mipmap.app_logo; + return R.drawable.ic_default_icon; } } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index dc53815..f0be407 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -21,6 +21,8 @@ import com.casic.dcms.bean.HighEventBean; import com.casic.dcms.bean.HomePageBean; import com.casic.dcms.bean.LoginResultBean; +import com.casic.dcms.bean.MaintainContentBean; +import com.casic.dcms.bean.MaintainRecordBean; import com.casic.dcms.bean.NewVersionBean; import com.casic.dcms.bean.OnlinePersonBean; import com.casic.dcms.bean.OvertimeCaseBean; @@ -616,4 +618,42 @@ @POST("/mgr/simplelist") Observable obtainNextProcessPerson(@Header("token") String token, @Field("roleTips") String roleTips); + + /** + * 根据养护类型获取养护内容 + *

+ * http://111.198.10.15:11409/bridge/maintain/contentByType + */ + @FormUrlEncoded + @POST("/bridge/maintain/contentByType") + Observable obtainMaintainContent(@Header("token") String token, + @Field("type") String type); + + /** + * 桥梁新增打卡记录 + *

+ * http://111.198.10.15:11409/bridge/maintain/addApp + */ + @FormUrlEncoded + @POST("/bridge/maintain/addApp") + Observable addMaintainRecord(@Header("token") String token, + @Field("bridgeId") String bridgeId, + @Field("content") String content, + @Field("maintainTime") String maintainTime, + @Field("personId") String personId, + @Field("longitude") String longitude, + @Field("latitude") String latitude, + @Field("description") String description); + + /** + * 桥梁养护记录 + *

+ * http://111.198.10.15:11409/bridge/maintain/listPage?startDate=2021-06-21&endDate=2021-06-22 + */ + @GET("/bridge/maintain/listPage") + Observable obtainMaintainRecord(@Header("token") String token, + @Query("startDate") String beginDate, + @Query("endDate") String endDate, + @Query("limit") int limit, + @Query("offset") int offset); } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index 67e8da1..283354a 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -23,6 +23,8 @@ import com.casic.dcms.bean.HighEventBean; import com.casic.dcms.bean.HomePageBean; import com.casic.dcms.bean.LoginResultBean; +import com.casic.dcms.bean.MaintainContentBean; +import com.casic.dcms.bean.MaintainRecordBean; import com.casic.dcms.bean.NewVersionBean; import com.casic.dcms.bean.OnlinePersonBean; import com.casic.dcms.bean.OvertimeCaseBean; @@ -638,9 +640,41 @@ /** * 获取下级处置员 */ - public static Observable getProcessPerson() { + public static Observable getProcessPersonResult() { Retrofit retrofit = createRetrofit(); RetrofitService service = retrofit.create(RetrofitService.class); return service.obtainNextProcessPerson(AuthenticationHelper.getToken(), "process"); } + + /** + * 根据养护类型获取养护内容 + */ + public static Observable getMaintainContentResult(String type) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainMaintainContent(AuthenticationHelper.getToken(), type); + } + + /** + * 桥梁新增打卡记录 + */ + public static Observable getAddMaintainRecordResult(String bridgeId, String content, + String maintainTime, String personId, + String longitude, String latitude, + String description) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.addMaintainRecord(AuthenticationHelper.getToken(), bridgeId, content, maintainTime, + personId, longitude, latitude, description); + } + + /** + * 桥梁养护记录 + */ + public static Observable getMaintainRecordResult(String startDate, String endDate, int offset) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainMaintainRecord(AuthenticationHelper.getToken(), startDate, endDate, Constant.PAGE_LIMIT, + offset); + } } diff --git a/app/src/main/java/com/casic/dcms/widgets/SignInDialog.java b/app/src/main/java/com/casic/dcms/widgets/SignInDialog.java index ae61dd1..b96ff2f 100644 --- a/app/src/main/java/com/casic/dcms/widgets/SignInDialog.java +++ b/app/src/main/java/com/casic/dcms/widgets/SignInDialog.java @@ -2,13 +2,19 @@ import android.app.Dialog; import android.content.Context; +import android.graphics.Color; +import android.graphics.drawable.ColorDrawable; import android.os.Bundle; import android.text.TextUtils; import android.view.View; +import android.view.Window; +import android.view.WindowManager; import android.widget.TextView; import com.casic.dcms.R; +import com.casic.dcms.base.BaseApplication; import com.casic.dcms.utils.TimeOrDateUtil; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; import java.util.Timer; import java.util.TimerTask; @@ -16,11 +22,13 @@ public class SignInDialog extends Dialog implements View.OnClickListener { private static final String TAG = "SignInDialog"; + private String title; private String address; private OnDialogClickListener listener; private SignInDialog(Builder builder) { super(builder.mContext); + this.title = builder.title; this.address = builder.address; this.listener = builder.listener; } @@ -28,6 +36,16 @@ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + + //手动设置dialog宽度 + Window window = getWindow(); + window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); + window.getDecorView().setBackgroundColor(Color.TRANSPARENT); + WindowManager.LayoutParams params = window.getAttributes(); + params.width = QMUIDisplayHelper.dp2px(BaseApplication.getInstance(), 300); + params.height = WindowManager.LayoutParams.WRAP_CONTENT; + window.setAttributes(params); + setContentView(R.layout.dialog_sign_in); initView(); } @@ -41,6 +59,10 @@ clockView.post(() -> clockView.setText(systemTime)); } }, 0, 1000); + TextView optionTitleView = findViewById(R.id.optionTitleView); + if (!TextUtils.isEmpty(title)) { + optionTitleView.setText(title); + } TextView signInPlaceView = findViewById(R.id.signInPlaceView); if (!TextUtils.isEmpty(address)) { signInPlaceView.setText(address); @@ -62,6 +84,7 @@ public static class Builder { private Context mContext; + private String title; private String address; private OnDialogClickListener listener; @@ -70,6 +93,11 @@ return this; } + public Builder setTitle(String title) { + this.title = title; + return this; + } + public Builder setAddress(String address) { this.address = address; return this; diff --git a/app/src/main/res/drawable/ic_bridge.xml b/app/src/main/res/drawable/ic_bridge.xml new file mode 100644 index 0000000..7aa4637 --- /dev/null +++ b/app/src/main/res/drawable/ic_bridge.xml @@ -0,0 +1,11 @@ + + + diff --git a/app/src/main/res/drawable/ic_default_icon.xml b/app/src/main/res/drawable/ic_default_icon.xml new file mode 100644 index 0000000..3c41da5 --- /dev/null +++ b/app/src/main/res/drawable/ic_default_icon.xml @@ -0,0 +1,18 @@ + + + + + + diff --git a/app/src/main/res/drawable/ic_info.xml b/app/src/main/res/drawable/ic_info.xml new file mode 100644 index 0000000..6562ce3 --- /dev/null +++ b/app/src/main/res/drawable/ic_info.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/src/main/res/drawable/ic_pipe.xml b/app/src/main/res/drawable/ic_pipe.xml new file mode 100644 index 0000000..b005f98 --- /dev/null +++ b/app/src/main/res/drawable/ic_pipe.xml @@ -0,0 +1,20 @@ + + + + + + diff --git a/app/src/main/res/layout/activity_bridge.xml b/app/src/main/res/layout/activity_bridge.xml new file mode 100644 index 0000000..5367773 --- /dev/null +++ b/app/src/main/res/layout/activity_bridge.xml @@ -0,0 +1,177 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_clean_list.xml b/app/src/main/res/layout/activity_clean_list.xml index 6776de4..3c09b26 100644 --- a/app/src/main/res/layout/activity_clean_list.xml +++ b/app/src/main/res/layout/activity_clean_list.xml @@ -7,11 +7,6 @@ - - - - - @@ -40,6 +35,11 @@ android:src="@drawable/ic_calendar" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 6f0b518..bcfdc0d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ applicationId "com.casic.dcms" minSdkVersion 21 targetSdkVersion 30 - versionCode 19 - versionName "v1.0.0.11" + versionCode 20 + versionName "v1.0.0.12" ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 68f46c9..3090a91 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -89,7 +89,10 @@ - + + + + { + + private Context context; + private List dataRows; + private LayoutInflater layoutInflater; + private QMUITipDialog.Builder dialogBuilder; + + public MaintainRecordAdapter(Context context, List dataRows) { + this.context = context; + this.dataRows = dataRows; + layoutInflater = LayoutInflater.from(context); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = layoutInflater.inflate(R.layout.item_maintain_recycleview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + holder.bindView(dataRows.get(position)); + } + + @Override + public int getItemCount() { + return dataRows.size(); + } + + class ItemViewHolder extends RecyclerView.ViewHolder { + + private TextView bridgeNameView; + private ImageView descriptionImageView; + private TextView maintainContentView; + private TextView maintainTimeView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + bridgeNameView = itemView.findViewById(R.id.bridgeNameView); + descriptionImageView = itemView.findViewById(R.id.descriptionImageView); + maintainContentView = itemView.findViewById(R.id.maintainContentView); + maintainTimeView = itemView.findViewById(R.id.maintainTimeView); + } + + void bindView(MaintainRecordBean.DataBean.RowsBean rowsBean) { + bridgeNameView.setText(rowsBean.getBridgeName()); + String description = rowsBean.getDescription(); + if (TextUtils.isEmpty(description)) { + descriptionImageView.setVisibility(View.GONE); + } else { + descriptionImageView.setVisibility(View.VISIBLE); + descriptionImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + QMUITipDialog tipDialog = new QMUITipDialog.Builder(context) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_NOTHING) + .setTipWord(description) + .create(); + tipDialog.show(); + descriptionImageView.postDelayed(new Runnable() { + @Override + public void run() { + tipDialog.dismiss(); + } + }, 2000); + } + }); + } + maintainContentView.setText(rowsBean.getContent()); + maintainTimeView.setText(rowsBean.getMaintainTimeStr()); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java b/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java new file mode 100644 index 0000000..ded4fe1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java @@ -0,0 +1,41 @@ +package com.casic.dcms.bean; + +public class MaintainContentBean { + + private int code; + private String data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java b/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java new file mode 100644 index 0000000..2beea74 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java @@ -0,0 +1,301 @@ +package com.casic.dcms.bean; + +import java.util.List; + +public class MaintainRecordBean { + + private int code; + private DataBean data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + + private int total; + private List rows; + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public static class RowsBean { + /** + * bridgeId : 1 + * bridgeName : 永胜桥 + * category : 桥梁 + * code : 1624359572304 + * content : 日常养护,无异常 + * deptid : 1344110695992258561 + * description : + * id : 1407292162033041409 + * latitude : 39.914705918747295 + * longitude : 116.26295490330527 + * maintainTime : 2021-06-22 00:00:00 + * maintainTimeStr : 2021-06-22 + * name : + * personId : 1344179277212151809 + * personName : + * phone : + * status : + * statusName : + * tender : + * tenderCompany : + * ts : 2021-06-22 + * type : + * typeName : + */ + + private String bridgeId; + private String bridgeName; + private String category; + private String code; + private String content; + private String deptid; + private String description; + private String id; + private String latitude; + private String longitude; + private String maintainTime; + private String maintainTimeStr; + private String name; + private String personId; + private String personName; + private String phone; + private String status; + private String statusName; + private String tender; + private String tenderCompany; + private String ts; + private String type; + private String typeName; + + public String getBridgeId() { + return bridgeId; + } + + public void setBridgeId(String bridgeId) { + this.bridgeId = bridgeId; + } + + public String getBridgeName() { + return bridgeName; + } + + public void setBridgeName(String bridgeName) { + this.bridgeName = bridgeName; + } + + public String getCategory() { + return category; + } + + public void setCategory(String category) { + this.category = category; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLatitude() { + return latitude; + } + + public void setLatitude(String latitude) { + this.latitude = latitude; + } + + public String getLongitude() { + return longitude; + } + + public void setLongitude(String longitude) { + this.longitude = longitude; + } + + public String getMaintainTime() { + return maintainTime; + } + + public void setMaintainTime(String maintainTime) { + this.maintainTime = maintainTime; + } + + public String getMaintainTimeStr() { + return maintainTimeStr; + } + + public void setMaintainTimeStr(String maintainTimeStr) { + this.maintainTimeStr = maintainTimeStr; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPersonId() { + return personId; + } + + public void setPersonId(String personId) { + this.personId = personId; + } + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + 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 getTender() { + return tender; + } + + public void setTender(String tender) { + this.tender = tender; + } + + public String getTenderCompany() { + return tenderCompany; + } + + public void setTenderCompany(String tenderCompany) { + this.tenderCompany = tenderCompany; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getTypeName() { + return typeName; + } + + public void setTypeName(String typeName) { + this.typeName = typeName; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java new file mode 100644 index 0000000..4f7a588 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IMaintainRecordModel { + Subscription sendRetrofitRequest(String startDate, String endDate, int offset); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java new file mode 100644 index 0000000..dce3f91 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java @@ -0,0 +1,8 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ISubmitMaintainModel { + Subscription sendRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/MaintainRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/MaintainRecordModelImpl.java new file mode 100644 index 0000000..35fd486 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/MaintainRecordModelImpl.java @@ -0,0 +1,50 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.MaintainRecordBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class MaintainRecordModelImpl implements IMaintainRecordModel { + + private OnGetRecordListener listener; + + public MaintainRecordModelImpl(OnGetRecordListener recordListener) { + this.listener = recordListener; + } + + public interface OnGetRecordListener { + void onSuccess(MaintainRecordBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String startDate, String endDate, int offset) { + Observable observable = RetrofitServiceManager.getMaintainRecordResult(startDate, endDate, offset); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (e.getCause() != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(MaintainRecordBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java index 06f6fb4..9e2666d 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java @@ -29,7 +29,7 @@ @Override public Subscription sendRetrofitRequest() { - Observable observable = RetrofitServiceManager.getProcessPerson(); + Observable observable = RetrofitServiceManager.getProcessPersonResult(); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/SubmitMaintainModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/SubmitMaintainModelImpl.java new file mode 100644 index 0000000..2924fbe --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/SubmitMaintainModelImpl.java @@ -0,0 +1,52 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class SubmitMaintainModelImpl implements ISubmitMaintainModel { + + private OnSubmitListener listener; + + public SubmitMaintainModelImpl(OnSubmitListener submitListener) { + this.listener = submitListener; + } + + public interface OnSubmitListener { + void onSuccess(ActionResultBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description) { + Observable observable = RetrofitServiceManager.getAddMaintainRecordResult(bridgeId, + content, maintainTime, personId, longitude, latitude, description); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (e.getCause() != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(ActionResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IMaintainRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IMaintainRecordPresenter.java new file mode 100644 index 0000000..938a484 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IMaintainRecordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IMaintainRecordPresenter { + void onReadyRetrofitRequest(String startDate, String endDate, int offset); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ISubmitMaintainPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ISubmitMaintainPresenter.java new file mode 100644 index 0000000..511e717 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ISubmitMaintainPresenter.java @@ -0,0 +1,8 @@ +package com.casic.dcms.mvp.presenter; + +public interface ISubmitMaintainPresenter { + void onReadyRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/MaintainRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/MaintainRecordPresenterImpl.java new file mode 100644 index 0000000..fd99e30 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/MaintainRecordPresenterImpl.java @@ -0,0 +1,39 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.MaintainRecordBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.MaintainRecordModelImpl; +import com.casic.dcms.mvp.view.IMaintainRecordView; + +public class MaintainRecordPresenterImpl extends BasePresenter implements IMaintainRecordPresenter, MaintainRecordModelImpl.OnGetRecordListener { + + private IMaintainRecordView view; + private MaintainRecordModelImpl model; + + public MaintainRecordPresenterImpl(IMaintainRecordView cleanToiletRecordView) { + this.view = cleanToiletRecordView; + model = new MaintainRecordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String startDate, String endDate, int offset) { + view.showProgress(); + addSubscription(model.sendRetrofitRequest(startDate, endDate, offset)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(MaintainRecordBean result) { + view.hideProgress(); + view.obtainRecordResult(result); + } + + @Override + public void onFailure(Throwable throwable) { + view.hideProgress(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/SubmitMaintainPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/SubmitMaintainPresenterImpl.java new file mode 100644 index 0000000..7722427 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/SubmitMaintainPresenterImpl.java @@ -0,0 +1,42 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.SubmitMaintainModelImpl; +import com.casic.dcms.mvp.view.ISubmitMaintainView; + +public class SubmitMaintainPresenterImpl extends BasePresenter implements ISubmitMaintainPresenter, SubmitMaintainModelImpl.OnSubmitListener { + + private ISubmitMaintainView view; + private SubmitMaintainModelImpl actionModel; + + public SubmitMaintainPresenterImpl(ISubmitMaintainView submitCaseView) { + this.view = submitCaseView; + actionModel = new SubmitMaintainModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description) { + view.showProgress(); + addSubscription(actionModel.sendRetrofitRequest(bridgeId, content, maintainTime, personId, longitude, + latitude, description)); + } + + @Override + public void onSuccess(ActionResultBean resultBean) { + view.hideProgress(); + view.obtainSubmitResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + view.hideProgress(); + view.obtainDataFail(); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IMaintainRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/IMaintainRecordView.java new file mode 100644 index 0000000..8ff5189 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IMaintainRecordView.java @@ -0,0 +1,11 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.MaintainRecordBean; + +public interface IMaintainRecordView { + void obtainRecordResult(MaintainRecordBean resultBean); + + void showProgress(); + + void hideProgress(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ISubmitMaintainView.java b/app/src/main/java/com/casic/dcms/mvp/view/ISubmitMaintainView.java new file mode 100644 index 0000000..75a0629 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/ISubmitMaintainView.java @@ -0,0 +1,13 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.ActionResultBean; + +public interface ISubmitMaintainView { + void showProgress(); + + void hideProgress(); + + void obtainSubmitResult(ActionResultBean resultBean); + + void obtainDataFail(); +} diff --git a/app/src/main/java/com/casic/dcms/ui/BridgeMaintainActivity.java b/app/src/main/java/com/casic/dcms/ui/BridgeMaintainActivity.java new file mode 100644 index 0000000..84b0eef --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/BridgeMaintainActivity.java @@ -0,0 +1,239 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.content.Intent; +import android.location.Location; +import android.text.TextUtils; +import android.view.View; +import android.widget.EditText; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.amap.api.services.core.LatLonPoint; +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.mvp.presenter.SubmitMaintainPresenterImpl; +import com.casic.dcms.mvp.view.ISubmitMaintainView; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; +import com.casic.dcms.utils.SaveKeyValues; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.utils.callback.IAddressListener; +import com.casic.dcms.utils.callback.ILocationListener; +import com.casic.dcms.widgets.SignInDialog; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.util.Timer; +import java.util.TimerTask; + +import butterknife.BindView; +import butterknife.OnClick; + +public class BridgeMaintainActivity extends BaseActivity implements View.OnClickListener, ISubmitMaintainView { + + private static final String TAG = "BridgeMaintainActivity"; + private Context context = this; + @BindView(R.id.topLayout) + QMUITopBarLayout topLayout; + @BindView(R.id.bridgeNameView) + TextView bridgeNameView; + @BindView(R.id.maintainView) + TextView maintainView; + @BindView(R.id.maintainDateView) + TextView maintainDateView; + @BindView(R.id.liablePersonView) + TextView liablePersonView; + @BindView(R.id.submitButton) + QMUIRoundButton submitButton; + //以下非必填 + @BindView(R.id.remarksView) + EditText remarksView; + + private String bridgeId = ""; + private SubmitMaintainPresenterImpl submitMaintainPresenter; + + @Override + public int initLayoutView() { + return R.layout.activity_bridge; + } + + @Override + protected void setupTopBarLayout() { + topLayout.setTitle("路桥养护").setTextColor(ContextCompat.getColor(this, R.color.white)); + topLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + topLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + topLayout.addRightImageButton(R.drawable.ic_more, 2).setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + startActivity(new Intent(context, MaintainRecordActivity.class)); + } + }); + } + + @Override + public void initData() { + submitMaintainPresenter = new SubmitMaintainPresenterImpl(this); + } + + @Override + public void initEvent() { + submitButton.setChangeAlphaWhenPress(true); + liablePersonView.setText(StringHelper.getUserAccount()); + liablePersonView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); + + new Timer().schedule(new TimerTask() { + @Override + public void run() { + String systemDate = TimeOrDateUtil.timestampToDate(System.currentTimeMillis()); + maintainDateView.post(new Runnable() { + @Override + public void run() { + maintainDateView.setText(systemDate); + maintainDateView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); + } + }); + } + }, 0, 1000); + } + + @OnClick({R.id.bridgeLayout, R.id.maintainContentLayout, R.id.submitButton}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.bridgeLayout: + new QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("选择桥梁") + .addItem("永胜桥") + .addItem("黄洲桥") + .addItem("光明桥") + .setGravityCenter(true) + .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + + bridgeId = String.valueOf((1 + position)); + bridgeNameView.setText(tag); + bridgeNameView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); + } + }).build().show(); + break; + case R.id.maintainContentLayout: + new QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("养护内容") + .addItem("日常养护,无异常") + .addItem("清除表面污垢") + .addItem("修补混凝土空洞、破损、剥落和表面风化及裂缝") + .addItem("清除暴露钢筋的锈渍、恢复保护层") + .addItem("处理各种横、纵向构件的开裂、开焊和锈蚀") + .setGravityCenter(true) + .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + + maintainView.setText(tag); + maintainView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); + } + }).build().show(); + break; + case R.id.submitButton: + //获取定位信息 + LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + + } + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + if (aMapLocation != null) { + if (TextUtils.isEmpty(bridgeId)) { + ToastHelper.showToast("请先选择养护的桥梁", ToastHelper.WARING); + return; + } + String maintainContent = maintainView.getText().toString(); + if (TextUtils.isEmpty(maintainContent)) { + ToastHelper.showToast("请选择养护的内容", ToastHelper.WARING); + return; + } + + double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + LatLonPoint latLonPoint = new LatLonPoint(gcjToWgs[1], gcjToWgs[0]); + LocationHelper.antiCodingLocation(context, latLonPoint, new IAddressListener() { + @Override + public void onGetAddress(String address) { + SaveKeyValues.putValue("maintainAddress", address); + } + }); + //提交养护记录 + submitMaintainPresenter.onReadyRetrofitRequest(bridgeId, maintainContent, + maintainDateView.getText().toString(), + StringHelper.getUserId(), String.valueOf(gcjToWgs[0]), + String.valueOf(gcjToWgs[1]), + StringHelper.filterString(remarksView.getText().toString())); + } else { + ToastHelper.showToast("当前信号较弱,无法提交养护记录", ToastHelper.WARING); + } + } + }, true); + break; + default: + throw new IllegalStateException("Unexpected value: " + v.getId()); + } + } + + @Override + public void showProgress() { + OtherUtils.showLoadingDialog(this, "养护记录签到中,请稍后"); + } + + @Override + public void hideProgress() { + OtherUtils.dismissLoadingDialog(); + } + + @Override + public void obtainSubmitResult(ActionResultBean resultBean) { + String maintainAddress = (String) SaveKeyValues.getValue("maintainAddress", ""); + if (resultBean.isSuccess()) { + new SignInDialog.Builder() + .setContext(this) + .setTitle("桥梁养护记录提交成功") + .setAddress(maintainAddress.equals("") ? "详细位置解析失败" : maintainAddress) + .setOnDialogClickListener(new SignInDialog.OnDialogClickListener() { + @Override + public void onViewClick() { + startActivity(new Intent(context, MaintainRecordActivity.class)); + finish(); + } + }).build().show(); + } + } + + @Override + public void obtainDataFail() { + ToastHelper.showToast("操作失败", ToastHelper.ERROR); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (submitMaintainPresenter != null) { + submitMaintainPresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java index 7221e95..381b704 100644 --- a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java @@ -25,6 +25,7 @@ import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.datepicker.DatePopupWindow; +import com.qmuiteam.qmui.widget.QMUIEmptyView; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; @@ -38,8 +39,8 @@ public class CleanResultListActivity extends BaseCaseActivity implements ICleanToiletRecordView { - // @BindView(R.id.emptyView) -// QMUIEmptyView emptyView; + @BindView(R.id.emptyView) + QMUIEmptyView emptyView; @BindView(R.id.dateView) TextView dateView; @BindView(R.id.calendarView) @@ -126,7 +127,6 @@ @Override public void obtainCleanRecordResult(CleanRecordBean resultBean) { -// Log.d("TAG", "obtainCleanRecordResult: " + new Gson().toJson(resultBean)); if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); if (isRefresh) { @@ -175,9 +175,9 @@ } else { //首次加载数据 if (resultActivity.dataBeans.size() == 0) { -// resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); + resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); } else { -// resultActivity.emptyView.hide(); + resultActivity.emptyView.hide(); resultActivity.adapter = new RecordListAdapter(resultActivity, resultActivity.dataBeans); resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); diff --git a/app/src/main/java/com/casic/dcms/ui/MaintainRecordActivity.java b/app/src/main/java/com/casic/dcms/ui/MaintainRecordActivity.java new file mode 100644 index 0000000..05c41c9 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/MaintainRecordActivity.java @@ -0,0 +1,194 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.content.Intent; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.MaintainRecordAdapter; +import com.casic.dcms.base.BaseCaseActivity; +import com.casic.dcms.bean.MaintainRecordBean; +import com.casic.dcms.mvp.presenter.MaintainRecordPresenterImpl; +import com.casic.dcms.mvp.view.IMaintainRecordView; +import com.casic.dcms.utils.CalendarUtil; +import com.casic.dcms.utils.OtherUtils; +import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.datepicker.DatePopupWindow; +import com.qmuiteam.qmui.widget.QMUIEmptyView; +import com.scwang.smartrefresh.layout.SmartRefreshLayout; +import com.scwang.smartrefresh.layout.api.RefreshLayout; +import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; +import com.scwang.smartrefresh.layout.listener.OnRefreshListener; + +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class MaintainRecordActivity extends BaseCaseActivity implements IMaintainRecordView { + + @BindView(R.id.emptyView) + QMUIEmptyView emptyView; + @BindView(R.id.dateView) + TextView dateView; + @BindView(R.id.calendarView) + ImageView calendarView; + @BindView(R.id.refreshLayout) + SmartRefreshLayout refreshLayout; + @BindView(R.id.recordRecyclerView) + RecyclerView recordRecyclerView; + + private Context context = this; + private int pageIndex = 1; + private boolean isRefresh, isLoadMore = false; + private WeakReferenceHandler weakReferenceHandler; + private List dataBeans = new ArrayList<>(); + private MaintainRecordPresenterImpl recordPresenter; + private MaintainRecordAdapter adapter; + private int startGroup = -1; + private int endGroup = -1; + private int startChild = -1; + private int endChild = -1; + + @Override + protected String setTitleName() { + return "桥梁养护记录"; + } + + @Override + public int initLayoutView() { + return R.layout.activity_maintain_record; + } + + @Override + public void initData() { + weakReferenceHandler = new WeakReferenceHandler(this); + recordPresenter = new MaintainRecordPresenterImpl(this); + recordPresenter.onReadyRetrofitRequest("", "", pageIndex); + } + + @Override + public void initEvent() { + calendarView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + new DatePopupWindow + .Builder(MaintainRecordActivity.this, CalendarUtil.obtainLastTwoMonth(), v)//初始化 + .setInitSelect(startGroup, startChild, endGroup, endChild)//设置上一次选中的区间状态 + .setInitDay(true)//默认为true,UI内容为共几天、开始、结束;当为false时,UI内容为共几晚、入住、离开 + .setDateOnClickListener(new DatePopupWindow.DateOnClickListener() {//设置监听 + //点击完成按钮后回调返回方法 + @Override + public void getDate(String startDate, String endDate, int startGroupPosition, int + startChildPosition, int endGroupPosition, int endChildPosition) { + startGroup = startGroupPosition;//开始月份位置 + startChild = startChildPosition;//开始对应月份中日的位置 + endGroup = endGroupPosition;//结束月份位置 + endChild = endChildPosition;//结束对应月份中日的位置 + dateView.setText(startDate + "~" + endDate); + recordPresenter.onReadyRetrofitRequest(startDate, endDate, pageIndex); + } + }).builder(); + } + }); + refreshLayout.setOnRefreshListener(new OnRefreshListener() { + @Override + public void onRefresh(@NonNull final RefreshLayout refreshLayout) { + isRefresh = true; + //刷新之后页码重置 + pageIndex = 1; + recordPresenter.onReadyRetrofitRequest("", "", pageIndex); + } + }); + refreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() { + @Override + public void onLoadMore(@NonNull final RefreshLayout refreshLayout) { + isLoadMore = true; + pageIndex++; + recordPresenter.onReadyRetrofitRequest("", "", pageIndex); + } + }); + } + + @Override + public void obtainRecordResult(MaintainRecordBean resultBean) { + if (resultBean.isSuccess()) { + List dataRows = resultBean.getData().getRows(); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + ToastHelper.showToast("到底了,别拉了", ToastHelper.INFO); + } + dataBeans.addAll(dataRows); + refreshLayout.finishLoadMore(); + isLoadMore = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(20210622); + } + } + + @Override + public void showProgress() { + OtherUtils.showLoadingDialog(this, "查询记录中,请稍后"); + } + + @Override + public void hideProgress() { + OtherUtils.dismissLoadingDialog(); + } + + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(MaintainRecordActivity activity) { + reference = new WeakReference<>(activity); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + MaintainRecordActivity resultActivity = reference.get(); + if (msg.what == 20210622) { + if (resultActivity.isRefresh || resultActivity.isLoadMore) { + resultActivity.adapter.notifyDataSetChanged(); + } else { + //首次加载数据 + if (resultActivity.dataBeans.size() == 0) { + resultActivity.emptyView.show("抱歉,没有查到相关养护记录", null); + } else { + resultActivity.emptyView.hide(); + resultActivity.adapter = new MaintainRecordAdapter(resultActivity, resultActivity.dataBeans); + resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); + resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); + resultActivity.recordRecyclerView.setAdapter(resultActivity.adapter); + } + } + } + } + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (recordPresenter != null) { + recordPresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/PipelineManagerActivity.java b/app/src/main/java/com/casic/dcms/ui/PipelineManagerActivity.java new file mode 100644 index 0000000..fa77936 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/PipelineManagerActivity.java @@ -0,0 +1,27 @@ +package com.casic.dcms.ui; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; + +public class PipelineManagerActivity extends BaseActivity { + + @Override + public int initLayoutView() { + return R.layout.activity_pipe; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java index ac995d3..4959539 100644 --- a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java @@ -300,7 +300,8 @@ @Override public void onAMapLocationGet(AMapLocation aMapLocation) { if (aMapLocation != null) { - Point point = new Point(aMapLocation.getLongitude(), aMapLocation.getLatitude(), mapView.getSpatialReference()); + double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); mapView.setViewpointCenterAsync(point, 1200);//标注到指定经纬度并放大地图显示 //添加图片Marker addPictureMarker(point); @@ -311,11 +312,9 @@ ToastHelper.showToast("公厕标识不能为空", ToastHelper.WARING); return; } - double longitude = aMapLocation.getLongitude(); - double latitude = aMapLocation.getLatitude(); String cleanTime = TimeOrDateUtil.timestampToCompleteDate(System.currentTimeMillis()); cleanToiletPresenter.onReadyRetrofitRequest(toiletId, StringHelper.getUserId(), - String.valueOf(longitude), String.valueOf(latitude), cleanTime, imagePath, + String.valueOf(gcjToWgs[0]), String.valueOf(gcjToWgs[1]), cleanTime, imagePath, StringHelper.filterString(workContentView.getText().toString())); } } @@ -416,15 +415,18 @@ @Override public void obtainCleanResult(ActionResultBean resultBean) { -// Log.d(TAG, "obtainCleanResult: " + new Gson().toJson(resultBean)); if (resultBean.isSuccess()) { - new SignInDialog.Builder().setContext(this).setAddress(locationStreetView.getText().toString()).setOnDialogClickListener(new SignInDialog.OnDialogClickListener() { - @Override - public void onViewClick() { - startActivity(new Intent(context, CleanResultListActivity.class)); - PublicToiletActivity.this.finish(); - } - }).build().show(); + new SignInDialog.Builder() + .setContext(this) + .setTitle("保洁保卡成功") + .setAddress(locationStreetView.getText().toString()) + .setOnDialogClickListener(new SignInDialog.OnDialogClickListener() { + @Override + public void onViewClick() { + startActivity(new Intent(context, CleanResultListActivity.class)); + PublicToiletActivity.this.finish(); + } + }).build().show(); } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java index 03438b0..42d29a4 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java @@ -18,6 +18,7 @@ import com.casic.dcms.mvp.presenter.UserDataPresenterImpl; import com.casic.dcms.mvp.view.IHomePageView; import com.casic.dcms.mvp.view.IUserDataView; +import com.casic.dcms.ui.BridgeMaintainActivity; import com.casic.dcms.ui.CaseCheckActivity; import com.casic.dcms.ui.CaseHandleActivity; import com.casic.dcms.ui.CaseOnMapActivity; @@ -32,6 +33,7 @@ import com.casic.dcms.ui.OvertimeCaseActivity; import com.casic.dcms.ui.PackageHandleActivity; import com.casic.dcms.ui.PersonOnlineActivity; +import com.casic.dcms.ui.PipelineManagerActivity; import com.casic.dcms.ui.PublicToiletActivity; import com.casic.dcms.ui.UrgentCaseActivity; import com.casic.dcms.utils.StringHelper; @@ -161,6 +163,12 @@ case "部门处置": intent.setClass(context, DeptHandleActivity.class); break; + case "路桥养护": + intent.setClass(context, BridgeMaintainActivity.class); + break; + case "管网管理": + intent.setClass(context, PipelineManagerActivity.class); + break; default: break; } diff --git a/app/src/main/java/com/casic/dcms/utils/Constant.java b/app/src/main/java/com/casic/dcms/utils/Constant.java index d9c1d60..9bbbdb0 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -35,7 +35,8 @@ public static final String IP_KEY = "BASE_IP"; - public static final long FIVE_YEARS = 5L * 365 * 1000 * 60 * 60 * 24L; + public static final long FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L; + public static final long ONE_YEAR = 365 * 60 * 60 * 24 * 1000L; public static final long IMAGE_MINUS_SIZE = 100 * 1024; public static final long HTTP_TIMEOUT = 30L; public static final int PERMISSIONS_CODE = 999; diff --git a/app/src/main/java/com/casic/dcms/utils/LocationHelper.java b/app/src/main/java/com/casic/dcms/utils/LocationHelper.java index 8d95580..79aedbf 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocationHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/LocationHelper.java @@ -40,7 +40,6 @@ private static final double a = 6378245.0; // a: 卫星椭球坐标投影到平面地图坐标系的投影因子。 private static final double ee = 0.00669342162296594323; // ee: 椭球的偏心率平方。 - /** * 高德sdk定位 */ diff --git a/app/src/main/java/com/casic/dcms/utils/StringHelper.java b/app/src/main/java/com/casic/dcms/utils/StringHelper.java index 6bea75a..2faeae4 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -250,8 +250,12 @@ return R.drawable.ic_shangpu; case "部门处置": return R.drawable.ic_dept; + case "路桥养护": + return R.drawable.ic_bridge; + case "管网管理": + return R.drawable.ic_pipe; default: - return R.mipmap.app_logo; + return R.drawable.ic_default_icon; } } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index dc53815..f0be407 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -21,6 +21,8 @@ import com.casic.dcms.bean.HighEventBean; import com.casic.dcms.bean.HomePageBean; import com.casic.dcms.bean.LoginResultBean; +import com.casic.dcms.bean.MaintainContentBean; +import com.casic.dcms.bean.MaintainRecordBean; import com.casic.dcms.bean.NewVersionBean; import com.casic.dcms.bean.OnlinePersonBean; import com.casic.dcms.bean.OvertimeCaseBean; @@ -616,4 +618,42 @@ @POST("/mgr/simplelist") Observable obtainNextProcessPerson(@Header("token") String token, @Field("roleTips") String roleTips); + + /** + * 根据养护类型获取养护内容 + *

+ * http://111.198.10.15:11409/bridge/maintain/contentByType + */ + @FormUrlEncoded + @POST("/bridge/maintain/contentByType") + Observable obtainMaintainContent(@Header("token") String token, + @Field("type") String type); + + /** + * 桥梁新增打卡记录 + *

+ * http://111.198.10.15:11409/bridge/maintain/addApp + */ + @FormUrlEncoded + @POST("/bridge/maintain/addApp") + Observable addMaintainRecord(@Header("token") String token, + @Field("bridgeId") String bridgeId, + @Field("content") String content, + @Field("maintainTime") String maintainTime, + @Field("personId") String personId, + @Field("longitude") String longitude, + @Field("latitude") String latitude, + @Field("description") String description); + + /** + * 桥梁养护记录 + *

+ * http://111.198.10.15:11409/bridge/maintain/listPage?startDate=2021-06-21&endDate=2021-06-22 + */ + @GET("/bridge/maintain/listPage") + Observable obtainMaintainRecord(@Header("token") String token, + @Query("startDate") String beginDate, + @Query("endDate") String endDate, + @Query("limit") int limit, + @Query("offset") int offset); } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index 67e8da1..283354a 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -23,6 +23,8 @@ import com.casic.dcms.bean.HighEventBean; import com.casic.dcms.bean.HomePageBean; import com.casic.dcms.bean.LoginResultBean; +import com.casic.dcms.bean.MaintainContentBean; +import com.casic.dcms.bean.MaintainRecordBean; import com.casic.dcms.bean.NewVersionBean; import com.casic.dcms.bean.OnlinePersonBean; import com.casic.dcms.bean.OvertimeCaseBean; @@ -638,9 +640,41 @@ /** * 获取下级处置员 */ - public static Observable getProcessPerson() { + public static Observable getProcessPersonResult() { Retrofit retrofit = createRetrofit(); RetrofitService service = retrofit.create(RetrofitService.class); return service.obtainNextProcessPerson(AuthenticationHelper.getToken(), "process"); } + + /** + * 根据养护类型获取养护内容 + */ + public static Observable getMaintainContentResult(String type) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainMaintainContent(AuthenticationHelper.getToken(), type); + } + + /** + * 桥梁新增打卡记录 + */ + public static Observable getAddMaintainRecordResult(String bridgeId, String content, + String maintainTime, String personId, + String longitude, String latitude, + String description) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.addMaintainRecord(AuthenticationHelper.getToken(), bridgeId, content, maintainTime, + personId, longitude, latitude, description); + } + + /** + * 桥梁养护记录 + */ + public static Observable getMaintainRecordResult(String startDate, String endDate, int offset) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainMaintainRecord(AuthenticationHelper.getToken(), startDate, endDate, Constant.PAGE_LIMIT, + offset); + } } diff --git a/app/src/main/java/com/casic/dcms/widgets/SignInDialog.java b/app/src/main/java/com/casic/dcms/widgets/SignInDialog.java index ae61dd1..b96ff2f 100644 --- a/app/src/main/java/com/casic/dcms/widgets/SignInDialog.java +++ b/app/src/main/java/com/casic/dcms/widgets/SignInDialog.java @@ -2,13 +2,19 @@ import android.app.Dialog; import android.content.Context; +import android.graphics.Color; +import android.graphics.drawable.ColorDrawable; import android.os.Bundle; import android.text.TextUtils; import android.view.View; +import android.view.Window; +import android.view.WindowManager; import android.widget.TextView; import com.casic.dcms.R; +import com.casic.dcms.base.BaseApplication; import com.casic.dcms.utils.TimeOrDateUtil; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; import java.util.Timer; import java.util.TimerTask; @@ -16,11 +22,13 @@ public class SignInDialog extends Dialog implements View.OnClickListener { private static final String TAG = "SignInDialog"; + private String title; private String address; private OnDialogClickListener listener; private SignInDialog(Builder builder) { super(builder.mContext); + this.title = builder.title; this.address = builder.address; this.listener = builder.listener; } @@ -28,6 +36,16 @@ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + + //手动设置dialog宽度 + Window window = getWindow(); + window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); + window.getDecorView().setBackgroundColor(Color.TRANSPARENT); + WindowManager.LayoutParams params = window.getAttributes(); + params.width = QMUIDisplayHelper.dp2px(BaseApplication.getInstance(), 300); + params.height = WindowManager.LayoutParams.WRAP_CONTENT; + window.setAttributes(params); + setContentView(R.layout.dialog_sign_in); initView(); } @@ -41,6 +59,10 @@ clockView.post(() -> clockView.setText(systemTime)); } }, 0, 1000); + TextView optionTitleView = findViewById(R.id.optionTitleView); + if (!TextUtils.isEmpty(title)) { + optionTitleView.setText(title); + } TextView signInPlaceView = findViewById(R.id.signInPlaceView); if (!TextUtils.isEmpty(address)) { signInPlaceView.setText(address); @@ -62,6 +84,7 @@ public static class Builder { private Context mContext; + private String title; private String address; private OnDialogClickListener listener; @@ -70,6 +93,11 @@ return this; } + public Builder setTitle(String title) { + this.title = title; + return this; + } + public Builder setAddress(String address) { this.address = address; return this; diff --git a/app/src/main/res/drawable/ic_bridge.xml b/app/src/main/res/drawable/ic_bridge.xml new file mode 100644 index 0000000..7aa4637 --- /dev/null +++ b/app/src/main/res/drawable/ic_bridge.xml @@ -0,0 +1,11 @@ + + + diff --git a/app/src/main/res/drawable/ic_default_icon.xml b/app/src/main/res/drawable/ic_default_icon.xml new file mode 100644 index 0000000..3c41da5 --- /dev/null +++ b/app/src/main/res/drawable/ic_default_icon.xml @@ -0,0 +1,18 @@ + + + + + + diff --git a/app/src/main/res/drawable/ic_info.xml b/app/src/main/res/drawable/ic_info.xml new file mode 100644 index 0000000..6562ce3 --- /dev/null +++ b/app/src/main/res/drawable/ic_info.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/src/main/res/drawable/ic_pipe.xml b/app/src/main/res/drawable/ic_pipe.xml new file mode 100644 index 0000000..b005f98 --- /dev/null +++ b/app/src/main/res/drawable/ic_pipe.xml @@ -0,0 +1,20 @@ + + + + + + diff --git a/app/src/main/res/layout/activity_bridge.xml b/app/src/main/res/layout/activity_bridge.xml new file mode 100644 index 0000000..5367773 --- /dev/null +++ b/app/src/main/res/layout/activity_bridge.xml @@ -0,0 +1,177 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_clean_list.xml b/app/src/main/res/layout/activity_clean_list.xml index 6776de4..3c09b26 100644 --- a/app/src/main/res/layout/activity_clean_list.xml +++ b/app/src/main/res/layout/activity_clean_list.xml @@ -7,11 +7,6 @@ - - - - - @@ -40,6 +35,11 @@ android:src="@drawable/ic_calendar" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_pipe.xml b/app/src/main/res/layout/activity_pipe.xml new file mode 100644 index 0000000..3509b84 --- /dev/null +++ b/app/src/main/res/layout/activity_pipe.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 6f0b518..bcfdc0d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ applicationId "com.casic.dcms" minSdkVersion 21 targetSdkVersion 30 - versionCode 19 - versionName "v1.0.0.11" + versionCode 20 + versionName "v1.0.0.12" ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 68f46c9..3090a91 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -89,7 +89,10 @@ - + + + + { + + private Context context; + private List dataRows; + private LayoutInflater layoutInflater; + private QMUITipDialog.Builder dialogBuilder; + + public MaintainRecordAdapter(Context context, List dataRows) { + this.context = context; + this.dataRows = dataRows; + layoutInflater = LayoutInflater.from(context); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = layoutInflater.inflate(R.layout.item_maintain_recycleview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + holder.bindView(dataRows.get(position)); + } + + @Override + public int getItemCount() { + return dataRows.size(); + } + + class ItemViewHolder extends RecyclerView.ViewHolder { + + private TextView bridgeNameView; + private ImageView descriptionImageView; + private TextView maintainContentView; + private TextView maintainTimeView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + bridgeNameView = itemView.findViewById(R.id.bridgeNameView); + descriptionImageView = itemView.findViewById(R.id.descriptionImageView); + maintainContentView = itemView.findViewById(R.id.maintainContentView); + maintainTimeView = itemView.findViewById(R.id.maintainTimeView); + } + + void bindView(MaintainRecordBean.DataBean.RowsBean rowsBean) { + bridgeNameView.setText(rowsBean.getBridgeName()); + String description = rowsBean.getDescription(); + if (TextUtils.isEmpty(description)) { + descriptionImageView.setVisibility(View.GONE); + } else { + descriptionImageView.setVisibility(View.VISIBLE); + descriptionImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + QMUITipDialog tipDialog = new QMUITipDialog.Builder(context) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_NOTHING) + .setTipWord(description) + .create(); + tipDialog.show(); + descriptionImageView.postDelayed(new Runnable() { + @Override + public void run() { + tipDialog.dismiss(); + } + }, 2000); + } + }); + } + maintainContentView.setText(rowsBean.getContent()); + maintainTimeView.setText(rowsBean.getMaintainTimeStr()); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java b/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java new file mode 100644 index 0000000..ded4fe1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java @@ -0,0 +1,41 @@ +package com.casic.dcms.bean; + +public class MaintainContentBean { + + private int code; + private String data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java b/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java new file mode 100644 index 0000000..2beea74 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java @@ -0,0 +1,301 @@ +package com.casic.dcms.bean; + +import java.util.List; + +public class MaintainRecordBean { + + private int code; + private DataBean data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + + private int total; + private List rows; + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public static class RowsBean { + /** + * bridgeId : 1 + * bridgeName : 永胜桥 + * category : 桥梁 + * code : 1624359572304 + * content : 日常养护,无异常 + * deptid : 1344110695992258561 + * description : + * id : 1407292162033041409 + * latitude : 39.914705918747295 + * longitude : 116.26295490330527 + * maintainTime : 2021-06-22 00:00:00 + * maintainTimeStr : 2021-06-22 + * name : + * personId : 1344179277212151809 + * personName : + * phone : + * status : + * statusName : + * tender : + * tenderCompany : + * ts : 2021-06-22 + * type : + * typeName : + */ + + private String bridgeId; + private String bridgeName; + private String category; + private String code; + private String content; + private String deptid; + private String description; + private String id; + private String latitude; + private String longitude; + private String maintainTime; + private String maintainTimeStr; + private String name; + private String personId; + private String personName; + private String phone; + private String status; + private String statusName; + private String tender; + private String tenderCompany; + private String ts; + private String type; + private String typeName; + + public String getBridgeId() { + return bridgeId; + } + + public void setBridgeId(String bridgeId) { + this.bridgeId = bridgeId; + } + + public String getBridgeName() { + return bridgeName; + } + + public void setBridgeName(String bridgeName) { + this.bridgeName = bridgeName; + } + + public String getCategory() { + return category; + } + + public void setCategory(String category) { + this.category = category; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLatitude() { + return latitude; + } + + public void setLatitude(String latitude) { + this.latitude = latitude; + } + + public String getLongitude() { + return longitude; + } + + public void setLongitude(String longitude) { + this.longitude = longitude; + } + + public String getMaintainTime() { + return maintainTime; + } + + public void setMaintainTime(String maintainTime) { + this.maintainTime = maintainTime; + } + + public String getMaintainTimeStr() { + return maintainTimeStr; + } + + public void setMaintainTimeStr(String maintainTimeStr) { + this.maintainTimeStr = maintainTimeStr; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPersonId() { + return personId; + } + + public void setPersonId(String personId) { + this.personId = personId; + } + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + 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 getTender() { + return tender; + } + + public void setTender(String tender) { + this.tender = tender; + } + + public String getTenderCompany() { + return tenderCompany; + } + + public void setTenderCompany(String tenderCompany) { + this.tenderCompany = tenderCompany; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getTypeName() { + return typeName; + } + + public void setTypeName(String typeName) { + this.typeName = typeName; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java new file mode 100644 index 0000000..4f7a588 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IMaintainRecordModel { + Subscription sendRetrofitRequest(String startDate, String endDate, int offset); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java new file mode 100644 index 0000000..dce3f91 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java @@ -0,0 +1,8 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ISubmitMaintainModel { + Subscription sendRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/MaintainRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/MaintainRecordModelImpl.java new file mode 100644 index 0000000..35fd486 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/MaintainRecordModelImpl.java @@ -0,0 +1,50 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.MaintainRecordBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class MaintainRecordModelImpl implements IMaintainRecordModel { + + private OnGetRecordListener listener; + + public MaintainRecordModelImpl(OnGetRecordListener recordListener) { + this.listener = recordListener; + } + + public interface OnGetRecordListener { + void onSuccess(MaintainRecordBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String startDate, String endDate, int offset) { + Observable observable = RetrofitServiceManager.getMaintainRecordResult(startDate, endDate, offset); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (e.getCause() != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(MaintainRecordBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java index 06f6fb4..9e2666d 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java @@ -29,7 +29,7 @@ @Override public Subscription sendRetrofitRequest() { - Observable observable = RetrofitServiceManager.getProcessPerson(); + Observable observable = RetrofitServiceManager.getProcessPersonResult(); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/SubmitMaintainModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/SubmitMaintainModelImpl.java new file mode 100644 index 0000000..2924fbe --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/SubmitMaintainModelImpl.java @@ -0,0 +1,52 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class SubmitMaintainModelImpl implements ISubmitMaintainModel { + + private OnSubmitListener listener; + + public SubmitMaintainModelImpl(OnSubmitListener submitListener) { + this.listener = submitListener; + } + + public interface OnSubmitListener { + void onSuccess(ActionResultBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description) { + Observable observable = RetrofitServiceManager.getAddMaintainRecordResult(bridgeId, + content, maintainTime, personId, longitude, latitude, description); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (e.getCause() != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(ActionResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IMaintainRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IMaintainRecordPresenter.java new file mode 100644 index 0000000..938a484 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IMaintainRecordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IMaintainRecordPresenter { + void onReadyRetrofitRequest(String startDate, String endDate, int offset); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ISubmitMaintainPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ISubmitMaintainPresenter.java new file mode 100644 index 0000000..511e717 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ISubmitMaintainPresenter.java @@ -0,0 +1,8 @@ +package com.casic.dcms.mvp.presenter; + +public interface ISubmitMaintainPresenter { + void onReadyRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/MaintainRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/MaintainRecordPresenterImpl.java new file mode 100644 index 0000000..fd99e30 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/MaintainRecordPresenterImpl.java @@ -0,0 +1,39 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.MaintainRecordBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.MaintainRecordModelImpl; +import com.casic.dcms.mvp.view.IMaintainRecordView; + +public class MaintainRecordPresenterImpl extends BasePresenter implements IMaintainRecordPresenter, MaintainRecordModelImpl.OnGetRecordListener { + + private IMaintainRecordView view; + private MaintainRecordModelImpl model; + + public MaintainRecordPresenterImpl(IMaintainRecordView cleanToiletRecordView) { + this.view = cleanToiletRecordView; + model = new MaintainRecordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String startDate, String endDate, int offset) { + view.showProgress(); + addSubscription(model.sendRetrofitRequest(startDate, endDate, offset)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(MaintainRecordBean result) { + view.hideProgress(); + view.obtainRecordResult(result); + } + + @Override + public void onFailure(Throwable throwable) { + view.hideProgress(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/SubmitMaintainPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/SubmitMaintainPresenterImpl.java new file mode 100644 index 0000000..7722427 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/SubmitMaintainPresenterImpl.java @@ -0,0 +1,42 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.SubmitMaintainModelImpl; +import com.casic.dcms.mvp.view.ISubmitMaintainView; + +public class SubmitMaintainPresenterImpl extends BasePresenter implements ISubmitMaintainPresenter, SubmitMaintainModelImpl.OnSubmitListener { + + private ISubmitMaintainView view; + private SubmitMaintainModelImpl actionModel; + + public SubmitMaintainPresenterImpl(ISubmitMaintainView submitCaseView) { + this.view = submitCaseView; + actionModel = new SubmitMaintainModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description) { + view.showProgress(); + addSubscription(actionModel.sendRetrofitRequest(bridgeId, content, maintainTime, personId, longitude, + latitude, description)); + } + + @Override + public void onSuccess(ActionResultBean resultBean) { + view.hideProgress(); + view.obtainSubmitResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + view.hideProgress(); + view.obtainDataFail(); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IMaintainRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/IMaintainRecordView.java new file mode 100644 index 0000000..8ff5189 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IMaintainRecordView.java @@ -0,0 +1,11 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.MaintainRecordBean; + +public interface IMaintainRecordView { + void obtainRecordResult(MaintainRecordBean resultBean); + + void showProgress(); + + void hideProgress(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ISubmitMaintainView.java b/app/src/main/java/com/casic/dcms/mvp/view/ISubmitMaintainView.java new file mode 100644 index 0000000..75a0629 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/ISubmitMaintainView.java @@ -0,0 +1,13 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.ActionResultBean; + +public interface ISubmitMaintainView { + void showProgress(); + + void hideProgress(); + + void obtainSubmitResult(ActionResultBean resultBean); + + void obtainDataFail(); +} diff --git a/app/src/main/java/com/casic/dcms/ui/BridgeMaintainActivity.java b/app/src/main/java/com/casic/dcms/ui/BridgeMaintainActivity.java new file mode 100644 index 0000000..84b0eef --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/BridgeMaintainActivity.java @@ -0,0 +1,239 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.content.Intent; +import android.location.Location; +import android.text.TextUtils; +import android.view.View; +import android.widget.EditText; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.amap.api.services.core.LatLonPoint; +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.mvp.presenter.SubmitMaintainPresenterImpl; +import com.casic.dcms.mvp.view.ISubmitMaintainView; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; +import com.casic.dcms.utils.SaveKeyValues; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.utils.callback.IAddressListener; +import com.casic.dcms.utils.callback.ILocationListener; +import com.casic.dcms.widgets.SignInDialog; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.util.Timer; +import java.util.TimerTask; + +import butterknife.BindView; +import butterknife.OnClick; + +public class BridgeMaintainActivity extends BaseActivity implements View.OnClickListener, ISubmitMaintainView { + + private static final String TAG = "BridgeMaintainActivity"; + private Context context = this; + @BindView(R.id.topLayout) + QMUITopBarLayout topLayout; + @BindView(R.id.bridgeNameView) + TextView bridgeNameView; + @BindView(R.id.maintainView) + TextView maintainView; + @BindView(R.id.maintainDateView) + TextView maintainDateView; + @BindView(R.id.liablePersonView) + TextView liablePersonView; + @BindView(R.id.submitButton) + QMUIRoundButton submitButton; + //以下非必填 + @BindView(R.id.remarksView) + EditText remarksView; + + private String bridgeId = ""; + private SubmitMaintainPresenterImpl submitMaintainPresenter; + + @Override + public int initLayoutView() { + return R.layout.activity_bridge; + } + + @Override + protected void setupTopBarLayout() { + topLayout.setTitle("路桥养护").setTextColor(ContextCompat.getColor(this, R.color.white)); + topLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + topLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + topLayout.addRightImageButton(R.drawable.ic_more, 2).setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + startActivity(new Intent(context, MaintainRecordActivity.class)); + } + }); + } + + @Override + public void initData() { + submitMaintainPresenter = new SubmitMaintainPresenterImpl(this); + } + + @Override + public void initEvent() { + submitButton.setChangeAlphaWhenPress(true); + liablePersonView.setText(StringHelper.getUserAccount()); + liablePersonView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); + + new Timer().schedule(new TimerTask() { + @Override + public void run() { + String systemDate = TimeOrDateUtil.timestampToDate(System.currentTimeMillis()); + maintainDateView.post(new Runnable() { + @Override + public void run() { + maintainDateView.setText(systemDate); + maintainDateView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); + } + }); + } + }, 0, 1000); + } + + @OnClick({R.id.bridgeLayout, R.id.maintainContentLayout, R.id.submitButton}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.bridgeLayout: + new QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("选择桥梁") + .addItem("永胜桥") + .addItem("黄洲桥") + .addItem("光明桥") + .setGravityCenter(true) + .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + + bridgeId = String.valueOf((1 + position)); + bridgeNameView.setText(tag); + bridgeNameView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); + } + }).build().show(); + break; + case R.id.maintainContentLayout: + new QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("养护内容") + .addItem("日常养护,无异常") + .addItem("清除表面污垢") + .addItem("修补混凝土空洞、破损、剥落和表面风化及裂缝") + .addItem("清除暴露钢筋的锈渍、恢复保护层") + .addItem("处理各种横、纵向构件的开裂、开焊和锈蚀") + .setGravityCenter(true) + .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + + maintainView.setText(tag); + maintainView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); + } + }).build().show(); + break; + case R.id.submitButton: + //获取定位信息 + LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + + } + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + if (aMapLocation != null) { + if (TextUtils.isEmpty(bridgeId)) { + ToastHelper.showToast("请先选择养护的桥梁", ToastHelper.WARING); + return; + } + String maintainContent = maintainView.getText().toString(); + if (TextUtils.isEmpty(maintainContent)) { + ToastHelper.showToast("请选择养护的内容", ToastHelper.WARING); + return; + } + + double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + LatLonPoint latLonPoint = new LatLonPoint(gcjToWgs[1], gcjToWgs[0]); + LocationHelper.antiCodingLocation(context, latLonPoint, new IAddressListener() { + @Override + public void onGetAddress(String address) { + SaveKeyValues.putValue("maintainAddress", address); + } + }); + //提交养护记录 + submitMaintainPresenter.onReadyRetrofitRequest(bridgeId, maintainContent, + maintainDateView.getText().toString(), + StringHelper.getUserId(), String.valueOf(gcjToWgs[0]), + String.valueOf(gcjToWgs[1]), + StringHelper.filterString(remarksView.getText().toString())); + } else { + ToastHelper.showToast("当前信号较弱,无法提交养护记录", ToastHelper.WARING); + } + } + }, true); + break; + default: + throw new IllegalStateException("Unexpected value: " + v.getId()); + } + } + + @Override + public void showProgress() { + OtherUtils.showLoadingDialog(this, "养护记录签到中,请稍后"); + } + + @Override + public void hideProgress() { + OtherUtils.dismissLoadingDialog(); + } + + @Override + public void obtainSubmitResult(ActionResultBean resultBean) { + String maintainAddress = (String) SaveKeyValues.getValue("maintainAddress", ""); + if (resultBean.isSuccess()) { + new SignInDialog.Builder() + .setContext(this) + .setTitle("桥梁养护记录提交成功") + .setAddress(maintainAddress.equals("") ? "详细位置解析失败" : maintainAddress) + .setOnDialogClickListener(new SignInDialog.OnDialogClickListener() { + @Override + public void onViewClick() { + startActivity(new Intent(context, MaintainRecordActivity.class)); + finish(); + } + }).build().show(); + } + } + + @Override + public void obtainDataFail() { + ToastHelper.showToast("操作失败", ToastHelper.ERROR); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (submitMaintainPresenter != null) { + submitMaintainPresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java index 7221e95..381b704 100644 --- a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java @@ -25,6 +25,7 @@ import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.datepicker.DatePopupWindow; +import com.qmuiteam.qmui.widget.QMUIEmptyView; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; @@ -38,8 +39,8 @@ public class CleanResultListActivity extends BaseCaseActivity implements ICleanToiletRecordView { - // @BindView(R.id.emptyView) -// QMUIEmptyView emptyView; + @BindView(R.id.emptyView) + QMUIEmptyView emptyView; @BindView(R.id.dateView) TextView dateView; @BindView(R.id.calendarView) @@ -126,7 +127,6 @@ @Override public void obtainCleanRecordResult(CleanRecordBean resultBean) { -// Log.d("TAG", "obtainCleanRecordResult: " + new Gson().toJson(resultBean)); if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); if (isRefresh) { @@ -175,9 +175,9 @@ } else { //首次加载数据 if (resultActivity.dataBeans.size() == 0) { -// resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); + resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); } else { -// resultActivity.emptyView.hide(); + resultActivity.emptyView.hide(); resultActivity.adapter = new RecordListAdapter(resultActivity, resultActivity.dataBeans); resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); diff --git a/app/src/main/java/com/casic/dcms/ui/MaintainRecordActivity.java b/app/src/main/java/com/casic/dcms/ui/MaintainRecordActivity.java new file mode 100644 index 0000000..05c41c9 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/MaintainRecordActivity.java @@ -0,0 +1,194 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.content.Intent; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.MaintainRecordAdapter; +import com.casic.dcms.base.BaseCaseActivity; +import com.casic.dcms.bean.MaintainRecordBean; +import com.casic.dcms.mvp.presenter.MaintainRecordPresenterImpl; +import com.casic.dcms.mvp.view.IMaintainRecordView; +import com.casic.dcms.utils.CalendarUtil; +import com.casic.dcms.utils.OtherUtils; +import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.datepicker.DatePopupWindow; +import com.qmuiteam.qmui.widget.QMUIEmptyView; +import com.scwang.smartrefresh.layout.SmartRefreshLayout; +import com.scwang.smartrefresh.layout.api.RefreshLayout; +import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; +import com.scwang.smartrefresh.layout.listener.OnRefreshListener; + +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class MaintainRecordActivity extends BaseCaseActivity implements IMaintainRecordView { + + @BindView(R.id.emptyView) + QMUIEmptyView emptyView; + @BindView(R.id.dateView) + TextView dateView; + @BindView(R.id.calendarView) + ImageView calendarView; + @BindView(R.id.refreshLayout) + SmartRefreshLayout refreshLayout; + @BindView(R.id.recordRecyclerView) + RecyclerView recordRecyclerView; + + private Context context = this; + private int pageIndex = 1; + private boolean isRefresh, isLoadMore = false; + private WeakReferenceHandler weakReferenceHandler; + private List dataBeans = new ArrayList<>(); + private MaintainRecordPresenterImpl recordPresenter; + private MaintainRecordAdapter adapter; + private int startGroup = -1; + private int endGroup = -1; + private int startChild = -1; + private int endChild = -1; + + @Override + protected String setTitleName() { + return "桥梁养护记录"; + } + + @Override + public int initLayoutView() { + return R.layout.activity_maintain_record; + } + + @Override + public void initData() { + weakReferenceHandler = new WeakReferenceHandler(this); + recordPresenter = new MaintainRecordPresenterImpl(this); + recordPresenter.onReadyRetrofitRequest("", "", pageIndex); + } + + @Override + public void initEvent() { + calendarView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + new DatePopupWindow + .Builder(MaintainRecordActivity.this, CalendarUtil.obtainLastTwoMonth(), v)//初始化 + .setInitSelect(startGroup, startChild, endGroup, endChild)//设置上一次选中的区间状态 + .setInitDay(true)//默认为true,UI内容为共几天、开始、结束;当为false时,UI内容为共几晚、入住、离开 + .setDateOnClickListener(new DatePopupWindow.DateOnClickListener() {//设置监听 + //点击完成按钮后回调返回方法 + @Override + public void getDate(String startDate, String endDate, int startGroupPosition, int + startChildPosition, int endGroupPosition, int endChildPosition) { + startGroup = startGroupPosition;//开始月份位置 + startChild = startChildPosition;//开始对应月份中日的位置 + endGroup = endGroupPosition;//结束月份位置 + endChild = endChildPosition;//结束对应月份中日的位置 + dateView.setText(startDate + "~" + endDate); + recordPresenter.onReadyRetrofitRequest(startDate, endDate, pageIndex); + } + }).builder(); + } + }); + refreshLayout.setOnRefreshListener(new OnRefreshListener() { + @Override + public void onRefresh(@NonNull final RefreshLayout refreshLayout) { + isRefresh = true; + //刷新之后页码重置 + pageIndex = 1; + recordPresenter.onReadyRetrofitRequest("", "", pageIndex); + } + }); + refreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() { + @Override + public void onLoadMore(@NonNull final RefreshLayout refreshLayout) { + isLoadMore = true; + pageIndex++; + recordPresenter.onReadyRetrofitRequest("", "", pageIndex); + } + }); + } + + @Override + public void obtainRecordResult(MaintainRecordBean resultBean) { + if (resultBean.isSuccess()) { + List dataRows = resultBean.getData().getRows(); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + ToastHelper.showToast("到底了,别拉了", ToastHelper.INFO); + } + dataBeans.addAll(dataRows); + refreshLayout.finishLoadMore(); + isLoadMore = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(20210622); + } + } + + @Override + public void showProgress() { + OtherUtils.showLoadingDialog(this, "查询记录中,请稍后"); + } + + @Override + public void hideProgress() { + OtherUtils.dismissLoadingDialog(); + } + + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(MaintainRecordActivity activity) { + reference = new WeakReference<>(activity); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + MaintainRecordActivity resultActivity = reference.get(); + if (msg.what == 20210622) { + if (resultActivity.isRefresh || resultActivity.isLoadMore) { + resultActivity.adapter.notifyDataSetChanged(); + } else { + //首次加载数据 + if (resultActivity.dataBeans.size() == 0) { + resultActivity.emptyView.show("抱歉,没有查到相关养护记录", null); + } else { + resultActivity.emptyView.hide(); + resultActivity.adapter = new MaintainRecordAdapter(resultActivity, resultActivity.dataBeans); + resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); + resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); + resultActivity.recordRecyclerView.setAdapter(resultActivity.adapter); + } + } + } + } + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (recordPresenter != null) { + recordPresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/PipelineManagerActivity.java b/app/src/main/java/com/casic/dcms/ui/PipelineManagerActivity.java new file mode 100644 index 0000000..fa77936 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/PipelineManagerActivity.java @@ -0,0 +1,27 @@ +package com.casic.dcms.ui; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; + +public class PipelineManagerActivity extends BaseActivity { + + @Override + public int initLayoutView() { + return R.layout.activity_pipe; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java index ac995d3..4959539 100644 --- a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java @@ -300,7 +300,8 @@ @Override public void onAMapLocationGet(AMapLocation aMapLocation) { if (aMapLocation != null) { - Point point = new Point(aMapLocation.getLongitude(), aMapLocation.getLatitude(), mapView.getSpatialReference()); + double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); mapView.setViewpointCenterAsync(point, 1200);//标注到指定经纬度并放大地图显示 //添加图片Marker addPictureMarker(point); @@ -311,11 +312,9 @@ ToastHelper.showToast("公厕标识不能为空", ToastHelper.WARING); return; } - double longitude = aMapLocation.getLongitude(); - double latitude = aMapLocation.getLatitude(); String cleanTime = TimeOrDateUtil.timestampToCompleteDate(System.currentTimeMillis()); cleanToiletPresenter.onReadyRetrofitRequest(toiletId, StringHelper.getUserId(), - String.valueOf(longitude), String.valueOf(latitude), cleanTime, imagePath, + String.valueOf(gcjToWgs[0]), String.valueOf(gcjToWgs[1]), cleanTime, imagePath, StringHelper.filterString(workContentView.getText().toString())); } } @@ -416,15 +415,18 @@ @Override public void obtainCleanResult(ActionResultBean resultBean) { -// Log.d(TAG, "obtainCleanResult: " + new Gson().toJson(resultBean)); if (resultBean.isSuccess()) { - new SignInDialog.Builder().setContext(this).setAddress(locationStreetView.getText().toString()).setOnDialogClickListener(new SignInDialog.OnDialogClickListener() { - @Override - public void onViewClick() { - startActivity(new Intent(context, CleanResultListActivity.class)); - PublicToiletActivity.this.finish(); - } - }).build().show(); + new SignInDialog.Builder() + .setContext(this) + .setTitle("保洁保卡成功") + .setAddress(locationStreetView.getText().toString()) + .setOnDialogClickListener(new SignInDialog.OnDialogClickListener() { + @Override + public void onViewClick() { + startActivity(new Intent(context, CleanResultListActivity.class)); + PublicToiletActivity.this.finish(); + } + }).build().show(); } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java index 03438b0..42d29a4 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java @@ -18,6 +18,7 @@ import com.casic.dcms.mvp.presenter.UserDataPresenterImpl; import com.casic.dcms.mvp.view.IHomePageView; import com.casic.dcms.mvp.view.IUserDataView; +import com.casic.dcms.ui.BridgeMaintainActivity; import com.casic.dcms.ui.CaseCheckActivity; import com.casic.dcms.ui.CaseHandleActivity; import com.casic.dcms.ui.CaseOnMapActivity; @@ -32,6 +33,7 @@ import com.casic.dcms.ui.OvertimeCaseActivity; import com.casic.dcms.ui.PackageHandleActivity; import com.casic.dcms.ui.PersonOnlineActivity; +import com.casic.dcms.ui.PipelineManagerActivity; import com.casic.dcms.ui.PublicToiletActivity; import com.casic.dcms.ui.UrgentCaseActivity; import com.casic.dcms.utils.StringHelper; @@ -161,6 +163,12 @@ case "部门处置": intent.setClass(context, DeptHandleActivity.class); break; + case "路桥养护": + intent.setClass(context, BridgeMaintainActivity.class); + break; + case "管网管理": + intent.setClass(context, PipelineManagerActivity.class); + break; default: break; } diff --git a/app/src/main/java/com/casic/dcms/utils/Constant.java b/app/src/main/java/com/casic/dcms/utils/Constant.java index d9c1d60..9bbbdb0 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -35,7 +35,8 @@ public static final String IP_KEY = "BASE_IP"; - public static final long FIVE_YEARS = 5L * 365 * 1000 * 60 * 60 * 24L; + public static final long FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L; + public static final long ONE_YEAR = 365 * 60 * 60 * 24 * 1000L; public static final long IMAGE_MINUS_SIZE = 100 * 1024; public static final long HTTP_TIMEOUT = 30L; public static final int PERMISSIONS_CODE = 999; diff --git a/app/src/main/java/com/casic/dcms/utils/LocationHelper.java b/app/src/main/java/com/casic/dcms/utils/LocationHelper.java index 8d95580..79aedbf 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocationHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/LocationHelper.java @@ -40,7 +40,6 @@ private static final double a = 6378245.0; // a: 卫星椭球坐标投影到平面地图坐标系的投影因子。 private static final double ee = 0.00669342162296594323; // ee: 椭球的偏心率平方。 - /** * 高德sdk定位 */ diff --git a/app/src/main/java/com/casic/dcms/utils/StringHelper.java b/app/src/main/java/com/casic/dcms/utils/StringHelper.java index 6bea75a..2faeae4 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -250,8 +250,12 @@ return R.drawable.ic_shangpu; case "部门处置": return R.drawable.ic_dept; + case "路桥养护": + return R.drawable.ic_bridge; + case "管网管理": + return R.drawable.ic_pipe; default: - return R.mipmap.app_logo; + return R.drawable.ic_default_icon; } } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index dc53815..f0be407 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -21,6 +21,8 @@ import com.casic.dcms.bean.HighEventBean; import com.casic.dcms.bean.HomePageBean; import com.casic.dcms.bean.LoginResultBean; +import com.casic.dcms.bean.MaintainContentBean; +import com.casic.dcms.bean.MaintainRecordBean; import com.casic.dcms.bean.NewVersionBean; import com.casic.dcms.bean.OnlinePersonBean; import com.casic.dcms.bean.OvertimeCaseBean; @@ -616,4 +618,42 @@ @POST("/mgr/simplelist") Observable obtainNextProcessPerson(@Header("token") String token, @Field("roleTips") String roleTips); + + /** + * 根据养护类型获取养护内容 + *

+ * http://111.198.10.15:11409/bridge/maintain/contentByType + */ + @FormUrlEncoded + @POST("/bridge/maintain/contentByType") + Observable obtainMaintainContent(@Header("token") String token, + @Field("type") String type); + + /** + * 桥梁新增打卡记录 + *

+ * http://111.198.10.15:11409/bridge/maintain/addApp + */ + @FormUrlEncoded + @POST("/bridge/maintain/addApp") + Observable addMaintainRecord(@Header("token") String token, + @Field("bridgeId") String bridgeId, + @Field("content") String content, + @Field("maintainTime") String maintainTime, + @Field("personId") String personId, + @Field("longitude") String longitude, + @Field("latitude") String latitude, + @Field("description") String description); + + /** + * 桥梁养护记录 + *

+ * http://111.198.10.15:11409/bridge/maintain/listPage?startDate=2021-06-21&endDate=2021-06-22 + */ + @GET("/bridge/maintain/listPage") + Observable obtainMaintainRecord(@Header("token") String token, + @Query("startDate") String beginDate, + @Query("endDate") String endDate, + @Query("limit") int limit, + @Query("offset") int offset); } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index 67e8da1..283354a 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -23,6 +23,8 @@ import com.casic.dcms.bean.HighEventBean; import com.casic.dcms.bean.HomePageBean; import com.casic.dcms.bean.LoginResultBean; +import com.casic.dcms.bean.MaintainContentBean; +import com.casic.dcms.bean.MaintainRecordBean; import com.casic.dcms.bean.NewVersionBean; import com.casic.dcms.bean.OnlinePersonBean; import com.casic.dcms.bean.OvertimeCaseBean; @@ -638,9 +640,41 @@ /** * 获取下级处置员 */ - public static Observable getProcessPerson() { + public static Observable getProcessPersonResult() { Retrofit retrofit = createRetrofit(); RetrofitService service = retrofit.create(RetrofitService.class); return service.obtainNextProcessPerson(AuthenticationHelper.getToken(), "process"); } + + /** + * 根据养护类型获取养护内容 + */ + public static Observable getMaintainContentResult(String type) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainMaintainContent(AuthenticationHelper.getToken(), type); + } + + /** + * 桥梁新增打卡记录 + */ + public static Observable getAddMaintainRecordResult(String bridgeId, String content, + String maintainTime, String personId, + String longitude, String latitude, + String description) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.addMaintainRecord(AuthenticationHelper.getToken(), bridgeId, content, maintainTime, + personId, longitude, latitude, description); + } + + /** + * 桥梁养护记录 + */ + public static Observable getMaintainRecordResult(String startDate, String endDate, int offset) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainMaintainRecord(AuthenticationHelper.getToken(), startDate, endDate, Constant.PAGE_LIMIT, + offset); + } } diff --git a/app/src/main/java/com/casic/dcms/widgets/SignInDialog.java b/app/src/main/java/com/casic/dcms/widgets/SignInDialog.java index ae61dd1..b96ff2f 100644 --- a/app/src/main/java/com/casic/dcms/widgets/SignInDialog.java +++ b/app/src/main/java/com/casic/dcms/widgets/SignInDialog.java @@ -2,13 +2,19 @@ import android.app.Dialog; import android.content.Context; +import android.graphics.Color; +import android.graphics.drawable.ColorDrawable; import android.os.Bundle; import android.text.TextUtils; import android.view.View; +import android.view.Window; +import android.view.WindowManager; import android.widget.TextView; import com.casic.dcms.R; +import com.casic.dcms.base.BaseApplication; import com.casic.dcms.utils.TimeOrDateUtil; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; import java.util.Timer; import java.util.TimerTask; @@ -16,11 +22,13 @@ public class SignInDialog extends Dialog implements View.OnClickListener { private static final String TAG = "SignInDialog"; + private String title; private String address; private OnDialogClickListener listener; private SignInDialog(Builder builder) { super(builder.mContext); + this.title = builder.title; this.address = builder.address; this.listener = builder.listener; } @@ -28,6 +36,16 @@ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + + //手动设置dialog宽度 + Window window = getWindow(); + window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); + window.getDecorView().setBackgroundColor(Color.TRANSPARENT); + WindowManager.LayoutParams params = window.getAttributes(); + params.width = QMUIDisplayHelper.dp2px(BaseApplication.getInstance(), 300); + params.height = WindowManager.LayoutParams.WRAP_CONTENT; + window.setAttributes(params); + setContentView(R.layout.dialog_sign_in); initView(); } @@ -41,6 +59,10 @@ clockView.post(() -> clockView.setText(systemTime)); } }, 0, 1000); + TextView optionTitleView = findViewById(R.id.optionTitleView); + if (!TextUtils.isEmpty(title)) { + optionTitleView.setText(title); + } TextView signInPlaceView = findViewById(R.id.signInPlaceView); if (!TextUtils.isEmpty(address)) { signInPlaceView.setText(address); @@ -62,6 +84,7 @@ public static class Builder { private Context mContext; + private String title; private String address; private OnDialogClickListener listener; @@ -70,6 +93,11 @@ return this; } + public Builder setTitle(String title) { + this.title = title; + return this; + } + public Builder setAddress(String address) { this.address = address; return this; diff --git a/app/src/main/res/drawable/ic_bridge.xml b/app/src/main/res/drawable/ic_bridge.xml new file mode 100644 index 0000000..7aa4637 --- /dev/null +++ b/app/src/main/res/drawable/ic_bridge.xml @@ -0,0 +1,11 @@ + + + diff --git a/app/src/main/res/drawable/ic_default_icon.xml b/app/src/main/res/drawable/ic_default_icon.xml new file mode 100644 index 0000000..3c41da5 --- /dev/null +++ b/app/src/main/res/drawable/ic_default_icon.xml @@ -0,0 +1,18 @@ + + + + + + diff --git a/app/src/main/res/drawable/ic_info.xml b/app/src/main/res/drawable/ic_info.xml new file mode 100644 index 0000000..6562ce3 --- /dev/null +++ b/app/src/main/res/drawable/ic_info.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/src/main/res/drawable/ic_pipe.xml b/app/src/main/res/drawable/ic_pipe.xml new file mode 100644 index 0000000..b005f98 --- /dev/null +++ b/app/src/main/res/drawable/ic_pipe.xml @@ -0,0 +1,20 @@ + + + + + + diff --git a/app/src/main/res/layout/activity_bridge.xml b/app/src/main/res/layout/activity_bridge.xml new file mode 100644 index 0000000..5367773 --- /dev/null +++ b/app/src/main/res/layout/activity_bridge.xml @@ -0,0 +1,177 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_clean_list.xml b/app/src/main/res/layout/activity_clean_list.xml index 6776de4..3c09b26 100644 --- a/app/src/main/res/layout/activity_clean_list.xml +++ b/app/src/main/res/layout/activity_clean_list.xml @@ -7,11 +7,6 @@ - - - - - @@ -40,6 +35,11 @@ android:src="@drawable/ic_calendar" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_pipe.xml b/app/src/main/res/layout/activity_pipe.xml new file mode 100644 index 0000000..3509b84 --- /dev/null +++ b/app/src/main/res/layout/activity_pipe.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_sign_in.xml b/app/src/main/res/layout/dialog_sign_in.xml index 245dc09..450fa20 100644 --- a/app/src/main/res/layout/dialog_sign_in.xml +++ b/app/src/main/res/layout/dialog_sign_in.xml @@ -27,19 +27,19 @@ android:layout_marginTop="@dimen/margin_10dp" android:fontFamily="sans-serif-condensed-medium" android:format24Hour="HH:MM:ss" - android:text="19:00" android:textColor="@color/mainThemeColor" android:textSize="60sp" /> + android:textSize="20sp" /> diff --git a/app/build.gradle b/app/build.gradle index 6f0b518..bcfdc0d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ applicationId "com.casic.dcms" minSdkVersion 21 targetSdkVersion 30 - versionCode 19 - versionName "v1.0.0.11" + versionCode 20 + versionName "v1.0.0.12" ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 68f46c9..3090a91 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -89,7 +89,10 @@ - + + + + { + + private Context context; + private List dataRows; + private LayoutInflater layoutInflater; + private QMUITipDialog.Builder dialogBuilder; + + public MaintainRecordAdapter(Context context, List dataRows) { + this.context = context; + this.dataRows = dataRows; + layoutInflater = LayoutInflater.from(context); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = layoutInflater.inflate(R.layout.item_maintain_recycleview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + holder.bindView(dataRows.get(position)); + } + + @Override + public int getItemCount() { + return dataRows.size(); + } + + class ItemViewHolder extends RecyclerView.ViewHolder { + + private TextView bridgeNameView; + private ImageView descriptionImageView; + private TextView maintainContentView; + private TextView maintainTimeView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + bridgeNameView = itemView.findViewById(R.id.bridgeNameView); + descriptionImageView = itemView.findViewById(R.id.descriptionImageView); + maintainContentView = itemView.findViewById(R.id.maintainContentView); + maintainTimeView = itemView.findViewById(R.id.maintainTimeView); + } + + void bindView(MaintainRecordBean.DataBean.RowsBean rowsBean) { + bridgeNameView.setText(rowsBean.getBridgeName()); + String description = rowsBean.getDescription(); + if (TextUtils.isEmpty(description)) { + descriptionImageView.setVisibility(View.GONE); + } else { + descriptionImageView.setVisibility(View.VISIBLE); + descriptionImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + QMUITipDialog tipDialog = new QMUITipDialog.Builder(context) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_NOTHING) + .setTipWord(description) + .create(); + tipDialog.show(); + descriptionImageView.postDelayed(new Runnable() { + @Override + public void run() { + tipDialog.dismiss(); + } + }, 2000); + } + }); + } + maintainContentView.setText(rowsBean.getContent()); + maintainTimeView.setText(rowsBean.getMaintainTimeStr()); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java b/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java new file mode 100644 index 0000000..ded4fe1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/MaintainContentBean.java @@ -0,0 +1,41 @@ +package com.casic.dcms.bean; + +public class MaintainContentBean { + + private int code; + private String data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java b/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java new file mode 100644 index 0000000..2beea74 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/MaintainRecordBean.java @@ -0,0 +1,301 @@ +package com.casic.dcms.bean; + +import java.util.List; + +public class MaintainRecordBean { + + private int code; + private DataBean data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + + private int total; + private List rows; + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public static class RowsBean { + /** + * bridgeId : 1 + * bridgeName : 永胜桥 + * category : 桥梁 + * code : 1624359572304 + * content : 日常养护,无异常 + * deptid : 1344110695992258561 + * description : + * id : 1407292162033041409 + * latitude : 39.914705918747295 + * longitude : 116.26295490330527 + * maintainTime : 2021-06-22 00:00:00 + * maintainTimeStr : 2021-06-22 + * name : + * personId : 1344179277212151809 + * personName : + * phone : + * status : + * statusName : + * tender : + * tenderCompany : + * ts : 2021-06-22 + * type : + * typeName : + */ + + private String bridgeId; + private String bridgeName; + private String category; + private String code; + private String content; + private String deptid; + private String description; + private String id; + private String latitude; + private String longitude; + private String maintainTime; + private String maintainTimeStr; + private String name; + private String personId; + private String personName; + private String phone; + private String status; + private String statusName; + private String tender; + private String tenderCompany; + private String ts; + private String type; + private String typeName; + + public String getBridgeId() { + return bridgeId; + } + + public void setBridgeId(String bridgeId) { + this.bridgeId = bridgeId; + } + + public String getBridgeName() { + return bridgeName; + } + + public void setBridgeName(String bridgeName) { + this.bridgeName = bridgeName; + } + + public String getCategory() { + return category; + } + + public void setCategory(String category) { + this.category = category; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLatitude() { + return latitude; + } + + public void setLatitude(String latitude) { + this.latitude = latitude; + } + + public String getLongitude() { + return longitude; + } + + public void setLongitude(String longitude) { + this.longitude = longitude; + } + + public String getMaintainTime() { + return maintainTime; + } + + public void setMaintainTime(String maintainTime) { + this.maintainTime = maintainTime; + } + + public String getMaintainTimeStr() { + return maintainTimeStr; + } + + public void setMaintainTimeStr(String maintainTimeStr) { + this.maintainTimeStr = maintainTimeStr; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPersonId() { + return personId; + } + + public void setPersonId(String personId) { + this.personId = personId; + } + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + 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 getTender() { + return tender; + } + + public void setTender(String tender) { + this.tender = tender; + } + + public String getTenderCompany() { + return tenderCompany; + } + + public void setTenderCompany(String tenderCompany) { + this.tenderCompany = tenderCompany; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getTypeName() { + return typeName; + } + + public void setTypeName(String typeName) { + this.typeName = typeName; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java new file mode 100644 index 0000000..4f7a588 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IMaintainRecordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IMaintainRecordModel { + Subscription sendRetrofitRequest(String startDate, String endDate, int offset); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java new file mode 100644 index 0000000..dce3f91 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ISubmitMaintainModel.java @@ -0,0 +1,8 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ISubmitMaintainModel { + Subscription sendRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/MaintainRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/MaintainRecordModelImpl.java new file mode 100644 index 0000000..35fd486 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/MaintainRecordModelImpl.java @@ -0,0 +1,50 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.MaintainRecordBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class MaintainRecordModelImpl implements IMaintainRecordModel { + + private OnGetRecordListener listener; + + public MaintainRecordModelImpl(OnGetRecordListener recordListener) { + this.listener = recordListener; + } + + public interface OnGetRecordListener { + void onSuccess(MaintainRecordBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String startDate, String endDate, int offset) { + Observable observable = RetrofitServiceManager.getMaintainRecordResult(startDate, endDate, offset); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (e.getCause() != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(MaintainRecordBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java index 06f6fb4..9e2666d 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ProcessPersonModelImpl.java @@ -29,7 +29,7 @@ @Override public Subscription sendRetrofitRequest() { - Observable observable = RetrofitServiceManager.getProcessPerson(); + Observable observable = RetrofitServiceManager.getProcessPersonResult(); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/SubmitMaintainModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/SubmitMaintainModelImpl.java new file mode 100644 index 0000000..2924fbe --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/SubmitMaintainModelImpl.java @@ -0,0 +1,52 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class SubmitMaintainModelImpl implements ISubmitMaintainModel { + + private OnSubmitListener listener; + + public SubmitMaintainModelImpl(OnSubmitListener submitListener) { + this.listener = submitListener; + } + + public interface OnSubmitListener { + void onSuccess(ActionResultBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description) { + Observable observable = RetrofitServiceManager.getAddMaintainRecordResult(bridgeId, + content, maintainTime, personId, longitude, latitude, description); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (e.getCause() != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(ActionResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IMaintainRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IMaintainRecordPresenter.java new file mode 100644 index 0000000..938a484 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IMaintainRecordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IMaintainRecordPresenter { + void onReadyRetrofitRequest(String startDate, String endDate, int offset); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ISubmitMaintainPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ISubmitMaintainPresenter.java new file mode 100644 index 0000000..511e717 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ISubmitMaintainPresenter.java @@ -0,0 +1,8 @@ +package com.casic.dcms.mvp.presenter; + +public interface ISubmitMaintainPresenter { + void onReadyRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/MaintainRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/MaintainRecordPresenterImpl.java new file mode 100644 index 0000000..fd99e30 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/MaintainRecordPresenterImpl.java @@ -0,0 +1,39 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.MaintainRecordBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.MaintainRecordModelImpl; +import com.casic.dcms.mvp.view.IMaintainRecordView; + +public class MaintainRecordPresenterImpl extends BasePresenter implements IMaintainRecordPresenter, MaintainRecordModelImpl.OnGetRecordListener { + + private IMaintainRecordView view; + private MaintainRecordModelImpl model; + + public MaintainRecordPresenterImpl(IMaintainRecordView cleanToiletRecordView) { + this.view = cleanToiletRecordView; + model = new MaintainRecordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String startDate, String endDate, int offset) { + view.showProgress(); + addSubscription(model.sendRetrofitRequest(startDate, endDate, offset)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(MaintainRecordBean result) { + view.hideProgress(); + view.obtainRecordResult(result); + } + + @Override + public void onFailure(Throwable throwable) { + view.hideProgress(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/SubmitMaintainPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/SubmitMaintainPresenterImpl.java new file mode 100644 index 0000000..7722427 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/SubmitMaintainPresenterImpl.java @@ -0,0 +1,42 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.SubmitMaintainModelImpl; +import com.casic.dcms.mvp.view.ISubmitMaintainView; + +public class SubmitMaintainPresenterImpl extends BasePresenter implements ISubmitMaintainPresenter, SubmitMaintainModelImpl.OnSubmitListener { + + private ISubmitMaintainView view; + private SubmitMaintainModelImpl actionModel; + + public SubmitMaintainPresenterImpl(ISubmitMaintainView submitCaseView) { + this.view = submitCaseView; + actionModel = new SubmitMaintainModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String bridgeId, String content, String maintainTime, String personId, + String longitude, String latitude, String description) { + view.showProgress(); + addSubscription(actionModel.sendRetrofitRequest(bridgeId, content, maintainTime, personId, longitude, + latitude, description)); + } + + @Override + public void onSuccess(ActionResultBean resultBean) { + view.hideProgress(); + view.obtainSubmitResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + view.hideProgress(); + view.obtainDataFail(); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IMaintainRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/IMaintainRecordView.java new file mode 100644 index 0000000..8ff5189 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IMaintainRecordView.java @@ -0,0 +1,11 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.MaintainRecordBean; + +public interface IMaintainRecordView { + void obtainRecordResult(MaintainRecordBean resultBean); + + void showProgress(); + + void hideProgress(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ISubmitMaintainView.java b/app/src/main/java/com/casic/dcms/mvp/view/ISubmitMaintainView.java new file mode 100644 index 0000000..75a0629 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/ISubmitMaintainView.java @@ -0,0 +1,13 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.ActionResultBean; + +public interface ISubmitMaintainView { + void showProgress(); + + void hideProgress(); + + void obtainSubmitResult(ActionResultBean resultBean); + + void obtainDataFail(); +} diff --git a/app/src/main/java/com/casic/dcms/ui/BridgeMaintainActivity.java b/app/src/main/java/com/casic/dcms/ui/BridgeMaintainActivity.java new file mode 100644 index 0000000..84b0eef --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/BridgeMaintainActivity.java @@ -0,0 +1,239 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.content.Intent; +import android.location.Location; +import android.text.TextUtils; +import android.view.View; +import android.widget.EditText; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.amap.api.services.core.LatLonPoint; +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.mvp.presenter.SubmitMaintainPresenterImpl; +import com.casic.dcms.mvp.view.ISubmitMaintainView; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; +import com.casic.dcms.utils.SaveKeyValues; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.utils.callback.IAddressListener; +import com.casic.dcms.utils.callback.ILocationListener; +import com.casic.dcms.widgets.SignInDialog; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.util.Timer; +import java.util.TimerTask; + +import butterknife.BindView; +import butterknife.OnClick; + +public class BridgeMaintainActivity extends BaseActivity implements View.OnClickListener, ISubmitMaintainView { + + private static final String TAG = "BridgeMaintainActivity"; + private Context context = this; + @BindView(R.id.topLayout) + QMUITopBarLayout topLayout; + @BindView(R.id.bridgeNameView) + TextView bridgeNameView; + @BindView(R.id.maintainView) + TextView maintainView; + @BindView(R.id.maintainDateView) + TextView maintainDateView; + @BindView(R.id.liablePersonView) + TextView liablePersonView; + @BindView(R.id.submitButton) + QMUIRoundButton submitButton; + //以下非必填 + @BindView(R.id.remarksView) + EditText remarksView; + + private String bridgeId = ""; + private SubmitMaintainPresenterImpl submitMaintainPresenter; + + @Override + public int initLayoutView() { + return R.layout.activity_bridge; + } + + @Override + protected void setupTopBarLayout() { + topLayout.setTitle("路桥养护").setTextColor(ContextCompat.getColor(this, R.color.white)); + topLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + topLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + topLayout.addRightImageButton(R.drawable.ic_more, 2).setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + startActivity(new Intent(context, MaintainRecordActivity.class)); + } + }); + } + + @Override + public void initData() { + submitMaintainPresenter = new SubmitMaintainPresenterImpl(this); + } + + @Override + public void initEvent() { + submitButton.setChangeAlphaWhenPress(true); + liablePersonView.setText(StringHelper.getUserAccount()); + liablePersonView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); + + new Timer().schedule(new TimerTask() { + @Override + public void run() { + String systemDate = TimeOrDateUtil.timestampToDate(System.currentTimeMillis()); + maintainDateView.post(new Runnable() { + @Override + public void run() { + maintainDateView.setText(systemDate); + maintainDateView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); + } + }); + } + }, 0, 1000); + } + + @OnClick({R.id.bridgeLayout, R.id.maintainContentLayout, R.id.submitButton}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.bridgeLayout: + new QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("选择桥梁") + .addItem("永胜桥") + .addItem("黄洲桥") + .addItem("光明桥") + .setGravityCenter(true) + .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + + bridgeId = String.valueOf((1 + position)); + bridgeNameView.setText(tag); + bridgeNameView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); + } + }).build().show(); + break; + case R.id.maintainContentLayout: + new QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("养护内容") + .addItem("日常养护,无异常") + .addItem("清除表面污垢") + .addItem("修补混凝土空洞、破损、剥落和表面风化及裂缝") + .addItem("清除暴露钢筋的锈渍、恢复保护层") + .addItem("处理各种横、纵向构件的开裂、开焊和锈蚀") + .setGravityCenter(true) + .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + + maintainView.setText(tag); + maintainView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); + } + }).build().show(); + break; + case R.id.submitButton: + //获取定位信息 + LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + + } + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + if (aMapLocation != null) { + if (TextUtils.isEmpty(bridgeId)) { + ToastHelper.showToast("请先选择养护的桥梁", ToastHelper.WARING); + return; + } + String maintainContent = maintainView.getText().toString(); + if (TextUtils.isEmpty(maintainContent)) { + ToastHelper.showToast("请选择养护的内容", ToastHelper.WARING); + return; + } + + double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + LatLonPoint latLonPoint = new LatLonPoint(gcjToWgs[1], gcjToWgs[0]); + LocationHelper.antiCodingLocation(context, latLonPoint, new IAddressListener() { + @Override + public void onGetAddress(String address) { + SaveKeyValues.putValue("maintainAddress", address); + } + }); + //提交养护记录 + submitMaintainPresenter.onReadyRetrofitRequest(bridgeId, maintainContent, + maintainDateView.getText().toString(), + StringHelper.getUserId(), String.valueOf(gcjToWgs[0]), + String.valueOf(gcjToWgs[1]), + StringHelper.filterString(remarksView.getText().toString())); + } else { + ToastHelper.showToast("当前信号较弱,无法提交养护记录", ToastHelper.WARING); + } + } + }, true); + break; + default: + throw new IllegalStateException("Unexpected value: " + v.getId()); + } + } + + @Override + public void showProgress() { + OtherUtils.showLoadingDialog(this, "养护记录签到中,请稍后"); + } + + @Override + public void hideProgress() { + OtherUtils.dismissLoadingDialog(); + } + + @Override + public void obtainSubmitResult(ActionResultBean resultBean) { + String maintainAddress = (String) SaveKeyValues.getValue("maintainAddress", ""); + if (resultBean.isSuccess()) { + new SignInDialog.Builder() + .setContext(this) + .setTitle("桥梁养护记录提交成功") + .setAddress(maintainAddress.equals("") ? "详细位置解析失败" : maintainAddress) + .setOnDialogClickListener(new SignInDialog.OnDialogClickListener() { + @Override + public void onViewClick() { + startActivity(new Intent(context, MaintainRecordActivity.class)); + finish(); + } + }).build().show(); + } + } + + @Override + public void obtainDataFail() { + ToastHelper.showToast("操作失败", ToastHelper.ERROR); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (submitMaintainPresenter != null) { + submitMaintainPresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java index 7221e95..381b704 100644 --- a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java @@ -25,6 +25,7 @@ import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.datepicker.DatePopupWindow; +import com.qmuiteam.qmui.widget.QMUIEmptyView; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; @@ -38,8 +39,8 @@ public class CleanResultListActivity extends BaseCaseActivity implements ICleanToiletRecordView { - // @BindView(R.id.emptyView) -// QMUIEmptyView emptyView; + @BindView(R.id.emptyView) + QMUIEmptyView emptyView; @BindView(R.id.dateView) TextView dateView; @BindView(R.id.calendarView) @@ -126,7 +127,6 @@ @Override public void obtainCleanRecordResult(CleanRecordBean resultBean) { -// Log.d("TAG", "obtainCleanRecordResult: " + new Gson().toJson(resultBean)); if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); if (isRefresh) { @@ -175,9 +175,9 @@ } else { //首次加载数据 if (resultActivity.dataBeans.size() == 0) { -// resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); + resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); } else { -// resultActivity.emptyView.hide(); + resultActivity.emptyView.hide(); resultActivity.adapter = new RecordListAdapter(resultActivity, resultActivity.dataBeans); resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); diff --git a/app/src/main/java/com/casic/dcms/ui/MaintainRecordActivity.java b/app/src/main/java/com/casic/dcms/ui/MaintainRecordActivity.java new file mode 100644 index 0000000..05c41c9 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/MaintainRecordActivity.java @@ -0,0 +1,194 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.content.Intent; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.MaintainRecordAdapter; +import com.casic.dcms.base.BaseCaseActivity; +import com.casic.dcms.bean.MaintainRecordBean; +import com.casic.dcms.mvp.presenter.MaintainRecordPresenterImpl; +import com.casic.dcms.mvp.view.IMaintainRecordView; +import com.casic.dcms.utils.CalendarUtil; +import com.casic.dcms.utils.OtherUtils; +import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.widgets.datepicker.DatePopupWindow; +import com.qmuiteam.qmui.widget.QMUIEmptyView; +import com.scwang.smartrefresh.layout.SmartRefreshLayout; +import com.scwang.smartrefresh.layout.api.RefreshLayout; +import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; +import com.scwang.smartrefresh.layout.listener.OnRefreshListener; + +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class MaintainRecordActivity extends BaseCaseActivity implements IMaintainRecordView { + + @BindView(R.id.emptyView) + QMUIEmptyView emptyView; + @BindView(R.id.dateView) + TextView dateView; + @BindView(R.id.calendarView) + ImageView calendarView; + @BindView(R.id.refreshLayout) + SmartRefreshLayout refreshLayout; + @BindView(R.id.recordRecyclerView) + RecyclerView recordRecyclerView; + + private Context context = this; + private int pageIndex = 1; + private boolean isRefresh, isLoadMore = false; + private WeakReferenceHandler weakReferenceHandler; + private List dataBeans = new ArrayList<>(); + private MaintainRecordPresenterImpl recordPresenter; + private MaintainRecordAdapter adapter; + private int startGroup = -1; + private int endGroup = -1; + private int startChild = -1; + private int endChild = -1; + + @Override + protected String setTitleName() { + return "桥梁养护记录"; + } + + @Override + public int initLayoutView() { + return R.layout.activity_maintain_record; + } + + @Override + public void initData() { + weakReferenceHandler = new WeakReferenceHandler(this); + recordPresenter = new MaintainRecordPresenterImpl(this); + recordPresenter.onReadyRetrofitRequest("", "", pageIndex); + } + + @Override + public void initEvent() { + calendarView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + new DatePopupWindow + .Builder(MaintainRecordActivity.this, CalendarUtil.obtainLastTwoMonth(), v)//初始化 + .setInitSelect(startGroup, startChild, endGroup, endChild)//设置上一次选中的区间状态 + .setInitDay(true)//默认为true,UI内容为共几天、开始、结束;当为false时,UI内容为共几晚、入住、离开 + .setDateOnClickListener(new DatePopupWindow.DateOnClickListener() {//设置监听 + //点击完成按钮后回调返回方法 + @Override + public void getDate(String startDate, String endDate, int startGroupPosition, int + startChildPosition, int endGroupPosition, int endChildPosition) { + startGroup = startGroupPosition;//开始月份位置 + startChild = startChildPosition;//开始对应月份中日的位置 + endGroup = endGroupPosition;//结束月份位置 + endChild = endChildPosition;//结束对应月份中日的位置 + dateView.setText(startDate + "~" + endDate); + recordPresenter.onReadyRetrofitRequest(startDate, endDate, pageIndex); + } + }).builder(); + } + }); + refreshLayout.setOnRefreshListener(new OnRefreshListener() { + @Override + public void onRefresh(@NonNull final RefreshLayout refreshLayout) { + isRefresh = true; + //刷新之后页码重置 + pageIndex = 1; + recordPresenter.onReadyRetrofitRequest("", "", pageIndex); + } + }); + refreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() { + @Override + public void onLoadMore(@NonNull final RefreshLayout refreshLayout) { + isLoadMore = true; + pageIndex++; + recordPresenter.onReadyRetrofitRequest("", "", pageIndex); + } + }); + } + + @Override + public void obtainRecordResult(MaintainRecordBean resultBean) { + if (resultBean.isSuccess()) { + List dataRows = resultBean.getData().getRows(); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + ToastHelper.showToast("到底了,别拉了", ToastHelper.INFO); + } + dataBeans.addAll(dataRows); + refreshLayout.finishLoadMore(); + isLoadMore = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(20210622); + } + } + + @Override + public void showProgress() { + OtherUtils.showLoadingDialog(this, "查询记录中,请稍后"); + } + + @Override + public void hideProgress() { + OtherUtils.dismissLoadingDialog(); + } + + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(MaintainRecordActivity activity) { + reference = new WeakReference<>(activity); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + MaintainRecordActivity resultActivity = reference.get(); + if (msg.what == 20210622) { + if (resultActivity.isRefresh || resultActivity.isLoadMore) { + resultActivity.adapter.notifyDataSetChanged(); + } else { + //首次加载数据 + if (resultActivity.dataBeans.size() == 0) { + resultActivity.emptyView.show("抱歉,没有查到相关养护记录", null); + } else { + resultActivity.emptyView.hide(); + resultActivity.adapter = new MaintainRecordAdapter(resultActivity, resultActivity.dataBeans); + resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); + resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); + resultActivity.recordRecyclerView.setAdapter(resultActivity.adapter); + } + } + } + } + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (recordPresenter != null) { + recordPresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/PipelineManagerActivity.java b/app/src/main/java/com/casic/dcms/ui/PipelineManagerActivity.java new file mode 100644 index 0000000..fa77936 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/PipelineManagerActivity.java @@ -0,0 +1,27 @@ +package com.casic.dcms.ui; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; + +public class PipelineManagerActivity extends BaseActivity { + + @Override + public int initLayoutView() { + return R.layout.activity_pipe; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java index ac995d3..4959539 100644 --- a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java @@ -300,7 +300,8 @@ @Override public void onAMapLocationGet(AMapLocation aMapLocation) { if (aMapLocation != null) { - Point point = new Point(aMapLocation.getLongitude(), aMapLocation.getLatitude(), mapView.getSpatialReference()); + double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); mapView.setViewpointCenterAsync(point, 1200);//标注到指定经纬度并放大地图显示 //添加图片Marker addPictureMarker(point); @@ -311,11 +312,9 @@ ToastHelper.showToast("公厕标识不能为空", ToastHelper.WARING); return; } - double longitude = aMapLocation.getLongitude(); - double latitude = aMapLocation.getLatitude(); String cleanTime = TimeOrDateUtil.timestampToCompleteDate(System.currentTimeMillis()); cleanToiletPresenter.onReadyRetrofitRequest(toiletId, StringHelper.getUserId(), - String.valueOf(longitude), String.valueOf(latitude), cleanTime, imagePath, + String.valueOf(gcjToWgs[0]), String.valueOf(gcjToWgs[1]), cleanTime, imagePath, StringHelper.filterString(workContentView.getText().toString())); } } @@ -416,15 +415,18 @@ @Override public void obtainCleanResult(ActionResultBean resultBean) { -// Log.d(TAG, "obtainCleanResult: " + new Gson().toJson(resultBean)); if (resultBean.isSuccess()) { - new SignInDialog.Builder().setContext(this).setAddress(locationStreetView.getText().toString()).setOnDialogClickListener(new SignInDialog.OnDialogClickListener() { - @Override - public void onViewClick() { - startActivity(new Intent(context, CleanResultListActivity.class)); - PublicToiletActivity.this.finish(); - } - }).build().show(); + new SignInDialog.Builder() + .setContext(this) + .setTitle("保洁保卡成功") + .setAddress(locationStreetView.getText().toString()) + .setOnDialogClickListener(new SignInDialog.OnDialogClickListener() { + @Override + public void onViewClick() { + startActivity(new Intent(context, CleanResultListActivity.class)); + PublicToiletActivity.this.finish(); + } + }).build().show(); } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java index 03438b0..42d29a4 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java @@ -18,6 +18,7 @@ import com.casic.dcms.mvp.presenter.UserDataPresenterImpl; import com.casic.dcms.mvp.view.IHomePageView; import com.casic.dcms.mvp.view.IUserDataView; +import com.casic.dcms.ui.BridgeMaintainActivity; import com.casic.dcms.ui.CaseCheckActivity; import com.casic.dcms.ui.CaseHandleActivity; import com.casic.dcms.ui.CaseOnMapActivity; @@ -32,6 +33,7 @@ import com.casic.dcms.ui.OvertimeCaseActivity; import com.casic.dcms.ui.PackageHandleActivity; import com.casic.dcms.ui.PersonOnlineActivity; +import com.casic.dcms.ui.PipelineManagerActivity; import com.casic.dcms.ui.PublicToiletActivity; import com.casic.dcms.ui.UrgentCaseActivity; import com.casic.dcms.utils.StringHelper; @@ -161,6 +163,12 @@ case "部门处置": intent.setClass(context, DeptHandleActivity.class); break; + case "路桥养护": + intent.setClass(context, BridgeMaintainActivity.class); + break; + case "管网管理": + intent.setClass(context, PipelineManagerActivity.class); + break; default: break; } diff --git a/app/src/main/java/com/casic/dcms/utils/Constant.java b/app/src/main/java/com/casic/dcms/utils/Constant.java index d9c1d60..9bbbdb0 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -35,7 +35,8 @@ public static final String IP_KEY = "BASE_IP"; - public static final long FIVE_YEARS = 5L * 365 * 1000 * 60 * 60 * 24L; + public static final long FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L; + public static final long ONE_YEAR = 365 * 60 * 60 * 24 * 1000L; public static final long IMAGE_MINUS_SIZE = 100 * 1024; public static final long HTTP_TIMEOUT = 30L; public static final int PERMISSIONS_CODE = 999; diff --git a/app/src/main/java/com/casic/dcms/utils/LocationHelper.java b/app/src/main/java/com/casic/dcms/utils/LocationHelper.java index 8d95580..79aedbf 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocationHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/LocationHelper.java @@ -40,7 +40,6 @@ private static final double a = 6378245.0; // a: 卫星椭球坐标投影到平面地图坐标系的投影因子。 private static final double ee = 0.00669342162296594323; // ee: 椭球的偏心率平方。 - /** * 高德sdk定位 */ diff --git a/app/src/main/java/com/casic/dcms/utils/StringHelper.java b/app/src/main/java/com/casic/dcms/utils/StringHelper.java index 6bea75a..2faeae4 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -250,8 +250,12 @@ return R.drawable.ic_shangpu; case "部门处置": return R.drawable.ic_dept; + case "路桥养护": + return R.drawable.ic_bridge; + case "管网管理": + return R.drawable.ic_pipe; default: - return R.mipmap.app_logo; + return R.drawable.ic_default_icon; } } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index dc53815..f0be407 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -21,6 +21,8 @@ import com.casic.dcms.bean.HighEventBean; import com.casic.dcms.bean.HomePageBean; import com.casic.dcms.bean.LoginResultBean; +import com.casic.dcms.bean.MaintainContentBean; +import com.casic.dcms.bean.MaintainRecordBean; import com.casic.dcms.bean.NewVersionBean; import com.casic.dcms.bean.OnlinePersonBean; import com.casic.dcms.bean.OvertimeCaseBean; @@ -616,4 +618,42 @@ @POST("/mgr/simplelist") Observable obtainNextProcessPerson(@Header("token") String token, @Field("roleTips") String roleTips); + + /** + * 根据养护类型获取养护内容 + *

+ * http://111.198.10.15:11409/bridge/maintain/contentByType + */ + @FormUrlEncoded + @POST("/bridge/maintain/contentByType") + Observable obtainMaintainContent(@Header("token") String token, + @Field("type") String type); + + /** + * 桥梁新增打卡记录 + *

+ * http://111.198.10.15:11409/bridge/maintain/addApp + */ + @FormUrlEncoded + @POST("/bridge/maintain/addApp") + Observable addMaintainRecord(@Header("token") String token, + @Field("bridgeId") String bridgeId, + @Field("content") String content, + @Field("maintainTime") String maintainTime, + @Field("personId") String personId, + @Field("longitude") String longitude, + @Field("latitude") String latitude, + @Field("description") String description); + + /** + * 桥梁养护记录 + *

+ * http://111.198.10.15:11409/bridge/maintain/listPage?startDate=2021-06-21&endDate=2021-06-22 + */ + @GET("/bridge/maintain/listPage") + Observable obtainMaintainRecord(@Header("token") String token, + @Query("startDate") String beginDate, + @Query("endDate") String endDate, + @Query("limit") int limit, + @Query("offset") int offset); } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index 67e8da1..283354a 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -23,6 +23,8 @@ import com.casic.dcms.bean.HighEventBean; import com.casic.dcms.bean.HomePageBean; import com.casic.dcms.bean.LoginResultBean; +import com.casic.dcms.bean.MaintainContentBean; +import com.casic.dcms.bean.MaintainRecordBean; import com.casic.dcms.bean.NewVersionBean; import com.casic.dcms.bean.OnlinePersonBean; import com.casic.dcms.bean.OvertimeCaseBean; @@ -638,9 +640,41 @@ /** * 获取下级处置员 */ - public static Observable getProcessPerson() { + public static Observable getProcessPersonResult() { Retrofit retrofit = createRetrofit(); RetrofitService service = retrofit.create(RetrofitService.class); return service.obtainNextProcessPerson(AuthenticationHelper.getToken(), "process"); } + + /** + * 根据养护类型获取养护内容 + */ + public static Observable getMaintainContentResult(String type) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainMaintainContent(AuthenticationHelper.getToken(), type); + } + + /** + * 桥梁新增打卡记录 + */ + public static Observable getAddMaintainRecordResult(String bridgeId, String content, + String maintainTime, String personId, + String longitude, String latitude, + String description) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.addMaintainRecord(AuthenticationHelper.getToken(), bridgeId, content, maintainTime, + personId, longitude, latitude, description); + } + + /** + * 桥梁养护记录 + */ + public static Observable getMaintainRecordResult(String startDate, String endDate, int offset) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainMaintainRecord(AuthenticationHelper.getToken(), startDate, endDate, Constant.PAGE_LIMIT, + offset); + } } diff --git a/app/src/main/java/com/casic/dcms/widgets/SignInDialog.java b/app/src/main/java/com/casic/dcms/widgets/SignInDialog.java index ae61dd1..b96ff2f 100644 --- a/app/src/main/java/com/casic/dcms/widgets/SignInDialog.java +++ b/app/src/main/java/com/casic/dcms/widgets/SignInDialog.java @@ -2,13 +2,19 @@ import android.app.Dialog; import android.content.Context; +import android.graphics.Color; +import android.graphics.drawable.ColorDrawable; import android.os.Bundle; import android.text.TextUtils; import android.view.View; +import android.view.Window; +import android.view.WindowManager; import android.widget.TextView; import com.casic.dcms.R; +import com.casic.dcms.base.BaseApplication; import com.casic.dcms.utils.TimeOrDateUtil; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; import java.util.Timer; import java.util.TimerTask; @@ -16,11 +22,13 @@ public class SignInDialog extends Dialog implements View.OnClickListener { private static final String TAG = "SignInDialog"; + private String title; private String address; private OnDialogClickListener listener; private SignInDialog(Builder builder) { super(builder.mContext); + this.title = builder.title; this.address = builder.address; this.listener = builder.listener; } @@ -28,6 +36,16 @@ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + + //手动设置dialog宽度 + Window window = getWindow(); + window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); + window.getDecorView().setBackgroundColor(Color.TRANSPARENT); + WindowManager.LayoutParams params = window.getAttributes(); + params.width = QMUIDisplayHelper.dp2px(BaseApplication.getInstance(), 300); + params.height = WindowManager.LayoutParams.WRAP_CONTENT; + window.setAttributes(params); + setContentView(R.layout.dialog_sign_in); initView(); } @@ -41,6 +59,10 @@ clockView.post(() -> clockView.setText(systemTime)); } }, 0, 1000); + TextView optionTitleView = findViewById(R.id.optionTitleView); + if (!TextUtils.isEmpty(title)) { + optionTitleView.setText(title); + } TextView signInPlaceView = findViewById(R.id.signInPlaceView); if (!TextUtils.isEmpty(address)) { signInPlaceView.setText(address); @@ -62,6 +84,7 @@ public static class Builder { private Context mContext; + private String title; private String address; private OnDialogClickListener listener; @@ -70,6 +93,11 @@ return this; } + public Builder setTitle(String title) { + this.title = title; + return this; + } + public Builder setAddress(String address) { this.address = address; return this; diff --git a/app/src/main/res/drawable/ic_bridge.xml b/app/src/main/res/drawable/ic_bridge.xml new file mode 100644 index 0000000..7aa4637 --- /dev/null +++ b/app/src/main/res/drawable/ic_bridge.xml @@ -0,0 +1,11 @@ + + + diff --git a/app/src/main/res/drawable/ic_default_icon.xml b/app/src/main/res/drawable/ic_default_icon.xml new file mode 100644 index 0000000..3c41da5 --- /dev/null +++ b/app/src/main/res/drawable/ic_default_icon.xml @@ -0,0 +1,18 @@ + + + + + + diff --git a/app/src/main/res/drawable/ic_info.xml b/app/src/main/res/drawable/ic_info.xml new file mode 100644 index 0000000..6562ce3 --- /dev/null +++ b/app/src/main/res/drawable/ic_info.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/src/main/res/drawable/ic_pipe.xml b/app/src/main/res/drawable/ic_pipe.xml new file mode 100644 index 0000000..b005f98 --- /dev/null +++ b/app/src/main/res/drawable/ic_pipe.xml @@ -0,0 +1,20 @@ + + + + + + diff --git a/app/src/main/res/layout/activity_bridge.xml b/app/src/main/res/layout/activity_bridge.xml new file mode 100644 index 0000000..5367773 --- /dev/null +++ b/app/src/main/res/layout/activity_bridge.xml @@ -0,0 +1,177 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_clean_list.xml b/app/src/main/res/layout/activity_clean_list.xml index 6776de4..3c09b26 100644 --- a/app/src/main/res/layout/activity_clean_list.xml +++ b/app/src/main/res/layout/activity_clean_list.xml @@ -7,11 +7,6 @@ - - - - - @@ -40,6 +35,11 @@ android:src="@drawable/ic_calendar" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_pipe.xml b/app/src/main/res/layout/activity_pipe.xml new file mode 100644 index 0000000..3509b84 --- /dev/null +++ b/app/src/main/res/layout/activity_pipe.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_sign_in.xml b/app/src/main/res/layout/dialog_sign_in.xml index 245dc09..450fa20 100644 --- a/app/src/main/res/layout/dialog_sign_in.xml +++ b/app/src/main/res/layout/dialog_sign_in.xml @@ -27,19 +27,19 @@ android:layout_marginTop="@dimen/margin_10dp" android:fontFamily="sans-serif-condensed-medium" android:format24Hour="HH:MM:ss" - android:text="19:00" android:textColor="@color/mainThemeColor" android:textSize="60sp" /> + android:textSize="20sp" /> diff --git a/app/src/main/res/layout/item_maintain_recycleview.xml b/app/src/main/res/layout/item_maintain_recycleview.xml new file mode 100644 index 0000000..388a87f --- /dev/null +++ b/app/src/main/res/layout/item_maintain_recycleview.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + \ No newline at end of file