Bläddra i källkod

1.重写打印标签纸和RFID读取的UI和业务实现

JaycePC 11 månader sedan
förälder
incheckning
a6411af89a
62 ändrade filer med 3651 tillägg och 908 borttagningar
  1. 3 1
      HttpCoreLibrary/src/main/java/com/rc/httpcore/bean/BelongingPersonBean.kt
  2. 6 0
      HttpCoreLibrary/src/main/java/com/rc/httpcore/bean/CertitudeBean.java
  3. 188 0
      HttpCoreLibrary/src/main/java/com/rc/httpcore/bean/HxpChemicalVo.java
  4. 167 0
      HttpCoreLibrary/src/main/java/com/rc/httpcore/bean/HxpControlConfig.java
  5. 51 30
      HttpCoreLibrary/src/main/java/com/rc/httpcore/client/ApiRepository.kt
  6. 4 0
      HttpCoreLibrary/src/main/java/com/rc/httpcore/client/ChemicalClient.kt
  7. 7 0
      HttpCoreLibrary/src/main/java/com/rc/httpcore/client/HttpTool.java
  8. 14 3
      HttpCoreLibrary/src/main/java/com/rc/httpcore/client/retrofit/ApiService.java
  9. 41 13
      HttpCoreLibrary/src/main/java/com/rc/httpcore/client/retrofit/ChemicalRetrofit.kt
  10. 2 2
      app/build.gradle
  11. 2 2
      app/src/main/AndroidManifest.xml
  12. 3 0
      app/src/main/java/com/example/chemical/ChemicalApp.kt
  13. 3 3
      app/src/main/java/com/example/chemical/ui/MainActivity.kt
  14. 26 0
      app/src/main/java/com/example/chemical/ui/adapter/SelectChemicalDialogAdapter.java
  15. 0 16
      app/src/main/java/com/example/chemical/ui/add/AddActivity.java
  16. 0 13
      app/src/main/java/com/example/chemical/ui/add/FragmentCallBack.java
  17. 0 212
      app/src/main/java/com/example/chemical/ui/add/PlanAddActivity.java
  18. 0 161
      app/src/main/java/com/example/chemical/ui/add/locker/LockerFragment.java
  19. 30 30
      app/src/main/java/com/example/chemical/ui/common/BaseCountDownActivity.kt
  20. 1 1
      app/src/main/java/com/example/chemical/ui/login/FacialLoginActivity.kt
  21. 51 0
      app/src/main/java/com/example/chemical/ui/plan/DrawerIndexView.java
  22. 10 0
      app/src/main/java/com/example/chemical/ui/plan/FragmentCallBack.java
  23. 93 0
      app/src/main/java/com/example/chemical/ui/plan/PlanAdapter.java
  24. 317 0
      app/src/main/java/com/example/chemical/ui/plan/PlanAddActivity.java
  25. 227 0
      app/src/main/java/com/example/chemical/ui/plan/add/AddActivity.java
  26. 391 0
      app/src/main/java/com/example/chemical/ui/plan/add/AddActivityHelp.java
  27. 1 17
      app/src/main/java/com/example/chemical/ui/add/locker/DrawerUiBean.java
  28. 13 3
      app/src/main/java/com/example/chemical/ui/add/LockerAdapter.java
  29. 192 0
      app/src/main/java/com/example/chemical/ui/plan/locker/LockerFragment.java
  30. 89 0
      app/src/main/java/com/example/chemical/ui/plan/room/RoomConverter.java
  31. 36 0
      app/src/main/java/com/example/chemical/ui/plan/room/RoomTool.java
  32. 46 0
      app/src/main/java/com/example/chemical/ui/plan/room/bean/input_add/HxpChemical.java
  33. 39 0
      app/src/main/java/com/example/chemical/ui/plan/room/bean/input_add/InventoryItemBean.java
  34. 82 0
      app/src/main/java/com/example/chemical/ui/plan/room/bean/locker/CabinetLayerSelect.java
  35. 1 1
      HttpCoreLibrary/src/main/java/com/rc/httpcore/bean/locker/HxpCabinetAdminVo.java
  36. 28 32
      HttpCoreLibrary/src/main/java/com/rc/httpcore/bean/locker/HxpCabinetDoorVo.java
  37. 1 1
      HttpCoreLibrary/src/main/java/com/rc/httpcore/bean/locker/HxpCabinetListVo.java
  38. 1 1
      HttpCoreLibrary/src/main/java/com/rc/httpcore/bean/locker/HxpCabinetLockVo.java
  39. 27 30
      HttpCoreLibrary/src/main/java/com/rc/httpcore/bean/locker/HxpCabinetVo.java
  40. 37 0
      app/src/main/java/com/example/chemical/ui/plan/room/dao/HxpCabinetDAO.java
  41. 39 0
      app/src/main/java/com/example/chemical/ui/plan/room/dao/HxpDoorDAO.java
  42. 38 0
      app/src/main/java/com/example/chemical/ui/plan/room/dao/HxpLayerDAO.java
  43. 23 21
      app/src/main/java/com/example/chemical/weidith/LabelDialog.kt
  44. 63 0
      app/src/main/java/com/example/chemical/weidith/SelectChemicalDialog.java
  45. 14 0
      app/src/main/res/drawable/selector_input_bt.xml
  46. 14 0
      app/src/main/res/drawable/selector_input_select_bt.xml
  47. 4 0
      app/src/main/res/drawable/selector_input_select_text_color.xml
  48. 18 0
      app/src/main/res/drawable/selector_input_select_unit_g_rb.xml
  49. 18 0
      app/src/main/res/drawable/selector_input_select_unit_ml_rb.xml
  50. 6 0
      app/src/main/res/drawable/shape_blue_bt_box.xml
  51. 6 0
      app/src/main/res/drawable/shape_grey_bt_box.xml
  52. 8 0
      app/src/main/res/drawable/shape_input_box.xml
  53. 14 0
      app/src/main/res/drawable/shape_input_unit_ml.xml
  54. 10 0
      app/src/main/res/drawable/vector_input_down_arrow.xml
  55. 701 3
      app/src/main/res/layout/activity_add.xml
  56. 145 133
      app/src/main/res/layout/activity_plan_add.xml
  57. 1 1
      app/src/main/res/layout/authentication_dialog.xml
  58. 282 166
      app/src/main/res/layout/fragment_locker.xml
  59. BIN
      app/src/main/res/mipmap-hdpi/bg.png
  60. BIN
      app/src/main/res/mipmap-hdpi/home_save.webp
  61. 5 0
      app/src/main/res/values/styles.xml
  62. 12 12
      build.gradle

+ 3 - 1
HttpCoreLibrary/src/main/java/com/rc/httpcore/bean/BelongingPersonBean.kt

@@ -1,5 +1,7 @@
 package com.rc.httpcore.bean
 
+import java.io.Serializable
+
 //归属人信息
 data class BelongingPersonBean(
     val userId: String,
@@ -7,4 +9,4 @@ data class BelongingPersonBean(
     val account: String,
     val mobile: String,
     val deptName: String
-)
+) : Serializable

+ 6 - 0
HttpCoreLibrary/src/main/java/com/rc/httpcore/bean/CertitudeBean.java

@@ -0,0 +1,6 @@
+package com.rc.httpcore.bean;
+
+public class CertitudeBean {
+    String casNum;
+
+}

+ 188 - 0
HttpCoreLibrary/src/main/java/com/rc/httpcore/bean/HxpChemicalVo.java

@@ -0,0 +1,188 @@
+package com.rc.httpcore.bean;
+
+
+import java.io.Serializable;
+
+public class HxpChemicalVo implements Serializable {
+
+    // ("化学平id")
+    private long chemicalId;
+    // ("化学品类别(参考字典表)")
+    private String chemicalCategory;
+    // ("化学品级别:1是管控,2是非管控")
+    private int chemicalLevel;
+    // ("创建时间")
+    private String createTime;
+    // ("化学品名称")
+    private String chemicalName;
+    // ("化学品类别")
+    private String chemicalCategoryName;
+    // ("化学品级别:1是管控,2是非管控")
+    private String chemicalLevelName;
+    // ("cas编号")
+    private String casNum;
+    // ("纯度")
+    private String chemicalPurity;
+    // ("密度")
+    private double chemicalDensity;
+    // ("化学品别名")
+    private String anotherName;
+    // ("存放规定单位")
+    private String depositUnit;
+    // ("规格值")
+    private double specNum;
+    // ("规格单位")
+    private String specUnit;
+    // ("包装值")
+    private double packNum;
+    // ("包装单位")
+    private String packUnit;
+    // 厂家
+    private String factory;
+    // 净含量
+    private double netWt;
+
+    public double getNetWt() {
+        return netWt;
+    }
+
+    public void setNetWt(double netWt) {
+        this.netWt = netWt;
+    }
+
+    public long getChemicalId() {
+        return chemicalId;
+    }
+
+    public void setChemicalId(long chemicalId) {
+        this.chemicalId = chemicalId;
+    }
+
+    public String getChemicalCategory() {
+        return chemicalCategory;
+    }
+
+    public void setChemicalCategory(String chemicalCategory) {
+        this.chemicalCategory = chemicalCategory;
+    }
+
+    public int getChemicalLevel() {
+        return chemicalLevel;
+    }
+
+    public void setChemicalLevel(int chemicalLevel) {
+        this.chemicalLevel = chemicalLevel;
+    }
+
+    public String getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(String createTime) {
+        this.createTime = createTime;
+    }
+
+    public String getChemicalName() {
+        return chemicalName;
+    }
+
+    public void setChemicalName(String chemicalName) {
+        this.chemicalName = chemicalName;
+    }
+
+    public String getChemicalCategoryName() {
+        return chemicalCategoryName;
+    }
+
+    public void setChemicalCategoryName(String chemicalCategoryName) {
+        this.chemicalCategoryName = chemicalCategoryName;
+    }
+
+    public String getChemicalLevelName() {
+        return chemicalLevelName;
+    }
+
+    public void setChemicalLevelName(String chemicalLevelName) {
+        this.chemicalLevelName = chemicalLevelName;
+    }
+
+    public String getCasNum() {
+        return casNum;
+    }
+
+    public void setCasNum(String casNum) {
+        this.casNum = casNum;
+    }
+
+    public String getChemicalPurity() {
+        return chemicalPurity;
+    }
+
+    public void setChemicalPurity(String chemicalPurity) {
+        this.chemicalPurity = chemicalPurity;
+    }
+
+    public double getChemicalDensity() {
+        return chemicalDensity;
+    }
+
+    public void setChemicalDensity(double chemicalDensity) {
+        this.chemicalDensity = chemicalDensity;
+    }
+
+    public String getAnotherName() {
+        return anotherName;
+    }
+
+    public void setAnotherName(String anotherName) {
+        this.anotherName = anotherName;
+    }
+
+    public String getDepositUnit() {
+        return depositUnit;
+    }
+
+    public void setDepositUnit(String depositUnit) {
+        this.depositUnit = depositUnit;
+    }
+
+    public double getSpecNum() {
+        return specNum;
+    }
+
+    public void setSpecNum(double specNum) {
+        this.specNum = specNum;
+    }
+
+    public String getSpecUnit() {
+        return specUnit;
+    }
+
+    public void setSpecUnit(String specUnit) {
+        this.specUnit = specUnit;
+    }
+
+    public double getPackNum() {
+        return packNum;
+    }
+
+    public void setPackNum(double packNum) {
+        this.packNum = packNum;
+    }
+
+    public String getPackUnit() {
+        return packUnit;
+    }
+
+    public void setPackUnit(String packUnit) {
+        this.packUnit = packUnit;
+    }
+
+    public String getFactory() {
+        return factory;
+    }
+
+    public void setFactory(String factory) {
+        this.factory = factory;
+    }
+}

+ 167 - 0
HttpCoreLibrary/src/main/java/com/rc/httpcore/bean/HxpControlConfig.java

@@ -0,0 +1,167 @@
+package com.rc.httpcore.bean;
+
+import java.time.LocalDateTime;
+
+
+/**
+ * <p>
+ * 化学品管控配置
+ * </p>
+ *
+ * @author hzw
+ * @since 2024-01-23
+ */
+public class HxpControlConfig {
+
+    private long id;
+
+    // ("是否管控 ,0否1是")
+    private boolean controlType;
+
+    // ("是否开启双人认证,0否1是")
+    private boolean verify;
+
+    // ("是否开启二维码打印,0否1是")
+    private boolean qrCodePrint;
+
+    // ("是否开启领用称重,0否1是")
+    private boolean metage;
+
+    // ("是否开启手动录入重量,0否1是")
+    private boolean inputWeight;
+
+    // ("是否启用量程外 ,0否1是")
+    private boolean outRange;
+
+    // ("最大液体存储量(L)")
+    private int fluidMax;
+
+    // ("最大固体存储量(KG)")
+    private int solidMax;
+
+    // ("创建时间")
+    private String createTime;
+
+    // ("创建人id")
+    private long createBy;
+
+    // ("修改人姓名")
+    private long updateBy;
+
+    // ("修改时间")
+    private String updateTime;
+
+    private String remark;
+
+    public long getId() {
+        return id;
+    }
+
+    public void setId(long id) {
+        this.id = id;
+    }
+
+    public boolean isControlType() {
+        return controlType;
+    }
+
+    public void setControlType(boolean controlType) {
+        this.controlType = controlType;
+    }
+
+    public boolean isVerify() {
+        return verify;
+    }
+
+    public void setVerify(boolean verify) {
+        this.verify = verify;
+    }
+
+    public boolean isQrCodePrint() {
+        return qrCodePrint;
+    }
+
+    public void setQrCodePrint(boolean qrCodePrint) {
+        this.qrCodePrint = qrCodePrint;
+    }
+
+    public boolean isMetage() {
+        return metage;
+    }
+
+    public void setMetage(boolean metage) {
+        this.metage = metage;
+    }
+
+    public boolean isInputWeight() {
+        return inputWeight;
+    }
+
+    public void setInputWeight(boolean inputWeight) {
+        this.inputWeight = inputWeight;
+    }
+
+    public boolean isOutRange() {
+        return outRange;
+    }
+
+    public void setOutRange(boolean outRange) {
+        this.outRange = outRange;
+    }
+
+    public int getFluidMax() {
+        return fluidMax;
+    }
+
+    public void setFluidMax(int fluidMax) {
+        this.fluidMax = fluidMax;
+    }
+
+    public int getSolidMax() {
+        return solidMax;
+    }
+
+    public void setSolidMax(int solidMax) {
+        this.solidMax = solidMax;
+    }
+
+    public String getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(String createTime) {
+        this.createTime = createTime;
+    }
+
+    public long getCreateBy() {
+        return createBy;
+    }
+
+    public void setCreateBy(long createBy) {
+        this.createBy = createBy;
+    }
+
+    public long getUpdateBy() {
+        return updateBy;
+    }
+
+    public void setUpdateBy(long updateBy) {
+        this.updateBy = updateBy;
+    }
+
+    public String getUpdateTime() {
+        return updateTime;
+    }
+
+    public void setUpdateTime(String updateTime) {
+        this.updateTime = updateTime;
+    }
+
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+}

+ 51 - 30
HttpCoreLibrary/src/main/java/com/rc/httpcore/client/ApiRepository.kt

@@ -64,21 +64,24 @@ object ApiRepository {
             .observeOn(AndroidSchedulers.mainThread())
     }
 
