Browse Source

1.0.15

master
ml 6 months ago
parent
commit
2d4cafabcc
  1. 17
      .idea/deploymentTargetDropDown.xml
  2. 5
      .idea/misc.xml
  3. 2
      app/build.gradle
  4. 2
      app/release/output.json
  5. 13
      app/src/main/AndroidManifest.xml
  6. 13
      app/src/main/assets/MainUIForV.json
  7. 158
      app/src/main/assets/ProFeedUI.json
  8. 6
      app/src/main/assets/litepal.xml
  9. 3
      app/src/main/java/com/techscan/wk/app/AppConst.java
  10. 141
      app/src/main/java/com/techscan/wk/model/MaterialAdjustmentDetailBean.java
  11. 207
      app/src/main/java/com/techscan/wk/model/ProOrde1TaskBean.java
  12. 207
      app/src/main/java/com/techscan/wk/model/ProOrde2TaskBean.java
  13. 208
      app/src/main/java/com/techscan/wk/model/ProOrder1Bean.java
  14. 198
      app/src/main/java/com/techscan/wk/model/ProOrder2Bean.java
  15. 3
      app/src/main/java/com/techscan/wk/rxretrofit/ApiService.java
  16. 4
      app/src/main/java/com/techscan/wk/rxretrofit/BaseResponseBean.java
  17. 7
      app/src/main/java/com/techscan/wk/rxretrofit/HttpMethods.java
  18. 8
      app/src/main/java/com/techscan/wk/ui/MainActivity.java
  19. 79
      app/src/main/java/com/techscan/wk/ui/proreq/MaterialAdjustSettingActivity.java
  20. 987
      app/src/main/java/com/techscan/wk/ui/proreq/MaterialAdjustmentActivity.java
  21. 24
      app/src/main/java/com/techscan/wk/ui/proreq/ProReqActivity.java
  22. 7
      app/src/main/java/com/techscan/wk/ui/reportwork/ConfigSettingActivity.java
  23. 58
      app/src/main/java/com/techscan/wk/widgets/CustomBottomSheet.java
  24. 28
      app/src/main/res/layout/activity_config_setting.xml
  25. 76
      app/src/main/res/layout/activity_mater_adjust_setting.xml
  26. 53
      app/src/main/res/layout/activity_pro_feed.xml

17
.idea/deploymentTargetDropDown.xml

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="deploymentTargetDropDown">
<runningDeviceTargetSelectedWithDropDown>
<Target>
<type value="RUNNING_DEVICE_TARGET" />
<deviceKey>
<Key>
<type value="VIRTUAL_DEVICE_PATH" />
<value value="C:\Users\MULEI\.android\avd\Nexus_5X_API_35.avd" />
</Key>
</deviceKey>
</Target>
</runningDeviceTargetSelectedWithDropDown>
<timeTargetWasSelectedWithDropDown value="2024-11-26T02:31:07.996443500Z" />
</component>
</project>

5
.idea/misc.xml

@ -14,6 +14,8 @@
<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_mater_adjust_setting.xml" value="0.23278985507246377" />
<entry key="..\:/TechScanProject/VicoFeedReport/app/src/main/res/layout/activity_pro_feed.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" />
@ -27,8 +29,11 @@
<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.xml" value="0.15817356205852673" />
<entry key="..\:/TechScanProject/VicoFeedReport/app/src/main/res/layout/form_item_edit_select_scan.xml" value="0.2246376811594203" />
<entry key="..\:/TechScanProject/VicoFeedReport/app/src/main/res/layout/form_item_text.xml" value="0.23278985507246377" />
<entry key="..\:/TechScanProject/VicoFeedReport/app/src/main/res/layout/form_item_time_quantum.xml" value="0.23278985507246377" />
<entry key="..\:/TechScanProject/VicoFeedReport/app/src/main/res/layout/form_item_title.xml" value="0.23278985507246377" />
<entry key="..\:/TechScanProject/VicoFeedReport/app/src/main/res/layout/item_multi_choice_bottom_popup.xml" value="0.2246376811594203" />
<entry key="..\:/TechScanProject/VicoFeedReport/app/src/main/res/layout/layout_bottom_btn.xml" value="0.2246376811594203" />
<entry key="..\:/TechScanProject/VicoFeedReport/app/src/main/res/layout/layout_bottom_btn1.xml" value="0.2246376811594203" />

2
app/build.gradle

@ -9,7 +9,7 @@ android {
//noinspection ExpiredTargetSdkVersion
targetSdkVersion 29
versionCode 1
versionName "1.0.14"
versionName "1.0.15"
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.14","enabled":true,"outputFile":"维科上料报工系统_v1.0.14.apk","fullName":"release","baseName":"release"},"path":"维科上料报工系统_v1.0.14.apk","properties":{}}]
[{"outputType":{"type":"APK"},"apkInfo":{"type":"MAIN","splits":[],"versionCode":1,"versionName":"1.0.15","enabled":true,"outputFile":"维科上料报工系统_v1.0.15.apk","fullName":"release","baseName":"release"},"path":"维科上料报工系统_v1.0.15.apk","properties":{}}]

13
app/src/main/AndroidManifest.xml

@ -67,6 +67,18 @@
android:name="com.techscan.wk.ui.proreq.ProReqActivity"
android:exported="false"
android:windowSoftInputMode="stateAlwaysHidden|adjustPan" />
<activity
android:name="com.techscan.wk.ui.proreq.MaterialAdjustmentActivity"
android:exported="false"
android:windowSoftInputMode="stateAlwaysHidden|adjustPan" >
</activity> <activity
android:name="com.techscan.wk.ui.proreq.MaterialAdjustSettingActivity"
android:exported="false"
android:windowSoftInputMode="stateAlwaysHidden|adjustPan" >
</activity>
<activity
android:name="com.techscan.wk.ui.proreq.ProReturnActivity"
android:exported="false"
@ -94,6 +106,7 @@
<activity
android:name="com.techscan.wk.ui.login.LoginActivity"
android:screenOrientation="portrait"
android:exported="true"
android:windowSoftInputMode="stateAlwaysHidden|adjustPan">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

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

@ -114,6 +114,19 @@
"en": "Finished warehousing",
"th": "เสร็จแล้วเข้าไปในห้อง"
}
} ,
{
"id": 17,
"name": "领料调整",
"icon": "xtzk",
"to": "com.techscan.wk.ui.proreq.MaterialAdjustmentActivity",
"show": "1",
"children": [],
"language": {
"zh": "领料调整",
"en": "Material requisition adjustment",
"th": "ปรับขนาดวัสดุ"
}
}
]

158
app/src/main/assets/ProFeedUI.json

@ -0,0 +1,158 @@
[
{
"id": 1,
"type": 2,
"fieldName": "ZGWH",
"name": "工位号",
"value": "",
"editExp": 0,
"values": [],
"mast": false,
"canChange": true,
"isShow": true,
"language": {
"zh": "工位号",
"en": "working location number",
"th": "จำนวนคนงาน"
}
},
{
"id": 2,
"type": 2,
"fieldName": "AUFNR1",
"name": "来源工单号",
"value": "",
"editExp": 0,
"values": [],
"mast": false,
"canChange": true,
"isShow": true,
"isFocus": false,
"language": {
"zh": "来源工单号",
"en": "Source work order number",
"th": "ชื่อต้น"
}
},
{
"id": 3,
"type": 2,
"fieldName": "AUFNR2",
"name": "目标工单号",
"value": "",
"editExp": 0,
"values": [],
"mast": false,
"canChange": true,
"isShow": true,
"isFocus": false,
"language": {
"zh": "目标工单号",
"en": "Target work order number",
"th": "หมายเลขรายการเป้าหมาย"
}
},
{
"id": 4,
"type": 2,
"fieldName": "barcode",
"name": "条码",
"value": "",
"editExp": 0,
"values": [],
"mast": false,
"canChange": true,
"isShow": true,
"language": {
"zh": "条码",
"en": "barcode",
"th": "บาร์โค้ด"
}
},
{
"id": 5,
"type": 2,
"fieldName": "lgort",
"name": "库存地点",
"value": "",
"editExp": 0,
"values": [],
"mast": false,
"canChange": false,
"isShow": true,
"language": {
"zh": "库存地点",
"en": "Stock location",
"th": "สถาน ที่เก็บสินค้า"
}
},
{
"id": 6,
"type": 2,
"fieldName": "MATNR",
"name": "物料号",
"value": "",
"editExp": 0,
"values": [],
"mast": false,
"canChange": false,
"isShow": true,
"language": {
"zh": "物料号",
"en": "Material number",
"th": "หมายเลขวัสดุ"
}
},
{
"id": 7,
"type": 2,
"fieldName": "erfme",
"name": "单位",
"value": "",
"editExp": 0,
"values": [],
"mast": false,
"canChange": false,
"isShow": true,
"language": {
"zh": "单位",
"en": "unit",
"th": "หน่วย"
}
},
{
"id": 8,
"type": 2,
"fieldName": "ZXTPC",
"name": "箱号",
"value": "",
"editExp": 0,
"values": [],
"mast": false,
"canChange": false,
"isShow": false,
"language": {
"zh": "箱号",
"en": "Case number",
"th": "หมายเลขกล่อง"
}
},
{
"id": 9,
"type": 2,
"fieldName": "quantity",
"name": "数量",
"value": "",
"editExp": 2,
"values": [],
"mast": false,
"canChange": true,
"isShow": true,
"language": {
"zh": "数量",
"en": "quantity",
"th": "จำนวน"
}
}
]

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

