Browse Source

1.0.2版本

master
ml 2 years ago
parent
commit
191317fd90
  1. 6
      .idea/misc.xml
  2. 2
      app/build.gradle
  3. 2
      app/release/output.json
  4. 8
      app/src/main/AndroidManifest.xml
  5. 75
      app/src/main/assets/FlowReportWorkUI.json
  6. 15
      app/src/main/assets/MainUIForV.json
  7. 106
      app/src/main/assets/ProReqBodyUI.json
  8. 38
      app/src/main/assets/ProReturnUI.json
  9. 17
      app/src/main/assets/ReportWorkErrorListUI.json
  10. 17
      app/src/main/assets/ReportWorkOffseUI.json
  11. 2
      app/src/main/assets/litepal.xml
  12. 2
      app/src/main/java/com/techscan/wk/app/AppConst.java
  13. 2
      app/src/main/java/com/techscan/wk/model/AnalysisBarBean.java
  14. 18
      app/src/main/java/com/techscan/wk/model/FlowReportWorkDetailBean.java
  15. 9
      app/src/main/java/com/techscan/wk/model/ProReqDetailBean.java
  16. 9
      app/src/main/java/com/techscan/wk/model/ProReqOrdeTaskBean.java
  17. 202
      app/src/main/java/com/techscan/wk/model/ProReturnBean.java
  18. 9
      app/src/main/java/com/techscan/wk/rxretrofit/ApiService.java
  19. 16
      app/src/main/java/com/techscan/wk/rxretrofit/HttpMethods.java
  20. 10
      app/src/main/java/com/techscan/wk/ui/MainActivity.java
  21. 70
      app/src/main/java/com/techscan/wk/ui/interfaces/CustomDecimalDigitsTextWatcher.java
  22. 9
      app/src/main/java/com/techscan/wk/ui/interfaces/ProReturnSaveListener.java
  23. 6
      app/src/main/java/com/techscan/wk/ui/login/LoginActivity.java
  24. 190
      app/src/main/java/com/techscan/wk/ui/proreq/ProReqActivity.java
  25. 566
      app/src/main/java/com/techscan/wk/ui/proreq/ProReturnActivity.java
  26. 65
      app/src/main/java/com/techscan/wk/ui/reportwork/ConfigSettingActivity.java
  27. 134
      app/src/main/java/com/techscan/wk/ui/reportwork/FlowReportWorkActivity.java
  28. 20
      app/src/main/java/com/techscan/wk/ui/reportwork/ReportWorkErrorListActivity.java
  29. 21
      app/src/main/java/com/techscan/wk/ui/reportwork/ReportWorkOffsetActivity.java
  30. 21
      app/src/main/java/com/techscan/wk/widgets/CustomBottomSheet.java
  31. 220
      app/src/main/java/com/techscan/wk/widgets/ProReturnBottomSheet.java
  32. 50
      app/src/main/res/layout/activity_config_setting.xml
  33. 54
      app/src/main/res/layout/activity_pro_return.xml
  34. 2
      app/src/main/res/layout/activity_report_work_errlist.xml
  35. 4
      app/src/main/res/layout/activity_report_work_offse.xml
  36. 192
      app/src/main/res/layout/layout_pro_return_dialog.xml
  37. 8
      app/src/main/res/values-en/strings.xml
  38. 8
      app/src/main/res/values-th-rTH/strings.xml
  39. 8
      app/src/main/res/values/strings.xml

6
.idea/misc.xml

@ -9,16 +9,21 @@
<option name="filePathToZoomLevelMap"> <option name="filePathToZoomLevelMap">
<map> <map>
<entry key="..\:/TechScanProject/VicoFeedReport/app/src/main/res/layout/activity_change_pwd.xml" value="0.1" /> <entry key="..\:/TechScanProject/VicoFeedReport/app/src/main/res/layout/activity_change_pwd.xml" value="0.1" />
<entry key="..\:/TechScanProject/VicoFeedReport/app/src/main/res/layout/activity_config_setting.xml" value="0.23278985507246377" />
<entry key="..\:/TechScanProject/VicoFeedReport/app/src/main/res/layout/activity_flow_order_query.xml" value="0.1" /> <entry key="..\:/TechScanProject/VicoFeedReport/app/src/main/res/layout/activity_flow_order_query.xml" value="0.1" />
<entry key="..\:/TechScanProject/VicoFeedReport/app/src/main/res/layout/activity_flow_report_work.xml" value="0.23278985507246377" /> <entry key="..\:/TechScanProject/VicoFeedReport/app/src/main/res/layout/activity_flow_report_work.xml" value="0.23278985507246377" />
<entry key="..\:/TechScanProject/VicoFeedReport/app/src/main/res/layout/activity_login.xml" value="0.2246376811594203" /> <entry key="..\:/TechScanProject/VicoFeedReport/app/src/main/res/layout/activity_login.xml" value="0.2246376811594203" />
<entry key="..\:/TechScanProject/VicoFeedReport/app/src/main/res/layout/activity_main.xml" value="0.23278985507246377" /> <entry key="..\:/TechScanProject/VicoFeedReport/app/src/main/res/layout/activity_main.xml" value="0.23278985507246377" />
<entry key="..\:/TechScanProject/VicoFeedReport/app/src/main/res/layout/activity_pro_req_body.xml" value="0.23278985507246377" />
<entry key="..\:/TechScanProject/VicoFeedReport/app/src/main/res/layout/activity_pro_return.xml" value="0.23278985507246377" />
<entry key="..\:/TechScanProject/VicoFeedReport/app/src/main/res/layout/activity_report_work.xml" value="0.1" /> <entry key="..\:/TechScanProject/VicoFeedReport/app/src/main/res/layout/activity_report_work.xml" value="0.1" />
<entry key="..\:/TechScanProject/VicoFeedReport/app/src/main/res/layout/activity_report_work_errlist.xml" value="0.23278985507246377" /> <entry key="..\:/TechScanProject/VicoFeedReport/app/src/main/res/layout/activity_report_work_errlist.xml" value="0.23278985507246377" />
<entry key="..\:/TechScanProject/VicoFeedReport/app/src/main/res/layout/activity_report_work_offse.xml" value="0.2246376811594203" /> <entry key="..\:/TechScanProject/VicoFeedReport/app/src/main/res/layout/activity_report_work_offse.xml" value="0.2246376811594203" />
<entry key="..\:/TechScanProject/VicoFeedReport/app/src/main/res/layout/activity_setting.xml" value="0.2246376811594203" /> <entry key="..\:/TechScanProject/VicoFeedReport/app/src/main/res/layout/activity_setting.xml" value="0.2246376811594203" />
<entry key="..\:/TechScanProject/VicoFeedReport/app/src/main/res/layout/cbk_dialog_pick_time.xml" value="0.2246376811594203" /> <entry key="..\:/TechScanProject/VicoFeedReport/app/src/main/res/layout/cbk_dialog_pick_time.xml" value="0.2246376811594203" />
<entry key="..\:/TechScanProject/VicoFeedReport/app/src/main/res/layout/cbk_wheel_picker.xml" value="0.2246376811594203" /> <entry key="..\:/TechScanProject/VicoFeedReport/app/src/main/res/layout/cbk_wheel_picker.xml" value="0.2246376811594203" />
<entry key="..\:/TechScanProject/VicoFeedReport/app/src/main/res/layout/custom_bottom_popup.xml" value="0.23278985507246377" />
<entry key="..\:/TechScanProject/VicoFeedReport/app/src/main/res/layout/detail_bottom_popup.xml" value="0.23278985507246377" />
<entry key="..\:/TechScanProject/VicoFeedReport/app/src/main/res/layout/dialog_task_info.xml" value="0.2246376811594203" /> <entry key="..\:/TechScanProject/VicoFeedReport/app/src/main/res/layout/dialog_task_info.xml" value="0.2246376811594203" />
<entry key="..\:/TechScanProject/VicoFeedReport/app/src/main/res/layout/form_item_edit.xml" value="0.29257246376811596" /> <entry key="..\:/TechScanProject/VicoFeedReport/app/src/main/res/layout/form_item_edit.xml" value="0.29257246376811596" />
<entry key="..\:/TechScanProject/VicoFeedReport/app/src/main/res/layout/form_item_edit_select_scan.xml" value="0.2246376811594203" /> <entry key="..\:/TechScanProject/VicoFeedReport/app/src/main/res/layout/form_item_edit_select_scan.xml" value="0.2246376811594203" />
@ -29,6 +34,7 @@
<entry key="..\:/TechScanProject/VicoFeedReport/app/src/main/res/layout/layout_bottom_input_btn5.xml" value="0.15817356205852673" /> <entry key="..\:/TechScanProject/VicoFeedReport/app/src/main/res/layout/layout_bottom_input_btn5.xml" value="0.15817356205852673" />
<entry key="..\:/TechScanProject/VicoFeedReport/app/src/main/res/layout/layout_bottom_input_btn7.xml" value="0.23278985507246377" /> <entry key="..\:/TechScanProject/VicoFeedReport/app/src/main/res/layout/layout_bottom_input_btn7.xml" value="0.23278985507246377" />
<entry key="..\:/TechScanProject/VicoFeedReport/app/src/main/res/layout/layout_edit_scan.xml" value="0.1" /> <entry key="..\:/TechScanProject/VicoFeedReport/app/src/main/res/layout/layout_edit_scan.xml" value="0.1" />
<entry key="..\:/TechScanProject/VicoFeedReport/app/src/main/res/layout/layout_pro_return_dialog.xml" value="0.23278985507246377" />
<entry key="..\:/TechScanProject/vicobar/app/src/main/res/drawable/bg_login_btn.xml" value="0.208" /> <entry key="..\:/TechScanProject/vicobar/app/src/main/res/drawable/bg_login_btn.xml" value="0.208" />
<entry key="..\:/TechScanProject/vicobar/app/src/main/res/drawable/bg_round.xml" value="0.208" /> <entry key="..\:/TechScanProject/vicobar/app/src/main/res/drawable/bg_round.xml" value="0.208" />
<entry key="..\:/TechScanProject/vicobar/app/src/main/res/drawable/button_down.xml" value="0.208" /> <entry key="..\:/TechScanProject/vicobar/app/src/main/res/drawable/button_down.xml" value="0.208" />

2
app/build.gradle

