package com.mossle.internal.sendsms.service;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import com.mossle.core.mapper.BeanMapper;
import com.mossle.core.mapper.JsonMapper;
import com.mossle.core.page.Page;
import com.mossle.core.spring.MessageHelper;
import com.mossle.core.util.StringUtils;
import com.mossle.internal.sendsms.persistence.domain.SendsmsConfig;
import com.mossle.internal.sendsms.persistence.domain.SendsmsHistory;
import com.mossle.internal.sendsms.persistence.domain.SendsmsQueue;
import com.mossle.internal.sendsms.persistence.manager.SendsmsConfigManager;
import com.mossle.internal.sendsms.persistence.manager.SendsmsHistoryManager;
import com.mossle.internal.sendsms.persistence.manager.SendsmsQueueManager;
import com.mossle.internal.sendsms.support.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
@Service
@Transactional
public class SendsmsDataService {
private static Logger logger = LoggerFactory
.getLogger(SendsmsDataService.class);
private SendsmsConfigManager sendsmsConfigManager;
private SendsmsQueueManager sendsmsQueueManager;
private SendsmsHistoryManager sendsmsHistoryManager;
private BeanMapper beanMapper = new BeanMapper();
private SmsConnector smsConnector;
private JsonMapper jsonMapper = new JsonMapper();
public void saveSendsmsQueue(String mobile, String message,
String configCode) {
SendsmsConfig sendsmsConfig = sendsmsConfigManager.findUniqueBy("name",
configCode);
if (sendsmsConfig == null) {
throw new IllegalArgumentException("configCode isnot exists : "
+ configCode);
}
SendsmsQueue sendsmsQueue = new SendsmsQueue();
sendsmsQueue.setMobile(mobile);
sendsmsQueue.setMessage(message);
sendsmsQueue.setSendsmsConfig(sendsmsConfig);
sendsmsQueue.setCreateTime(new Date());
sendsmsQueueManager.save(sendsmsQueue);
}
public boolean checkConfigCodeExists(String configCode) {
SendsmsConfig sendsmsConfig = sendsmsConfigManager.findUniqueBy("name",
configCode);
return sendsmsConfig != null;
}
public List<SendsmsQueue> findTopSendsmsQueues(int size) {
return (List<SendsmsQueue>) sendsmsQueueManager.pagedQuery(
"from SendsmsQueue", 1, size).getResult();
}
public void processSendsmsQueue(SendsmsQueue sendsmsQueue) throws Exception {
SmsDTO smsDto = new SmsDTO();
SmsDTO resultSmsDto = null;
if (sendsmsQueue.getSendsmsConfig() == null) {
logger.info("sendsms config is null");
return;
}
SendsmsConfig sendsmsConfig = sendsmsQueue.getSendsmsConfig();
SmsServerInfo smsServerInfo = new SmsServerInfo();
smsServerInfo.setHost(sendsmsConfig.getHost());
smsServerInfo.setUsername(sendsmsConfig.getUsername());
smsServerInfo.setPassword(sendsmsConfig.getPassword());
smsServerInfo.setAppId(sendsmsConfig.getAppId());
smsServerInfo.setMobileFieldName(sendsmsConfig.getMobileFieldName());
smsServerInfo.setMessageFieldName(sendsmsConfig.getMessageFieldName());
smsDto.setMobile(sendsmsQueue.getMobile());
smsDto.setMessage(sendsmsQueue.getMessage());
resultSmsDto = smsConnector.send(smsDto, smsServerInfo);
if (!resultSmsDto.isSuccess() && (resultSmsDto.getThrowable() != null)) {
StringWriter writer = new StringWriter();
resultSmsDto.getThrowable()
.printStackTrace(new PrintWriter(writer));
resultSmsDto.setResult(writer.toString());
}
this.saveSendsmsHistory(sendsmsQueue, resultSmsDto);
}
public void saveSendsmsHistory(SendsmsQueue sendsmsQueue, SmsDTO smsDto) {
SendsmsHistory sendsmsHistory = new SendsmsHistory();
beanMapper.copy(smsDto, sendsmsHistory);
sendsmsHistory.setStatus(smsDto.isSuccess() ? "success" : "error");
sendsmsHistory.setInfo(smsDto.getResult());
if (smsDto.getThrowable() != null) {
sendsmsHistory.setInfo(smsDto.getThrowable().getMessage());
}
sendsmsHistory.setSendsmsConfig(sendsmsQueue.getSendsmsConfig());
sendsmsHistory.setCreateTime(new Date());
sendsmsHistoryManager.save(sendsmsHistory);
sendsmsQueueManager.remove(sendsmsQueue);
}
@Resource
public void setSendsmsConfigManager(
SendsmsConfigManager sendsmsConfigManager) {
this.sendsmsConfigManager = sendsmsConfigManager;
}
@Resource
public void setSendsmsQueueManager(SendsmsQueueManager sendsmsQueueManager) {
this.sendsmsQueueManager = sendsmsQueueManager;
}
@Resource
public void setSendsmsHistoryManager(
SendsmsHistoryManager sendsmsHistoryManager) {
this.sendsmsHistoryManager = sendsmsHistoryManager;
}
@Resource
public void setSmsConnector(SmsConnector smsConnector) {
this.smsConnector = smsConnector;
}
}