@ -19,7 +19,7 @@
For example:
<version value="1" />
-->
<version value="24" />
<version value="32" />
<!--
Define your models in the list with mapping tag, LitePal will
create tables for each mapping class. The supported fields
@ -38,6 +38,10 @@
<mapping class="com.techscan.wk.model.FlowOrderDetailBean" />
<mapping class="com.techscan.wk.model.FlowReportWorkDetailBean" />
<mapping class="com.techscan.wk.model.FlowReportWorkProOrderBean" />
<mapping class="com.techscan.wk.model.MaterialAdjustmentDetailBean" />
<mapping class="com.techscan.wk.model.ProOrde1TaskBean" />
<mapping class="com.techscan.wk.model.ProOrde2TaskBean" />
</list>
<!--

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

@ -18,7 +18,10 @@ public class AppConst {
public static final String KEY_IS_CONTINUOUS = "key_continuous_scan";
public static final String SCAN_ADD_DETAIL = "autoInserDetail";
public static final String SCAN_ADD_DETAIL2 = "autoInserDetail2";
public static final String HIDE_CJ = "hide_cj";
public static final String HIDE_GW = "hide_gw";
public static final String HIDE_GW2 = "hide_gw2";
public static final int CAMERA_CODE = 0x11;
public static final int REQUEST_CODE_SCAN_FOR_GROUP = 0X12;

141
app/src/main/java/com/techscan/wk/model/MaterialAdjustmentDetailBean.java

@ -0,0 +1,141 @@
package com.techscan.wk.model;
import org.litepal.crud.LitePalSupport;
public class MaterialAdjustmentDetailBean extends LitePalSupport {
private String gid;
private long taskRowId;
private String barcode;
private String aufnr1;//来源工单号
private String aufnr2;//目标工单号
private String erfme;//单位
private double erfmg;//物料数量
private String matnr;//物料编码
private String werks;//工厂代码
private String zcjbm;//车间编码
private String zgw;//工位号
private String zboxid;//箱号
private String zpc;//批次
private String lgort;//库存地点
private String lgortName;//库存地点
public String getLgort() {
return lgort;
}
public void setLgort(String lgort) {
this.lgort = lgort;
}
public String getLgortName() {
return lgortName;
}
public void setLgortName(String lgortName) {
this.lgortName = lgortName;
}
public String getGid() {
return gid;
}
public void setGid(String gid) {
this.gid = gid;
}
public long getTaskRowId() {
return taskRowId;
}
public void setTaskRowId(long taskRowId) {
this.taskRowId = taskRowId;
}
public String getBarcode() {
return barcode;
}
public void setBarcode(String barcode) {
this.barcode = barcode;
}
public String getAufnr1() {
return aufnr1;
}
public void setAufnr1(String aufnr1) {
this.aufnr1 = aufnr1;
}
public String getAufnr2() {
return aufnr2;
}
public void setAufnr2(String aufnr2) {
this.aufnr2 = aufnr2;
}
public String getErfme() {
return erfme;
}
public void setErfme(String erfme) {
this.erfme = erfme;
}
public double getErfmg() {
return erfmg;
}
public void setErfmg(double erfmg) {
this.erfmg = erfmg;
}
public String getMatnr() {
return matnr;
}
public void setMatnr(String matnr) {
this.matnr = matnr;
}
public String getWerks() {
return werks;
}
public void setWerks(String werks) {
this.werks = werks;
}
public String getZcjbm() {
return zcjbm;
}
public void setZcjbm(String zcjbm) {
this.zcjbm = zcjbm;
}
public String getZgw() {
return zgw;
}
public void setZgw(String zgw) {
this.zgw = zgw;
}
public String getZboxid() {
return zboxid;
}
public void setZboxid(String zboxid) {
this.zboxid = zboxid;
}
public String getZpc() {
return zpc;
}
public void setZpc(String zpc) {
this.zpc = zpc;
}
}

207
app/src/main/java/com/techscan/wk/model/ProOrde1TaskBean.java

@ -0,0 +1,207 @@
package com.techscan.wk.model;
import org.litepal.annotation.Column;
import org.litepal.crud.LitePalSupport;
public class ProOrde1TaskBean extends LitePalSupport {
private long id;
@Column(defaultValue = "0")
private Boolean complete; //是否完成
@Column(defaultValue = "0.00")
private double completeNum; //已完成数量
private long rowid; //自定义行id
private String aufnr;//订单号
private String ausch;//部件废品百分数
private double bdmng;//组件用量 //任务数量
private double bmeng;//基本数量
private double enmng;//提货数
private String erfme;//组件单位
private double erfmg;//组件用量(BOM单位)
private String lgort;//库存地点
private String lgortName;//库存地点名称
private String matnr;//组件物料编码
private String meins;//组件单位 //任务数量用到的单位
private double menge;//单位用量
private String posnr;//行项目
private String rgekz;//反冲
private String rsnum;//预留号
private String rspos;//预留行项目号
private String vornr;//工序编码
private String xloek;//删除标记
public String getLgortName() {
return lgortName;
}
public void setLgortName(String lgortName) {
this.lgortName = lgortName;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public long getRowid() {
return rowid;
}
public void setRowid(long rowid) {
this.rowid = rowid;
}
public Boolean getComplete() {
return complete;
}
public void setComplete(Boolean complete) {
this.complete = complete;
}
public double getCompleteNum() {
return completeNum;
}
public void setCompleteNum(double completeNum) {
this.completeNum = completeNum;
}
public String getAufnr() {
return aufnr;
}
public void setAufnr(String aufnr) {
this.aufnr = aufnr;
}
public String getAusch() {
return ausch;
}
public void setAusch(String ausch) {
this.ausch = ausch;
}
public double getBdmng() {
return bdmng;
}
public void setBdmng(double bdmng) {
this.bdmng = bdmng;
}
public double getBmeng() {
return bmeng;
}
public void setBmeng(double bmeng) {
this.bmeng = bmeng;
}
public double getEnmng() {
return enmng;
}
public void setEnmng(double enmng) {
this.enmng = enmng;
}
public String getErfme() {
return erfme;
}
public void setErfme(String erfme) {
this.erfme = erfme;
}
public double getErfmg() {
return erfmg;
}
public void setErfmg(double erfmg) {
this.erfmg = erfmg;
}
public String getLgort() {
return lgort;
}
public void setLgort(String lgort) {
this.lgort = lgort;
}
public String getMatnr() {
return matnr;
}
public void setMatnr(String matnr) {
this.matnr = matnr;
}
public String getMeins() {
return meins;
}
public void setMeins(String meins) {
this.meins = meins;
}
public double getMenge() {
return menge;
}
public void setMenge(double menge) {
this.menge = menge;
}
public String getPosnr() {
return posnr;
}
public void setPosnr(String posnr) {
this.posnr = posnr;
}
public String getRgekz() {
return rgekz;
}
public void setRgekz(String rgekz) {
this.rgekz = rgekz;
}
public String getRsnum() {
return rsnum;
}
public void setRsnum(String rsnum) {
this.rsnum = rsnum;
}
public String getRspos() {
return rspos;
}
public void setRspos(String rspos) {
this.rspos = rspos;
}
public String getVornr() {
return vornr;
}
public void setVornr(String vornr) {
this.vornr = vornr;
}
public String getXloek() {
return xloek;
}
public void setXloek(String xloek) {
this.xloek = xloek;
}
}

207
app/src/main/java/com/techscan/wk/model/ProOrde2TaskBean.java

@ -0,0 +1,207 @@
package com.techscan.wk.model;
import org.litepal.annotation.Column;
import org.litepal.crud.LitePalSupport;
public class ProOrde2TaskBean extends LitePalSupport {
private long id;
@Column(defaultValue = "0")
private Boolean complete; //是否完成
@Column(defaultValue = "0.00")
private double completeNum; //已完成数量
private long rowid; //自定义行id
private String aufnr;//订单号
private String ausch;//部件废品百分数
private double bdmng;//组件用量 //任务数量
private double bmeng;//基本数量
private double enmng;//提货数
private String erfme;//组件单位
private double erfmg;//组件用量(BOM单位)
private String lgort;//库存地点
private String lgortName;//库存地点名称
private String matnr;//组件物料编码
private String meins;//组件单位 //任务数量用到的单位
private double menge;//单位用量
private String posnr;//行项目
private String rgekz;//反冲
private String rsnum;//预留号
private String rspos;//预留行项目号
private String vornr;//工序编码
private String xloek;//删除标记
public String getLgortName() {
return lgortName;
}
public void setLgortName(String lgortName) {
this.lgortName = lgortName;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public long getRowid() {
return rowid;
}
public void setRowid(long rowid) {
this.rowid = rowid;
}
public Boolean getComplete() {
return complete;
}
public void setComplete(Boolean complete) {
this.complete = complete;
}
public double getCompleteNum() {
return completeNum;
}
public void setCompleteNum(double completeNum) {
this.completeNum = completeNum;
}
public String getAufnr() {
return aufnr;
}
public void setAufnr(String aufnr) {
this.aufnr = aufnr;
}
public String getAusch() {
return ausch;
}
public void setAusch(String ausch) {
this.ausch = ausch;
}
public double getBdmng() {
return bdmng;
}
public void setBdmng(double bdmng) {
this.bdmng = bdmng;
}
public double getBmeng() {
return bmeng;
}
public void setBmeng(double bmeng) {
this.bmeng = bmeng;
}
public double getEnmng() {
return enmng;
}
public void setEnmng(double enmng) {
this.enmng = enmng;
}
public String getErfme() {
return erfme;
}
public void setErfme(String erfme) {
this.erfme = erfme;
}
public double getErfmg() {
return erfmg;
}
public void setErfmg(double erfmg) {
this.erfmg = erfmg;
}
public String getLgort() {
return lgort;
}
public void setLgort(String lgort) {
this.lgort = lgort;
}
public String getMatnr() {
return matnr;
}
public void setMatnr(String matnr) {
this.matnr = matnr;
}
public String getMeins() {
return meins;
}
public void setMeins(String meins) {
this.meins = meins;
}
public double getMenge() {
return menge;
}
public void setMenge(double menge) {
this.menge = menge;
}
public String getPosnr() {
return posnr;
}
public void setPosnr(String posnr) {
this.posnr = posnr;
}
public String getRgekz() {
return rgekz;
}
public void setRgekz(String rgekz) {
this.rgekz = rgekz;
}
public String getRsnum() {
return rsnum;
}
public void setRsnum(String rsnum) {
this.rsnum = rsnum;
}
public String getRspos() {
return rspos;
}
public void setRspos(String rspos) {
this.rspos = rspos;
}
public String getVornr() {
return vornr;
}
public void setVornr(String vornr) {
this.vornr = vornr;
}
public String getXloek() {
return xloek;
}
public void setXloek(String xloek) {
this.xloek = xloek;
}
}

208
app/src/main/java/com/techscan/wk/model/ProOrder1Bean.java

@ -0,0 +1,208 @@
package com.techscan.wk.model;
import java.util.List;
public class ProOrder1Bean {
private String amein;
private String aufnr;
private String bmeng;
private String dauat;
private String dispo;
private String dwerk;
private String fevor;
private String gltrp;
private String gstrp;
private List<ProOrde1TaskBean> item;
private String lgort;
private String lgortName;
private String matnr;
private String plnal;
private String plnnr;
private String projn;
private String psmng;
private String stlal;
private String ueeto;
private String ybzq;
private String zremark;
private String zszjd;
private String zwlbc;
private String zzt;
private String zzy;
public String getLgortName() {
return lgortName;
}
public void setLgortName(String lgortName) {
this.lgortName = lgortName;
}
public void setAmein(String amein) {
this.amein = amein;
}
public String getAmein() {
return amein;
}
public void setAufnr(String aufnr) {
this.aufnr = aufnr;
}
public String getAufnr() {
return aufnr;
}
public void setBmeng(String bmeng) {
this.bmeng = bmeng;
}
public String getBmeng() {
return bmeng;
}
public void setDauat(String dauat) {
this.dauat = dauat;
}
public String getDauat() {
return dauat;
}
public void setDispo(String dispo) {
this.dispo = dispo;
}
public String getDispo() {
return dispo;
}
public void setDwerk(String dwerk) {
this.dwerk = dwerk;
}
public String getDwerk() {
return dwerk;
}
public void setFevor(String fevor) {
this.fevor = fevor;
}
public String getFevor() {
return fevor;
}
public void setGltrp(String gltrp) {
this.gltrp = gltrp;
}
public String getGltrp() {
return gltrp;
}
public void setGstrp(String gstrp) {
this.gstrp = gstrp;
}
public String getGstrp() {
return gstrp;
}
public void setItem(List<ProOrde1TaskBean> item) {
this.item = item;
}
public List<ProOrde1TaskBean> getItem() {
return item;
}
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 setPlnal(String plnal) {
this.plnal = plnal;
}
public String getPlnal() {
return plnal;
}
public void setPlnnr(String plnnr) {
this.plnnr = plnnr;
}
public String getPlnnr() {
return plnnr;
}
public void setProjn(String projn) {
this.projn = projn;
}
public String getProjn() {
return projn;
}
public void setPsmng(String psmng) {
this.psmng = psmng;
}
public String getPsmng() {
return psmng;
}
public void setStlal(String stlal) {
this.stlal = stlal;
}
public String getStlal() {
return stlal;
}
public void setUeeto(String ueeto) {
this.ueeto = ueeto;
}
public String getUeeto() {
return ueeto;
}
public void setYbzq(String ybzq) {
this.ybzq = ybzq;
}
public String getYbzq() {
return ybzq;
}
public void setZremark(String zremark) {
this.zremark = zremark;
}
public String getZremark() {
return zremark;
}
public void setZszjd(String zszjd) {
this.zszjd = zszjd;
}
public String getZszjd() {
return zszjd;
}
public void setZwlbc(String zwlbc) {
this.zwlbc = zwlbc;
}
public String getZwlbc() {
return zwlbc;
}
public void setZzt(String zzt) {
this.zzt = zzt;
}
public String getZzt() {
return zzt;
}
public void setZzy(String zzy) {
this.zzy = zzy;
}
public String getZzy() {
return zzy;
}
}

198
app/src/main/java/com/techscan/wk/model/ProOrder2Bean.java

@ -0,0 +1,198 @@
package com.techscan.wk.model;
import java.util.List;
public class ProOrder2Bean {
private String amein;
private String aufnr;
private String bmeng;
private String dauat;
private String dispo;
private String dwerk;
private String fevor;
private String gltrp;
private String gstrp;
private List<ProOrde2TaskBean> item;
private String lgort;
private String matnr;
private String plnal;
private String plnnr;
private String projn;
private String psmng;
private String stlal;
private String ueeto;
private String ybzq;
private String zremark;
private String zszjd;
private String zwlbc;
private String zzt;
private String zzy;
public void setAmein(String amein) {
this.amein = amein;
}
public String getAmein() {
return amein;
}
public void setAufnr(String aufnr) {
this.aufnr = aufnr;
}
public String getAufnr() {
return aufnr;
}
public void setBmeng(String bmeng) {
this.bmeng = bmeng;
}
public String getBmeng() {
return bmeng;
}
public void setDauat(String dauat) {
this.dauat = dauat;
}
public String getDauat() {
return dauat;
}
public void setDispo(String dispo) {
this.dispo = dispo;
}
public String getDispo() {
return dispo;
}
public void setDwerk(String dwerk) {
this.dwerk = dwerk;
}
public String getDwerk() {
return dwerk;
}
public void setFevor(String fevor) {
this.fevor = fevor;
}
public String getFevor() {
return fevor;
}
public void setGltrp(String gltrp) {
this.gltrp = gltrp;
}
public String getGltrp() {
return gltrp;
}
public void setGstrp(String gstrp) {
this.gstrp = gstrp;
}
public String getGstrp() {
return gstrp;
}
public void setItem(List<ProOrde2TaskBean> item) {
this.item = item;
}
public List<ProOrde2TaskBean> getItem() {
return item;
}
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 setPlnal(String plnal) {
this.plnal = plnal;
}
public String getPlnal() {
return plnal;
}
public void setPlnnr(String plnnr) {
this.plnnr = plnnr;
}
public String getPlnnr() {
return plnnr;
}
public void setProjn(String projn) {
this.projn = projn;
}
public String getProjn() {
return projn;
}
public void setPsmng(String psmng) {
this.psmng = psmng;
}
public String getPsmng() {
return psmng;
}
public void setStlal(String stlal) {
this.stlal = stlal;
}
public String getStlal() {
return stlal;
}
public void setUeeto(String ueeto) {
this.ueeto = ueeto;
}
public String getUeeto() {
return ueeto;
}
public void setYbzq(String ybzq) {
this.ybzq = ybzq;
}
public String getYbzq() {
return ybzq;
}
public void setZremark(String zremark) {
this.zremark = zremark;
}
public String getZremark() {
return zremark;
}
public void setZszjd(String zszjd) {
this.zszjd = zszjd;
}
public String getZszjd() {
return zszjd;
}
public void setZwlbc(String zwlbc) {
this.zwlbc = zwlbc;
}
public String getZwlbc() {
return zwlbc;
}
public void setZzt(String zzt) {
this.zzt = zzt;
}
public String getZzt() {
return zzt;
}
public void setZzy(String zzy) {
this.zzy = zzy;
}
public String getZzy() {
return zzy;
}
}

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

@ -107,4 +107,7 @@ public interface ApiService {
@POST("/web/order/savePick")
Observable<ResponseBody> savePick(@Body Map<String,Object> name);
@POST("/web/adjustPick/saveAdjust")
Observable<ResponseBody> saveAdjust(@Body Map<String,Object> name);
}

4
app/src/main/java/com/techscan/wk/rxretrofit/BaseResponseBean.java

@ -1,5 +1,9 @@
package com.techscan.wk.rxretrofit;
import com.techscan.wk.model.ProReqOrderBean;
import java.util.List;
/**
* @author created by FWS86
* 版本1.0

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

@ -394,6 +394,13 @@ public class HttpMethods {
.observeOn(AndroidSchedulers.mainThread())
.subscribe(observer);
}
public void saveAdjust(HashMap<String, Object> map, Observer<ResponseBody> observer) {
getApiService().saveAdjust(map)
.subscribeOn(Schedulers.io())
.unsubscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(observer);
}
public void reportResubmit(Map<String, Object> map, Observer<ResponseBody> observer) {
getApiService().reportResubmit(map)

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

@ -239,6 +239,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;
}

79
app/src/main/java/com/techscan/wk/ui/proreq/MaterialAdjustSettingActivity.java

@ -0,0 +1,79 @@
package com.techscan.wk.ui.proreq;
import android.content.Intent;
import android.os.Bundle;
import android.view.KeyEvent;
import android.widget.Switch;
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.utils.PreferencesUtil;
import butterknife.BindView;
import butterknife.ButterKnife;
/**
* 设置
*/
public class MaterialAdjustSettingActivity extends BaseActivity {
@BindView(R.id.topbar)
QMUITopBar topbar;
@BindView(R.id.swAutoInsertDetail)
Switch swAutoInsertDetail;
@BindView(R.id.swHideGw)
Switch swHideGw;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_mater_adjust_setting);
ButterKnife.bind(this);
boolean aBoolean = PreferencesUtil.getBoolean(context, AppConst.SCAN_ADD_DETAIL2, true);
//boolean isHIDE_GW = PreferencesUtil.getBoolean(context, AppConst.HIDE_GW2, false);
swAutoInsertDetail.setChecked(aBoolean);
//swHideGw.setChecked(isHIDE_GW);
initTopBar();
initSwitch();
}
/**
* 初始化标题栏
*/
private void initTopBar() {
topbar.setTitle(getString(R.string.configuration));
topbar.addLeftBackImageButton().setOnClickListener(v -> close());
}
private void initSwitch() {
swAutoInsertDetail.setOnCheckedChangeListener((buttonView, isChecked) -> {
PreferencesUtil.putBoolean(this, AppConst.SCAN_ADD_DETAIL2, isChecked);
});
swHideGw.setOnCheckedChangeListener((buttonView, isChecked) -> {
//PreferencesUtil.putBoolean(this, AppConst.HIDE_GW2, isChecked);
});
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
close();
return true;
}
return super.onKeyDown(keyCode, event);
}
private void close(){
Intent intent = new Intent();
setResult(AppConst.RESULT_CONFIG, intent);
finish();
}
}

