You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

364 lines
15 KiB
Java

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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);
}
}
}
}