@ -9,7 +9,7 @@ android {
//noinspection ExpiredTargetSdkVersion //noinspection ExpiredTargetSdkVersion
targetSdkVersion 29 targetSdkVersion 29
versionCode 1 versionCode 1
versionName "1.0.1"
versionName "1.0.2"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
ndk { ndk {
abiFilters 'armeabi', 'x86', 'armeabi-v7a', 'x86_64', 'arm64-v8a' abiFilters 'armeabi', 'x86', 'armeabi-v7a', 'x86_64', 'arm64-v8a'

2
app/release/output.json

@ -1 +1 @@
[{"outputType":{"type":"APK"},"apkInfo":{"type":"MAIN","splits":[],"versionCode":1,"versionName":"1.0.1","enabled":true,"outputFile":"维科上料报工系统_v1.0.1.apk","fullName":"release","baseName":"release"},"path":"维科上料报工系统_v1.0.1.apk","properties":{}}]
[{"outputType":{"type":"APK"},"apkInfo":{"type":"MAIN","splits":[],"versionCode":1,"versionName":"1.0.2","enabled":true,"outputFile":"维科上料报工系统_v1.0.2.apk","fullName":"release","baseName":"release"},"path":"维科上料报工系统_v1.0.2.apk","properties":{}}]

8
app/src/main/AndroidManifest.xml

@ -62,11 +62,19 @@
android:name="com.techscan.wk.ui.proreq.ProReqActivity" android:name="com.techscan.wk.ui.proreq.ProReqActivity"
android:exported="false" android:exported="false"
android:windowSoftInputMode="stateAlwaysHidden|adjustPan" /> android:windowSoftInputMode="stateAlwaysHidden|adjustPan" />
<activity
android:name="com.techscan.wk.ui.proreq.ProReturnActivity"
android:exported="false"
android:windowSoftInputMode="stateAlwaysHidden|adjustPan" />
<activity <activity
android:name=".ui.baseAct.LgortListActivity" android:name=".ui.baseAct.LgortListActivity"
android:exported="false" android:exported="false"
android:windowSoftInputMode="stateAlwaysHidden|adjustPan" /> android:windowSoftInputMode="stateAlwaysHidden|adjustPan" />
<activity
android:name=".ui.reportwork.ConfigSettingActivity"
android:exported="false"
android:windowSoftInputMode="stateAlwaysHidden|adjustPan" />
<activity <activity
android:name="com.techscan.wk.ui.login.SettingActivity" android:name="com.techscan.wk.ui.login.SettingActivity"

75
app/src/main/assets/FlowReportWorkUI.json

@ -28,30 +28,14 @@
"mast": false, "mast": false,
"canChange": true, "canChange": true,
"isShow": true, "isShow": true,
"isFocus": true,
"isFocus": false,
"language": { "language": {
"zh": "工单号", "zh": "工单号",
"en": "Production order Work order number", "en": "Production order Work order number",
"th": "หมายเลขหน้า" "th": "หมายเลขหน้า"
} }
}, },
{
"id": 3,
"type": 2,
"fieldName": "VORNR",
"name": "工序号",
"value": "",
"editExp": 0,
"values": [],
"mast": false,
"canChange": true,
"isShow": true,
"language": {
"zh": "工序号",
"en": "Operation number",
"th": "ขนาด"
}
},
{ {
"id": 4, "id": 4,
"type": 2, "type": 2,
@ -63,7 +47,7 @@
"mast": false, "mast": false,
"canChange": true, "canChange": true,
"isShow": true, "isShow": true,
"isFocus": false,
"isFocus": true,
"language": { "language": {
"zh": "流转单号", "zh": "流转单号",
"en": "Flow order number", "en": "Flow order number",
@ -90,8 +74,8 @@
{ {
"id": 6, "id": 6,
"type": 2, "type": 2,
"fieldName": "ZXTPC",
"name": "号",
"fieldName": "MATNR",
"name": "物料号",
"value": "", "value": "",
"editExp": 0, "editExp": 0,
"values": [], "values": [],
@ -99,62 +83,63 @@
"canChange": false, "canChange": false,
"isShow": true, "isShow": true,
"language": { "language": {
"zh": "号",
"en": "Case number",
"th": "หมายเลขกล่อง"
"zh": "物料号",
"en": "Material number",
"th": "หมายเลขวัสดุ"
} }
}, },
{ {
"id": 7, "id": 7,
"type": 2, "type": 2,
"fieldName": "GMNGA",
"name": "报工数量",
"fieldName": "ZXTPC",
"name": "箱号",
"value": "", "value": "",
"editExp": 0, "editExp": 0,
"values": [], "values": [],
"mast": false, "mast": false,
"canChange": true,
"isShow": false,
"canChange": false,
"isShow": true,
"language": { "language": {
"zh": "报工数量",
"en": "Quantity reported",
"th": "จำนวนงานพิมพ์"
"zh": "箱号",
"en": "Case number",
"th": "หมายเลขกล่อง"
} }
}, },
{ {
"id": 8, "id": 8,
"type": 1,
"fieldName": "GRUND",
"name": "原因代码",
"type": 2,
"fieldName": "ZPC",
"name": "批次",
"value": "", "value": "",
"editExp": 0, "editExp": 0,
"values": [], "values": [],
"mast": false, "mast": false,
"canChange": true,
"canChange": false,
"isShow": true, "isShow": true,
"language": { "language": {
"zh": "原因代码",
"en": "Reason code",
"th": "รหัสเหตุผล"
"zh": "批次",
"en": "batch",
"th": "จำนวน"
} }
}, },
{ {
"id": 9, "id": 9,
"type": 2, "type": 2,
"fieldName": "XMNGA",
"name": "报数量",
"fieldName": "GMNGA",
"name": "报数量",
"value": "", "value": "",
"editExp": 2,
"editExp": 0,
"values": [], "values": [],
"mast": false, "mast": false,
"canChange": true, "canChange": true,
"isShow": true,
"isShow": false,
"language": { "language": {
"zh": "报数量",
"en": "Scrap quantity",
"th": "จำนวนการสูญเสีย"
"zh": "报数量",
"en": "Quantity reported",
"th": "จำนวนงานพิมพ์"
} }
} }
] ]

15
app/src/main/assets/MainUIForV.json

@ -28,7 +28,7 @@
{ {
"id": 7, "id": 7,
"name": "冲销", "name": "冲销",
"icon": "wbspxs",
"icon": "xsck",
"to": "com.techscan.wk.ui.reportwork.ReportWorkOffsetActivity", "to": "com.techscan.wk.ui.reportwork.ReportWorkOffsetActivity",
"show": "1", "show": "1",
"children": [], "children": [],
@ -76,6 +76,19 @@
"th": "ตรวจสอบการส่งจดหมาย" "th": "ตรวจสอบการส่งจดหมาย"
} }
}, },
{
"id": 13,
"name": "生产退料",
"icon": "wbspxs",
"to": "com.techscan.wk.ui.proreq.ProReturnActivity",
"show": "1",
"children": [],
"language": {
"zh": "生产退料",
"en": "Production return",
"th": "วัสดุการผลิต"
}
},
{ {
"id": 15, "id": 15,
"name": "退出登录", "name": "退出登录",

106
app/src/main/assets/ProReqBodyUI.json

@ -1,40 +1,6 @@
[ [
{ {
"id": 1, "id": 1,
"type": 2,
"fieldName": "ZCJBM",
"name": "车间编码",
"value": "",
"editExp": 0,
"values": [],
"mast": false,
"canChange": true,
"isShow": true,
"language": {
"zh": "车间编码",
"en": "Shop coding",
"th": "การเข้ารหัสของห้องปฏิบัติการ"
}
},
{
"id": 2,
"type": 2,
"fieldName": "ZGWH",
"name": "工位号",
"value": "",
"editExp": 0,
"values": [],
"mast": false,
"canChange": true,
"isShow": true,
"language": {
"zh": "工位号",
"en": "working location number",
"th": "จำนวนคนงาน"
}
},
{
"id": 3,
"type": 5, "type": 5,
"fieldName": "ZLYSJ", "fieldName": "ZLYSJ",
"name": "领用时间", "name": "领用时间",
@ -50,40 +16,7 @@
"th": "ใช้เวลา" "th": "ใช้เวลา"
} }
}, },
{
"id": 3,
"type": 1,
"fieldName": "ZYWLX",
"name": "业务类型",
"value": "",
"editExp": 0,
"values": [],
"mast": false,
"canChange": true,
"isShow": true,
"language": {
"zh": "业务类型",
"en": "Business type",
"th": "ประเภทธุรกิจ"
}
},
{
"id": 3,
"type": 1,
"fieldName": "lgort",
"name": "库存地点",
"value": "",
"editExp": 0,
"values": [],
"mast": false,
"canChange": true,
"isShow": true,
"language": {
"zh": "库存地点",
"en": "Stock location",
"th": "สถาน ที่เก็บสินค้า"
}
},
{ {
"id": 4, "id": 4,
"type": 2, "type": 2,
@ -119,6 +52,23 @@
"th": "บาร์โค้ด" "th": "บาร์โค้ด"
} }
}, },
{
"id": 3,
"type": 1,
"fieldName": "lgort",
"name": "库存地点",
"value": "",
"editExp": 0,
"values": [],
"mast": false,
"canChange": true,
"isShow": true,
"language": {
"zh": "库存地点",
"en": "Stock location",
"th": "สถาน ที่เก็บสินค้า"
}
},
{ {
"id": 6, "id": 6,
"type": 2, "type": 2,
@ -139,6 +89,23 @@
{ {
"id": 7, "id": 7,
"type": 2, "type": 2,
"fieldName": "ZXTPC",
"name": "箱号",
"value": "",
"editExp": 0,
"values": [],
"mast": false,
"canChange": false,
"isShow": true,
"language": {
"zh": "箱号",
"en": "Case number",
"th": "หมายเลขกล่อง"
}
},
{
"id": 8,
"type": 2,
"fieldName": "ZPC", "fieldName": "ZPC",
"name": "批次", "name": "批次",
"value": "", "value": "",
@ -153,9 +120,8 @@
"th": "จำนวน" "th": "จำนวน"
} }
}, },
{ {
"id": 8,
"id": 9,
"type": 2, "type": 2,
"fieldName": "quantity", "fieldName": "quantity",
"name": "数量", "name": "数量",

38
app/src/main/assets/ProReturnUI.json

@ -0,0 +1,38 @@
[
{
"id": 1,
"type": 9,
"fieldName": "TIME",
"name": "日期",
"value": "",
"editExp": 0,
"values": [],
"mast": false,
"canChange": true,
"isShow": true,
"isFocus": true,
"language": {
"zh": "日期",
"en": "date",
"th": "วัน ที่"
}
},
{
"id": 1,
"type": 2,
"fieldName": "AUFNR",
"name": "工单号",
"value": "",
"editExp": 0,
"values": [],
"mast": false,
"canChange": true,
"isShow": true,
"isFocus": true,
"language": {
"zh": "工单号",
"en": "Work order number",
"th": "หมายเลขหน้า"
}
}
]

17
app/src/main/assets/ReportWorkErrorListUI.json

@ -34,22 +34,5 @@
"en": "Work order number", "en": "Work order number",
"th": "หมายเลขหน้า" "th": "หมายเลขหน้า"
} }
},
{
"id": 3,
"type": 2,
"fieldName": "VORNR",
"name": "工序号",
"value": "",
"editExp": 0,
"values": [],
"mast": false,
"canChange": true,
"isShow": true,
"language": {
"zh": "工序号",
"en": "Operation number",
"th": "ขนาด"
}
} }
] ]

17
app/src/main/assets/ReportWorkOffseUI.json

@ -16,22 +16,5 @@
"en": "Work order number", "en": "Work order number",
"th": "หมายเลขหน้า" "th": "หมายเลขหน้า"
} }
},
{
"id": 2,
"type": 2,
"fieldName": "VORNR",
"name": "工序号",
"value": "",
"editExp": 0,
"values": [],
"mast": false,
"canChange": true,
"isShow": true,
"language": {
"zh": "工序号",
"en": "Operation number",
"th": "ขนาด"
}
} }
] ]

2
app/src/main/assets/litepal.xml

@ -19,7 +19,7 @@
For example: For example:
<version value="1" /> <version value="1" />
--> -->
<version value="11" />
<version value="14" />
<!-- <!--
Define your models in the list with mapping tag, LitePal will Define your models in the list with mapping tag, LitePal will
create tables for each mapping class. The supported fields create tables for each mapping class. The supported fields

2
app/src/main/java/com/techscan/wk/app/AppConst.java

@ -17,6 +17,8 @@ public class AppConst {
public static final String KEY_TITLE = "key_title"; public static final String KEY_TITLE = "key_title";
public static final String KEY_IS_CONTINUOUS = "key_continuous_scan"; public static final String KEY_IS_CONTINUOUS = "key_continuous_scan";
public static final String SCAN_ADD_DETAIL = "autoInserDetail";
public static final int CAMERA_CODE = 0x11; public static final int CAMERA_CODE = 0x11;
public static final int REQUEST_CODE_SCAN_FOR_GROUP = 0X12; public static final int REQUEST_CODE_SCAN_FOR_GROUP = 0X12;
} }

2
app/src/main/java/com/techscan/wk/model/AnalysisBarBean.java