987
app/src/main/java/com/techscan/wk/ui/proreq/MaterialAdjustmentActivity.java

@ -0,0 +1,987 @@
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.os.Handler;
import android.text.TextUtils;
import android.view.KeyEvent;
import android.view.View;
import android.widget.Button;
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.blankj.utilcode.util.KeyboardUtils;
import com.blankj.utilcode.util.StringUtils;
import com.blankj.utilcode.util.ToastUtils;
import com.google.gson.reflect.TypeToken;
import com.king.zxing.Intents;
import com.lxj.xpopup.XPopup;
import com.qmuiteam.qmui.widget.QMUITopBar;
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;
import com.techscan.wk.model.MaterialAdjustmentDetailBean;
import com.techscan.wk.model.ProOrde1TaskBean;
import com.techscan.wk.model.ProOrde2TaskBean;
import com.techscan.wk.model.ProOrder1Bean;
import com.techscan.wk.model.ProOrder2Bean;
import com.techscan.wk.model.ProReqOrdeTaskBean;
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.scan.CustomCaptureActivity;
import com.techscan.wk.utils.AntiShakeUtils;
import com.techscan.wk.utils.BarAnalysisUtils;
import com.techscan.wk.utils.FindUtils;
import com.techscan.wk.utils.PreferencesUtil;
import com.techscan.wk.utils.SoundUtils;
import com.techscan.wk.utils.ToastUtil;
import com.techscan.wk.utils.route.Router;
import com.techscan.wk.utils.statusbar.StatusBarUtil;
import com.techscan.wk.widgets.CustomBottomSheet;
import org.litepal.LitePal;
import java.lang.reflect.Type;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import io.reactivex.disposables.Disposable;
import okhttp3.ResponseBody;
import q.rorbin.badgeview.QBadgeView;
/**
* Description:领料调整
* [)>@06@QRPART@10V101010@1P11002177@3SX1000019400001@1T20240724001@Q20@14D20240724@@
*
* @author MULEI
* @date 2024/11/19
*/
public class MaterialAdjustmentActivity extends CommonFunctionActivity {
@BindView(R.id.topbar)
QMUITopBar topbar;
@BindView(R.id.et_value)
EditText etValue;
@BindView(R.id.iv_scan)
ImageView ivScan;
@BindView(R.id.ll_scan)
LinearLayout llScan;
@BindView(R.id.rv_ui)
RecyclerView rvUi;
// @BindView(R.id.btn_task)
// Button btnTask;
@BindView(R.id.btn_detail)
Button btnDetail;
@BindView(R.id.btn_revoke)
Button btnRevoke;
@BindView(R.id.btn_submit)
Button btnSubmit;
@BindView(R.id.ll_bottom)
LinearLayout llBottom;
QBadgeView qTaskBadgeView, qDetailBadgeView;
private DynamicFormAdapter dynamicFormAdapter;
private List<DynamicFormBean> dynamicFormBeans;
private DynamicFormBean selectDynamicFormBean;
private Map<String, List<String>> scanBarcodeListMap;//存放条码扫描明细
private boolean isSave = false;
private List<ProOrder1Bean> proOrder1Beans;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_pro_feed);
if (savedInstanceState == null) {
clearAllData();
}
StatusBarUtil.setStatusBarColor(this, ContextCompat.getColor(this, R.color.app_color_blue));
ButterKnife.bind(this);
setBody(true);
scanBarcodeListMap = new HashMap<>();
Disposable register = RxBus.getInstance().register(Event.class, eventMsg -> {
/*这个地方获取到数据。并执行相应的操作*/
if (eventMsg.getCode() == 0) {
String removeKey = eventMsg.getRemoveKey();
if (removeKey.contains(",")) {
String[] removeKeys = removeKey.split(",");
for (String s : removeKeys) {
scanBarcodeListMap.remove(s);
}
} else {
scanBarcodeListMap.remove(removeKey);
}
showTaskDetailBadgeNum();
}
});
RxBus.getInstance().addSubscription(this, register);
qTaskBadgeView = new QBadgeView(context);
//qTaskBadgeView.bindTarget(btnTask);
qDetailBadgeView = new QBadgeView(context);
qDetailBadgeView.bindTarget(btnDetail);
initTopBar();
initListeners();
initRvData();
rvUi.postDelayed(() -> {
setNextFocus("ZGWH");
}, 100);
}
/**
* 初始化顶部标题栏
*/
private void initTopBar() {
topbar.setTitle("领料调整");
topbar.addLeftBackImageButton().setOnClickListener(v -> finishActivity());
topbar.addRightTextButton(getString(R.string.configuration), 0).setOnClickListener(view -> Router.newIntent(context).to(MaterialAdjustSettingActivity.class).requestCode(AppConst.REQUEST_CONFIG).launch());
}
/**
* 界面数据回调监听设置
*/
private void initListeners() {
}
@Override
protected void onResume() {
super.onResume();
showTaskDetailBadgeNum();
}
/**
* 初始化动态列表数据
*/
private void initRvData() {
// 从资源文件中读取界面数据
String jsonStr = FindUtils.readJsonFromFile(context, "ProFeedUI.json");
// 将读取到的json数据转化为动态表单对象
Type objectType = new TypeToken<List<DynamicFormBean>>() {
}.getType();
//动态表单数据
dynamicFormBeans = gson.fromJson(jsonStr, objectType);
// 动态表单绑定数据并绑定适配器到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));
}
}
});
dynamicFormAdapter.setOnFormItemViewActionListener((dynamicFormBean, position) -> {
String value = dynamicFormBean.getValue();
if (TextUtils.isEmpty(value)) {
showError(getString(R.string.Data_cannot_be_empty));
return;
}
switch (dynamicFormBean.getFieldName()) {
// case "ZCJBM":
// setNextFocus("ZGWH");
// break;
case "ZGWH":
setNextFocus("AUFNR1");
break;
case "AUFNR1":
if (TextUtils.isEmpty(value)) {
showError(getString(R.string.The_work_order_number_cannot_be_empty));
dynamicFormAdapter.setFocusAndClearValueById(dynamicFormBean.getId());
return;
}
if (LitePal.count(MaterialAdjustmentDetailBean.class) > 0) {
new QMUIDialog.MessageDialogBuilder(context)
.setTitle(getResources().getString(R.string.tips_title))
.setMessage(getString(R.string.Do_you_want_to_rescan_the_work_order))
.addAction(getResources().getString(R.string.cancel_info), (dialog, index) -> dialog.dismiss())
.addAction(getResources().getString(R.string.confirm_info), (dialog, index) -> {
dialog.dismiss();
LitePal.deleteAllAsync(MaterialAdjustmentDetailBean.class).listen(i -> {
LitePal.deleteAll(ProOrde1TaskBean.class);
for (int j = 0; j < dynamicFormBeans.size(); j++) {
DynamicFormBean bean = dynamicFormBeans.get(j);
if (bean.getFieldName().equals("AUFNR1") ||
bean.getFieldName().equals("AUFNR2") ||
bean.getFieldName().equals("ZGWH")) {
continue;
} else {
bean.setValue("");
}
}
dynamicFormAdapter.setFocusById(dynamicFormBean.getId());
scanBarcodeListMap = new HashMap<>();
query(value, dynamicFormBean.getFieldName());
});
})
.create(R.style.QMUI_Dialog).show();
} else {
LitePal.deleteAll(ProOrde1TaskBean.class);
query(value, dynamicFormBean.getFieldName());
}
break;
case "AUFNR2":
if (LitePal.count(ProOrde1TaskBean.class) == 0) {
showError("请先扫码来源工单号");
setNextFocus("AUFNR1");
return;
}
if (TextUtils.isEmpty(value)) {
showError(getString(R.string.The_work_order_number_cannot_be_empty));
dynamicFormAdapter.setFocusAndClearValueById(dynamicFormBean.getId());
return;
}
if (LitePal.count(MaterialAdjustmentDetailBean.class) > 0) {
new QMUIDialog.MessageDialogBuilder(context)
.setTitle(getResources().getString(R.string.tips_title))
.setMessage(getString(R.string.Do_you_want_to_rescan_the_work_order))
.addAction(getResources().getString(R.string.cancel_info), (dialog, index) -> dialog.dismiss())
.addAction(getResources().getString(R.string.confirm_info), (dialog, index) -> {
dialog.dismiss();
LitePal.deleteAllAsync(MaterialAdjustmentDetailBean.class).listen(i -> {
LitePal.deleteAll(ProOrde2TaskBean.class);
for (int j = 0; j < dynamicFormBeans.size(); j++) {
DynamicFormBean bean = dynamicFormBeans.get(j);
if (bean.getFieldName().equals("AUFNR1") ||
bean.getFieldName().equals("AUFNR2") ||
bean.getFieldName().equals("ZGWH")) {
continue;
} else {
bean.setValue("");
}
}
dynamicFormAdapter.setFocusById(dynamicFormBean.getId());
scanBarcodeListMap = new HashMap<>();
query(value, dynamicFormBean.getFieldName());
});
})
.create(R.style.QMUI_Dialog).show();
} else {
LitePal.deleteAll(ProOrde2TaskBean.class);
query(value, dynamicFormBean.getFieldName());
}
break;
case "barcode":
if (LitePal.count(ProOrde1TaskBean.class) == 0) {
showError("请先扫码来源工单号");
setNextFocus("AUFNR1");
return;
}
if (LitePal.count(ProOrde2TaskBean.class) == 0) {
showError("请先扫码目标工单号");
setNextFocus("AUFNR2");
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;
// }
getBarcodeInfo(value);
break;
case "quantity":
DynamicFormBean barcodeItem = dynamicFormAdapter.getItemByFieldName("barcode");//条码
String barcodeItemValue = barcodeItem.getValue();
checkBarcode = BarAnalysisUtils.checkBarcodePresuffix(barcodeItemValue);
if (!checkBarcode) {
setNextFocus("barcode");
showError(getString(R.string.The_barcode_format_is_incorrect) + value);
return;
}
AnalysisBarBean barDataBean = BarAnalysisUtils.analysisBarcode(barcodeItemValue);
barDataBean.setQuantity(value);
String materiel = barDataBean.getMateriel();
if (TextUtils.isEmpty(materiel)) {
setNextFocus("barcode");
showError(getString(R.string.There_is_no_aterial_information_in_the_barcode_please_confirm));
return;
}
addDetailCheck(barDataBean);
break;
default:
break;
}
});
}
/**
* 解析条码信息并比对工单产品信息
*
* @param value 条码内容
*/
private void getBarcodeInfo(String value) {
AnalysisBarBean barDataBean = BarAnalysisUtils.analysisBarcode(value);
String materiel = barDataBean.getMateriel();
if (TextUtils.isEmpty(materiel)) {
setNextFocus("barcode");
showError(getString(R.string.There_is_no_aterial_information_in_the_barcode_please_confirm));
return;
}
//来源工单任务数据
List<ProOrde1TaskBean> proFeedOrde1TaskBeans = LitePal.where("matnr = ?", barDataBean.getMateriel()).find(ProOrde1TaskBean.class);
//目标工单任务数据
List<ProOrde2TaskBean> proFeedOrde2TaskBeans = LitePal.where("matnr = ?", barDataBean.getMateriel()).find(ProOrde2TaskBean.class);
if (proFeedOrde1TaskBeans.size() == 0) {
setNextFocus("barcode");
//未找到相同维度数据,报错
showError("来源工单没有该物料信息");
return;
}
if (proFeedOrde2TaskBeans.size() == 0) {
setNextFocus("barcode");
//未找到相同维度数据,报错
showError("目标工单没有该物料信息");
return;
}
//判断目标工单中是否有来源工单中库存地点信息
String lgort = proFeedOrde1TaskBeans.get(0).getLgort();
String lgortName = proFeedOrde1TaskBeans.get(0).getLgortName();
List<ProOrde2TaskBean> proFeedOrde2TaskBeans1 = LitePal.where("matnr = ? and lgort = ?",
barDataBean.getMateriel(), lgort).find(ProOrde2TaskBean.class);
if (proFeedOrde2TaskBeans1.size() == 0) {
showError("目标工单物料中没有与来源工单相同物料和库存地点");
setNextFocus("barcode");
return;
}
for (DynamicFormBean d : dynamicFormBeans) {
switch (d.getFieldName()) {
case "lgort"://库存地点
String showValue = lgort + " " + lgortName;
d.setValue(showValue);
break;
case "MATNR"://物料号
d.setValue(barDataBean.getMateriel());
d.setFocus(false);
break;
case "ZXTPC"://包装容器号 --箱号
d.setValue(barDataBean.getPackageNumber());
d.setFocus(false);
break;
case "quantity"://数量
d.setValue(barDataBean.getQuantity());
d.setFocus(true);
break;
case "erfme"://单位
d.setValue(proFeedOrde1TaskBeans.get(0).getMeins());
d.setFocus(true);
break;
default:
d.setFocus(false);
break;
}
}
dynamicFormAdapter.setList(dynamicFormBeans);
dynamicFormAdapter.notifyDataSetChanged();
//判断是否开启 扫描自动加入明细
boolean aBoolean = PreferencesUtil.getBoolean(context, AppConst.SCAN_ADD_DETAIL2, true);
if (aBoolean) {
new Handler().postDelayed(() -> addDetailCheck(barDataBean), 200);
}
}
/**
* 加入明细前校验
*/
private void addDetailCheck(AnalysisBarBean barDataBean) {
if (LitePal.count(ProOrde1TaskBean.class) == 0) {
showError("请先扫描来源工单号");
setNextFocus("AUFNR1");
return;
}
if (LitePal.count(ProOrde2TaskBean.class) == 0) {
showError("请先扫描目标工单号");
setNextFocus("AUFNR2");
return;
}
if (barDataBean == null) {
showError(getString(R.string.The_bar_code_cannot_be_blank));
setNextFocus("barcode");
return;
}
String quantity = barDataBean.getQuantity();
if (TextUtils.isEmpty(quantity)) {
setNextFocus("quantity");
showError(getString(R.string.The_quantity_cannot_be_empty));
return;
}
if (!checkNumber(quantity)) {
showError(getString(R.string.The_quantity_is_not_correct));
setNextFocus("quantity");
return;
}
BigDecimal quantityBD = new BigDecimal(quantity);
//当前加入明细的数量
double currenScanNum = quantityBD.doubleValue();
if (currenScanNum <= 0) {
showError(getString(R.string.The_number_of_scanned_codes_must_be_greater_than_0));
return;
}
addDetail(barDataBean, currenScanNum);
}
/**
* 加入明细方法
*/
private void addDetail(AnalysisBarBean barDataBean, double currenScanNum) {
DynamicFormBean lgortItem = dynamicFormAdapter.getItemByFieldName("lgort");//库存地点
DynamicFormBean ZGWHItem = dynamicFormAdapter.getItemByFieldName("ZGWH");//工位号
DynamicFormBean barcodeItem = dynamicFormAdapter.getItemByFieldName("barcode");//条码
DynamicFormBean MATNRItem = dynamicFormAdapter.getItemByFieldName("MATNR");//物料编码
DynamicFormBean ZXTPCItem = dynamicFormAdapter.getItemByFieldName("ZXTPC");//箱号
DynamicFormBean erfmeItem = dynamicFormAdapter.getItemByFieldName("erfme");//单位
DynamicFormBean AUFNR1Item = dynamicFormAdapter.getItemByFieldName("AUFNR1");//来源工单号
DynamicFormBean AUFNR2Item = dynamicFormAdapter.getItemByFieldName("AUFNR2");//目标工单号
if (TextUtils.isEmpty(AUFNR1Item.getValue())) {
showError("请先扫描来源工单号");
setNextFocus("AUFNR1");
return;
}
if (TextUtils.isEmpty(AUFNR1Item.getValue())) {
showError("请先扫描目标工单号");
setNextFocus("AUFNR2");
return;
}
String barcode = barDataBean.getBarcode();
if (TextUtils.isEmpty(barcode)) {
showError(getString(R.string.The_bar_code_cannot_be_blank));
setNextFocus("barcode");
return;
}
LitePal
.where("matnr = ?", MATNRItem.getValue())
.findAsync(ProOrde1TaskBean.class)
.listen(proFeedOrde1TaskBeans -> {
if (proFeedOrde1TaskBeans.size() == 0) {
//未找到相同维度数据,报错
showError("来源工单没有该物料信息");
return;
}
double scanQuantity = currenScanNum;
String gid = System.currentTimeMillis() + "";
//加入明细,并且可以超量,每次只匹配任务一行
for (ProOrde1TaskBean bean : proFeedOrde1TaskBeans) {
double taskNum = bean.getBdmng();
double completeNum = bean.getCompleteNum();
bean.setCompleteNum(scanQuantity + completeNum);
if (scanQuantity + completeNum >= taskNum) {
bean.setComplete(true);
} else {
bean.setComplete(false);
}
bean.save();
MaterialAdjustmentDetailBean detailBean = new MaterialAdjustmentDetailBean();
detailBean.setBarcode(barcode);
detailBean.setTaskRowId(bean.getRowid());
detailBean.setGid(gid);
detailBean.setAufnr1(AUFNR1Item.getValue());
detailBean.setAufnr2(AUFNR2Item.getValue());
detailBean.setErfme(bean.getMeins());
detailBean.setErfmg(scanQuantity);
detailBean.setMatnr(bean.getMatnr());
detailBean.setZgw(ZGWHItem.getValue());
detailBean.setZboxid(ZXTPCItem.getValue());
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;
}
//将当前条码存入对应的条码扫描明细中
List<String> keyBarcodes = new ArrayList<>();
keyBarcodes.add(barcode);
scanBarcodeListMap.put(gid, keyBarcodes);
runOnUiThread(() -> {
SoundUtils.playSound(this, R.raw.ok);
if (KeyboardUtils.isSoftInputVisible(context)) {
KeyboardUtils.hideSoftInput(context);
}
for (int i = 0; i < dynamicFormBeans.size(); i++) {
DynamicFormBean dynamicFormBean = dynamicFormBeans.get(i);
if (dynamicFormBean.getFieldName().equals("AUFNR1") ||
dynamicFormBean.getFieldName().equals("AUFNR2") ||
dynamicFormBean.getFieldName().equals("ZGWH")) {
continue;
}
dynamicFormBean.setValue("");
}
showTaskDetailBadgeNum();
setNextFocus("barcode");
});
});
}
/**
* 根据工单获取工单物料信息
*
* @param id 工单号
*/
private void query(String id, String fieldName) {
if (fieldName.equals("AUFNR1")) {
HttpMethods.getInstance().getOrderInfo(id, true, new BaseObserver<ResponseBody>(context) {
@Override
protected void onSuccess(ResponseBody body) throws Exception {
String string = body.string();
Type objectType = new TypeToken<BaseResponseBean<List<ProOrder1Bean>>>() {
}.getType();
BaseResponseBean<List<ProOrder1Bean>> baseResponseBean = gson.fromJson(string, objectType);
if (baseResponseBean.getCode() != 200) {
showError(baseResponseBean.getMsg());
setNextFocus("AUFNR1");
return;
}
proOrder1Beans = baseResponseBean.getData();
if (proOrder1Beans == null || proOrder1Beans.size() == 0) {
showError(getString(R.string.No_data_was_obtained));
setNextFocus("AUFNR1");
return;
}
ProOrder1Bean proOrder1Bean = proOrder1Beans.get(0);
List<ProOrde1TaskBean> item = proOrder1Bean.getItem();
if (item.size() == 0) {
showError(getString(R.string.No_data_was_obtained));
setNextFocus("AUFNR1");
return;
}
// String lgort = proOrder1Bean.getLgort();
// for (int i = 0; i < dynamicFormBeans.size(); i++) {
// DynamicFormBean dynamicFormBean = dynamicFormBeans.get(i);
// if (dynamicFormBean.getFieldName().equals("lgort")) {
// dynamicFormBean.setValue(lgort);
// break;
// }
// }
// dynamicFormAdapter.notifyDataSetChanged();
QMUITipDialog qmuiTipDialog = new QMUITipDialog.Builder(context).setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING).create();
qmuiTipDialog.setCancelable(false);
qmuiTipDialog.setCanceledOnTouchOutside(false);
qmuiTipDialog.show();
for (int i = 0; i < item.size(); i++) {
ProOrde1TaskBean taskBean = item.get(i);
taskBean.setRowid(System.currentTimeMillis());
taskBean.save();
}
qmuiTipDialog.dismiss();
setNextFocus("AUFNR2");
}
@Override
protected void onFailure(Throwable e) throws Exception {
showTaskDetailBadgeNum();
setNextFocus("AUFNR1");
SoundUtils.playSound(MaterialAdjustmentActivity.this, R.raw.warning);
CustomErrorDialog(e, MaterialAdjustmentActivity.this);
}
});
} else if (fieldName.equals("AUFNR2")) {
HttpMethods.getInstance().getOrderInfo(id, true, new BaseObserver<ResponseBody>(context) {
@Override
protected void onSuccess(ResponseBody body) throws Exception {
String string = body.string();
Type objectType = new TypeToken<BaseResponseBean<List<ProOrder2Bean>>>() {
}.getType();
BaseResponseBean<List<ProOrder2Bean>> baseResponseBean = gson.fromJson(string, objectType);
if (baseResponseBean.getCode() != 200) {
showError(baseResponseBean.getMsg());
setNextFocus("AUFNR2");
return;
}
List<ProOrder2Bean> data = baseResponseBean.getData();
if (data == null || data.size() == 0) {
showError(getString(R.string.No_data_was_obtained));
setNextFocus("AUFNR2");
return;
}
ProOrder2Bean proOrder2Bean = data.get(0);
List<ProOrde2TaskBean> item = proOrder2Bean.getItem();
if (item.size() == 0) {
showError(getString(R.string.No_data_was_obtained));
setNextFocus("AUFNR2");
return;
}
QMUITipDialog qmuiTipDialog = new QMUITipDialog.Builder(context).setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING).create();
qmuiTipDialog.setCancelable(false);
qmuiTipDialog.setCanceledOnTouchOutside(false);
qmuiTipDialog.show();
for (int i = 0; i < item.size(); i++) {
ProOrde2TaskBean taskBean = item.get(i);
taskBean.setRowid(System.currentTimeMillis());
taskBean.save();
}
qmuiTipDialog.dismiss();
setNextFocus("barcode");
}
@Override
protected void onFailure(Throwable e) throws Exception {
showTaskDetailBadgeNum();
setNextFocus("AUFNR2");
SoundUtils.playSound(MaterialAdjustmentActivity.this, R.raw.warning);
CustomErrorDialog(e, MaterialAdjustmentActivity.this);
}
});
}
}
/**
* 显示任务和明细角标
*/
private void showTaskDetailBadgeNum() {
//int taskCount = LitePal.count(ProOrde1TaskBean.class);
int count = LitePal.count(MaterialAdjustmentDetailBean.class);
//qTaskBadgeView.setBadgeNumber(taskCount);
qDetailBadgeView.setBadgeNumber(count);
}
/**
* 重新刷新ui
*/
@SuppressLint("SetTextI18n")
private void reInitUI() {
runOnUiThread(() -> {
scanBarcodeListMap = new HashMap<>();
clearAllData();
clearRvData();
showTaskDetailBadgeNum();
setNextFocus("AUFNR1");
});
}
@OnClick({R.id.iv_scan, R.id.btn_detail, R.id.btn_submit, R.id.btn_revoke})
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;
case R.id.btn_detail:
LitePal
.findAllAsync(MaterialAdjustmentDetailBean.class)
.listen(materialAdjustmentDetailBeans -> {
if (materialAdjustmentDetailBeans.size() == 0) {
showError(getString(R.string.No_details_are_available));
return;
}
customBottomSheet = new CustomBottomSheet<>(context, getResources().getString(R.string.detail_info), materialAdjustmentDetailBeans, 1);
new XPopup.Builder(context)
.moveUpToKeyboard(false) //如果不加这个,评论弹窗会移动到软键盘上面
.isRequestFocus(false)
.autoFocusEditText(false)
.autoOpenSoftInput(false)
.asCustom(customBottomSheet)
.show();
});
break;
// case R.id.btn_task:
// LitePal.findAllAsync(ProReqOrdeTaskBean.class).listen(list -> {
// if (list.size() == 0) {
// showError(getString(R.string.No_task_please_scan_the_ticket_number_first));
// return;
// }
// customBottomSheet = new CustomBottomSheet<>(context, getResources().getString(R.string.task_info), list, 1);
// new XPopup.Builder(context)
// .moveUpToKeyboard(false) //如果不加这个,评论弹窗会移动到软键盘上面
// .isRequestFocus(false)
// .autoFocusEditText(false)
// .autoOpenSoftInput(false)
// .asCustom(customBottomSheet)
// .show();
// });
// break;
case R.id.btn_submit:
if (isSave) return;
saveData();
break;
}
}
/**
* 保存数据
*/
private void saveData() {
LitePal.findAllAsync(MaterialAdjustmentDetailBean.class).listen(items -> {
if (items.size() == 0) {
ToastUtils.showLong(getString(R.string.No_data_can_be_saved));
return;
}
isSave = true;
HashMap<String, Object> map = new HashMap<>();
map.put("list", items);
HttpMethods.getInstance().saveAdjust(map, new BaseObserver<ResponseBody>(context) {
@Override
protected void onSuccess(ResponseBody responseBody) throws Exception {
isSave = false;
String string = responseBody.string();
Type objectType = new TypeToken<BaseResponseBean<String>>() {
}.getType();
BaseResponseBean<String> baseResponseBean = gson.fromJson(string, objectType);
if (baseResponseBean.getCode() != 200) {
showError(baseResponseBean.getMsg());
return;
}
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();
reInitUI();
}
@Override
protected void onFailure(Throwable e) throws Exception {
isSave = false;
CustomErrorDialog(e, MaterialAdjustmentActivity.this);
}
});
});
}
/**
* 初始化adapter数据
*/
public void clearRvData() {
for (int i = 0; i < dynamicFormBeans.size(); i++) {
DynamicFormBean dynamicFormBean = dynamicFormBeans.get(i);
dynamicFormBean.setValue("");
if (dynamicFormBean.getType() == DynamicFormBean.TIME) {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA);
//获取当前时间
Date date = new Date(System.currentTimeMillis());
dynamicFormBean.setValue(simpleDateFormat.format(date));
}
}
dynamicFormAdapter.notifyDataSetChanged();
}
/**
* 扫码
*
* @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();
}
}
@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)) {
showError(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 "barcode":
break;
}
}
}
}
private void setNextFocus(String name) {
if (KeyboardUtils.isSoftInputVisible(context)) {
KeyboardUtils.hideSoftInput(context);
}
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();
}, 100);
}
private void showError(String msg) {
SoundUtils.playSound(context, R.raw.warning);
ToastUtil.showShortToastCenter(context, msg);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
finishActivity();
return true;
}
return super.onKeyDown(keyCode, event);
}
private void finishActivity() {
int count = LitePal.count(MaterialAdjustmentDetailBean.class);
if (count > 0) {
new QMUIDialog.MessageDialogBuilder(context)
.setTitle(getResources().getString(R.string.tips_title))
.setMessage(getString(R.string.Are_you_sure_to_exit))
.addAction(getResources().getString(R.string.cancel_info), (dialog, index) -> dialog.dismiss())
.addAction(getResources().getString(R.string.confirm_info), (dialog, index) -> {
dialog.dismiss();
LitePal.deleteAllAsync(MaterialAdjustmentDetailBean.class).listen(i -> {
LitePal.deleteAll(ProOrde1TaskBean.class);
LitePal.deleteAll(ProOrde2TaskBean.class);
});
})
.create(R.style.QMUI_Dialog).show();
} else {
finish();
}
}
//数字验证(包含小数点)
public static boolean checkNumber(String str) {
String regex = "-[0-9]+(.[0-9]+)?|[0-9]+(.[0-9]+)?";
if (str == null || !str.matches(regex)) {
return false;
}
return true;
}
public void clearAllData() {
if (LitePal.count(MaterialAdjustmentDetailBean.class) > 0) {
LitePal.deleteAll(MaterialAdjustmentDetailBean.class);
}
if (LitePal.count(ProOrde1TaskBean.class) > 0) {
LitePal.deleteAll(ProOrde1TaskBean.class);
}
if (LitePal.count(ProOrde2TaskBean.class) > 0) {
LitePal.deleteAll(ProOrde2TaskBean.class);
}
}
@Override
protected void onDestroy() {
clearAllData();
RxBus.getInstance().unRegister(this);
super.onDestroy();
}
}

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

@ -198,10 +198,14 @@ public class ProReqActivity extends CommonFunctionActivity {
}.getType();
//动态表单数据
dynamicFormBeans = gson.fromJson(jsonStr, objectType);
boolean isHIDE_CJ = PreferencesUtil.getBoolean(context, AppConst.HIDE_CJ, false);
boolean isHIDE_GW = PreferencesUtil.getBoolean(context, AppConst.HIDE_GW, false);
for (int i = 0; i < dynamicFormBeans.size(); i++) {
DynamicFormBean bean = dynamicFormBeans.get(i);
if(bean.getFieldName().equals("ZCJBM") || bean.getFieldName().equals("ZGWH")){
if(bean.getFieldName().equals("ZCJBM")){
bean.setShow(!isHIDE_CJ);
}
if(bean.getFieldName().equals("ZGWH")){
bean.setShow(!isHIDE_GW);
}
}
@ -670,12 +674,18 @@ public class ProReqActivity extends CommonFunctionActivity {
}
showTaskDetailBadgeNum();
qmuiTipDialog.dismiss();
boolean isHIDE_CJ = PreferencesUtil.getBoolean(context, AppConst.HIDE_CJ, false);
boolean isHIDE_GW = PreferencesUtil.getBoolean(context, AppConst.HIDE_GW, false);
if (!isHIDE_GW) {
setNextFocus("ZCJBM");
} else {
if (isHIDE_CJ && isHIDE_GW) {
setNextFocus("barcode");
} else {
if (!isHIDE_CJ) {
setNextFocus("ZCJBM");
} else if (!isHIDE_GW) {
setNextFocus("ZGWH");
}
}
}
@Override
@ -928,10 +938,14 @@ public class ProReqActivity extends CommonFunctionActivity {
}
} else if (requestCode == AppConst.REQUEST_CONFIG) {
if (resultCode == AppConst.RESULT_CONFIG) {
boolean isHIDE_CJ = PreferencesUtil.getBoolean(context, AppConst.HIDE_CJ, false);
boolean isHIDE_GW = PreferencesUtil.getBoolean(context, AppConst.HIDE_GW, false);
for (int i = 0; i < dynamicFormBeans.size(); i++) {
DynamicFormBean bean = dynamicFormBeans.get(i);
if(bean.getFieldName().equals("ZCJBM") || bean.getFieldName().equals("ZGWH")){
if(bean.getFieldName().equals("ZCJBM") ){
bean.setShow(!isHIDE_CJ);
}
if(bean.getFieldName().equals("ZGWH")){
bean.setShow(!isHIDE_GW);
}
}

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

@ -37,6 +37,8 @@ public class ConfigSettingActivity extends BaseActivity {
QMUITopBar topbar;
@BindView(R.id.swAutoInsertDetail)
Switch swAutoInsertDetail;
@BindView(R.id.swHideCj)
Switch swHideCj;
@BindView(R.id.swHideGw)
Switch swHideGw;
@ -47,8 +49,10 @@ public class ConfigSettingActivity extends BaseActivity {
ButterKnife.bind(this);
boolean aBoolean = PreferencesUtil.getBoolean(context, AppConst.SCAN_ADD_DETAIL, true);
boolean isHIDE_CJ = PreferencesUtil.getBoolean(context, AppConst.HIDE_CJ, false);
boolean isHIDE_GW = PreferencesUtil.getBoolean(context, AppConst.HIDE_GW, false);
swAutoInsertDetail.setChecked(aBoolean);
swHideCj.setChecked(isHIDE_CJ);
swHideGw.setChecked(isHIDE_GW);
initTopBar();
@ -68,6 +72,9 @@ public class ConfigSettingActivity extends BaseActivity {
swAutoInsertDetail.setOnCheckedChangeListener((buttonView, isChecked) -> {
PreferencesUtil.putBoolean(this, AppConst.SCAN_ADD_DETAIL, isChecked);
});
swHideCj.setOnCheckedChangeListener((buttonView, isChecked) -> {
PreferencesUtil.putBoolean(this, AppConst.HIDE_CJ, isChecked);
});
swHideGw.setOnCheckedChangeListener((buttonView, isChecked) -> {
PreferencesUtil.putBoolean(this, AppConst.HIDE_GW, isChecked);
});

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

@ -29,6 +29,8 @@ 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.MaterialAdjustmentDetailBean;
import com.techscan.wk.model.ProOrde1TaskBean;
import com.techscan.wk.model.ProReqDetailBean;
import com.techscan.wk.model.ProReqOrdeTaskBean;
import com.techscan.wk.model.ProductOrderResponseBean;
@ -39,7 +41,6 @@ import com.techscan.wk.utils.statusbar.SystemBarTintManager;
import org.jetbrains.annotations.NotNull;
import org.litepal.LitePal;
import org.litepal.crud.callback.UpdateOrDeleteCallback;
import java.util.ArrayList;
import java.util.Iterator;
@ -160,6 +161,15 @@ public class CustomBottomSheet<T> extends BottomPopupView {
getContext().getString(R.string.unit_title) + getContext().getString(R.string.semicolon) + ((ProReqDetailBean) infoBean).getErfme() + "\n"
);
} else if (infoBean instanceof MaterialAdjustmentDetailBean) {
holder.setText(R.id.name, ((MaterialAdjustmentDetailBean) infoBean).getMatnr());
holder.setText(R.id.detail,
getContext().getString(R.string.Case_number) + getContext().getString(R.string.semicolon) + ((MaterialAdjustmentDetailBean) infoBean).getZboxid() + "\n" +
getContext().getString(R.string.num_title) + getContext().getString(R.string.semicolon) + ((MaterialAdjustmentDetailBean) infoBean).getErfmg() + "\n" +
getContext().getString(R.string.unit_title) + getContext().getString(R.string.semicolon) + ((MaterialAdjustmentDetailBean) infoBean).getErfme() + "\n"
);
} else { //其他只需要展示code和name的通用处理
holder.setText(R.id.name, ((BaseOptionsResponseBean) infoBean).getCode());
@ -397,6 +407,52 @@ public class CustomBottomSheet<T> extends BottomPopupView {
});
messageDialogBuilder.show();
return;
}else if (item instanceof MaterialAdjustmentDetailBean) {
//如果是明细,则显示删除
QMUIDialog.MessageDialogBuilder messageDialogBuilder = new QMUIDialog.MessageDialogBuilder(getContext());
messageDialogBuilder.setMessage(getContext().getString(R.string.Are_you_sure_to_delete_it));
messageDialogBuilder.addAction(getResources().getString(R.string.cancel_info), (dialog, index) -> dialog.dismiss())
.addAction(getResources().getString(R.string.confirm_info), (dialog, index) -> {
//删除
List<T> newList = commonAdapter.getData();
String gid = ((MaterialAdjustmentDetailBean) newList.get(position)).getGid();
long taskRowId = ((MaterialAdjustmentDetailBean) newList.get(position)).getTaskRowId();
double quantity = ((MaterialAdjustmentDetailBean) newList.get(position)).getErfmg();
StringBuilder gidStringBuilder = new StringBuilder();
LitePal.deleteAllAsync(MaterialAdjustmentDetailBean.class, "gid = ?", gid).listen(i1 -> {
ProOrde1TaskBean taskBean = LitePal.where("rowid = ?", String.valueOf(taskRowId)).findFirst(ProOrde1TaskBean.class);
double newQty = taskBean.getCompleteNum() - quantity;
ContentValues contentValues = new ContentValues();
contentValues.put("completeNum", newQty);
contentValues.put("complete", false);
LitePal.updateAsync(ProOrde1TaskBean.class, contentValues, taskBean.getId()).listen(rowsAffected -> {
Iterator<T> iterator = newList.iterator();
while (iterator.hasNext()) {
T next = iterator.next();
if (((MaterialAdjustmentDetailBean) next).getGid().equals(gid)) {
gidStringBuilder.append(((MaterialAdjustmentDetailBean) next).getGid()).append(",");
iterator.remove();
}
}
commonAdapter.setData(newList);
commonAdapter.notifyDataSetChanged();
if (commonAdapter.getData().size() < 1)
CustomBottomSheet.this.dismiss();
topBar.removeAllLeftViews();
//topBar.addLeftTextButton("总数:" + newList.size(), R.id.topbar_left_num);
Event<List<T>> event = new Event<>();
event.setCode(0);
event.setMessage("detail is changed");
event.setRemoveKey(gidStringBuilder.substring(0, gidStringBuilder.length() - 1));
event.setData(newList);
RxBus.getInstance().post(event);
dialog.dismiss();
});
});
});
messageDialogBuilder.show();
return;
}
// else if (item instanceof SaleOutTaskInfoBean) //采购入库任务、转库单任务、销售出库任务、形态转换单任务
// return;

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

@ -57,18 +57,42 @@
android:layout_centerVertical="true"
android:layout_gravity="center_vertical"
android:layout_weight="0.8"
android:text="隐藏车间和工位栏目"
android:text="隐藏车间栏目"
android:textSize="@dimen/sp_15" />
<Switch
android:id="@+id/swHideGw"
android:id="@+id/swHideCj"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_weight="0.2"
android:gravity="right" />
</LinearLayout>
<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="隐藏工位栏目"
android:textSize="@dimen/sp_15" />
<Switch
android:id="@+id/swHideGw"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_weight="0.2"
android:gravity="right" />
</LinearLayout>
</LinearLayout>

76
app/src/main/res/layout/activity_mater_adjust_setting.xml

@ -0,0 +1,76 @@
<?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
android:visibility="gone"
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="隐藏车间和工位栏目"
android:textSize="@dimen/sp_15" />
<Switch
android:id="@+id/swHideGw"
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>

53
app/src/main/res/layout/activity_pro_feed.xml

@ -0,0 +1,53 @@
<?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"
app:qmui_topbar_title_text_size="@dimen/sp_18" />
<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>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_ui"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toTopOf="@id/ll_bottom"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/ll_scan" />
<LinearLayout
android:id="@+id/ll_bottom"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="parent">
<include layout="@layout/layout_bottom_btn1" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
Loading…
Cancel
Save