/**
*
*/
package jframe.yunpian.service;
import java.io.File;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import jframe.core.plugin.annotation.InjectPlugin;
import jframe.core.plugin.annotation.InjectService;
import jframe.core.plugin.annotation.Injector;
import jframe.core.plugin.annotation.Start;
import jframe.core.plugin.annotation.Stop;
import jframe.httpclient.service.HttpClientService;
import jframe.httpclient.util.HttpUtil;
import jframe.yunpian.YunpianConfig;
import jframe.yunpian.YunpianPlugin;
/**
* @author dzh
* @date Jul 14, 2015 6:02:24 PM
* @since 1.0
*/
@Injector
public class YunpianServiceImpl implements YunpianService {
@InjectPlugin
static YunpianPlugin plugin;
@InjectService(id = "jframe.service.httpclient")
static HttpClientService _http;
static Logger LOG = LoggerFactory.getLogger(YunpianServiceImpl.class);
static String FILE_CONF = "file.yunpian";
static YunpianConfig _config = new YunpianConfig();
static Map<String, String> HTTP_PARAS = new HashMap<String, String>(1, 1);
static {
HTTP_PARAS.put(HttpClientService.P_MIMETYPE, "application/x-www-form-urlencoded");
// HTTP_PARAS.put(HttpClientService.P_METHOD, "post");
}
@Start
void start() {
String conf = plugin.getConfig(FILE_CONF);
if (!new File(conf).exists()) {
LOG.error("Not found yunpian.properties -> {}", conf);
return;
}
try {
_config.init(conf);
} catch (Exception e) {
LOG.error(e.getMessage());
return;
}
LOG.info("YunpianService start successfully!");
}
@Stop
void stop() {
}
@Override
public Map<String, String> send(String text, String extend, String uid, String callback, String... mobile) {
if (mobile == null || mobile.length == 0)
return Collections.emptyMap();
String httpid = _config.getConf(null, YunpianConfig.HttpId, "yunpian");
String path = _config.getConf(null, YunpianConfig.UrlSend);
String charset = _config.getConf(null, YunpianConfig.Charset);
int maxOnce = 100;
for (int i = 0; i < mobile.length; i++) {
Map<String, String> reqPara = new HashMap<String, String>();
reqPara.put(YunpianConfig.Apikey, _config.getConf(null, YunpianConfig.Apikey));
reqPara.put(YunpianConfig.Text, text);
if (extend != null)
reqPara.put(YunpianConfig.Extend, extend);
if (uid != null) {
reqPara.put(YunpianConfig.Uid, uid);
}
if (callback != null) {
reqPara.put(YunpianConfig.Callback, callback);
}
int limit = Math.min(i + maxOnce - 1, mobile.length - 1);
StringBuilder buf = new StringBuilder();
while (true) {
buf.append(mobile[i]);
if (i == limit) {
break;
}
buf.append(',');
++i;
}
reqPara.put(YunpianConfig.Mobile, buf.toString());
try {
Map<String, String> rsp = _http.<HashMap<String, String>> send(httpid, path,
HttpUtil.format(reqPara, charset), null, HTTP_PARAS);
if (LOG.isDebugEnabled()) {
LOG.debug(rsp.toString());
}
return rsp;
} catch (Exception e) {
LOG.error(e.getMessage());
// TODO
}
}
return Collections.emptyMap();
}
@Override
public Map<String, String> send(String text, String... mobile) {
return send(text, null, null, null, mobile);
}
}