Browse Source

1.0.8

master
ml 8 months ago
parent
commit
dccc2c92c7
  1. 2
      app/build.gradle
  2. 2
      app/release/output.json
  3. 2
      app/src/main/assets/FlowReportWorkUI.json
  4. 2
      app/src/main/assets/litepal.xml
  5. 9
      app/src/main/java/com/techscan/wk/model/AnalysisBarBean.java
  6. 13
      app/src/main/java/com/techscan/wk/model/FlowReportWorkProOrderBean.java
  7. 14
      app/src/main/java/com/techscan/wk/model/ProReqDetailBean.java
  8. 3
      app/src/main/java/com/techscan/wk/rxretrofit/ApiService.java
  9. 9
      app/src/main/java/com/techscan/wk/rxretrofit/HttpMethods.java
  10. 229
      app/src/main/java/com/techscan/wk/ui/proreq/ProReqActivity.java
  11. 255
      app/src/main/java/com/techscan/wk/ui/reportwork/FlowReportWorkActivity.java
  12. 16
      app/src/main/java/com/techscan/wk/utils/BarAnalysisUtils.java
  13. 2
      app/src/main/res/values-en/strings.xml
  14. 2
      app/src/main/res/values-th-rTH/strings.xml
  15. 2
      app/src/main/res/values/strings.xml

2
app/build.gradle

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

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

@ -128,7 +128,7 @@
"fieldName": "GMNGA",
"name": "报工数量",
"value": "",
"editExp": 0,
"editExp": 2,
"values": [],
"mast": false,
"canChange": true,

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

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

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

