package com.cabletech.business.base.service; import java.util.Calendar; import java.util.List; import java.util.Map; import javax.annotation.Resource; import org.apache.commons.beanutils.BeanUtils; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.MapUtils; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.cabletech.baseinfo.jms.JmsSmParameter; import com.cabletech.baseinfo.jms.JmsMessageTemplateService; import com.cabletech.baseinfo.jms.JmsSmMessageSender; import com.cabletech.baseinfo.shortmessage.RmiService; import com.cabletech.baseinfo.shortmessage.SmSendClientService; import com.cabletech.business.base.dao.SmParameterDao; import com.cabletech.business.base.model.SmParameter; /** * 发送短信客户端服务 * * @author 杨隽 2012-03-26 创建 * @author 杨隽 2012-03-28 添加根据“是否发送短信标志”进行发送短信的功能 * */ @Service public class SmSendService { /** * 日志输出 */ private Logger logger = Logger.getLogger("SmSendService"); /** * 发送信息模板服务 */ @Resource(name = "jmsMessageTemplateService") private JmsMessageTemplateService messageTemplateService; /** * 发送信息业务 */ @Resource(name = "smMessageSender") private JmsSmMessageSender sender; /** * 发送短信记录Dao */ @Resource(name = "smParameterDao") private SmParameterDao smParameterDao; /** * 执行发送短信信息 * * @param smParameter * SmParameter 短信发送参数 */ public void sendMessage(SmParameter smParameter) { try { RmiService rmiService = RmiService.getInstance(); SmSendClientService clientService = new SmSendClientService( rmiService); String xmlFileId = smParameter.getXmlFileId(); String simId = smParameter.getSimId(); if (StringUtils.isNotBlank(simId)) { simId = simId.trim(); } String xmlMessageId = smParameter.getXmlMessageId(); String[] contentParameters = smParameter.getContentParameters(); if (smParameter.isSentSm()) { clientService.sendMessage(xmlFileId, simId, xmlMessageId, contentParameters); } } catch (Exception ex) { logger.error("发送短信失败:", ex); } } /** * 执行发送短信信息到Jms * * @param smParameter * SmParameter 短信发送参数 */ public void sendMessageToJms(SmParameter smParameter) { try { String xmlFileId = smParameter.getXmlFileId(); String simId = smParameter.getSimId(); if (StringUtils.isNotBlank(simId)) { simId = simId.trim(); } String xmlMessageId = smParameter.getXmlMessageId(); String[] contentParameters = smParameter.getContentParameters(); if (smParameter.isSentSm()) { String content = messageTemplateService.getMessageContent( xmlFileId, xmlMessageId, contentParameters); JmsSmParameter parameter = JmsSmParameter .getInstanceForNotNeedResponse(simId, content); sender.sendMessage(parameter); } } catch (Exception ex) { logger.error("发送短信失败:", ex); } } /** * 将要发送的信息写入到待发送信息的数据表中 * * @param smParameter * SmParameter */ @Transactional public void writeMessage(SmParameter smParameter) { if (StringUtils.isBlank(smParameter.getSimId())) { return; } List<Map<String, Object>> smValidList = smParameterDao .getSmValidList(smParameter); if (CollectionUtils.isEmpty(smValidList)) { return; } List<Map<String, Object>> smTimeSetList = smParameterDao .getSmTimeSetList(smParameter); if (CollectionUtils.isEmpty(smTimeSetList)) { return; } for (int i = 0; i < smValidList.size(); i++) { Map<String, Object> smValidMap = smValidList.get(i); if (MapUtils.isEmpty(smValidMap)) { continue; } int timeOutNum = 0; for (int j = 0; j < smTimeSetList.size(); j++) { Map<String, Object> smTimeSetMap = smTimeSetList.get(j); if (MapUtils.isEmpty(smTimeSetMap)) { continue; } if (smValidMap.get("SMS_TYPE").equals( smTimeSetMap.get("SMS_TYPE"))) { timeOutNum = Integer.parseInt((String) smTimeSetMap .get("TIMEOUT_NUM_DIS")); break; } } Calendar c = Calendar.getInstance(); c.setTime(smParameter.getHandleLimit()); if (SmParameter.CLOSED_DEADLINE_SMS_TYPE.equals(smValidMap .get("SMS_TYPE"))) { c.add(Calendar.HOUR_OF_DAY, -timeOutNum); } if (SmParameter.TIMEOUT_UPGRADE_SMS_TYPE.equals(smValidMap .get("SMS_TYPE"))) { c.add(Calendar.HOUR_OF_DAY, timeOutNum); } smParameter.setHandleLimit(c.getTime()); SmParameter newSmParameter = new SmParameter(); try { BeanUtils.copyProperties(newSmParameter, smParameter); smParameterDao.save(newSmParameter); } catch (Exception ex) { logger.error("", ex); } } } }