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. 218
      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. 202
      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">
<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_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_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_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_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_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_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/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" />
@ -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_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_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_round.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
targetSdkVersion 29
versionCode 1
versionName "1.0.1"
versionName "1.0.2"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
ndk {
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:exported="false"
android:windowSoftInputMode="stateAlwaysHidden|adjustPan" />
<activity
android:name="com.techscan.wk.ui.proreq.ProReturnActivity"
android:exported="false"
android:windowSoftInputMode="stateAlwaysHidden|adjustPan" />
<activity
android:name=".ui.baseAct.LgortListActivity"
android:exported="false"
android:windowSoftInputMode="stateAlwaysHidden|adjustPan" />
<activity
android:name=".ui.reportwork.ConfigSettingActivity"
android:exported="false"
android:windowSoftInputMode="stateAlwaysHidden|adjustPan" />
<activity
android:name="com.techscan.wk.ui.login.SettingActivity"

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

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

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

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

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

@ -1,40 +1,6 @@
[
{
"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,
"fieldName": "ZLYSJ",
"name": "领用时间",
@ -50,40 +16,7 @@
"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,
"type": 2,
@ -119,6 +52,23 @@
"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,
"type": 2,
@ -139,6 +89,23 @@
{
"id": 7,
"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",
"name": "批次",
"value": "",
@ -153,9 +120,8 @@
"th": "จำนวน"
}
},
{
"id": 8,
"id": 9,
"type": 2,
"fieldName": "quantity",
"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",
"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",
"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:
<version value="1" />
-->
<version value="11" />
<version value="14" />
<!--
Define your models in the list with mapping tag, LitePal will
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_IS_CONTINUOUS = "key_continuous_scan";
public static final String SCAN_ADD_DETAIL = "autoInserDetail";
public static final int CAMERA_CODE = 0x11;
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 materiel;
private String versions;
private String packageNumber;
private String packageNumber;//包装容器号/箱号
private String Batch;
private String quantity;
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 flowOrders;//流转单号
private String flowReport;//流转单号
private String matnr;//物料编码
private String zxtpc;//箱号
private String zpc;//批次
private int ism01;
private int ism02;
private int ism03;
@ -22,6 +24,22 @@ public class FlowReportWorkDetailBean extends LitePalSupport {
private int ism05;
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() {
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 zitemo;//行项目号
private String zlysj;//领用时间
private String zboxid;//箱号
private String zpc;//批次
private String zreqlineid;//MES领料单行ID
private String zsapdoc;//领料单编号
@ -22,6 +23,14 @@ public class ProReqDetailBean extends LitePalSupport {
private String lgort;//库存地点
private String lgortName;//库存地点
public String getZboxid() {
return zboxid;
}
public void setZboxid(String zboxid) {
this.zboxid = zboxid;
}
public String getGid() {
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 Double erfmg;//组件用量(BOM单位)
private String lgort;//库存地点
private String lgortName;//库存地点名称
private String matnr;//组件物料编码
private String meins;//组件单位 //任务数量用到的单位
private Double menge;//单位用量
@ -28,6 +29,14 @@ public class ProReqOrdeTaskBean extends LitePalSupport {
private String vornr;//工序编码
private String xloek;//删除标记
public String getLgortName() {
return lgortName;
}
public void setLgortName(String lgortName) {
this.lgortName = lgortName;
}
public long getId() {
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,
@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")
Observable<ResponseBody> getFlowReport(@Query("zxtpc") String zxtpc);
@ -86,6 +92,9 @@ public interface ApiService {
@POST("/web/report/saveCX")
Observable<ResponseBody> saveCX(@Body String requestBean);
@POST("/web/order/saveBackPick")
Observable<ResponseBody> saveBackPick(@Body String requestBean);
@POST("/web/order/savePick")
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())
.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,
@ -321,6 +328,15 @@ public class HttpMethods {
.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) {
getApiService().getFlowReport(zxtpc)
.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++) {
VicoUserBean.MenusBean menusBean = menus.get(i);
if (menusBean.getName().equals("生产报工")) {
isHas = true;
isHas = false;
break;
}
}
@ -223,6 +223,14 @@ public class MainActivity extends BaseActivity {
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("退出登录")) {
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.ToastUtils;
import com.google.gson.reflect.TypeToken;
import com.lxj.xpopup.XPopup;
import com.qmuiteam.qmui.widget.dialog.QMUIDialog;
import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton;
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.statusbar.StatusBarUtil;
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.lang.reflect.Type;
@ -133,6 +136,7 @@ public class LoginActivity extends BaseActivity {
public void onViewClicked(View view) {
switch (view.getId()) {
case R.id.btn_login:
login(view);
// tietUsername.setText(1);
// new XPopup.Builder(context)
@ -331,6 +335,7 @@ public class LoginActivity extends BaseActivity {
}
} catch (IOException e) {
e.printStackTrace();
ToastUtils.showLong(e.getMessage());
}
}
@ -412,6 +417,7 @@ public class LoginActivity extends BaseActivity {
}
} catch (IOException e) {
e.printStackTrace();
ToastUtils.showLong(e.getMessage());
}
}

218
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.pm.PackageManager;
import android.os.Bundle;
import android.os.Handler;
import android.text.TextUtils;
import android.view.KeyEvent;
import android.view.View;
@ -41,6 +42,7 @@ import com.qmuiteam.qmui.widget.dialog.QMUIDialog;
import com.qmuiteam.qmui.widget.dialog.QMUITipDialog;
import com.techscan.wk.R;
import com.techscan.wk.adapter.DynamicFormAdapter;
import com.techscan.wk.app.AppConst;
import com.techscan.wk.base.CommonFunctionActivity;
import com.techscan.wk.model.AnalysisBarBean;
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.HttpMethods;
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.utils.AntiShakeUtils;
import com.techscan.wk.utils.BarAnalysisUtils;
@ -163,6 +167,7 @@ public class ProReqActivity extends CommonFunctionActivity {
private void initTopBar() {
topbar.setTitle(getString(R.string.Production_loading));
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();
//动态表单数据
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中
dynamicFormAdapter = new DynamicFormAdapter(dynamicFormBeans, false, 0);
@ -267,25 +261,13 @@ public class ProReqActivity extends CommonFunctionActivity {
return;
}
switch (dynamicFormBean.getFieldName()) {
case "ZCJBM":
setNextFocus("ZGWH");
break;
case "ZGWH":
setNextFocus("AUFNR");
break;
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)) {
showError(getString(R.string.The_work_order_number_cannot_be_empty));
dynamicFormAdapter.setFocusAndClearValueById(dynamicFormBean.getId());
@ -302,10 +284,7 @@ public class ProReqActivity extends CommonFunctionActivity {
LitePal.deleteAll(ProReqDetailBean.class);
for (int j = 0; j < dynamicFormBeans.size(); 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("ZLYSJ")) {
continue;
@ -329,56 +308,28 @@ public class ProReqActivity extends CommonFunctionActivity {
setNextFocus("AUFNR");
return;
}
boolean checkBarcode = BarAnalysisUtils.checkBarcodePresuffix(value);
if (!checkBarcode) {
showError(getString(R.string.The_barcode_format_is_incorrect) + value);
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);
String batch = analysisBarBean.getBatch();
String materiel = analysisBarBean.getMateriel();
String quantity1 = analysisBarBean.getQuantity();
if (TextUtils.isEmpty(materiel)) {
dynamicFormAdapter.setFocusById(dynamicFormBean.getId());
showError(getString(R.string.There_is_no_aterial_information_in_the_barcode_please_confirm));
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);
LitePal
//.where("matnr = ? and complete = ?", materiel, "0")
.where("matnr = ?", materiel)
.findAsync(ProReqOrdeTaskBean.class)
.listen(proReqOrdeTaskBeans -> {
if (proReqOrdeTaskBeans.size() == 0) {
dynamicFormAdapter.setFocusById(dynamicFormBean.getId());
//未找到相同维度数据,报错
showError(getString(R.string.There_is_no_data_of_the_same_dimension_in_the_task_list));
return;
}
if (TextUtils.isEmpty(quantity1)) {
setNextFocus("quantity");
} else {
addDetail();
}
});
//判断条码是否已经被扫描
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();
@ -389,15 +340,66 @@ public class ProReqActivity extends CommonFunctionActivity {
});
}
@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());
}
private void getBarcodeInfo(String value) {
AnalysisBarBean bean = BarAnalysisUtils.analysisBarcode(value);
LitePal
//.where("matnr = ? and complete = ?", materiel, "0")
.where("matnr = ?", bean.getMateriel())
.findAsync(ProReqOrdeTaskBean.class)
.listen(proReqOrdeTaskBeans -> {
if (proReqOrdeTaskBeans.size() == 0) {
setNextFocus("barcode");
//未找到相同维度数据,报错
showError(getString(R.string.There_is_no_data_of_the_same_dimension_in_the_task_list));
return;
}
ProReqOrdeTaskBean proReqOrdeTaskBean = proReqOrdeTaskBeans.get(0);
for (DynamicFormBean d : dynamicFormBeans) {
switch (d.getFieldName()) {
case "lgort"://库存地点
String showValue = proReqOrdeTaskBean.getLgort() + " " + proReqOrdeTaskBean.getLgortName();
d.setValue(showValue);
break;
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;
default:
d.setFocus(false);
break;
}
}
dynamicFormAdapter.setList(dynamicFormBeans);
dynamicFormAdapter.notifyDataSetChanged();
boolean aBoolean = PreferencesUtil.getBoolean(context, AppConst.SCAN_ADD_DETAIL,true);
if (aBoolean) {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
addDetail();
}
}, 300);
}
});
}
private void query(String id) {
HttpMethods.getInstance().getOrderInfo(id, new BaseObserver<ResponseBody>(context) {
@ -450,22 +452,25 @@ public class ProReqActivity extends CommonFunctionActivity {
}
private void addDetail() {
DynamicFormBean ZPCItem = dynamicFormAdapter.getItemByFieldName("ZPC");//批次
DynamicFormBean MATNRItem = dynamicFormAdapter.getItemByFieldName("MATNR");//物料编码
DynamicFormBean ZLYSJItem = dynamicFormAdapter.getItemByFieldName("ZLYSJ");//领用时间
DynamicFormBean ZGWHItem = dynamicFormAdapter.getItemByFieldName("ZGWH");//工位号
DynamicFormBean ZCJBMItem = dynamicFormAdapter.getItemByFieldName("ZCJBM");//车间编码
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) {
showError(getString(R.string.Please_scan_the_ticket_number_first));
setNextFocus("AUFNR");
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();
if (TextUtils.isEmpty(barcode)) {
showError(getString(R.string.The_bar_code_cannot_be_blank));
@ -473,16 +478,9 @@ public class ProReqActivity extends CommonFunctionActivity {
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();
if (TextUtils.isEmpty(value)) {
setNextFocus("quantity");
showError(getString(R.string.The_quantity_cannot_be_empty));
return;
}
@ -525,22 +523,22 @@ public class ProReqActivity extends CommonFunctionActivity {
detailBean.setErfmg(scanQuantity);
detailBean.setMatnr(bean.getMatnr());
detailBean.setWerks(proReqOrderBean != null ? proReqOrderBean.getDwerk() : "");
detailBean.setZcjbm(ZCJBMItem.getValue());
detailBean.setZgwh(ZGWHItem.getValue());
detailBean.setZcjbm("");
detailBean.setZgwh("");
detailBean.setZitemo(bean.getRspos());
detailBean.setZlysj(ZLYSJItem.getValue());
detailBean.setZboxid(ZXTPCItem.getValue());
detailBean.setZpc(ZPCItem.getValue());
detailBean.setZreqlineid("");
detailBean.setZsapdoc("");
if (!TextUtils.isEmpty(lgortItem.getValue()) && lgortItem.getValue().contains(" ")) {
String[] split = lgortItem.getValue().split(" ");
detailBean.setLgort(split[0]);
detailBean.setLgortName(split[1]);
}
if (!TextUtils.isEmpty(lZYWLXItem.getValue()) && lZYWLXItem.getValue().contains(" ")) {
String[] split = lZYWLXItem.getValue().split(" ");
detailBean.setZywlx(split[0]);
detailBean.setZywlxName(split[1]);
if (!TextUtils.isEmpty(lgortItem.getValue())) {
if (lgortItem.getValue().contains(" ")) {
String[] split = lgortItem.getValue().split(" ");
detailBean.setLgort(split[0]);
detailBean.setLgortName(split[1]);
} else {
detailBean.setLgort(lgortItem.getValue());
}
}
detailBean.save();
break;
@ -558,11 +556,7 @@ public class ProReqActivity extends CommonFunctionActivity {
}
for (int i = 0; i < dynamicFormBeans.size(); 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")) {
continue;
}
@ -748,10 +742,6 @@ public class ProReqActivity extends CommonFunctionActivity {
public void clearRvData() {
for (int i = 0; i < dynamicFormBeans.size(); i++) {
DynamicFormBean dynamicFormBean = dynamicFormBeans.get(i);
if (dynamicFormBean.getFieldName().equals("ZCJBM") ||
dynamicFormBean.getFieldName().equals("ZGWH")) {
continue;
}
dynamicFormBean.setValue("");
if (dynamicFormBean.getType() == DynamicFormBean.TIME) {
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);
});
}
}

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

@ -151,7 +151,7 @@ public class FlowReportWorkActivity extends CommonFunctionActivity {
initListeners();
initRvData();
rvUi.postDelayed(() -> {
setNextFocus("AUFNR");
setNextFocus("FlowOrder");
}, 100);
}
@ -175,7 +175,7 @@ public class FlowReportWorkActivity extends CommonFunctionActivity {
* 重新刷新ui
*/
@SuppressLint("SetTextI18n")
private void reInitUI(boolean isReportWork, String scanRule) {
private void reInitUI(String scanRule) {
runOnUiThread(() -> {
SoundUtils.playSound(this, R.raw.ok);
if (KeyboardUtils.isSoftInputVisible(context)) {
@ -184,8 +184,7 @@ public class FlowReportWorkActivity extends CommonFunctionActivity {
for (int i = 0; i < dynamicFormBeans.size(); i++) {
DynamicFormBean dynamicFormBean = dynamicFormBeans.get(i);
if (dynamicFormBean.getFieldName().equals("AUFNR") ||
dynamicFormBean.getFieldName().equals("ScanRule") ||
dynamicFormBean.getFieldName().equals("VORNR")) {
dynamicFormBean.getFieldName().equals("ScanRule")) {
continue;
} else if (dynamicFormBean.getFieldName().equals("FlowOrder")) {
if (!TextUtils.isEmpty(scanRule) && scanRule.equals(items[0])) {
@ -195,14 +194,10 @@ public class FlowReportWorkActivity extends CommonFunctionActivity {
dynamicFormBean.setValue("");
}
showDetailBadgeNum();
if (isReportWork) {
if (scanRule.equals(items[1])) {
setNextFocus("FlowOrder");
} else {
setNextFocus("PacketBarcode");
}
if (scanRule.equals(items[1])) {
setNextFocus("FlowOrder");
} else {
setNextFocus("XMNGA");
setNextFocus("PacketBarcode");
}
});
@ -354,35 +349,34 @@ public class FlowReportWorkActivity extends CommonFunctionActivity {
switch (dynamicFormBean.getFieldName()) {
case "AUFNR":
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)) {
showError(getString(R.string.The_work_order_number_cannot_be_empty));
return;
}
dynamicFormBean.setCanChange(false);
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");
break;
case "FlowOrder":
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;
}
if (TextUtils.isEmpty(value)) {
showError(getString(R.string.The_flow_order_number_cannot_be_empty));
return;
@ -392,14 +386,20 @@ public class FlowReportWorkActivity extends CommonFunctionActivity {
int t = value.indexOf("T");
String substring = value.substring(t + 1, 9);
String aufnrItemValue = AUFNRItem.getValue();
if (!substring.equals(aufnrItemValue)) {
ToastUtils.showLong(R.string.order_number_in_the_flow_order_is_inconsistent);
dynamicFormAdapter.setFocusById(dynamicFormBean.getId());
return;
if (TextUtils.isEmpty(aufnrItemValue)) {
AUFNRItem.setValue(substring);
AUFNRItem.setCanChange(false);
dynamicFormAdapter.setItemByFieldName(AUFNRItem.getFieldName(), AUFNRItem);
dynamicFormAdapter.notifyDataSetChanged();
} else {
if (!substring.equals(aufnrItemValue)) {
ToastUtils.showLong(R.string.order_number_in_the_flow_order_is_inconsistent);
dynamicFormAdapter.setFocusById(dynamicFormBean.getId());
return;
}
}
}
scanRuleItem = dynamicFormAdapter.getItemByFieldName("ScanRule");
if (TextUtils.isEmpty(scanRuleItem.getValue())) {
setNextFocus(dynamicFormBean.getFieldName());
showError(getString(R.string.Select_a_scan_rule_first));
@ -471,76 +471,50 @@ public class FlowReportWorkActivity extends CommonFunctionActivity {
break;
//报工数量
case "GMNGA":
addDetail(true);
addDetail();
break;
//报废数量
case "XMNGA":
addDetail(false);
default:
break;
}
});
}
/**
* @param isReportWork ==true 是报工否则是报废
*/
private void addDetail(boolean isReportWork) {
private void addDetail() {
DynamicFormBean ScanRuleItem = dynamicFormAdapter.getItemByFieldName("ScanRule");//扫描规则
String gid = System.currentTimeMillis() + "";
DynamicFormBean aufnrItem = dynamicFormAdapter.getItemByFieldName("AUFNR");//工单
DynamicFormBean vornrItem = dynamicFormAdapter.getItemByFieldName("VORNR");//工序
DynamicFormBean PacketBarcodeItem = dynamicFormAdapter.getItemByFieldName("PacketBarcode");//包条码
DynamicFormBean flowOrderItem = dynamicFormAdapter.getItemByFieldName("FlowOrder");//流转单
DynamicFormBean PacketBarcodeItem = dynamicFormAdapter.getItemByFieldName("PacketBarcode");//包条码
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 ZPCItem = dynamicFormAdapter.getItemByFieldName("ZPC");//批次
String barcode = PacketBarcodeItem.getValue();
if (TextUtils.isEmpty(aufnrItem.getValue())) {
setNextFocus("AUFNR");
showError(getString(R.string.The_work_order_number_cannot_be_empty));
return;
}
if (isReportWork) {
if (TextUtils.isEmpty(gmngaItem.getValue())) {
showError(getString(R.string.The_number_of_reports_cannot_be_empty));
setNextFocus("GMNGA");
return;
}
if (gmngaItem.getValue().equals("0")) {
showError(getString(R.string.The_number_of_jobs_reported_cannot_be_0_or_smaller_than_0));
setNextFocus("GMNGA");
return;
}
if (Double.parseDouble(gmngaItem.getValue()) < 0) {
showError(getString(R.string.The_number_of_jobs_reported_cannot_be_0_or_smaller_than_0));
setNextFocus("GMNGA");
return;
}
if (TextUtils.isEmpty(PacketBarcodeItem.getValue())) {
showError(getString(R.string.The_packet_barcode_cannot_be_empty));
setNextFocus("PacketBarcode");
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 (TextUtils.isEmpty(gmngaItem.getValue())) {
showError(getString(R.string.The_number_of_reports_cannot_be_empty));
setNextFocus("GMNGA");
return;
}
if (gmngaItem.getValue().equals("0")) {
showError(getString(R.string.The_number_of_jobs_reported_cannot_be_0_or_smaller_than_0));
setNextFocus("GMNGA");
return;
}
if (Double.parseDouble(gmngaItem.getValue()) < 0) {
showError(getString(R.string.The_number_of_jobs_reported_cannot_be_0_or_smaller_than_0));
setNextFocus("GMNGA");
return;
}
if (TextUtils.isEmpty(PacketBarcodeItem.getValue())) {
showError(getString(R.string.The_packet_barcode_cannot_be_empty));
setNextFocus("PacketBarcode");
return;
}
//如果规则是多个流转单一个箱码
@ -565,24 +539,14 @@ public class FlowReportWorkActivity extends CommonFunctionActivity {
FlowReportWorkDetailBean bean = new FlowReportWorkDetailBean();
bean.setGid(gid);
bean.setAufnr(aufnrItem.getValue());
bean.setVornr(vornrItem.getValue());
bean.setVornr("");
bean.setZxtpc(ZXTPCItem.getValue());
bean.setFlowOrders(flowOrderItem.getValue());
bean.setFlowOrders(flowOrderSb.substring(0, flowOrderSb.length() - 1));
if (isReportWork) {
bean.setPacketBarcode(barcode);
bean.setGmnga(gmngaItem.getValue());
bean.setXmnga("");
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]);
}
}
bean.setPacketBarcode(barcode);
bean.setGmnga(gmngaItem.getValue());
bean.setXmnga("");
bean.setGrund("");
boolean save = bean.save();
if (save) {
LitePal.deleteAll(FlowOrderDetailBean.class);
@ -592,7 +556,7 @@ public class FlowReportWorkActivity extends CommonFunctionActivity {
keyBarcodes.add(barcode);
scanBarcodeListMap.put(gid, keyBarcodes);
reInitUI(isReportWork, ScanRuleItem.getValue());
reInitUI(ScanRuleItem.getValue());
} else {
showError(getString(R.string.Failed_to_join_details));
}
@ -609,23 +573,13 @@ public class FlowReportWorkActivity extends CommonFunctionActivity {
FlowReportWorkDetailBean bean = new FlowReportWorkDetailBean();
bean.setGid(gid);
bean.setAufnr(aufnrItem.getValue());
bean.setVornr(vornrItem.getValue());
bean.setVornr("");
bean.setZxtpc(ZXTPCItem.getValue());
bean.setFlowOrders(flowOrderItem.getValue());
if (isReportWork) {
bean.setPacketBarcode(barcode);
bean.setGmnga(gmngaItem.getValue());
bean.setXmnga("");
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]);
}
}
bean.setPacketBarcode(barcode);
bean.setGmnga(gmngaItem.getValue());
bean.setXmnga("");
bean.setGrund("");
boolean save = bean.save();
if (save) {
//将当前条码存入对应的条码扫描明细中
@ -633,7 +587,7 @@ public class FlowReportWorkActivity extends CommonFunctionActivity {
keyBarcodes.add(barcode);
scanBarcodeListMap.put(gid, keyBarcodes);
reInitUI(isReportWork, ScanRuleItem.getValue());
reInitUI(ScanRuleItem.getValue());
} else {
showError(getString(R.string.Failed_to_join_details));
}
@ -647,10 +601,18 @@ public class FlowReportWorkActivity extends CommonFunctionActivity {
AnalysisBarBean bean = BarAnalysisUtils.analysisBarcode(value);
for (DynamicFormBean d : dynamicFormBeans) {
switch (d.getFieldName()) {
case "ZXTPC"://包装容器号
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 "GMNGA"://报工数量
d.setValue(bean.getQuantity());
d.setFocus(false);
@ -665,7 +627,7 @@ public class FlowReportWorkActivity extends CommonFunctionActivity {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
addDetail(true);
addDetail();
}
}, 300);
@ -787,7 +749,7 @@ public class FlowReportWorkActivity extends CommonFunctionActivity {
showDetailBadgeNum();
showOrderDetailBadgeNum();
scanBarcodeListMap = new HashMap<>();
setNextFocus("AUFNR");
setNextFocus("FlowOrder");
} else {
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)
MySmartTable<ReportWorkErrorInfoBean> smartTable;
private Column<Boolean> select;
private Column<String> XMNGA;
private Column<String> AUFNR;
private Column<String> vornr;
private Column<String> GMNGA;
@ -165,16 +163,12 @@ public class ReportWorkErrorListActivity extends CommonFunctionActivity {
config.setShowTableTitle(false);
select = new Column<>(getString(R.string.select_all), "select");
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");
XMNGA = new Column<>(getString(R.string.Scrap_quantity), "xmnga");
select.setFixed(true);
select.setFast(true);
select.setMinWidth(90);
AUFNR.setFast(true);
vornr.setFast(true);
GMNGA.setFast(true);
XMNGA.setFast(true);
final int imgSize = DensityUtils.dp2px(this, 20);
select.setDrawFormat(new ImageResDrawFormat<Boolean>(imgSize, imgSize) {
@ -270,7 +264,7 @@ public class ReportWorkErrorListActivity extends CommonFunctionActivity {
}
private void setTableData() {
mTableData = new TableData<>("", list, select, AUFNR, vornr, GMNGA, XMNGA);
mTableData = new TableData<>("", list, select, AUFNR, GMNGA);
smartTable.setTableData(mTableData);
smartTable.invalidate();
}
@ -360,9 +354,9 @@ public class ReportWorkErrorListActivity extends CommonFunctionActivity {
String value = dynamicFormBean.getValue();
switch (dynamicFormBean.getFieldName()) {
case "AUFNR":
setNextFocus("VORNR");
break;
case "VORNR":
if (KeyboardUtils.isSoftInputVisible(context)) {
KeyboardUtils.hideSoftInput(context);
}
query(currentPage = 1, false);
break;
}
@ -379,9 +373,7 @@ public class ReportWorkErrorListActivity extends CommonFunctionActivity {
private void query(int currentpage, boolean isLoadMore) {
DynamicFormBean TimeItem = dynamicFormAdapter.getItemByFieldName("TIME");//日期
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>() {
@Override
protected void onSuccess(ResponseBody responseBody) throws Exception {
@ -404,6 +396,8 @@ public class ReportWorkErrorListActivity extends CommonFunctionActivity {
List<ReportWorkErrorInfoBean> records = data.getRecords();
if (!isLoadMore) {
if (records.size() == 0)
ToastUtils.showLong(getString(R.string.No_data_was_obtained));
select.setColumnName(getString(R.string.select_all));
list.clear();
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)
MySmartTable<ReportWorkOffsetBean> smartTable;
private Column<String> select;
private Column<String> XMNGA;
private Column<String> AUFNR;
private Column<String> vornr;
private Column<String> GMNGA;
@ -156,9 +154,7 @@ public class ReportWorkOffsetActivity extends CommonFunctionActivity {
select = new Column<>(getString(R.string.choice), "select");
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");
XMNGA = new Column<>(getString(R.string.Scrap_quantity), "xmnga");
select.setFixed(true);
@ -166,7 +162,7 @@ public class ReportWorkOffsetActivity extends CommonFunctionActivity {
select.setMinWidth(110);
AUFNR.setFast(true);
GMNGA.setFast(true);
XMNGA.setFast(true);
//设置单个格子背景颜色
smartTable.getConfig().setContentCellBackgroundFormat(new BaseCellBackgroundFormat<CellInfo>() {
@ -233,7 +229,7 @@ public class ReportWorkOffsetActivity extends CommonFunctionActivity {
for (int i = 0; i < list.size(); i++) {
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.invalidate();
smartTable.getTableData().setOnRowClickListener((column, reportWorkOffsetBean, i, row) -> {
@ -350,14 +346,8 @@ public class ReportWorkOffsetActivity extends CommonFunctionActivity {
dynamicFormAdapter.setFocusById(dynamicFormBean.getId());
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();
break;
@ -369,9 +359,8 @@ public class ReportWorkOffsetActivity extends CommonFunctionActivity {
private void query() {
DynamicFormBean aufnrItem = dynamicFormAdapter.getItemByFieldName("AUFNR");//工单
DynamicFormBean vornrItem = dynamicFormAdapter.getItemByFieldName("VORNR");//工序
HttpMethods.getInstance().getReport(aufnrItem.getValue(),
vornrItem.getValue(), new BaseObserver<ResponseBody>(context) {
"", new BaseObserver<ResponseBody>(context) {
@Override
protected void onSuccess(ResponseBody body) throws Exception {
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.detail,
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.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.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) {
holder.getView(R.id.name).setVisibility(GONE);
@ -152,15 +151,15 @@ public class CustomBottomSheet<T> extends BottomPopupView {
);
} 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,
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.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的通用处理

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
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginBottom="@dimen/dp_10"
android:layout_marginBottom="5dp"
android:orientation="vertical"
app:layout_constraintBottom_toTopOf="@id/btn_submit"
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
android:id="@+id/smartTable"
android:layout_marginTop="@dimen/dp_10"
android:layout_width="match_parent"
android:layout_height="match_parent" />
android:layout_height="match_parent"
android:layout_marginTop="5dp" />
</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="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="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>

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

@ -160,4 +160,12 @@
<string name="Select_a_scan_rule_first">โปรดเลือกกฎการสแกนก่อน</string>
<string name="order_number_in_the_flow_order_is_inconsistent">หมายเลขการสั่งซื้อในโรเตอร์ไม่สอดคล้องกับหมายเลขใบประกอบกรุณายืนยัน!</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>

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

@ -171,5 +171,13 @@
<string name="Select_a_scan_rule_first">请先选择扫描规则</string>
<string name="order_number_in_the_flow_order_is_inconsistent">流转单中订单号与工单号不一致,请确认!</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>

Loading…
Cancel
Save