@ -4,7 +4,7 @@ public class AnalysisBarBean {
private String factory; private String factory;
private String materiel; private String materiel;
private String versions; private String versions;
private String packageNumber;
private String packageNumber;//包装容器号/箱号
private String Batch; private String Batch;
private String quantity; private String quantity;
private String ext; private String ext;

18
app/src/main/java/com/techscan/wk/model/FlowReportWorkDetailBean.java

@ -14,7 +14,9 @@ public class FlowReportWorkDetailBean extends LitePalSupport {
private String packetBarcode;//包条码 private String packetBarcode;//包条码
private String flowOrders;//流转单号 private String flowOrders;//流转单号
private String flowReport;//流转单号 private String flowReport;//流转单号
private String matnr;//物料编码
private String zxtpc;//箱号 private String zxtpc;//箱号
private String zpc;//批次
private int ism01; private int ism01;
private int ism02; private int ism02;
private int ism03; private int ism03;
@ -22,6 +24,22 @@ public class FlowReportWorkDetailBean extends LitePalSupport {
private int ism05; private int ism05;
private int ism06; private int ism06;
public String getMatnr() {
return matnr;
}
public void setMatnr(String matnr) {
this.matnr = matnr;
}
public String getZpc() {
return zpc;
}
public void setZpc(String zpc) {
this.zpc = zpc;
}
public String getZxtpc() { public String getZxtpc() {
return zxtpc; return zxtpc;
} }

9
app/src/main/java/com/techscan/wk/model/ProReqDetailBean.java

@ -14,6 +14,7 @@ public class ProReqDetailBean extends LitePalSupport {
private String zgwh;//工位号 private String zgwh;//工位号
private String zitemo;//行项目号 private String zitemo;//行项目号
private String zlysj;//领用时间 private String zlysj;//领用时间
private String zboxid;//箱号
private String zpc;//批次 private String zpc;//批次
private String zreqlineid;//MES领料单行ID private String zreqlineid;//MES领料单行ID
private String zsapdoc;//领料单编号 private String zsapdoc;//领料单编号
@ -22,6 +23,14 @@ public class ProReqDetailBean extends LitePalSupport {
private String lgort;//库存地点 private String lgort;//库存地点
private String lgortName;//库存地点 private String lgortName;//库存地点
public String getZboxid() {
return zboxid;
}
public void setZboxid(String zboxid) {
this.zboxid = zboxid;
}
public String getGid() { public String getGid() {
return gid; return gid;
} }

9
app/src/main/java/com/techscan/wk/model/ProReqOrdeTaskBean.java

@ -18,6 +18,7 @@ public class ProReqOrdeTaskBean extends LitePalSupport {
private String erfme;//组件单位 private String erfme;//组件单位
private Double erfmg;//组件用量(BOM单位) private Double erfmg;//组件用量(BOM单位)
private String lgort;//库存地点 private String lgort;//库存地点
private String lgortName;//库存地点名称
private String matnr;//组件物料编码 private String matnr;//组件物料编码
private String meins;//组件单位 //任务数量用到的单位 private String meins;//组件单位 //任务数量用到的单位
private Double menge;//单位用量 private Double menge;//单位用量
@ -28,6 +29,14 @@ public class ProReqOrdeTaskBean extends LitePalSupport {
private String vornr;//工序编码 private String vornr;//工序编码
private String xloek;//删除标记 private String xloek;//删除标记
public String getLgortName() {
return lgortName;
}
public void setLgortName(String lgortName) {
this.lgortName = lgortName;
}
public long getId() { public long getId() {
return id; return id;
} }

202
app/src/main/java/com/techscan/wk/model/ProReturnBean.java

@ -0,0 +1,202 @@
package com.techscan.wk.model;
public class ProReturnBean {
private String select;
private String aufnr;
private String createTime;
private int createUser;
private int dr;
private String erfme;
private double erfmg;
private int id;
private int pickId;
private String lgort;
private String matnr;
private String sapStatus;
private String updateTime;
private int updateUser;
private String werks;
private String zboxid;
private String zitemo;
private String zlysj;
private String zpc;
private String zreqlineid;
private String zsapdoc;
private String zywlx;
public int getPickId() {
return pickId;
}
public void setPickId(int pickId) {
this.pickId = pickId;
}
public String getSelect() {
return select;
}
public void setSelect(String select) {
this.select = select;
}
public void setAufnr(String aufnr) {
this.aufnr = aufnr;
}
public String getAufnr() {
return aufnr;
}
public void setCreateTime(String createTime) {
this.createTime = createTime;
}
public String getCreateTime() {
return createTime;
}
public void setCreateUser(int createUser) {
this.createUser = createUser;
}
public int getCreateUser() {
return createUser;
}
public void setDr(int dr) {
this.dr = dr;
}
public int getDr() {
return dr;
}
public void setErfme(String erfme) {
this.erfme = erfme;
}
public String getErfme() {
return erfme;
}
public void setErfmg(double erfmg) {
this.erfmg = erfmg;
}
public double getErfmg() {
return erfmg;
}
public void setId(int id) {
this.id = id;
}
public int getId() {
return id;
}
public void setLgort(String lgort) {
this.lgort = lgort;
}
public String getLgort() {
return lgort;
}
public void setMatnr(String matnr) {
this.matnr = matnr;
}
public String getMatnr() {
return matnr;
}
public void setSapStatus(String sapStatus) {
this.sapStatus = sapStatus;
}
public String getSapStatus() {
return sapStatus;
}
public void setUpdateTime(String updateTime) {
this.updateTime = updateTime;
}
public String getUpdateTime() {
return updateTime;
}
public void setUpdateUser(int updateUser) {
this.updateUser = updateUser;
}
public int getUpdateUser() {
return updateUser;
}
public void setWerks(String werks) {
this.werks = werks;
}
public String getWerks() {
return werks;
}
public void setZboxid(String zboxid) {
this.zboxid = zboxid;
}
public String getZboxid() {
return zboxid;
}
public void setZitemo(String zitemo) {
this.zitemo = zitemo;
}
public String getZitemo() {
return zitemo;
}
public void setZlysj(String zlysj) {
this.zlysj = zlysj;
}
public String getZlysj() {
return zlysj;
}
public void setZpc(String zpc) {
this.zpc = zpc;
}
public String getZpc() {
return zpc;
}
public void setZreqlineid(String zreqlineid) {
this.zreqlineid = zreqlineid;
}
public String getZreqlineid() {
return zreqlineid;
}
public void setZsapdoc(String zsapdoc) {
this.zsapdoc = zsapdoc;
}
public String getZsapdoc() {
return zsapdoc;
}
public void setZywlx(String zywlx) {
this.zywlx = zywlx;
}
public String getZywlx() {
return zywlx;
}
}

9
app/src/main/java/com/techscan/wk/rxretrofit/ApiService.java

@ -74,6 +74,12 @@ public interface ApiService {
Observable<ResponseBody> getReport(@Query("aufnr") String aufnr, Observable<ResponseBody> getReport(@Query("aufnr") String aufnr,
@Query("vornr") String vornr); @Query("vornr") String vornr);
@GET("/web/order/getPickList")
Observable<ResponseBody> getPickList(@Query("aufnr") String aufnr,
@Query("beginDate") String beginDate,
@Query("endDate") String endDate);
@GET("/web/report/getFlowReport") @GET("/web/report/getFlowReport")
Observable<ResponseBody> getFlowReport(@Query("zxtpc") String zxtpc); Observable<ResponseBody> getFlowReport(@Query("zxtpc") String zxtpc);
@ -86,6 +92,9 @@ public interface ApiService {
@POST("/web/report/saveCX") @POST("/web/report/saveCX")
Observable<ResponseBody> saveCX(@Body String requestBean); Observable<ResponseBody> saveCX(@Body String requestBean);
@POST("/web/order/saveBackPick")
Observable<ResponseBody> saveBackPick(@Body String requestBean);
@POST("/web/order/savePick") @POST("/web/order/savePick")
Observable<ResponseBody> savePick(@Body Map<String,Object> name); Observable<ResponseBody> savePick(@Body Map<String,Object> name);

16
app/src/main/java/com/techscan/wk/rxretrofit/HttpMethods.java

@ -291,6 +291,13 @@ public class HttpMethods {
.observeOn(AndroidSchedulers.mainThread()) .observeOn(AndroidSchedulers.mainThread())
.subscribe(observer); .subscribe(observer);
} }
public void saveBackPick(String obj, Observer<ResponseBody> observer) {
getApiService().saveBackPick(obj)
.subscribeOn(Schedulers.io())
.unsubscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(observer);
}
public void getError(String aufnr, String vornr, public void getError(String aufnr, String vornr,
@ -321,6 +328,15 @@ public class HttpMethods {
.subscribe(observer); .subscribe(observer);
} }
public void getPickList(String aufnr, String beginDate, String endDate,
Observer<ResponseBody> observer) {
getApiService().getPickList(aufnr, beginDate, endDate)
.subscribeOn(Schedulers.io())
.unsubscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(observer);
}
public void getFlowReport(String zxtpc, Observer<ResponseBody> observer) { public void getFlowReport(String zxtpc, Observer<ResponseBody> observer) {
getApiService().getFlowReport(zxtpc) getApiService().getFlowReport(zxtpc)
.subscribeOn(Schedulers.io()) .subscribeOn(Schedulers.io())

10
app/src/main/java/com/techscan/wk/ui/MainActivity.java

@ -195,7 +195,7 @@ public class MainActivity extends BaseActivity {
for (int i = 0; i < menus.size(); i++) { for (int i = 0; i < menus.size(); i++) {
VicoUserBean.MenusBean menusBean = menus.get(i); VicoUserBean.MenusBean menusBean = menus.get(i);
if (menusBean.getName().equals("生产报工")) { if (menusBean.getName().equals("生产报工")) {
isHas = true;
isHas = false;
break; break;
} }
} }
@ -223,6 +223,14 @@ public class MainActivity extends BaseActivity {
break; break;
} }
} }
}else if (homeFunctionBean.getName().equals("生产退料")) {
for (int i = 0; i < menus.size(); i++) {
VicoUserBean.MenusBean menusBean = menus.get(i);
if (menusBean.getName().equals("生产退料")) {
isHas = true;
break;
}
}
} else if (homeFunctionBean.getName().equals("退出登录")) { } else if (homeFunctionBean.getName().equals("退出登录")) {
isHas = true; isHas = true;
} }

70
app/src/main/java/com/techscan/wk/ui/interfaces/CustomDecimalDigitsTextWatcher.java

@ -0,0 +1,70 @@
package com.techscan.wk.ui.interfaces;
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.widget.EditText;
import android.widget.TextView;
import com.techscan.wk.model.DynamicFormBean;
import java.lang.ref.WeakReference;
/**
* Description
* Author: MULEI
* Date:2024/5/13 11:56
*/
public class CustomDecimalDigitsTextWatcher implements TextWatcher {
private WeakReference<EditText> editWeakReference;
private double maxNum;
public CustomDecimalDigitsTextWatcher() {
}
public CustomDecimalDigitsTextWatcher(EditText currentEditText, double maxNum) {
this.editWeakReference = new WeakReference<>(currentEditText);
this.maxNum = maxNum;
}
@Override
public void beforeTextChanged(CharSequence charSequence, int start, int before, int count) {
}
@Override
public void onTextChanged(CharSequence charSequence, int start, int before, int count) {
if (editWeakReference.get() == null) return;
EditText editText = editWeakReference.get();
// 文本正在变化时执行
// 检查用户输入的第一个字符是否为小数点
if (charSequence.length() > 0 && charSequence.charAt(0) == '.') {
// 如果是小数点,移除开头的小数点
editText.setText(charSequence.subSequence(1, charSequence.length()));
// 将光标移至末尾
editText.setSelection(editText.getText().length());
} else if (charSequence.length() > 1 && charSequence.charAt(0) == '0' && charSequence.charAt(1) != '.') {
//首位是0,后面必须是小数点,否则清除输入
editText.setText(charSequence.subSequence(1, charSequence.length()));
// 将光标移至末尾
editText.setSelection(editText.getText().length());
}
}
@Override
public void afterTextChanged(Editable editable) {
if (editWeakReference.get() == null) return;
EditText editText = editWeakReference.get();
// 文本变化后执行
String s = editable.toString();
if (!TextUtils.isEmpty(s)) {
double v = Double.parseDouble(s);
if (v > maxNum) {
editText.setText(String.valueOf(maxNum));
}
}
}
}

9
app/src/main/java/com/techscan/wk/ui/interfaces/ProReturnSaveListener.java

@ -0,0 +1,9 @@
package com.techscan.wk.ui.interfaces;
import com.lxj.xpopup.core.BottomPopupView;
import com.techscan.wk.model.ProReturnBean;
import com.techscan.wk.widgets.ProReturnBottomSheet;
public interface ProReturnSaveListener {
void onSaveListener(ProReturnBean bean, ProReturnBottomSheet proReturnBottomSheet);
}

6
app/src/main/java/com/techscan/wk/ui/login/LoginActivity.java

@ -29,6 +29,7 @@ import com.blankj.utilcode.util.SPUtils;
import com.blankj.utilcode.util.StringUtils; import com.blankj.utilcode.util.StringUtils;
import com.blankj.utilcode.util.ToastUtils; import com.blankj.utilcode.util.ToastUtils;
import com.google.gson.reflect.TypeToken; import com.google.gson.reflect.TypeToken;
import com.lxj.xpopup.XPopup;
import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialog;
import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton;
import com.techscan.wk.R; import com.techscan.wk.R;
@ -57,6 +58,8 @@ import com.techscan.wk.utils.ToastUtil;
import com.techscan.wk.utils.route.Router; import com.techscan.wk.utils.route.Router;
import com.techscan.wk.utils.statusbar.StatusBarUtil; import com.techscan.wk.utils.statusbar.StatusBarUtil;
import com.techscan.wk.utils.update.UpdateUtil; import com.techscan.wk.utils.update.UpdateUtil;
import com.techscan.wk.widgets.DetailBottomSheet;
import com.techscan.wk.widgets.ProReturnBottomSheet;
import java.io.IOException; import java.io.IOException;
import java.lang.reflect.Type; import java.lang.reflect.Type;
@ -133,6 +136,7 @@ public class LoginActivity extends BaseActivity {
public void onViewClicked(View view) { public void onViewClicked(View view) {
switch (view.getId()) { switch (view.getId()) {
case R.id.btn_login: case R.id.btn_login:
login(view); login(view);
// tietUsername.setText(1); // tietUsername.setText(1);
// new XPopup.Builder(context) // new XPopup.Builder(context)
@ -331,6 +335,7 @@ public class LoginActivity extends BaseActivity {
} }
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
ToastUtils.showLong(e.getMessage());
} }
} }
@ -412,6 +417,7 @@ public class LoginActivity extends BaseActivity {
} }
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
ToastUtils.showLong(e.getMessage());
} }
} }

190
app/src/main/java/com/techscan/wk/ui/proreq/ProReqActivity.java

@ -11,6 +11,7 @@ import android.content.DialogInterface;
import android.content.Intent; import android.content.Intent;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler;
import android.text.TextUtils; import android.text.TextUtils;
import android.view.KeyEvent; import android.view.KeyEvent;
import android.view.View; import android.view.View;
@ -41,6 +42,7 @@ import com.qmuiteam.qmui.widget.dialog.QMUIDialog;
import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog;
import com.techscan.wk.R; import com.techscan.wk.R;
import com.techscan.wk.adapter.DynamicFormAdapter; import com.techscan.wk.adapter.DynamicFormAdapter;
import com.techscan.wk.app.AppConst;
import com.techscan.wk.base.CommonFunctionActivity; import com.techscan.wk.base.CommonFunctionActivity;
import com.techscan.wk.model.AnalysisBarBean; import com.techscan.wk.model.AnalysisBarBean;
import com.techscan.wk.model.DynamicFormBean; import com.techscan.wk.model.DynamicFormBean;
@ -53,6 +55,8 @@ import com.techscan.wk.rxretrofit.BaseObserver;
import com.techscan.wk.rxretrofit.BaseResponseBean; import com.techscan.wk.rxretrofit.BaseResponseBean;
import com.techscan.wk.rxretrofit.HttpMethods; import com.techscan.wk.rxretrofit.HttpMethods;
import com.techscan.wk.ui.baseAct.LgortListActivity; import com.techscan.wk.ui.baseAct.LgortListActivity;
import com.techscan.wk.ui.login.SettingActivity;
import com.techscan.wk.ui.reportwork.ConfigSettingActivity;
import com.techscan.wk.ui.scan.CustomCaptureActivity; import com.techscan.wk.ui.scan.CustomCaptureActivity;
import com.techscan.wk.utils.AntiShakeUtils; import com.techscan.wk.utils.AntiShakeUtils;
import com.techscan.wk.utils.BarAnalysisUtils; import com.techscan.wk.utils.BarAnalysisUtils;
@ -163,6 +167,7 @@ public class ProReqActivity extends CommonFunctionActivity {
private void initTopBar() { private void initTopBar() {
topbar.setTitle(getString(R.string.Production_loading)); topbar.setTitle(getString(R.string.Production_loading));
topbar.addLeftBackImageButton().setOnClickListener(v -> finishActivity()); topbar.addLeftBackImageButton().setOnClickListener(v -> finishActivity());
topbar.addRightTextButton(getString(R.string.configuration), 0).setOnClickListener(view -> Router.newIntent(context).to(ConfigSettingActivity.class).launch());
} }
/** /**
@ -189,17 +194,6 @@ public class ProReqActivity extends CommonFunctionActivity {
}.getType(); }.getType();
//动态表单数据 //动态表单数据
dynamicFormBeans = gson.fromJson(jsonStr, objectType); dynamicFormBeans = gson.fromJson(jsonStr, objectType);
for (int i = 0; i < dynamicFormBeans.size(); i++) {
DynamicFormBean dynamicFormBean = dynamicFormBeans.get(i);
if (dynamicFormBean.getFieldName().equals("ZCJBM")) {
String zcjbm = SPUtils.getInstance().getString("ZCJBM", "");
dynamicFormBean.setValue(zcjbm);
}
if (dynamicFormBean.getFieldName().equals("ZGWH")) {
String zcjbm = SPUtils.getInstance().getString("ZGWH", "");
dynamicFormBean.setValue(zcjbm);
}
}
// 动态表单绑定数据并绑定适配器到recycleView中 // 动态表单绑定数据并绑定适配器到recycleView中
dynamicFormAdapter = new DynamicFormAdapter(dynamicFormBeans, false, 0); dynamicFormAdapter = new DynamicFormAdapter(dynamicFormBeans, false, 0);
@ -267,25 +261,13 @@ public class ProReqActivity extends CommonFunctionActivity {
return; return;
} }
switch (dynamicFormBean.getFieldName()) { switch (dynamicFormBean.getFieldName()) {
case "ZCJBM":
setNextFocus("ZGWH");
break;
case "ZGWH":
setNextFocus("AUFNR");
break;
case "AUFNR": case "AUFNR":
DynamicFormBean ZYWLXItem = dynamicFormAdapter.getItemByFieldName("ZYWLX");
if (TextUtils.isEmpty(ZYWLXItem.getValue())) {
showError(getString(R.string.Please_select_a_business_type));
dynamicFormAdapter.setFocusAndClearValueById(dynamicFormBean.getId());
return;
}
DynamicFormBean lgortItem = dynamicFormAdapter.getItemByFieldName("lgort");
if (TextUtils.isEmpty(lgortItem.getValue())) {
showError(getString(R.string.Please_select_a_stock_location));
dynamicFormAdapter.setFocusAndClearValueById(dynamicFormBean.getId());
return;
}
// DynamicFormBean lgortItem = dynamicFormAdapter.getItemByFieldName("lgort");
// if (TextUtils.isEmpty(lgortItem.getValue())) {
// showError(getString(R.string.Please_select_a_stock_location));
// dynamicFormAdapter.setFocusAndClearValueById(dynamicFormBean.getId());
// return;
// }
if (TextUtils.isEmpty(value)) { if (TextUtils.isEmpty(value)) {
showError(getString(R.string.The_work_order_number_cannot_be_empty)); showError(getString(R.string.The_work_order_number_cannot_be_empty));
dynamicFormAdapter.setFocusAndClearValueById(dynamicFormBean.getId()); dynamicFormAdapter.setFocusAndClearValueById(dynamicFormBean.getId());
@ -302,10 +284,7 @@ public class ProReqActivity extends CommonFunctionActivity {
LitePal.deleteAll(ProReqDetailBean.class); LitePal.deleteAll(ProReqDetailBean.class);
for (int j = 0; j < dynamicFormBeans.size(); j++) { for (int j = 0; j < dynamicFormBeans.size(); j++) {
DynamicFormBean bean = dynamicFormBeans.get(j); DynamicFormBean bean = dynamicFormBeans.get(j);
if (bean.getFieldName().equals("ZCJBM") ||
bean.getFieldName().equals("ZGWH") ||
bean.getFieldName().equals("lgort") ||
bean.getFieldName().equals("ZYWLX") ||
if (bean.getFieldName().equals("lgort") ||
bean.getFieldName().equals("AUFNR") || bean.getFieldName().equals("AUFNR") ||
bean.getFieldName().equals("ZLYSJ")) { bean.getFieldName().equals("ZLYSJ")) {
continue; continue;
@ -329,75 +308,98 @@ public class ProReqActivity extends CommonFunctionActivity {
setNextFocus("AUFNR"); setNextFocus("AUFNR");
return; return;
} }
boolean checkBarcode = BarAnalysisUtils.checkBarcodePresuffix(value); boolean checkBarcode = BarAnalysisUtils.checkBarcodePresuffix(value);
if (!checkBarcode) { if (!checkBarcode) {
showError(getString(R.string.The_barcode_format_is_incorrect) + value); showError(getString(R.string.The_barcode_format_is_incorrect) + value);
return; return;
} }
//判断条码是否已经被扫描
if (isInBarcodeList(scanBarcodeListMap, value)) {
showError(getString(R.string.Do_not_scan_the_barcode_again));
dynamicFormAdapter.setFocusById(dynamicFormBean.getId());
return;
}
AnalysisBarBean analysisBarBean = BarAnalysisUtils.analysisBarcode(value); AnalysisBarBean analysisBarBean = BarAnalysisUtils.analysisBarcode(value);
String batch = analysisBarBean.getBatch();
String materiel = analysisBarBean.getMateriel(); String materiel = analysisBarBean.getMateriel();
String quantity1 = analysisBarBean.getQuantity();
if (TextUtils.isEmpty(materiel)) { if (TextUtils.isEmpty(materiel)) {
dynamicFormAdapter.setFocusById(dynamicFormBean.getId()); dynamicFormAdapter.setFocusById(dynamicFormBean.getId());
showError(getString(R.string.There_is_no_aterial_information_in_the_barcode_please_confirm)); showError(getString(R.string.There_is_no_aterial_information_in_the_barcode_please_confirm));
return; return;
} }
DynamicFormBean MATNR = dynamicFormAdapter.getItemByFieldName("MATNR");
DynamicFormBean ZPC = dynamicFormAdapter.getItemByFieldName("ZPC");
DynamicFormBean quantity = dynamicFormAdapter.getItemByFieldName("quantity");
MATNR.setValue(materiel);
ZPC.setValue(batch);
quantity.setValue(quantity1);
dynamicFormAdapter.setItemByFieldName("MATNR", MATNR);
dynamicFormAdapter.setItemByFieldName("ZPC", ZPC);
dynamicFormAdapter.setItemByFieldName("quantity", quantity);
//判断条码是否已经被扫描
if (isInBarcodeList(scanBarcodeListMap, value)) {
showError(getString(R.string.Do_not_scan_the_barcode_again));
dynamicFormAdapter.setFocusById(dynamicFormBean.getId());
return;
}
getBarcodeInfo(value);
break;
case "quantity":
addDetail();
break;
default:
break;
}
});
}
private void getBarcodeInfo(String value) {
AnalysisBarBean bean = BarAnalysisUtils.analysisBarcode(value);
LitePal LitePal
//.where("matnr = ? and complete = ?", materiel, "0") //.where("matnr = ? and complete = ?", materiel, "0")
.where("matnr = ?", materiel)
.where("matnr = ?", bean.getMateriel())
.findAsync(ProReqOrdeTaskBean.class) .findAsync(ProReqOrdeTaskBean.class)
.listen(proReqOrdeTaskBeans -> { .listen(proReqOrdeTaskBeans -> {
if (proReqOrdeTaskBeans.size() == 0) { if (proReqOrdeTaskBeans.size() == 0) {
dynamicFormAdapter.setFocusById(dynamicFormBean.getId());
setNextFocus("barcode");
//未找到相同维度数据,报错 //未找到相同维度数据,报错
showError(getString(R.string.There_is_no_data_of_the_same_dimension_in_the_task_list)); showError(getString(R.string.There_is_no_data_of_the_same_dimension_in_the_task_list));
return; return;
} }
if (TextUtils.isEmpty(quantity1)) {
setNextFocus("quantity");
} else {
addDetail();
}
ProReqOrdeTaskBean proReqOrdeTaskBean = proReqOrdeTaskBeans.get(0);
});
for (DynamicFormBean d : dynamicFormBeans) {
switch (d.getFieldName()) {
case "lgort"://库存地点
String showValue = proReqOrdeTaskBean.getLgort() + " " + proReqOrdeTaskBean.getLgortName();
d.setValue(showValue);
break; break;
case "quantity":
addDetail();
case "MATNR"://物料号
d.setValue(bean.getMateriel());
d.setFocus(false);
break;
case "ZXTPC"://包装容器号 --箱号
d.setValue(bean.getPackageNumber());
d.setFocus(false);
break;
case "ZPC"://批次
d.setValue(bean.getBatch());
d.setFocus(false);
break;
case "quantity"://数量
d.setValue(bean.getQuantity());
d.setFocus(true);
break; break;
default: default:
d.setFocus(false);
break; break;
} }
});
} }
dynamicFormAdapter.setList(dynamicFormBeans);
dynamicFormAdapter.notifyDataSetChanged();
boolean aBoolean = PreferencesUtil.getBoolean(context, AppConst.SCAN_ADD_DETAIL,true);
if (aBoolean) {
new Handler().postDelayed(new Runnable() {
@Override @Override
protected void onPause() {
super.onPause();
DynamicFormBean zcjbm = dynamicFormAdapter.getItemByFieldName("ZCJBM");
SPUtils.getInstance().put("ZCJBM", zcjbm.getValue());
DynamicFormBean zgwhbm = dynamicFormAdapter.getItemByFieldName("ZGWH");
SPUtils.getInstance().put("ZGWH", zgwhbm.getValue());
public void run() {
addDetail();
}
}, 300);
} }
});
}
private void query(String id) { private void query(String id) {
HttpMethods.getInstance().getOrderInfo(id, new BaseObserver<ResponseBody>(context) { HttpMethods.getInstance().getOrderInfo(id, new BaseObserver<ResponseBody>(context) {
@ -450,22 +452,25 @@ public class ProReqActivity extends CommonFunctionActivity {
} }
private void addDetail() { private void addDetail() {
DynamicFormBean ZPCItem = dynamicFormAdapter.getItemByFieldName("ZPC");//批次
DynamicFormBean MATNRItem = dynamicFormAdapter.getItemByFieldName("MATNR");//物料编码
DynamicFormBean ZLYSJItem = dynamicFormAdapter.getItemByFieldName("ZLYSJ");//领用时间 DynamicFormBean ZLYSJItem = dynamicFormAdapter.getItemByFieldName("ZLYSJ");//领用时间
DynamicFormBean ZGWHItem = dynamicFormAdapter.getItemByFieldName("ZGWH");//工位号
DynamicFormBean ZCJBMItem = dynamicFormAdapter.getItemByFieldName("ZCJBM");//车间编码
DynamicFormBean lgortItem = dynamicFormAdapter.getItemByFieldName("lgort");//库存地点 DynamicFormBean lgortItem = dynamicFormAdapter.getItemByFieldName("lgort");//库存地点
DynamicFormBean lZYWLXItem = dynamicFormAdapter.getItemByFieldName("ZYWLX");//业务类型
DynamicFormBean quantityItem = dynamicFormAdapter.getItemByFieldName("quantity");//业务类型
DynamicFormBean barcodeItem = dynamicFormAdapter.getItemByFieldName("barcode");//条码
DynamicFormBean MATNRItem = dynamicFormAdapter.getItemByFieldName("MATNR");//物料编码
DynamicFormBean ZXTPCItem = dynamicFormAdapter.getItemByFieldName("ZXTPC");//箱号
DynamicFormBean ZPCItem = dynamicFormAdapter.getItemByFieldName("ZPC");//批次
DynamicFormBean quantityItem = dynamicFormAdapter.getItemByFieldName("quantity");//数量
if (LitePal.count(ProReqOrdeTaskBean.class) == 0) { if (LitePal.count(ProReqOrdeTaskBean.class) == 0) {
showError(getString(R.string.Please_scan_the_ticket_number_first)); showError(getString(R.string.Please_scan_the_ticket_number_first));
setNextFocus("AUFNR"); setNextFocus("AUFNR");
return; return;
} }
DynamicFormBean barcodeItem = dynamicFormAdapter.getItemByFieldName("barcode");
if (TextUtils.isEmpty(lgortItem.getValue())) {
showError(getString(R.string.Please_select_a_stock_location));
return;
}
String barcode = barcodeItem.getValue(); String barcode = barcodeItem.getValue();
if (TextUtils.isEmpty(barcode)) { if (TextUtils.isEmpty(barcode)) {
showError(getString(R.string.The_bar_code_cannot_be_blank)); showError(getString(R.string.The_bar_code_cannot_be_blank));
@ -473,16 +478,9 @@ public class ProReqActivity extends CommonFunctionActivity {
return; return;
} }
if (TextUtils.isEmpty(lZYWLXItem.getValue())) {
showError(getString(R.string.Please_select_a_business_type));
return;
}
if (TextUtils.isEmpty(lgortItem.getValue())) {
showError(getString(R.string.Please_select_a_stock_location));
return;
}
String value = quantityItem.getValue(); String value = quantityItem.getValue();
if (TextUtils.isEmpty(value)) { if (TextUtils.isEmpty(value)) {
setNextFocus("quantity");
showError(getString(R.string.The_quantity_cannot_be_empty)); showError(getString(R.string.The_quantity_cannot_be_empty));
return; return;
} }
@ -525,22 +523,22 @@ public class ProReqActivity extends CommonFunctionActivity {
detailBean.setErfmg(scanQuantity); detailBean.setErfmg(scanQuantity);
detailBean.setMatnr(bean.getMatnr()); detailBean.setMatnr(bean.getMatnr());
detailBean.setWerks(proReqOrderBean != null ? proReqOrderBean.getDwerk() : ""); detailBean.setWerks(proReqOrderBean != null ? proReqOrderBean.getDwerk() : "");
detailBean.setZcjbm(ZCJBMItem.getValue());
detailBean.setZgwh(ZGWHItem.getValue());
detailBean.setZcjbm("");
detailBean.setZgwh("");
detailBean.setZitemo(bean.getRspos()); detailBean.setZitemo(bean.getRspos());
detailBean.setZlysj(ZLYSJItem.getValue()); detailBean.setZlysj(ZLYSJItem.getValue());
detailBean.setZboxid(ZXTPCItem.getValue());
detailBean.setZpc(ZPCItem.getValue()); detailBean.setZpc(ZPCItem.getValue());
detailBean.setZreqlineid(""); detailBean.setZreqlineid("");
detailBean.setZsapdoc(""); detailBean.setZsapdoc("");
if (!TextUtils.isEmpty(lgortItem.getValue()) && lgortItem.getValue().contains(" ")) {
if (!TextUtils.isEmpty(lgortItem.getValue())) {
if (lgortItem.getValue().contains(" ")) {
String[] split = lgortItem.getValue().split(" "); String[] split = lgortItem.getValue().split(" ");
detailBean.setLgort(split[0]); detailBean.setLgort(split[0]);
detailBean.setLgortName(split[1]); detailBean.setLgortName(split[1]);
} else {
detailBean.setLgort(lgortItem.getValue());
} }
if (!TextUtils.isEmpty(lZYWLXItem.getValue()) && lZYWLXItem.getValue().contains(" ")) {
String[] split = lZYWLXItem.getValue().split(" ");
detailBean.setZywlx(split[0]);
detailBean.setZywlxName(split[1]);
} }
detailBean.save(); detailBean.save();
break; break;
@ -558,11 +556,7 @@ public class ProReqActivity extends CommonFunctionActivity {
} }
for (int i = 0; i < dynamicFormBeans.size(); i++) { for (int i = 0; i < dynamicFormBeans.size(); i++) {
DynamicFormBean dynamicFormBean = dynamicFormBeans.get(i); DynamicFormBean dynamicFormBean = dynamicFormBeans.get(i);
if (dynamicFormBean.getFieldName().equals("ZCJBM") ||
dynamicFormBean.getFieldName().equals("ZGWH") ||
dynamicFormBean.getFieldName().equals("AUFNR") ||
dynamicFormBean.getFieldName().equals("lgort") ||
dynamicFormBean.getFieldName().equals("ZYWLX") ||
if (dynamicFormBean.getFieldName().equals("AUFNR") ||
dynamicFormBean.getFieldName().equals("ZLYSJ")) { dynamicFormBean.getFieldName().equals("ZLYSJ")) {
continue; continue;
} }
@ -748,10 +742,6 @@ public class ProReqActivity extends CommonFunctionActivity {
public void clearRvData() { public void clearRvData() {
for (int i = 0; i < dynamicFormBeans.size(); i++) { for (int i = 0; i < dynamicFormBeans.size(); i++) {
DynamicFormBean dynamicFormBean = dynamicFormBeans.get(i); DynamicFormBean dynamicFormBean = dynamicFormBeans.get(i);
if (dynamicFormBean.getFieldName().equals("ZCJBM") ||
dynamicFormBean.getFieldName().equals("ZGWH")) {
continue;
}
dynamicFormBean.setValue(""); dynamicFormBean.setValue("");
if (dynamicFormBean.getType() == DynamicFormBean.TIME) { if (dynamicFormBean.getType() == DynamicFormBean.TIME) {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA);

566
app/src/main/java/com/techscan/wk/ui/proreq/ProReturnActivity.java

@ -0,0 +1,566 @@
package com.techscan.wk.ui.proreq;
import static com.techscan.wk.app.AppConst.CAMERA_CODE;
import static com.techscan.wk.app.AppConst.KEY_IS_CONTINUOUS;
import static com.techscan.wk.app.AppConst.KEY_TITLE;
import static com.techscan.wk.app.AppConst.REQUEST_CODE_SCAN_FOR_GROUP;
import android.Manifest;
import android.annotation.SuppressLint;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.DisplayMetrics;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import androidx.recyclerview.widget.DividerItemDecoration;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.bin.david.form.core.TableConfig;
import com.bin.david.form.data.CellInfo;
import com.bin.david.form.data.column.Column;
import com.bin.david.form.data.format.bg.BaseBackgroundFormat;
import com.bin.david.form.data.format.bg.BaseCellBackgroundFormat;
import com.bin.david.form.data.format.bg.IBackgroundFormat;
import com.bin.david.form.data.style.FontStyle;
import com.bin.david.form.data.table.TableData;
import com.blankj.utilcode.util.KeyboardUtils;
import com.blankj.utilcode.util.StringUtils;
import com.blankj.utilcode.util.ToastUtils;
import com.codbking.widget.DatePickDialog;
import com.codbking.widget.bean.DateType;
import com.google.gson.reflect.TypeToken;
import com.king.zxing.Intents;
import com.lxj.xpopup.XPopup;
import com.lxj.xpopup.core.BottomPopupView;
import com.qmuiteam.qmui.widget.QMUITopBar;
import com.qmuiteam.qmui.widget.dialog.QMUIDialog;
import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction;
import com.techscan.wk.R;
import com.techscan.wk.adapter.DynamicFormAdapter;
import com.techscan.wk.base.CommonFunctionActivity;
import com.techscan.wk.model.DetailShowBean;
import com.techscan.wk.model.DynamicFormBean;
import com.techscan.wk.model.ProReturnBean;
import com.techscan.wk.model.ReportWorkOffsetBean;
import com.techscan.wk.rxbus.Event;
import com.techscan.wk.rxbus.RxBus;
import com.techscan.wk.rxretrofit.BaseObserver;
import com.techscan.wk.rxretrofit.BaseResponseBean;
import com.techscan.wk.rxretrofit.HttpMethods;
import com.techscan.wk.ui.interfaces.ProReturnSaveListener;
import com.techscan.wk.ui.scan.CustomCaptureActivity;
import com.techscan.wk.utils.AntiShakeUtils;
import com.techscan.wk.utils.DateUtils;
import com.techscan.wk.utils.FindUtils;
import com.techscan.wk.utils.SoundUtils;
import com.techscan.wk.utils.ToastUtil;
import com.techscan.wk.utils.statusbar.StatusBarUtil;
import com.techscan.wk.widgets.DetailBottomSheet;
import com.techscan.wk.widgets.MySmartTable;
import com.techscan.wk.widgets.ProReturnBottomSheet;
import java.lang.reflect.Type;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import io.reactivex.disposables.Disposable;
import okhttp3.ResponseBody;
import q.rorbin.badgeview.QBadgeView;
/**
* 生产退料
*/
public class ProReturnActivity extends CommonFunctionActivity {
@BindView(R.id.topbar)
QMUITopBar topbar;
@BindView(R.id.rv_ui)
RecyclerView rvUi;
@BindView(R.id.smartTable)
MySmartTable<ProReturnBean> smartTable;
private Column<String> select;
private Column<String> AUFNR;
private Column<String> matnr;
private Column<String> erfmg;
private Column<String> zpc;
private Column<String> zlysj;
private DynamicFormAdapter dynamicFormAdapter;
private List<DynamicFormBean> dynamicFormBeans;
private DynamicFormBean selectDynamicFormBean;
private TableData<ProReturnBean> mTableData;
private List<ProReturnBean> list = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_pro_return);
ButterKnife.bind(this);
setBody(true);
Disposable register = RxBus.getInstance().register(Event.class, eventMsg -> {
});
RxBus.getInstance().addSubscription(this, register);
initTopBar();
initListeners();
initRvData();
initTableData();
rvUi.postDelayed(() -> {
setNextFocus("AUFNR");
}, 200);
}
private void initTableData() {
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
int screenWith = metrics.widthPixels;
TableConfig config = smartTable.getConfig();
FontStyle columnTitleStyle = config.getColumnTitleStyle();
columnTitleStyle.setTextSpSize(this, 16);
config.setMinTableWidth(screenWith);
config.setColumnTitleHorizontalPadding(8);
config.setColumnTitleVerticalPadding(12);
config.setVerticalPadding(12);
IBackgroundFormat backgroundFormat = new BaseBackgroundFormat(getResources().getColor(R.color.white_grey_3));
config.setColumnTitleBackground(backgroundFormat);
config.setShowXSequence(false);
config.setShowYSequence(false);
config.setShowTableTitle(false);
select = new Column<>(getString(R.string.choice), "select");
AUFNR = new Column<>(getString(R.string.Work_order_number), "aufnr");
matnr = new Column<>(getString(R.string.Material_number), "matnr");
erfmg = new Column<>(getString(R.string.num_title), "erfmg");
zpc = new Column<>(getString(R.string.batch), "zpc");
zlysj = new Column<>(getString(R.string.Claim_time), "zlysj");
select.setFixed(true);
select.setFast(true);
select.setMinWidth(110);
AUFNR.setFast(true);
matnr.setFast(true);
erfmg.setFast(true);
zpc.setFast(true);
zlysj.setFast(true);
//设置单个格子背景颜色
smartTable.getConfig().setContentCellBackgroundFormat(new BaseCellBackgroundFormat<CellInfo>() {
@Override
public int getBackGroundColor(CellInfo cellInfo) {
if ("select".equals(cellInfo.column.getFieldName())) {
return ContextCompat.getColor(ProReturnActivity.this, R.color.white_grey_3);
}
return TableConfig.INVALID_COLOR;
}
//根据背景颜色设置字体颜色
@Override
public int getTextColor(CellInfo cellInfo) {
if ("select".equals(cellInfo.column.getFieldName())) {
return ContextCompat.getColor(ProReturnActivity.this, R.color.app_color_theme_7);
} else {
return super.getTextColor(cellInfo);
}
}
});
setTableData();
}
private void saveData(ProReturnBean bean, int row) {
bean.setPickId(bean.getId());
bean.setZlysj("");
bean.setCreateTime("");
bean.setCreateUser(0);
bean.setZsapdoc("");
bean.setWerks("");
HttpMethods.getInstance().saveBackPick(gson.toJson(bean), new BaseObserver<ResponseBody>(this) {
@Override
protected void onSuccess(ResponseBody responseBody) throws Exception {
String string = responseBody.string();
Type objectType = new TypeToken<BaseResponseBean<String>>() {
}.getType();
BaseResponseBean<String> baseResponseBean = gson.fromJson(string, objectType);
if (baseResponseBean.getCode() == 200) {
new QMUIDialog.MessageDialogBuilder(context).setTitle(getResources().getString(R.string.tips_title))
.setCancelable(false)
.setMessage(getString(R.string.Data_saved_successfully))
.addAction(getResources().getString(R.string.cancel_info), (dialog, index) -> dialog.dismiss())
.addAction(getResources().getString(R.string.confirm_info), (dialog, index) -> {
dialog.dismiss();
})
.create(R.style.QMUI_Dialog).show();
query();
} else {
showError(baseResponseBean.getMsg());
}
}
@Override
protected void onFailure(Throwable e) throws Exception {
CustomErrorDialog(e, ProReturnActivity.this);
}
});
}
private void setTableData() {
for (int i = 0; i < list.size(); i++) {
list.get(i).setSelect(getString(R.string.return_of_material));
}
mTableData = new TableData<>("", list, select, AUFNR, matnr, erfmg, zpc, zlysj);
smartTable.setTableData(mTableData);
smartTable.invalidate();
smartTable.getTableData().setOnRowClickListener((column, proReturnBean, i, row) -> {
if (column.getFieldName().equals("select")) {
if (AntiShakeUtils.isInvalidClick2(smartTable, 1500))
return;
ProReturnBottomSheet detailBottomSheet = new ProReturnBottomSheet<>(context, getResources().getString(R.string.return_of_material), proReturnBean, (bean, proReturnBottomSheet) -> {
saveData(bean, row);
proReturnBottomSheet.dismiss();
});
new XPopup.Builder(context)
.moveUpToKeyboard(false) //如果不加这个,评论弹窗会移动到软键盘上面
.isRequestFocus(false)
.autoFocusEditText(false)
.autoOpenSoftInput(true)
.asCustom(detailBottomSheet)
.show();
}
});
}
/**
* 初始化顶部标题栏
*/
private void initTopBar() {
topbar.setTitle(getString(R.string.Production_return));
topbar.addLeftBackImageButton().setOnClickListener(v -> finishActivity());
}
/**
* 界面数据回调监听设置
*/
private void initListeners() {
}
/**
* 重新刷新ui
*/
@SuppressLint("SetTextI18n")
private void reInitUI() {
runOnUiThread(() -> {
dynamicFormAdapter.clearAllValues();
if (KeyboardUtils.isSoftInputVisible(context)) {
KeyboardUtils.hideSoftInput(context);
}
setNextFocus("AUFNR");
});
}
/**
* 初始化动态列表数据
*/
private void initRvData() {
// 从资源文件中读取界面数据
String jsonStr = FindUtils.readJsonFromFile(context, "ProReturnUI.json");
// 将读取到的json数据转化为动态表单对象
Type objectType = new TypeToken<List<DynamicFormBean>>() {
}.getType();
//动态表单数据
dynamicFormBeans = gson.fromJson(jsonStr, objectType);
for (int i = 0; i < dynamicFormBeans.size(); i++) {
DynamicFormBean dynamicFormBean = dynamicFormBeans.get(i);
if (dynamicFormBean.getFieldName().equals("TIME")) {
dynamicFormBean.setStartValue(DateUtils.getNowDate());
dynamicFormBean.setEndValue(DateUtils.getNowDate());
}
}
// 动态表单绑定数据并绑定适配器到recycleView中
dynamicFormAdapter = new DynamicFormAdapter(dynamicFormBeans, false, 0);
GridLayoutManager layout = new GridLayoutManager(this, 2);
layout.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
@Override
public int getSpanSize(int i) {
return dynamicFormBeans.get(i).getType() == 8 ? 1 : 2;
}
});
rvUi.setLayoutManager(layout);
rvUi.setAdapter(dynamicFormAdapter);
rvUi.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL));
// 设置动态表单点击事件
dynamicFormAdapter.setOnFormItemViewClickListener((dynamicFormBean, position, custom) -> {
if (custom.length > 0) {
if (custom[0].equals("scan")) {
selectDynamicFormBean = dynamicFormBean;
if (!hasPermission(Manifest.permission.CAMERA))
requestPermission(CAMERA_CODE, Manifest.permission.CAMERA);
else
startScan(getResources().getString(R.string.scan_title));
}
if (dynamicFormBean.getFieldName().equals("TIME")) {
chooseDate(dynamicFormBean.getFieldName(), custom[0], dynamicFormBean);
}
}
});
dynamicFormAdapter.setOnFormItemViewActionListener((dynamicFormBean, position) -> {
String value = dynamicFormBean.getValue();
switch (dynamicFormBean.getFieldName()) {
case "AUFNR":
if (KeyboardUtils.isSoftInputVisible(context)) {
KeyboardUtils.hideSoftInput(context);
}
query();
break;
default:
break;
}
});
}
private void query() {
DynamicFormBean TimeItem = dynamicFormAdapter.getItemByFieldName("TIME");//日期
String startValue = TimeItem.getStartValue();
String endValue = TimeItem.getEndValue();
DynamicFormBean aufnrItem = dynamicFormAdapter.getItemByFieldName("AUFNR");//工单
HttpMethods.getInstance().getPickList(aufnrItem.getValue(), startValue, endValue, new BaseObserver<ResponseBody>(context) {
@Override
protected void onSuccess(ResponseBody body) throws Exception {
String string = body.string();
Type objectType = new TypeToken<BaseResponseBean<List<ProReturnBean>>>() {
}.getType();
BaseResponseBean<List<ProReturnBean>> baseResponseBean = gson.fromJson(string, objectType);
if (baseResponseBean.getCode() == 200) {
list.clear();
if (baseResponseBean.getData().size() > 0) {
list.addAll(baseResponseBean.getData());
} else {
ToastUtils.showLong(getString(R.string.No_data_was_obtained));
}
setTableData();
} else {
list.clear();
setTableData();
showError(baseResponseBean.getMsg());
}
}
@Override
protected void onFailure(Throwable e) throws Exception {
list.clear();
setTableData();
CustomErrorDialog(e, ProReturnActivity.this);
}
});
}
@OnClick({R.id.iv_scan})
public void onViewClicked(View view) {
if (AntiShakeUtils.isInvalidClick(view))
return;
switch (view.getId()) {
case R.id.iv_scan:
//扫码
if (!hasPermission(Manifest.permission.CAMERA))
requestPermission(CAMERA_CODE, Manifest.permission.CAMERA);
else
startScan(getResources().getString(R.string.scan_title));
break;
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CODE_SCAN_FOR_GROUP) {
if (resultCode == RESULT_OK && data != null) {
String scanResult = data.getStringExtra(Intents.Scan.RESULT);
if (StringUtils.isTrimEmpty(scanResult)) {
SoundUtils.playSound(context, R.raw.warning);
ToastUtil.showShortToastCenter(context, getString(R.string.The_bar_code_cannot_be_blank));
return;
}
if (selectDynamicFormBean != null) {
selectDynamicFormBean.setValue(scanResult);
dynamicFormAdapter.setItemByFieldName(selectDynamicFormBean.getFieldName(), selectDynamicFormBean);
}
switch (selectDynamicFormBean.getFieldName()) {
case "invcode":
break;
}
}
}
}
private void showError(String msg) {
SoundUtils.playSound(context, R.raw.warning);
ToastUtil.showShortToastCenter(context, msg);
}
/**
* 扫码
*
* @param title 扫码标题
*/
private void startScan(String title) {
Intent intent = new Intent(context, CustomCaptureActivity.class);
intent.putExtra(KEY_TITLE, title);
intent.putExtra(KEY_IS_CONTINUOUS, false);
ActivityCompat.startActivityForResult(context, intent, REQUEST_CODE_SCAN_FOR_GROUP, null);
}
@Override
public void doRequestPermissionsResult(int requestCode, @NonNull int[] grantResults) {
// 读取手机信息权限
if (requestCode == CAMERA_CODE) {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED)
// 权限请求成功
startScan(getResources().getString(R.string.scan_title));
else
// 权限请求失败
Toast.makeText(context, getResources().getString(R.string.scan_no_permission), Toast.LENGTH_SHORT).show();
}
}
private void setNextFocus(String name) {
rvUi.postDelayed(() -> {
List<DynamicFormBean> data = dynamicFormAdapter.getData();
for (DynamicFormBean bean :
data) {
if (bean.getFieldName().equals(name)) {
bean.setValue("");
bean.setFocus(true);
} else {
bean.setFocus(false);
}
}
dynamicFormAdapter.notifyDataSetChanged();
}, 200);
}
private DatePickDialog dialog;
private void chooseDate(String fieldName, String type, DynamicFormBean dynamicFormBean) {
if (dialog != null && dialog.isShowing()) {
dialog.dismiss();
}
//时间选择器
dialog = new DatePickDialog(this);
//设置上下年分限制
dialog.setYearLimt(80);
//设置标题
dialog.setTitle(StringUtils.equals(type, "left") ? getString(R.string.Select_start_date) : getString(R.string.Select_due_date));
//设置类型
dialog.setType(DateType.TYPE_YMD);
//设置消息体的显示格式,日期格式
dialog.setMessageFormat("yyyy-MM-dd");
//设置开始日期
dialog.setStartDate(DateUtils.stringToDate(StringUtils.equals(type, "left") ? DateUtils.getNowDate() : DateUtils.getNowDate(), DateUtils.FORMAT_YEAR_MONTH_DAY));
//设置点击确定按钮回调
dialog.setOnSureLisener(date1 -> {
Date date = DateUtils.stringToDate(DateUtils.dateToString(date1, DateUtils.FORMAT_YEAR_MONTH_DAY), DateUtils.FORMAT_YEAR_MONTH_DAY);
switch (type) {
case "left"://选择订单开始日期
String endDateStr = dynamicFormBean.getEndValue();
if (!TextUtils.isEmpty(endDateStr)) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA);
Date endDate;
try {
endDate = format.parse(endDateStr);
int result = date.compareTo(endDate);
if (result > 0) {
ToastUtil.showShortToast(context, getString(R.string.The_start_date_cannot_be_longer_than_the_end_date));
SoundUtils.playSound(context, R.raw.warning);
return;
}
} catch (ParseException e) {
e.printStackTrace();
}
}
dynamicFormBean.setStartValue(DateUtils.dateToString(date, DateUtils.FORMAT_YEAR_MONTH_DAY));
break;
case "right"://选择订单结束日期
String startDateStr = dynamicFormBean.getStartValue();
if (!TextUtils.isEmpty(startDateStr)) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA);
Date startDate;
try {
startDate = format.parse(startDateStr);
int result = startDate.compareTo(date);
if (result > 0) {
ToastUtil.showShortToast(context, getString(R.string.The_deadline_cannot_be_less_than_the_start_date));
SoundUtils.playSound(context, R.raw.warning);
return;
}
} catch (ParseException e) {
e.printStackTrace();
}
}
dynamicFormBean.setEndValue(DateUtils.dateToString(date, DateUtils.FORMAT_YEAR_MONTH_DAY));
break;
default:
break;
}
dynamicFormAdapter.setItemByFieldName(fieldName, dynamicFormBean);
});
dialog.show();
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
finishActivity();
return true;
}
return super.onKeyDown(keyCode, event);
}
private void finishActivity() {
finish();
}
@Override
protected void onDestroy() {
RxBus.getInstance().unRegister(this);
super.onDestroy();
}
}