-   fun userCardValidation(userId: String,subId: String): Observable<UserValidationBean> {
+    fun userCardValidation(userId: String, subId: String): Observable<UserValidationBean> {
         return mClientFactory.createLabClient()
-            .userCardValidation(userId,subId)
+            .userCardValidation(userId, subId)
             .subscribeOn(Schedulers.io())
             .observeOn(AndroidSchedulers.mainThread())
     }
 
-    fun searchChemica(searchChemica: String,chemicalLevel:String?): Observable<List<ChemicalSearchBean>> {
+    fun searchChemica(
+        searchChemica: String,
+        chemicalLevel: String?
+    ): Observable<List<ChemicalSearchBean>> {
         return mClientFactory.createLabClient()
-            .searchChemica(searchChemica,chemicalLevel)
+            .searchChemica(searchChemica, chemicalLevel)
             .subscribeOn(Schedulers.io())
             .observeOn(AndroidSchedulers.mainThread())
     }
 
-    fun getOptions(typs:String): Observable<List<ChemicalTypeBean>> {
+    fun getOptions(typs: String): Observable<List<ChemicalTypeBean>> {
         return mClientFactory.createLabClient()
             .getOptions(typs)
             .subscribeOn(Schedulers.io())
@@ -92,21 +95,21 @@ object ApiRepository {
             .observeOn(AndroidSchedulers.mainThread())
     }
 
-    fun searchSpec(specNum:String): Observable<SearchSpecBean> {
+    fun searchSpec(specNum: String): Observable<SearchSpecBean> {
         return mClientFactory.createLabClient()
             .searchSpec(specNum)
             .subscribeOn(Schedulers.io())
             .observeOn(AndroidSchedulers.mainThread())
     }
 
-    fun getSelects(searchValue:String): Observable<List<BelongingPersonBean>> {
+    fun getSelects(searchValue: String): Observable<List<BelongingPersonBean>> {
         return mClientFactory.createLabClient()
             .getSelects(searchValue)
             .subscribeOn(Schedulers.io())
             .observeOn(AndroidSchedulers.mainThread())
     }
 
-    fun getTopicList(userId:String): Observable<List<TopicDataBean>> {
+    fun getTopicList(userId: String): Observable<List<TopicDataBean>> {
         return mClientFactory.createLabClient()
             .getTopicList(userId)
             .subscribeOn(Schedulers.io())
@@ -120,9 +123,9 @@ object ApiRepository {
             .observeOn(AndroidSchedulers.mainThread())
     }
 
-    fun getScanCode(macId:String,code:String,subId: String): Observable<UserData> {
+    fun getScanCode(macId: String, code: String, subId: String): Observable<UserData> {
         return mClientFactory.createLabClient()
-            .getScanCode(macId,code,subId)
+            .getScanCode(macId, code, subId)
             .subscribeOn(Schedulers.io())
             .observeOn(AndroidSchedulers.mainThread())
     }
@@ -134,6 +137,13 @@ object ApiRepository {
             .observeOn(AndroidSchedulers.mainThread())
     }
 
+    fun certitude(model: HxpChemicalVo): Observable<HxpChemicalVo> {
+        return mClientFactory.createLabClient()
+            .certitude(model)
+            .subscribeOn(Schedulers.io())
+            .observeOn(AndroidSchedulers.mainThread())
+    }
+
     fun getRelList(subjectId: String): Observable<ChemicalInfoBean> {
         return mClientFactory.createLabClient()
             .getRelList(subjectId)
@@ -226,9 +236,9 @@ object ApiRepository {
     }
 
     //更换rfid
-    fun updateRfid(ids:String,rfidCode: String): Observable<String> {
+    fun updateRfid(ids: String, rfidCode: String): Observable<String> {
         return mClientFactory.createLabClient()
-            .updateRfid(ids,rfidCode)
+            .updateRfid(ids, rfidCode)
             .subscribeOn(Schedulers.io())
             .observeOn(AndroidSchedulers.mainThread())
     }
@@ -240,9 +250,9 @@ object ApiRepository {
             .observeOn(AndroidSchedulers.mainThread())
     }
 
-    fun chemicalSearchBean(rfidCode: String,subId: String): Observable<ChemicalSearchBean> {
+    fun chemicalSearchBean(rfidCode: String, subId: String): Observable<ChemicalSearchBean> {
         return mClientFactory.createLabClient()
-            .chemicalSearchBean(rfidCode,subId)
+            .chemicalSearchBean(rfidCode, subId)
             .subscribeOn(Schedulers.io())
             .observeOn(AndroidSchedulers.mainThread())
     }
@@ -276,21 +286,21 @@ object ApiRepository {
             .observeOn(AndroidSchedulers.mainThread())
     }
 
-    fun getCabinetLock(doorId: String):Observable<List<LockVoListBean>>{
+    fun getCabinetLock(doorId: String): Observable<List<LockVoListBean>> {
         return mClientFactory.createLabClient()
             .getCabinetLock(doorId)
             .subscribeOn(Schedulers.io())
             .observeOn(AndroidSchedulers.mainThread())
     }
 
-    fun indexStockList(mutableMap:Map<String,String>): Observable<HxpStockWaitModeBean> {
+    fun indexStockList(mutableMap: Map<String, String>): Observable<HxpStockWaitModeBean> {
         return mClientFactory.createLabClient()
             .indexStockList(mutableMap)
             .subscribeOn(Schedulers.io())
             .observeOn(AndroidSchedulers.mainThread())
     }
 
-    fun warningNoticeList(mutableMap:Map<String,String>): Observable<EarlyWarningBean> {
+    fun warningNoticeList(mutableMap: Map<String, String>): Observable<EarlyWarningBean> {
         return mClientFactory.createLabClient()
             .warningNoticeList(mutableMap)
             .subscribeOn(Schedulers.io())
@@ -304,9 +314,9 @@ object ApiRepository {
             .observeOn(AndroidSchedulers.mainThread())
     }
 
-    fun handleMessage(noticeId: String,handleNotes:String): Observable<ProcessedBean> {
+    fun handleMessage(noticeId: String, handleNotes: String): Observable<ProcessedBean> {
         return mClientFactory.createLabClient()
-            .handleMessage(noticeId,handleNotes)
+            .handleMessage(noticeId, handleNotes)
             .subscribeOn(Schedulers.io())
             .observeOn(AndroidSchedulers.mainThread())
     }
@@ -318,21 +328,25 @@ object ApiRepository {
             .observeOn(AndroidSchedulers.mainThread())
     }
 
-    fun indexDetailsList(mutableMap:Map<String,String>): Observable<QueryTwoBean> {
+    fun indexDetailsList(mutableMap: Map<String, String>): Observable<QueryTwoBean> {
         return mClientFactory.createLabClient()
             .indexDetailsList(mutableMap)
             .subscribeOn(Schedulers.io())
             .observeOn(AndroidSchedulers.mainThread())
     }
 
-    fun useValidation(cardNum:String,subId:String,doorId:String): Observable<UserValidationBean> {
+    fun useValidation(
+        cardNum: String,
+        subId: String,
+        doorId: String
+    ): Observable<UserValidationBean> {
         return mClientFactory.createLabClient()
-            .useValidation(cardNum,subId, doorId)
+            .useValidation(cardNum, subId, doorId)
             .subscribeOn(Schedulers.io())
             .observeOn(AndroidSchedulers.mainThread())
     }
 
-    fun aioScanLogin(subId: String, doorId: String,code:String): Observable<UserValidationBean> {
+    fun aioScanLogin(subId: String, doorId: String, code: String): Observable<UserValidationBean> {
         return mClientFactory.createLabClient()
             .aioScanLogin(subId, doorId, code)
             .subscribeOn(Schedulers.io())
@@ -355,12 +369,12 @@ object ApiRepository {
 
     fun getLocks(subId: String, lockNum: String): Observable<Boolean> {
         return mClientFactory.createLabClient()
-            .getLocks(subId,lockNum)
+            .getLocks(subId, lockNum)
             .subscribeOn(Schedulers.io())
             .observeOn(AndroidSchedulers.mainThread())
     }
 
-    fun basicConfig(subId:String): Observable<ConfigBean> {
+    fun basicConfig(subId: String): Observable<ConfigBean> {
         return mClientFactory.createLabClient()
             .basicConfig(subId)
             .subscribeOn(Schedulers.io())
@@ -381,7 +395,7 @@ object ApiRepository {
             .observeOn(AndroidSchedulers.mainThread())
     }
 
-    fun useReturnList(subId:String): Observable<UseLedBean> {
+    fun useReturnList(subId: String): Observable<UseLedBean> {
         return mClientFactory.createLabClient()
             .useReturnList(subId)
             .subscribeOn(Schedulers.io())
@@ -409,6 +423,13 @@ object ApiRepository {
             .observeOn(AndroidSchedulers.mainThread())
     }
 
+    fun checkRfids(rfid: String): Observable<Boolean> {
+        return mClientFactory.createLabClient()
+            .checkRfids(rfid)
+            .subscribeOn(Schedulers.io())
+            .observeOn(AndroidSchedulers.mainThread())
+    }
+
     fun controlConfigs(chemicalLevel: Int): Observable<ChemicalConfsBean> {
         return mClientFactory.createLabClient()
             .controlConfigs(chemicalLevel)
@@ -416,9 +437,9 @@ object ApiRepository {
             .observeOn(AndroidSchedulers.mainThread())
     }
 
-    fun checkRfids(rfid: String): Observable<Boolean> {
+    fun getControlConfigs(chemicalLevel: Int): Observable<HxpControlConfig> {
         return mClientFactory.createLabClient()
-            .checkRfids(rfid)
+            .getControlConfigs(chemicalLevel)
             .subscribeOn(Schedulers.io())
             .observeOn(AndroidSchedulers.mainThread())
     }
@@ -437,7 +458,6 @@ object ApiRepository {
     }
 
 
-
     /**
      * 退出登录
      */
@@ -451,7 +471,7 @@ object ApiRepository {
     /**
      * 监听每分钟进行调用
      */
-    fun monitor(deviceNo:String): Observable<Boolean> {
+    fun monitor(deviceNo: String): Observable<Boolean> {
         return mClientFactory.createLabClient()
             .monitor(deviceNo)
             .subscribeOn(Schedulers.io())
@@ -467,6 +487,7 @@ object ApiRepository {
             .subscribeOn(Schedulers.io())
             .observeOn(AndroidSchedulers.mainThread())
     }
+
     /**
      * 人脸  双人认证
      */

+ 4 - 0
HttpCoreLibrary/src/main/java/com/rc/httpcore/client/ChemicalClient.kt

@@ -61,6 +61,8 @@ interface ChemicalClient {
 
     fun certitude(model: ChemicalABean): Observable<ChemicalABean>
 
+    fun certitude(model: HxpChemicalVo): Observable<HxpChemicalVo>
+
     fun getRelList(model: String): Observable<ChemicalInfoBean>
 
     fun getUserIds(subId: String): Observable<List<String>>
@@ -153,6 +155,8 @@ interface ChemicalClient {
 
     fun controlConfigs(chemicalLevel: Int): Observable<ChemicalConfsBean>
 
+    fun getControlConfigs(chemicalLevel: Int): Observable<HxpControlConfig>
+
     fun checkRfids(rfid: String): Observable<Boolean>
 
     /**

+ 7 - 0
HttpCoreLibrary/src/main/java/com/rc/httpcore/client/HttpTool.java

@@ -33,4 +33,11 @@ public final class HttpTool {
         return OkHttpUtils.getSync(HttpConfig.Companion.getAPI_BASE_URL() + "chemical/aio/getCabinetList?subId=" + labId);
     }
 
+    /**
+     * 查询化学品
+     */
+    public static Response searchchemical(String searchValue, String chemicalLevel) throws IOException {
+        return OkHttpUtils.getSync(HttpConfig.Companion.getAPI_BASE_URL() + "chemical/aio/searchChemica?searchValue=" + searchValue + "&chemicalLevel=" + chemicalLevel);
+    }
+
 }

+ 14 - 3
HttpCoreLibrary/src/main/java/com/rc/httpcore/client/retrofit/ApiService.java

@@ -1,9 +1,12 @@
 package com.rc.httpcore.client.retrofit;
 
 import com.rc.httpcore.apk.ProcessedBean;
+import com.rc.httpcore.bean.ChemicalABean;
 import com.rc.httpcore.bean.ChemicalConfsBean;
 import com.rc.httpcore.bean.ConfigBean;
 import com.rc.httpcore.bean.EarlyWarningBean;
+import com.rc.httpcore.bean.HxpChemicalVo;
+import com.rc.httpcore.bean.HxpControlConfig;
 import com.rc.httpcore.bean.InventoryListBean;
 import com.rc.httpcore.bean.BelongingPersonBean;
 import com.rc.httpcore.bean.ChemicalInfoBean;
@@ -18,7 +21,6 @@ import com.rc.httpcore.bean.ReturnDetailsBean;
 import com.rc.httpcore.bean.ReturnGiveBackBean;
 import com.rc.httpcore.bean.ReturningChemicalsBean;
 import com.rc.httpcore.bean.RuleBean;
-import com.rc.httpcore.bean.ChemicalABean;
 import com.rc.httpcore.bean.ChemicalTypeBean;
 import com.rc.httpcore.bean.SearchBean;
 import com.rc.httpcore.bean.SearchSpecBean;
@@ -39,7 +41,9 @@ import com.rc.httpcore.vo.request.FaceCompareReq;
 import com.rc.httpcore.vo.request.LearnLoginReq;
 import com.rc.httpcore.vo.response.ConfLogo;
 import com.rc.httpcore.vo.response.LearnLoginVo;
+
 import java.util.Map;
+
 import io.reactivex.Observable;
 import okhttp3.MultipartBody;
 import okhttp3.RequestBody;
@@ -129,6 +133,9 @@ public interface ApiService {
     @POST("chemical/aio/certitude")
     Observable<CommonDataResponse<ChemicalABean>> certitude(@Body ChemicalABean param);
 
+    @POST("chemical/aio/certitude")
+    Observable<CommonDataResponse<HxpChemicalVo>> certitude(@Body HxpChemicalVo param);
+
     @POST("laboratory/subRelInfo/getRelList")
     Observable<CommonListResponse<ChemicalInfoBean>> getRelList(@Body RequestBody requestBody);
 
@@ -182,7 +189,7 @@ public interface ApiService {
 
     //归还化学品信息详情
     @GET("chemical/stockWait/scanCodeChemical")
-    Observable<CommonDataResponse<ChemicalSearchBean>> scanCodeChemical(@Query("label") String label,@Query("subId") String subId);
+    Observable<CommonDataResponse<ChemicalSearchBean>> scanCodeChemical(@Query("label") String label, @Query("subId") String subId);
 
     //废弃化学品信息详情
     @GET("chemical/aio/discardDetail")
@@ -221,7 +228,7 @@ public interface ApiService {
     Observable<CommonDataResponse<ProcessedBean>> handleMessage(@Body RequestBody requestBody);
 
     @GET("system/aioUnify/warningNoticeCount")
-    Observable<CommonDataResponse<String>> warningNoticeCount(@Query("subId")String subId);
+    Observable<CommonDataResponse<String>> warningNoticeCount(@Query("subId") String subId);
 
     //领用使用的双人认证
     @POST("chemical/aio/identity/useValidation")
@@ -272,6 +279,10 @@ public interface ApiService {
     @GET("chemical/aio/controlConfig")
     Observable<CommonDataResponse<ChemicalConfsBean>> controlConfigs(@Query("chemicalLevel") int id);
 
+    //化学品基础信息配置  是否打印 是否超重
+    @GET("chemical/aio/controlConfig")
+    Observable<CommonDataResponse<HxpControlConfig>> getControlConfigs(@Query("chemicalLevel") int id);
+
     //校验rfid的唯一性
     @GET("chemical/aio/checkRfid")
     Observable<CommonDataResponse<Boolean>> checkRfids(@Query("rfid") String rfid);

+ 41 - 13
HttpCoreLibrary/src/main/java/com/rc/httpcore/client/retrofit/ChemicalRetrofit.kt

@@ -84,7 +84,7 @@ class ChemicalRetrofit : ChemicalClient {
     }
 
     override fun userCardValidation(userId: String, subId: String): Observable<UserValidationBean> {
-        Log.d("====人脸登录-验证","====人脸登录-验证")
+        Log.d("====人脸登录-验证", "====人脸登录-验证")
         return apiService.userCardValidation(userId, subId)
             .map { response ->
                 if (!response.isSuccess()) {
@@ -234,6 +234,19 @@ class ChemicalRetrofit : ChemicalClient {
             }
     }
 
+    override fun certitude(model: HxpChemicalVo): Observable<HxpChemicalVo> {
+        val gson = Gson()
+        val json = gson.toJson(model)
+        Log.d("=========新增确定====", "$json")
+        return apiService.certitude(model)
+            .map { response ->
+                if (!response.isSuccess()) {
+                    throw NetException(response.code, response.message)
+                }
+                return@map response.data
+            }
+    }
+
     override fun getRelList(subjectId: String): Observable<ChemicalInfoBean> {
         val json = "{\"subId\":$subjectId}"
         val requestBody = RequestBody.create(MediaType.parse("application/json"), json)
@@ -424,8 +437,8 @@ class ChemicalRetrofit : ChemicalClient {
             }
     }
 
-    override fun chemicalSearchBean(codes: String,subId: String): Observable<ChemicalSearchBean> {
-        return apiService.scanCodeChemical(codes,subId)
+    override fun chemicalSearchBean(codes: String, subId: String): Observable<ChemicalSearchBean> {
+        return apiService.scanCodeChemical(codes, subId)
             .map { response ->
                 if (!response.isSuccess()) {
                     throw NetException(response.code, response.message)
@@ -473,7 +486,8 @@ class ChemicalRetrofit : ChemicalClient {
     }
 
     override fun stockDetailsList(
-        mutableMap: Map<String, String>): Observable<WasteChemicalsBean> {
+        mutableMap: Map<String, String>
+    ): Observable<WasteChemicalsBean> {
         val gson = Gson()
         val json = gson.toJson(mutableMap)
         Log.d("=========查询信息======", json)
@@ -589,10 +603,14 @@ class ChemicalRetrofit : ChemicalClient {
             }
     }
 
-    override fun aioScanLogin(subId: String, doorId: String,code:String): Observable<UserValidationBean> {
+    override fun aioScanLogin(
+        subId: String,
+        doorId: String,
+        code: String
+    ): Observable<UserValidationBean> {
 //        var json = "{\"cardNum\":\"${cardNum}\",\"subId\":$subId,\"doorId\":$doorId}"
         var json = "{\"subId\":$subId,\"doorId\":$doorId,\"code\":\"$code\"}"
-        Log.d("=====扫码参数","$json")
+        Log.d("=====扫码参数", "$json")
         val requestBody = RequestBody.create(MediaType.parse("application/json"), json)
         return apiService.aioScanLogin(requestBody)
             .map { response ->
@@ -606,7 +624,7 @@ class ChemicalRetrofit : ChemicalClient {
     override fun lockOperate(mutableMap: Map<String, Any>): Observable<Boolean> {
         val gson = Gson()
         val json = gson.toJson(mutableMap)
-        Log.d("=====开锁参数:","$json")
+        Log.d("=====开锁参数:", "$json")
         val requestBody = RequestBody.create(MediaType.parse("application/json"), json)
         return apiService.lockOperate(requestBody)
             .map { response ->
@@ -620,7 +638,7 @@ class ChemicalRetrofit : ChemicalClient {
     override fun outTimeWarn(map: Map<String, Any>): Observable<Boolean> {
         val gson = Gson()
         val json = gson.toJson(map)
-        Log.d("=====预警上报:","$json")
+        Log.d("=====预警上报:", "$json")
         val requestBody = RequestBody.create(MediaType.parse("application/json"), json)
         return apiService.outTimeWarn(requestBody)
             .map { response ->
@@ -654,7 +672,7 @@ class ChemicalRetrofit : ChemicalClient {
     override fun useRecords(map: Map<String, Any>): Observable<UseLedBean> {
         val gson = Gson()
         val json = gson.toJson(map)
-        Log.d("=======使用台账",json)
+        Log.d("=======使用台账", json)
         val requestBody = RequestBody.create(MediaType.parse("application/json"), json)
         return apiService.useRecords(requestBody)
             .map { response ->
@@ -668,7 +686,7 @@ class ChemicalRetrofit : ChemicalClient {
     override fun stockLedger(map: Map<String, Any>): Observable<InventoryListBean> {
         val gson = Gson()
         val json = gson.toJson(map)
-        Log.d("=======库存台账",json)
+        Log.d("=======库存台账", json)
         val requestBody = RequestBody.create(MediaType.parse("application/json"), json)
         return apiService.stockLedger(requestBody)
             .map { response ->
@@ -694,7 +712,7 @@ class ChemicalRetrofit : ChemicalClient {
     override fun tagDetailsList(map: Map<String, Any>): Observable<QueryTwoBean> {
         val gson = Gson()
         val json = gson.toJson(map)
-        Log.d("===标签查询====","$json")
+        Log.d("===标签查询====", "$json")
         val requestBody = RequestBody.create(MediaType.parse("application/json"), json)
         return apiService.tagDetailsList(requestBody)
             .map { response ->
@@ -745,6 +763,16 @@ class ChemicalRetrofit : ChemicalClient {
             }
     }
 
+    override fun getControlConfigs(chemicalLevel: Int): Observable<HxpControlConfig> {
+        return apiService.getControlConfigs(chemicalLevel)
+            .map { response ->
+                if (!response.isSuccess()) {
+                    throw NetException(response.code, response.message)
+                }
+                return@map response.data
+            }
+    }
+
     override fun checkRfids(rfid: String): Observable<Boolean> {
         return apiService.checkRfids(rfid)
             .map { response ->
@@ -803,7 +831,7 @@ class ChemicalRetrofit : ChemicalClient {
         val fileBody = RequestBody.create(MediaType.parse("multipart/form-data"), file)
         val filePart = MultipartBody.Part.createFormData("file", file.name, fileBody)
         val map = HashMap<String, RequestBody>()
-        Log.d("====人脸登录-比对","人脸登录-比对")
+        Log.d("====人脸登录-比对", "人脸登录-比对")
 //        map["userId"] = RequestBody.create(MediaType.parse("text/plain"), param.userId)
         map["userIds"] = RequestBody.create(MediaType.parse("text/plain"), param.userIds)
 //        return apiService.faceNewCompare(HttpConfig.BASE_PATH_FACE, filePart, map)
@@ -816,6 +844,7 @@ class ChemicalRetrofit : ChemicalClient {
                 return@map response.data
             }
     }
+
     override fun checkUserFaceByPic(
         file: File,
         param: FaceCompareReq
@@ -844,5 +873,4 @@ class ChemicalRetrofit : ChemicalClient {
     }
 
 
-
 }

+ 2 - 2
app/build.gradle

@@ -134,7 +134,7 @@ dependencies {
     implementation 'com.github.getActivity:XXPermissions:20.0'
     implementation "com.kongzue.dialogx:DialogX:0.0.49"
     implementation 'com.blankj:utilcodex:1.31.1'
-    implementation 'androidx.activity:activity:1.9.3'
-
 
+    implementation "androidx.room:room-runtime:2.2.6"
+    annotationProcessor "androidx.room:room-compiler:2.2.6"
 }

+ 2 - 2
app/src/main/AndroidManifest.xml

@@ -74,10 +74,10 @@
         android:usesCleartextTraffic="true"
         tools:targetApi="m">
         <activity
-            android:name=".ui.add.AddActivity"
+            android:name=".ui.plan.add.AddActivity"
             android:exported="false" />
         <activity
-            android:name=".ui.add.PlanAddActivity"
+            android:name=".ui.plan.PlanAddActivity"
             android:exported="false" />
 
         <meta-data

+ 3 - 0
app/src/main/java/com/example/chemical/ChemicalApp.kt

@@ -31,10 +31,13 @@ class ChemicalApp : Application() {
         var subjectName: String? = null //实验室name
         @JvmField
         var confs: ConfigBean? = null   //基础信息以及 双人 认证方式
+        @JvmField
         var labInfo: LabInfo? = null    //基础信息以及 双人 认证方式
         @JvmField
         var subRoom: String? = null     //房间号
+        @JvmField
         var administrators = false      //是否是校院级管理员  管控类的仅校级管理员或院级管理员可操作  新增入库  操作管控or非管控
+        @JvmField
         var responsibles = false        //是否是 责任人      实验室负责人或安全责任人、柜门管理员   新增入库  只能操作非管控
     }
 

+ 3 - 3
app/src/main/java/com/example/chemical/ui/MainActivity.kt

@@ -10,7 +10,6 @@ import android.os.Bundle
 import android.os.Handler
 import android.os.Looper
 import android.os.Message
-import android.util.Log
 import android.view.KeyEvent
 import android.view.LayoutInflater
 import android.view.View
@@ -27,7 +26,7 @@ import com.example.chemical.databinding.ActivityMainBinding
 import com.example.chemical.receiver.TimeTickReceiver
 import com.example.chemical.receiver.UsbReceiver
 import com.example.chemical.ui.adapter.CabinetAdapter
-import com.example.chemical.ui.add.PlanAddActivity
+import com.example.chemical.ui.plan.PlanAddActivity
 import com.example.chemical.ui.discard.LedgerActivity
 import com.example.chemical.ui.discard.WasteChemicalsActivity
 import com.example.chemical.ui.inquiry.InquiryActivity
@@ -251,6 +250,7 @@ class MainActivity : RcBaseActivity<ActivityMainBinding>() {
 //            basicConfLog()
 //        }
         viewBinding.addChemicals.setOnClickListener {
+//            UiManager.switcher(this, PlanAddActivity::class.java)
             //新增
             if (ChemicalApp.userData != null) {
                 if (ChemicalApp.administrators || ChemicalApp.responsibles) {
@@ -736,7 +736,7 @@ class MainActivity : RcBaseActivity<ActivityMainBinding>() {
         override fun handleMessage(msg: Message) {
             if (WHAT_COUNT_DOWN == msg.what) {
                 val countDown = MAX_TIME - mCounter
-                Log.d("======返回首页时间", "${countDown}")
+//                Log.d("======返回首页时间", "${countDown}")
                 if (isDestroyed) return
                 if (countDown <= 0) {
                     ChemicalApp.confs = null

+ 26 - 0
app/src/main/java/com/example/chemical/ui/adapter/SelectChemicalDialogAdapter.java

@@ -0,0 +1,26 @@
+package com.example.chemical.ui.adapter;
+
+import android.text.TextUtils;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
+import com.chad.library.adapter.base.BaseQuickAdapter;
+import com.chad.library.adapter.base.viewholder.BaseViewHolder;
+import com.rc.httpcore.bean.HxpChemicalVo;
+import com.example.chemical.R;
+
+import java.util.List;
+
+public class SelectChemicalDialogAdapter extends BaseQuickAdapter<HxpChemicalVo, BaseViewHolder> {
+    public SelectChemicalDialogAdapter(int layoutResId, @Nullable List<HxpChemicalVo> data) {
+        super(layoutResId, data);
+    }
+
+    @Override
+    protected void convert(@NonNull BaseViewHolder baseViewHolder, HxpChemicalVo hxpChemicalVo) {
+        baseViewHolder.setText(R.id.chemicalName, TextUtils.isEmpty(hxpChemicalVo.getChemicalName()) ? "" : hxpChemicalVo.getChemicalName());
+        baseViewHolder.setText(R.id.casNum, TextUtils.isEmpty(hxpChemicalVo.getCasNum()) ? "" : hxpChemicalVo.getCasNum());
+        baseViewHolder.setText(R.id.chemicalPurity, TextUtils.isEmpty(hxpChemicalVo.getChemicalPurity()) ? "" : hxpChemicalVo.getChemicalPurity());
+    }
+}

+ 0 - 16
app/src/main/java/com/example/chemical/ui/add/AddActivity.java

@@ -1,16 +0,0 @@
-package com.example.chemical.ui.add;
-
-import android.os.Bundle;
-
-import androidx.appcompat.app.AppCompatActivity;
-
-import com.example.chemical.R;
-
-public class AddActivity extends AppCompatActivity {
-
-    @Override
-    protected void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        setContentView(R.layout.activity_add);
-    }
-}

+ 0 - 13
app/src/main/java/com/example/chemical/ui/add/FragmentCallBack.java

@@ -1,13 +0,0 @@
-package com.example.chemical.ui.add;
-
-import com.rc.httpcore.bean.locker.HxpCabinetVo;
-
-public interface FragmentCallBack {
-    /**
-     * 当前选中的是哪个柜子的哪层
-     *
-     * @param hxpCabinetVo 柜子信息
-     * @param position     选中的是哪层
-     */
-    void onSelected(HxpCabinetVo hxpCabinetVo, int position);
-}

+ 0 - 212
app/src/main/java/com/example/chemical/ui/add/PlanAddActivity.java

@@ -1,212 +0,0 @@
-package com.example.chemical.ui.add;
-
-import android.os.Bundle;
-import android.text.TextUtils;
-import android.util.Log;
-import android.view.KeyEvent;
-import android.view.View;
-
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import androidx.viewpager2.widget.ViewPager2;
-
-import com.blankj.utilcode.util.GsonUtils;
-import com.blankj.utilcode.util.LogUtils;
-import com.blankj.utilcode.util.ThreadUtils;
-import com.blankj.utilcode.util.TimeUtils;
-import com.bumptech.glide.Glide;
-import com.example.chemical.ChemicalApp;
-import com.example.chemical.databinding.ActivityPlanAddBinding;
-import com.example.chemical.databinding.ActivityPlanAddBinding;
-import com.example.chemical.receiver.ScanKeyEventHelper;
-import com.example.chemical.ui.SplashActivity;
-import com.example.chemical.ui.common.BaseCountDownActivity;
-import com.example.chemical.utils.UiManager;
-import com.rc.httpcore.HttpConfig;
-import com.rc.httpcore.bean.ChemicalInfoBean;
-import com.rc.httpcore.bean.locker.HxpCabinetListVo;
-import com.rc.httpcore.bean.locker.HxpCabinetVo;
-import com.rc.httpcore.client.ApiRepository;
-import com.rc.httpcore.client.HttpTool;
-import com.rc.httpcore.exception.NetException;
-
-import java.text.SimpleDateFormat;
-import java.util.List;
-import java.util.Locale;
-
-import io.reactivex.functions.Consumer;
-import kotlin.Unit;
-import kotlin.jvm.functions.Function1;
-import okhttp3.Response;
-
-/**
- * 待录入页面
- */
-public class PlanAddActivity extends BaseCountDownActivity<ActivityPlanAddBinding> {
-
-    private ActivityPlanAddBinding binding;
-    // 柜子fragmentAdapter
-    private LockerAdapter lockerAdapter;
-    // 二维码/条形码扫描工具
-    private ScanKeyEventHelper scanKeyEventHelper;
-    // 实验室基本信息
-    private ChemicalInfoBean chemicalInfo;
-    // 实验室所有柜子信息
-    private List<HxpCabinetVo> allCabinetVoList;
-
-    // 待录入化学品信息
-//    private Map<Long,List<>>
-
-    @NonNull
-    @Override
-    protected ActivityPlanAddBinding createViewBinding() {
-        return binding = ActivityPlanAddBinding.inflate(getLayoutInflater());
-    }
-
-    @Override
-    protected void initViews(@Nullable Bundle savedInstanceState) {
-        super.initViews(savedInstanceState);
-        binding.lockerVP2.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
-            @Override
-            public void onPageSelected(int position) {
-                super.onPageSelected(position);
-                binding.countTV.setText((position + 1) + "/" + lockerAdapter.getItemCount());
-            }
-        });
-        binding.nextBT.setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(View view) {
-                binding.lockerVP2.setCurrentItem(binding.lockerVP2.getCurrentItem() + 1, true);
-            }
-        });
-        binding.lastBT.setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(View view) {
-                binding.lockerVP2.setCurrentItem(binding.lockerVP2.getCurrentItem() - 1, true);
-            }
-        });
-
-        scanKeyEventHelper = new ScanKeyEventHelper(new Function1<String, Unit>() {
-            @Override
-            public Unit invoke(String s) {
-                Log.d("结果", s);
-                return null;
-            }
-        });
-    }
-
-    @Override
-    protected void initData() {
-        super.initData();
-        // 日期
-        binding.nowTime.setText(TimeUtils.getNowString(new SimpleDateFormat("MM月dd日 EEEE ", Locale.getDefault())));
-        // 用户
-        Glide.with(this).load(HttpConfig.Companion.getAPI_BASE_IMG_URL() + ChemicalApp.userData.getAvatar()).into(binding.imageName);
-        String userName = ChemicalApp.userData.getUserName();
-        binding.tvName.setText(TextUtils.isEmpty(userName) ? "" : userName);
-        // 实验室logo
-        Glide.with(this).load(HttpConfig.Companion.getAPI_BASE_IMG_URL() + ChemicalApp.confs.getCircularLogo()).into(binding.image);
-        // 实验室名称
-        String subName = ChemicalApp.subjectName;
-        subName = TextUtils.isEmpty(subName) ? "" : subName;
-        // 房间号
-        String roomNum = ChemicalApp.subRoom;
-        roomNum = TextUtils.isEmpty(roomNum) ? "" : roomNum;
-        binding.deptName.setText(subName + "-" + roomNum);
-        // 退出
-        binding.tvOutLogin.setOnClickListener(v -> callLogoutApi(aBoolean -> {
-            ChemicalApp.userData = null;
-            ChemicalApp.subjectId = null;
-            UiManager.INSTANCE.switcherCashier(PlanAddActivity.this, SplashActivity.class);
-            return null;
-        }));
-
-        //获取实验室基本信息
-        getLabInfo();
-
-    }
-
-    /**
-     * 获取实验室基本信息
-     */
-    private void getLabInfo() {
-        showLoading("加载中...", false);
-        // 实验室基本信息
-        addDisposable(ApiRepository.INSTANCE.getRelList(ChemicalApp.subjectId).subscribe(new Consumer<ChemicalInfoBean>() {
-            @Override
-            public void accept(ChemicalInfoBean chemicalInfoBean) throws Exception {
-                chemicalInfo = chemicalInfoBean;
-                // 获取实验室柜子信息
-                ThreadUtils.executeByCached(new ThreadUtils.SimpleTask<List<HxpCabinetVo>>() {
-                    @Override
-                    public List<HxpCabinetVo> doInBackground() throws Throwable {
-                        Response response = HttpTool.getCabinetList(chemicalInfoBean.getSubId());
-                        if (response.isSuccessful()) {
-                            String json = response.body().string();
-                            HxpCabinetListVo hxpCabinetListVo = GsonUtils.fromJson(json, HxpCabinetListVo.class);
-                            if (hxpCabinetListVo.getCode() == 200) {
-                                return hxpCabinetListVo.getData();
-                            } else {
-                                throw new NetException("" + hxpCabinetListVo.getCode(), hxpCabinetListVo.getMessage());
-                            }
-                        } else {
-                            throw new NetException("" + response.code(), response.message());
-                        }
-                    }
-
-                    @Override
-                    public void onSuccess(List<HxpCabinetVo> hxpCabinetVoList) {
-                        dismissLoading();
-                        if (null != hxpCabinetVoList && !hxpCabinetVoList.isEmpty()) {
-                            lockerAdapter = new LockerAdapter(PlanAddActivity.this, allCabinetVoList = hxpCabinetVoList, fragmentCallBack);
-                            binding.lockerVP2.setAdapter(lockerAdapter);
-
-                        } else {
-                            showToast("未找到化学品柜!");
-                        }
-                    }
-
-                    @Override
-                    public void onFail(Throwable t) {
-                        super.onFail(t);
-                        showNetError(t);
-                        dismissLoading();
-                        LogUtils.d(ThreadUtils.isMainThread());
-                    }
-                });
-            }
-        }, new Consumer<Throwable>() {
-            @Override
-            public void accept(Throwable throwable) throws Exception {
-                LogUtils.e(Log.getStackTraceString(throwable));
-                dismissLoading();
-                showNetError(throwable);
-            }
-        }));
-    }
-
-    @Override
-    public boolean dispatchKeyEvent(KeyEvent event) {
-        scanKeyEventHelper.analysisKeyEvent(event);
-        return super.dispatchKeyEvent(event);
-    }
-
-    FragmentCallBack fragmentCallBack = new FragmentCallBack() {
-        /**
-         * 柜层被选中
-         * @param hxpCabinetVo 柜子信息
-         * @param position     选中的是哪层
-         */
-        @Override
-        public void onSelected(HxpCabinetVo hxpCabinetVo, int position) {
-
-        }
-    };
-
-    @Override
-    protected void onDestroy() {
-        fragmentCallBack = null;
-        super.onDestroy();
-    }
-
-}

+ 0 - 161
app/src/main/java/com/example/chemical/ui/add/locker/LockerFragment.java

@@ -1,161 +0,0 @@
-package com.example.chemical.ui.add.locker;
-
-import android.os.Bundle;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.RadioButton;
-import android.widget.RadioGroup;
-import android.widget.TextView;
-import android.widget.Toast;
-
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import androidx.fragment.app.Fragment;
-
-import com.blankj.utilcode.util.LogUtils;
-import com.example.chemical.databinding.FragmentLockerBinding;
-import com.example.chemical.ui.add.FragmentCallBack;
-import com.rc.httpcore.bean.locker.HxpCabinetDoorVo;
-import com.rc.httpcore.bean.locker.HxpCabinetVo;
-
-import java.util.LinkedList;
-import java.util.List;
-
-public class LockerFragment extends Fragment {
-    private FragmentLockerBinding binding;
-    private HxpCabinetVo hxpCabinetVo;
-    // 所有柜层
-    private List<DrawerUiBean> drawerUiList = new LinkedList<>();
-    private FragmentCallBack fragmentCallBack;
-
-    public LockerFragment(HxpCabinetVo hxpCabinetVo, FragmentCallBack fragmentCallBack) {
-        this.hxpCabinetVo = hxpCabinetVo;
-    }
-
-    @Nullable
-    @Override
-    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
-        binding = FragmentLockerBinding.inflate(inflater, container, false);
-        return binding.getRoot();
-    }
-
-    @Override
-    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
-        super.onViewCreated(view, savedInstanceState);
-        drawerUiList.add(new DrawerUiBean(binding.lockerUpDrawer1RB, binding.lockerUpDrawer1TV, false));
-        drawerUiList.add(new DrawerUiBean(binding.lockerUpDrawer2RB, binding.lockerUpDrawer2TV, false));
-        drawerUiList.add(new DrawerUiBean(binding.lockerUpDrawer3RB, binding.lockerUpDrawer3TV, false));
-        drawerUiList.add(new DrawerUiBean(binding.lockerUpDrawer4RB, binding.lockerUpDrawer4TV, false));
-        drawerUiList.add(new DrawerUiBean(binding.lockerUpDrawer5RB, binding.lockerUpDrawer5TV, false));
-        drawerUiList.add(new DrawerUiBean(binding.lockerUpDrawer6RB, binding.lockerUpDrawer6TV, false));
-        drawerUiList.add(new DrawerUiBean(binding.lockerUpDrawer7RB, binding.lockerUpDrawer7TV, false));
-        drawerUiList.add(new DrawerUiBean(binding.lockerUpDrawer8RB, binding.lockerUpDrawer8TV, false));
-        // 所有柜门
-        List<HxpCabinetDoorVo> doorVoList = hxpCabinetVo.getCabinetDoorVoList();
-        String[] drawerArray = new String[]{"①  层", "②  层", "③  层", "④  层", "⑤  层", "⑥  层", "⑦  层", "⑧  层"};
-        if (doorVoList.size() == 1) {
-            HxpCabinetDoorVo hxpCabinetDoorVo = doorVoList.get(0);
-            // 层数
-            int doorLayers = hxpCabinetDoorVo.getDoorLayers();
-            for (int i = 0; i < 8; i++) {
-                DrawerUiBean drawerUiBean = drawerUiList.get(i);
-                drawerUiBean.setVisible(i < doorLayers);
-            }
-            LogUtils.dTag("DEBUG", drawerUiList);
-            for (int i = 0; i < drawerUiList.size(); i++) {
-                DrawerUiBean drawerUiBean = drawerUiList.get(i);
-                if (drawerUiBean.isVisible()) {
-                    drawerUiBean.getRadioButton().setVisibility(View.VISIBLE);
-                    drawerUiBean.getTextView().setVisibility(View.VISIBLE);
-                    drawerUiBean.setDrawer(drawerArray[i]);
-                    drawerUiBean.getTextView().setText(drawerUiBean.getDrawer());
-                }
-            }
-        } else if (doorVoList.size() > 1) {
-            HxpCabinetDoorVo hxpCabinetDoorUpVo = doorVoList.get(0);
-            // 层数
-            int doorUpLayers = hxpCabinetDoorUpVo.getDoorLayers();
-            for (int i = 0; i < 4; i++) {
-                DrawerUiBean drawerUiBean = drawerUiList.get(i);
-                drawerUiBean.setVisible(i < doorUpLayers);
-            }
-
-            // 设置柜1层高   柜内高484px
-            int itemUpH = 484 / 2 / doorUpLayers;
-            for (int i = 0; i < doorUpLayers; i++) {
-                for (int j = 0; j < 4; j++) {
-                    DrawerUiBean drawerUiBean = drawerUiList.get(j);
-                    RadioButton radioButton = drawerUiBean.getRadioButton();
-                    ViewGroup.LayoutParams radioButtonLayoutParams = radioButton.getLayoutParams();
-                    radioButtonLayoutParams.height = itemUpH;
-                    radioButton.setLayoutParams(radioButtonLayoutParams);
-
-                    TextView textView = drawerUiBean.getTextView();
-                    ViewGroup.LayoutParams textViewLayoutParams = textView.getLayoutParams();
-                    textViewLayoutParams.height = itemUpH;
-                    textView.setLayoutParams(textViewLayoutParams);
-                }
-            }
-
-
-            HxpCabinetDoorVo hxpCabinetDoorDownVo = doorVoList.get(1);
-            // 层数
-            int doorDownLayers = hxpCabinetDoorDownVo.getDoorLayers();
-            for (int i = 4; i < 8; i++) {
-                DrawerUiBean drawerUiBean = drawerUiList.get(i);
-                drawerUiBean.setVisible(i < (doorDownLayers + 4));
-            }
-
-            // 设置柜2层高   柜内高484px
-            int itemDownH = 484 / 2 / doorDownLayers;
-            for (int i = 0; i < doorDownLayers; i++) {
-                for (int j = 4; j < 8; j++) {
-                    DrawerUiBean drawerUiBean = drawerUiList.get(j);
-                    RadioButton radioButton = drawerUiBean.getRadioButton();
-                    ViewGroup.LayoutParams radioButtonLayoutParams = radioButton.getLayoutParams();
-                    radioButtonLayoutParams.height = itemDownH;
-                    radioButton.setLayoutParams(radioButtonLayoutParams);
-
-                    TextView textView = drawerUiBean.getTextView();
-                    ViewGroup.LayoutParams textViewLayoutParams = textView.getLayoutParams();
-                    textViewLayoutParams.height = itemDownH;
-                    textView.setLayoutParams(textViewLayoutParams);
-                }
-            }
-            LogUtils.dTag("DEBUG", drawerUiList);
-            for (int i = 0; i < drawerUiList.size(); i++) {
-                DrawerUiBean drawerUiBean = drawerUiList.get(i);
-                if (drawerUiBean.isVisible()) {
-                    drawerUiBean.getRadioButton().setVisibility(View.VISIBLE);
-                    drawerUiBean.getTextView().setVisibility(View.VISIBLE);
-                    drawerUiBean.setDrawer(drawerArray[i >= 4 ? i - doorUpLayers : i]);
-                    drawerUiBean.getTextView().setText(drawerUiBean.getDrawer());
-                } else {
-                    drawerUiBean.getRadioButton().setVisibility(View.GONE);
-                    drawerUiBean.getTextView().setVisibility(View.GONE);
-                }
-            }
-        }
-
-        binding.lockerUpDrawerRG.setOnCheckedChangeListener((group, checkedId) -> {
-            int radioButtonIndex = -1;
-            for (int i = 0; i < group.getChildCount(); i++) {
-                RadioButton radioButton = (RadioButton) group.getChildAt(i);
-                if (radioButton.getId() == checkedId) {
-                    radioButtonIndex = i;
-                    break;
-                }
-            }
-            if (radioButtonIndex != -1) {
-                fragmentCallBack.onSelected(hxpCabinetVo, radioButtonIndex);
-            }
-        });
-    }
-
-    @Override
-    public void onDestroyView() {
-        super.onDestroyView();
-        binding = null;
-    }
-}

+ 30 - 30
app/src/main/java/com/example/chemical/ui/common/BaseCountDownActivity.kt

@@ -38,38 +38,38 @@ abstract class BaseCountDownActivity<VB : ViewBinding> : RcBaseActivity<VB>() {
         this.mIBankTeps = callback
     }
 
+    protected fun stopCountDown() {
+        mCounter = 0
+        mCountDownHandler.removeMessages(WHAT_COUNT_DOWN)
+    }
+
     protected fun startCountDown() {
         mCounter = 0
-        Log.d("======父页面返回","--------${ChemicalApp.confs!!.backTime}")
+//        Log.d("======父页面返回","--------${ChemicalApp.confs!!.backTime}")
         mCountDownHandler.removeMessages(WHAT_COUNT_DOWN)
         if (null != ChemicalApp.userData) {
             Constants.OFFTIME_TIME = ChemicalApp.confs!!.offTime  //弹框返回时间
             mCountDownHandler.sendEmptyMessage(WHAT_COUNT_DOWN)
-            Log.d("======父页面返回","--------${ChemicalApp.confs!!.backTime}")
+//            Log.d("======父页面返回","--------${ChemicalApp.confs!!.backTime}")
             if (ChemicalApp.confs!!.backTime != 0) {
                 val secondsToMillisecondst =
                     TimesUils.secondsToMillisecondst(ChemicalApp.confs!!.backTime)
                 MAX_TIME = ChemicalApp.confs!!.backTime
-                Log.d("======父页面返回","--------$MAX_TIME")
+//                Log.d("======父页面返回","--------$MAX_TIME")
             }
 
         }
     }
 
-    protected fun stopCountDown() {
-        mCounter = 0
-        mCountDownHandler.removeMessages(WHAT_COUNT_DOWN)
-    }
-
     override fun onResume() {
         super.onResume()
-        Log.d("======父页面返回","--------232131---3231")
+//        Log.d("======父页面返回","--------232131---3231")
         startCountDown()
     }
 
     override fun onPause() {
-        stopCountDown()
         super.onPause()
+        stopCountDown()
     }
 
     override fun onDestroy() {
@@ -85,32 +85,32 @@ abstract class BaseCountDownActivity<VB : ViewBinding> : RcBaseActivity<VB>() {
 
     //和页面交互时进行触发得
     override fun onUserInteraction() {
-        Log.d("===页面有交互","---------------")
+//        Log.d("===页面有交互","---------------")
         startCountDown()
     }
 
     private val mCountDownHandler = object : Handler(Looper.getMainLooper()) {
 
         override fun handleMessage(msg: Message) {
-            if (WHAT_COUNT_DOWN == msg.what) {
-
-                val countDown = MAX_TIME - mCounter
-                if (isDestroyed) return
-                if (countDown <= 0) {
-                    if (Constants.VIEW_TYPE) {
-                        //当前在废弃or领用页面
-                        mIBankTeps!!.onViewLint()
-                    } else {
-                        UiManager.switcherCashier(
-                            this@BaseCountDownActivity,
-                            MainActivity::class.java
-                        )
-                    }
-                } else {
-                    sendEmptyMessageDelayed(WHAT_COUNT_DOWN, 1000)
-                }
-                mCounter++
-            }
+//            if (WHAT_COUNT_DOWN == msg.what) {
+//
+//                val countDown = MAX_TIME - mCounter
+//                if (isDestroyed) return
+//                if (countDown <= 0) {
+//                    if (Constants.VIEW_TYPE) {
+//                        //当前在废弃or领用页面
+//                        mIBankTeps!!.onViewLint()
+//                    } else {
+//                        UiManager.switcherCashier(
+//                            this@BaseCountDownActivity,
+//                            MainActivity::class.java
+//                        )
+//                    }
+//                } else {
+//                    sendEmptyMessageDelayed(WHAT_COUNT_DOWN, 1000)
+//                }
+//                mCounter++
+//            }
         }
     }
 

+ 1 - 1
app/src/main/java/com/example/chemical/ui/login/FacialLoginActivity.kt

@@ -53,7 +53,7 @@ class FacialLoginActivity : BaseCountDownActivity<ActivityFacialLoginBinding>()
     private val totalTimeInMillis: Long = 30 * 1000 // 总时常
     private lateinit var faceList: String
     private val handlerBack = Handler(Looper.getMainLooper())
-    private var timeLeftInSeconds = 5
+    private var timeLeftInSeconds = 2
     private var mTvView: TextView? = null
     private var mDialogsAut: AuthenticationDialog? = null
     private val countHandler = Handler(Looper.getMainLooper()) //整个页面 60秒后 直接关闭

+ 51 - 0
app/src/main/java/com/example/chemical/ui/plan/DrawerIndexView.java

@@ -0,0 +1,51 @@
+package com.example.chemical.ui.plan;
+
+import android.content.Context;
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.ColorFilter;
+import android.graphics.Paint;
+import android.graphics.Typeface;
+import android.graphics.drawable.Drawable;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
+public class DrawerIndexView extends Drawable {
+    private Paint paint;
+    private String text = "①";
+
+    public DrawerIndexView(Context context) {
+        init();
+    }
+
+    private void init() {
+        paint = new Paint();
+        paint.setColor(Color.BLACK);
+        paint.setTextSize(100);
+        paint.setTypeface(Typeface.DEFAULT);
+        paint.setAntiAlias(true);
+    }
+
+    @Override
+    public void draw(@NonNull Canvas canvas) {
+        float x = getBounds().width() / 2f - paint.measureText(text) / 2f;
+        float y = getBounds().height() / 2f - ((paint.descent() + paint.ascent()) / 2f);
+        canvas.drawText(text, x, y, paint);
+    }
+
+    @Override
+    public void setAlpha(int alpha) {
+        paint.setAlpha(alpha);
+    }
+
+    @Override
+    public void setColorFilter(@Nullable ColorFilter colorFilter) {
+        paint.setColorFilter(colorFilter);
+    }
+
+    @Override
+    public int getOpacity() {
+        return android.graphics.PixelFormat.TRANSLUCENT;
+    }
+}

+ 10 - 0
app/src/main/java/com/example/chemical/ui/plan/FragmentCallBack.java

@@ -0,0 +1,10 @@
+package com.example.chemical.ui.plan;
+
+import com.example.chemical.ui.plan.room.bean.locker.CabinetLayerSelect;
+
+public interface FragmentCallBack {
+    /**
+     * 当前选中的柜层信息
+     */
+    void onSelected(CabinetLayerSelect lastSelectInfo);
+}

+ 93 - 0
app/src/main/java/com/example/chemical/ui/plan/PlanAdapter.java

@@ -0,0 +1,93 @@
+package com.example.chemical.ui.plan;
+
+import android.content.Context;
+import android.text.TextUtils;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.BaseAdapter;
+
+import com.blankj.utilcode.util.LogUtils;
+import com.example.chemical.databinding.ItemInStorageBinding;
+import com.rc.httpcore.bean.HxpChemicalVo;
+import com.example.chemical.ui.plan.room.bean.input_add.InventoryItemBean;
+
+import java.util.List;
+
+public class PlanAdapter extends BaseAdapter {
+
+    private List<InventoryItemBean> inventoryItemBeanList;
+    private final Context context;
+
+    public PlanAdapter(Context context, List<InventoryItemBean> inventoryItemBeanList) {
+        this.inventoryItemBeanList = inventoryItemBeanList;
+        this.context = context;
+    }
+
+    @Override
+    public int getCount() {
+        return inventoryItemBeanList.size();
+    }
+
+    @Override
+    public InventoryItemBean getItem(int position) {
+        return inventoryItemBeanList.get(position);
+    }
+
+    @Override
+    public long getItemId(int position) {
+        return 0;
+    }
+
+    @Override
+    public View getView(int position, View convertView, ViewGroup parent) {
+        ViewHolder viewHolder;
+        if (convertView == null) {
+            ItemInStorageBinding binding = ItemInStorageBinding.inflate(LayoutInflater.from(context), parent, false);
+            convertView = binding.getRoot();
+            viewHolder = new ViewHolder(binding);
+            convertView.setTag(viewHolder);
+        } else {
+            viewHolder = (ViewHolder) convertView.getTag();
+        }
+
+        try {
+            InventoryItemBean inventoryItemBean = getItem(position);
+            HxpChemicalVo hxpChemicalVo = inventoryItemBean.getHxpChemicalVo();
+            ItemInStorageBinding binding = viewHolder.binding;
+            // 化学品名字
+            String chemicalName = hxpChemicalVo.getChemicalName();
+            binding.itemNameTV.setText(TextUtils.isEmpty(chemicalName) ? "" : chemicalName);
+            // cas
+            String casNum = hxpChemicalVo.getCasNum();
+            binding.casTV.setText(TextUtils.isEmpty(casNum) ? "" : casNum);
+            // 化学品类型
+            String chemicalCategoryName = hxpChemicalVo.getChemicalCategoryName();
+            binding.itemTypeTV.setText(TextUtils.isEmpty(chemicalCategoryName) ? "" : chemicalCategoryName);
+            // 管控非管控
+            String chemicalLevelName = hxpChemicalVo.getChemicalLevelName();
+            binding.itemLevelTV.setText(TextUtils.isEmpty(chemicalLevelName) ? "" : chemicalLevelName);
+            // 纯度
+            String purity = hxpChemicalVo.getChemicalPurity();
+            binding.itemNormsTV.setText(TextUtils.isEmpty(purity) ? "" : purity);
+            // 净含量
+            double specNum = 0;
+            binding.itemNetWtTV.setText(TextUtils.isEmpty(String.valueOf(specNum)) ? "" : String.valueOf(specNum));
+            // 数量
+            double packNum = 0;
+            binding.itemNumTV.setText(TextUtils.isEmpty(String.valueOf(packNum)) ? "" : String.valueOf(packNum));
+        } catch (Exception e) {
+            LogUtils.e(Log.getStackTraceString(e));
+        }
+        return convertView;
+    }
+
+    static class ViewHolder {
+        ItemInStorageBinding binding;
+
+        public ViewHolder(ItemInStorageBinding binding) {
+            this.binding = binding;
+        }
+    }
+}

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 317 - 0
app/src/main/java/com/example/chemical/ui/plan/PlanAddActivity.java


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 227 - 0
app/src/main/java/com/example/chemical/ui/plan/add/AddActivity.java


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 391 - 0
app/src/main/java/com/example/chemical/ui/plan/add/AddActivityHelp.java


+ 1 - 17
app/src/main/java/com/example/chemical/ui/add/locker/DrawerUiBean.java

@@ -1,4 +1,4 @@
-package com.example.chemical.ui.add.locker;
+package com.example.chemical.ui.plan.locker;
 
 import android.widget.RadioButton;
 import android.widget.TextView;
@@ -7,7 +7,6 @@ public class DrawerUiBean {
     private RadioButton radioButton;
     private TextView textView;
     private boolean isVisible;
-    private String drawer;// 层数
 
     public DrawerUiBean(RadioButton radioButton, TextView textView, boolean isVisible) {
         this.radioButton = radioButton;
@@ -39,19 +38,4 @@ public class DrawerUiBean {
         isVisible = visible;
     }
 
-    public String getDrawer() {
-        return drawer;
-    }
-
-    public void setDrawer(String drawer) {
-        this.drawer = drawer;
-    }
-
-    @Override
-    public String toString() {
-        return "DrawerUiBean{" +
-                "drawer='" + drawer + '\'' +
-                ", isVisible=" + isVisible +
-                '}';
-    }
 }

+ 13 - 3
app/src/main/java/com/example/chemical/ui/add/LockerAdapter.java

@@ -1,12 +1,12 @@
-package com.example.chemical.ui.add;
+package com.example.chemical.ui.plan.locker;
 
 import androidx.annotation.NonNull;
 import androidx.fragment.app.Fragment;
 import androidx.fragment.app.FragmentActivity;
 import androidx.viewpager2.adapter.FragmentStateAdapter;
 
-import com.example.chemical.ui.add.locker.LockerFragment;
-import com.rc.httpcore.bean.locker.HxpCabinetVo;
+import com.example.chemical.ui.plan.FragmentCallBack;
+import com.example.chemical.ui.plan.room.bean.locker.HxpCabinetVo;
 
 import java.util.LinkedList;
 import java.util.List;
@@ -23,6 +23,16 @@ public class LockerAdapter extends FragmentStateAdapter {
         }
     }
 
+    @Override
+    public long getItemId(int position) {
+        return fragments.get(position).hashCode();
+    }
+
+    @Override
+    public boolean containsItem(long itemId) {
+        return false;
+    }
+
     @NonNull
     @Override
     public Fragment createFragment(int position) {

+ 192 - 0
app/src/main/java/com/example/chemical/ui/plan/locker/LockerFragment.java

@@ -0,0 +1,192 @@
+package com.example.chemical.ui.plan.locker;
+
+import android.os.Bundle;
+import android.text.TextUtils;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.fragment.app.Fragment;
+
+import com.blankj.utilcode.util.LogUtils;
+import com.example.chemical.databinding.FragmentLockerBinding;
+import com.example.chemical.ui.plan.FragmentCallBack;
+import com.example.chemical.ui.plan.room.bean.locker.HxpCabinetDoorVo;
+import com.example.chemical.ui.plan.room.bean.locker.HxpCabinetVo;
+import com.example.chemical.ui.plan.room.bean.locker.CabinetLayerSelect;
+
+import java.util.LinkedList;
+import java.util.List;
+
+public class LockerFragment extends Fragment {
+    private FragmentLockerBinding binding;
+
+    // 柜子信息
+    private HxpCabinetVo hxpCabinetVo;
+    // 上柜门柜层
+    private List<DrawerUiBean> drawerUiUpList = new LinkedList<>();
+    // 下柜门柜层
+    private List<DrawerUiBean> drawerUiDownList = new LinkedList<>();
+    private FragmentCallBack fragmentCallBack;
+
+    public LockerFragment(HxpCabinetVo hxpCabinetVo, FragmentCallBack fragmentCallBack) {
+        this.hxpCabinetVo = hxpCabinetVo;
+        this.fragmentCallBack = fragmentCallBack;
+    }
+
+    @Nullable
+    @Override
+    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
+        binding = FragmentLockerBinding.inflate(inflater, container, false);
+        return binding.getRoot();
+    }
+
+    @Override
+    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
+        super.onViewCreated(view, savedInstanceState);
+        if (savedInstanceState != null) {
+            drawerUiUpList.clear();
+            drawerUiDownList.clear();
+        }
+        // 上柜view控制
+        drawerUiUpList.add(new DrawerUiBean(binding.lockerUpDrawer1RB, binding.lockerUpDrawer1TV, false));
+        drawerUiUpList.add(new DrawerUiBean(binding.lockerUpDrawer2RB, binding.lockerUpDrawer2TV, false));
+        drawerUiUpList.add(new DrawerUiBean(binding.lockerUpDrawer3RB, binding.lockerUpDrawer3TV, false));
+        drawerUiUpList.add(new DrawerUiBean(binding.lockerUpDrawer4RB, binding.lockerUpDrawer4TV, false));
+        drawerUiUpList.add(new DrawerUiBean(binding.lockerUpDrawer5RB, binding.lockerUpDrawer5TV, false));
+        drawerUiUpList.add(new DrawerUiBean(binding.lockerUpDrawer6RB, binding.lockerUpDrawer6TV, false));
+        drawerUiUpList.add(new DrawerUiBean(binding.lockerUpDrawer7RB, binding.lockerUpDrawer7TV, false));
+        drawerUiUpList.add(new DrawerUiBean(binding.lockerUpDrawer8RB, binding.lockerUpDrawer8TV, false));
+
+        // 下柜view控制
+        drawerUiDownList.add(new DrawerUiBean(binding.lockerDownDrawer1RB, binding.lockerDownDrawer1TV, false));
+        drawerUiDownList.add(new DrawerUiBean(binding.lockerDownDrawer2RB, binding.lockerDownDrawer2TV, false));
+        drawerUiDownList.add(new DrawerUiBean(binding.lockerDownDrawer3RB, binding.lockerDownDrawer3TV, false));
+        drawerUiDownList.add(new DrawerUiBean(binding.lockerDownDrawer4RB, binding.lockerDownDrawer4TV, false));
+
+        for (int i = 0; i < drawerUiUpList.size(); i++) {
+            drawerUiUpList.get(i).getRadioButton().setOnClickListener(onClickDoorUpListener);
+        }
+        for (int i = 0; i < drawerUiDownList.size(); i++) {
+            drawerUiDownList.get(i).getRadioButton().setOnClickListener(onClickDoorDownListener);
+        }
+        // 所有柜门
+        List<HxpCabinetDoorVo> doorVoList = hxpCabinetVo.getCabinetDoorVoList();
+
+        // 柜子名称
+        String cabinetName = hxpCabinetVo.getCabinetName();
+        binding.lockerNameTV.setText(TextUtils.isEmpty(cabinetName) ? "" : cabinetName);
+
+        // 一个柜门
+        if (doorVoList.size() == 1) {
+            HxpCabinetDoorVo hxpCabinetDoorVo = doorVoList.get(0);
+            // 柜门名称
+            String doorName = hxpCabinetDoorVo.getDoorName();
+            binding.upDoorNameTV.setText(TextUtils.isEmpty(doorName) ? "" : doorName);
+            // 层数
+            int doorLayers = hxpCabinetDoorVo.getDoorLayers();
+            for (int i = 0; i < 8; i++) {
+                DrawerUiBean drawerUiBean = drawerUiUpList.get(i);
+                drawerUiBean.setVisible(i < doorLayers);
+            }
+
+            for (int i = 0; i < drawerUiUpList.size(); i++) {
+                DrawerUiBean drawerUiBean = drawerUiUpList.get(i);
+                if (drawerUiBean.isVisible()) {
+                    drawerUiBean.getRadioButton().setVisibility(View.VISIBLE);
+                    drawerUiBean.getTextView().setVisibility(View.VISIBLE);
+                }
+            }
+        }
+        // 两个柜门
+        else if (doorVoList.size() > 1) {
+            // 上柜门
+            HxpCabinetDoorVo hxpCabinetDoorUpVo = doorVoList.get(0);
+            String doorName = hxpCabinetDoorUpVo.getDoorName();
+            binding.upDoorNameTV.setText(TextUtils.isEmpty(doorName) ? "" : doorName);
+            // 层数
+            int doorUpLayers = hxpCabinetDoorUpVo.getDoorLayers();
+            for (int i = 0; i < 4; i++) {
+                DrawerUiBean drawerUiBean = drawerUiUpList.get(i);
+                drawerUiBean.setVisible(i < doorUpLayers);
+            }
+
+            for (int i = 0; i < drawerUiUpList.size(); i++) {
+                DrawerUiBean drawerUiBean = drawerUiUpList.get(i);
+                if (drawerUiBean.isVisible()) {
+                    drawerUiBean.getRadioButton().setVisibility(View.VISIBLE);
+                    drawerUiBean.getTextView().setVisibility(View.VISIBLE);
+                }
+            }
+
+            binding.lockerDownDrawerLL.setVisibility(View.VISIBLE);
+            binding.lockerDownDrawerRG.setVisibility(View.VISIBLE);
+
+            // 下柜门
+            HxpCabinetDoorVo hxpCabinetDoorDownVo = doorVoList.get(1);
+            String doorDownName = hxpCabinetDoorDownVo.getDoorName();
+            binding.downDoorNameTV.setText(TextUtils.isEmpty(doorDownName) ? "" : doorDownName);
+            // 层数
+            int doorDownLayers = hxpCabinetDoorDownVo.getDoorLayers();
+            for (int i = 0; i < 4; i++) {
+                DrawerUiBean drawerUiBean = drawerUiDownList.get(i);
+                drawerUiBean.setVisible(i < doorDownLayers);
+            }
+
+            for (int i = 0; i < drawerUiDownList.size(); i++) {
+                DrawerUiBean drawerUiBean = drawerUiDownList.get(i);
+                if (drawerUiBean.isVisible()) {
+                    drawerUiBean.getRadioButton().setVisibility(View.VISIBLE);
+                    drawerUiBean.getTextView().setVisibility(View.VISIBLE);
+                }
+            }
+
+        }
+    }
+
+    private final View.OnClickListener onClickDoorUpListener = new View.OnClickListener() {
+        @Override
+        public void onClick(View v) {
+            int layer = 0;
+            if (binding.lockerUpDrawer1RB.getId() == v.getId()) {
+                layer = 1;
+            } else if (binding.lockerUpDrawer2RB.getId() == v.getId()) {
+                layer = 2;
+            } else if (binding.lockerUpDrawer3RB.getId() == v.getId()) {
+                layer = 3;
+            } else if (binding.lockerUpDrawer4RB.getId() == v.getId()) {
+                layer = 4;
+            } else if (binding.lockerUpDrawer5RB.getId() == v.getId()) {
+                layer = 5;
+            } else if (binding.lockerUpDrawer6RB.getId() == v.getId()) {
+                layer = 6;
+            } else if (binding.lockerUpDrawer7RB.getId() == v.getId()) {
+                layer = 7;
+            } else if (binding.lockerUpDrawer8RB.getId() == v.getId()) {
+                layer = 8;
+            }
+            LogUtils.d("上柜", layer + "层");
+            fragmentCallBack.onSelected(new CabinetLayerSelect(hxpCabinetVo.getCabinetId(), hxpCabinetVo.getCabinetDoorVoList().get(0).getDoorId(), layer));
+        }
+    };
+    private final View.OnClickListener onClickDoorDownListener = new View.OnClickListener() {
+        @Override
+        public void onClick(View v) {
+            int layer = 0;
+            if (binding.lockerDownDrawer1RB.getId() == v.getId()) {
+                layer = 1;
+            } else if (binding.lockerDownDrawer2RB.getId() == v.getId()) {
+                layer = 2;
+            } else if (binding.lockerDownDrawer3RB.getId() == v.getId()) {
+                layer = 3;
+            } else if (binding.lockerDownDrawer4RB.getId() == v.getId()) {
+                layer = 4;
+            }
+            LogUtils.d("下柜", layer + "层");
+            fragmentCallBack.onSelected(new CabinetLayerSelect(hxpCabinetVo.getCabinetId(), hxpCabinetVo.getCabinetDoorVoList().get(1).getDoorId(), layer));
+        }
+    };
+
+}

+ 89 - 0
app/src/main/java/com/example/chemical/ui/plan/room/RoomConverter.java

@@ -0,0 +1,89 @@
+package com.example.chemical.ui.plan.room;
+
+import androidx.room.TypeConverter;
+
+import com.blankj.utilcode.util.GsonUtils;
+import com.example.chemical.ui.plan.room.bean.input_add.InventoryItemBean;
+import com.example.chemical.ui.plan.room.bean.locker.CabinetLayerSelect;
+import com.example.chemical.ui.plan.room.bean.locker.HxpCabinetAdminVo;
+import com.example.chemical.ui.plan.room.bean.locker.HxpCabinetDoorVo;
+import com.example.chemical.ui.plan.room.bean.locker.HxpCabinetLockVo;
+import com.google.gson.reflect.TypeToken;
+
+import java.lang.reflect.Type;
+import java.util.List;
+
+public class RoomConverter {
+
+    @TypeConverter
+    public String doorListToString(List<HxpCabinetDoorVo> list) {
+        return GsonUtils.toJson(list);
+    }
+
+    @TypeConverter
+    public List<HxpCabinetDoorVo> stringToDoorList(String json) {
+        Type listType = new TypeToken<List<HxpCabinetDoorVo>>() {
+        }.getType();
+        return GsonUtils.fromJson(json, listType);
+    }
+
+    @TypeConverter
+    public String adminListToString(List<HxpCabinetAdminVo> list) {
+        return GsonUtils.toJson(list);
+    }
+
+    @TypeConverter
+    public List<HxpCabinetAdminVo> stringToAdminList(String json) {
+        Type listType = new TypeToken<List<HxpCabinetAdminVo>>() {
+        }.getType();
+        return GsonUtils.fromJson(json, listType);
+    }
+
+    @TypeConverter
+    public String lockListToString(List<HxpCabinetLockVo> list) {
+        return GsonUtils.toJson(list);
+    }
+
+    @TypeConverter
+    public List<HxpCabinetLockVo> stringToLockList(String json) {
+        Type listType = new TypeToken<List<HxpCabinetLockVo>>() {
+        }.getType();
+        return GsonUtils.fromJson(json, listType);
+    }
+
+    @TypeConverter
+    public String layerListToString(List<CabinetLayerSelect> list) {
+        return GsonUtils.toJson(list);
+    }
+
+    @TypeConverter
+    public List<CabinetLayerSelect> stringToLayerList(String json) {
+        Type listType = new TypeToken<List<CabinetLayerSelect>>() {
+        }.getType();
+        return GsonUtils.fromJson(json, listType);
+    }
+
+    @TypeConverter
+    public String inventoryListToString(List<InventoryItemBean> list) {
+        return GsonUtils.toJson(list);
+    }
+
+    @TypeConverter
+    public List<InventoryItemBean> stringToInventoryList(String json) {
+        Type listType = new TypeToken<List<InventoryItemBean>>() {
+        }.getType();
+        return GsonUtils.fromJson(json, listType);
+    }
+
+    @TypeConverter
+    public String layerSelectListToString(CabinetLayerSelect obj) {
+        return GsonUtils.toJson(obj);
+    }
+
+    @TypeConverter
+    public CabinetLayerSelect stringToLayerSelect(String json) {
+        return GsonUtils.fromJson(json, CabinetLayerSelect.class);
+    }
+
+
+}

+ 36 - 0
app/src/main/java/com/example/chemical/ui/plan/room/RoomTool.java

@@ -0,0 +1,36 @@
+package com.example.chemical.ui.plan.room;
+
+import androidx.room.Database;
+import androidx.room.Room;
+import androidx.room.RoomDatabase;
+
+import com.blankj.utilcode.util.Utils;
+import com.example.chemical.BuildConfig;
+import com.example.chemical.ui.plan.room.bean.locker.CabinetLayerSelect;
+import com.example.chemical.ui.plan.room.bean.locker.HxpCabinetDoorVo;
+import com.example.chemical.ui.plan.room.bean.locker.HxpCabinetVo;
+import com.example.chemical.ui.plan.room.dao.HxpCabinetDAO;
+import com.example.chemical.ui.plan.room.dao.HxpDoorDAO;
+import com.example.chemical.ui.plan.room.dao.HxpLayerDAO;
+
+@Database(entities = {HxpCabinetVo.class, HxpCabinetDoorVo.class, CabinetLayerSelect.class}, version = BuildConfig.VERSION_CODE, exportSchema = false)
+public abstract class RoomTool extends RoomDatabase {
+
+    private static RoomTool INSTANCE;
+
+    public static synchronized RoomTool getInstance() {
+        if (INSTANCE == null) {
+            INSTANCE = Room.databaseBuilder(Utils.getApp(), RoomTool.class, "hxp_db").allowMainThreadQueries().build();
+        }
+        return INSTANCE;
+    }
+
+    // 柜子
+    public abstract HxpCabinetDAO hxpCabinetDAO();
+
+    // 柜门
+    public abstract HxpDoorDAO hxpDoorDAO();
+
+    // 柜层
+    public abstract HxpLayerDAO hxpLayerDAO();
+}

+ 46 - 0
app/src/main/java/com/example/chemical/ui/plan/room/bean/input_add/HxpChemical.java

@@ -0,0 +1,46 @@
+package com.example.chemical.ui.plan.room.bean.input_add;
+
+
+import com.rc.httpcore.bean.HxpChemicalVo;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class HxpChemical {
+    private int code;
+    private String message;
+    private List<HxpChemicalVo> data = new ArrayList<>();
+
+    public int getCode() {
+        return code;
+    }
+
+    public void setCode(int code) {
+        this.code = code;
+    }
+
+    public String getMessage() {
+        return message;
+    }
+
+    public void setMessage(String message) {
+        this.message = message;
+    }
+
+    public List<HxpChemicalVo> getData() {
+        return data;
+    }
+
+    public void setData(List<HxpChemicalVo> data) {
+        this.data = data;
+    }
+
+    @Override
+    public String toString() {
+        return "HxpChemicalList{" +
+                "code=" + code +
+                ", message='" + message + '\'' +
+                ", data=" + data +
+                '}';
+    }
+}

+ 39 - 0
app/src/main/java/com/example/chemical/ui/plan/room/bean/input_add/InventoryItemBean.java

@@ -0,0 +1,39 @@
+package com.example.chemical.ui.plan.room.bean.input_add;
+
+import com.rc.httpcore.bean.BelongingPersonBean;
+import com.rc.httpcore.bean.HxpChemicalVo;
+
+import java.io.Serializable;
+
+public class InventoryItemBean implements Serializable {
+    // 化学品信息
+    private HxpChemicalVo hxpChemicalVo;
+    // 归属人信息
+    private BelongingPersonBean belongingPersonBean;
+    // 化学品数量
+    private int size;
+
+    public int getSize() {
+        return size;
+    }
+
+    public void setSize(int size) {
+        this.size = size;
+    }
+
+    public HxpChemicalVo getHxpChemicalVo() {
+        return hxpChemicalVo;
+    }
+
+    public void setHxpChemicalVo(HxpChemicalVo hxpChemicalVo) {
+        this.hxpChemicalVo = hxpChemicalVo;
+    }
+
+    public BelongingPersonBean getBelongingPersonBean() {
+        return belongingPersonBean;
+    }
+
+    public void setBelongingPersonBean(BelongingPersonBean belongingPersonBean) {
+        this.belongingPersonBean = belongingPersonBean;
+    }
+}

+ 82 - 0
app/src/main/java/com/example/chemical/ui/plan/room/bean/locker/CabinetLayerSelect.java

@@ -0,0 +1,82 @@
+package com.example.chemical.ui.plan.room.bean.locker;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+
+import androidx.room.Entity;
+import androidx.room.PrimaryKey;
+import androidx.room.TypeConverters;
+
+import com.example.chemical.ui.plan.room.RoomConverter;
+import com.example.chemical.ui.plan.room.bean.input_add.InventoryItemBean;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+@Entity
+@TypeConverters(RoomConverter.class)
+public class CabinetLayerSelect implements Serializable {
+
+    // 当前选择存储的柜子ID
+    @PrimaryKey
+    private long cabinetId;
+    // 当前选择存储柜子的柜门ID
+    private long doorId;
+    // 当前选择存储柜子的哪一层
+    private int layer;
+
+    // 待存储的化学品列表
+    private List<InventoryItemBean> inventoryItemBeanList = new ArrayList<>();
+
+
+    public List<InventoryItemBean> getInventoryItemBeanList() {
+        return inventoryItemBeanList;
+    }
+
+    public void setInventoryItemBeanList(List<InventoryItemBean> inventoryItemBeanList) {
+        this.inventoryItemBeanList = inventoryItemBeanList;
+    }
+
+    public CabinetLayerSelect(long cabinetId, long doorId, int layer) {
+        this.cabinetId = cabinetId;
+        this.doorId = doorId;
+        this.layer = layer;
+    }
+
+    public long getCabinetId() {
+        return cabinetId;
+    }
+
+    public void setCabinetId(long cabinetId) {
+        this.cabinetId = cabinetId;
+    }
+
+    public long getDoorId() {
+        return doorId;
+    }
+
+    public void setDoorId(long doorId) {
+        this.doorId = doorId;
+    }
+
+    public int getLayer() {
+        return layer;
+    }
+
+    public void setLayer(int layer) {
+        this.layer = layer;
+    }
+
+
+    @Override
+    public String toString() {
+        return "LastSelectInfo{" +
+                "cabinetId=" + cabinetId +
+                ", doorId=" + doorId +
+                ", layer=" + layer +
+                ", inventoryItemBeanList=" + inventoryItemBeanList +
+                '}';
+    }
+
+}

+ 1 - 1
HttpCoreLibrary/src/main/java/com/rc/httpcore/bean/locker/HxpCabinetAdminVo.java

@@ -1,4 +1,4 @@
-package com.rc.httpcore.bean.locker;
+package com.example.chemical.ui.plan.room.bean.locker;
 
 public class HxpCabinetAdminVo {
     // ("柜门id")

+ 28 - 32
HttpCoreLibrary/src/main/java/com/rc/httpcore/bean/locker/HxpCabinetDoorVo.java

@@ -1,47 +1,61 @@
-package com.rc.httpcore.bean.locker;
+package com.example.chemical.ui.plan.room.bean.locker;
+
+import androidx.room.Entity;
+import androidx.room.ForeignKey;
+import androidx.room.Ignore;
+import androidx.room.PrimaryKey;
+import androidx.room.TypeConverters;
+
+import com.example.chemical.ui.plan.room.RoomConverter;
 
 import java.util.ArrayList;
 import java.util.List;
 
+/**
+ * 柜门
+ */
+@Entity
+@TypeConverters(RoomConverter.class)
 public class HxpCabinetDoorVo {
-    // ("主键id")
+    // ("柜门id")
     private long doorId;
-
     // ("关键机柜id")
     private long cabinetId;
-
     // ("柜门名称")
     private String doorName;
-
     // ("门里面的层数")
     private int doorLayers;
-
     // ("机柜唯一id,用于化学品入库绑定唯一编码")
+    @PrimaryKey
     private long doorUniqueId;
-
     // ("开始方式:1无锁,2是智能锁,3是钥匙柜")
     private int unlockingMethod;
-
     // ("化学品库存数量")
     private int stockNum;
-
     // ("化学品使用数量")
     private int useNum;
-
     // ("是否管控")
     private boolean isControl;
-
     // ("是否双人认证")
     private boolean verify;
-
     // ("是否开启关闭")
     private boolean openOrClose = false;
-
     // ("管理员列表")
     private List<HxpCabinetAdminVo> cabinetAdminVoList = new ArrayList<>();
-
     // ("机柜锁列表")
     private List<HxpCabinetLockVo> cabinetLockVoList = new ArrayList<>();
+    // 柜层信息列表
+    @Ignore
+    private List<CabinetLayerSelect> cabinetLayerSelectList = new ArrayList<>();
+
+
+    public List<CabinetLayerSelect> getCabinetLayerSelectList() {
+        return cabinetLayerSelectList;
+    }
+
+    public void setCabinetLayerSelectList(List<CabinetLayerSelect> cabinetLayerSelectList) {
+        this.cabinetLayerSelectList = cabinetLayerSelectList;
+    }
 
     public long getDoorId() {
         return doorId;
@@ -147,22 +161,4 @@ public class HxpCabinetDoorVo {
         this.cabinetLockVoList = cabinetLockVoList;
     }
 
-    @Override
-    public String toString() {
-        return "HxpCabinetDoorVo{" +
-                "doorId=" + doorId +
-                ", cabinetId=" + cabinetId +
-                ", doorName='" + doorName + '\'' +
-                ", doorLayers=" + doorLayers +
-                ", doorUniqueId=" + doorUniqueId +
-                ", unlockingMethod=" + unlockingMethod +
-                ", stockNum=" + stockNum +
-                ", useNum=" + useNum +
-                ", isControl=" + isControl +
-                ", verify=" + verify +
-                ", openOrClose=" + openOrClose +
-                ", cabinetAdminVoList=" + cabinetAdminVoList +
-                ", cabinetLockVoList=" + cabinetLockVoList +
-                '}';
-    }
 }

+ 1 - 1
HttpCoreLibrary/src/main/java/com/rc/httpcore/bean/locker/HxpCabinetListVo.java

@@ -1,4 +1,4 @@
-package com.rc.httpcore.bean.locker;
+package com.example.chemical.ui.plan.room.bean.locker;
 
 import java.util.ArrayList;
 import java.util.List;

+ 1 - 1
HttpCoreLibrary/src/main/java/com/rc/httpcore/bean/locker/HxpCabinetLockVo.java

@@ -1,4 +1,4 @@
-package com.rc.httpcore.bean.locker;
+package com.example.chemical.ui.plan.room.bean.locker;
 
 public class HxpCabinetLockVo {
     // ("柜门id")

+ 27 - 30
HttpCoreLibrary/src/main/java/com/rc/httpcore/bean/locker/HxpCabinetVo.java

@@ -1,9 +1,23 @@
-package com.rc.httpcore.bean.locker;
+package com.example.chemical.ui.plan.room.bean.locker;
+
+import androidx.room.Entity;
+import androidx.room.Ignore;
+import androidx.room.PrimaryKey;
+import androidx.room.TypeConverter;
+import androidx.room.TypeConverters;
+
+import com.example.chemical.ui.plan.room.RoomConverter;
 
 import java.util.ArrayList;
 import java.util.List;
 
+/**
+ * 柜子
+ */
+@Entity
+@TypeConverters(RoomConverter.class)
 public class HxpCabinetVo {
+    @PrimaryKey
     // ("机柜id")
     private long cabinetId;
     // ("机柜名称")
@@ -51,8 +65,20 @@ public class HxpCabinetVo {
     // ("修改时间")
     private String updateTime;
     // ("柜门列表")
+    @Ignore
     private List<HxpCabinetDoorVo> cabinetDoorVoList = new ArrayList<>();
 
+    // 选择信息
+    private CabinetLayerSelect lastSelectInfo;
+
+    public CabinetLayerSelect getLastSelectInfo() {
+        return lastSelectInfo;
+    }
+
+    public void setLastSelectInfo(CabinetLayerSelect lastSelectInfo) {
+        this.lastSelectInfo = lastSelectInfo;
+    }
+
     public long getCabinetId() {
         return cabinetId;
     }
@@ -246,33 +272,4 @@ public class HxpCabinetVo {
         this.updateTime = updateTime;
     }
 
-    @Override
-    public String toString() {
-        return "HxpCabinetVo{" +
-                "cabinetId=" + cabinetId +
-                ", cabinetName='" + cabinetName + '\'' +
-                ", deptId=" + deptId +
-                ", deptName='" + deptName + '\'' +
-                ", buildId=" + buildId +
-                ", buildName='" + buildName + '\'' +
-                ", floorId=" + floorId +
-                ", floorName='" + floorName + '\'' +
-                ", subId=" + subId +
-                ", subName='" + subName + '\'' +
-                ", roomNum='" + roomNum + '\'' +
-                ", safeInfo='" + safeInfo + '\'' +
-                ", cameraId=" + cameraId +
-                ", collectorId=" + collectorId +
-                ", doorNum=" + doorNum +
-                ", lockNum=" + lockNum +
-                ", chemicalNum=" + chemicalNum +
-                ", createBy=" + createBy +
-                ", createName='" + createName + '\'' +
-                ", createTime='" + createTime + '\'' +
-                ", updateBy=" + updateBy +
-                ", updateName='" + updateName + '\'' +
-                ", updateTime='" + updateTime + '\'' +
-                ", cabinetDoorVoList=" + cabinetDoorVoList +
-                '}';
-    }
 }

+ 37 - 0
app/src/main/java/com/example/chemical/ui/plan/room/dao/HxpCabinetDAO.java

@@ -0,0 +1,37 @@
+package com.example.chemical.ui.plan.room.dao;
+
+import androidx.room.Dao;
+import androidx.room.Delete;
+import androidx.room.Insert;
+import androidx.room.OnConflictStrategy;
+import androidx.room.Query;
+import androidx.room.Update;
+
+import com.example.chemical.ui.plan.room.bean.locker.HxpCabinetVo;
+
+import java.util.List;
+
+@Dao
+public interface HxpCabinetDAO {
+
+    @Insert(onConflict = OnConflictStrategy.REPLACE)
+    void insert(HxpCabinetVo cabinet);
+
+    @Insert(onConflict = OnConflictStrategy.REPLACE)
+    void insertAll(List<HxpCabinetVo> users);
+
+    @Query("SELECT * FROM hxpcabinetvo")
+    List<HxpCabinetVo> getAll();
+
+    @Query("SELECT * FROM hxpcabinetvo WHERE cabinetId = :cabinetId")
+    HxpCabinetVo getById(long cabinetId);
+
+    @Update
+    void update(HxpCabinetVo hxpCabinetVo);
+
+    @Delete
+    void delete(HxpCabinetVo hxpCabinetVo);
+
+    @Query("DELETE FROM hxpcabinetvo")
+    void deleteAll();
+}

+ 39 - 0
app/src/main/java/com/example/chemical/ui/plan/room/dao/HxpDoorDAO.java

@@ -0,0 +1,39 @@
+package com.example.chemical.ui.plan.room.dao;
+
+import androidx.room.Dao;
+import androidx.room.Delete;
+import androidx.room.Insert;
+import androidx.room.OnConflictStrategy;
+import androidx.room.Query;
+import androidx.room.Update;
+
+import com.example.chemical.ui.plan.room.bean.locker.HxpCabinetDoorVo;
+import com.example.chemical.ui.plan.room.bean.locker.HxpCabinetDoorVo;
+
+import java.util.List;
+
+@Dao
+public interface HxpDoorDAO {
+
+    @Insert(onConflict = OnConflictStrategy.REPLACE)
+    void insert(HxpCabinetDoorVo doorVo);
+
+    @Insert(onConflict = OnConflictStrategy.REPLACE)
+    void insertAll(List<HxpCabinetDoorVo> users);
+
+    @Query("SELECT * FROM hxpcabinetdoorvo")
+    List<HxpCabinetDoorVo> getAll();
+
+    @Query("SELECT * FROM hxpcabinetdoorvo WHERE doorId = :dooId")
+    HxpCabinetDoorVo getById(long dooId);
+
+    @Update
+    void update(HxpCabinetDoorVo hxpcabinetdoorvo);
+
+    @Delete
+    void delete(HxpCabinetDoorVo hxpcabinetdoorvo);
+
+    @Query("DELETE FROM hxpcabinetdoorvo")
+    void deleteAll();
+
+}

+ 38 - 0
app/src/main/java/com/example/chemical/ui/plan/room/dao/HxpLayerDAO.java

@@ -0,0 +1,38 @@
+package com.example.chemical.ui.plan.room.dao;
+
+import androidx.room.Dao;
+import androidx.room.Delete;
+import androidx.room.Insert;
+import androidx.room.OnConflictStrategy;
+import androidx.room.Query;
+import androidx.room.Update;
+
+import com.example.chemical.ui.plan.room.bean.locker.CabinetLayerSelect;
+
+import java.util.List;
+
+@Dao
+public interface HxpLayerDAO {
+
+    @Insert(onConflict = OnConflictStrategy.REPLACE)
+    void insert(CabinetLayerSelect layerSelect);
+
+    @Insert(onConflict = OnConflictStrategy.REPLACE)
+    void insertAll(List<CabinetLayerSelect> layerSelects);
+
+    @Query("SELECT * FROM cabinetlayerselect")
+    List<CabinetLayerSelect> getAll();
+
+    @Query("SELECT * FROM cabinetlayerselect WHERE layer = :layer AND cabinetId =:cabinetId AND doorId =:doorId")
+    CabinetLayerSelect getById(long cabinetId, long doorId, long layer);
+
+    @Update
+    void update(CabinetLayerSelect cabinetlayerselect);
+
+    @Delete
+    void delete(CabinetLayerSelect cabinetlayerselect);
+
+    @Query("DELETE FROM cabinetlayerselect")
+    void deleteAll();
+
+}

+ 23 - 21
app/src/main/java/com/example/chemical/weidith/LabelDialog.kt

@@ -222,31 +222,33 @@ class LabelDialog(
 //        customDialogView(0, "请扫描标签")
         butClos = findViewById<Button>(R.id.butClos)
 
-        mCountDownHandler.removeMessages(Constants.WHAT_COUNT_DOWN_TWO)
-        mCountDownHandler.sendEmptyMessage(Constants.WHAT_COUNT_DOWN_TWO)
+        //TODO
+//        mCountDownHandler.removeMessages(Constants.WHAT_COUNT_DOWN_TWO)
+//        mCountDownHandler.sendEmptyMessage(Constants.WHAT_COUNT_DOWN_TWO)
     }
 
     private fun closHandle() {
-        mCountDownHandler.removeMessages(Constants.WHAT_COUNT_DOWN_TWO)
-        mCountDownHandler.removeCallbacksAndMessages(null)
-    }
-
-    private val mCountDownHandler = object : Handler(Looper.getMainLooper()) {
-
-        override fun handleMessage(msg: Message) {
-            if (Constants.WHAT_COUNT_DOWN_TWO == msg.what) {
-
-                val countDown = Constants.OFFTIME_TIME - mCounter
-
-                if (countDown <= 0) {
-                    dismiss()
-                } else {
-                    sendEmptyMessageDelayed(Constants.WHAT_COUNT_DOWN_TWO, 1000)
-                }
-                mCounter++
-            }
-        }
+        //TODO
+//        mCountDownHandler.removeMessages(Constants.WHAT_COUNT_DOWN_TWO)
+//        mCountDownHandler.removeCallbacksAndMessages(null)
     }
+//TODO
+//    private val mCountDownHandler = object : Handler(Looper.getMainLooper()) {
+//
+//        override fun handleMessage(msg: Message) {
+//            if (Constants.WHAT_COUNT_DOWN_TWO == msg.what) {
+//
+//                val countDown = Constants.OFFTIME_TIME - mCounter
+//
+//                if (countDown <= 0) {
+//                    dismiss()
+//                } else {
+//                    sendEmptyMessageDelayed(Constants.WHAT_COUNT_DOWN_TWO, 1000)
+//                }
+//                mCounter++
+//            }
+//        }
+//    }
 
     interface IRfidClick {
         fun onItemClick(modelList: MutableList<StockDetailsModel>?, layer: Int)

+ 63 - 0
app/src/main/java/com/example/chemical/weidith/SelectChemicalDialog.java

@@ -0,0 +1,63 @@
+package com.example.chemical.weidith;
+
+import android.app.Dialog;
+import android.content.Context;
+import android.graphics.Color;
+import android.graphics.drawable.ColorDrawable;
+import android.os.Bundle;
+import android.view.Gravity;
+import android.view.Window;
+import android.view.WindowManager;
+
+import androidx.annotation.NonNull;
+import androidx.recyclerview.widget.LinearLayoutManager;
+
+import com.example.chemical.R;
+import com.example.chemical.databinding.DcaeDialogBinding;
+import com.example.chemical.ui.adapter.SelectChemicalDialogAdapter;
+import com.rc.httpcore.bean.HxpChemicalVo;
+
+import java.util.List;
+
+public class SelectChemicalDialog extends Dialog {
+    private DcaeDialogBinding binding;
+    private Context context;
+    private SelectChemicalDialogAdapter selectChemicalDialogAdapter;
+    private List<HxpChemicalVo> hxpChemicalVoList;
+    private SelectedListener selectedListener;
+
+    public SelectChemicalDialog(@NonNull Context context, List<HxpChemicalVo> hxpChemicalVoList, SelectedListener selectedListener) {
+        super(context);
+        this.context = context;
+        this.hxpChemicalVoList = hxpChemicalVoList;
+        this.selectedListener = selectedListener;
+    }
+
+    public interface SelectedListener {
+        void selected(HxpChemicalVo hxpChemicalVo);
+    }
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        requestWindowFeature(Window.FEATURE_NO_TITLE);
+        binding = DcaeDialogBinding.inflate(getLayoutInflater());
+        setContentView(binding.getRoot());
+        getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
+        getWindow().setGravity(Gravity.CENTER);
+        getWindow().setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.WRAP_CONTENT);
+        setCanceledOnTouchOutside(false);
+
+        LinearLayoutManager layoutManager = new LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false);
+        binding.rvView.setLayoutManager(layoutManager);
+        selectChemicalDialogAdapter = new SelectChemicalDialogAdapter(R.layout.chemical_search_rv, hxpChemicalVoList);
+        binding.rvView.setAdapter(selectChemicalDialogAdapter);
+
+        selectChemicalDialogAdapter.setOnItemClickListener((adapter, view, position) -> {
+            selectedListener.selected(selectChemicalDialogAdapter.getData().get(position));
+            dismiss();
+        });
+
+        binding.butClos.setOnClickListener(v -> dismiss());
+    }
+}

+ 14 - 0
app/src/main/res/drawable/selector_input_bt.xml

@@ -0,0 +1,14 @@
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:state_pressed="true">
+        <shape android:shape="rectangle">
+            <solid android:color="#E0E0E0" />
+            <corners android:radius="10px" />
+        </shape>
+    </item>
+    <item>
+        <shape android:shape="rectangle">
+            <solid android:color="#2697FF" />
+            <corners android:radius="10px" />
+        </shape>
+    </item>
+</selector>

+ 14 - 0
app/src/main/res/drawable/selector_input_select_bt.xml

@@ -0,0 +1,14 @@
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:state_pressed="true">
+        <shape android:shape="rectangle">
+            <solid android:color="#E0E0E0" />
+            <corners android:radius="80dp" />
+        </shape>
+    </item>
+    <item>
+        <shape android:shape="rectangle">
+            <solid android:color="#2697FF" />
+            <corners android:radius="80dp" />
+        </shape>
+    </item>
+</selector>

+ 4 - 0
app/src/main/res/drawable/selector_input_select_text_color.xml

@@ -0,0 +1,4 @@
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:state_checked="true" android:color="#FFFFFF" /> <!-- 选中时的字体颜色 -->
+    <item android:color="#333333" /> <!-- 未选中时的字体颜色 -->
+</selector>

+ 18 - 0
app/src/main/res/drawable/selector_input_select_unit_g_rb.xml

@@ -0,0 +1,18 @@
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:state_checked="true">
+        <shape android:shape="rectangle">
+            <solid android:color="#2697FF" />
+            <corners android:bottomRightRadius="80px" android:topRightRadius="80px" />
+            <size android:width="60px" android:height="50px" />
+        </shape>
+    </item>
+    <item>
+        <shape android:shape="rectangle">
+            <solid android:color="#F5F5F5" />
+            <corners android:bottomRightRadius="80px" android:topRightRadius="80px" />
+            <size android:width="60px" android:height="50px" />
+            <stroke android:width="1px" android:color="#E0E0E0" />
+        </shape>
+    </item>
+
+</selector>

+ 18 - 0
app/src/main/res/drawable/selector_input_select_unit_ml_rb.xml

@@ -0,0 +1,18 @@
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:state_checked="true">
+        <shape android:shape="rectangle">
+            <solid android:color="#2697FF" />
+            <corners android:bottomLeftRadius="80px" android:topLeftRadius="80px" />
+            <size android:width="60px" android:height="50px" />
+        </shape>
+    </item>
+    <item>
+        <shape android:shape="rectangle">
+            <solid android:color="#F5F5F5" />
+            <corners android:bottomLeftRadius="80px" android:topLeftRadius="80px" />
+            <size android:width="60px" android:height="50px" />
+            <stroke android:width="1px" android:color="#E0E0E0" />
+        </shape>
+    </item>
+
+</selector>

+ 6 - 0
app/src/main/res/drawable/shape_blue_bt_box.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+    <solid android:color="#2697FF" />
+    <corners android:radius="10px" />
+</shape>

+ 6 - 0
app/src/main/res/drawable/shape_grey_bt_box.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+    <solid android:color="#E0E0E0" />
+    <corners android:radius="10px" />
+</shape>

+ 8 - 0
app/src/main/res/drawable/shape_input_box.xml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+    <corners android:radius="10px" />
+    <stroke
+        android:width="1px"
+        android:color="#E0E0E0" />
+</shape>

+ 14 - 0
app/src/main/res/drawable/shape_input_unit_ml.xml

@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+    <solid android:color="#F5F5F5" />
+    <corners
+        android:bottomRightRadius="10px"
+        android:topRightRadius="10px" />
+    <size
+        android:width="50px"
+        android:height="50px" />
+    <stroke
+        android:width="1px"
+        android:color="#E0E0E0" />
+</shape>

+ 10 - 0
app/src/main/res/drawable/vector_input_down_arrow.xml

@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="24px"
+    android:height="24px"
+    android:viewportWidth="24"
+    android:viewportHeight="24">
+    <path
+        android:fillColor="#A2A2A2"
+        android:pathData="M5,9 L12,16 L19,9 L17,9 L12,14 L7,9 Z" />
+</vector>

+ 701 - 3
app/src/main/res/layout/activity_add.xml

@@ -1,10 +1,708 @@
 <?xml version="1.0" encoding="utf-8"?>
-<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
     xmlns:tools="http://schemas.android.com/tools"
     android:id="@+id/main"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    tools:context=".ui.add.AddActivity">
+    android:background="@mipmap/icon_add_bg"
+    tools:context=".ui.plan.add.AddActivity"
+    tools:ignore="PxUsage">
 
-</androidx.constraintlayout.widget.ConstraintLayout>
+    <RelativeLayout
+        android:id="@+id/rel1"
+        android:layout_width="match_parent"
+        android:layout_height="45dp"
+        android:layout_marginTop="10dp">
+
+        <ImageView
+            android:id="@+id/image"
+            android:layout_width="30dp"
+            android:layout_height="30dp"
+            android:layout_centerVertical="true"
+            android:layout_marginLeft="20dp" />
+
+        <TextView
+            android:id="@+id/deptName"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_centerVertical="true"
+            android:layout_marginLeft="10dp"
+            android:layout_toRightOf="@+id/image"
+            android:text="实验室名称-房间号"
+            android:textColor="@color/white"
+            android:textSize="22sp" />
+
+        <LinearLayout
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_centerInParent="true"
+            android:layout_centerVertical="true"
+            android:layout_marginTop="2dp">
+
+            <TextView
+                android:id="@+id/tvTitle"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_centerHorizontal="true"
+                android:layout_centerVertical="true"
+                android:text="化学品智能管理"
+                android:textColor="@color/white"
+                android:textSize="24sp"
+                android:textStyle="bold" />
+
+            <TextView
+                android:id="@+id/nowTime"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginLeft="6dp"
+                android:layout_toRightOf="@+id/tvTitle"
+                android:textColor="@color/white" />
+
+        </LinearLayout>
+
+
+        <RelativeLayout
+            android:id="@+id/loggedIn"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_alignParentRight="true"
+            android:layout_centerVertical="true"
+            android:gravity="center_vertical"
+            android:paddingRight="18dp">
+
+            <ImageView
+                android:id="@+id/imageName"
+                android:layout_width="30dp"
+                android:layout_height="30dp"
+                android:layout_centerVertical="true"
+                android:layout_marginRight="6dp" />
+
+            <TextView
+                android:id="@+id/tvName"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_centerVertical="true"
+                android:layout_marginLeft="6dp"
+                android:layout_marginRight="6dp"
+                android:layout_toRightOf="@+id/imageName"
+                android:text="李XX"
+                android:textColor="@color/white" />
+
+            <ImageView
+                android:id="@+id/imgOut"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_centerVertical="true"
+                android:layout_marginLeft="6dp"
+                android:layout_marginRight="6dp"
+                android:layout_toRightOf="@+id/tvName"
+                android:background="@mipmap/cshrk_dl_tc" />
+
+            <TextView
+                android:id="@+id/tvOutLogin"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_centerVertical="true"
+                android:layout_marginRight="10dp"
+                android:layout_toRightOf="@+id/imgOut"
+                android:text="退出"
+                android:textColor="@color/white"
+                android:textSize="16sp" />
+        </RelativeLayout>
+    </RelativeLayout>
+
+    <RelativeLayout
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:layout_below="@+id/rel1"
+        android:layout_marginLeft="31dp"
+        android:layout_marginTop="15dp"
+        android:layout_marginRight="31dp"
+        android:layout_marginBottom="69dp"
+        android:background="@drawable/bg_add_chemicals_one">
+
+        <TextView
+            android:id="@+id/title_TV"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginVertical="30px"
+            android:layout_marginStart="50px"
+            android:text="录入化学品"
+            android:textColor="#333"
+            android:textSize="18sp"
+            android:textStyle="bold" />
+
+        <LinearLayout
+            android:id="@+id/control_RL"
+            android:layout_width="match_parent"
+            android:layout_height="180px"
+            android:layout_alignParentBottom="true"
+            android:gravity="center">
+
+            <Button
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:text="取消" />
+
+            <Button
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:text="重置" />
+
+            <Button
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:text="称重存储" />
+
+            <Button
+                android:id="@+id/save_BT"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:text="存储" />
+        </LinearLayout>
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:layout_above="@id/control_RL"
+            android:layout_below="@id/title_TV"
+            android:orientation="horizontal">
+
+            <LinearLayout
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:layout_weight="1"
+                android:orientation="vertical">
+
+                <LinearLayout
+                    android:layout_width="match_parent"
+                    android:layout_height="65px"
+                    android:layout_marginStart="50px"
+                    android:layout_weight="1"
+                    android:gravity="center_vertical">
+
+                    <TextView
+                        android:layout_width="120px"
+                        android:layout_height="wrap_content"
+                        android:gravity="end"
+                        android:text="品名"
+                        android:textColor="#333" />
+
+                    <androidx.appcompat.widget.AppCompatEditText
+                        android:id="@+id/chemical_search_ET"
+                        android:layout_width="250px"
+                        android:layout_height="50px"
+                        android:layout_marginStart="20px"
+                        android:background="@drawable/shape_input_box"
+                        android:gravity="center_vertical"
+                        android:hint="输入化学品名称搜索"
+                        android:imeOptions="actionSearch"
+                        android:maxLines="1"
+                        android:paddingHorizontal="10px"
+                        android:textAppearance="@style/input_hint_text_size" />
+
+                    <Button
+                        android:id="@+id/chemical_search_BT"
+                        android:layout_width="80px"
+                        android:layout_height="50px"
+                        android:layout_marginStart="10px"
+                        android:background="@drawable/selector_input_bt"
+                        android:text="搜索"
+                        android:textColor="@color/white" />
+                </LinearLayout>
+
+                <LinearLayout
+                    android:layout_width="match_parent"
+                    android:layout_height="65px"
+                    android:layout_marginStart="50px"
+                    android:layout_weight="1"
+                    android:gravity="center_vertical">
+
+                    <TextView
+                        android:layout_width="120px"
+                        android:layout_height="wrap_content"
+                        android:gravity="end"
+                        android:text="类别"
+                        android:textColor="#333" />
+
+
+                    <TextView
+                        android:id="@+id/chemical_category_TV"
+                        android:layout_width="250px"
+                        android:layout_height="50px"
+                        android:layout_marginStart="20px"
+                        android:background="@drawable/shape_input_box"
+                        android:gravity="center_vertical"
+                        android:hint="选择化学品类别"
+                        android:paddingHorizontal="10px"
+                        android:textAppearance="@style/input_hint_text_size"
+                        app:drawableEndCompat="@drawable/vector_input_down_arrow" />
+                </LinearLayout>
+
+                <LinearLayout
+                    android:layout_width="match_parent"
+                    android:layout_height="65px"
+                    android:layout_marginStart="50px"
+                    android:layout_weight="1"
+                    android:gravity="center_vertical">
+
+                    <TextView
+                        android:layout_width="120px"
+                        android:layout_height="wrap_content"
+                        android:gravity="end"
+                        android:text="净含量"
+                        android:textColor="#333" />
+
+
+                    <RelativeLayout
+                        android:layout_width="270px"
+                        android:layout_height="match_parent">
+
+                        <TextView
+                            android:layout_width="50px"
+                            android:layout_height="wrap_content"
+                            android:layout_alignParentEnd="true"
+                            android:layout_centerVertical="true"
+                            android:background="@drawable/shape_input_unit_ml"
+                            android:gravity="center"
+                            android:text="ml"
+                            android:textColor="#999" />
+
+                        <androidx.appcompat.widget.AppCompatEditText
+                            android:id="@+id/net_wt_ET"
+                            android:layout_width="250px"
+                            android:layout_height="50px"
+                            android:layout_centerVertical="true"
+                            android:layout_marginStart="20px"
+                            android:background="@drawable/shape_input_box"
+                            android:digits="1234567890."
+                            android:gravity="center_vertical"
+                            android:hint="输入净含量"
+                            android:imeOptions="actionDone"
+                            android:inputType="numberDecimal"
+                            android:paddingHorizontal="10px"
+                            android:textAppearance="@style/input_hint_text_size" />
+                    </RelativeLayout>
+                </LinearLayout>
+
+                <LinearLayout
+                    android:layout_width="match_parent"
+                    android:layout_height="65px"
+                    android:layout_marginStart="50px"
+                    android:layout_weight="1"
+                    android:gravity="center_vertical">
+
+                    <TextView
+                        android:layout_width="120px"
+                        android:layout_height="wrap_content"
+                        android:gravity="end"
+                        android:text="归属人"
+                        android:textColor="#333" />
+
+                    <androidx.appcompat.widget.AppCompatEditText
+                        android:id="@+id/belong_ET"
+                        android:layout_width="250px"
+                        android:layout_height="50px"
+                        android:layout_marginStart="20px"
+                        android:background="@drawable/shape_input_box"
+                        android:gravity="center_vertical"
+                        android:hint="输入姓名或工号搜索"
+                        android:imeOptions="actionSearch"
+                        android:paddingHorizontal="10px"
+                        android:textAppearance="@style/input_hint_text_size" />
+
+                    <Button
+                        android:id="@+id/belong_BT"
+                        android:layout_width="80px"
+                        android:layout_height="50px"
+                        android:layout_marginStart="10px"
+                        android:background="@drawable/selector_input_bt"
+                        android:text="搜索"
+                        android:textColor="@color/white" />
+                </LinearLayout>
+
+                <LinearLayout
+                    android:layout_width="match_parent"
+                    android:layout_height="65px"
+                    android:layout_marginStart="50px"
+                    android:layout_weight="1"
+                    android:gravity="center_vertical">
+
+                    <TextView
+                        android:layout_width="120px"
+                        android:layout_height="wrap_content"
+                        android:gravity="end"
+                        android:text="存储位置"
+                        android:textColor="#333" />
+
+                    <TextView
+                        android:id="@+id/cabinet_Layer_select_TV"
+                        android:layout_width="260px"
+                        android:layout_height="50px"
+                        android:layout_marginStart="10px"
+                        android:ellipsize="marquee"
+                        android:focusable="true"
+                        android:focusableInTouchMode="true"
+                        android:gravity="center"
+                        android:marqueeRepeatLimit="marquee_forever"
+                        android:singleLine="true"
+                        android:text="请选择化学品柜层" />
+
+                    <Button
+                        android:layout_width="80px"
+                        android:layout_height="50px"
+                        android:layout_marginStart="10px"
+                        android:background="@drawable/selector_input_select_bt"
+                        android:text="⇋"
+                        android:textColor="@color/white" />
+                </LinearLayout>
+
+
+            </LinearLayout>
+
+            <LinearLayout
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:layout_weight="1"
+                android:orientation="vertical">
+
+                <LinearLayout
+                    android:layout_width="match_parent"
+                    android:layout_height="65px"
+                    android:layout_marginStart="50px"
+                    android:layout_weight="1"
+                    android:gravity="center_vertical">
+
+                    <TextView
+                        android:layout_width="120px"
+                        android:layout_height="wrap_content"
+                        android:gravity="end"
+                        android:text="CAS"
+                        android:textColor="#333" />
+
+                    <androidx.appcompat.widget.AppCompatEditText
+                        android:id="@+id/cas_ET"
+                        android:layout_width="250px"
+                        android:layout_height="50px"
+                        android:layout_marginStart="20px"
+                        android:background="@drawable/shape_input_box"
+                        android:gravity="center_vertical"
+                        android:hint="输入CAS码搜索"
+                        android:imeOptions="actionSearch"
+                        android:inputType="numberSigned"
+                        android:paddingHorizontal="10px"
+                        android:textAppearance="@style/input_hint_text_size" />
+
+                    <Button
+                        android:id="@+id/cas_BT"
+                        android:layout_width="80px"
+                        android:layout_height="50px"
+                        android:layout_marginStart="10px"
+                        android:background="@drawable/selector_input_bt"
+                        android:text="搜索"
+                        android:textColor="@color/white" />
+                </LinearLayout>
+
+                <LinearLayout
+                    android:layout_width="match_parent"
+                    android:layout_height="65px"
+                    android:layout_marginStart="50px"
+                    android:layout_weight="1"
+                    android:gravity="center_vertical">
+
+                    <TextView
+                        android:layout_width="120px"
+                        android:layout_height="wrap_content"
+                        android:gravity="end"
+                        android:text="规格"
+                        android:textColor="#333" />
+
+                    <androidx.appcompat.widget.AppCompatEditText
+                        android:id="@+id/chemical_spec_ET"
+                        android:layout_width="250px"
+                        android:layout_height="50px"
+                        android:layout_marginStart="20px"
+                        android:background="@drawable/shape_input_box"
+                        android:gravity="center_vertical"
+                        android:hint="输入规格容量"
+                        android:imeOptions="actionDone"
+                        android:inputType="numberDecimal"
+                        android:paddingHorizontal="10px"
+                        android:textAppearance="@style/input_hint_text_size" />
+
+                    <RadioGroup
+                        android:id="@+id/chemical_spec_RG"
+                        android:layout_width="120px"
+                        android:layout_height="65px"
+                        android:layout_marginStart="10px"
+                        android:gravity="center_vertical"
+                        android:orientation="horizontal">
+
+                        <RadioButton
+                            android:id="@+id/chemical_spec_ml_RB"
+                            android:layout_width="wrap_content"
+                            android:layout_height="wrap_content"
+                            android:layout_weight="1"
+                            android:background="@drawable/selector_input_select_unit_ml_rb"
+                            android:button="@null"
+                            android:checked="true"
+                            android:gravity="center"
+                            android:text="ml"
+                            android:textColor="@drawable/selector_input_select_text_color" />
+
+                        <RadioButton
+                            android:id="@+id/chemical_spec_g_RB"
+                            android:layout_width="wrap_content"
+                            android:layout_height="wrap_content"
+                            android:layout_weight="1"
+                            android:background="@drawable/selector_input_select_unit_g_rb"
+                            android:button="@null"
+                            android:gravity="center"
+                            android:text="g"
+                            android:textColor="@drawable/selector_input_select_text_color" />
+                    </RadioGroup>
+                </LinearLayout>
+
+                <LinearLayout
+                    android:layout_width="match_parent"
+                    android:layout_height="65px"
+                    android:layout_marginStart="50px"
+                    android:layout_weight="1"
+                    android:gravity="center_vertical">
+
+                    <TextView
+                        android:layout_width="120px"
+                        android:layout_height="wrap_content"
+                        android:gravity="end"
+                        android:text="数量"
+                        android:textColor="#333" />
+
+                    <androidx.appcompat.widget.AppCompatEditText
+                        android:id="@+id/size_ET"
+                        android:layout_width="250px"
+                        android:layout_height="50px"
+                        android:layout_marginStart="20px"
+                        android:background="@drawable/shape_input_box"
+                        android:digits="1234567890"
+                        android:gravity="center_vertical"
+                        android:hint="输入化学品数量"
+                        android:imeOptions="actionDone"
+                        android:inputType="number"
+                        android:paddingHorizontal="10px"
+                        android:textAppearance="@style/input_hint_text_size" />
+
+                </LinearLayout>
+
+                <LinearLayout
+                    android:layout_width="match_parent"
+                    android:layout_height="65px"
+                    android:layout_marginStart="50px"
+                    android:layout_weight="1"
+                    android:gravity="center_vertical">
+
+                    <TextView
+                        android:layout_width="120px"
+                        android:layout_height="wrap_content"
+                        android:gravity="end"
+                        android:text="课题组"
+                        android:textColor="#333" />
+
+                    <androidx.appcompat.widget.AppCompatEditText
+                        android:id="@+id/topic_ET"
+                        android:layout_width="250px"
+                        android:layout_height="50px"
+                        android:layout_marginStart="20px"
+                        android:background="@drawable/shape_input_box"
+                        android:gravity="center_vertical"
+                        android:hint="非必填"
+                        android:imeOptions="actionSearch"
+                        android:paddingHorizontal="10px"
+                        android:textAppearance="@style/input_hint_text_size" />
+
+                    <Button
+                        android:id="@+id/topic_BT"
+                        android:layout_width="80px"
+                        android:layout_height="50px"
+                        android:layout_marginStart="10px"
+                        android:background="@drawable/selector_input_bt"
+                        android:text="搜索"
+                        android:textColor="@color/white" />
+                </LinearLayout>
+
+                <View
+                    android:layout_width="match_parent"
+                    android:layout_height="65px"
+                    android:layout_marginStart="50px"
+                    android:layout_weight="1" />
+
+            </LinearLayout>
+
+            <LinearLayout
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:layout_weight="1"
+                android:orientation="vertical">
+
+                <LinearLayout
+                    android:layout_width="match_parent"
+                    android:layout_height="65px"
+                    android:layout_marginStart="50px"
+                    android:layout_weight="1"
+                    android:gravity="center_vertical">
+
+                    <TextView
+                        android:layout_width="120px"
+                        android:layout_height="wrap_content"
+                        android:gravity="end"
+                        android:text="级别"
+                        android:textColor="#333" />
+
+
+                    <RadioGroup
+                        android:id="@+id/cm_RG"
+                        android:layout_width="wrap_content"
+                        android:layout_height="65px"
+                        android:layout_marginStart="10px"
+                        android:gravity="center_vertical"
+                        android:orientation="horizontal">
+
+                        <RadioButton
+                            android:id="@+id/uncontrolled_RB"
+                            android:layout_width="wrap_content"
+                            android:layout_height="wrap_content"
+                            android:layout_weight="1"
+                            android:background="@drawable/selector_input_select_unit_ml_rb"
+                            android:button="@null"
+                            android:gravity="center"
+                            android:paddingHorizontal="20px"
+                            android:text="非管控"
+                            android:textColor="@drawable/selector_input_select_text_color"
+                            android:textSize="12sp" />
+
+                        <RadioButton
+                            android:id="@+id/controlled_RB"
+                            android:layout_width="wrap_content"
+                            android:layout_height="wrap_content"
+                            android:layout_weight="1"
+                            android:background="@drawable/selector_input_select_unit_g_rb"
+                            android:button="@null"
+                            android:checked="true"
+                            android:gravity="center"
+                            android:paddingHorizontal="20px"
+                            android:text="管控"
+                            android:textColor="@drawable/selector_input_select_text_color"
+                            android:textSize="12sp" />
+                    </RadioGroup>
+                </LinearLayout>
+
+                <LinearLayout
+                    android:layout_width="match_parent"
+                    android:layout_height="65px"
+                    android:layout_marginStart="50px"
+                    android:layout_weight="1"
+                    android:gravity="center_vertical">
+
+                    <TextView
+                        android:layout_width="120px"
+                        android:layout_height="wrap_content"
+                        android:gravity="end"
+                        android:text="密度"
+                        android:textColor="#333" />
+
+                    <androidx.appcompat.widget.AppCompatEditText
+                        android:id="@+id/chemical_density_ET"
+                        android:layout_width="250px"
+                        android:layout_height="50px"
+                        android:layout_marginStart="20px"
+                        android:background="@drawable/shape_input_box"
+                        android:digits="1234567890."
+                        android:gravity="center_vertical"
+                        android:hint="输入化学品密度"
+                        android:imeOptions="actionDone"
+                        android:inputType="numberDecimal"
+                        android:paddingHorizontal="10px"
+                        android:textAppearance="@style/input_hint_text_size" />
+
+                </LinearLayout>
+
+                <LinearLayout
+                    android:layout_width="match_parent"
+                    android:layout_height="65px"
+                    android:layout_marginStart="50px"
+                    android:layout_weight="1"
+                    android:gravity="center_vertical">
+
+                    <TextView
+                        android:layout_width="120px"
+                        android:layout_height="wrap_content"
+                        android:gravity="end"
+                        android:text="纯度"
+                        android:textColor="#333" />
+
+                    <androidx.appcompat.widget.AppCompatEditText
+                        android:layout_width="250px"
+                        android:layout_height="50px"
+                        android:layout_marginStart="20px"
+                        android:background="@drawable/shape_input_box"
+                        android:gravity="center_vertical"
+                        android:hint="非必填"
+                        android:imeOptions="actionDone"
+                        android:paddingHorizontal="10px"
+                        android:textAppearance="@style/input_hint_text_size" />
+
+                </LinearLayout>
+
+                <LinearLayout
+                    android:layout_width="match_parent"
+                    android:layout_height="65px"
+                    android:layout_marginStart="50px"
+                    android:layout_weight="1"
+                    android:gravity="center_vertical">
+
+                    <TextView
+                        android:layout_width="120px"
+                        android:layout_height="wrap_content"
+                        android:gravity="end"
+                        android:text="厂家"
+                        android:textColor="#333" />
+
+                    <androidx.appcompat.widget.AppCompatEditText
+                        android:id="@+id/factory_ET"
+                        android:layout_width="250px"
+                        android:layout_height="50px"
+                        android:layout_marginStart="20px"
+                        android:background="@drawable/shape_input_box"
+                        android:gravity="center_vertical"
+                        android:hint="非必填"
+                        android:imeOptions="actionDone"
+                        android:paddingHorizontal="10px"
+                        android:textAppearance="@style/input_hint_text_size" />
+
+                </LinearLayout>
+
+                <View
+                    android:layout_width="match_parent"
+                    android:layout_height="65px"
+                    android:layout_marginStart="50px"
+                    android:layout_weight="1" />
+            </LinearLayout>
+
+
+        </LinearLayout>
+
+
+    </RelativeLayout>
+
+    <TextView
+        android:id="@+id/tvReturn"
+        android:layout_width="85dp"
+        android:layout_height="30dp"
+        android:layout_alignParentBottom="true"
+        android:layout_marginBottom="20dp"
+        android:background="@drawable/bg_retrun"
+        android:gravity="center"
+        android:text="返回180s"
+        android:textColor="@color/white"
+        android:textSize="10sp" />
+</RelativeLayout>

+ 145 - 133
app/src/main/res/layout/activity_plan_add.xml

@@ -7,7 +7,7 @@
     android:layout_height="match_parent"
     android:animateLayoutChanges="true"
     android:background="@mipmap/icon_add_bg"
-    tools:context=".ui.add.PlanAddActivity">
+    tools:context=".ui.plan.PlanAddActivity">
 
     <RelativeLayout
         android:id="@+id/rel1"
@@ -112,7 +112,7 @@
         </RelativeLayout>
     </RelativeLayout>
 
-    <RelativeLayout
+    <LinearLayout
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:layout_below="@+id/rel1"
@@ -122,17 +122,17 @@
         android:layout_marginBottom="69dp"
         android:background="@drawable/bg_add_chemicals_one">
 
-        <LinearLayout
-            android:id="@+id/bottom_bar"
+
+        <RelativeLayout
             android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:layout_alignParentBottom="true"
-            android:orientation="horizontal">
+            android:layout_height="match_parent"
+            android:layout_weight="1.5">
 
             <LinearLayout
                 android:id="@+id/count_LL"
-                android:layout_width="390dp"
+                android:layout_width="match_parent"
                 android:layout_height="wrap_content"
+                android:layout_alignParentBottom="true"
                 android:gravity="center"
                 android:orientation="horizontal">
 
@@ -154,153 +154,165 @@
                     android:text="下一页" />
             </LinearLayout>
 
-            <LinearLayout
+            <TextView
+                android:id="@+id/add_index_TV"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
-                android:layout_weight="1"
-                android:gravity="center">
-
-                <Button
-                    android:id="@+id/input_BT"
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:text="手动录入化学品" />
-            </LinearLayout>
-        </LinearLayout>
-
+                android:layout_margin="10px"
+                android:text="选择存储位置"
+                android:textSize="18sp"
+                android:textStyle="bold" />
 
-        <androidx.viewpager2.widget.ViewPager2
-            android:id="@+id/locker_VP2"
-            android:layout_width="350dp"
-            android:layout_height="match_parent"
-            android:layout_above="@id/bottom_bar"
-            android:layout_margin="20dp" />
+            <androidx.viewpager2.widget.ViewPager2
+                android:id="@+id/locker_VP2"
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:layout_above="@id/count_LL"
+                android:layout_below="@id/add_index_TV"
+                android:layout_margin="10px" />
+        </RelativeLayout>
 
-        <LinearLayout
+        <RelativeLayout
+            android:id="@+id/input_RL"
             android:layout_width="match_parent"
             android:layout_height="match_parent"
-            android:layout_above="@id/bottom_bar"
-            android:layout_margin="10dp"
-            android:layout_toEndOf="@id/locker_VP2"
-            android:orientation="vertical">
+            android:layout_weight="1"
+            android:visibility="gone">
 
-            <RelativeLayout
+            <Button
+                android:id="@+id/input_BT"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
-                android:layout_marginVertical="10dp">
-
-                <TextView
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:text="待存储列表"
-                    android:textSize="18sp"
-                    android:textStyle="bold" />
-
-                <TextView
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:layout_alignParentEnd="true"
-                    android:text="总数:0"
-                    android:textSize="18sp"
-                    android:textStyle="bold" />
-            </RelativeLayout>
+                android:layout_alignParentBottom="true"
+                android:layout_centerHorizontal="true"
+                android:text="手动录入化学品" />
 
             <LinearLayout
                 android:layout_width="match_parent"
-                android:layout_height="40dp"
-                android:background="#f5f5f5"
-                android:gravity="center_vertical">
-
-                <TextView
-                    android:layout_width="match_parent"
-                    android:layout_height="wrap_content"
-                    android:layout_marginStart="10dp"
-                    android:layout_weight="1"
-                    android:text="名称"
-                    android:textSize="16sp" />
-
-                <TextView
-                    android:layout_width="match_parent"
-                    android:layout_height="wrap_content"
-                    android:layout_weight="1"
-                    android:text="CAS"
-                    android:textSize="16sp" />
-
-                <TextView
-                    android:layout_width="match_parent"
-                    android:layout_height="wrap_content"
-                    android:layout_weight="1"
-                    android:text="类别"
-                    android:textSize="16sp" />
+                android:layout_height="match_parent"
+                android:layout_above="@id/input_BT"
+                android:layout_margin="10dp"
+                android:orientation="vertical">
 
-                <TextView
-                    android:layout_width="match_parent"
+                <RelativeLayout
+                    android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
-                    android:layout_weight="1"
-                    android:text="级别"
-                    android:textSize="16sp" />
-
-                <TextView
+                    android:layout_marginVertical="10dp">
+
+                    <TextView
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:text="待存储列表"
+                        android:textSize="18sp"
+                        android:textStyle="bold" />
+
+                    <TextView
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:layout_alignParentEnd="true"
+                        android:text="总数:0"
+                        android:textSize="18sp"
+                        android:textStyle="bold" />
+                </RelativeLayout>
+
+                <LinearLayout
                     android:layout_width="match_parent"
-                    android:layout_height="wrap_content"
-                    android:layout_weight="1"
-                    android:text="规格"
-                    android:textSize="16sp" />
-
-                <TextView
+                    android:layout_height="40dp"
+                    android:background="#f5f5f5"
+                    android:gravity="center_vertical">
+
+                    <TextView
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content"
+                        android:layout_marginStart="10dp"
+                        android:layout_weight="1"
+                        android:text="名称"
+                        android:textSize="16sp" />
+
+                    <TextView
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content"
+                        android:layout_weight="1"
+                        android:text="CAS"
+                        android:textSize="16sp" />
+
+                    <TextView
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content"
+                        android:layout_weight="1"
+                        android:text="类别"
+                        android:textSize="16sp" />
+
+                    <TextView
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content"
+                        android:layout_weight="1"
+                        android:text="级别"
+                        android:textSize="16sp" />
+
+                    <TextView
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content"
+                        android:layout_weight="1"
+                        android:text="规格"
+                        android:textSize="16sp" />
+
+                    <TextView
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content"
+                        android:layout_weight="1"
+                        android:text="净含量"
+                        android:textSize="16sp" />
+
+                    <TextView
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content"
+                        android:layout_weight="1"
+                        android:gravity="center"
+                        android:text="数量"
+                        android:textSize="16sp" />
+
+                    <TextView
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content"
+                        android:layout_weight="1"
+                        android:textSize="16sp" />
+                </LinearLayout>
+
+                <ListView
+                    android:id="@+id/plan_LV"
                     android:layout_width="match_parent"
-                    android:layout_height="wrap_content"
-                    android:layout_weight="1"
-                    android:text="净含量"
-                    android:textSize="16sp" />
+                    android:layout_height="match_parent"
+                    android:visibility="gone"
+                    tools:listitem="@layout/item_in_storage" />
 
-                <TextView
+                <LinearLayout
+                    android:id="@+id/scan_LL"
                     android:layout_width="match_parent"
-                    android:layout_height="wrap_content"
-                    android:layout_weight="1"
+                    android:layout_height="match_parent"
                     android:gravity="center"
-                    android:text="数量"
-                    android:textSize="16sp" />
-
-                <TextView
-                    android:layout_width="match_parent"
-                    android:layout_height="wrap_content"
-                    android:layout_weight="1"
-                    android:textSize="16sp" />
+                    android:orientation="vertical">
+
+                    <ImageView
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:layout_gravity="center_horizontal"
+                        android:src="@mipmap/img_gh_smsb" />
+
+                    <TextView
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:layout_gravity="center_horizontal"
+                        android:layout_marginTop="10dp"
+                        android:gravity="center_horizontal"
+                        android:text="扫描化学品标签\n或手动录入化学品"
+                        android:textSize="18sp" />
+                </LinearLayout>
             </LinearLayout>
-
-            <ListView
-                android:layout_width="match_parent"
-                android:layout_height="match_parent"
-                android:visibility="gone"
-                tools:listitem="@layout/item_in_storage" />
-
-            <LinearLayout
-                android:id="@+id/ne"
-                android:layout_width="match_parent"
-                android:layout_height="match_parent"
-                android:gravity="center"
-                android:orientation="vertical">
-
-                <ImageView
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:layout_gravity="center_horizontal"
-                    android:src="@mipmap/img_gh_smsb" />
-
-                <TextView
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:layout_gravity="center_horizontal"
-                    android:layout_marginTop="10dp"
-                    android:gravity="center_horizontal"
-                    android:text="扫描化学品标签\n或手动录入化学品"
-                    android:textSize="18sp" />
-            </LinearLayout>
-        </LinearLayout>
+        </RelativeLayout>
 
 
-    </RelativeLayout>
+    </LinearLayout>
 
     <TextView
         android:id="@+id/tvReturn"

+ 1 - 1
app/src/main/res/layout/authentication_dialog.xml

@@ -156,7 +156,7 @@
                 android:layout_gravity="center"
                 android:layout_marginLeft="6dp"
                 android:layout_marginTop="14dp"
-                android:text="5秒后自动返回首页"
+                android:text="2秒后自动返回首页"
                 android:textColor="@color/black"
                 android:textSize="12sp" />
         </LinearLayout>

+ 282 - 166
app/src/main/res/layout/fragment_locker.xml

@@ -19,209 +19,326 @@
             android:layout_marginTop="108px"
             android:orientation="vertical">
 
-
-            <RadioGroup
-                android:id="@+id/locker_up_drawer_RG"
+            <LinearLayout
                 android:layout_width="match_parent"
                 android:layout_height="match_parent"
                 android:orientation="vertical">
 
-                <RadioButton
-                    android:id="@+id/locker_up_drawer_1_RB"
+                <RadioGroup
+                    android:id="@+id/locker_up_drawer_RG"
                     android:layout_width="match_parent"
-                    android:layout_height="wrap_content"
+                    android:layout_height="match_parent"
                     android:layout_weight="1"
-                    android:background="@drawable/selector_locker_drawer"
-                    android:button="@null"
-                    android:visibility="gone" />
+                    android:orientation="vertical">
 
-                <RadioButton
-                    android:id="@+id/locker_up_drawer_2_RB"
-                    android:layout_width="match_parent"
-                    android:layout_height="wrap_content"
-                    android:layout_weight="1"
-                    android:background="@drawable/selector_locker_drawer"
-                    android:button="@null"
-                    android:visibility="gone" />
+                    <RadioButton
+                        android:id="@+id/locker_up_drawer_1_RB"
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content"
+                        android:layout_weight="1"
+                        android:background="@drawable/selector_locker_drawer"
+                        android:button="@null"
+                        android:visibility="gone" />
 
-                <RadioButton
-                    android:id="@+id/locker_up_drawer_3_RB"
-                    android:layout_width="match_parent"
-                    android:layout_height="wrap_content"
-                    android:layout_weight="1"
-                    android:background="@drawable/selector_locker_drawer"
-                    android:button="@null"
-                    android:visibility="gone" />
+                    <RadioButton
+                        android:id="@+id/locker_up_drawer_2_RB"
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content"
+                        android:layout_weight="1"
+                        android:background="@drawable/selector_locker_drawer"
+                        android:button="@null"
+                        android:visibility="gone" />
 
-                <RadioButton
-                    android:id="@+id/locker_up_drawer_4_RB"
-                    android:layout_width="match_parent"
-                    android:layout_height="wrap_content"
-                    android:layout_weight="1"
-                    android:background="@drawable/selector_locker_drawer"
-                    android:button="@null"
-                    android:visibility="gone" />
+                    <RadioButton
+                        android:id="@+id/locker_up_drawer_3_RB"
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content"
+                        android:layout_weight="1"
+                        android:background="@drawable/selector_locker_drawer"
+                        android:button="@null"
+                        android:visibility="gone" />
 
-                <RadioButton
-                    android:id="@+id/locker_up_drawer_5_RB"
-                    android:layout_width="match_parent"
-                    android:layout_height="wrap_content"
-                    android:layout_weight="1"
-                    android:background="@drawable/selector_locker_drawer"
-                    android:button="@null"
-                    android:visibility="gone" />
+                    <RadioButton
+                        android:id="@+id/locker_up_drawer_4_RB"
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content"
+                        android:layout_weight="1"
+                        android:background="@drawable/selector_locker_drawer"
+                        android:button="@null"
+                        android:visibility="gone" />
 
-                <RadioButton
-                    android:id="@+id/locker_up_drawer_6_RB"
-                    android:layout_width="match_parent"
-                    android:layout_height="wrap_content"
-                    android:layout_weight="1"
-                    android:background="@drawable/selector_locker_drawer"
-                    android:button="@null"
-                    android:visibility="gone" />
+                    <RadioButton
+                        android:id="@+id/locker_up_drawer_5_RB"
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content"
+                        android:layout_weight="1"
+                        android:background="@drawable/selector_locker_drawer"
+                        android:button="@null"
+                        android:visibility="gone" />
 
-                <RadioButton
-                    android:id="@+id/locker_up_drawer_7_RB"
-                    android:layout_width="match_parent"
-                    android:layout_height="wrap_content"
-                    android:layout_weight="1"
-                    android:background="@drawable/selector_locker_drawer"
-                    android:button="@null"
-                    android:visibility="gone" />
+                    <RadioButton
+                        android:id="@+id/locker_up_drawer_6_RB"
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content"
+                        android:layout_weight="1"
+                        android:background="@drawable/selector_locker_drawer"
+                        android:button="@null"
+                        android:visibility="gone" />
 
-                <RadioButton
-                    android:id="@+id/locker_up_drawer_8_RB"
+                    <RadioButton
+                        android:id="@+id/locker_up_drawer_7_RB"
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content"
+                        android:layout_weight="1"
+                        android:background="@drawable/selector_locker_drawer"
+                        android:button="@null"
+                        android:visibility="gone" />
+
+                    <RadioButton
+                        android:id="@+id/locker_up_drawer_8_RB"
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content"
+                        android:layout_weight="1"
+                        android:background="@drawable/selector_locker_drawer"
+                        android:button="@null"
+                        android:visibility="gone" />
+                </RadioGroup>
+
+                <RadioGroup
+                    android:id="@+id/locker_down_drawer_RG"
                     android:layout_width="match_parent"
-                    android:layout_height="wrap_content"
+                    android:layout_height="match_parent"
                     android:layout_weight="1"
-                    android:background="@drawable/selector_locker_drawer"
-                    android:button="@null"
-                    android:visibility="gone" />
+                    android:orientation="vertical"
+                    android:visibility="gone">
+
+                    <RadioButton
+                        android:id="@+id/locker_down_drawer_1_RB"
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content"
+                        android:layout_weight="1"
+                        android:background="@drawable/selector_locker_drawer"
+                        android:button="@null"
+                        android:visibility="gone" />
 
-            </RadioGroup>
+                    <RadioButton
+                        android:id="@+id/locker_down_drawer_2_RB"
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content"
+                        android:layout_weight="1"
+                        android:background="@drawable/selector_locker_drawer"
+                        android:button="@null"
+                        android:visibility="gone" />
+
+                    <RadioButton
+                        android:id="@+id/locker_down_drawer_3_RB"
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content"
+                        android:layout_weight="1"
+                        android:background="@drawable/selector_locker_drawer"
+                        android:button="@null"
+                        android:visibility="gone" />
+
+                    <RadioButton
+                        android:id="@+id/locker_down_drawer_4_RB"
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content"
+                        android:layout_weight="1"
+                        android:background="@drawable/selector_locker_drawer"
+                        android:button="@null"
+                        android:visibility="gone" />
+                </RadioGroup>
+            </LinearLayout>
 
             <LinearLayout
                 android:layout_width="match_parent"
                 android:layout_height="match_parent"
                 android:orientation="vertical">
 
-                <TextView
-                    android:id="@+id/locker_up_drawer_1_TV"
-                    android:layout_width="wrap_content"
-                    android:layout_height="match_parent"
-                    android:layout_marginStart="30px"
-                    android:layout_marginBottom="10px"
-                    android:layout_weight="1"
-                    android:gravity="bottom"
-                    android:text="①  层"
-                    android:textColor="@color/white"
-                    android:textSize="14sp"
-                    android:visibility="gone" />
-
-                <TextView
-                    android:id="@+id/locker_up_drawer_2_TV"
-                    android:layout_width="wrap_content"
-                    android:layout_height="match_parent"
-                    android:layout_marginStart="30px"
-                    android:layout_marginBottom="10px"
-                    android:layout_weight="1"
-                    android:gravity="bottom"
-                    android:text="②  层"
-                    android:textColor="@color/white"
-                    android:textSize="14sp"
-                    android:visibility="gone" />
-
-                <TextView
-                    android:id="@+id/locker_up_drawer_3_TV"
-                    android:layout_width="wrap_content"
-                    android:layout_height="match_parent"
-                    android:layout_marginStart="30px"
-                    android:layout_marginBottom="10px"
-                    android:layout_weight="1"
-                    android:gravity="bottom"
-                    android:text="③  层"
-                    android:textColor="@color/white"
-                    android:textSize="14sp"
-                    android:visibility="gone" />
-
-                <TextView
-                    android:id="@+id/locker_up_drawer_4_TV"
-                    android:layout_width="wrap_content"
-                    android:layout_height="match_parent"
-                    android:layout_marginStart="30px"
-                    android:layout_marginBottom="10px"
-                    android:layout_weight="1"
-                    android:gravity="bottom"
-                    android:text="④  层"
-                    android:textColor="@color/white"
-                    android:textSize="14sp"
-                    android:visibility="gone" />
-
-                <TextView
-                    android:id="@+id/locker_up_drawer_5_TV"
-                    android:layout_width="wrap_content"
-                    android:layout_height="match_parent"
-                    android:layout_marginStart="30px"
-                    android:layout_marginBottom="10px"
-                    android:layout_weight="1"
-                    android:gravity="bottom"
-                    android:text="⑤  层"
-                    android:textColor="@color/white"
-                    android:textSize="14sp"
-                    android:visibility="gone" />
-
-                <TextView
-                    android:id="@+id/locker_up_drawer_6_TV"
-                    android:layout_width="wrap_content"
-                    android:layout_height="match_parent"
-                    android:layout_marginStart="30px"
-                    android:layout_marginBottom="10px"
-                    android:layout_weight="1"
-                    android:gravity="bottom"
-                    android:text="⑥  层"
-                    android:textColor="@color/white"
-                    android:textSize="14sp"
-                    android:visibility="gone" />
-
-                <TextView
-                    android:id="@+id/locker_up_drawer_7_TV"
-                    android:layout_width="wrap_content"
+                <LinearLayout
+                    android:id="@+id/locker_up_drawer_LL"
+                    android:layout_width="match_parent"
                     android:layout_height="match_parent"
-                    android:layout_marginStart="30px"
-                    android:layout_marginBottom="10px"
                     android:layout_weight="1"
-                    android:gravity="bottom"
-                    android:text="⑦  层"
-                    android:textColor="@color/white"
-                    android:textSize="14sp"
-                    android:visibility="gone" />
-
-                <TextView
-                    android:id="@+id/locker_up_drawer_8_TV"
-                    android:layout_width="wrap_content"
+                    android:orientation="vertical">
+
+                    <TextView
+                        android:id="@+id/locker_up_drawer_1_TV"
+                        android:layout_width="match_parent"
+                        android:layout_height="match_parent"
+                        android:layout_marginStart="20px"
+                        android:layout_marginBottom="10px"
+                        android:layout_weight="1"
+                        android:gravity="bottom"
+                        android:text="①  层"
+                        android:textColor="@color/white"
+                        android:visibility="gone" />
+
+                    <TextView
+                        android:id="@+id/locker_up_drawer_2_TV"
+                        android:layout_width="match_parent"
+                        android:layout_height="match_parent"
+                        android:layout_marginStart="20px"
+                        android:layout_marginBottom="10px"
+                        android:layout_weight="1"
+                        android:gravity="bottom"
+                        android:text="②  层"
+                        android:textColor="@color/white"
+                        android:visibility="gone" />
+
+                    <TextView
+                        android:id="@+id/locker_up_drawer_3_TV"
+                        android:layout_width="match_parent"
+                        android:layout_height="match_parent"
+                        android:layout_marginStart="20px"
+                        android:layout_marginBottom="10px"
+                        android:layout_weight="1"
+                        android:gravity="bottom"
+                        android:text="③  层"
+                        android:textColor="@color/white"
+                        android:visibility="gone" />
+
+                    <TextView
+                        android:id="@+id/locker_up_drawer_4_TV"
+                        android:layout_width="match_parent"
+                        android:layout_height="match_parent"
+                        android:layout_marginStart="20px"
+                        android:layout_marginBottom="10px"
+                        android:layout_weight="1"
+                        android:gravity="bottom"
+                        android:text="④  层"
+                        android:textColor="@color/white"
+                        android:visibility="gone" />
+
+                    <TextView
+                        android:id="@+id/locker_up_drawer_5_TV"
+                        android:layout_width="match_parent"
+                        android:layout_height="match_parent"
+                        android:layout_marginStart="20px"
+                        android:layout_marginBottom="10px"
+                        android:layout_weight="1"
+                        android:gravity="bottom"
+                        android:text="⑤  层"
+                        android:textColor="@color/white"
+                        android:visibility="gone" />
+
+                    <TextView
+                        android:id="@+id/locker_up_drawer_6_TV"
+                        android:layout_width="match_parent"
+                        android:layout_height="match_parent"
+                        android:layout_marginStart="20px"
+                        android:layout_marginBottom="10px"
+                        android:layout_weight="1"
+                        android:gravity="bottom"
+                        android:text="⑥  层"
+                        android:textColor="@color/white"
+                        android:visibility="gone" />
+
+                    <TextView
+                        android:id="@+id/locker_up_drawer_7_TV"
+                        android:layout_width="match_parent"
+                        android:layout_height="match_parent"
+                        android:layout_marginStart="20px"
+                        android:layout_marginBottom="10px"
+                        android:layout_weight="1"
+                        android:gravity="bottom"
+                        android:text="⑦  层"
+                        android:textColor="@color/white"
+                        android:visibility="gone" />
+
+                    <TextView
+                        android:id="@+id/locker_up_drawer_8_TV"
+                        android:layout_width="match_parent"
+                        android:layout_height="match_parent"
+                        android:layout_marginStart="20px"
+                        android:layout_marginBottom="10px"
+                        android:layout_weight="1"
+                        android:gravity="bottom"
+                        android:text="⑧  层"
+                        android:textColor="@color/white"
+                        android:visibility="gone" />
+                </LinearLayout>
+
+                <LinearLayout
+                    android:id="@+id/locker_down_drawer_LL"
+                    android:layout_width="match_parent"
                     android:layout_height="match_parent"
-                    android:layout_marginStart="30px"
-                    android:layout_marginBottom="10px"
                     android:layout_weight="1"
-                    android:gravity="bottom"
-                    android:text="⑧  层"
-                    android:textColor="@color/white"
-                    android:textSize="14sp"
-                    android:visibility="gone" />
-            </LinearLayout>
+                    android:orientation="vertical"
+                    android:visibility="gone">
+
+                    <TextView
+                        android:id="@+id/locker_down_drawer_1_TV"
+                        android:layout_width="match_parent"
+                        android:layout_height="match_parent"
+                        android:layout_marginStart="20px"
+                        android:layout_marginBottom="10px"
+                        android:layout_weight="1"
+                        android:gravity="bottom"
+                        android:text="①  层"
+                        android:textColor="@color/white"
+                        android:visibility="gone" />
 
+                    <TextView
+                        android:id="@+id/locker_down_drawer_2_TV"
+                        android:layout_width="match_parent"
+                        android:layout_height="match_parent"
+                        android:layout_marginStart="20px"
+                        android:layout_marginBottom="10px"
+                        android:layout_weight="1"
+                        android:gravity="bottom"
+                        android:text="②  层"
+                        android:textColor="@color/white"
+                        android:visibility="gone" />
+
+                    <TextView
+                        android:id="@+id/locker_down_drawer_3_TV"
+                        android:layout_width="match_parent"
+                        android:layout_height="match_parent"
+                        android:layout_marginStart="20px"
+                        android:layout_marginBottom="10px"
+                        android:layout_weight="1"
+                        android:gravity="bottom"
+                        android:text="③  层"
+                        android:textColor="@color/white"
+                        android:visibility="gone" />
+
+                    <TextView
+                        android:id="@+id/locker_down_drawer_4_TV"
+                        android:layout_width="match_parent"
+                        android:layout_height="match_parent"
+                        android:layout_marginStart="20px"
+                        android:layout_marginBottom="10px"
+                        android:layout_weight="1"
+                        android:gravity="bottom"
+                        android:text="④  层"
+                        android:textColor="@color/white"
+                        android:visibility="gone" />
+                </LinearLayout>
+            </LinearLayout>
         </RelativeLayout>
 
         <TextView
+            android:id="@+id/up_door_name_TV"
             android:layout_width="60px"
             android:layout_height="wrap_content"
             android:layout_marginStart="33px"
             android:layout_marginTop="168px"
             android:maxLines="4"
-            android:text="柜子柜子柜子柜子柜子"
             android:textColor="@color/white" />
 
         <TextView
+            android:id="@+id/down_door_name_TV"
+            android:layout_width="60px"
+            android:layout_height="wrap_content"
+            android:layout_marginStart="33px"
+            android:layout_marginTop="410px"
+            android:maxLines="4"
+            android:textColor="@color/white"
+            android:visibility="gone" />
+
+        <TextView
+            android:id="@+id/locker_name_TV"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_marginStart="120px"
@@ -229,7 +346,6 @@
             android:drawableStart="@drawable/locker_name_round"
             android:drawablePadding="15px"
             android:gravity="center_vertical"
-            android:text="化学品柜名称"
             android:textColor="@color/white"
             android:textSize="16sp" />
 

BIN
app/src/main/res/mipmap-hdpi/bg.png


BIN
app/src/main/res/mipmap-hdpi/home_save.webp


+ 5 - 0
app/src/main/res/values/styles.xml

@@ -25,8 +25,13 @@
     <style name="CustomRadioButtonStyle" parent="Widget.AppCompat.CompoundButton.RadioButton">
         <item name="android:button">@null</item>
     </style>
+
     <style name="CustomAutoCompleteTextView" parent="Widget.AppCompat.AutoCompleteTextView">
         <item name="android:layout_height">30dp</item>
         <item name="android:layout_width">84dp</item>
     </style>
+
+    <style name="input_hint_text_size" parent="TextAppearance.AppCompat">
+        <item name="android:textSize">12sp</item>
+    </style>
 </resources>

+ 12 - 12
build.gradle

@@ -2,14 +2,14 @@
 buildscript {
 
     repositories {
-        maven{ url 'https://maven.aliyun.com/repository/google'} //修改
-        maven{ url 'https://maven.aliyun.com/repository/gradle-plugin'} //修改
-        maven{ url 'https://maven.aliyun.com/repository/public'} //修改
-        maven{ url 'https://maven.aliyun.com/repository/jcenter'} //修改
-        maven { url "https://jitpack.io" }
-        jcenter()
         google()
         mavenCentral()
+        maven { url 'https://maven.aliyun.com/repository/google' } //修改
+        maven { url 'https://maven.aliyun.com/repository/gradle-plugin' } //修改
+        maven { url 'https://maven.aliyun.com/repository/public' } //修改
+        maven { url 'https://maven.aliyun.com/repository/jcenter' } //修改
+        maven { url "https://jitpack.io" }
+        jcenter()
         gradlePluginPortal()
 
 
@@ -28,14 +28,14 @@ buildscript {
 
 allprojects {
     repositories {
-        maven{ url 'https://maven.aliyun.com/repository/google'} //修改
-        maven{ url 'https://maven.aliyun.com/repository/gradle-plugin'} //修改
-        maven{ url 'https://maven.aliyun.com/repository/public'} //修改
-        maven{ url 'https://maven.aliyun.com/repository/jcenter'} //修改
-        maven { url "https://jitpack.io" }
-        jcenter()
         google()
         mavenCentral()
+        maven { url 'https://maven.aliyun.com/repository/google' } //修改
+        maven { url 'https://maven.aliyun.com/repository/gradle-plugin' } //修改
+        maven { url 'https://maven.aliyun.com/repository/public' } //修改
+        maven { url 'https://maven.aliyun.com/repository/jcenter' } //修改
+        maven { url "https://jitpack.io" }
+        jcenter()
     }
     apply plugin: 'idea'
     buildDir = new File(rootDir, "gradle-build/${path.replaceAll(':', '/')}")