Java tutorial
/** * @(#)MtMsgWorkThread.java 2013-5-9 * * Copyright 2013 Neusoft Group Ltd. All rights reserved. * Neusoft PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */ package com.neusoft.mid.clwapi.threadwork; import java.io.UnsupportedEncodingException; import java.util.UUID; import org.apache.commons.lang.StringUtils; import org.apache.cxf.common.util.Base64Utility; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.slf4j.MDC; import org.springframework.dao.DataAccessException; import com.neusoft.mid.clwapi.common.ModCommonConstant; import com.neusoft.mid.clwapi.entity.msg.CoreMsgInfo; import com.neusoft.mid.clwapi.entity.msg.TerminalViBean; import com.neusoft.mid.clwapi.mapper.MsgMapper; import com.neusoft.mid.clwapi.process.delivermsg.SendCommandInfo; import com.neusoft.mid.clwapi.process.delivermsg.SendDeliverMsgService; import com.neusoft.mid.clwapi.tools.RandomNumberUtil; import com.neusoft.mid.clwapi.tools.TimeUtil; /** * @author <a href="mailto:majch@neusoft.com">majch </a> * @version $Revision 1.0 $ 2013-5-9 ?11:05:39 */ public class MtMsgSendWorkThread implements Runnable { /** * . */ private static Logger logger = LoggerFactory.getLogger(ModCommonConstant.LOGGER_NAME); private CoreMsgInfo msgInfo; private MsgMapper msgMapper; private SendDeliverMsgService sendDeliverMsgService; public MtMsgSendWorkThread(CoreMsgInfo msgInfo, MsgMapper msgMapper, SendDeliverMsgService sendDeliverMsgService) { this.msgInfo = msgInfo; this.msgMapper = msgMapper; this.sendDeliverMsgService = sendDeliverMsgService; } public void run() { if (null != msgInfo) { logger.info("VINS?:" + msgInfo.getVin()); String[] vinArray = StringUtils.split(StringUtils.strip(msgInfo.getVin()), "|"); logger.info("???" + vinArray.length + ""); // ?. String batchId = UUID.randomUUID().toString().replaceAll("-", ""); for (String vin : vinArray) { String msgId = createMsgId(); MDC.put("SUB_ID", "[" + msgId + "]"); try { logger.info("vin:" + vin + ""); TerminalViBean terminalInfo = (TerminalViBean) msgMapper.getRealVehcileByVin(vin); // ???? if (isMsgPassable(vin, terminalInfo)) { logger.info("VIN:" + vin + "??????"); SendCommandInfo info = initDiaoduCommandInfo(vin, msgInfo.getMsg(), msgInfo.getType(), terminalInfo.getSimCardNum(), batchId, msgId, msgInfo.getUserId()); if (null != info) { // ????? sendDeliverMsgService.sendCommandToCoreService(info); } else { logger.info("???,??"); } } else { logger.info("VIN:" + vin + "????"); } } catch (DataAccessException e) { logger.error("??vin:" + vin + "?", e); } catch (Exception e) { logger.error("vin:" + vin + "??", e); } MDC.remove("SUB_ID"); } } } /** * ????. * * @param vin * VIN? * @param terminalInfo * ??. * @return ????. */ private boolean isMsgPassable(String vin, TerminalViBean terminalInfo) { boolean flg = true; if (null != terminalInfo) { logger.info("vin:" + vin + ",TERMINAL_TIME:" + terminalInfo.getTerminalTime() + ",STAT_INFO:" + terminalInfo.getStateInfo() + ",ACC:" + terminalInfo.getAccFlg() + ",SECONDS:" + terminalInfo.getSeconds() + ",SIM_CARD_NUMBER:" + terminalInfo.getSimCardNum()); if (StringUtils.isEmpty(terminalInfo.getSimCardNum()) || StringUtils.isEmpty(terminalInfo.getTerminalTime())) { flg = false; } else { if (!StringUtils.isEmpty(terminalInfo.getStateInfo())) { if (("1".equals(terminalInfo.getAccFlg()) && (terminalInfo.getSeconds() >= 300)) || ("0".equals(terminalInfo.getAccFlg()) && (terminalInfo.getSeconds() >= 1800))) { flg = false; } } else { logger.info("vin:" + vin + "???,??"); // ?? flg = terminalInfo.getSeconds() < 300; } } } else { logger.info("?vin:" + vin + "?"); flg = false; } return flg; } /** * * @param vin * @param msg * @param type * @param simCardNum * @param batchId * @return */ private SendCommandInfo initDiaoduCommandInfo(String vin, String msg, String type, String simCardNum, String batchId, String msgId, String userId) { SendCommandInfo sendCommandInfo = new SendCommandInfo(); sendCommandInfo.setBatchId(batchId); sendCommandInfo.setChanleCode(null); sendCommandInfo.setMsgId(msgId); sendCommandInfo.setOperateUserId(userId); sendCommandInfo.setSendCommand("0010"); sendCommandInfo.setSendType("2002"); sendCommandInfo.setSimCardNumber(simCardNum); sendCommandInfo.setSource("1"); sendCommandInfo.setTerminalId(vin); StringBuffer packet = new StringBuffer(); packet.append("00042002"); packet.append("0120"); packet.append(msgId); packet.append("0202"); packet.append(format(Integer.toHexString(Integer.parseInt(type, 2)), 2)); packet.append("03"); try { packet.append(format(Integer.toHexString(msg.getBytes("GBK").length), 4)); packet.append(msg); } catch (Exception e) { logger.error(msgId + ",?:", e); return null; } try { String base64Remark = Base64Utility.encode(msg.getBytes("UTF-8")); sendCommandInfo.setRemark(base64Remark); logger.info("Base64??REMARK:" + base64Remark); } catch (UnsupportedEncodingException e) { logger.error("REMARK:" + msg + "?UTF-8Base64?", e); return null; } try { logger.info("????PACKET_CONTENT:" + packet); String base64Packet = Base64Utility.encode(packet.toString().getBytes("UTF-8")); sendCommandInfo.setPacketContent(base64Packet); logger.info("Base64??PACKET_CONTENT:" + base64Packet); } catch (UnsupportedEncodingException e) { logger.error("PACKET_CONTENT:" + packet + "?UTF-8Base64?", e); return null; } sendCommandInfo.setUserId(userId); return sendCommandInfo; } private String format(String str, int len) { while (str.length() < len) { str = "0" + str; } return str; } /** * 32??ID. * * @return 32??ID. */ private String createMsgId() { return "clwapi_" + TimeUtil.getSysTime() + "_" + RandomNumberUtil.randomLong(10); } }