65
app/src/main/java/com/techscan/wk/ui/reportwork/ConfigSettingActivity.java

@ -0,0 +1,65 @@
package com.techscan.wk.ui.reportwork;
import android.net.Uri;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Switch;
import androidx.core.content.ContextCompat;
import com.qmuiteam.qmui.widget.QMUITopBar;
import com.techscan.wk.R;
import com.techscan.wk.app.AppConst;
import com.techscan.wk.base.BaseActivity;
import com.techscan.wk.rxretrofit.HttpMethods;
import com.techscan.wk.utils.AntiShakeUtils;
import com.techscan.wk.utils.PreferencesUtil;
import com.techscan.wk.utils.ToastUtil;
import com.techscan.wk.utils.statusbar.StatusBarUtil;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
/**
* 设置
*/
public class ConfigSettingActivity extends BaseActivity {
@BindView(R.id.topbar)
QMUITopBar topbar;
@BindView(R.id.swAutoInsertDetail)
Switch swAutoInsertDetail;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_config_setting);
ButterKnife.bind(this);
boolean aBoolean = PreferencesUtil.getBoolean(context, AppConst.SCAN_ADD_DETAIL, true);
swAutoInsertDetail.setChecked(aBoolean);
initTopBar();
initSwitch();
}
/**
* 初始化标题栏
*/
private void initTopBar() {
topbar.setTitle(getString(R.string.configuration));
topbar.addLeftBackImageButton().setOnClickListener(v -> finish());
}
private void initSwitch() {
swAutoInsertDetail.setOnCheckedChangeListener((buttonView, isChecked) -> {
PreferencesUtil.putBoolean(this, AppConst.SCAN_ADD_DETAIL, isChecked);
});
}
}

