|
|
package com.example.writeepc;
|
|
|
|
|
|
import android.annotation.SuppressLint;
|
|
|
import android.content.BroadcastReceiver;
|
|
|
import android.content.Context;
|
|
|
import android.content.Intent;
|
|
|
import android.content.IntentFilter;
|
|
|
import android.os.Bundle;
|
|
|
import android.os.Handler;
|
|
|
import android.text.Editable;
|
|
|
import android.text.TextWatcher;
|
|
|
import android.util.Log;
|
|
|
import android.view.View;
|
|
|
import android.widget.Button;
|
|
|
|
|
|
import androidx.databinding.DataBindingUtil;
|
|
|
|
|
|
import com.example.writeepc.adapter.MyMesInfoAdapter;
|
|
|
import com.example.writeepc.base.BaseActivity;
|
|
|
import com.example.writeepc.base.okgo.MyRecultCall;
|
|
|
import com.example.writeepc.base.okgo.MyResult;
|
|
|
import com.example.writeepc.been.MESInfo;
|
|
|
import com.example.writeepc.databinding.ActivityShuangqian2Binding;
|
|
|
import com.example.writeepc.utils.SharedPreferencesUtils;
|
|
|
import com.google.gson.reflect.TypeToken;
|
|
|
import com.lzy.okgo.OkGo;
|
|
|
import com.lzy.okgo.callback.StringCallback;
|
|
|
import com.lzy.okgo.model.Response;
|
|
|
import com.lzy.okgo.request.base.Request;
|
|
|
import com.uhf.api.cls.Reader;
|
|
|
|
|
|
import org.xmlpull.v1.XmlPullParser;
|
|
|
import org.xmlpull.v1.XmlPullParserException;
|
|
|
import org.xmlpull.v1.XmlPullParserFactory;
|
|
|
|
|
|
import java.io.IOException;
|
|
|
import java.io.StringReader;
|
|
|
import java.util.ArrayList;
|
|
|
import java.util.List;
|
|
|
import java.util.regex.Matcher;
|
|
|
import java.util.regex.Pattern;
|
|
|
|
|
|
public class ShuangqianActivity2 extends BaseActivity {
|
|
|
private ActivityShuangqian2Binding binding;
|
|
|
private MyMesInfoAdapter adapter;
|
|
|
private Button traceSanButton;
|
|
|
private boolean sanState = true;
|
|
|
private Handler handler = new Handler();
|
|
|
private Runnable runnable;
|
|
|
private MyKeyReceiver keyReceiver;
|
|
|
private List<MESInfo> mesInfos;
|
|
|
|
|
|
@Override
|
|
|
protected void onCreate(Bundle savedInstanceState) {
|
|
|
super.onCreate(savedInstanceState);
|
|
|
binding = DataBindingUtil.setContentView(this, R.layout.activity_shuangqian2);
|
|
|
initUHFRManager1();
|
|
|
// 设置功率
|
|
|
String powerTrace1 = SharedPreferencesUtils.getstring("powerTrace", "22");
|
|
|
int powerTrace = Integer.parseInt(powerTrace1);
|
|
|
Reader.READER_ERR readerErr = uhfrManager.setPower(powerTrace, powerTrace);
|
|
|
Log.e("TAG", "追溯设置功率" + powerTrace1 + ":" + readerErr.name());
|
|
|
initDialog();
|
|
|
adapter = new MyMesInfoAdapter(this);
|
|
|
mesInfos = new ArrayList<>();
|
|
|
adapter.setList(mesInfos);
|
|
|
binding.setAdapter(adapter);
|
|
|
|
|
|
traceSanButton = binding.traceSanButton;
|
|
|
runnable = new Runnable() {
|
|
|
@Override
|
|
|
public void run() {
|
|
|
if (sanState) {
|
|
|
handler.removeCallbacks(runnable);
|
|
|
} else {
|
|
|
readEPC(12);
|
|
|
handler.postDelayed(runnable, 1000);
|
|
|
}
|
|
|
}
|
|
|
};
|
|
|
keyReceiver = new MyKeyReceiver();
|
|
|
IntentFilter intentFilter = new IntentFilter();
|
|
|
intentFilter.addAction("android.rfid.FUN_KEY");
|
|
|
registerReceiver(keyReceiver, intentFilter);
|
|
|
|
|
|
String ACTION_CLOSE_SCAN = "com.rfid.CLOSE_SCAN";
|
|
|
Intent toKillService = new Intent();
|
|
|
toKillService.setAction(ACTION_CLOSE_SCAN);
|
|
|
sendBroadcast(toKillService);
|
|
|
|
|
|
binding.dataEpc.addTextChangedListener(new TextWatcher() {
|
|
|
@Override
|
|
|
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
|
|
|
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public void onTextChanged(CharSequence s, int start, int before, int count) {
|
|
|
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public void afterTextChanged(Editable s) {
|
|
|
if (s.length() == 24) {
|
|
|
haohuaMesSelect(s.toString());
|
|
|
}
|
|
|
|
|
|
}
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
public void dataReadRFID(View view) {
|
|
|
if (sanState) {
|
|
|
handler.postDelayed(runnable, 0);
|
|
|
sanState = false;
|
|
|
traceSanButton.setBackgroundResource(R.drawable.button_bg2);
|
|
|
traceSanButton.setText("停止扫描");
|
|
|
} else {
|
|
|
sanState = true;
|
|
|
handler.removeCallbacks(runnable);
|
|
|
traceSanButton.setBackgroundResource(R.drawable.button_bg1);
|
|
|
traceSanButton.setText("开始扫描");
|
|
|
}
|
|
|
|
|
|
|
|
|
// String msg="<Entity><ID>37f82ad8-6a16-4b9b-880c-78ebf644970a</ID><FAC>02</FAC><BARCODE>2408418883</BARCODE><STATE>1</STATE><CUSQTY>0</CUSQTY><CUDQTY>0</CUDQTY><CUBQTY>0</CUBQTY><CUIQTY>0</CUIQTY><BUITNBR>000000000080435113</BUITNBR><BUITDSC>2045</BUITDSC><BUDAT xsi:type=\"xsd:dateTime\">2025-08-04T00:00:00</BUDAT><BUTIM xsi:type=\"xsd:dateTime\">2025-08-04T10:55:31.517</BUTIM><BUSHT>1</BUSHT><BUBAN /><BUMCH>L403</BUMCH><BUNAM>张磊</BUNAM><BUNAMCOD>HL4969</BUNAMCOD><BUSQTY>1</BUSQTY><BUDQTY>0</BUDQTY><BUBQTY>0</BUBQTY><BUIQTY>0</BUIQTY><BUPLANCOD>YC250804L403204511</BUPLANCOD><BUCOTCOD /><NORMALSTA>P</NORMALSTA><TYRENO>2408418883</TYRENO><BUVERSION /><CRTIM xsi:type=\"xsd:dateTime\">2025-08-04T10:55:31.517</CRTIM><IS_DELETE>0</IS_DELETE><BUHELPER1 /><BUHELPER2 /><BUQCSTATE>1</BUQCSTATE><CUWARNING xsi:nil=\"true\" /><CULTIM>0</CULTIM><CUKTIM>0</CUKTIM><SPEC>S2045-05</SPEC><DOT>0</DOT><BUHELPER3 /><BUASS1 /><BUASS2 /><BUASS3 /><BUASS4 /><BUASS5 /><WMS_FLAG>0</WMS_FLAG><BUCARNO /></Entity>";
|
|
|
// jiexi(msg);
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
protected void readTidReault(boolean readState, String result, byte[] rdata) {
|
|
|
super.readTidReault(readState, result, rdata);
|
|
|
binding.dataEpc.setText(result);
|
|
|
|
|
|
if (readState) {
|
|
|
dataReadRFID(null);
|
|
|
callWebService(buildSelectRequest(result));
|
|
|
// haohuaMesSelect(result);
|
|
|
|
|
|
|
|
|
}
|
|
|
}
|
|
|
|
|
|
private void haohuaMesSelect(String result) {
|
|
|
OkGo.<MyResult>post("http://192.168.26.26:5050/UMInterface/RFID/tyreTracingBack")
|
|
|
.params("rfid", result)
|
|
|
.execute(new MyRecultCall(dialog, this) {
|
|
|
@SuppressLint("NotifyDataSetChanged")
|
|
|
@Override
|
|
|
public void onSuccess(Response<MyResult> response) {
|
|
|
super.onSuccess(response);
|
|
|
MyResult body = response.body();
|
|
|
try {
|
|
|
if (body.getCode() == 200) {
|
|
|
List<String> list =
|
|
|
gson.fromJson(body.getDataJson(), new TypeToken<List<String>>() {
|
|
|
}.getType());
|
|
|
if (list.isEmpty()) {
|
|
|
tipsDialog.setTip(false, "未返回信息");
|
|
|
tipsDialog.show();
|
|
|
return;
|
|
|
}
|
|
|
List<MESInfo> mesInfos = new ArrayList<>(list.size());
|
|
|
list.forEach(item -> {
|
|
|
String[] split = item.split(":");
|
|
|
MESInfo mesInfo = new MESInfo();
|
|
|
mesInfo.setTitle(split[0]);
|
|
|
mesInfo.setInfo(split[1]);
|
|
|
mesInfos.add(mesInfo);
|
|
|
});
|
|
|
adapter.setList(mesInfos);
|
|
|
|
|
|
} else {
|
|
|
tipsDialog.setTip(false, body.getInfo());
|
|
|
tipsDialog.show();
|
|
|
adapter.setList(null);
|
|
|
|
|
|
}
|
|
|
} catch (Exception e) {
|
|
|
tipsDialog.setTip(false, "接口返回信息异常,解析失败");
|
|
|
tipsDialog.show();
|
|
|
|
|
|
}
|
|
|
adapter.notifyDataSetChanged();
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
|
|
|
private void callWebService(String soapRequest) {
|
|
|
// 发送 POST 请求
|
|
|
OkGo.<String>post(SharedPreferencesUtils.getstring("ip", "http://10.72.36.3:8090/FSRFID.asmx"))
|
|
|
.headers("Content-Type", "text/xml; charset=utf-8")
|
|
|
.upString(soapRequest, mediaType)
|
|
|
.execute(new StringCallback() {
|
|
|
@Override
|
|
|
public void onStart(Request<String, ? extends Request> request) {
|
|
|
super.onStart(request);
|
|
|
dialog.show();
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public void onSuccess(Response<String> response) {
|
|
|
// 处理响应结果
|
|
|
try {
|
|
|
mesInfos.clear();
|
|
|
String result = response.body();
|
|
|
String regex = "<Table .*\">";
|
|
|
Pattern pattern = Pattern.compile(regex);
|
|
|
Matcher matcher = pattern.matcher(result);
|
|
|
if (!matcher.find()) {
|
|
|
tipsDialog.setTip(false, "未找到匹配的内容");
|
|
|
tipsDialog.show();
|
|
|
return;
|
|
|
}
|
|
|
String matched = matcher.group();// 匹配内容
|
|
|
int beginIndex = matcher.start() + matched.length();
|
|
|
int endIndex = result.indexOf("</Table>");
|
|
|
Log.e("TAG", "test1:" + beginIndex);
|
|
|
Log.e("TAG", "test2:" + endIndex);
|
|
|
if (beginIndex >= endIndex) {
|
|
|
tipsDialog.setTip(false, "未找到匹配的内容");
|
|
|
tipsDialog.show();
|
|
|
return;
|
|
|
}
|
|
|
String[] str = new String[]{"品牌", "规格", "花纹类型", "胎号", "DOT"};
|
|
|
for (String s : str) {
|
|
|
String tag = "<" + s + ">";
|
|
|
MESInfo mesInfo = new MESInfo();
|
|
|
mesInfo.setTitle(s);
|
|
|
mesInfo.setInfo(result.substring(result.indexOf(tag) + tag.length(), result.indexOf("</" + s + ">")));
|
|
|
mesInfos.add(mesInfo);
|
|
|
}
|
|
|
} catch (Exception e) {
|
|
|
tipsDialog.setTip(false, "接口返回信息异常");
|
|
|
tipsDialog.show();
|
|
|
}
|
|
|
|
|
|
adapter.notifyDataSetChanged();
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public void onFinish() {
|
|
|
super.onFinish();
|
|
|
dialog.dismiss();
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
|
|
|
// 创建验证信息
|
|
|
private String buildSelectRequest(String epcid) {
|
|
|
String soapRequest = String.format("""
|
|
|
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:tem="http://tempuri.org/">
|
|
|
<soap:Header>
|
|
|
<tem:MySoapHeader>
|
|
|
<tem:UserName>RFID-MES</tem:UserName>
|
|
|
<tem:PassWord>Yh#14ulh!6hk9ue4ml</tem:PassWord>
|
|
|
</tem:MySoapHeader>
|
|
|
</soap:Header>
|
|
|
<soap:Body>
|
|
|
<tem:GetRFIDBindingInfo>
|
|
|
<tem:RFIDCode>%s</tem:RFIDCode>
|
|
|
</tem:GetRFIDBindingInfo>
|
|
|
</soap:Body>
|
|
|
</soap:Envelope>
|
|
|
""", epcid);
|
|
|
return soapRequest;
|
|
|
}
|
|
|
|
|
|
private void jiexi(String msg) {
|
|
|
StringBuilder stringBuilder = new StringBuilder();
|
|
|
|
|
|
try {
|
|
|
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
|
|
|
XmlPullParser parser = factory.newPullParser();
|
|
|
parser.setInput(new StringReader(msg));
|
|
|
String currentTag = null;
|
|
|
int eventType = parser.getEventType();
|
|
|
while (eventType != XmlPullParser.END_DOCUMENT) {
|
|
|
switch (eventType) {
|
|
|
case XmlPullParser.START_TAG:
|
|
|
currentTag = parser.getName();
|
|
|
|
|
|
break;
|
|
|
|
|
|
case XmlPullParser.TEXT:
|
|
|
if (currentTag != null && parser.getText() != null) {
|
|
|
String text = parser.getText().trim();
|
|
|
// 解析字段值
|
|
|
switch (currentTag) {
|
|
|
|
|
|
case "BARCODE":
|
|
|
stringBuilder.append("条 码:").append(text).append("\n");
|
|
|
break;
|
|
|
|
|
|
case "BUITNBR":
|
|
|
stringBuilder.append("ERP编码:").append(text).append("\n");
|
|
|
|
|
|
break;
|
|
|
case "BUITDSC":
|
|
|
stringBuilder.append("规格名称:").append(text).append("\n");
|
|
|
|
|
|
break;
|
|
|
case "BUDAT":
|
|
|
stringBuilder.append("成型日期:").append(text).append("\n");
|
|
|
break;
|
|
|
case "BUTIM":
|
|
|
stringBuilder.append("成型时间:").append(text).append("\n");
|
|
|
break;
|
|
|
case "BUSHT":
|
|
|
stringBuilder.append("成型班次:").append(text).append("\n");
|
|
|
break;
|
|
|
case "BUMCH":
|
|
|
stringBuilder.append("成型机台:").append(text).append("\n");
|
|
|
break;
|
|
|
case "BUNAM":
|
|
|
stringBuilder.append("成 型 工:").append(text).append("\n");
|
|
|
break;
|
|
|
case "BUNAMCOD":
|
|
|
stringBuilder.append("成型工账号:").append(text).append("\n");
|
|
|
break;
|
|
|
case "BUPLANCOD":
|
|
|
stringBuilder.append("成型计划号:").append(text).append("\n");
|
|
|
break;
|
|
|
|
|
|
case "TYRENO":
|
|
|
stringBuilder.append("生 胎 码:").append(text).append("\n");
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
break;
|
|
|
|
|
|
case XmlPullParser.END_TAG:
|
|
|
currentTag = null;
|
|
|
break;
|
|
|
}
|
|
|
eventType = parser.next();
|
|
|
}
|
|
|
binding.dataInfo.setText(stringBuilder.toString());
|
|
|
} catch (XmlPullParserException | IOException e) {
|
|
|
Log.e("TAG", "解析XML失败: " + e.getMessage());
|
|
|
e.printStackTrace();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
protected void onDestroy() {
|
|
|
super.onDestroy();
|
|
|
unregisterReceiver(keyReceiver);
|
|
|
}
|
|
|
|
|
|
private class MyKeyReceiver extends BroadcastReceiver {
|
|
|
|
|
|
@Override
|
|
|
public void onReceive(Context context, Intent intent) {
|
|
|
var keydown = intent.getBooleanExtra("keydown", false);
|
|
|
if (!keydown) {
|
|
|
dataReadRFID(null);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
} |