package com.northglass.service.message;
|
|
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.LoadMachineTaskState;
|
import com.northglass.entity.CutMachine;
|
import com.northglass.entity.LoadMachineTask;
|
import com.northglass.entity.ShelfStatu;
|
import com.northglass.entity.TidyMachine;
|
import com.northglass.repository.LoadMachineTaskDao;
|
import com.northglass.repository.ShelfStatuDao;
|
import com.northglass.service.loadmachine.LoadMachineService;
|
import com.northglass.util.HexUtil;
|
|
@Component
|
@Transactional
|
public class CutMachineMessageProcessor extends AbstractMessageProcessor {
|
|
private static final Logger LOGGER = LoggerFactory.getLogger(CutMachineMessageProcessor.class);
|
@Autowired
|
private LoadMachineService loadMachineService;
|
|
@Autowired
|
private LoadMachineTaskDao loadMachineTaskDao;
|
|
@Autowired
|
private ShelfStatuDao shelfStatuDao;
|
|
|
//请求信号
|
private static final int TASK_ASK_START = 18;
|
private static final int TASK_ASK_END = 21;
|
//请求ID
|
private static final int TASK_ASK_TD_START = 22;
|
private static final int TASK_ASK_ID_END = 25;
|
|
//任务汇报字
|
private static final int TASK_FINISH_PLC_START = 38;
|
private static final int TASK_FINISH_PLC_END = 41;
|
|
//任务汇报ID
|
private static final int TASK_FINISH_PLC_ID_START = 42;
|
private static final int TASK_FINISH_PLC_ID_END = 45;
|
|
//任务发送字
|
private static final int TASK_MES_START = 58;
|
private static final int TASK_MES_END = 61;
|
|
//任务确认字
|
private static final int TASK_SURE_START = 98;
|
private static final int TASK_SURE_END = 101;
|
|
// 任务报警字
|
private static final int TASK_WARN_START = 138;
|
private static final int TASK_WARN_END = 141;
|
|
//完成步骤
|
private static final int FINISH_STEP_START = 178;
|
private static final int FINISH_STEP_END = 181;
|
|
/**
|
* 解析16进制消息,转译为描述信息
|
*
|
* @param messageHex
|
* @return
|
*/
|
public String parse(String messageHex) {
|
LOGGER.trace("> Start parse");
|
|
if (messageHex.length() < 84) {
|
return "无效消息:" + messageHex;
|
}
|
|
String startSign = messageHex.substring(START_SIGN_START, START_SIGN_END + 1);
|
if (!startSign.equals("3c5354413e")) {
|
return "无效消息:" + messageHex;
|
}
|
|
StringBuffer messageDescription = new StringBuffer();
|
|
// 消息长度
|
messageDescription.append(parseInt(messageHex, MESSAGE_LENGTH_START, MESSAGE_LENGTH_END, "消息长度"));
|
|
// 订单编号
|
messageDescription.append(parseString(messageHex, ORDER_NUMBER_START, ORDER_NUMBER_END, "订单编号"));
|
|
// 功能号
|
messageDescription.append(parseString(messageHex, FUNCTION_NUMBER_START, FUNCTION_NUMBER_END, "功能号"));
|
|
// 加密方式
|
messageDescription.append(parseString(messageHex, ENCRYPT_START, ENCRYPT_END, "加密方式"));
|
|
// 发送时刻
|
messageDescription.append(parseTime(messageHex, SEND_TIME_START, SEND_TIME_END, "发送时刻"));
|
|
// 解析数据区
|
messageDescription.append(parseData(messageHex));
|
|
// LOGGER.trace("> End parse");
|
return messageDescription.toString();
|
}
|
|
private String parseData(String messageHex) {
|
return "无法解析数据区";
|
}
|
|
public String generateReturnMessage(String sendMessageHex, CutMachine cutmachine) {
|
/*LOGGER.debug("收到切割机的信息:"+sendMessageHex);*/
|
if (sendMessageHex.length() == 24) {
|
String string=sendMessageHex.substring(8,15);
|
if (string.equals("00060010")) {
|
LOGGER.debug("上次消息发送成功!");
|
return "";
|
}else {
|
LOGGER.debug("上次消息发送失败!");
|
return "";
|
}
|
}else if (sendMessageHex.length() == 198){
|
try {
|
String taskAsk = sendMessageHex.substring(TASK_ASK_START, TASK_ASK_END + 1);// 请求信号
|
String taskIdAsk = sendMessageHex.substring(TASK_ASK_TD_START, TASK_ASK_ID_END + 1); // 请求ID
|
String taskFinish = sendMessageHex.substring(TASK_FINISH_PLC_START, TASK_FINISH_PLC_END + 1); // 任务汇报字
|
String taskFinishId = sendMessageHex.substring(TASK_FINISH_PLC_ID_START, TASK_FINISH_PLC_ID_END + 1);// 任务汇报字ID
|
String taskMes = sendMessageHex.substring(TASK_MES_START, TASK_MES_END + 1);// 任务发送字
|
String taskSure = sendMessageHex.substring(TASK_SURE_START, TASK_SURE_END + 1);// 任务确认字
|
String taskWarning = sendMessageHex.substring(TASK_WARN_START, TASK_WARN_END + 1);// 任务报警字
|
String finishStep = sendMessageHex.substring(FINISH_STEP_START, FINISH_STEP_END + 1);// 完成步骤
|
String message = sendMessageHex.substring(TASK_ASK_START, 198);// 信息
|
/*LOGGER.debug("请求信号:" + taskAsk + "| 请求ID:" + taskIdAsk + "| 任务汇报字:" + taskFinish + "| 任务汇报字ID:"
|
+ taskFinishId + "| 任务发送字:" + taskMes + "| 任务确认字:" + taskSure + "| 任务报警字:" + taskWarning + "| 完成步骤:"
|
+ finishStep);*/
|
//String cutMessage=sendMessageHex.substring(18);
|
ShelfStatu statu = shelfStatuDao.findByMachine("cut"+cutmachine.getId());
|
statu.setMessage(message);
|
statu.setSetTime(new Date());
|
shelfStatuDao.save(statu);
|
List<LoadMachineTask> waitingTask = loadMachineTaskDao.findCompletedTasksByLoadMachine(cutmachine.getId());
|
LoadMachineTask inWorkTask = loadMachineTaskDao.findCutStartByLoadMachine(cutmachine.getId());
|
if (taskFinish.equals("0001")) {
|
if (taskSure.equals("0000")) {
|
if (inWorkTask != null) {
|
inWorkTask.setCompleteTime(new Date());
|
inWorkTask.setState(LoadMachineTaskState.CUT_FINISH);
|
loadMachineTaskDao.save(inWorkTask);
|
//把完成版面信息 optpatten 表中 的数据 添加到glass表中 变成识别机的任务
|
//loadMachineService.bcglass(inWorkTask.getOptPattern().getId());
|
}
|
return sendMessage("00010000","0014");
|
}
|
}else {
|
if (taskSure.equals("0001")) {
|
return sendMessage("00000000","0014");
|
}
|
}
|
if (taskAsk.equals("0001")) {
|
if (taskMes.equals("0000")) {
|
if (waitingTask.size()>0) {
|
return sendMessage("00010000"+"0001","000a");
|
}
|
}
|
}else {
|
if (taskMes.equals("0001")) {
|
if (inWorkTask == null) {
|
if (waitingTask.size()>0) {
|
LoadMachineTask task = waitingTask.get(0);
|
task.setStartTime(new Date());
|
task.setState(LoadMachineTaskState.WORKING);
|
loadMachineTaskDao.save(task);
|
}
|
}
|
return sendMessage("000000000000","000a");
|
}
|
}
|
} catch (Exception e) {
|
System.out.println("请检查CutMachineMessageProcessor.generateReturnMessage");
|
}
|
return "";
|
}else {
|
LOGGER.debug("接收的信息和设置的不一致,请查找原因,长度为:"+sendMessageHex.length());
|
return "";
|
}
|
}
|
|
|
/**
|
* 消息发送
|
*
|
* @param task
|
* @return
|
*/
|
private String sendMessage(String senddate, String address) {
|
String Herd = "0010" + 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;
|
}
|
}
|