134
app/src/main/java/com/techscan/wk/ui/reportwork/FlowReportWorkActivity.java

@ -151,7 +151,7 @@ public class FlowReportWorkActivity extends CommonFunctionActivity {
initListeners(); initListeners();
initRvData(); initRvData();
rvUi.postDelayed(() -> { rvUi.postDelayed(() -> {
setNextFocus("AUFNR");
setNextFocus("FlowOrder");
}, 100); }, 100);
} }
@ -175,7 +175,7 @@ public class FlowReportWorkActivity extends CommonFunctionActivity {
* 重新刷新ui * 重新刷新ui
*/ */
@SuppressLint("SetTextI18n") @SuppressLint("SetTextI18n")
private void reInitUI(boolean isReportWork, String scanRule) {
private void reInitUI(String scanRule) {
runOnUiThread(() -> { runOnUiThread(() -> {
SoundUtils.playSound(this, R.raw.ok); SoundUtils.playSound(this, R.raw.ok);
if (KeyboardUtils.isSoftInputVisible(context)) { if (KeyboardUtils.isSoftInputVisible(context)) {
@ -184,8 +184,7 @@ public class FlowReportWorkActivity extends CommonFunctionActivity {
for (int i = 0; i < dynamicFormBeans.size(); i++) { for (int i = 0; i < dynamicFormBeans.size(); i++) {
DynamicFormBean dynamicFormBean = dynamicFormBeans.get(i); DynamicFormBean dynamicFormBean = dynamicFormBeans.get(i);
if (dynamicFormBean.getFieldName().equals("AUFNR") || if (dynamicFormBean.getFieldName().equals("AUFNR") ||
dynamicFormBean.getFieldName().equals("ScanRule") ||
dynamicFormBean.getFieldName().equals("VORNR")) {
dynamicFormBean.getFieldName().equals("ScanRule")) {
continue; continue;
} else if (dynamicFormBean.getFieldName().equals("FlowOrder")) { } else if (dynamicFormBean.getFieldName().equals("FlowOrder")) {
if (!TextUtils.isEmpty(scanRule) && scanRule.equals(items[0])) { if (!TextUtils.isEmpty(scanRule) && scanRule.equals(items[0])) {
@ -195,15 +194,11 @@ public class FlowReportWorkActivity extends CommonFunctionActivity {
dynamicFormBean.setValue(""); dynamicFormBean.setValue("");
} }
showDetailBadgeNum(); showDetailBadgeNum();
if (isReportWork) {
if (scanRule.equals(items[1])) { if (scanRule.equals(items[1])) {
setNextFocus("FlowOrder"); setNextFocus("FlowOrder");
} else { } else {
setNextFocus("PacketBarcode"); setNextFocus("PacketBarcode");
} }
} else {
setNextFocus("XMNGA");
}
}); });
} }
@ -354,35 +349,34 @@ public class FlowReportWorkActivity extends CommonFunctionActivity {
switch (dynamicFormBean.getFieldName()) { switch (dynamicFormBean.getFieldName()) {
case "AUFNR": case "AUFNR":
DynamicFormBean scanRuleItem = dynamicFormAdapter.getItemByFieldName("ScanRule"); DynamicFormBean scanRuleItem = dynamicFormAdapter.getItemByFieldName("ScanRule");
String value1 = scanRuleItem.getValue();
if (TextUtils.isEmpty(value1)) {
dynamicFormAdapter.setFocusAndClearValueById(dynamicFormBean.getId());
showError(getString(R.string.Select_a_scan_rule_first));
return;
}
// String value1 = scanRuleItem.getValue();
// if (TextUtils.isEmpty(value1)) {
// dynamicFormAdapter.setFocusAndClearValueById(dynamicFormBean.getId());
// showError(getString(R.string.Select_a_scan_rule_first));
// return;
// }
if (TextUtils.isEmpty(value)) { if (TextUtils.isEmpty(value)) {
showError(getString(R.string.The_work_order_number_cannot_be_empty)); showError(getString(R.string.The_work_order_number_cannot_be_empty));
return; return;
} }
dynamicFormBean.setCanChange(false); dynamicFormBean.setCanChange(false);
dynamicFormAdapter.notifyDataSetChanged(); dynamicFormAdapter.notifyDataSetChanged();
setNextFocus("VORNR");
break;
case "VORNR":
if (TextUtils.isEmpty(value)) {
showError(getString(R.string.The_process_number_cannot_be_empty));
return;
}
dynamicFormBean.setCanChange(false);
dynamicFormAdapter.notifyDataSetChanged();
setNextFocus("FlowOrder"); setNextFocus("FlowOrder");
break; break;
case "FlowOrder": case "FlowOrder":
DynamicFormBean AUFNRItem = dynamicFormAdapter.getItemByFieldName("AUFNR"); DynamicFormBean AUFNRItem = dynamicFormAdapter.getItemByFieldName("AUFNR");
if (TextUtils.isEmpty(AUFNRItem.getValue())) {
showError(getString(R.string.The_work_order_number_cannot_be_empty));
// if (TextUtils.isEmpty(AUFNRItem.getValue())) {
// showError(getString(R.string.The_work_order_number_cannot_be_empty));
// return;
// }
scanRuleItem = dynamicFormAdapter.getItemByFieldName("ScanRule");
if (TextUtils.isEmpty(scanRuleItem.getValue())) {
dynamicFormAdapter.setFocusAndClearValueById(dynamicFormBean.getId());
showError(getString(R.string.Select_a_scan_rule_first));
return; return;
} }
if (TextUtils.isEmpty(value)) { if (TextUtils.isEmpty(value)) {
showError(getString(R.string.The_flow_order_number_cannot_be_empty)); showError(getString(R.string.The_flow_order_number_cannot_be_empty));
return; return;
@ -392,14 +386,20 @@ public class FlowReportWorkActivity extends CommonFunctionActivity {
int t = value.indexOf("T"); int t = value.indexOf("T");
String substring = value.substring(t + 1, 9); String substring = value.substring(t + 1, 9);
String aufnrItemValue = AUFNRItem.getValue(); String aufnrItemValue = AUFNRItem.getValue();
if (TextUtils.isEmpty(aufnrItemValue)) {
AUFNRItem.setValue(substring);
AUFNRItem.setCanChange(false);
dynamicFormAdapter.setItemByFieldName(AUFNRItem.getFieldName(), AUFNRItem);
dynamicFormAdapter.notifyDataSetChanged();
} else {
if (!substring.equals(aufnrItemValue)) { if (!substring.equals(aufnrItemValue)) {
ToastUtils.showLong(R.string.order_number_in_the_flow_order_is_inconsistent); ToastUtils.showLong(R.string.order_number_in_the_flow_order_is_inconsistent);
dynamicFormAdapter.setFocusById(dynamicFormBean.getId()); dynamicFormAdapter.setFocusById(dynamicFormBean.getId());
return; return;
} }
} }
}
scanRuleItem = dynamicFormAdapter.getItemByFieldName("ScanRule");
if (TextUtils.isEmpty(scanRuleItem.getValue())) { if (TextUtils.isEmpty(scanRuleItem.getValue())) {
setNextFocus(dynamicFormBean.getFieldName()); setNextFocus(dynamicFormBean.getFieldName());
showError(getString(R.string.Select_a_scan_rule_first)); showError(getString(R.string.Select_a_scan_rule_first));
@ -471,37 +471,31 @@ public class FlowReportWorkActivity extends CommonFunctionActivity {
break; break;
//报工数量 //报工数量
case "GMNGA": case "GMNGA":
addDetail(true);
addDetail();
break; break;
//报废数量
case "XMNGA":
addDetail(false);
default:
break; break;
} }
}); });
} }
/**
* @param isReportWork ==true 是报工否则是报废
*/
private void addDetail(boolean isReportWork) {
private void addDetail() {
DynamicFormBean ScanRuleItem = dynamicFormAdapter.getItemByFieldName("ScanRule");//扫描规则 DynamicFormBean ScanRuleItem = dynamicFormAdapter.getItemByFieldName("ScanRule");//扫描规则
String gid = System.currentTimeMillis() + ""; String gid = System.currentTimeMillis() + "";
DynamicFormBean aufnrItem = dynamicFormAdapter.getItemByFieldName("AUFNR");//工单 DynamicFormBean aufnrItem = dynamicFormAdapter.getItemByFieldName("AUFNR");//工单
DynamicFormBean vornrItem = dynamicFormAdapter.getItemByFieldName("VORNR");//工序
DynamicFormBean PacketBarcodeItem = dynamicFormAdapter.getItemByFieldName("PacketBarcode");//包条码
DynamicFormBean flowOrderItem = dynamicFormAdapter.getItemByFieldName("FlowOrder");//流转单 DynamicFormBean flowOrderItem = dynamicFormAdapter.getItemByFieldName("FlowOrder");//流转单
DynamicFormBean PacketBarcodeItem = dynamicFormAdapter.getItemByFieldName("PacketBarcode");//包条码
DynamicFormBean gmngaItem = dynamicFormAdapter.getItemByFieldName("GMNGA");//报工数量 DynamicFormBean gmngaItem = dynamicFormAdapter.getItemByFieldName("GMNGA");//报工数量
DynamicFormBean xmngaItem = dynamicFormAdapter.getItemByFieldName("XMNGA");//报废数量
DynamicFormBean grundItem = dynamicFormAdapter.getItemByFieldName("GRUND");//原因代码
DynamicFormBean MATNRItem = dynamicFormAdapter.getItemByFieldName("MATNR");//物料号
DynamicFormBean ZXTPCItem = dynamicFormAdapter.getItemByFieldName("ZXTPC");//箱号 DynamicFormBean ZXTPCItem = dynamicFormAdapter.getItemByFieldName("ZXTPC");//箱号
DynamicFormBean ZPCItem = dynamicFormAdapter.getItemByFieldName("ZPC");//批次
String barcode = PacketBarcodeItem.getValue(); String barcode = PacketBarcodeItem.getValue();
if (TextUtils.isEmpty(aufnrItem.getValue())) { if (TextUtils.isEmpty(aufnrItem.getValue())) {
setNextFocus("AUFNR"); setNextFocus("AUFNR");
showError(getString(R.string.The_work_order_number_cannot_be_empty)); showError(getString(R.string.The_work_order_number_cannot_be_empty));
return; return;
} }
if (isReportWork) {
if (TextUtils.isEmpty(gmngaItem.getValue())) { if (TextUtils.isEmpty(gmngaItem.getValue())) {
showError(getString(R.string.The_number_of_reports_cannot_be_empty)); showError(getString(R.string.The_number_of_reports_cannot_be_empty));
setNextFocus("GMNGA"); setNextFocus("GMNGA");
@ -522,26 +516,6 @@ public class FlowReportWorkActivity extends CommonFunctionActivity {
setNextFocus("PacketBarcode"); setNextFocus("PacketBarcode");
return; return;
} }
} else {
if (TextUtils.isEmpty(grundItem.getValue())) {
showError(getString(R.string.The_cause_code_cannot_be_empty));
return;
}
if (TextUtils.isEmpty(xmngaItem.getValue())) {
showError(getString(R.string.The_scrap_number_cannot_be_empty));
setNextFocus("XMNGA");
return;
}
if (xmngaItem.getValue().equals("0")) {
showError(getString(R.string.The_scrap_quantity_cannot_be_0_or_less));
setNextFocus("XMNGA");
}
if (Double.parseDouble(xmngaItem.getValue()) < 0) {
showError(getString(R.string.The_scrap_quantity_cannot_be_0_or_less));
setNextFocus("XMNGA");
return;
}
}
//如果规则是多个流转单一个箱码 //如果规则是多个流转单一个箱码
if (ScanRuleItem.getValue().equals(items[1])) { if (ScanRuleItem.getValue().equals(items[1])) {
@ -565,24 +539,14 @@ public class FlowReportWorkActivity extends CommonFunctionActivity {
FlowReportWorkDetailBean bean = new FlowReportWorkDetailBean(); FlowReportWorkDetailBean bean = new FlowReportWorkDetailBean();
bean.setGid(gid); bean.setGid(gid);
bean.setAufnr(aufnrItem.getValue()); bean.setAufnr(aufnrItem.getValue());
bean.setVornr(vornrItem.getValue());
bean.setVornr("");
bean.setZxtpc(ZXTPCItem.getValue()); bean.setZxtpc(ZXTPCItem.getValue());
bean.setFlowOrders(flowOrderItem.getValue()); bean.setFlowOrders(flowOrderItem.getValue());
bean.setFlowOrders(flowOrderSb.substring(0, flowOrderSb.length() - 1)); bean.setFlowOrders(flowOrderSb.substring(0, flowOrderSb.length() - 1));
if (isReportWork) {
bean.setPacketBarcode(barcode); bean.setPacketBarcode(barcode);
bean.setGmnga(gmngaItem.getValue()); bean.setGmnga(gmngaItem.getValue());
bean.setXmnga(""); bean.setXmnga("");
bean.setGrund(""); bean.setGrund("");
} else {
bean.setPacketBarcode("");
bean.setGmnga("");
bean.setXmnga(xmngaItem.getValue());
if (!TextUtils.isEmpty(grundItem.getValue()) && grundItem.getValue().contains(" ")) {
String[] split = grundItem.getValue().split(" ");
bean.setGrund(split[0]);
}
}
boolean save = bean.save(); boolean save = bean.save();
if (save) { if (save) {
LitePal.deleteAll(FlowOrderDetailBean.class); LitePal.deleteAll(FlowOrderDetailBean.class);
@ -592,7 +556,7 @@ public class FlowReportWorkActivity extends CommonFunctionActivity {
keyBarcodes.add(barcode); keyBarcodes.add(barcode);
scanBarcodeListMap.put(gid, keyBarcodes); scanBarcodeListMap.put(gid, keyBarcodes);
reInitUI(isReportWork, ScanRuleItem.getValue());
reInitUI(ScanRuleItem.getValue());
} else { } else {
showError(getString(R.string.Failed_to_join_details)); showError(getString(R.string.Failed_to_join_details));
} }
@ -609,23 +573,13 @@ public class FlowReportWorkActivity extends CommonFunctionActivity {
FlowReportWorkDetailBean bean = new FlowReportWorkDetailBean(); FlowReportWorkDetailBean bean = new FlowReportWorkDetailBean();
bean.setGid(gid); bean.setGid(gid);
bean.setAufnr(aufnrItem.getValue()); bean.setAufnr(aufnrItem.getValue());
bean.setVornr(vornrItem.getValue());
bean.setVornr("");
bean.setZxtpc(ZXTPCItem.getValue()); bean.setZxtpc(ZXTPCItem.getValue());
bean.setFlowOrders(flowOrderItem.getValue()); bean.setFlowOrders(flowOrderItem.getValue());
if (isReportWork) {
bean.setPacketBarcode(barcode); bean.setPacketBarcode(barcode);
bean.setGmnga(gmngaItem.getValue()); bean.setGmnga(gmngaItem.getValue());
bean.setXmnga(""); bean.setXmnga("");
bean.setGrund(""); bean.setGrund("");
} else {
bean.setPacketBarcode("");
bean.setGmnga("");
bean.setXmnga(xmngaItem.getValue());
if (!TextUtils.isEmpty(grundItem.getValue()) && grundItem.getValue().contains(" ")) {
String[] split = grundItem.getValue().split(" ");
bean.setGrund(split[0]);
}
}
boolean save = bean.save(); boolean save = bean.save();
if (save) { if (save) {
//将当前条码存入对应的条码扫描明细中 //将当前条码存入对应的条码扫描明细中
@ -633,7 +587,7 @@ public class FlowReportWorkActivity extends CommonFunctionActivity {
keyBarcodes.add(barcode); keyBarcodes.add(barcode);
scanBarcodeListMap.put(gid, keyBarcodes); scanBarcodeListMap.put(gid, keyBarcodes);
reInitUI(isReportWork, ScanRuleItem.getValue());
reInitUI(ScanRuleItem.getValue());
} else { } else {
showError(getString(R.string.Failed_to_join_details)); showError(getString(R.string.Failed_to_join_details));
} }
@ -647,10 +601,18 @@ public class FlowReportWorkActivity extends CommonFunctionActivity {
AnalysisBarBean bean = BarAnalysisUtils.analysisBarcode(value); AnalysisBarBean bean = BarAnalysisUtils.analysisBarcode(value);
for (DynamicFormBean d : dynamicFormBeans) { for (DynamicFormBean d : dynamicFormBeans) {
switch (d.getFieldName()) { switch (d.getFieldName()) {
case "ZXTPC"://包装容器号
case "MATNR"://物料号
d.setValue(bean.getMateriel());
d.setFocus(false);
break;
case "ZXTPC"://包装容器号 --箱号
d.setValue(bean.getPackageNumber()); d.setValue(bean.getPackageNumber());
d.setFocus(false); d.setFocus(false);
break; break;
case "ZPC"://批次
d.setValue(bean.getBatch());
d.setFocus(false);
break;
case "GMNGA"://报工数量 case "GMNGA"://报工数量
d.setValue(bean.getQuantity()); d.setValue(bean.getQuantity());
d.setFocus(false); d.setFocus(false);
@ -665,7 +627,7 @@ public class FlowReportWorkActivity extends CommonFunctionActivity {
new Handler().postDelayed(new Runnable() { new Handler().postDelayed(new Runnable() {
@Override @Override
public void run() { public void run() {
addDetail(true);
addDetail();
} }
}, 300); }, 300);
@ -787,7 +749,7 @@ public class FlowReportWorkActivity extends CommonFunctionActivity {
showDetailBadgeNum(); showDetailBadgeNum();
showOrderDetailBadgeNum(); showOrderDetailBadgeNum();
scanBarcodeListMap = new HashMap<>(); scanBarcodeListMap = new HashMap<>();
setNextFocus("AUFNR");
setNextFocus("FlowOrder");
} else { } else {
showError(baseResponseBean.getMsg()); showError(baseResponseBean.getMsg());
} }

20
app/src/main/java/com/techscan/wk/ui/reportwork/ReportWorkErrorListActivity.java

@ -110,9 +110,7 @@ public class ReportWorkErrorListActivity extends CommonFunctionActivity {
@BindView(R.id.smartTable) @BindView(R.id.smartTable)
MySmartTable<ReportWorkErrorInfoBean> smartTable; MySmartTable<ReportWorkErrorInfoBean> smartTable;
private Column<Boolean> select; private Column<Boolean> select;
private Column<String> XMNGA;
private Column<String> AUFNR; private Column<String> AUFNR;
private Column<String> vornr;
private Column<String> GMNGA; private Column<String> GMNGA;
@ -165,16 +163,12 @@ public class ReportWorkErrorListActivity extends CommonFunctionActivity {
config.setShowTableTitle(false); config.setShowTableTitle(false);
select = new Column<>(getString(R.string.select_all), "select"); select = new Column<>(getString(R.string.select_all), "select");
AUFNR = new Column<>(getString(R.string.Work_order_number), "aufnr"); AUFNR = new Column<>(getString(R.string.Work_order_number), "aufnr");
vornr = new Column<>(getString(R.string.Operation_number), "vornr");
GMNGA = new Column<>(getString(R.string.Quantity_reported), "gmnga"); GMNGA = new Column<>(getString(R.string.Quantity_reported), "gmnga");
XMNGA = new Column<>(getString(R.string.Scrap_quantity), "xmnga");
select.setFixed(true); select.setFixed(true);
select.setFast(true); select.setFast(true);
select.setMinWidth(90); select.setMinWidth(90);
AUFNR.setFast(true); AUFNR.setFast(true);
vornr.setFast(true);
GMNGA.setFast(true); GMNGA.setFast(true);
XMNGA.setFast(true);
final int imgSize = DensityUtils.dp2px(this, 20); final int imgSize = DensityUtils.dp2px(this, 20);
select.setDrawFormat(new ImageResDrawFormat<Boolean>(imgSize, imgSize) { select.setDrawFormat(new ImageResDrawFormat<Boolean>(imgSize, imgSize) {
@ -270,7 +264,7 @@ public class ReportWorkErrorListActivity extends CommonFunctionActivity {
} }
private void setTableData() { private void setTableData() {
mTableData = new TableData<>("", list, select, AUFNR, vornr, GMNGA, XMNGA);
mTableData = new TableData<>("", list, select, AUFNR, GMNGA);
smartTable.setTableData(mTableData); smartTable.setTableData(mTableData);
smartTable.invalidate(); smartTable.invalidate();
} }
@ -360,9 +354,9 @@ public class ReportWorkErrorListActivity extends CommonFunctionActivity {
String value = dynamicFormBean.getValue(); String value = dynamicFormBean.getValue();
switch (dynamicFormBean.getFieldName()) { switch (dynamicFormBean.getFieldName()) {
case "AUFNR": case "AUFNR":
setNextFocus("VORNR");
break;
case "VORNR":
if (KeyboardUtils.isSoftInputVisible(context)) {
KeyboardUtils.hideSoftInput(context);
}
query(currentPage = 1, false); query(currentPage = 1, false);
break; break;
} }
@ -379,9 +373,7 @@ public class ReportWorkErrorListActivity extends CommonFunctionActivity {
private void query(int currentpage, boolean isLoadMore) { private void query(int currentpage, boolean isLoadMore) {
DynamicFormBean TimeItem = dynamicFormAdapter.getItemByFieldName("TIME");//日期 DynamicFormBean TimeItem = dynamicFormAdapter.getItemByFieldName("TIME");//日期
DynamicFormBean aufnrItem = dynamicFormAdapter.getItemByFieldName("AUFNR");//工单 DynamicFormBean aufnrItem = dynamicFormAdapter.getItemByFieldName("AUFNR");//工单
DynamicFormBean vornrItem = dynamicFormAdapter.getItemByFieldName("VORNR");//工序
HttpMethods.getInstance().getError(aufnrItem.getValue(), vornrItem.getValue(),
currentpage, pageSize,
HttpMethods.getInstance().getError(aufnrItem.getValue(), "", currentpage, pageSize,
TimeItem.getStartValue(), TimeItem.getEndValue(), new BaseObserver<ResponseBody>() { TimeItem.getStartValue(), TimeItem.getEndValue(), new BaseObserver<ResponseBody>() {
@Override @Override
protected void onSuccess(ResponseBody responseBody) throws Exception { protected void onSuccess(ResponseBody responseBody) throws Exception {
@ -404,6 +396,8 @@ public class ReportWorkErrorListActivity extends CommonFunctionActivity {
List<ReportWorkErrorInfoBean> records = data.getRecords(); List<ReportWorkErrorInfoBean> records = data.getRecords();
if (!isLoadMore) { if (!isLoadMore) {
if (records.size() == 0)
ToastUtils.showLong(getString(R.string.No_data_was_obtained));
select.setColumnName(getString(R.string.select_all)); select.setColumnName(getString(R.string.select_all));
list.clear(); list.clear();
list.addAll(records); list.addAll(records);

21
app/src/main/java/com/techscan/wk/ui/reportwork/ReportWorkOffsetActivity.java

@ -95,9 +95,7 @@ public class ReportWorkOffsetActivity extends CommonFunctionActivity {
@BindView(R.id.smartTable) @BindView(R.id.smartTable)
MySmartTable<ReportWorkOffsetBean> smartTable; MySmartTable<ReportWorkOffsetBean> smartTable;
private Column<String> select; private Column<String> select;
private Column<String> XMNGA;
private Column<String> AUFNR; private Column<String> AUFNR;
private Column<String> vornr;
private Column<String> GMNGA; private Column<String> GMNGA;
@ -156,9 +154,7 @@ public class ReportWorkOffsetActivity extends CommonFunctionActivity {
select = new Column<>(getString(R.string.choice), "select"); select = new Column<>(getString(R.string.choice), "select");
AUFNR = new Column<>(getString(R.string.Work_order_number), "aufnr"); AUFNR = new Column<>(getString(R.string.Work_order_number), "aufnr");
vornr = new Column<>(getString(R.string.Operation_number), "vornr");
GMNGA = new Column<>(getString(R.string.Quantity_reported), "gmnga"); GMNGA = new Column<>(getString(R.string.Quantity_reported), "gmnga");
XMNGA = new Column<>(getString(R.string.Scrap_quantity), "xmnga");
select.setFixed(true); select.setFixed(true);
@ -166,7 +162,7 @@ public class ReportWorkOffsetActivity extends CommonFunctionActivity {
select.setMinWidth(110); select.setMinWidth(110);
AUFNR.setFast(true); AUFNR.setFast(true);
GMNGA.setFast(true); GMNGA.setFast(true);
XMNGA.setFast(true);
//设置单个格子背景颜色 //设置单个格子背景颜色
smartTable.getConfig().setContentCellBackgroundFormat(new BaseCellBackgroundFormat<CellInfo>() { smartTable.getConfig().setContentCellBackgroundFormat(new BaseCellBackgroundFormat<CellInfo>() {
@ -233,7 +229,7 @@ public class ReportWorkOffsetActivity extends CommonFunctionActivity {
for (int i = 0; i < list.size(); i++) { for (int i = 0; i < list.size(); i++) {
list.get(i).setSelect(getString(R.string.write_off)); list.get(i).setSelect(getString(R.string.write_off));
} }
mTableData = new TableData<>("", list, select, AUFNR, vornr, GMNGA, XMNGA);
mTableData = new TableData<>("", list, select, AUFNR, GMNGA);
smartTable.setTableData(mTableData); smartTable.setTableData(mTableData);
smartTable.invalidate(); smartTable.invalidate();
smartTable.getTableData().setOnRowClickListener((column, reportWorkOffsetBean, i, row) -> { smartTable.getTableData().setOnRowClickListener((column, reportWorkOffsetBean, i, row) -> {
@ -350,14 +346,8 @@ public class ReportWorkOffsetActivity extends CommonFunctionActivity {
dynamicFormAdapter.setFocusById(dynamicFormBean.getId()); dynamicFormAdapter.setFocusById(dynamicFormBean.getId());
return; return;
} }
setNextFocus("VORNR");
break;
case "VORNR":
DynamicFormBean formBean = dynamicFormAdapter.getItemByFieldName("AUFNR");
if (TextUtils.isEmpty(formBean.getValue())) {
showError(getString(R.string.The_work_order_number_cannot_be_empty));
setNextFocus("AUFNR");
return;
if (KeyboardUtils.isSoftInputVisible(context)) {
KeyboardUtils.hideSoftInput(context);
} }
query(); query();
break; break;
@ -369,9 +359,8 @@ public class ReportWorkOffsetActivity extends CommonFunctionActivity {
private void query() { private void query() {
DynamicFormBean aufnrItem = dynamicFormAdapter.getItemByFieldName("AUFNR");//工单 DynamicFormBean aufnrItem = dynamicFormAdapter.getItemByFieldName("AUFNR");//工单
DynamicFormBean vornrItem = dynamicFormAdapter.getItemByFieldName("VORNR");//工序
HttpMethods.getInstance().getReport(aufnrItem.getValue(), HttpMethods.getInstance().getReport(aufnrItem.getValue(),
vornrItem.getValue(), new BaseObserver<ResponseBody>(context) {
"", new BaseObserver<ResponseBody>(context) {
@Override @Override
protected void onSuccess(ResponseBody body) throws Exception { protected void onSuccess(ResponseBody body) throws Exception {
String string = body.string(); String string = body.string();

21
app/src/main/java/com/techscan/wk/widgets/CustomBottomSheet.java

@ -129,13 +129,12 @@ public class CustomBottomSheet<T> extends BottomPopupView {
//holder.setText(R.id.name, ((FlowReportWorkDetailBean) infoBean).getFlowOrders()); //holder.setText(R.id.name, ((FlowReportWorkDetailBean) infoBean).getFlowOrders());
holder.setText(R.id.detail, holder.setText(R.id.detail,
getContext().getString(R.string.Work_order_number) + getContext().getString(R.string.semicolon) + ((FlowReportWorkDetailBean) infoBean).getAufnr() + "\n" + getContext().getString(R.string.Work_order_number) + getContext().getString(R.string.semicolon) + ((FlowReportWorkDetailBean) infoBean).getAufnr() + "\n" +
getContext().getString(R.string.Operation_number) + getContext().getString(R.string.semicolon) + ((FlowReportWorkDetailBean) infoBean).getVornr() + "\n" +
getContext().getString(R.string.Flow_order_number) + getContext().getString(R.string.semicolon) + ((FlowReportWorkDetailBean) infoBean).getFlowOrders() + "\n" + getContext().getString(R.string.Flow_order_number) + getContext().getString(R.string.semicolon) + ((FlowReportWorkDetailBean) infoBean).getFlowOrders() + "\n" +
getContext().getString(R.string.Packet_barcode) + getContext().getString(R.string.semicolon) + ((FlowReportWorkDetailBean) infoBean).getPacketBarcode() + "\n" + getContext().getString(R.string.Packet_barcode) + getContext().getString(R.string.semicolon) + ((FlowReportWorkDetailBean) infoBean).getPacketBarcode() + "\n" +
getContext().getString(R.string.Case_number) + getContext().getString(R.string.semicolon) + ((FlowReportWorkDetailBean) infoBean).getZxtpc() + "\n" + getContext().getString(R.string.Case_number) + getContext().getString(R.string.semicolon) + ((FlowReportWorkDetailBean) infoBean).getZxtpc() + "\n" +
getContext().getString(R.string.Quantity_reported) + getContext().getString(R.string.semicolon) + ((FlowReportWorkDetailBean) infoBean).getGmnga() + "\n" +
getContext().getString(R.string.Reason_code) + getContext().getString(R.string.semicolon) + ((FlowReportWorkDetailBean) infoBean).getGrund() + "\n" +
getContext().getString(R.string.Scrap_quantity) + getContext().getString(R.string.semicolon) + ((FlowReportWorkDetailBean) infoBean).getXmnga() + "\n"
getContext().getString(R.string.batch) + getContext().getString(R.string.semicolon) + ((FlowReportWorkDetailBean) infoBean).getZpc() + "\n" +
getContext().getString(R.string.Quantity_reported) + getContext().getString(R.string.semicolon) + ((FlowReportWorkDetailBean) infoBean).getGmnga() + "\n"
); );
} else if (infoBean instanceof FlowOrderDetailBean) { } else if (infoBean instanceof FlowOrderDetailBean) {
holder.getView(R.id.name).setVisibility(GONE); holder.getView(R.id.name).setVisibility(GONE);
@ -152,15 +151,15 @@ public class CustomBottomSheet<T> extends BottomPopupView {
); );
} else if (infoBean instanceof ProReqDetailBean) { } else if (infoBean instanceof ProReqDetailBean) {
holder.setText(R.id.name, ((ProReqDetailBean) infoBean).getAufnr());
holder.setText(R.id.name, ((ProReqDetailBean) infoBean).getMatnr());
holder.setText(R.id.detail, holder.setText(R.id.detail,
getContext().getString(R.string.num_title) + getContext().getString(R.string.semicolon) + ((ProReqDetailBean) infoBean).getErfmg() + "\n" +
getContext().getString(R.string.unit_title) + getContext().getString(R.string.semicolon) + ((ProReqDetailBean) infoBean).getErfme() + "\n" +
getContext().getString(R.string.batch) + getContext().getString(R.string.semicolon) + ((ProReqDetailBean) infoBean).getZpc() + "\n" +
getContext().getString(R.string.Shop_coding) + getContext().getString(R.string.semicolon) + ((ProReqDetailBean) infoBean).getZcjbm() + "\n" +
getContext().getString(R.string.Claim_time) + getContext().getString(R.string.semicolon) + ((ProReqDetailBean) infoBean).getZlysj() + "\n" +
getContext().getString(R.string.Stock_location) + getContext().getString(R.string.semicolon) + ((ProReqDetailBean) infoBean).getLgortName() + "\n" + getContext().getString(R.string.Stock_location) + getContext().getString(R.string.semicolon) + ((ProReqDetailBean) infoBean).getLgortName() + "\n" +
getContext().getString(R.string.Station_number) + getContext().getString(R.string.semicolon) + ((ProReqDetailBean) infoBean).getZgwh() + "\n" +
getContext().getString(R.string.Claim_time) + getContext().getString(R.string.semicolon) + ((ProReqDetailBean) infoBean).getZlysj() + "\n"
getContext().getString(R.string.Case_number) + getContext().getString(R.string.semicolon) + ((ProReqDetailBean) infoBean).getZboxid() + "\n" +
getContext().getString(R.string.batch) + getContext().getString(R.string.semicolon) + ((ProReqDetailBean) infoBean).getZpc() + "\n" +
getContext().getString(R.string.num_title) + getContext().getString(R.string.semicolon) + ((ProReqDetailBean) infoBean).getErfmg() + "\n" +
getContext().getString(R.string.unit_title) + getContext().getString(R.string.semicolon) + ((ProReqDetailBean) infoBean).getErfme() + "\n"
); );
} else { //其他只需要展示code和name的通用处理 } else { //其他只需要展示code和name的通用处理

220
app/src/main/java/com/techscan/wk/widgets/ProReturnBottomSheet.java

@ -0,0 +1,220 @@
package com.techscan.wk.widgets;
import android.app.Activity;
import android.content.ContentValues;
import android.content.Context;
import android.os.Handler;
import android.text.InputFilter;
import android.text.Spanned;
import android.text.TextUtils;
import android.view.KeyEvent;
import android.view.View;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.RecyclerView;
import com.blankj.utilcode.util.StringUtils;
import com.blankj.utilcode.util.ToastUtils;
import com.lxj.easyadapter.EasyAdapter;
import com.lxj.easyadapter.MultiItemTypeAdapter;
import com.lxj.easyadapter.ViewHolder;
import com.lxj.xpopup.XPopup;
import com.lxj.xpopup.core.BottomPopupView;
import com.lxj.xpopup.util.XPopupUtils;
import com.lxj.xpopup.widget.VerticalRecyclerView;
import com.orhanobut.logger.Logger;
import com.qmuiteam.qmui.widget.QMUITopBar;
import com.qmuiteam.qmui.widget.dialog.QMUIDialog;
import com.techscan.wk.R;
import com.techscan.wk.adapter.DynamicFormAdapter;
import com.techscan.wk.model.BaseOptionsResponseBean;
import com.techscan.wk.model.DetailItemBean;
import com.techscan.wk.model.FlowOrderDetailBean;
import com.techscan.wk.model.FlowReportWorkDetailBean;
import com.techscan.wk.model.ProReqDetailBean;
import com.techscan.wk.model.ProReqOrdeTaskBean;
import com.techscan.wk.model.ProReturnBean;
import com.techscan.wk.model.ProductOrderResponseBean;
import com.techscan.wk.model.ReportWorkDetailBean;
import com.techscan.wk.rxbus.Event;
import com.techscan.wk.rxbus.RxBus;
import com.techscan.wk.ui.interfaces.CustomDecimalDigitsTextWatcher;
import com.techscan.wk.ui.interfaces.ProReturnSaveListener;
import com.techscan.wk.utils.ToastUtil;
import com.techscan.wk.utils.statusbar.SystemBarTintManager;
import org.jetbrains.annotations.NotNull;
import org.litepal.LitePal;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* 版本1.0
* 创建日期2021/1/11 14
* 描述CustomBottomSheet 自定义底部弹出框
*/
public class ProReturnBottomSheet<T> extends BottomPopupView {
private Activity context;
private T infoBeans;
private String title;
private Boolean isShow = false;
private ProReturnSaveListener proReturnSaveListener;
public ProReturnBottomSheet(@NonNull Activity context) {
super(context);
this.context = context;
}
public ProReturnBottomSheet(@NonNull Activity context, String title) {
super(context);
this.context = context;
this.title = title;
}
public ProReturnBottomSheet(@NonNull Activity context, String title, T t, ProReturnSaveListener proReturnSaveListener) {
super(context);
this.context = context;
this.title = title;
this.infoBeans = t;
this.proReturnSaveListener = proReturnSaveListener;
}
@Override
protected int getImplLayoutId() {
return R.layout.layout_pro_return_dialog;
}
@Override
protected void onCreate() {
super.onCreate();
TextView tvTitle = findViewById(R.id.tvTitle);
tvTitle.setText(title);
ImageView ivClose = findViewById(R.id.ivClose);
ivClose.setOnClickListener(view -> {
dismiss();
});
EditText etQty = findViewById(R.id.etQty);
// 设置小数点后几位小数
DecimalDigitsInputFilter decimalDigitsInputFilter = new DecimalDigitsInputFilter(3);
InputFilter[] filters = new InputFilter[]{decimalDigitsInputFilter};
etQty.setFilters(filters);
TextView tvMaterial = findViewById(R.id.tvMaterial);
TextView tvBatch = findViewById(R.id.tvBatch);
TextView tvErfmg = findViewById(R.id.tvErfmg);
Button btnSubmit = findViewById(R.id.btn_submit);
if (infoBeans instanceof ProReturnBean) {
ProReturnBean infoBeans = (ProReturnBean) this.infoBeans;
CustomDecimalDigitsTextWatcher customDecimalDigitsTextWatcher = new CustomDecimalDigitsTextWatcher(etQty, ((ProReturnBean) this.infoBeans).getErfmg());
etQty.addTextChangedListener(customDecimalDigitsTextWatcher);
etQty.setText(infoBeans.getErfmg() + "");
tvMaterial.setText(infoBeans.getMatnr());
tvBatch.setText(infoBeans.getZpc());
tvErfmg.setText(infoBeans.getErfmg() + "");
btnSubmit.setOnClickListener(view -> {
String qty = etQty.getText().toString().trim();
if (TextUtils.isEmpty(qty)) {
ToastUtils.showLong(R.string.dialog_The_quantity_cannot_be_empty);
return;
}
if (qty.equals("0")) {
ToastUtils.showLong(R.string.dialog_The_value_cannot_be_0_or_less_than_0);
return;
}
if (Double.parseDouble(qty) < 0) {
ToastUtils.showLong(R.string.dialog_The_value_cannot_be_0_or_less_than_0);
return;
}
infoBeans.setErfmg(Double.parseDouble(qty));
if (proReturnSaveListener != null) {
proReturnSaveListener.onSaveListener(infoBeans, this);
}
});
}
}
private class DecimalDigitsInputFilter implements InputFilter {
private final Pattern pattern;
DecimalDigitsInputFilter(int decimalDigits) {
pattern = Pattern.compile("[0-9]+(\\.[0-9]{0," + decimalDigits + "})?");
}
@Override
public CharSequence filter(CharSequence source, int start, int end,
Spanned dest, int dstart, int dend) {
String input = dest.subSequence(0, dstart).toString()
+ source.subSequence(start, end).toString()
+ dest.subSequence(dend, dest.length()).toString();
Matcher matcher = pattern.matcher(input);
if (!matcher.matches()) {
return "";
}
return null;
}
}
//完全可见执行
@Override
protected void onShow() {
isShow = true;
super.onShow();
}
//完全消失执行
@Override
protected void onDismiss() {
isShow = false;
super.onDismiss();
}
public Boolean getShow() {
return isShow;
}
@Override
protected int getMaxHeight() {
return (int) (XPopupUtils.getWindowHeight(getContext()) * .85f);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
super.dismiss();
return true;
}
@Override
protected void applySize(boolean isShowNavBar) {
LayoutParams params = (LayoutParams) this.getLayoutParams();
int rotation = ((WindowManager) this.getContext().getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getRotation();
SystemBarTintManager systemBarTintManager = new SystemBarTintManager((Activity) this.getContext());
boolean isNavBarShown = isShowNavBar || systemBarTintManager.getConfig().hasNavigtionBar() ? true : false;
if (rotation == 0) {
params.leftMargin = 0;
params.rightMargin = 0;
params.bottomMargin = isNavBarShown ? systemBarTintManager.getConfig().getNavigationBarHeight() : 0;
} else if (rotation == 1) {
params.bottomMargin = 0;
params.rightMargin = isNavBarShown ? systemBarTintManager.getConfig().getNavigationBarHeight() : 0;
params.leftMargin = 0;
} else if (rotation == 3) {
params.bottomMargin = 0;
params.leftMargin = 0;
params.rightMargin = isNavBarShown ? systemBarTintManager.getConfig().getNavigationBarHeight() : 0;
}
this.setLayoutParams(params);
}
}

50
app/src/main/res/layout/activity_config_setting.xml

@ -0,0 +1,50 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".ui.login.SettingActivity">
<com.qmuiteam.qmui.widget.QMUITopBar
android:id="@+id/topbar"
android:layout_width="match_parent"
android:layout_height="?attr/qmui_topbar_height" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="6dp"
android:background="@color/qmui_config_color_white"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="48dp"
android:orientation="horizontal"
android:paddingLeft="8dp"
android:paddingRight="8dp">
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_gravity="center_vertical"
android:layout_weight="0.8"
android:text="@string/Scanning_code_automatically_adds_details"
android:textSize="@dimen/sp_15" />
<Switch
android:id="@+id/swAutoInsertDetail"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_weight="0.2"
android:gravity="right" />
</LinearLayout>
</LinearLayout>
</LinearLayout>

54
app/src/main/res/layout/activity_pro_return.xml

@ -0,0 +1,54 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/qmui_config_color_white"
android:orientation="vertical">
<com.qmuiteam.qmui.widget.QMUITopBar
android:id="@+id/topbar"
android:layout_width="match_parent"
android:layout_height="?attr/qmui_topbar_height"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<LinearLayout
android:id="@+id/ll_scan"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/topbar"
android:orientation="vertical"
android:visibility="gone"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/topbar">
<include layout="@layout/layout_edit_scan" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/ll_scan">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_ui"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<com.techscan.wk.widgets.MySmartTable
android:id="@+id/smartTable"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="5dp" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

2
app/src/main/res/layout/activity_report_work_errlist.xml

@ -31,7 +31,7 @@
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="0dp" android:layout_height="0dp"
android:layout_marginBottom="@dimen/dp_10"
android:layout_marginBottom="5dp"
android:orientation="vertical" android:orientation="vertical"
app:layout_constraintBottom_toTopOf="@id/btn_submit" app:layout_constraintBottom_toTopOf="@id/btn_submit"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"

4
app/src/main/res/layout/activity_report_work_offse.xml

@ -44,9 +44,9 @@
<com.techscan.wk.widgets.MySmartTable <com.techscan.wk.widgets.MySmartTable
android:id="@+id/smartTable" android:id="@+id/smartTable"
android:layout_marginTop="@dimen/dp_10"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" />
android:layout_height="match_parent"
android:layout_marginTop="5dp" />
</LinearLayout> </LinearLayout>

192
app/src/main/res/layout/layout_pro_return_dialog.xml

@ -0,0 +1,192 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/bg_round"
android:focusable="true"
android:focusableInTouchMode="true"
android:orientation="vertical">
<RelativeLayout
android:id="@+id/rlTitle"
android:layout_width="match_parent"
android:layout_height="50dp">
<TextView
android:id="@+id/tvTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="标题"
android:textSize="18sp" />
<ImageView
android:id="@+id/ivClose"
android:layout_width="34dp"
android:layout_height="36dp"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginEnd="5dp"
android:src="@drawable/ic_action_navigation_close" />
</RelativeLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:orientation="vertical"
android:paddingTop="@dimen/dp_20"
android:paddingBottom="30dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal"
android:padding="4dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/llBatch">
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.2"
android:text="@string/Quantity_of_returned_material"
android:textColor="@color/textColor"
android:textSize="@dimen/sp_14" />
<EditText
android:id="@+id/etQty"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.7"
android:inputType="numberDecimal"
android:text=""
android:textColor="@color/textColor"
android:textSize="@dimen/sp_14" />
</LinearLayout>
<LinearLayout
android:id="@+id/llMaterial"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:gravity="center_vertical"
android:orientation="horizontal"
android:padding="4dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.2"
android:text="@string/Material_number"
android:textColor="@color/textColor"
android:textSize="@dimen/sp_14" />
<EditText
android:id="@+id/tvMaterial"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.7"
android:background="@null"
android:enabled="false"
android:text="XXXXXXXXXXX"
android:textColor="@color/textColor"
android:textSize="@dimen/sp_14" />
</LinearLayout>
<LinearLayout
android:id="@+id/llBatch"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_10"
android:gravity="center_vertical"
android:orientation="horizontal"
android:padding="4dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/llMaterial">
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.2"
android:text="@string/batch"
android:textColor="@color/textColor"
android:textSize="@dimen/sp_14" />
<EditText
android:id="@+id/tvBatch"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.7"
android:background="@null"
android:enabled="false"
android:text="XXXXXXXXXXX"
android:textColor="@color/textColor"
android:textSize="@dimen/sp_14" />
</LinearLayout>
<LinearLayout
android:visibility="gone"
android:id="@+id/llNum"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_10"
android:gravity="center_vertical"
android:orientation="horizontal"
android:padding="4dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/llMaterial">
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.2"
android:text="领料数量"
android:textColor="@color/textColor"
android:textSize="@dimen/sp_14" />
<EditText
android:id="@+id/tvErfmg"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.7"
android:background="@null"
android:enabled="false"
android:text="XXXXXXXXXXX"
android:textColor="@color/textColor"
android:textSize="@dimen/sp_14" />
</LinearLayout>
</LinearLayout>
<Button
android:id="@+id/btn_submit"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:layout_marginBottom="40dp"
android:background="@drawable/bg_scan_btn_selector"
android:text="@string/save_info"
android:textColor="@color/qmui_config_color_white"
tools:ignore="ButtonStyle" />
</LinearLayout>

8
app/src/main/res/values-en/strings.xml

@ -160,4 +160,12 @@
<string name="Select_a_scan_rule_first">Select a scan rule first</string> <string name="Select_a_scan_rule_first">Select a scan rule first</string>
<string name="order_number_in_the_flow_order_is_inconsistent">The order number in the flow order is inconsistent with the work order number, please confirm!</string> <string name="order_number_in_the_flow_order_is_inconsistent">The order number in the flow order is inconsistent with the work order number, please confirm!</string>
<string name="Cannot_be_empty">Cannot be empty</string> <string name="Cannot_be_empty">Cannot be empty</string>
<string name="Scanning_code_automatically_adds_details">Scanning code automatically adds details</string>
<string name="configuration">configuration</string>
<string name="Production_return">Production return</string>
<string name="return_of_material">return of material</string>
<string name="Material_number">Material number</string>
<string name="dialog_The_quantity_cannot_be_empty">The quantity cannot be empty</string>
<string name="dialog_The_value_cannot_be_0_or_less_than_0">The value cannot be 0 or less than 0</string>
<string name="Quantity_of_returned_material">Quantity of returned material</string>
</resources> </resources>

8
app/src/main/res/values-th-rTH/strings.xml

@ -160,4 +160,12 @@
<string name="Select_a_scan_rule_first">โปรดเลือกกฎการสแกนก่อน</string> <string name="Select_a_scan_rule_first">โปรดเลือกกฎการสแกนก่อน</string>
<string name="order_number_in_the_flow_order_is_inconsistent">หมายเลขการสั่งซื้อในโรเตอร์ไม่สอดคล้องกับหมายเลขใบประกอบกรุณายืนยัน!</string> <string name="order_number_in_the_flow_order_is_inconsistent">หมายเลขการสั่งซื้อในโรเตอร์ไม่สอดคล้องกับหมายเลขใบประกอบกรุณายืนยัน!</string>
<string name="Cannot_be_empty">ไม่สามารถว่า งได้</string> <string name="Cannot_be_empty">ไม่สามารถว่า งได้</string>
<string name="Scanning_code_automatically_adds_details">เพิ่มรายละเอียดโดยอัตโนมัติ</string>
<string name="configuration">ปรับ แต่ง</string>
<string name="Production_return">วัสดุการผลิต</string>
<string name="return_of_material">ส่งออก</string>
<string name="Material_number">หมายเลขวัสดุ</string>
<string name="dialog_The_quantity_cannot_be_empty">ไม่สามารถว่า งได้</string>
<string name="dialog_The_value_cannot_be_0_or_less_than_0">จำนวนไม่สามารถเป็น 0 หรือน้อยกว่า 0 ได้</string>
<string name="Quantity_of_returned_material">退料数量</string>
</resources> </resources>

8
app/src/main/res/values/strings.xml

@ -171,5 +171,13 @@
<string name="Select_a_scan_rule_first">请先选择扫描规则</string> <string name="Select_a_scan_rule_first">请先选择扫描规则</string>
<string name="order_number_in_the_flow_order_is_inconsistent">流转单中订单号与工单号不一致,请确认!</string> <string name="order_number_in_the_flow_order_is_inconsistent">流转单中订单号与工单号不一致,请确认!</string>
<string name="Cannot_be_empty">不能为空</string> <string name="Cannot_be_empty">不能为空</string>
<string name="Scanning_code_automatically_adds_details">扫码自动加入明细</string>
<string name="configuration">配置</string>
<string name="Production_return">生产退料</string>
<string name="return_of_material">退料</string>
<string name="Material_number">物料号</string>
<string name="dialog_The_quantity_cannot_be_empty">数量不可为空</string>
<string name="dialog_The_value_cannot_be_0_or_less_than_0">数量不能为0或小于0</string>
<string name="Quantity_of_returned_material">退料数量</string>
</resources> </resources>

Loading…
Cancel
Save