@Override public void run() { logger.info(name + " is running..."); String resource = "com.success.lottery.ticket.service.TicketRouter"; if ("true" .equalsIgnoreCase( AutoProperties.getString("ticketSender.loadWhenStart", "false", resource).trim())) { logger.debug("TicketSender will load the to send ticket from database when start."); loadSendTicketWhenStart(); logger.debug("TicketSender load the to send ticket from database completed when start."); } BetTicketServiceInterf lotteryBetTicketService = ApplicationContextUtils.getService("lotteryBetTicketService", BetTicketServiceInterf.class); // LotteryTermServiceInterf lotteryTermService = // ApplicationContextUtils.getService("lotteryTermService", LotteryTermServiceInterf.class); List<Integer> ticketStatus = new ArrayList<Integer>(); ticketStatus.add(Integer.valueOf(0)); ticketStatus.add(Integer.valueOf(3)); ticketStatus.add(Integer.valueOf(4)); ticketStatus.add(Integer.valueOf(5)); while (!isStop) { try { List<BetTicketDomain> ticketes = lotteryBetTicketService.getTicketes( ticketStatus, "printStation='" + station + "'", AutoProperties.getInt("ticketSender.queryLimit", 1000, resource)); List<String> ticketSequences = new ArrayList<String>(); List<TicketLogInfo> logInfo = new ArrayList<TicketLogInfo>(); if (ticketes != null && ticketes.size() > 0) { ticketCount = ticketCount + ticketes.size(); for (BetTicketDomain ticket : ticketes) { logger.debug("TicketSender get a ticket(" + ticket.getTicketSequence() + ")."); TicketLogInfo info = new TicketLogInfo(); info.setName("TICKETSENDER"); info.setInTime(System.currentTimeMillis()); info.setProcessorName(this.getName()); info.setTicketSequence(ticket.getTicketSequence()); info.setOrderId(ticket.getOrderId()); if (TicketDispatch.contains(ticket)) { logger.debug( "TicketSender get the ticket(" + ticket.getTicketSequence() + ") was already sent to the queue."); sendFail++; continue; } else { // 转换投注串格式 String printCode = EHandSplitTools.betCodeToPrintCode( ticket.getLotteryId(), ticket.getPlayType(), ticket.getBetType(), ticket.getBetCode()); // 转换投注方式 int printType = EHandSplitTools.betTypeToPrintType( ticket.getLotteryId(), ticket.getPlayType(), ticket.getBetType()); logger.debug( "TicketSender convert a ticket(" + ticket.getTicketSequence() + ") betType from:" + ticket.getBetType() + " to:" + printType + " betCode from:" + ticket.getBetCode() + " to:" + printCode); info.setRemark( "convert betType from:" + ticket.getBetType() + " to:" + printType + " betCode from:" + ticket.getBetCode() + " to:" + printCode); ticket.setBetType(printType); ticket.setBetCode(printCode); String rs = null; if ((rs = TicketDispatch.dispatch(ticket)) == null) { logger.debug( "TicketSender send the ticket(" + ticket.getTicketSequence() + ") to the queue success."); ticketSequences.add(ticket.getTicketSequence()); info.addRemark("dispatch", "success"); logInfo.add(info); } else { logger.debug( "TicketSender send the ticket(" + ticket.getTicketSequence() + ") to the queue failed:" + rs + "."); sendFail++; } } } String rs = null; if (ticketSequences.size() > 0) { try { int rc = 0; if ((rc = lotteryBetTicketService.updateBetTicketesStatus( ticketSequences, 1, ticketStatus)) == 0) { rs = "NoRowsUpdate"; logger.debug( "TicketSender update the ticketes(" + ticketSequences.toString() + ") ticketStauts = 1 failed:" + rs); sendFail = sendFail + ticketSequences.size(); } else { logger.debug( "TicketSender update " + rc + " ticketes(" + ticketSequences.toString() + ") ticketStauts = 1 success."); sendSucc = sendSucc + ticketSequences.size(); for (TicketLogInfo info : logInfo) { info.setResult(rs); info.setOutTime(System.currentTimeMillis()); TicketLogger.getInstance("TICKET").log(info); } } } catch (Exception e) { logger.error( "TicketSender update the ticketes(" + ticketSequences.toString() + ") ticketStatus = 1 occur exception:" + e); if (logger.isDebugEnabled()) { e.printStackTrace(); } sendFail = sendFail + ticketSequences.size(); rs = e.toString(); } } } int count = ticketSequences == null ? 0 : ticketSequences.size(); logger.debug( "TicketSender get " + count + " ticketes, sleep " + AutoProperties.getInt("ticketSender.interval", 200, resource) + "ms."); try { Thread.sleep(AutoProperties.getInt("ticketSender.interval", 200, resource)); } catch (Exception e) { } } catch (Exception e) { logger.error("TicketSender occur unknow exception:" + e); if (logger.isDebugEnabled()) { e.printStackTrace(); } try { Thread.sleep(AutoProperties.getInt("ticketSender.interval", 200, resource)); } catch (Exception e1) { } } } isExit = true; logger.info(name + " is shutdown!"); }
public synchronized void loadSendTicketWhenStart() { try { BetTicketServiceInterf lotteryBetTicketService = ApplicationContextUtils.getService( "lotteryBetTicketService", BetTicketServiceInterf.class); List<Integer> ticketStatus = new ArrayList<Integer>(); ticketStatus.add(1); ticketStatus.add(3); ticketStatus.add(4); List<BetTicketDomain> ticketes = lotteryBetTicketService.getTicketes(ticketStatus, "printStation='" + station + "'", 0); for (BetTicketDomain ticket : ticketes) { logger.debug( "TicketSender load a ticket(" + ticket.getTicketSequence() + ") from database when start load."); // 转换投注串格式 String printCode = EHandSplitTools.betCodeToPrintCode( ticket.getLotteryId(), ticket.getPlayType(), ticket.getBetType(), ticket.getBetCode()); // 转换投注方式 int printType = EHandSplitTools.betTypeToPrintType( ticket.getLotteryId(), ticket.getPlayType(), ticket.getBetType()); logger.debug( "TicketSender convert a ticket(" + ticket.getTicketSequence() + ") betType from:" + ticket.getBetType() + " to:" + printType + " betCode from:" + ticket.getBetCode() + " to:" + printCode); ticket.setBetType(printType); ticket.setBetCode(printCode); String rs = TicketDispatch.dispatch(ticket); if (rs == null) { logger.debug( "TicketSender put the ticket(" + ticket.getTicketSequence() + ") into the SendTicketQueue success when start load."); } else { logger.debug( "TicketSender put the ticket(" + ticket.getTicketSequence() + ") into the SendTicketQueue failed:" + rs + " when start load."); } } } catch (Exception e) { logger.error("TicketSender occur unknow exception when start load:" + e); } }