@ -4,6 +4,7 @@ package com.techscan.wk.model;
* ml
*/
public class AnalysisBarBean {
private String barcode;
private String factory;
private String materiel;
private String versions;
@ -12,6 +13,14 @@ public class AnalysisBarBean {
private String quantity;
private String ext;
public String getBarcode() {
return barcode;
}
public void setBarcode(String barcode) {
this.barcode = barcode;
}
public String getFactory() {
return factory;
}

13
app/src/main/java/com/techscan/wk/model/FlowReportWorkProOrderBean.java

@ -19,15 +19,24 @@ public class FlowReportWorkProOrderBean extends LitePalSupport {
private String plnal;
private String plnnr;
private String projn;
private String psmng;
private String psmng;//订单数量
private String stlal;
private String ueeto;
private String ueeto;//容差数量1.0表示1%
private String ybzq;
private String zremark;
private String zszjd;
private String zwlbc;
private String zzt;
private String zzy;
private String gwemg;//已交货数量
public String getGwemg() {
return gwemg;
}
public void setGwemg(String gwemg) {
this.gwemg = gwemg;
}
public void setAmein(String amein) {
this.amein = amein;

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

@ -5,9 +5,10 @@ import org.litepal.crud.LitePalSupport;
public class ProReqDetailBean extends LitePalSupport {
private String gid;
private long taskRowId;
private String barcode;
private String aufnr;//订单号
private String erfme;//单位
private Double erfmg;//物料数量
private double erfmg;//物料数量
private String matnr;//物料编码
private String werks;//工厂代码
private String zcjbm;//车间编码
@ -23,6 +24,13 @@ public class ProReqDetailBean extends LitePalSupport {
private String lgort;//库存地点
private String lgortName;//库存地点
public String getBarcode() {
return barcode;
}
public void setBarcode(String barcode) {
this.barcode = barcode;
}
public String getZboxid() {
return zboxid;
@ -64,11 +72,11 @@ public class ProReqDetailBean extends LitePalSupport {
this.erfme = erfme;
}
public Double getErfmg() {
public double getErfmg() {
return erfmg;
}
public void setErfmg(Double erfmg) {
public void setErfmg(double erfmg) {
this.erfmg = erfmg;
}

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

@ -86,6 +86,9 @@ public interface ApiService {
@GET("/web/order/info")
Observable<ResponseBody> getOrderInfo(@Query("id") String order);
@GET("/web/order/getByzboxid")
Observable<ResponseBody> getByzboxid(@Query("zboxid") String zboxid);
@GET("/web/order/getlgort")
Observable<ResponseBody> getlgort();

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

@ -354,6 +354,15 @@ public class HttpMethods {
.subscribe(observer);
}
public void getByzboxid(String zboxid,
Observer<ResponseBody> observer) {
getApiService().getByzboxid(zboxid)
.subscribeOn(Schedulers.io())
.unsubscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(observer);
}
public void getlgort(Observer<ResponseBody> observer) {
getApiService().getlgort()
.subscribeOn(Schedulers.io())

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

@ -29,7 +29,6 @@ import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.blankj.utilcode.util.KeyboardUtils;
import com.blankj.utilcode.util.SPUtils;
import com.blankj.utilcode.util.StringUtils;
import com.blankj.utilcode.util.ToastUtils;
import com.codbking.widget.DatePickDialog;
@ -46,6 +45,7 @@ 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.FlowReportWorkProOrderBean;
import com.techscan.wk.model.ProReqDetailBean;
import com.techscan.wk.model.ProReqOrdeTaskBean;
import com.techscan.wk.model.ProReqOrderBean;
@ -55,12 +55,12 @@ 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;
import com.techscan.wk.utils.DateUtils;
import com.techscan.wk.utils.DialogUtil;
import com.techscan.wk.utils.FindUtils;
import com.techscan.wk.utils.PreferencesUtil;
import com.techscan.wk.utils.SoundUtils;
@ -89,6 +89,7 @@ import q.rorbin.badgeview.QBadgeView;
/**
* Description:生产上料
* [)>@06@QRPART@10V101010@1P11002734@3SX1000019400001@1T20240724001@Q20@14D20240724@@
* @author MULEI
* @date 2024/9/11
*/
@ -123,6 +124,7 @@ public class ProReqActivity extends CommonFunctionActivity {
private Map<String, List<String>> scanBarcodeListMap;//存放条码扫描明细
private ProReqOrderBean proReqOrderBean;
private boolean isSave = false;
private AnalysisBarBean barDataBean;
@Override
protected void onCreate(Bundle savedInstanceState) {
@ -317,14 +319,6 @@ public class ProReqActivity extends CommonFunctionActivity {
showError(getString(R.string.The_barcode_format_is_incorrect) + value);
return;
}
AnalysisBarBean analysisBarBean = BarAnalysisUtils.analysisBarcode(value);
String materiel = analysisBarBean.getMateriel();
if (TextUtils.isEmpty(materiel)) {
dynamicFormAdapter.setFocusById(dynamicFormBean.getId());
showError(getString(R.string.There_is_no_aterial_information_in_the_barcode_please_confirm));
return;
}
// //判断条码是否已经被扫描
// if (isInBarcodeList(scanBarcodeListMap, value)) {
// showError(getString(R.string.Do_not_scan_the_barcode_again));
@ -334,7 +328,7 @@ public class ProReqActivity extends CommonFunctionActivity {
getBarcodeInfo(value);
break;
case "quantity":
addDetail();
addDetailCheck(value);
break;
default:
break;
@ -348,10 +342,16 @@ public class ProReqActivity extends CommonFunctionActivity {
* @param value 条码内容
*/
private void getBarcodeInfo(String value) {
AnalysisBarBean bean = BarAnalysisUtils.analysisBarcode(value);
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;
}
LitePal
//.where("matnr = ? and complete = ?", materiel, "0")
.where("matnr = ?", bean.getMateriel())
.where("matnr = ?", barDataBean.getMateriel())
.findAsync(ProReqOrdeTaskBean.class)
.listen(proReqOrdeTaskBeans -> {
if (proReqOrdeTaskBeans.size() == 0) {
@ -370,19 +370,19 @@ public class ProReqActivity extends CommonFunctionActivity {
d.setValue(showValue);
break;
case "MATNR"://物料号
d.setValue(bean.getMateriel());
d.setValue(barDataBean.getMateriel());
d.setFocus(false);
break;
case "ZXTPC"://包装容器号 --箱号
d.setValue(bean.getPackageNumber());
d.setValue(barDataBean.getPackageNumber());
d.setFocus(false);
break;
case "ZPC"://批次
d.setValue(bean.getBatch());
d.setValue(barDataBean.getBatch());
d.setFocus(false);
break;
case "quantity"://数量
d.setValue(bean.getQuantity());
d.setValue(barDataBean.getQuantity());
d.setFocus(true);
break;
case "erfme"://单位
@ -400,12 +400,7 @@ public class ProReqActivity extends CommonFunctionActivity {
//判断是否开启 扫描自动加入明细
boolean aBoolean = PreferencesUtil.getBoolean(context, AppConst.SCAN_ADD_DETAIL, true);
if (aBoolean) {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
addDetail();
}
}, 300);
new Handler().postDelayed(() -> addDetailCheck(barDataBean.getQuantity()), 300);
}
});
@ -413,66 +408,75 @@ public class ProReqActivity extends CommonFunctionActivity {
}
/**
* 根据工单获取工单物料信息
*
* @param id 工单号
* 加入明细前校验
*/
private void query(String id) {
HttpMethods.getInstance().getOrderInfo(id, new BaseObserver<ResponseBody>(context) {
private void addDetailCheck(String quantity) {
if (LitePal.count(ProReqOrdeTaskBean.class) == 0) {
showError(getString(R.string.Please_scan_the_ticket_number_first));
setNextFocus("AUFNR");
return;
}
if (barDataBean == null) {
showError(getString(R.string.The_bar_code_cannot_be_blank));
setNextFocus("barcode");
return;
}
if (TextUtils.isEmpty(quantity)) {
setNextFocus("quantity");
showError(getString(R.string.The_quantity_cannot_be_empty));
return;
}
//当前加入明细的数量
double currenScanNum = Double.parseDouble(quantity);
if (currenScanNum <= 0) {
showError(getString(R.string.The_number_of_scanned_codes_must_be_greater_than_0));
return;
}
//条码数量
String barNum = barDataBean.getQuantity();
String packageNumber = barDataBean.getPackageNumber();
if (!TextUtils.isEmpty(barNum) && checkNumber(barNum)) {
//计算出当前箱号在明细中已扫描的数量
Double hisScanNum = LitePal.where("zboxid = ? ", packageNumber).sum(ProReqDetailBean.class, "erfmg", double.class);
double finalHisScanNum = hisScanNum;
double finalBarNum = Double.parseDouble(barNum);
double finalCurrenScanNum = currenScanNum;
HttpMethods.getInstance().getByzboxid(packageNumber, new BaseObserver<ResponseBody>(context) {
@Override
protected void onSuccess(ResponseBody body) throws Exception {
String string = body.string();
Type objectType = new TypeToken<BaseResponseBean<List<ProReqOrderBean>>>() {
Type objectType = new TypeToken<BaseResponseBean<Double>>() {
}.getType();
BaseResponseBean<List<ProReqOrderBean>> baseResponseBean = gson.fromJson(string, objectType);
BaseResponseBean<Double> baseResponseBean = gson.fromJson(string, objectType);
if (baseResponseBean.getCode() != 200) {
showError(baseResponseBean.getMsg());
setNextFocus("AUFNR");
showTaskDetailBadgeNum();
return;
}
List<ProReqOrderBean> data = baseResponseBean.getData();
if (data.size() == 0) {
showError(getString(R.string.No_data_was_obtained));
setNextFocus("AUFNR");
showTaskDetailBadgeNum();
return;
if (baseResponseBean.getData() != null) {
//服务端返回该箱号已扫描数量
double data = baseResponseBean.getData();
//当前扫描数量+本地历史扫描数量+服务扫描数量
double scanTotal = finalCurrenScanNum + finalHisScanNum + data;
if (scanTotal > finalBarNum) {
DialogUtil.showErrorInfoDialog(context, "当前数量" + quantity + ",历史已扫数量" + (finalHisScanNum + data) +
",已扫数量总和超过条码数量" + finalBarNum + ",请确认");
} else {
addDetail();
}
proReqOrderBean = data.get(0);
List<ProReqOrdeTaskBean> item = proReqOrderBean.getItem();
if (item.size() == 0) {
showError(getString(R.string.No_data_was_obtained));
setNextFocus("AUFNR");
showTaskDetailBadgeNum();
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++) {
ProReqOrdeTaskBean taskBean = item.get(i);
taskBean.setRowid(System.currentTimeMillis());
taskBean.save();
}
showTaskDetailBadgeNum();
qmuiTipDialog.dismiss();
setNextFocus("ZCJBM");
}
@Override
protected void onFailure(Throwable e) throws Exception {
showTaskDetailBadgeNum();
setNextFocus("AUFNR");
SoundUtils.playSound(ProReqActivity.this, R.raw.warning);
CustomErrorDialog(e, ProReqActivity.this);
}
});
} else {
addDetail();
}
}
/**
@ -490,12 +494,6 @@ public class ProReqActivity extends CommonFunctionActivity {
DynamicFormBean quantityItem = dynamicFormAdapter.getItemByFieldName("quantity");//数量
DynamicFormBean erfmeItem = dynamicFormAdapter.getItemByFieldName("erfme");//单位
if (LitePal.count(ProReqOrdeTaskBean.class) == 0) {
showError(getString(R.string.Please_scan_the_ticket_number_first));
setNextFocus("AUFNR");
return;
}
if (TextUtils.isEmpty(lgortItem.getValue())) {
showError(getString(R.string.Please_select_a_stock_location));
return;
@ -508,17 +506,6 @@ public class ProReqActivity extends CommonFunctionActivity {
return;
}
String value = quantityItem.getValue();
if (TextUtils.isEmpty(value)) {
setNextFocus("quantity");
showError(getString(R.string.The_quantity_cannot_be_empty));
return;
}
double num = Double.parseDouble(value);
if (Double.parseDouble(value) <= 0) {
showError(getString(R.string.The_number_of_scanned_codes_must_be_greater_than_0));
return;
}
LitePal
//.where("matnr = ? and complete = ?", MATNRItem.getValue(), "0")
@ -530,8 +517,7 @@ public class ProReqActivity extends CommonFunctionActivity {
showError(getString(R.string.There_is_no_data_of_the_same_dimension_in_the_task_list));
return;
}
double scanQuantity = num;
double scanQuantity = Double.parseDouble(quantityItem.getValue());
String gid = System.currentTimeMillis() + "";
//加入明细,并且可以超量,每次只匹配任务一行
for (ProReqOrdeTaskBean bean : proReqOrdeTaskBeans) {
@ -546,6 +532,7 @@ public class ProReqActivity extends CommonFunctionActivity {
bean.save();
ProReqDetailBean detailBean = new ProReqDetailBean();
detailBean.setBarcode(barDataBean.getBarcode());
detailBean.setTaskRowId(bean.getRowid());
detailBean.setGid(gid);
detailBean.setAufnr(bean.getAufnr());
@ -580,6 +567,7 @@ public class ProReqActivity extends CommonFunctionActivity {
scanBarcodeListMap.put(gid, keyBarcodes);
runOnUiThread(() -> {
barDataBean = null;
SoundUtils.playSound(this, R.raw.ok);
if (KeyboardUtils.isSoftInputVisible(context)) {
KeyboardUtils.hideSoftInput(context);
@ -603,6 +591,70 @@ public class ProReqActivity extends CommonFunctionActivity {
}
/**
* 根据工单获取工单物料信息
*
* @param id 工单号
*/
private void query(String id) {
HttpMethods.getInstance().getOrderInfo(id, new BaseObserver<ResponseBody>(context) {
@Override
protected void onSuccess(ResponseBody body) throws Exception {
String string = body.string();
Type objectType = new TypeToken<BaseResponseBean<List<ProReqOrderBean>>>() {
}.getType();
BaseResponseBean<List<ProReqOrderBean>> baseResponseBean = gson.fromJson(string, objectType);
if (baseResponseBean.getCode() != 200) {
showError(baseResponseBean.getMsg());
setNextFocus("AUFNR");
showTaskDetailBadgeNum();
return;
}
List<ProReqOrderBean> data = baseResponseBean.getData();
if (data.size() == 0) {
showError(getString(R.string.No_data_was_obtained));
setNextFocus("AUFNR");
showTaskDetailBadgeNum();
return;
}
proReqOrderBean = data.get(0);
List<ProReqOrdeTaskBean> item = proReqOrderBean.getItem();
if (item.size() == 0) {
showError(getString(R.string.No_data_was_obtained));
setNextFocus("AUFNR");
showTaskDetailBadgeNum();
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++) {
ProReqOrdeTaskBean taskBean = item.get(i);
taskBean.setRowid(System.currentTimeMillis());
taskBean.save();
}
showTaskDetailBadgeNum();
qmuiTipDialog.dismiss();
setNextFocus("ZCJBM");
}
@Override
protected void onFailure(Throwable e) throws Exception {
showTaskDetailBadgeNum();
setNextFocus("AUFNR");
SoundUtils.playSound(ProReqActivity.this, R.raw.warning);
CustomErrorDialog(e, ProReqActivity.this);
}
});
}
/**
* 显示任务和明细角标
*/
@ -899,6 +951,15 @@ public class ProReqActivity extends CommonFunctionActivity {
}
//数字验证(包含小数点)
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(ProReqDetailBean.class) > 0) {
LitePal.deleteAll(ProReqDetailBean.class);

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

@ -64,6 +64,7 @@ import com.techscan.wk.widgets.CustomBottomSheet;
import org.litepal.LitePal;
import java.lang.reflect.Type;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@ -75,8 +76,12 @@ import butterknife.OnClick;
import io.reactivex.disposables.Disposable;
import okhttp3.ResponseBody;
import q.rorbin.badgeview.QBadgeView;
/**
* Description:流转单报工
* 按规则解析条码 [)>@06@QRPART@10V101010@1P31107550@3SX1000019400001@1T20240724001@Q934@14D20240724@@
* 流转单号 T10000194000001
*
* @author MULEI
* @date 2024/9/11
*/
@ -113,6 +118,7 @@ public class FlowReportWorkActivity extends CommonFunctionActivity {
private Map<String, List<String>> scanBarcodeListMap;//存放条码扫描明细
private boolean isSave = false;
private String[] items = new String[]{};
private AnalysisBarBean barDataBean;
@Override
protected void onCreate(Bundle savedInstanceState) {
@ -288,7 +294,7 @@ public class FlowReportWorkActivity extends CommonFunctionActivity {
public void onClick(DialogInterface dialog, int which) {
int count = LitePal.count(FlowOrderDetailBean.class);
int detailCount = LitePal.count(FlowReportWorkDetailBean.class);
if(which == finalSelectIndex || (!rvUiHaveData() && count == 0 && detailCount == 0)){
if (which == finalSelectIndex || (!rvUiHaveData() && count == 0 && detailCount == 0)) {
dialog.dismiss();
String item = items[which];
dynamicFormBean.setValue(item);
@ -458,7 +464,25 @@ public class FlowReportWorkActivity extends CommonFunctionActivity {
break;
//报工数量
case "GMNGA":
addDetail();
DynamicFormBean MATNRItem = dynamicFormAdapter.getItemByFieldName("MATNR");//物料号
if (TextUtils.isEmpty(MATNRItem.getValue())) {
showError(getString(R.string.Please_scan_the_package_barcode_first));
setNextFocus("PacketBarcode");
return;
}
LitePal
.where("matnr = ?", MATNRItem.getValue())
.findAsync(FlowReportWorkProOrderBean.class)
.listen(orderBeans -> {
if (orderBeans.size() == 0) {
//未找到相同维度数据,报错
showError(getString(R.string.The_material_of_the_work_order_is_inconsistent_with_that_of_the_scanning_code));
dynamicFormAdapter.setFocusById(dynamicFormBean.getId());
return;
}
addDetailCheck(orderBeans.get(0), value);
});
break;
default:
break;
@ -466,6 +490,151 @@ public class FlowReportWorkActivity extends CommonFunctionActivity {
});
}
/**
* 解析条码信息并比对工单产品信息
*
* @param value 条码内容
* @param dynamicFormBean 当前条码栏目
*/
private void getBarcodeInfo(String value, DynamicFormBean dynamicFormBean) {
barDataBean = BarAnalysisUtils.analysisBarcode(value);
String materiel = barDataBean.getMateriel();
if (TextUtils.isEmpty(materiel)) {
setNextFocus("PacketBarcode");
showError(getString(R.string.There_is_no_aterial_information_in_the_barcode_please_confirm));
return;
}
String packageNumber = barDataBean.getPackageNumber();
if (!TextUtils.isEmpty(packageNumber) && packageNumber.length() > 9) {
String order = packageNumber.substring(1, 9);
//工单栏目
DynamicFormBean AUFNRItem = dynamicFormAdapter.getItemByFieldName("AUFNR");
if (!order.equalsIgnoreCase(AUFNRItem.getValue())) {
showError(getString(R.string.The_order_number_is_inconsistent_please_confirm));
return;
}
}
//先根据条码物料信息比对工单产品信息
LitePal
.where("matnr = ?", barDataBean.getMateriel())
.findAsync(FlowReportWorkProOrderBean.class)
.listen(orderBeans -> {
if (orderBeans.size() == 0) {
//未找到相同维度数据,报错
showError(getString(R.string.The_material_of_the_work_order_is_inconsistent_with_that_of_the_scanning_code));
dynamicFormAdapter.setFocusById(dynamicFormBean.getId());
return;
}
for (DynamicFormBean d : dynamicFormBeans) {
switch (d.getFieldName()) {
case "MATNR"://物料号
d.setValue(barDataBean.getMateriel());
d.setFocus(false);
break;
case "ZXTPC"://包装容器号 --箱号
d.setValue(barDataBean.getPackageNumber());
d.setFocus(false);
break;
case "ZPC"://批次
d.setValue(barDataBean.getBatch());
d.setFocus(false);
break;
case "GMNGA"://报工数量
d.setValue(barDataBean.getQuantity());
d.setFocus(false);
break;
default:
d.setFocus(false);
break;
}
}
dynamicFormAdapter.setList(dynamicFormBeans);
dynamicFormAdapter.notifyDataSetChanged();
new Handler().postDelayed(() -> addDetailCheck(orderBeans.get(0), barDataBean.getQuantity()), 300);
});
}
/**
* 加入明细前校验
*/
private void addDetailCheck(FlowReportWorkProOrderBean workProOrderBean, String quantity) {
if (barDataBean == null) {
showError(getString(R.string.The_packet_barcode_cannot_be_empty));
setNextFocus("PacketBarcode");
return;
}
if (TextUtils.isEmpty(quantity)) {
showError(getString(R.string.The_number_of_reports_cannot_be_empty));
setNextFocus("GMNGA");
return;
}
if (Double.parseDouble(quantity) <= 0) {
showError(getString(R.string.The_number_of_jobs_reported_cannot_be_0_or_smaller_than_0));
setNextFocus("GMNGA");
return;
}
// String ueeto = "0";
// if (!TextUtils.isEmpty(workProOrderBean.getUeeto())) {
// ueeto = workProOrderBean.getUeeto();
// }
// String psmng = "0";
// if (!TextUtils.isEmpty(workProOrderBean.getPsmng())) {
// psmng = workProOrderBean.getPsmng();
// }
// String gwemg = "0";
// if (!TextUtils.isEmpty(workProOrderBean.getGwemg())) {
// gwemg = workProOrderBean.getGwemg();
// }
// BigDecimal ueetodecimal = new BigDecimal(ueeto);//容差数量1.0表示1%
// BigDecimal psmngdecimal = new BigDecimal(psmng);//订单数量
// BigDecimal gwemgdecimal = new BigDecimal(gwemg);//已交货数量
//
// BigDecimal gmnga = new BigDecimal(quantity);//当前扫描的报工数量
//
// //统计明细里已报工的数量
// Double sum = LitePal.sum(FlowReportWorkDetailBean.class, "gmnga", double.class);
// //当扫描总数>工单数量*(1+过量交货容差)-已交货数量,系统不允许继续扫描。
// if (gmnga.doubleValue() + sum > psmngdecimal.doubleValue() * (1 + (ueetodecimal.doubleValue() / 100)) - gwemgdecimal.doubleValue()) {
// String msg = "当前数量" + gmnga.doubleValue() + ",已扫数量" + sum + ",超过订单数量(" + psmngdecimal.doubleValue()
// + ") * (1 + 过量交货容差(" + (ueetodecimal.doubleValue() / 100) + ")) - 已交货数量(" + gwemgdecimal.doubleValue() + ")";
// QMUIDialog qmuiDialog = new QMUIDialog.MessageDialogBuilder(context)
// .setTitle(getResources().getString(R.string.tips_title))
// .setMessage(msg)
// .addAction(getResources().getString(R.string.confirm_info), (dialog, index) -> {
// dialog.dismiss();
// })
// .create(R.style.QMUI_Dialog);
// qmuiDialog.show();
// return;
// }
//
// //如果扫描总数>工单数量-已交货数量 系统给出提示,当前数量已超过订单总数,但允许继续操作。
// if (gmnga.doubleValue() + sum > psmngdecimal.doubleValue() - gwemgdecimal.doubleValue()) {
// String msg = "当前数量" + gmnga.doubleValue() + ",已扫数量" + sum + ",超过订单数量(" + psmngdecimal.doubleValue() + ") - 已交货数量(" + gwemgdecimal.doubleValue() + "),是否继续操作?";
// QMUIDialog qmuiDialog = new QMUIDialog.MessageDialogBuilder(context)
// .setTitle(getResources().getString(R.string.tips_title))
// .setMessage(msg)
// .addAction(getResources().getString(R.string.cancel_info), (dialog, index) -> dialog.dismiss())
// .addAction(getResources().getString(R.string.confirm_info), (dialog, index) -> {
// dialog.dismiss();
// addDetail();
// })
// .create(R.style.QMUI_Dialog);
// qmuiDialog.show();
// } else {
addDetail();
// }
}
/**
* 加入明细列表
*/
@ -485,21 +654,6 @@ public class FlowReportWorkActivity extends CommonFunctionActivity {
showError(getString(R.string.The_work_order_number_cannot_be_empty));
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");
@ -546,7 +700,7 @@ public class FlowReportWorkActivity extends CommonFunctionActivity {
List<String> keyBarcodes = new ArrayList<>();
keyBarcodes.add(barcode);
scanBarcodeListMap.put(gid, keyBarcodes);
barDataBean = null;
reInitUI(ScanRuleItem.getValue());
} else {
showError(getString(R.string.Failed_to_join_details));
@ -580,7 +734,7 @@ public class FlowReportWorkActivity extends CommonFunctionActivity {
List<String> keyBarcodes = new ArrayList<>();
keyBarcodes.add(barcode);
scanBarcodeListMap.put(gid, keyBarcodes);
barDataBean = null;
reInitUI(ScanRuleItem.getValue());
} else {
showError(getString(R.string.Failed_to_join_details));
@ -592,6 +746,7 @@ public class FlowReportWorkActivity extends CommonFunctionActivity {
/**
* 根据工单获取产品信息
*
* @param workOrder 工单号
* @param flowOrder 流转单号
* @param scanRuleItem 扫描规则栏目
@ -667,64 +822,10 @@ public class FlowReportWorkActivity extends CommonFunctionActivity {
});
}
/**
* 解析条码信息并比对工单产品信息
* @param value 条码内容
* @param dynamicFormBean 当前条码栏目
*/
private void getBarcodeInfo(String value, DynamicFormBean dynamicFormBean) {
AnalysisBarBean bean = BarAnalysisUtils.analysisBarcode(value);
//先根据条码物料信息比对工单产品信息
LitePal
.where("matnr = ?", bean.getMateriel())
.findAsync(FlowReportWorkProOrderBean.class)
.listen(orderBeans -> {
if (orderBeans.size() == 0) {
//未找到相同维度数据,报错
showError(getString(R.string.The_material_of_the_work_order_is_inconsistent_with_that_of_the_scanning_code));
dynamicFormAdapter.setFocusById(dynamicFormBean.getId());
return;
}
for (DynamicFormBean d : dynamicFormBeans) {
switch (d.getFieldName()) {
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);
break;
default:
d.setFocus(false);
break;
}
}
dynamicFormAdapter.setList(dynamicFormBeans);
dynamicFormAdapter.notifyDataSetChanged();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
addDetail();
}
}, 300);
});
}
/**
* 设置光标跳转
*
* @param name
*/
private void setNextFocus(String name) {
@ -815,9 +916,12 @@ public class FlowReportWorkActivity extends CommonFunctionActivity {
return;
}
isSave = true;
BigDecimal gmnga = new BigDecimal("0.0");//报工数量 扫描数量
for (int i = 0; i < items.size(); i++) {
FlowReportWorkDetailBean flowReportWorkDetailBean = items.get(i);
items.get(i).setPacketBarcode("");
items.get(i).setFlowReport(items.get(i).getFlowOrders());
gmnga = new BigDecimal(flowReportWorkDetailBean.getGmnga()).add(gmnga);
}
Map<String, Object> saveItemRequestBean = new HashMap<>();
saveItemRequestBean.put("imports", items);
@ -897,7 +1001,7 @@ public class FlowReportWorkActivity extends CommonFunctionActivity {
}
switch (selectDynamicFormBean.getFieldName()) {
case "PacketBarcode":
getBarcodeInfo(scanResult, selectDynamicFormBean);
break;
}
}
@ -961,6 +1065,7 @@ public class FlowReportWorkActivity extends CommonFunctionActivity {
/**
* 判断界面是否填写数据
*
* @return
*/
private boolean rvUiHaveData() {

16
app/src/main/java/com/techscan/wk/utils/BarAnalysisUtils.java

@ -1,5 +1,7 @@
package com.techscan.wk.utils;
import android.text.TextUtils;
import com.techscan.wk.model.AnalysisBarBean;
/**
@ -14,21 +16,25 @@ public class BarAnalysisUtils {
* @return
*/
public static boolean checkBarcodePresuffix(String barcode) {
if (TextUtils.isEmpty(barcode)) return false;
if (!barcode.startsWith("[)>@06") || !barcode.endsWith("@@")) {
return false;
}
return true;
}
/** 流转单号 T10000194000001
/**
* 流转单号 T10000194000001
* 按规则解析条码 [)>@06@QRPART@10V101010@1P31107550@3SX001@1T20240724001@Q100@14D20240724@@
* @param barcode
*
* @param bar
* @return
*/
public static AnalysisBarBean analysisBarcode(String barcode) {
barcode = barcode.replaceFirst("\\[\\)>@06@QRPART", "");
System.out.println(barcode);
public static AnalysisBarBean analysisBarcode(String bar) {
AnalysisBarBean bean = new AnalysisBarBean();
bean.setBarcode(bar);
String barcode = bar.replaceFirst("\\[\\)>@06@QRPART", "");
System.out.println(barcode);
//工厂
// 查找@10V到下一个@之间的内容
int startIndex10V = barcode.indexOf("@10V");

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

@ -174,4 +174,6 @@
<string name="The_material_of_the_work_order_is_inconsistent_with_that_of_the_scanning_code">The material of the work order is inconsistent with that of the scanning code</string>
<string name="Abnormal_cause">Error message</string>
<string name="Please_confirm_the_new_password">Please confirm the new password</string>
<string name="The_order_number_is_inconsistent_please_confirm">The order number is inconsistent, please confirm</string>
<string name="Please_scan_the_package_barcode_first">Please scan the package barcode first</string>
</resources>

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

@ -174,4 +174,6 @@
<string name="The_material_of_the_work_order_is_inconsistent_with_that_of_the_scanning_code">วัสดุรายการเชิงพาณิชย์ไม่สอดคล้องกับการค้นหารหัสโปรดยืนยัน</string>
<string name="Abnormal_cause">ข้อความผิดพลาด</string>
<string name="Please_confirm_the_new_password">กรุณายืนยันรหัสใหม่</string>
<string name="The_order_number_is_inconsistent_please_confirm">The order number is inconsistent, please confirm</string>
<string name="Please_scan_the_package_barcode_first">สแกนบาร์โค้ดก่อน</string>
</resources>

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

@ -185,5 +185,7 @@
<string name="The_material_of_the_work_order_is_inconsistent_with_that_of_the_scanning_code">工单物料与扫码物料不一致,请确认</string>
<string name="Abnormal_cause">错误消息</string>
<string name="Please_confirm_the_new_password">请确认新密码</string>
<string name="The_order_number_is_inconsistent_please_confirm">箱码订单号不一致,请确认</string>
<string name="Please_scan_the_package_barcode_first">请先扫描包条码</string>
</resources>

Loading…
Cancel
Save