package com.northglass.service.message;
|
|
import java.io.IOException;
|
import java.io.PrintWriter;
|
import java.io.StringWriter;
|
import java.util.ArrayList;
|
import java.util.Date;
|
import java.util.List;
|
|
import org.slf4j.Logger;
|
import org.slf4j.LoggerFactory;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Component;
|
import org.springframework.transaction.annotation.Transactional;
|
import com.northglass.constants.StateConstants.CountMachineTaskState;
|
import com.northglass.constants.StateConstants.ShelfTaskState;
|
import com.northglass.entity.CountMachineTask;
|
import com.northglass.entity.EdgeMachine;
|
import com.northglass.entity.GaoliweiMachineTask;
|
import com.northglass.entity.ShelfStatu;
|
import com.northglass.entity.WashMachineTask;
|
import com.northglass.repository.CountMachineDao;
|
import com.northglass.repository.CountMachineTaskDao;
|
import com.northglass.repository.GaoliweiMachineDao;
|
import com.northglass.repository.GaoliweiMachineTaskDao;
|
import com.northglass.repository.ShelfStatuDao;
|
import com.northglass.repository.WashMachineTaskDao;
|
import com.northglass.service.gaoliwei.GaoliweiMachineService;
|
import com.northglass.util.HexUtil;
|
|
@Component
|
@Transactional
|
public class EdgeMessageProcessor extends AbstractMessageProcessor {
|
|
private static final Logger LOGGER = LoggerFactory.getLogger(EdgeMessageProcessor.class);
|
|
@Autowired
|
private GaoliweiMachineService gaoliweiMachineService;
|
|
@Autowired
|
private GaoliweiMachineTaskDao gaoliweiMachineTaskDao;
|
|
@Autowired
|
private GaoliweiMachineDao gaoliweiMachineDao;
|
|
@Autowired
|
private ShelfStatuDao shelfStatuDao;
|
|
@Autowired
|
private CountMachineTaskDao countMachineTaskDao;
|
|
@Autowired
|
private CountMachineDao countMachineDao;
|
|
@Autowired
|
private WashMachineTaskDao washMachineTaskDao;
|
|
public String generateReturnMessage(String sendMessageHex, EdgeMachine edgeMachine) {
|
// 请求信号
|
Long ID=edgeMachine.getId();
|
/*LOGGER.debug("收到"+ID+"号磨边机端口1002信息:" + sendMessageHex);
|
LOGGER.debug("收到"+ID+"号磨边机端口1002信息长度为:" + sendMessageHex.length());*/
|
if (sendMessageHex.length() == 24) {
|
String string = sendMessageHex.substring(8, 16);
|
if (string.equals("00060110")) {
|
LOGGER.debug(ID+"号磨边机消息发送成功!");
|
return "";
|
} else {
|
LOGGER.debug(ID+"号磨边机消息发送失败!");
|
return "";
|
}
|
} else if (sendMessageHex.length() == 42) {
|
try {
|
String message=sendMessageHex.substring(18);
|
ShelfStatu statu=shelfStatuDao.findByMachine("edge"+edgeMachine.getId());
|
statu.setMessage(message);
|
statu.setSetTime(new Date());
|
shelfStatuDao.save(statu);
|
/*String result[]=ResultTexts(message);
|
String font="";
|
for(int i=0;i<result.length;i++){
|
font+="\n第"+(i+1)+"个字------十六进制:"+result[i]+",转换bool:"+GetTureOrFalse(result[i]);
|
}
|
System.out.println(font);*/
|
// String Length=result[10]; //长
|
// String Width=result[10]; //宽
|
// String Thickness=result[10]; //厚
|
// RawPackageTxt rawPackageTxt=rawPackageTxtDao.findAcceptedByGroup("1");
|
// String Begin=statu.getPoint(); //开始字 1为下发任务 2为停止任务 3为已发送 0不处理(基本等同于3)
|
// //下发任务
|
// if("1".equals(Begin)){
|
// //长+宽+厚+空空+开始+结束
|
// String data="";
|
// data+=HexUtil.intTo2ByteHex(new Double(rawPackageTxt.getWidth()).intValue());
|
// data+=HexUtil.intTo2ByteHex(new Double(rawPackageTxt.getHeight()).intValue());
|
// data+=HexUtil.intTo2ByteHex(new Double(rawPackageTxt.getThiness()).intValue());
|
// data+="0000"+"0000";
|
// data+="0001";
|
// statu.setPoint("3");
|
// shelfStatuDao.save(statu);
|
// return message(data,"0000");
|
// }else if("2".equals(Begin)){
|
// String data="0000"+"0000"+"0000"+"0000"+"0000"+"0000"+"0001";
|
// return message(data,"0000");
|
// }
|
} catch (Exception e) {
|
System.out.println("请检查GaoliweiMessageProcessor.generateReturnMessage!错误原因:"+getStackTraceInfo(e));
|
}
|
}
|
return "";
|
|
}
|
|
|
|
//得到所有的55个字
|
private String[] ResultTexts(String Str) {
|
String []InfoTex =new String[6];
|
for(int i=0;i<6;i++){
|
InfoTex[i]=Str.substring(0,4);
|
Str=Str.substring(4);
|
}
|
return InfoTex;
|
|
}
|
|
|
/****
|
/****
|
* 根据机器名称,d word长度获取所有的信息。使用方法:通过【下标】获取16进制的一个字
|
* 用途:机器IO信号读取
|
* @param machineName
|
* @param index
|
* @return
|
*/
|
public String[] GetMachineSign(String machineName,int index){
|
ShelfStatu machinestu=shelfStatuDao.findByMachine(machineName);
|
String message=machinestu.getMessage();
|
String []InfoTex =new String[index];
|
for(int i=0;i<index;i++){
|
InfoTex[i]=message.substring(0,4);
|
message=message.substring(4);
|
}
|
return InfoTex;
|
}
|
/****
|
* 根据shelfStatu表里的机器名、word数,要获取的字的位置,以及对应Io信号的下标,返回String类型的0000或者0001
|
* @param machineName
|
* @param wordCount
|
* @param position
|
* @param index
|
* @return
|
*/
|
public String GetTureOrFalse(String cont){
|
int len=HexUtil.GetHextoBinReverse(cont).length();
|
String retrun="";
|
for(int i=0;i<len;i++){
|
if((HexUtil.getReturnStr(HexUtil.GetHextoBinReverse(cont).charAt(i))).equals("0001")){
|
retrun+="true";
|
}
|
else if((HexUtil.getReturnStr(HexUtil.GetHextoBinReverse(cont).charAt(i))).equals("0000")){
|
retrun+="false";
|
}
|
else{
|
retrun+="";
|
}
|
|
}
|
return retrun;
|
|
|
}
|
|
public String FindMachineIOData(String machineName,int wordCount,int position,int index,String outTip){
|
String result[]=GetMachineSign(machineName,wordCount);
|
String IOdata= HexUtil.getReturnStr(HexUtil.GetHextoBinReverse(result[position]).charAt(index));
|
System.out.println(outTip+"------"+IOdata);
|
return IOdata;
|
}
|
|
/*****
|
* 得到16进制的对应机器里的信息,非2进制转化后的。返回类型为String 类型 传入参数:机器名、word总数量、获取的下标位置
|
* @param machineName
|
* @param wordCount
|
* @param position
|
* @return
|
*/
|
public String FindMachineIOData(String machineName,int wordCount,int position,String outTip){
|
String result[]=GetMachineSign(machineName,wordCount);
|
String machineSign=result[position];
|
System.out.println(outTip+"------"+machineSign);
|
return machineSign;
|
}
|
|
|
/**
|
* 获取e.printStackTrace() 的具体信息,赋值给String 变量,并返回
|
*
|
* @param e
|
* Exception
|
* @return e.printStackTrace() 中 的信息
|
*/
|
public static String getStackTraceInfo(Exception e) {
|
StringWriter sw = null;
|
PrintWriter pw = null;
|
try{
|
sw = new StringWriter();
|
pw = new PrintWriter(sw);
|
e.printStackTrace(pw);//将出错的栈信息输出到printWriter中
|
pw.flush();
|
sw.flush();
|
return sw.toString();
|
} catch (Exception ex){
|
return "printStackTrace()转换错误";
|
} finally {
|
if (sw != null) {
|
try {
|
sw.close();
|
} catch (IOException e1){
|
e1.printStackTrace();
|
}
|
}
|
if (pw != null) {
|
pw.close();
|
}
|
}
|
|
}
|
|
private String toSocket(String socket) {
|
int s=HexUtil.hexToInt(socket);
|
if (s>30000) {
|
s=0;
|
}
|
return message(HexUtil.intTo2ByteHex(s+1), "178D");
|
}
|
|
private String message(String senddate, String address) {
|
String Herd = "0110" + address;
|
int length = senddate.length() / 4;
|
String dates = Herd + HexUtil.intTo2ByteHex(length) + HexUtil.intTo1ByteHex(length * 2) + senddate;
|
int lengths = dates.length() / 2;
|
String date = "00000000" + HexUtil.intTo2ByteHex(lengths) + dates;
|
// LOGGER.debug("发送信息内容:" + date);
|
return date;
|
}
|
}
|