com.neusoft.mid.clwapi.threadwork.PhotoSendWorkThread.java Source code

Java tutorial

Introduction

Here is the source code for com.neusoft.mid.clwapi.threadwork.PhotoSendWorkThread.java

Source

/**
 * @(#)PhotoSendWorkThread.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.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
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.entity.oauth.MobileUsrAllInfo;
import com.neusoft.mid.clwapi.mapper.MsgMapper;
import com.neusoft.mid.clwapi.process.delivermsg.DeliverMsgResult;
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 ?12:53:43
 */
public class PhotoSendWorkThread implements Runnable {
    /**
     * .
     */
    private static Logger logger = LoggerFactory.getLogger(ModCommonConstant.LOGGER_NAME);

    private CoreMsgInfo msgInfo;
    private MsgMapper msgMapper;
    private SendDeliverMsgService sendDeliverMsgService;
    private MobileUsrAllInfo usrInfo;

    public PhotoSendWorkThread(CoreMsgInfo msgInfo, MobileUsrAllInfo usrInfo, MsgMapper msgMapper,
            SendDeliverMsgService sendDeliverMsgService) {
        this.msgInfo = msgInfo;
        this.usrInfo = usrInfo;
        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 + "");

            logger.info("??:" + msgInfo.getType());
            String[] channelArray = StringUtils.split(StringUtils.strip(msgInfo.getType()), "|");
            logger.info("???" + channelArray.length + "?");
            // ?.
            String batchId = UUID.randomUUID().toString().replaceAll("-", "");
            for (String vinTemp : vinArray) {
                String vin = StringUtils.strip(vinTemp);
                // ????
                try {
                    logger.info("vin:" + vin + "");
                    TerminalViBean terminalInfo = (TerminalViBean) msgMapper.getRealVehcileByVin(vin);
                    // ????
                    if (isPicPassable(vin, terminalInfo)) {
                        logger.info("VIN:" + vin + "??????");
                        for (String channelTemp : channelArray) {
                            String msgId = createMsgId();
                            MDC.put("SUB_ID", "[" + msgId + "]");
                            String channel = StringUtils.strip(channelTemp);
                            SendCommandInfo info = initPicCommandInfo(vin, channel, terminalInfo.getSimCardNum(),
                                    batchId, usrInfo, msgId);
                            if (null != info) {
                                // ?????
                                DeliverMsgResult respResult = sendDeliverMsgService.sendCommandToCoreService(info);
                                // ?????.
                                if (null != respResult && "0".equals(respResult.getCode())) {
                                    logger.info("VIN:" + vin + ",channel:" + channel + "???");
                                } else {
                                    logger.error("?VIN:" + vin + ",channel:" + channel
                                            + "?");
                                }
                            } else {
                                logger.error("?VIN:" + vin + ",channel:" + channel
                                        + "??");
                            }
                        }

                    } else {
                        logger.info("VIN:" + vin + "????");
                    }
                } catch (DataAccessException e) {
                    logger.error("??vin:" + vin + "?", e);
                } catch (Exception e) {
                    logger.error("vin:" + vin + "??", e);
                }
            }
        }
    }

    /**
     * ????.
     * 
     * @param vin
     *            VIN?
     * @param terminalInfo
     *            ??.
     * @return ????.
     */
    private boolean isPicPassable(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 {
                        if ("1".equals(terminalInfo.getAccFlg())) {
                            flg = true;
                        } else {
                            flg = false;
                        }
                    }
                } else {
                    logger.info("vin:" + vin + "???,??");
                    // ??
                    flg = terminalInfo.getSeconds() < 300;
                }
            }

        } else {
            logger.info("?vin:" + vin + "?");
            flg = false;
        }
        return flg;
    }

    /**
     * ???.
     * 
     * @param vin
     *            VIN?
     * @param chanle
     *            ??
     * @param simCardNum
     *            SIM??
     * @param batchId
     *            ?.
     * @return
     */
    private SendCommandInfo initPicCommandInfo(String vin, String chanle, String simCardNum, String batchId,
            MobileUsrAllInfo usrInfo, String msgId) {
        SendCommandInfo sendCommandInfo = new SendCommandInfo();
        sendCommandInfo.setBatchId(batchId);
        sendCommandInfo.setChanleCode(chanle);
        sendCommandInfo.setMsgId(msgId);
        sendCommandInfo.setOperateUserId(usrInfo.getUsrId());
        sendCommandInfo.setSendCommand("0010");
        sendCommandInfo.setSendType("2001");
        sendCommandInfo.setSimCardNumber(simCardNum);
        sendCommandInfo.setSource("1");
        sendCommandInfo.setTerminalId(vin);

        StringBuffer packet = new StringBuffer();
        packet.append("00042001");
        packet.append("0120");
        packet.append(msgId);
        packet.append("02");
        packet.append(format(Integer.toHexString(12), 2));
        packet.append(getThisSecondTime());
        packet.append("0302");
        // pixel
        packet.append(format(Integer.toHexString(1), 2));

        packet.append("0402");
        // image_quality
        packet.append(format(Integer.toHexString(Integer.parseInt("5")), 2));
        packet.append("0502");
        packet.append(format(Integer.toHexString(Integer.parseInt(chanle)), 2));
        /*
         * ?
         */
        packet.append("0604");
        packet.append("0001");
        packet.append("0703");
        packet.append("000");
        packet.append("0801");
        packet.append("0");
        packet.append("0903");
        // brightness
        packet.append(format(Integer.toHexString(126), 3));
        packet.append("0A03");
        // contrast
        packet.append(format(Integer.toHexString(65), 3));
        packet.append("0B03");
        // saturation
        packet.append(format(Integer.toHexString(65), 3));
        packet.append("0C03");
        // color
        packet.append(format(Integer.toHexString(126), 3));

        String remark = "??";
        try {
            String base64Remark = Base64Utility.encode(remark.getBytes("UTF-8"));
            sendCommandInfo.setRemark(base64Remark);
            logger.info("Base64??REMARK:" + base64Remark);
        } catch (UnsupportedEncodingException e) {
            logger.error("REMARK:" + remark + "?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(usrInfo.getUsrId());
        sendCommandInfo.setClientId(usrInfo.getClientId());

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

    /**
     * ??
     * 
     * @return ?.?:yyMMddHHmmss.
     */
    private static String getThisSecondTime() {
        Calendar calendar = Calendar.getInstance();
        Date currentTime = calendar.getTime();
        SimpleDateFormat formatter = new SimpleDateFormat("yyMMddHHmmss");
        return formatter.format(currentTime);
    }
}