diff --git a/app/build.gradle b/app/build.gradle index 772c9e1..098120a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -73,7 +73,7 @@ dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') //基础依赖库 - implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.4.3' + implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.4.5' implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'androidx.core:core-ktx:1.9.0' implementation 'com.google.android.material:material:1.6.1' diff --git a/app/build.gradle b/app/build.gradle index 772c9e1..098120a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -73,7 +73,7 @@ dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') //基础依赖库 - implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.4.3' + implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.4.5' implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'androidx.core:core-ktx:1.9.0' implementation 'com.google.android.material:material:1.6.1' diff --git a/app/src/main/java/com/casic/br/operationsite/extensions/String.kt b/app/src/main/java/com/casic/br/operationsite/extensions/String.kt index 9f7962e..0ba91ea 100644 --- a/app/src/main/java/com/casic/br/operationsite/extensions/String.kt +++ b/app/src/main/java/com/casic/br/operationsite/extensions/String.kt @@ -70,4 +70,24 @@ val p = Pattern.compile(regEx) val m = p.matcher(this) return m.replaceAll("").trim { it <= ' ' } +} + +fun String.isIdCard(): Boolean { + val regExp_15 = + "^[1-9][0-9]{5}[0-9]{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)[0-9]{2}[0-9]" + + val regExp_18 = + "^[1-9][0-9]{5}(18|19|20)[0-9]{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)[0-9]{3}([0-9]|(X|x))" + + return if (this.length != 15 || this.length != 18) { + false + } else { + if (this.length == 15) { + val pattern = Pattern.compile(regExp_15) + pattern.matcher(this).matches() + } else { + val pattern = Pattern.compile(regExp_18) + pattern.matcher(this).matches() + } + } } \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 772c9e1..098120a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -73,7 +73,7 @@ dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') //基础依赖库 - implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.4.3' + implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.4.5' implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'androidx.core:core-ktx:1.9.0' implementation 'com.google.android.material:material:1.6.1' diff --git a/app/src/main/java/com/casic/br/operationsite/extensions/String.kt b/app/src/main/java/com/casic/br/operationsite/extensions/String.kt index 9f7962e..0ba91ea 100644 --- a/app/src/main/java/com/casic/br/operationsite/extensions/String.kt +++ b/app/src/main/java/com/casic/br/operationsite/extensions/String.kt @@ -70,4 +70,24 @@ val p = Pattern.compile(regEx) val m = p.matcher(this) return m.replaceAll("").trim { it <= ' ' } +} + +fun String.isIdCard(): Boolean { + val regExp_15 = + "^[1-9][0-9]{5}[0-9]{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)[0-9]{2}[0-9]" + + val regExp_18 = + "^[1-9][0-9]{5}(18|19|20)[0-9]{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)[0-9]{3}([0-9]|(X|x))" + + return if (this.length != 15 || this.length != 18) { + false + } else { + if (this.length == 15) { + val pattern = Pattern.compile(regExp_15) + pattern.matcher(this).matches() + } else { + val pattern = Pattern.compile(regExp_18) + pattern.matcher(this).matches() + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/model/WorkerModel.java b/app/src/main/java/com/casic/br/operationsite/model/WorkerModel.java new file mode 100644 index 0000000..0255754 --- /dev/null +++ b/app/src/main/java/com/casic/br/operationsite/model/WorkerModel.java @@ -0,0 +1,158 @@ +package com.casic.br.operationsite.model; + +public class WorkerModel { + + private String createTime; + private String deptId; + private String deptName; + private String enterReason; + private String gender; + private String genderName; + private String id; + private String idCardNumber; + private String isRegister; + private String ownerShip; + private String phoneNumber; + private String registerTime; + private String status; + private String statusName; + private String workerAvatar; + private String workerName; + private String workerType; + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getEnterReason() { + return enterReason; + } + + public void setEnterReason(String enterReason) { + this.enterReason = enterReason; + } + + public String getGender() { + return gender; + } + + public void setGender(String gender) { + this.gender = gender; + } + + public String getGenderName() { + return genderName; + } + + public void setGenderName(String genderName) { + this.genderName = genderName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getIdCardNumber() { + return idCardNumber; + } + + public void setIdCardNumber(String idCardNumber) { + this.idCardNumber = idCardNumber; + } + + public String getIsRegister() { + return isRegister; + } + + public void setIsRegister(String isRegister) { + this.isRegister = isRegister; + } + + public String getOwnerShip() { + return ownerShip; + } + + public void setOwnerShip(String ownerShip) { + this.ownerShip = ownerShip; + } + + public String getPhoneNumber() { + return phoneNumber; + } + + public void setPhoneNumber(String phoneNumber) { + this.phoneNumber = phoneNumber; + } + + public String getRegisterTime() { + return registerTime; + } + + public void setRegisterTime(String registerTime) { + this.registerTime = registerTime; + } + + 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 getWorkerAvatar() { + return workerAvatar; + } + + public void setWorkerAvatar(String workerAvatar) { + this.workerAvatar = workerAvatar; + } + + public String getWorkerName() { + return workerName; + } + + public void setWorkerName(String workerName) { + this.workerName = workerName; + } + + public String getWorkerType() { + return workerType; + } + + public void setWorkerType(String workerType) { + this.workerType = workerType; + } +} diff --git a/app/build.gradle b/app/build.gradle index 772c9e1..098120a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -73,7 +73,7 @@ dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') //基础依赖库 - implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.4.3' + implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.4.5' implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'androidx.core:core-ktx:1.9.0' implementation 'com.google.android.material:material:1.6.1' diff --git a/app/src/main/java/com/casic/br/operationsite/extensions/String.kt b/app/src/main/java/com/casic/br/operationsite/extensions/String.kt index 9f7962e..0ba91ea 100644 --- a/app/src/main/java/com/casic/br/operationsite/extensions/String.kt +++ b/app/src/main/java/com/casic/br/operationsite/extensions/String.kt @@ -70,4 +70,24 @@ val p = Pattern.compile(regEx) val m = p.matcher(this) return m.replaceAll("").trim { it <= ' ' } +} + +fun String.isIdCard(): Boolean { + val regExp_15 = + "^[1-9][0-9]{5}[0-9]{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)[0-9]{2}[0-9]" + + val regExp_18 = + "^[1-9][0-9]{5}(18|19|20)[0-9]{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)[0-9]{3}([0-9]|(X|x))" + + return if (this.length != 15 || this.length != 18) { + false + } else { + if (this.length == 15) { + val pattern = Pattern.compile(regExp_15) + pattern.matcher(this).matches() + } else { + val pattern = Pattern.compile(regExp_18) + pattern.matcher(this).matches() + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/model/WorkerModel.java b/app/src/main/java/com/casic/br/operationsite/model/WorkerModel.java new file mode 100644 index 0000000..0255754 --- /dev/null +++ b/app/src/main/java/com/casic/br/operationsite/model/WorkerModel.java @@ -0,0 +1,158 @@ +package com.casic.br.operationsite.model; + +public class WorkerModel { + + private String createTime; + private String deptId; + private String deptName; + private String enterReason; + private String gender; + private String genderName; + private String id; + private String idCardNumber; + private String isRegister; + private String ownerShip; + private String phoneNumber; + private String registerTime; + private String status; + private String statusName; + private String workerAvatar; + private String workerName; + private String workerType; + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getEnterReason() { + return enterReason; + } + + public void setEnterReason(String enterReason) { + this.enterReason = enterReason; + } + + public String getGender() { + return gender; + } + + public void setGender(String gender) { + this.gender = gender; + } + + public String getGenderName() { + return genderName; + } + + public void setGenderName(String genderName) { + this.genderName = genderName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getIdCardNumber() { + return idCardNumber; + } + + public void setIdCardNumber(String idCardNumber) { + this.idCardNumber = idCardNumber; + } + + public String getIsRegister() { + return isRegister; + } + + public void setIsRegister(String isRegister) { + this.isRegister = isRegister; + } + + public String getOwnerShip() { + return ownerShip; + } + + public void setOwnerShip(String ownerShip) { + this.ownerShip = ownerShip; + } + + public String getPhoneNumber() { + return phoneNumber; + } + + public void setPhoneNumber(String phoneNumber) { + this.phoneNumber = phoneNumber; + } + + public String getRegisterTime() { + return registerTime; + } + + public void setRegisterTime(String registerTime) { + this.registerTime = registerTime; + } + + 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 getWorkerAvatar() { + return workerAvatar; + } + + public void setWorkerAvatar(String workerAvatar) { + this.workerAvatar = workerAvatar; + } + + public String getWorkerName() { + return workerName; + } + + public void setWorkerName(String workerName) { + this.workerName = workerName; + } + + public String getWorkerType() { + return workerType; + } + + public void setWorkerType(String workerType) { + this.workerType = workerType; + } +} diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt index 945a924..a6bcfb4 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt @@ -68,10 +68,7 @@ * 报警详情 */ @GET("/alarm/detail") - suspend fun obtainAlarmDetail( - @Header("token") token: String, - @Query("id") id: String - ): String + suspend fun obtainAlarmDetail(@Header("token") token: String, @Query("id") id: String): String /** * 上传图片 @@ -80,34 +77,17 @@ */ @Multipart @POST("/file/upload") - suspend fun uploadImage( - @Header("token") token: String, - @Part file: MultipartBody.Part - ): String + suspend fun uploadImage(@Header("token") token: String, @Part file: MultipartBody.Part): String /** * 新增事件 */ @POST("/event/add") - suspend fun addEvent( - @Header("token") token: String, - @Body requestBody: RequestBody - ): String + suspend fun addEvent(@Header("token") token: String, @Body requestBody: RequestBody): String /** * 人员申请入场 */ - @FormUrlEncoded - @POST("/worker/apply") - suspend fun enter( - @Header("token") token: String, - @Field("workerName") workerName: String, - @Field("gender") gender: String, - @Field("ownerShip") ownerShip: String, - @Field("phoneNumber") phoneNumber: String, - @Field("idCardNumber") idCardNumber: String, - @Field("enterReason") enterReason: String, - @Field("workerAvatar") workerAvatar: String, - @Field("applyTime") applyTime: String - ): String + @POST("/worker/add") + suspend fun enter(@Header("token") token: String, @Body requestBody: RequestBody): String } \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 772c9e1..098120a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -73,7 +73,7 @@ dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') //基础依赖库 - implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.4.3' + implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.4.5' implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'androidx.core:core-ktx:1.9.0' implementation 'com.google.android.material:material:1.6.1' diff --git a/app/src/main/java/com/casic/br/operationsite/extensions/String.kt b/app/src/main/java/com/casic/br/operationsite/extensions/String.kt index 9f7962e..0ba91ea 100644 --- a/app/src/main/java/com/casic/br/operationsite/extensions/String.kt +++ b/app/src/main/java/com/casic/br/operationsite/extensions/String.kt @@ -70,4 +70,24 @@ val p = Pattern.compile(regEx) val m = p.matcher(this) return m.replaceAll("").trim { it <= ' ' } +} + +fun String.isIdCard(): Boolean { + val regExp_15 = + "^[1-9][0-9]{5}[0-9]{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)[0-9]{2}[0-9]" + + val regExp_18 = + "^[1-9][0-9]{5}(18|19|20)[0-9]{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)[0-9]{3}([0-9]|(X|x))" + + return if (this.length != 15 || this.length != 18) { + false + } else { + if (this.length == 15) { + val pattern = Pattern.compile(regExp_15) + pattern.matcher(this).matches() + } else { + val pattern = Pattern.compile(regExp_18) + pattern.matcher(this).matches() + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/model/WorkerModel.java b/app/src/main/java/com/casic/br/operationsite/model/WorkerModel.java new file mode 100644 index 0000000..0255754 --- /dev/null +++ b/app/src/main/java/com/casic/br/operationsite/model/WorkerModel.java @@ -0,0 +1,158 @@ +package com.casic.br.operationsite.model; + +public class WorkerModel { + + private String createTime; + private String deptId; + private String deptName; + private String enterReason; + private String gender; + private String genderName; + private String id; + private String idCardNumber; + private String isRegister; + private String ownerShip; + private String phoneNumber; + private String registerTime; + private String status; + private String statusName; + private String workerAvatar; + private String workerName; + private String workerType; + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getEnterReason() { + return enterReason; + } + + public void setEnterReason(String enterReason) { + this.enterReason = enterReason; + } + + public String getGender() { + return gender; + } + + public void setGender(String gender) { + this.gender = gender; + } + + public String getGenderName() { + return genderName; + } + + public void setGenderName(String genderName) { + this.genderName = genderName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getIdCardNumber() { + return idCardNumber; + } + + public void setIdCardNumber(String idCardNumber) { + this.idCardNumber = idCardNumber; + } + + public String getIsRegister() { + return isRegister; + } + + public void setIsRegister(String isRegister) { + this.isRegister = isRegister; + } + + public String getOwnerShip() { + return ownerShip; + } + + public void setOwnerShip(String ownerShip) { + this.ownerShip = ownerShip; + } + + public String getPhoneNumber() { + return phoneNumber; + } + + public void setPhoneNumber(String phoneNumber) { + this.phoneNumber = phoneNumber; + } + + public String getRegisterTime() { + return registerTime; + } + + public void setRegisterTime(String registerTime) { + this.registerTime = registerTime; + } + + 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 getWorkerAvatar() { + return workerAvatar; + } + + public void setWorkerAvatar(String workerAvatar) { + this.workerAvatar = workerAvatar; + } + + public String getWorkerName() { + return workerName; + } + + public void setWorkerName(String workerName) { + this.workerName = workerName; + } + + public String getWorkerType() { + return workerType; + } + + public void setWorkerType(String workerType) { + this.workerType = workerType; + } +} diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt index 945a924..a6bcfb4 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt @@ -68,10 +68,7 @@ * 报警详情 */ @GET("/alarm/detail") - suspend fun obtainAlarmDetail( - @Header("token") token: String, - @Query("id") id: String - ): String + suspend fun obtainAlarmDetail(@Header("token") token: String, @Query("id") id: String): String /** * 上传图片 @@ -80,34 +77,17 @@ */ @Multipart @POST("/file/upload") - suspend fun uploadImage( - @Header("token") token: String, - @Part file: MultipartBody.Part - ): String + suspend fun uploadImage(@Header("token") token: String, @Part file: MultipartBody.Part): String /** * 新增事件 */ @POST("/event/add") - suspend fun addEvent( - @Header("token") token: String, - @Body requestBody: RequestBody - ): String + suspend fun addEvent(@Header("token") token: String, @Body requestBody: RequestBody): String /** * 人员申请入场 */ - @FormUrlEncoded - @POST("/worker/apply") - suspend fun enter( - @Header("token") token: String, - @Field("workerName") workerName: String, - @Field("gender") gender: String, - @Field("ownerShip") ownerShip: String, - @Field("phoneNumber") phoneNumber: String, - @Field("idCardNumber") idCardNumber: String, - @Field("enterReason") enterReason: String, - @Field("workerAvatar") workerAvatar: String, - @Field("applyTime") applyTime: String - ): String + @POST("/worker/add") + suspend fun enter(@Header("token") token: String, @Body requestBody: RequestBody): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt index a566202..7582a1f 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt @@ -123,13 +123,52 @@ * 人员申请入场 */ suspend fun enter( - workerName: String, gender: String, ownerShip: String, phoneNumber: String, - idCardNumber: String, enterReason: String, workerAvatar: String, applyTime: String + projectId: String, + workerType: String, + deptName: String, + ownerShip: String, + gender: String, + registerTime: String, + deptId: String, + genderName: String, + enterReason: String, + phoneNumber: String, + createTime: String, + workerAvatar: String, + idCardNumber: String, + statusName: String, + id: String, + workerName: String, + isRegister: String, + status: String ): String { - return api.enter( - AuthenticationHelper.token!!, - workerName, gender, ownerShip, phoneNumber, - idCardNumber, enterReason, workerAvatar, applyTime + val param = JsonObject() + param.addProperty("projectId", projectId) + + val workerParam = JsonObject() + workerParam.addProperty("workerType", workerType) + workerParam.addProperty("deptName", deptName) + workerParam.addProperty("ownerShip", ownerShip) + workerParam.addProperty("gender", gender) + workerParam.addProperty("registerTime", registerTime) + workerParam.addProperty("deptId", deptId) + workerParam.addProperty("genderName", genderName) + workerParam.addProperty("enterReason", enterReason) + workerParam.addProperty("phoneNumber", phoneNumber) + workerParam.addProperty("createTime", createTime) + workerParam.addProperty("workerAvatar", workerAvatar) + workerParam.addProperty("idCardNumber", idCardNumber) + workerParam.addProperty("statusName", statusName) + workerParam.addProperty("id", id) + workerParam.addProperty("workerName", workerName) + workerParam.addProperty("isRegister", isRegister) + workerParam.addProperty("status", status) + + param.add("worker", workerParam) + + val requestBody = param.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() ) + return api.enter(AuthenticationHelper.token!!, requestBody) } } \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 772c9e1..098120a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -73,7 +73,7 @@ dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') //基础依赖库 - implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.4.3' + implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.4.5' implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'androidx.core:core-ktx:1.9.0' implementation 'com.google.android.material:material:1.6.1' diff --git a/app/src/main/java/com/casic/br/operationsite/extensions/String.kt b/app/src/main/java/com/casic/br/operationsite/extensions/String.kt index 9f7962e..0ba91ea 100644 --- a/app/src/main/java/com/casic/br/operationsite/extensions/String.kt +++ b/app/src/main/java/com/casic/br/operationsite/extensions/String.kt @@ -70,4 +70,24 @@ val p = Pattern.compile(regEx) val m = p.matcher(this) return m.replaceAll("").trim { it <= ' ' } +} + +fun String.isIdCard(): Boolean { + val regExp_15 = + "^[1-9][0-9]{5}[0-9]{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)[0-9]{2}[0-9]" + + val regExp_18 = + "^[1-9][0-9]{5}(18|19|20)[0-9]{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)[0-9]{3}([0-9]|(X|x))" + + return if (this.length != 15 || this.length != 18) { + false + } else { + if (this.length == 15) { + val pattern = Pattern.compile(regExp_15) + pattern.matcher(this).matches() + } else { + val pattern = Pattern.compile(regExp_18) + pattern.matcher(this).matches() + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/model/WorkerModel.java b/app/src/main/java/com/casic/br/operationsite/model/WorkerModel.java new file mode 100644 index 0000000..0255754 --- /dev/null +++ b/app/src/main/java/com/casic/br/operationsite/model/WorkerModel.java @@ -0,0 +1,158 @@ +package com.casic.br.operationsite.model; + +public class WorkerModel { + + private String createTime; + private String deptId; + private String deptName; + private String enterReason; + private String gender; + private String genderName; + private String id; + private String idCardNumber; + private String isRegister; + private String ownerShip; + private String phoneNumber; + private String registerTime; + private String status; + private String statusName; + private String workerAvatar; + private String workerName; + private String workerType; + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getEnterReason() { + return enterReason; + } + + public void setEnterReason(String enterReason) { + this.enterReason = enterReason; + } + + public String getGender() { + return gender; + } + + public void setGender(String gender) { + this.gender = gender; + } + + public String getGenderName() { + return genderName; + } + + public void setGenderName(String genderName) { + this.genderName = genderName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getIdCardNumber() { + return idCardNumber; + } + + public void setIdCardNumber(String idCardNumber) { + this.idCardNumber = idCardNumber; + } + + public String getIsRegister() { + return isRegister; + } + + public void setIsRegister(String isRegister) { + this.isRegister = isRegister; + } + + public String getOwnerShip() { + return ownerShip; + } + + public void setOwnerShip(String ownerShip) { + this.ownerShip = ownerShip; + } + + public String getPhoneNumber() { + return phoneNumber; + } + + public void setPhoneNumber(String phoneNumber) { + this.phoneNumber = phoneNumber; + } + + public String getRegisterTime() { + return registerTime; + } + + public void setRegisterTime(String registerTime) { + this.registerTime = registerTime; + } + + 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 getWorkerAvatar() { + return workerAvatar; + } + + public void setWorkerAvatar(String workerAvatar) { + this.workerAvatar = workerAvatar; + } + + public String getWorkerName() { + return workerName; + } + + public void setWorkerName(String workerName) { + this.workerName = workerName; + } + + public String getWorkerType() { + return workerType; + } + + public void setWorkerType(String workerType) { + this.workerType = workerType; + } +} diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt index 945a924..a6bcfb4 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt @@ -68,10 +68,7 @@ * 报警详情 */ @GET("/alarm/detail") - suspend fun obtainAlarmDetail( - @Header("token") token: String, - @Query("id") id: String - ): String + suspend fun obtainAlarmDetail(@Header("token") token: String, @Query("id") id: String): String /** * 上传图片 @@ -80,34 +77,17 @@ */ @Multipart @POST("/file/upload") - suspend fun uploadImage( - @Header("token") token: String, - @Part file: MultipartBody.Part - ): String + suspend fun uploadImage(@Header("token") token: String, @Part file: MultipartBody.Part): String /** * 新增事件 */ @POST("/event/add") - suspend fun addEvent( - @Header("token") token: String, - @Body requestBody: RequestBody - ): String + suspend fun addEvent(@Header("token") token: String, @Body requestBody: RequestBody): String /** * 人员申请入场 */ - @FormUrlEncoded - @POST("/worker/apply") - suspend fun enter( - @Header("token") token: String, - @Field("workerName") workerName: String, - @Field("gender") gender: String, - @Field("ownerShip") ownerShip: String, - @Field("phoneNumber") phoneNumber: String, - @Field("idCardNumber") idCardNumber: String, - @Field("enterReason") enterReason: String, - @Field("workerAvatar") workerAvatar: String, - @Field("applyTime") applyTime: String - ): String + @POST("/worker/add") + suspend fun enter(@Header("token") token: String, @Body requestBody: RequestBody): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt index a566202..7582a1f 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt @@ -123,13 +123,52 @@ * 人员申请入场 */ suspend fun enter( - workerName: String, gender: String, ownerShip: String, phoneNumber: String, - idCardNumber: String, enterReason: String, workerAvatar: String, applyTime: String + projectId: String, + workerType: String, + deptName: String, + ownerShip: String, + gender: String, + registerTime: String, + deptId: String, + genderName: String, + enterReason: String, + phoneNumber: String, + createTime: String, + workerAvatar: String, + idCardNumber: String, + statusName: String, + id: String, + workerName: String, + isRegister: String, + status: String ): String { - return api.enter( - AuthenticationHelper.token!!, - workerName, gender, ownerShip, phoneNumber, - idCardNumber, enterReason, workerAvatar, applyTime + val param = JsonObject() + param.addProperty("projectId", projectId) + + val workerParam = JsonObject() + workerParam.addProperty("workerType", workerType) + workerParam.addProperty("deptName", deptName) + workerParam.addProperty("ownerShip", ownerShip) + workerParam.addProperty("gender", gender) + workerParam.addProperty("registerTime", registerTime) + workerParam.addProperty("deptId", deptId) + workerParam.addProperty("genderName", genderName) + workerParam.addProperty("enterReason", enterReason) + workerParam.addProperty("phoneNumber", phoneNumber) + workerParam.addProperty("createTime", createTime) + workerParam.addProperty("workerAvatar", workerAvatar) + workerParam.addProperty("idCardNumber", idCardNumber) + workerParam.addProperty("statusName", statusName) + workerParam.addProperty("id", id) + workerParam.addProperty("workerName", workerName) + workerParam.addProperty("isRegister", isRegister) + workerParam.addProperty("status", status) + + param.add("worker", workerParam) + + val requestBody = param.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() ) + return api.enter(AuthenticationHelper.token!!, requestBody) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt index e7136e7..d7c5fac 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt @@ -1,18 +1,20 @@ package com.casic.br.operationsite.view +import android.annotation.SuppressLint import android.content.Context import android.net.Uri +import android.text.Editable +import android.text.TextWatcher import android.util.Log import android.view.View import androidx.activity.result.contract.ActivityResultContracts import androidx.lifecycle.ViewModelProvider -import androidx.recyclerview.widget.GridLayoutManager import com.casic.br.operationsite.R import com.casic.br.operationsite.callback.OnImageCompressListener import com.casic.br.operationsite.extensions.combineImagePath import com.casic.br.operationsite.extensions.compressImage import com.casic.br.operationsite.extensions.initLayoutImmersionBar -import com.casic.br.operationsite.extensions.reformat +import com.casic.br.operationsite.extensions.isIdCard import com.casic.br.operationsite.utils.LoadingDialogHub import com.casic.br.operationsite.utils.LocaleConstant import com.casic.br.operationsite.vm.ApplyViewModel @@ -25,6 +27,7 @@ import com.pengxh.kt.lite.adapter.EditableImageAdapter import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.* +import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.vm.LoadState import com.pengxh.kt.lite.widget.dialog.BottomActionSheet import kotlinx.android.synthetic.main.activity_apply_enter.* @@ -37,6 +40,7 @@ private lateinit var imageAdapter: EditableImageAdapter private lateinit var uploadFileViewModel: UploadFileViewModel private lateinit var applyViewModel: ApplyViewModel + private lateinit var projectId: String private val context: Context = this@ApplyEnterActivity private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集 private val realPaths: ArrayList = ArrayList() //真实图片路径 @@ -53,11 +57,12 @@ } override fun initData() { + projectId = intent.getStringExtra(Constant.INTENT_PARAM)!! + uploadFileViewModel = ViewModelProvider(this)[UploadFileViewModel::class.java] applyViewModel = ViewModelProvider(this)[ApplyViewModel::class.java] - imageAdapter = EditableImageAdapter(this, 1, 13f) - addImageRecyclerView.layoutManager = GridLayoutManager(this, 3) + imageAdapter = EditableImageAdapter(this, 1, 3f) addImageRecyclerView.adapter = imageAdapter } @@ -112,6 +117,28 @@ .build().show() } + enterReasonView.addTextChangedListener(object : TextWatcher { + override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { + + } + + override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { + + } + + @SuppressLint("SetTextI18n") + override fun afterTextChanged(s: Editable?) { + val text = s.toString().trim() + inputLengthView.text = "${text.length}/100" + if (text.length > 100) { + inputLengthView.setTextColor(R.color.redTextColor.convertColor(context)) + "入场原因不能超过100个字符".show(context) + } else { + inputLengthView.setTextColor(R.color.subTextColor.convertColor(context)) + } + } + }) + imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener { override fun onAddImageClick() { //人脸检测 @@ -176,20 +203,41 @@ return@setOnClickListener } + if (!phoneNumberView.text.toString().isPhoneNumber()) { + "请输入正确的联系方式".show(this) + return@setOnClickListener + } + if (idCardView.text.isNullOrBlank()) { "请输入入场人员身份证号".show(this) return@setOnClickListener } + if (!idCardView.text.toString().isIdCard()) { + "请输入正确的身份证号".show(this) + return@setOnClickListener + } + + val currentTime = System.currentTimeMillis().timestampToCompleteDate() applyViewModel.enter( - workerNameView.text.toString(), - genderView.text.toString(), + projectId, + "2", + "", ownerShipView.text.toString(), - phoneNumberView.text.toString(), - idCardView.text.toString(), + "", + currentTime, + "", + genderView.text.toString(), enterReasonView.text.toString(), - imagePaths.reformat(), - System.currentTimeMillis().timestampToCompleteDate() + phoneNumberView.text.toString(), + currentTime, + imagePaths[0], + idCardView.text.toString(), + "", + "", + workerNameView.text.toString(), + "0", + "" ) applyViewModel.resultModel.observe(this) { diff --git a/app/build.gradle b/app/build.gradle index 772c9e1..098120a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -73,7 +73,7 @@ dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') //基础依赖库 - implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.4.3' + implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.4.5' implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'androidx.core:core-ktx:1.9.0' implementation 'com.google.android.material:material:1.6.1' diff --git a/app/src/main/java/com/casic/br/operationsite/extensions/String.kt b/app/src/main/java/com/casic/br/operationsite/extensions/String.kt index 9f7962e..0ba91ea 100644 --- a/app/src/main/java/com/casic/br/operationsite/extensions/String.kt +++ b/app/src/main/java/com/casic/br/operationsite/extensions/String.kt @@ -70,4 +70,24 @@ val p = Pattern.compile(regEx) val m = p.matcher(this) return m.replaceAll("").trim { it <= ' ' } +} + +fun String.isIdCard(): Boolean { + val regExp_15 = + "^[1-9][0-9]{5}[0-9]{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)[0-9]{2}[0-9]" + + val regExp_18 = + "^[1-9][0-9]{5}(18|19|20)[0-9]{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)[0-9]{3}([0-9]|(X|x))" + + return if (this.length != 15 || this.length != 18) { + false + } else { + if (this.length == 15) { + val pattern = Pattern.compile(regExp_15) + pattern.matcher(this).matches() + } else { + val pattern = Pattern.compile(regExp_18) + pattern.matcher(this).matches() + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/model/WorkerModel.java b/app/src/main/java/com/casic/br/operationsite/model/WorkerModel.java new file mode 100644 index 0000000..0255754 --- /dev/null +++ b/app/src/main/java/com/casic/br/operationsite/model/WorkerModel.java @@ -0,0 +1,158 @@ +package com.casic.br.operationsite.model; + +public class WorkerModel { + + private String createTime; + private String deptId; + private String deptName; + private String enterReason; + private String gender; + private String genderName; + private String id; + private String idCardNumber; + private String isRegister; + private String ownerShip; + private String phoneNumber; + private String registerTime; + private String status; + private String statusName; + private String workerAvatar; + private String workerName; + private String workerType; + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getEnterReason() { + return enterReason; + } + + public void setEnterReason(String enterReason) { + this.enterReason = enterReason; + } + + public String getGender() { + return gender; + } + + public void setGender(String gender) { + this.gender = gender; + } + + public String getGenderName() { + return genderName; + } + + public void setGenderName(String genderName) { + this.genderName = genderName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getIdCardNumber() { + return idCardNumber; + } + + public void setIdCardNumber(String idCardNumber) { + this.idCardNumber = idCardNumber; + } + + public String getIsRegister() { + return isRegister; + } + + public void setIsRegister(String isRegister) { + this.isRegister = isRegister; + } + + public String getOwnerShip() { + return ownerShip; + } + + public void setOwnerShip(String ownerShip) { + this.ownerShip = ownerShip; + } + + public String getPhoneNumber() { + return phoneNumber; + } + + public void setPhoneNumber(String phoneNumber) { + this.phoneNumber = phoneNumber; + } + + public String getRegisterTime() { + return registerTime; + } + + public void setRegisterTime(String registerTime) { + this.registerTime = registerTime; + } + + 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 getWorkerAvatar() { + return workerAvatar; + } + + public void setWorkerAvatar(String workerAvatar) { + this.workerAvatar = workerAvatar; + } + + public String getWorkerName() { + return workerName; + } + + public void setWorkerName(String workerName) { + this.workerName = workerName; + } + + public String getWorkerType() { + return workerType; + } + + public void setWorkerType(String workerType) { + this.workerType = workerType; + } +} diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt index 945a924..a6bcfb4 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt @@ -68,10 +68,7 @@ * 报警详情 */ @GET("/alarm/detail") - suspend fun obtainAlarmDetail( - @Header("token") token: String, - @Query("id") id: String - ): String + suspend fun obtainAlarmDetail(@Header("token") token: String, @Query("id") id: String): String /** * 上传图片 @@ -80,34 +77,17 @@ */ @Multipart @POST("/file/upload") - suspend fun uploadImage( - @Header("token") token: String, - @Part file: MultipartBody.Part - ): String + suspend fun uploadImage(@Header("token") token: String, @Part file: MultipartBody.Part): String /** * 新增事件 */ @POST("/event/add") - suspend fun addEvent( - @Header("token") token: String, - @Body requestBody: RequestBody - ): String + suspend fun addEvent(@Header("token") token: String, @Body requestBody: RequestBody): String /** * 人员申请入场 */ - @FormUrlEncoded - @POST("/worker/apply") - suspend fun enter( - @Header("token") token: String, - @Field("workerName") workerName: String, - @Field("gender") gender: String, - @Field("ownerShip") ownerShip: String, - @Field("phoneNumber") phoneNumber: String, - @Field("idCardNumber") idCardNumber: String, - @Field("enterReason") enterReason: String, - @Field("workerAvatar") workerAvatar: String, - @Field("applyTime") applyTime: String - ): String + @POST("/worker/add") + suspend fun enter(@Header("token") token: String, @Body requestBody: RequestBody): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt index a566202..7582a1f 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt @@ -123,13 +123,52 @@ * 人员申请入场 */ suspend fun enter( - workerName: String, gender: String, ownerShip: String, phoneNumber: String, - idCardNumber: String, enterReason: String, workerAvatar: String, applyTime: String + projectId: String, + workerType: String, + deptName: String, + ownerShip: String, + gender: String, + registerTime: String, + deptId: String, + genderName: String, + enterReason: String, + phoneNumber: String, + createTime: String, + workerAvatar: String, + idCardNumber: String, + statusName: String, + id: String, + workerName: String, + isRegister: String, + status: String ): String { - return api.enter( - AuthenticationHelper.token!!, - workerName, gender, ownerShip, phoneNumber, - idCardNumber, enterReason, workerAvatar, applyTime + val param = JsonObject() + param.addProperty("projectId", projectId) + + val workerParam = JsonObject() + workerParam.addProperty("workerType", workerType) + workerParam.addProperty("deptName", deptName) + workerParam.addProperty("ownerShip", ownerShip) + workerParam.addProperty("gender", gender) + workerParam.addProperty("registerTime", registerTime) + workerParam.addProperty("deptId", deptId) + workerParam.addProperty("genderName", genderName) + workerParam.addProperty("enterReason", enterReason) + workerParam.addProperty("phoneNumber", phoneNumber) + workerParam.addProperty("createTime", createTime) + workerParam.addProperty("workerAvatar", workerAvatar) + workerParam.addProperty("idCardNumber", idCardNumber) + workerParam.addProperty("statusName", statusName) + workerParam.addProperty("id", id) + workerParam.addProperty("workerName", workerName) + workerParam.addProperty("isRegister", isRegister) + workerParam.addProperty("status", status) + + param.add("worker", workerParam) + + val requestBody = param.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() ) + return api.enter(AuthenticationHelper.token!!, requestBody) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt index e7136e7..d7c5fac 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt @@ -1,18 +1,20 @@ package com.casic.br.operationsite.view +import android.annotation.SuppressLint import android.content.Context import android.net.Uri +import android.text.Editable +import android.text.TextWatcher import android.util.Log import android.view.View import androidx.activity.result.contract.ActivityResultContracts import androidx.lifecycle.ViewModelProvider -import androidx.recyclerview.widget.GridLayoutManager import com.casic.br.operationsite.R import com.casic.br.operationsite.callback.OnImageCompressListener import com.casic.br.operationsite.extensions.combineImagePath import com.casic.br.operationsite.extensions.compressImage import com.casic.br.operationsite.extensions.initLayoutImmersionBar -import com.casic.br.operationsite.extensions.reformat +import com.casic.br.operationsite.extensions.isIdCard import com.casic.br.operationsite.utils.LoadingDialogHub import com.casic.br.operationsite.utils.LocaleConstant import com.casic.br.operationsite.vm.ApplyViewModel @@ -25,6 +27,7 @@ import com.pengxh.kt.lite.adapter.EditableImageAdapter import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.* +import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.vm.LoadState import com.pengxh.kt.lite.widget.dialog.BottomActionSheet import kotlinx.android.synthetic.main.activity_apply_enter.* @@ -37,6 +40,7 @@ private lateinit var imageAdapter: EditableImageAdapter private lateinit var uploadFileViewModel: UploadFileViewModel private lateinit var applyViewModel: ApplyViewModel + private lateinit var projectId: String private val context: Context = this@ApplyEnterActivity private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集 private val realPaths: ArrayList = ArrayList() //真实图片路径 @@ -53,11 +57,12 @@ } override fun initData() { + projectId = intent.getStringExtra(Constant.INTENT_PARAM)!! + uploadFileViewModel = ViewModelProvider(this)[UploadFileViewModel::class.java] applyViewModel = ViewModelProvider(this)[ApplyViewModel::class.java] - imageAdapter = EditableImageAdapter(this, 1, 13f) - addImageRecyclerView.layoutManager = GridLayoutManager(this, 3) + imageAdapter = EditableImageAdapter(this, 1, 3f) addImageRecyclerView.adapter = imageAdapter } @@ -112,6 +117,28 @@ .build().show() } + enterReasonView.addTextChangedListener(object : TextWatcher { + override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { + + } + + override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { + + } + + @SuppressLint("SetTextI18n") + override fun afterTextChanged(s: Editable?) { + val text = s.toString().trim() + inputLengthView.text = "${text.length}/100" + if (text.length > 100) { + inputLengthView.setTextColor(R.color.redTextColor.convertColor(context)) + "入场原因不能超过100个字符".show(context) + } else { + inputLengthView.setTextColor(R.color.subTextColor.convertColor(context)) + } + } + }) + imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener { override fun onAddImageClick() { //人脸检测 @@ -176,20 +203,41 @@ return@setOnClickListener } + if (!phoneNumberView.text.toString().isPhoneNumber()) { + "请输入正确的联系方式".show(this) + return@setOnClickListener + } + if (idCardView.text.isNullOrBlank()) { "请输入入场人员身份证号".show(this) return@setOnClickListener } + if (!idCardView.text.toString().isIdCard()) { + "请输入正确的身份证号".show(this) + return@setOnClickListener + } + + val currentTime = System.currentTimeMillis().timestampToCompleteDate() applyViewModel.enter( - workerNameView.text.toString(), - genderView.text.toString(), + projectId, + "2", + "", ownerShipView.text.toString(), - phoneNumberView.text.toString(), - idCardView.text.toString(), + "", + currentTime, + "", + genderView.text.toString(), enterReasonView.text.toString(), - imagePaths.reformat(), - System.currentTimeMillis().timestampToCompleteDate() + phoneNumberView.text.toString(), + currentTime, + imagePaths[0], + idCardView.text.toString(), + "", + "", + workerNameView.text.toString(), + "0", + "" ) applyViewModel.resultModel.observe(this) { diff --git a/app/src/main/java/com/casic/br/operationsite/view/UploadEventActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/UploadEventActivity.kt index d31ffba..8e7cdf9 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/UploadEventActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/UploadEventActivity.kt @@ -81,13 +81,13 @@ uploadFileViewModel = ViewModelProvider(this)[UploadFileViewModel::class.java] eventViewModel = ViewModelProvider(this)[EventViewModel::class.java] - imageAdapter = EditableImageAdapter(this, 3, 13f) + imageAdapter = EditableImageAdapter(this, 3, 3f) addImageRecyclerView.adapter = imageAdapter } override fun onResume() { - obtainCurrentLocation() super.onResume() + obtainCurrentLocation() } override fun observeRequestState() { diff --git a/app/build.gradle b/app/build.gradle index 772c9e1..098120a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -73,7 +73,7 @@ dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') //基础依赖库 - implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.4.3' + implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.4.5' implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'androidx.core:core-ktx:1.9.0' implementation 'com.google.android.material:material:1.6.1' diff --git a/app/src/main/java/com/casic/br/operationsite/extensions/String.kt b/app/src/main/java/com/casic/br/operationsite/extensions/String.kt index 9f7962e..0ba91ea 100644 --- a/app/src/main/java/com/casic/br/operationsite/extensions/String.kt +++ b/app/src/main/java/com/casic/br/operationsite/extensions/String.kt @@ -70,4 +70,24 @@ val p = Pattern.compile(regEx) val m = p.matcher(this) return m.replaceAll("").trim { it <= ' ' } +} + +fun String.isIdCard(): Boolean { + val regExp_15 = + "^[1-9][0-9]{5}[0-9]{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)[0-9]{2}[0-9]" + + val regExp_18 = + "^[1-9][0-9]{5}(18|19|20)[0-9]{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)[0-9]{3}([0-9]|(X|x))" + + return if (this.length != 15 || this.length != 18) { + false + } else { + if (this.length == 15) { + val pattern = Pattern.compile(regExp_15) + pattern.matcher(this).matches() + } else { + val pattern = Pattern.compile(regExp_18) + pattern.matcher(this).matches() + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/model/WorkerModel.java b/app/src/main/java/com/casic/br/operationsite/model/WorkerModel.java new file mode 100644 index 0000000..0255754 --- /dev/null +++ b/app/src/main/java/com/casic/br/operationsite/model/WorkerModel.java @@ -0,0 +1,158 @@ +package com.casic.br.operationsite.model; + +public class WorkerModel { + + private String createTime; + private String deptId; + private String deptName; + private String enterReason; + private String gender; + private String genderName; + private String id; + private String idCardNumber; + private String isRegister; + private String ownerShip; + private String phoneNumber; + private String registerTime; + private String status; + private String statusName; + private String workerAvatar; + private String workerName; + private String workerType; + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getEnterReason() { + return enterReason; + } + + public void setEnterReason(String enterReason) { + this.enterReason = enterReason; + } + + public String getGender() { + return gender; + } + + public void setGender(String gender) { + this.gender = gender; + } + + public String getGenderName() { + return genderName; + } + + public void setGenderName(String genderName) { + this.genderName = genderName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getIdCardNumber() { + return idCardNumber; + } + + public void setIdCardNumber(String idCardNumber) { + this.idCardNumber = idCardNumber; + } + + public String getIsRegister() { + return isRegister; + } + + public void setIsRegister(String isRegister) { + this.isRegister = isRegister; + } + + public String getOwnerShip() { + return ownerShip; + } + + public void setOwnerShip(String ownerShip) { + this.ownerShip = ownerShip; + } + + public String getPhoneNumber() { + return phoneNumber; + } + + public void setPhoneNumber(String phoneNumber) { + this.phoneNumber = phoneNumber; + } + + public String getRegisterTime() { + return registerTime; + } + + public void setRegisterTime(String registerTime) { + this.registerTime = registerTime; + } + + 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 getWorkerAvatar() { + return workerAvatar; + } + + public void setWorkerAvatar(String workerAvatar) { + this.workerAvatar = workerAvatar; + } + + public String getWorkerName() { + return workerName; + } + + public void setWorkerName(String workerName) { + this.workerName = workerName; + } + + public String getWorkerType() { + return workerType; + } + + public void setWorkerType(String workerType) { + this.workerType = workerType; + } +} diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt index 945a924..a6bcfb4 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt @@ -68,10 +68,7 @@ * 报警详情 */ @GET("/alarm/detail") - suspend fun obtainAlarmDetail( - @Header("token") token: String, - @Query("id") id: String - ): String + suspend fun obtainAlarmDetail(@Header("token") token: String, @Query("id") id: String): String /** * 上传图片 @@ -80,34 +77,17 @@ */ @Multipart @POST("/file/upload") - suspend fun uploadImage( - @Header("token") token: String, - @Part file: MultipartBody.Part - ): String + suspend fun uploadImage(@Header("token") token: String, @Part file: MultipartBody.Part): String /** * 新增事件 */ @POST("/event/add") - suspend fun addEvent( - @Header("token") token: String, - @Body requestBody: RequestBody - ): String + suspend fun addEvent(@Header("token") token: String, @Body requestBody: RequestBody): String /** * 人员申请入场 */ - @FormUrlEncoded - @POST("/worker/apply") - suspend fun enter( - @Header("token") token: String, - @Field("workerName") workerName: String, - @Field("gender") gender: String, - @Field("ownerShip") ownerShip: String, - @Field("phoneNumber") phoneNumber: String, - @Field("idCardNumber") idCardNumber: String, - @Field("enterReason") enterReason: String, - @Field("workerAvatar") workerAvatar: String, - @Field("applyTime") applyTime: String - ): String + @POST("/worker/add") + suspend fun enter(@Header("token") token: String, @Body requestBody: RequestBody): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt index a566202..7582a1f 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt @@ -123,13 +123,52 @@ * 人员申请入场 */ suspend fun enter( - workerName: String, gender: String, ownerShip: String, phoneNumber: String, - idCardNumber: String, enterReason: String, workerAvatar: String, applyTime: String + projectId: String, + workerType: String, + deptName: String, + ownerShip: String, + gender: String, + registerTime: String, + deptId: String, + genderName: String, + enterReason: String, + phoneNumber: String, + createTime: String, + workerAvatar: String, + idCardNumber: String, + statusName: String, + id: String, + workerName: String, + isRegister: String, + status: String ): String { - return api.enter( - AuthenticationHelper.token!!, - workerName, gender, ownerShip, phoneNumber, - idCardNumber, enterReason, workerAvatar, applyTime + val param = JsonObject() + param.addProperty("projectId", projectId) + + val workerParam = JsonObject() + workerParam.addProperty("workerType", workerType) + workerParam.addProperty("deptName", deptName) + workerParam.addProperty("ownerShip", ownerShip) + workerParam.addProperty("gender", gender) + workerParam.addProperty("registerTime", registerTime) + workerParam.addProperty("deptId", deptId) + workerParam.addProperty("genderName", genderName) + workerParam.addProperty("enterReason", enterReason) + workerParam.addProperty("phoneNumber", phoneNumber) + workerParam.addProperty("createTime", createTime) + workerParam.addProperty("workerAvatar", workerAvatar) + workerParam.addProperty("idCardNumber", idCardNumber) + workerParam.addProperty("statusName", statusName) + workerParam.addProperty("id", id) + workerParam.addProperty("workerName", workerName) + workerParam.addProperty("isRegister", isRegister) + workerParam.addProperty("status", status) + + param.add("worker", workerParam) + + val requestBody = param.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() ) + return api.enter(AuthenticationHelper.token!!, requestBody) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt index e7136e7..d7c5fac 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt @@ -1,18 +1,20 @@ package com.casic.br.operationsite.view +import android.annotation.SuppressLint import android.content.Context import android.net.Uri +import android.text.Editable +import android.text.TextWatcher import android.util.Log import android.view.View import androidx.activity.result.contract.ActivityResultContracts import androidx.lifecycle.ViewModelProvider -import androidx.recyclerview.widget.GridLayoutManager import com.casic.br.operationsite.R import com.casic.br.operationsite.callback.OnImageCompressListener import com.casic.br.operationsite.extensions.combineImagePath import com.casic.br.operationsite.extensions.compressImage import com.casic.br.operationsite.extensions.initLayoutImmersionBar -import com.casic.br.operationsite.extensions.reformat +import com.casic.br.operationsite.extensions.isIdCard import com.casic.br.operationsite.utils.LoadingDialogHub import com.casic.br.operationsite.utils.LocaleConstant import com.casic.br.operationsite.vm.ApplyViewModel @@ -25,6 +27,7 @@ import com.pengxh.kt.lite.adapter.EditableImageAdapter import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.* +import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.vm.LoadState import com.pengxh.kt.lite.widget.dialog.BottomActionSheet import kotlinx.android.synthetic.main.activity_apply_enter.* @@ -37,6 +40,7 @@ private lateinit var imageAdapter: EditableImageAdapter private lateinit var uploadFileViewModel: UploadFileViewModel private lateinit var applyViewModel: ApplyViewModel + private lateinit var projectId: String private val context: Context = this@ApplyEnterActivity private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集 private val realPaths: ArrayList = ArrayList() //真实图片路径 @@ -53,11 +57,12 @@ } override fun initData() { + projectId = intent.getStringExtra(Constant.INTENT_PARAM)!! + uploadFileViewModel = ViewModelProvider(this)[UploadFileViewModel::class.java] applyViewModel = ViewModelProvider(this)[ApplyViewModel::class.java] - imageAdapter = EditableImageAdapter(this, 1, 13f) - addImageRecyclerView.layoutManager = GridLayoutManager(this, 3) + imageAdapter = EditableImageAdapter(this, 1, 3f) addImageRecyclerView.adapter = imageAdapter } @@ -112,6 +117,28 @@ .build().show() } + enterReasonView.addTextChangedListener(object : TextWatcher { + override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { + + } + + override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { + + } + + @SuppressLint("SetTextI18n") + override fun afterTextChanged(s: Editable?) { + val text = s.toString().trim() + inputLengthView.text = "${text.length}/100" + if (text.length > 100) { + inputLengthView.setTextColor(R.color.redTextColor.convertColor(context)) + "入场原因不能超过100个字符".show(context) + } else { + inputLengthView.setTextColor(R.color.subTextColor.convertColor(context)) + } + } + }) + imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener { override fun onAddImageClick() { //人脸检测 @@ -176,20 +203,41 @@ return@setOnClickListener } + if (!phoneNumberView.text.toString().isPhoneNumber()) { + "请输入正确的联系方式".show(this) + return@setOnClickListener + } + if (idCardView.text.isNullOrBlank()) { "请输入入场人员身份证号".show(this) return@setOnClickListener } + if (!idCardView.text.toString().isIdCard()) { + "请输入正确的身份证号".show(this) + return@setOnClickListener + } + + val currentTime = System.currentTimeMillis().timestampToCompleteDate() applyViewModel.enter( - workerNameView.text.toString(), - genderView.text.toString(), + projectId, + "2", + "", ownerShipView.text.toString(), - phoneNumberView.text.toString(), - idCardView.text.toString(), + "", + currentTime, + "", + genderView.text.toString(), enterReasonView.text.toString(), - imagePaths.reformat(), - System.currentTimeMillis().timestampToCompleteDate() + phoneNumberView.text.toString(), + currentTime, + imagePaths[0], + idCardView.text.toString(), + "", + "", + workerNameView.text.toString(), + "0", + "" ) applyViewModel.resultModel.observe(this) { diff --git a/app/src/main/java/com/casic/br/operationsite/view/UploadEventActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/UploadEventActivity.kt index d31ffba..8e7cdf9 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/UploadEventActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/UploadEventActivity.kt @@ -81,13 +81,13 @@ uploadFileViewModel = ViewModelProvider(this)[UploadFileViewModel::class.java] eventViewModel = ViewModelProvider(this)[EventViewModel::class.java] - imageAdapter = EditableImageAdapter(this, 3, 13f) + imageAdapter = EditableImageAdapter(this, 3, 3f) addImageRecyclerView.adapter = imageAdapter } override fun onResume() { - obtainCurrentLocation() super.onResume() + obtainCurrentLocation() } override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt index 9b225f1..5dff823 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt @@ -28,6 +28,7 @@ private lateinit var aMap: AMap private lateinit var workSiteViewModel: WorkSiteViewModel + private lateinit var projectId: String private val geocoderSearch by lazy { GeocodeSearch(this) } private var latLng: LatLng? = null @@ -43,7 +44,7 @@ } override fun initData() { - val projectId = intent.getStringExtra(Constant.INTENT_PARAM)!! + projectId = intent.getStringExtra(Constant.INTENT_PARAM)!! /** * 地图初始化设置 @@ -168,7 +169,7 @@ } applyTextView.setOnClickListener { - navigatePageTo() + navigatePageTo(projectId) } } diff --git a/app/build.gradle b/app/build.gradle index 772c9e1..098120a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -73,7 +73,7 @@ dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') //基础依赖库 - implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.4.3' + implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.4.5' implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'androidx.core:core-ktx:1.9.0' implementation 'com.google.android.material:material:1.6.1' diff --git a/app/src/main/java/com/casic/br/operationsite/extensions/String.kt b/app/src/main/java/com/casic/br/operationsite/extensions/String.kt index 9f7962e..0ba91ea 100644 --- a/app/src/main/java/com/casic/br/operationsite/extensions/String.kt +++ b/app/src/main/java/com/casic/br/operationsite/extensions/String.kt @@ -70,4 +70,24 @@ val p = Pattern.compile(regEx) val m = p.matcher(this) return m.replaceAll("").trim { it <= ' ' } +} + +fun String.isIdCard(): Boolean { + val regExp_15 = + "^[1-9][0-9]{5}[0-9]{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)[0-9]{2}[0-9]" + + val regExp_18 = + "^[1-9][0-9]{5}(18|19|20)[0-9]{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)[0-9]{3}([0-9]|(X|x))" + + return if (this.length != 15 || this.length != 18) { + false + } else { + if (this.length == 15) { + val pattern = Pattern.compile(regExp_15) + pattern.matcher(this).matches() + } else { + val pattern = Pattern.compile(regExp_18) + pattern.matcher(this).matches() + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/model/WorkerModel.java b/app/src/main/java/com/casic/br/operationsite/model/WorkerModel.java new file mode 100644 index 0000000..0255754 --- /dev/null +++ b/app/src/main/java/com/casic/br/operationsite/model/WorkerModel.java @@ -0,0 +1,158 @@ +package com.casic.br.operationsite.model; + +public class WorkerModel { + + private String createTime; + private String deptId; + private String deptName; + private String enterReason; + private String gender; + private String genderName; + private String id; + private String idCardNumber; + private String isRegister; + private String ownerShip; + private String phoneNumber; + private String registerTime; + private String status; + private String statusName; + private String workerAvatar; + private String workerName; + private String workerType; + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getEnterReason() { + return enterReason; + } + + public void setEnterReason(String enterReason) { + this.enterReason = enterReason; + } + + public String getGender() { + return gender; + } + + public void setGender(String gender) { + this.gender = gender; + } + + public String getGenderName() { + return genderName; + } + + public void setGenderName(String genderName) { + this.genderName = genderName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getIdCardNumber() { + return idCardNumber; + } + + public void setIdCardNumber(String idCardNumber) { + this.idCardNumber = idCardNumber; + } + + public String getIsRegister() { + return isRegister; + } + + public void setIsRegister(String isRegister) { + this.isRegister = isRegister; + } + + public String getOwnerShip() { + return ownerShip; + } + + public void setOwnerShip(String ownerShip) { + this.ownerShip = ownerShip; + } + + public String getPhoneNumber() { + return phoneNumber; + } + + public void setPhoneNumber(String phoneNumber) { + this.phoneNumber = phoneNumber; + } + + public String getRegisterTime() { + return registerTime; + } + + public void setRegisterTime(String registerTime) { + this.registerTime = registerTime; + } + + 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 getWorkerAvatar() { + return workerAvatar; + } + + public void setWorkerAvatar(String workerAvatar) { + this.workerAvatar = workerAvatar; + } + + public String getWorkerName() { + return workerName; + } + + public void setWorkerName(String workerName) { + this.workerName = workerName; + } + + public String getWorkerType() { + return workerType; + } + + public void setWorkerType(String workerType) { + this.workerType = workerType; + } +} diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt index 945a924..a6bcfb4 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt @@ -68,10 +68,7 @@ * 报警详情 */ @GET("/alarm/detail") - suspend fun obtainAlarmDetail( - @Header("token") token: String, - @Query("id") id: String - ): String + suspend fun obtainAlarmDetail(@Header("token") token: String, @Query("id") id: String): String /** * 上传图片 @@ -80,34 +77,17 @@ */ @Multipart @POST("/file/upload") - suspend fun uploadImage( - @Header("token") token: String, - @Part file: MultipartBody.Part - ): String + suspend fun uploadImage(@Header("token") token: String, @Part file: MultipartBody.Part): String /** * 新增事件 */ @POST("/event/add") - suspend fun addEvent( - @Header("token") token: String, - @Body requestBody: RequestBody - ): String + suspend fun addEvent(@Header("token") token: String, @Body requestBody: RequestBody): String /** * 人员申请入场 */ - @FormUrlEncoded - @POST("/worker/apply") - suspend fun enter( - @Header("token") token: String, - @Field("workerName") workerName: String, - @Field("gender") gender: String, - @Field("ownerShip") ownerShip: String, - @Field("phoneNumber") phoneNumber: String, - @Field("idCardNumber") idCardNumber: String, - @Field("enterReason") enterReason: String, - @Field("workerAvatar") workerAvatar: String, - @Field("applyTime") applyTime: String - ): String + @POST("/worker/add") + suspend fun enter(@Header("token") token: String, @Body requestBody: RequestBody): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt index a566202..7582a1f 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt @@ -123,13 +123,52 @@ * 人员申请入场 */ suspend fun enter( - workerName: String, gender: String, ownerShip: String, phoneNumber: String, - idCardNumber: String, enterReason: String, workerAvatar: String, applyTime: String + projectId: String, + workerType: String, + deptName: String, + ownerShip: String, + gender: String, + registerTime: String, + deptId: String, + genderName: String, + enterReason: String, + phoneNumber: String, + createTime: String, + workerAvatar: String, + idCardNumber: String, + statusName: String, + id: String, + workerName: String, + isRegister: String, + status: String ): String { - return api.enter( - AuthenticationHelper.token!!, - workerName, gender, ownerShip, phoneNumber, - idCardNumber, enterReason, workerAvatar, applyTime + val param = JsonObject() + param.addProperty("projectId", projectId) + + val workerParam = JsonObject() + workerParam.addProperty("workerType", workerType) + workerParam.addProperty("deptName", deptName) + workerParam.addProperty("ownerShip", ownerShip) + workerParam.addProperty("gender", gender) + workerParam.addProperty("registerTime", registerTime) + workerParam.addProperty("deptId", deptId) + workerParam.addProperty("genderName", genderName) + workerParam.addProperty("enterReason", enterReason) + workerParam.addProperty("phoneNumber", phoneNumber) + workerParam.addProperty("createTime", createTime) + workerParam.addProperty("workerAvatar", workerAvatar) + workerParam.addProperty("idCardNumber", idCardNumber) + workerParam.addProperty("statusName", statusName) + workerParam.addProperty("id", id) + workerParam.addProperty("workerName", workerName) + workerParam.addProperty("isRegister", isRegister) + workerParam.addProperty("status", status) + + param.add("worker", workerParam) + + val requestBody = param.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() ) + return api.enter(AuthenticationHelper.token!!, requestBody) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt index e7136e7..d7c5fac 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt @@ -1,18 +1,20 @@ package com.casic.br.operationsite.view +import android.annotation.SuppressLint import android.content.Context import android.net.Uri +import android.text.Editable +import android.text.TextWatcher import android.util.Log import android.view.View import androidx.activity.result.contract.ActivityResultContracts import androidx.lifecycle.ViewModelProvider -import androidx.recyclerview.widget.GridLayoutManager import com.casic.br.operationsite.R import com.casic.br.operationsite.callback.OnImageCompressListener import com.casic.br.operationsite.extensions.combineImagePath import com.casic.br.operationsite.extensions.compressImage import com.casic.br.operationsite.extensions.initLayoutImmersionBar -import com.casic.br.operationsite.extensions.reformat +import com.casic.br.operationsite.extensions.isIdCard import com.casic.br.operationsite.utils.LoadingDialogHub import com.casic.br.operationsite.utils.LocaleConstant import com.casic.br.operationsite.vm.ApplyViewModel @@ -25,6 +27,7 @@ import com.pengxh.kt.lite.adapter.EditableImageAdapter import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.* +import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.vm.LoadState import com.pengxh.kt.lite.widget.dialog.BottomActionSheet import kotlinx.android.synthetic.main.activity_apply_enter.* @@ -37,6 +40,7 @@ private lateinit var imageAdapter: EditableImageAdapter private lateinit var uploadFileViewModel: UploadFileViewModel private lateinit var applyViewModel: ApplyViewModel + private lateinit var projectId: String private val context: Context = this@ApplyEnterActivity private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集 private val realPaths: ArrayList = ArrayList() //真实图片路径 @@ -53,11 +57,12 @@ } override fun initData() { + projectId = intent.getStringExtra(Constant.INTENT_PARAM)!! + uploadFileViewModel = ViewModelProvider(this)[UploadFileViewModel::class.java] applyViewModel = ViewModelProvider(this)[ApplyViewModel::class.java] - imageAdapter = EditableImageAdapter(this, 1, 13f) - addImageRecyclerView.layoutManager = GridLayoutManager(this, 3) + imageAdapter = EditableImageAdapter(this, 1, 3f) addImageRecyclerView.adapter = imageAdapter } @@ -112,6 +117,28 @@ .build().show() } + enterReasonView.addTextChangedListener(object : TextWatcher { + override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { + + } + + override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { + + } + + @SuppressLint("SetTextI18n") + override fun afterTextChanged(s: Editable?) { + val text = s.toString().trim() + inputLengthView.text = "${text.length}/100" + if (text.length > 100) { + inputLengthView.setTextColor(R.color.redTextColor.convertColor(context)) + "入场原因不能超过100个字符".show(context) + } else { + inputLengthView.setTextColor(R.color.subTextColor.convertColor(context)) + } + } + }) + imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener { override fun onAddImageClick() { //人脸检测 @@ -176,20 +203,41 @@ return@setOnClickListener } + if (!phoneNumberView.text.toString().isPhoneNumber()) { + "请输入正确的联系方式".show(this) + return@setOnClickListener + } + if (idCardView.text.isNullOrBlank()) { "请输入入场人员身份证号".show(this) return@setOnClickListener } + if (!idCardView.text.toString().isIdCard()) { + "请输入正确的身份证号".show(this) + return@setOnClickListener + } + + val currentTime = System.currentTimeMillis().timestampToCompleteDate() applyViewModel.enter( - workerNameView.text.toString(), - genderView.text.toString(), + projectId, + "2", + "", ownerShipView.text.toString(), - phoneNumberView.text.toString(), - idCardView.text.toString(), + "", + currentTime, + "", + genderView.text.toString(), enterReasonView.text.toString(), - imagePaths.reformat(), - System.currentTimeMillis().timestampToCompleteDate() + phoneNumberView.text.toString(), + currentTime, + imagePaths[0], + idCardView.text.toString(), + "", + "", + workerNameView.text.toString(), + "0", + "" ) applyViewModel.resultModel.observe(this) { diff --git a/app/src/main/java/com/casic/br/operationsite/view/UploadEventActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/UploadEventActivity.kt index d31ffba..8e7cdf9 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/UploadEventActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/UploadEventActivity.kt @@ -81,13 +81,13 @@ uploadFileViewModel = ViewModelProvider(this)[UploadFileViewModel::class.java] eventViewModel = ViewModelProvider(this)[EventViewModel::class.java] - imageAdapter = EditableImageAdapter(this, 3, 13f) + imageAdapter = EditableImageAdapter(this, 3, 3f) addImageRecyclerView.adapter = imageAdapter } override fun onResume() { - obtainCurrentLocation() super.onResume() + obtainCurrentLocation() } override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt index 9b225f1..5dff823 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt @@ -28,6 +28,7 @@ private lateinit var aMap: AMap private lateinit var workSiteViewModel: WorkSiteViewModel + private lateinit var projectId: String private val geocoderSearch by lazy { GeocodeSearch(this) } private var latLng: LatLng? = null @@ -43,7 +44,7 @@ } override fun initData() { - val projectId = intent.getStringExtra(Constant.INTENT_PARAM)!! + projectId = intent.getStringExtra(Constant.INTENT_PARAM)!! /** * 地图初始化设置 @@ -168,7 +169,7 @@ } applyTextView.setOnClickListener { - navigatePageTo() + navigatePageTo(projectId) } } diff --git a/app/src/main/java/com/casic/br/operationsite/vm/ApplyViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/ApplyViewModel.kt index d3f95da..62f0972 100644 --- a/app/src/main/java/com/casic/br/operationsite/vm/ApplyViewModel.kt +++ b/app/src/main/java/com/casic/br/operationsite/vm/ApplyViewModel.kt @@ -18,13 +18,45 @@ val resultModel = MutableLiveData() fun enter( - workerName: String, gender: String, ownerShip: String, phoneNumber: String, - idCardNumber: String, enterReason: String, workerImage: String, applyTime: String + projectId: String, + workerType: String, + deptName: String, + ownerShip: String, + gender: String, + registerTime: String, + deptId: String, + genderName: String, + enterReason: String, + phoneNumber: String, + createTime: String, + workerAvatar: String, + idCardNumber: String, + statusName: String, + id: String, + workerName: String, + isRegister: String, + status: String ) = launch({ loadState.value = LoadState.Loading val response = RetrofitServiceManager.enter( - workerName, gender, ownerShip, phoneNumber, - idCardNumber, enterReason, workerImage, applyTime + projectId, + workerType, + deptName, + ownerShip, + gender, + registerTime, + deptId, + genderName, + enterReason, + phoneNumber, + createTime, + workerAvatar, + idCardNumber, + statusName, + id, + workerName, + isRegister, + status ) val responseCode = response.separateResponseCode() if (responseCode == 200) { diff --git a/app/build.gradle b/app/build.gradle index 772c9e1..098120a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -73,7 +73,7 @@ dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') //基础依赖库 - implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.4.3' + implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.4.5' implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'androidx.core:core-ktx:1.9.0' implementation 'com.google.android.material:material:1.6.1' diff --git a/app/src/main/java/com/casic/br/operationsite/extensions/String.kt b/app/src/main/java/com/casic/br/operationsite/extensions/String.kt index 9f7962e..0ba91ea 100644 --- a/app/src/main/java/com/casic/br/operationsite/extensions/String.kt +++ b/app/src/main/java/com/casic/br/operationsite/extensions/String.kt @@ -70,4 +70,24 @@ val p = Pattern.compile(regEx) val m = p.matcher(this) return m.replaceAll("").trim { it <= ' ' } +} + +fun String.isIdCard(): Boolean { + val regExp_15 = + "^[1-9][0-9]{5}[0-9]{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)[0-9]{2}[0-9]" + + val regExp_18 = + "^[1-9][0-9]{5}(18|19|20)[0-9]{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)[0-9]{3}([0-9]|(X|x))" + + return if (this.length != 15 || this.length != 18) { + false + } else { + if (this.length == 15) { + val pattern = Pattern.compile(regExp_15) + pattern.matcher(this).matches() + } else { + val pattern = Pattern.compile(regExp_18) + pattern.matcher(this).matches() + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/model/WorkerModel.java b/app/src/main/java/com/casic/br/operationsite/model/WorkerModel.java new file mode 100644 index 0000000..0255754 --- /dev/null +++ b/app/src/main/java/com/casic/br/operationsite/model/WorkerModel.java @@ -0,0 +1,158 @@ +package com.casic.br.operationsite.model; + +public class WorkerModel { + + private String createTime; + private String deptId; + private String deptName; + private String enterReason; + private String gender; + private String genderName; + private String id; + private String idCardNumber; + private String isRegister; + private String ownerShip; + private String phoneNumber; + private String registerTime; + private String status; + private String statusName; + private String workerAvatar; + private String workerName; + private String workerType; + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getEnterReason() { + return enterReason; + } + + public void setEnterReason(String enterReason) { + this.enterReason = enterReason; + } + + public String getGender() { + return gender; + } + + public void setGender(String gender) { + this.gender = gender; + } + + public String getGenderName() { + return genderName; + } + + public void setGenderName(String genderName) { + this.genderName = genderName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getIdCardNumber() { + return idCardNumber; + } + + public void setIdCardNumber(String idCardNumber) { + this.idCardNumber = idCardNumber; + } + + public String getIsRegister() { + return isRegister; + } + + public void setIsRegister(String isRegister) { + this.isRegister = isRegister; + } + + public String getOwnerShip() { + return ownerShip; + } + + public void setOwnerShip(String ownerShip) { + this.ownerShip = ownerShip; + } + + public String getPhoneNumber() { + return phoneNumber; + } + + public void setPhoneNumber(String phoneNumber) { + this.phoneNumber = phoneNumber; + } + + public String getRegisterTime() { + return registerTime; + } + + public void setRegisterTime(String registerTime) { + this.registerTime = registerTime; + } + + 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 getWorkerAvatar() { + return workerAvatar; + } + + public void setWorkerAvatar(String workerAvatar) { + this.workerAvatar = workerAvatar; + } + + public String getWorkerName() { + return workerName; + } + + public void setWorkerName(String workerName) { + this.workerName = workerName; + } + + public String getWorkerType() { + return workerType; + } + + public void setWorkerType(String workerType) { + this.workerType = workerType; + } +} diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt index 945a924..a6bcfb4 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt @@ -68,10 +68,7 @@ * 报警详情 */ @GET("/alarm/detail") - suspend fun obtainAlarmDetail( - @Header("token") token: String, - @Query("id") id: String - ): String + suspend fun obtainAlarmDetail(@Header("token") token: String, @Query("id") id: String): String /** * 上传图片 @@ -80,34 +77,17 @@ */ @Multipart @POST("/file/upload") - suspend fun uploadImage( - @Header("token") token: String, - @Part file: MultipartBody.Part - ): String + suspend fun uploadImage(@Header("token") token: String, @Part file: MultipartBody.Part): String /** * 新增事件 */ @POST("/event/add") - suspend fun addEvent( - @Header("token") token: String, - @Body requestBody: RequestBody - ): String + suspend fun addEvent(@Header("token") token: String, @Body requestBody: RequestBody): String /** * 人员申请入场 */ - @FormUrlEncoded - @POST("/worker/apply") - suspend fun enter( - @Header("token") token: String, - @Field("workerName") workerName: String, - @Field("gender") gender: String, - @Field("ownerShip") ownerShip: String, - @Field("phoneNumber") phoneNumber: String, - @Field("idCardNumber") idCardNumber: String, - @Field("enterReason") enterReason: String, - @Field("workerAvatar") workerAvatar: String, - @Field("applyTime") applyTime: String - ): String + @POST("/worker/add") + suspend fun enter(@Header("token") token: String, @Body requestBody: RequestBody): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt index a566202..7582a1f 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt @@ -123,13 +123,52 @@ * 人员申请入场 */ suspend fun enter( - workerName: String, gender: String, ownerShip: String, phoneNumber: String, - idCardNumber: String, enterReason: String, workerAvatar: String, applyTime: String + projectId: String, + workerType: String, + deptName: String, + ownerShip: String, + gender: String, + registerTime: String, + deptId: String, + genderName: String, + enterReason: String, + phoneNumber: String, + createTime: String, + workerAvatar: String, + idCardNumber: String, + statusName: String, + id: String, + workerName: String, + isRegister: String, + status: String ): String { - return api.enter( - AuthenticationHelper.token!!, - workerName, gender, ownerShip, phoneNumber, - idCardNumber, enterReason, workerAvatar, applyTime + val param = JsonObject() + param.addProperty("projectId", projectId) + + val workerParam = JsonObject() + workerParam.addProperty("workerType", workerType) + workerParam.addProperty("deptName", deptName) + workerParam.addProperty("ownerShip", ownerShip) + workerParam.addProperty("gender", gender) + workerParam.addProperty("registerTime", registerTime) + workerParam.addProperty("deptId", deptId) + workerParam.addProperty("genderName", genderName) + workerParam.addProperty("enterReason", enterReason) + workerParam.addProperty("phoneNumber", phoneNumber) + workerParam.addProperty("createTime", createTime) + workerParam.addProperty("workerAvatar", workerAvatar) + workerParam.addProperty("idCardNumber", idCardNumber) + workerParam.addProperty("statusName", statusName) + workerParam.addProperty("id", id) + workerParam.addProperty("workerName", workerName) + workerParam.addProperty("isRegister", isRegister) + workerParam.addProperty("status", status) + + param.add("worker", workerParam) + + val requestBody = param.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() ) + return api.enter(AuthenticationHelper.token!!, requestBody) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt index e7136e7..d7c5fac 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt @@ -1,18 +1,20 @@ package com.casic.br.operationsite.view +import android.annotation.SuppressLint import android.content.Context import android.net.Uri +import android.text.Editable +import android.text.TextWatcher import android.util.Log import android.view.View import androidx.activity.result.contract.ActivityResultContracts import androidx.lifecycle.ViewModelProvider -import androidx.recyclerview.widget.GridLayoutManager import com.casic.br.operationsite.R import com.casic.br.operationsite.callback.OnImageCompressListener import com.casic.br.operationsite.extensions.combineImagePath import com.casic.br.operationsite.extensions.compressImage import com.casic.br.operationsite.extensions.initLayoutImmersionBar -import com.casic.br.operationsite.extensions.reformat +import com.casic.br.operationsite.extensions.isIdCard import com.casic.br.operationsite.utils.LoadingDialogHub import com.casic.br.operationsite.utils.LocaleConstant import com.casic.br.operationsite.vm.ApplyViewModel @@ -25,6 +27,7 @@ import com.pengxh.kt.lite.adapter.EditableImageAdapter import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.* +import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.vm.LoadState import com.pengxh.kt.lite.widget.dialog.BottomActionSheet import kotlinx.android.synthetic.main.activity_apply_enter.* @@ -37,6 +40,7 @@ private lateinit var imageAdapter: EditableImageAdapter private lateinit var uploadFileViewModel: UploadFileViewModel private lateinit var applyViewModel: ApplyViewModel + private lateinit var projectId: String private val context: Context = this@ApplyEnterActivity private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集 private val realPaths: ArrayList = ArrayList() //真实图片路径 @@ -53,11 +57,12 @@ } override fun initData() { + projectId = intent.getStringExtra(Constant.INTENT_PARAM)!! + uploadFileViewModel = ViewModelProvider(this)[UploadFileViewModel::class.java] applyViewModel = ViewModelProvider(this)[ApplyViewModel::class.java] - imageAdapter = EditableImageAdapter(this, 1, 13f) - addImageRecyclerView.layoutManager = GridLayoutManager(this, 3) + imageAdapter = EditableImageAdapter(this, 1, 3f) addImageRecyclerView.adapter = imageAdapter } @@ -112,6 +117,28 @@ .build().show() } + enterReasonView.addTextChangedListener(object : TextWatcher { + override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { + + } + + override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { + + } + + @SuppressLint("SetTextI18n") + override fun afterTextChanged(s: Editable?) { + val text = s.toString().trim() + inputLengthView.text = "${text.length}/100" + if (text.length > 100) { + inputLengthView.setTextColor(R.color.redTextColor.convertColor(context)) + "入场原因不能超过100个字符".show(context) + } else { + inputLengthView.setTextColor(R.color.subTextColor.convertColor(context)) + } + } + }) + imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener { override fun onAddImageClick() { //人脸检测 @@ -176,20 +203,41 @@ return@setOnClickListener } + if (!phoneNumberView.text.toString().isPhoneNumber()) { + "请输入正确的联系方式".show(this) + return@setOnClickListener + } + if (idCardView.text.isNullOrBlank()) { "请输入入场人员身份证号".show(this) return@setOnClickListener } + if (!idCardView.text.toString().isIdCard()) { + "请输入正确的身份证号".show(this) + return@setOnClickListener + } + + val currentTime = System.currentTimeMillis().timestampToCompleteDate() applyViewModel.enter( - workerNameView.text.toString(), - genderView.text.toString(), + projectId, + "2", + "", ownerShipView.text.toString(), - phoneNumberView.text.toString(), - idCardView.text.toString(), + "", + currentTime, + "", + genderView.text.toString(), enterReasonView.text.toString(), - imagePaths.reformat(), - System.currentTimeMillis().timestampToCompleteDate() + phoneNumberView.text.toString(), + currentTime, + imagePaths[0], + idCardView.text.toString(), + "", + "", + workerNameView.text.toString(), + "0", + "" ) applyViewModel.resultModel.observe(this) { diff --git a/app/src/main/java/com/casic/br/operationsite/view/UploadEventActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/UploadEventActivity.kt index d31ffba..8e7cdf9 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/UploadEventActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/UploadEventActivity.kt @@ -81,13 +81,13 @@ uploadFileViewModel = ViewModelProvider(this)[UploadFileViewModel::class.java] eventViewModel = ViewModelProvider(this)[EventViewModel::class.java] - imageAdapter = EditableImageAdapter(this, 3, 13f) + imageAdapter = EditableImageAdapter(this, 3, 3f) addImageRecyclerView.adapter = imageAdapter } override fun onResume() { - obtainCurrentLocation() super.onResume() + obtainCurrentLocation() } override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt index 9b225f1..5dff823 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt @@ -28,6 +28,7 @@ private lateinit var aMap: AMap private lateinit var workSiteViewModel: WorkSiteViewModel + private lateinit var projectId: String private val geocoderSearch by lazy { GeocodeSearch(this) } private var latLng: LatLng? = null @@ -43,7 +44,7 @@ } override fun initData() { - val projectId = intent.getStringExtra(Constant.INTENT_PARAM)!! + projectId = intent.getStringExtra(Constant.INTENT_PARAM)!! /** * 地图初始化设置 @@ -168,7 +169,7 @@ } applyTextView.setOnClickListener { - navigatePageTo() + navigatePageTo(projectId) } } diff --git a/app/src/main/java/com/casic/br/operationsite/vm/ApplyViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/ApplyViewModel.kt index d3f95da..62f0972 100644 --- a/app/src/main/java/com/casic/br/operationsite/vm/ApplyViewModel.kt +++ b/app/src/main/java/com/casic/br/operationsite/vm/ApplyViewModel.kt @@ -18,13 +18,45 @@ val resultModel = MutableLiveData() fun enter( - workerName: String, gender: String, ownerShip: String, phoneNumber: String, - idCardNumber: String, enterReason: String, workerImage: String, applyTime: String + projectId: String, + workerType: String, + deptName: String, + ownerShip: String, + gender: String, + registerTime: String, + deptId: String, + genderName: String, + enterReason: String, + phoneNumber: String, + createTime: String, + workerAvatar: String, + idCardNumber: String, + statusName: String, + id: String, + workerName: String, + isRegister: String, + status: String ) = launch({ loadState.value = LoadState.Loading val response = RetrofitServiceManager.enter( - workerName, gender, ownerShip, phoneNumber, - idCardNumber, enterReason, workerImage, applyTime + projectId, + workerType, + deptName, + ownerShip, + gender, + registerTime, + deptId, + genderName, + enterReason, + phoneNumber, + createTime, + workerAvatar, + idCardNumber, + statusName, + id, + workerName, + isRegister, + status ) val responseCode = response.separateResponseCode() if (responseCode == 200) { diff --git a/app/src/main/res/layout/activity_apply_enter.xml b/app/src/main/res/layout/activity_apply_enter.xml index 605b8fd..23c6118 100644 --- a/app/src/main/res/layout/activity_apply_enter.xml +++ b/app/src/main/res/layout/activity_apply_enter.xml @@ -1,5 +1,6 @@ + style="@style/LinearLayoutEditTextStyle" + android:hint="请入场人员名称" /> @@ -59,7 +61,8 @@ + style="@style/LinearLayoutEditTextStyle" + android:hint="请输入入场人员所属单位名称" /> @@ -73,7 +76,9 @@ + android:hint="请输入入场人员联系方式" + android:inputType="phone" + android:maxLength="11" /> @@ -86,7 +91,9 @@ + style="@style/LinearLayoutEditTextStyle" + android:hint="请输入入场人员证件号" + android:maxLength="18" /> @@ -133,7 +140,9 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="@dimen/dp_10" - android:paddingHorizontal="@dimen/dp_10" /> + android:paddingHorizontal="@dimen/dp_10" + app:layoutManager="androidx.recyclerview.widget.GridLayoutManager" + app:spanCount="3" /> diff --git a/app/build.gradle b/app/build.gradle index 772c9e1..098120a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -73,7 +73,7 @@ dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') //基础依赖库 - implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.4.3' + implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.4.5' implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'androidx.core:core-ktx:1.9.0' implementation 'com.google.android.material:material:1.6.1' diff --git a/app/src/main/java/com/casic/br/operationsite/extensions/String.kt b/app/src/main/java/com/casic/br/operationsite/extensions/String.kt index 9f7962e..0ba91ea 100644 --- a/app/src/main/java/com/casic/br/operationsite/extensions/String.kt +++ b/app/src/main/java/com/casic/br/operationsite/extensions/String.kt @@ -70,4 +70,24 @@ val p = Pattern.compile(regEx) val m = p.matcher(this) return m.replaceAll("").trim { it <= ' ' } +} + +fun String.isIdCard(): Boolean { + val regExp_15 = + "^[1-9][0-9]{5}[0-9]{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)[0-9]{2}[0-9]" + + val regExp_18 = + "^[1-9][0-9]{5}(18|19|20)[0-9]{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)[0-9]{3}([0-9]|(X|x))" + + return if (this.length != 15 || this.length != 18) { + false + } else { + if (this.length == 15) { + val pattern = Pattern.compile(regExp_15) + pattern.matcher(this).matches() + } else { + val pattern = Pattern.compile(regExp_18) + pattern.matcher(this).matches() + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/model/WorkerModel.java b/app/src/main/java/com/casic/br/operationsite/model/WorkerModel.java new file mode 100644 index 0000000..0255754 --- /dev/null +++ b/app/src/main/java/com/casic/br/operationsite/model/WorkerModel.java @@ -0,0 +1,158 @@ +package com.casic.br.operationsite.model; + +public class WorkerModel { + + private String createTime; + private String deptId; + private String deptName; + private String enterReason; + private String gender; + private String genderName; + private String id; + private String idCardNumber; + private String isRegister; + private String ownerShip; + private String phoneNumber; + private String registerTime; + private String status; + private String statusName; + private String workerAvatar; + private String workerName; + private String workerType; + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getEnterReason() { + return enterReason; + } + + public void setEnterReason(String enterReason) { + this.enterReason = enterReason; + } + + public String getGender() { + return gender; + } + + public void setGender(String gender) { + this.gender = gender; + } + + public String getGenderName() { + return genderName; + } + + public void setGenderName(String genderName) { + this.genderName = genderName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getIdCardNumber() { + return idCardNumber; + } + + public void setIdCardNumber(String idCardNumber) { + this.idCardNumber = idCardNumber; + } + + public String getIsRegister() { + return isRegister; + } + + public void setIsRegister(String isRegister) { + this.isRegister = isRegister; + } + + public String getOwnerShip() { + return ownerShip; + } + + public void setOwnerShip(String ownerShip) { + this.ownerShip = ownerShip; + } + + public String getPhoneNumber() { + return phoneNumber; + } + + public void setPhoneNumber(String phoneNumber) { + this.phoneNumber = phoneNumber; + } + + public String getRegisterTime() { + return registerTime; + } + + public void setRegisterTime(String registerTime) { + this.registerTime = registerTime; + } + + 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 getWorkerAvatar() { + return workerAvatar; + } + + public void setWorkerAvatar(String workerAvatar) { + this.workerAvatar = workerAvatar; + } + + public String getWorkerName() { + return workerName; + } + + public void setWorkerName(String workerName) { + this.workerName = workerName; + } + + public String getWorkerType() { + return workerType; + } + + public void setWorkerType(String workerType) { + this.workerType = workerType; + } +} diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt index 945a924..a6bcfb4 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt @@ -68,10 +68,7 @@ * 报警详情 */ @GET("/alarm/detail") - suspend fun obtainAlarmDetail( - @Header("token") token: String, - @Query("id") id: String - ): String + suspend fun obtainAlarmDetail(@Header("token") token: String, @Query("id") id: String): String /** * 上传图片 @@ -80,34 +77,17 @@ */ @Multipart @POST("/file/upload") - suspend fun uploadImage( - @Header("token") token: String, - @Part file: MultipartBody.Part - ): String + suspend fun uploadImage(@Header("token") token: String, @Part file: MultipartBody.Part): String /** * 新增事件 */ @POST("/event/add") - suspend fun addEvent( - @Header("token") token: String, - @Body requestBody: RequestBody - ): String + suspend fun addEvent(@Header("token") token: String, @Body requestBody: RequestBody): String /** * 人员申请入场 */ - @FormUrlEncoded - @POST("/worker/apply") - suspend fun enter( - @Header("token") token: String, - @Field("workerName") workerName: String, - @Field("gender") gender: String, - @Field("ownerShip") ownerShip: String, - @Field("phoneNumber") phoneNumber: String, - @Field("idCardNumber") idCardNumber: String, - @Field("enterReason") enterReason: String, - @Field("workerAvatar") workerAvatar: String, - @Field("applyTime") applyTime: String - ): String + @POST("/worker/add") + suspend fun enter(@Header("token") token: String, @Body requestBody: RequestBody): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt index a566202..7582a1f 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt @@ -123,13 +123,52 @@ * 人员申请入场 */ suspend fun enter( - workerName: String, gender: String, ownerShip: String, phoneNumber: String, - idCardNumber: String, enterReason: String, workerAvatar: String, applyTime: String + projectId: String, + workerType: String, + deptName: String, + ownerShip: String, + gender: String, + registerTime: String, + deptId: String, + genderName: String, + enterReason: String, + phoneNumber: String, + createTime: String, + workerAvatar: String, + idCardNumber: String, + statusName: String, + id: String, + workerName: String, + isRegister: String, + status: String ): String { - return api.enter( - AuthenticationHelper.token!!, - workerName, gender, ownerShip, phoneNumber, - idCardNumber, enterReason, workerAvatar, applyTime + val param = JsonObject() + param.addProperty("projectId", projectId) + + val workerParam = JsonObject() + workerParam.addProperty("workerType", workerType) + workerParam.addProperty("deptName", deptName) + workerParam.addProperty("ownerShip", ownerShip) + workerParam.addProperty("gender", gender) + workerParam.addProperty("registerTime", registerTime) + workerParam.addProperty("deptId", deptId) + workerParam.addProperty("genderName", genderName) + workerParam.addProperty("enterReason", enterReason) + workerParam.addProperty("phoneNumber", phoneNumber) + workerParam.addProperty("createTime", createTime) + workerParam.addProperty("workerAvatar", workerAvatar) + workerParam.addProperty("idCardNumber", idCardNumber) + workerParam.addProperty("statusName", statusName) + workerParam.addProperty("id", id) + workerParam.addProperty("workerName", workerName) + workerParam.addProperty("isRegister", isRegister) + workerParam.addProperty("status", status) + + param.add("worker", workerParam) + + val requestBody = param.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() ) + return api.enter(AuthenticationHelper.token!!, requestBody) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt index e7136e7..d7c5fac 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt @@ -1,18 +1,20 @@ package com.casic.br.operationsite.view +import android.annotation.SuppressLint import android.content.Context import android.net.Uri +import android.text.Editable +import android.text.TextWatcher import android.util.Log import android.view.View import androidx.activity.result.contract.ActivityResultContracts import androidx.lifecycle.ViewModelProvider -import androidx.recyclerview.widget.GridLayoutManager import com.casic.br.operationsite.R import com.casic.br.operationsite.callback.OnImageCompressListener import com.casic.br.operationsite.extensions.combineImagePath import com.casic.br.operationsite.extensions.compressImage import com.casic.br.operationsite.extensions.initLayoutImmersionBar -import com.casic.br.operationsite.extensions.reformat +import com.casic.br.operationsite.extensions.isIdCard import com.casic.br.operationsite.utils.LoadingDialogHub import com.casic.br.operationsite.utils.LocaleConstant import com.casic.br.operationsite.vm.ApplyViewModel @@ -25,6 +27,7 @@ import com.pengxh.kt.lite.adapter.EditableImageAdapter import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.* +import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.vm.LoadState import com.pengxh.kt.lite.widget.dialog.BottomActionSheet import kotlinx.android.synthetic.main.activity_apply_enter.* @@ -37,6 +40,7 @@ private lateinit var imageAdapter: EditableImageAdapter private lateinit var uploadFileViewModel: UploadFileViewModel private lateinit var applyViewModel: ApplyViewModel + private lateinit var projectId: String private val context: Context = this@ApplyEnterActivity private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集 private val realPaths: ArrayList = ArrayList() //真实图片路径 @@ -53,11 +57,12 @@ } override fun initData() { + projectId = intent.getStringExtra(Constant.INTENT_PARAM)!! + uploadFileViewModel = ViewModelProvider(this)[UploadFileViewModel::class.java] applyViewModel = ViewModelProvider(this)[ApplyViewModel::class.java] - imageAdapter = EditableImageAdapter(this, 1, 13f) - addImageRecyclerView.layoutManager = GridLayoutManager(this, 3) + imageAdapter = EditableImageAdapter(this, 1, 3f) addImageRecyclerView.adapter = imageAdapter } @@ -112,6 +117,28 @@ .build().show() } + enterReasonView.addTextChangedListener(object : TextWatcher { + override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { + + } + + override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { + + } + + @SuppressLint("SetTextI18n") + override fun afterTextChanged(s: Editable?) { + val text = s.toString().trim() + inputLengthView.text = "${text.length}/100" + if (text.length > 100) { + inputLengthView.setTextColor(R.color.redTextColor.convertColor(context)) + "入场原因不能超过100个字符".show(context) + } else { + inputLengthView.setTextColor(R.color.subTextColor.convertColor(context)) + } + } + }) + imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener { override fun onAddImageClick() { //人脸检测 @@ -176,20 +203,41 @@ return@setOnClickListener } + if (!phoneNumberView.text.toString().isPhoneNumber()) { + "请输入正确的联系方式".show(this) + return@setOnClickListener + } + if (idCardView.text.isNullOrBlank()) { "请输入入场人员身份证号".show(this) return@setOnClickListener } + if (!idCardView.text.toString().isIdCard()) { + "请输入正确的身份证号".show(this) + return@setOnClickListener + } + + val currentTime = System.currentTimeMillis().timestampToCompleteDate() applyViewModel.enter( - workerNameView.text.toString(), - genderView.text.toString(), + projectId, + "2", + "", ownerShipView.text.toString(), - phoneNumberView.text.toString(), - idCardView.text.toString(), + "", + currentTime, + "", + genderView.text.toString(), enterReasonView.text.toString(), - imagePaths.reformat(), - System.currentTimeMillis().timestampToCompleteDate() + phoneNumberView.text.toString(), + currentTime, + imagePaths[0], + idCardView.text.toString(), + "", + "", + workerNameView.text.toString(), + "0", + "" ) applyViewModel.resultModel.observe(this) { diff --git a/app/src/main/java/com/casic/br/operationsite/view/UploadEventActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/UploadEventActivity.kt index d31ffba..8e7cdf9 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/UploadEventActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/UploadEventActivity.kt @@ -81,13 +81,13 @@ uploadFileViewModel = ViewModelProvider(this)[UploadFileViewModel::class.java] eventViewModel = ViewModelProvider(this)[EventViewModel::class.java] - imageAdapter = EditableImageAdapter(this, 3, 13f) + imageAdapter = EditableImageAdapter(this, 3, 3f) addImageRecyclerView.adapter = imageAdapter } override fun onResume() { - obtainCurrentLocation() super.onResume() + obtainCurrentLocation() } override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt index 9b225f1..5dff823 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt @@ -28,6 +28,7 @@ private lateinit var aMap: AMap private lateinit var workSiteViewModel: WorkSiteViewModel + private lateinit var projectId: String private val geocoderSearch by lazy { GeocodeSearch(this) } private var latLng: LatLng? = null @@ -43,7 +44,7 @@ } override fun initData() { - val projectId = intent.getStringExtra(Constant.INTENT_PARAM)!! + projectId = intent.getStringExtra(Constant.INTENT_PARAM)!! /** * 地图初始化设置 @@ -168,7 +169,7 @@ } applyTextView.setOnClickListener { - navigatePageTo() + navigatePageTo(projectId) } } diff --git a/app/src/main/java/com/casic/br/operationsite/vm/ApplyViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/ApplyViewModel.kt index d3f95da..62f0972 100644 --- a/app/src/main/java/com/casic/br/operationsite/vm/ApplyViewModel.kt +++ b/app/src/main/java/com/casic/br/operationsite/vm/ApplyViewModel.kt @@ -18,13 +18,45 @@ val resultModel = MutableLiveData() fun enter( - workerName: String, gender: String, ownerShip: String, phoneNumber: String, - idCardNumber: String, enterReason: String, workerImage: String, applyTime: String + projectId: String, + workerType: String, + deptName: String, + ownerShip: String, + gender: String, + registerTime: String, + deptId: String, + genderName: String, + enterReason: String, + phoneNumber: String, + createTime: String, + workerAvatar: String, + idCardNumber: String, + statusName: String, + id: String, + workerName: String, + isRegister: String, + status: String ) = launch({ loadState.value = LoadState.Loading val response = RetrofitServiceManager.enter( - workerName, gender, ownerShip, phoneNumber, - idCardNumber, enterReason, workerImage, applyTime + projectId, + workerType, + deptName, + ownerShip, + gender, + registerTime, + deptId, + genderName, + enterReason, + phoneNumber, + createTime, + workerAvatar, + idCardNumber, + statusName, + id, + workerName, + isRegister, + status ) val responseCode = response.separateResponseCode() if (responseCode == 200) { diff --git a/app/src/main/res/layout/activity_apply_enter.xml b/app/src/main/res/layout/activity_apply_enter.xml index 605b8fd..23c6118 100644 --- a/app/src/main/res/layout/activity_apply_enter.xml +++ b/app/src/main/res/layout/activity_apply_enter.xml @@ -1,5 +1,6 @@ + style="@style/LinearLayoutEditTextStyle" + android:hint="请入场人员名称" /> @@ -59,7 +61,8 @@ + style="@style/LinearLayoutEditTextStyle" + android:hint="请输入入场人员所属单位名称" /> @@ -73,7 +76,9 @@ + android:hint="请输入入场人员联系方式" + android:inputType="phone" + android:maxLength="11" /> @@ -86,7 +91,9 @@ + style="@style/LinearLayoutEditTextStyle" + android:hint="请输入入场人员证件号" + android:maxLength="18" /> @@ -133,7 +140,9 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="@dimen/dp_10" - android:paddingHorizontal="@dimen/dp_10" /> + android:paddingHorizontal="@dimen/dp_10" + app:layoutManager="androidx.recyclerview.widget.GridLayoutManager" + app:spanCount="3" /> diff --git a/app/src/main/res/layout/activity_upload_activity.xml b/app/src/main/res/layout/activity_upload_activity.xml index bcbe5a8..3ce55fb 100644 --- a/app/src/main/res/layout/activity_upload_activity.xml +++ b/app/src/main/res/layout/activity_upload_activity.xml @@ -29,7 +29,8 @@ + style="@style/LinearLayoutEditTextStyle" + android:hint="请简要输入事件名称" /> diff --git a/app/build.gradle b/app/build.gradle index 772c9e1..098120a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -73,7 +73,7 @@ dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') //基础依赖库 - implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.4.3' + implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.4.5' implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'androidx.core:core-ktx:1.9.0' implementation 'com.google.android.material:material:1.6.1' diff --git a/app/src/main/java/com/casic/br/operationsite/extensions/String.kt b/app/src/main/java/com/casic/br/operationsite/extensions/String.kt index 9f7962e..0ba91ea 100644 --- a/app/src/main/java/com/casic/br/operationsite/extensions/String.kt +++ b/app/src/main/java/com/casic/br/operationsite/extensions/String.kt @@ -70,4 +70,24 @@ val p = Pattern.compile(regEx) val m = p.matcher(this) return m.replaceAll("").trim { it <= ' ' } +} + +fun String.isIdCard(): Boolean { + val regExp_15 = + "^[1-9][0-9]{5}[0-9]{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)[0-9]{2}[0-9]" + + val regExp_18 = + "^[1-9][0-9]{5}(18|19|20)[0-9]{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)[0-9]{3}([0-9]|(X|x))" + + return if (this.length != 15 || this.length != 18) { + false + } else { + if (this.length == 15) { + val pattern = Pattern.compile(regExp_15) + pattern.matcher(this).matches() + } else { + val pattern = Pattern.compile(regExp_18) + pattern.matcher(this).matches() + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/model/WorkerModel.java b/app/src/main/java/com/casic/br/operationsite/model/WorkerModel.java new file mode 100644 index 0000000..0255754 --- /dev/null +++ b/app/src/main/java/com/casic/br/operationsite/model/WorkerModel.java @@ -0,0 +1,158 @@ +package com.casic.br.operationsite.model; + +public class WorkerModel { + + private String createTime; + private String deptId; + private String deptName; + private String enterReason; + private String gender; + private String genderName; + private String id; + private String idCardNumber; + private String isRegister; + private String ownerShip; + private String phoneNumber; + private String registerTime; + private String status; + private String statusName; + private String workerAvatar; + private String workerName; + private String workerType; + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getEnterReason() { + return enterReason; + } + + public void setEnterReason(String enterReason) { + this.enterReason = enterReason; + } + + public String getGender() { + return gender; + } + + public void setGender(String gender) { + this.gender = gender; + } + + public String getGenderName() { + return genderName; + } + + public void setGenderName(String genderName) { + this.genderName = genderName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getIdCardNumber() { + return idCardNumber; + } + + public void setIdCardNumber(String idCardNumber) { + this.idCardNumber = idCardNumber; + } + + public String getIsRegister() { + return isRegister; + } + + public void setIsRegister(String isRegister) { + this.isRegister = isRegister; + } + + public String getOwnerShip() { + return ownerShip; + } + + public void setOwnerShip(String ownerShip) { + this.ownerShip = ownerShip; + } + + public String getPhoneNumber() { + return phoneNumber; + } + + public void setPhoneNumber(String phoneNumber) { + this.phoneNumber = phoneNumber; + } + + public String getRegisterTime() { + return registerTime; + } + + public void setRegisterTime(String registerTime) { + this.registerTime = registerTime; + } + + 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 getWorkerAvatar() { + return workerAvatar; + } + + public void setWorkerAvatar(String workerAvatar) { + this.workerAvatar = workerAvatar; + } + + public String getWorkerName() { + return workerName; + } + + public void setWorkerName(String workerName) { + this.workerName = workerName; + } + + public String getWorkerType() { + return workerType; + } + + public void setWorkerType(String workerType) { + this.workerType = workerType; + } +} diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt index 945a924..a6bcfb4 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt @@ -68,10 +68,7 @@ * 报警详情 */ @GET("/alarm/detail") - suspend fun obtainAlarmDetail( - @Header("token") token: String, - @Query("id") id: String - ): String + suspend fun obtainAlarmDetail(@Header("token") token: String, @Query("id") id: String): String /** * 上传图片 @@ -80,34 +77,17 @@ */ @Multipart @POST("/file/upload") - suspend fun uploadImage( - @Header("token") token: String, - @Part file: MultipartBody.Part - ): String + suspend fun uploadImage(@Header("token") token: String, @Part file: MultipartBody.Part): String /** * 新增事件 */ @POST("/event/add") - suspend fun addEvent( - @Header("token") token: String, - @Body requestBody: RequestBody - ): String + suspend fun addEvent(@Header("token") token: String, @Body requestBody: RequestBody): String /** * 人员申请入场 */ - @FormUrlEncoded - @POST("/worker/apply") - suspend fun enter( - @Header("token") token: String, - @Field("workerName") workerName: String, - @Field("gender") gender: String, - @Field("ownerShip") ownerShip: String, - @Field("phoneNumber") phoneNumber: String, - @Field("idCardNumber") idCardNumber: String, - @Field("enterReason") enterReason: String, - @Field("workerAvatar") workerAvatar: String, - @Field("applyTime") applyTime: String - ): String + @POST("/worker/add") + suspend fun enter(@Header("token") token: String, @Body requestBody: RequestBody): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt index a566202..7582a1f 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt @@ -123,13 +123,52 @@ * 人员申请入场 */ suspend fun enter( - workerName: String, gender: String, ownerShip: String, phoneNumber: String, - idCardNumber: String, enterReason: String, workerAvatar: String, applyTime: String + projectId: String, + workerType: String, + deptName: String, + ownerShip: String, + gender: String, + registerTime: String, + deptId: String, + genderName: String, + enterReason: String, + phoneNumber: String, + createTime: String, + workerAvatar: String, + idCardNumber: String, + statusName: String, + id: String, + workerName: String, + isRegister: String, + status: String ): String { - return api.enter( - AuthenticationHelper.token!!, - workerName, gender, ownerShip, phoneNumber, - idCardNumber, enterReason, workerAvatar, applyTime + val param = JsonObject() + param.addProperty("projectId", projectId) + + val workerParam = JsonObject() + workerParam.addProperty("workerType", workerType) + workerParam.addProperty("deptName", deptName) + workerParam.addProperty("ownerShip", ownerShip) + workerParam.addProperty("gender", gender) + workerParam.addProperty("registerTime", registerTime) + workerParam.addProperty("deptId", deptId) + workerParam.addProperty("genderName", genderName) + workerParam.addProperty("enterReason", enterReason) + workerParam.addProperty("phoneNumber", phoneNumber) + workerParam.addProperty("createTime", createTime) + workerParam.addProperty("workerAvatar", workerAvatar) + workerParam.addProperty("idCardNumber", idCardNumber) + workerParam.addProperty("statusName", statusName) + workerParam.addProperty("id", id) + workerParam.addProperty("workerName", workerName) + workerParam.addProperty("isRegister", isRegister) + workerParam.addProperty("status", status) + + param.add("worker", workerParam) + + val requestBody = param.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() ) + return api.enter(AuthenticationHelper.token!!, requestBody) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt index e7136e7..d7c5fac 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt @@ -1,18 +1,20 @@ package com.casic.br.operationsite.view +import android.annotation.SuppressLint import android.content.Context import android.net.Uri +import android.text.Editable +import android.text.TextWatcher import android.util.Log import android.view.View import androidx.activity.result.contract.ActivityResultContracts import androidx.lifecycle.ViewModelProvider -import androidx.recyclerview.widget.GridLayoutManager import com.casic.br.operationsite.R import com.casic.br.operationsite.callback.OnImageCompressListener import com.casic.br.operationsite.extensions.combineImagePath import com.casic.br.operationsite.extensions.compressImage import com.casic.br.operationsite.extensions.initLayoutImmersionBar -import com.casic.br.operationsite.extensions.reformat +import com.casic.br.operationsite.extensions.isIdCard import com.casic.br.operationsite.utils.LoadingDialogHub import com.casic.br.operationsite.utils.LocaleConstant import com.casic.br.operationsite.vm.ApplyViewModel @@ -25,6 +27,7 @@ import com.pengxh.kt.lite.adapter.EditableImageAdapter import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.* +import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.vm.LoadState import com.pengxh.kt.lite.widget.dialog.BottomActionSheet import kotlinx.android.synthetic.main.activity_apply_enter.* @@ -37,6 +40,7 @@ private lateinit var imageAdapter: EditableImageAdapter private lateinit var uploadFileViewModel: UploadFileViewModel private lateinit var applyViewModel: ApplyViewModel + private lateinit var projectId: String private val context: Context = this@ApplyEnterActivity private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集 private val realPaths: ArrayList = ArrayList() //真实图片路径 @@ -53,11 +57,12 @@ } override fun initData() { + projectId = intent.getStringExtra(Constant.INTENT_PARAM)!! + uploadFileViewModel = ViewModelProvider(this)[UploadFileViewModel::class.java] applyViewModel = ViewModelProvider(this)[ApplyViewModel::class.java] - imageAdapter = EditableImageAdapter(this, 1, 13f) - addImageRecyclerView.layoutManager = GridLayoutManager(this, 3) + imageAdapter = EditableImageAdapter(this, 1, 3f) addImageRecyclerView.adapter = imageAdapter } @@ -112,6 +117,28 @@ .build().show() } + enterReasonView.addTextChangedListener(object : TextWatcher { + override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { + + } + + override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { + + } + + @SuppressLint("SetTextI18n") + override fun afterTextChanged(s: Editable?) { + val text = s.toString().trim() + inputLengthView.text = "${text.length}/100" + if (text.length > 100) { + inputLengthView.setTextColor(R.color.redTextColor.convertColor(context)) + "入场原因不能超过100个字符".show(context) + } else { + inputLengthView.setTextColor(R.color.subTextColor.convertColor(context)) + } + } + }) + imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener { override fun onAddImageClick() { //人脸检测 @@ -176,20 +203,41 @@ return@setOnClickListener } + if (!phoneNumberView.text.toString().isPhoneNumber()) { + "请输入正确的联系方式".show(this) + return@setOnClickListener + } + if (idCardView.text.isNullOrBlank()) { "请输入入场人员身份证号".show(this) return@setOnClickListener } + if (!idCardView.text.toString().isIdCard()) { + "请输入正确的身份证号".show(this) + return@setOnClickListener + } + + val currentTime = System.currentTimeMillis().timestampToCompleteDate() applyViewModel.enter( - workerNameView.text.toString(), - genderView.text.toString(), + projectId, + "2", + "", ownerShipView.text.toString(), - phoneNumberView.text.toString(), - idCardView.text.toString(), + "", + currentTime, + "", + genderView.text.toString(), enterReasonView.text.toString(), - imagePaths.reformat(), - System.currentTimeMillis().timestampToCompleteDate() + phoneNumberView.text.toString(), + currentTime, + imagePaths[0], + idCardView.text.toString(), + "", + "", + workerNameView.text.toString(), + "0", + "" ) applyViewModel.resultModel.observe(this) { diff --git a/app/src/main/java/com/casic/br/operationsite/view/UploadEventActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/UploadEventActivity.kt index d31ffba..8e7cdf9 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/UploadEventActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/UploadEventActivity.kt @@ -81,13 +81,13 @@ uploadFileViewModel = ViewModelProvider(this)[UploadFileViewModel::class.java] eventViewModel = ViewModelProvider(this)[EventViewModel::class.java] - imageAdapter = EditableImageAdapter(this, 3, 13f) + imageAdapter = EditableImageAdapter(this, 3, 3f) addImageRecyclerView.adapter = imageAdapter } override fun onResume() { - obtainCurrentLocation() super.onResume() + obtainCurrentLocation() } override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt index 9b225f1..5dff823 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt @@ -28,6 +28,7 @@ private lateinit var aMap: AMap private lateinit var workSiteViewModel: WorkSiteViewModel + private lateinit var projectId: String private val geocoderSearch by lazy { GeocodeSearch(this) } private var latLng: LatLng? = null @@ -43,7 +44,7 @@ } override fun initData() { - val projectId = intent.getStringExtra(Constant.INTENT_PARAM)!! + projectId = intent.getStringExtra(Constant.INTENT_PARAM)!! /** * 地图初始化设置 @@ -168,7 +169,7 @@ } applyTextView.setOnClickListener { - navigatePageTo() + navigatePageTo(projectId) } } diff --git a/app/src/main/java/com/casic/br/operationsite/vm/ApplyViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/ApplyViewModel.kt index d3f95da..62f0972 100644 --- a/app/src/main/java/com/casic/br/operationsite/vm/ApplyViewModel.kt +++ b/app/src/main/java/com/casic/br/operationsite/vm/ApplyViewModel.kt @@ -18,13 +18,45 @@ val resultModel = MutableLiveData() fun enter( - workerName: String, gender: String, ownerShip: String, phoneNumber: String, - idCardNumber: String, enterReason: String, workerImage: String, applyTime: String + projectId: String, + workerType: String, + deptName: String, + ownerShip: String, + gender: String, + registerTime: String, + deptId: String, + genderName: String, + enterReason: String, + phoneNumber: String, + createTime: String, + workerAvatar: String, + idCardNumber: String, + statusName: String, + id: String, + workerName: String, + isRegister: String, + status: String ) = launch({ loadState.value = LoadState.Loading val response = RetrofitServiceManager.enter( - workerName, gender, ownerShip, phoneNumber, - idCardNumber, enterReason, workerImage, applyTime + projectId, + workerType, + deptName, + ownerShip, + gender, + registerTime, + deptId, + genderName, + enterReason, + phoneNumber, + createTime, + workerAvatar, + idCardNumber, + statusName, + id, + workerName, + isRegister, + status ) val responseCode = response.separateResponseCode() if (responseCode == 200) { diff --git a/app/src/main/res/layout/activity_apply_enter.xml b/app/src/main/res/layout/activity_apply_enter.xml index 605b8fd..23c6118 100644 --- a/app/src/main/res/layout/activity_apply_enter.xml +++ b/app/src/main/res/layout/activity_apply_enter.xml @@ -1,5 +1,6 @@ + style="@style/LinearLayoutEditTextStyle" + android:hint="请入场人员名称" /> @@ -59,7 +61,8 @@ + style="@style/LinearLayoutEditTextStyle" + android:hint="请输入入场人员所属单位名称" /> @@ -73,7 +76,9 @@ + android:hint="请输入入场人员联系方式" + android:inputType="phone" + android:maxLength="11" /> @@ -86,7 +91,9 @@ + style="@style/LinearLayoutEditTextStyle" + android:hint="请输入入场人员证件号" + android:maxLength="18" /> @@ -133,7 +140,9 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="@dimen/dp_10" - android:paddingHorizontal="@dimen/dp_10" /> + android:paddingHorizontal="@dimen/dp_10" + app:layoutManager="androidx.recyclerview.widget.GridLayoutManager" + app:spanCount="3" /> diff --git a/app/src/main/res/layout/activity_upload_activity.xml b/app/src/main/res/layout/activity_upload_activity.xml index bcbe5a8..3ce55fb 100644 --- a/app/src/main/res/layout/activity_upload_activity.xml +++ b/app/src/main/res/layout/activity_upload_activity.xml @@ -29,7 +29,8 @@ + style="@style/LinearLayoutEditTextStyle" + android:hint="请简要输入事件名称" /> diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 169dfed..64de5e8 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -73,7 +73,6 @@ @dimen/dp_10 @color/subTextColor @color/hintTextColor - 请输入 @dimen/sp_16 @null