服务类
@Service
@WebService(endpointInterface = "com.api.service.IOperatingIndexWebService", serviceName = "OperatingIndexService")
public class OperatingIndexWebServiceImpl implements IOperatingIndexWebService {
@Autowired
private IOperatingIndexService operatingIndexService;
@Resource
private WebServiceContext wsContext;
@Override
@InvokeLog(value = "webservice[OperatingIndexService.getKPIValue]", printArgs = true)
public String getKPIValue(String xmlParam) {
StringBuilder sb = new StringBuilder();
// 获取请求服务的信息
// MessageContext mc = wsContext.getMessageContext();
// Map requestHeaderNames = (Map)mc.get(SOAPMessageContext.HTTP_REQUEST_HEADERS);
// Set set = requestHeaderNames.keySet();
// for(Object key:set){
// System.out.println(key+" "+requestHeaderNames.get(key));
// }
try {
// 判断传过来的xml是否为空
if (StringUtils.isNotBlank(xmlParam)) {
// 解析传过来的xml
RequestXmlHeader header = WebServiceXmlUtil.xml2Bean(xmlParam);
// 判断区域ID是否是电商的ID
if (StringUtils.equals(header.getCorporationCode(), OperatingIndexConstants.AREA_ID)) {
String time = header.getTime();
List<OperatingIndexBean> api = header.getApi();
sb.append(OperatingIndexConstants.XML_TITLE
+ "<return><status>success</status><message>成功</message><Corporation id=\"")
.append(OperatingIndexConstants.AREA_ID).append("\">");
// 拿到所有指标名称
for (int i = 0; i < api.size(); i++) {
String name = api.get(i).getName();
// 日登陆人员名单 和 在线人员名单,目前拿不到值传空
if (StringUtils.equals(name, OperatingIndexConstants.BUSINESS_SYSTEM_LOGIN_ROLL)
|| StringUtils.equals(name, OperatingIndexConstants.BUSINESS_SYSTEM_ONLINE_ROLL)) {
sb.setLength(0);
sb.append(OperatingIndexConstants.XML_TITLE).append("<LOGINUSER></LOGINUSER>");
return StringEscapeUtils.unescapeXml(sb.toString());
} else if (StringUtils.equals(name, OperatingIndexConstants.BUSINESS_USER_REG_NUM)) {
// 注册用户数
String operatingIndexNum = operatingIndexService.getOperatingIndexNum(name, time);
sb.append("<api name=\"").append(name).append("\"><value>")
.append(operatingIndexNum == null ? "" : operatingIndexNum).append("</value></api>");
} else if (StringUtils.equals(name, OperatingIndexConstants.BUSINESS_SYSTEM_ONLINE_NUM)) {
// 在线用户数
String operatingIndexNum = operatingIndexService.getOperatingIndexNum(name, time);
sb.append("<api name=\"").append(name).append("\"><value>")
.append(operatingIndexNum == null ? "" : operatingIndexNum).append("</value></api>");
} else if (StringUtils.equals(name, OperatingIndexConstants.BUSINESS_DAY_LOGIN_NUM)) {
// 日登陆人数
String operatingIndexNum = operatingIndexService.getOperatingIndexNum(name, time);
sb.append("<api name=\"").append(name).append("\"><value>")
.append(operatingIndexNum == null ? "" : operatingIndexNum).append("</value></api>");
} else if (StringUtils.equals(name, OperatingIndexConstants.BUSINESS_VISIT_COUNT)) {
// 累计访问人数
String operatingIndexNum = operatingIndexService.getOperatingIndexNum(name, time);
sb.append("<api name=\"").append(name).append("\"><value>")
.append(operatingIndexNum == null ? "" : operatingIndexNum).append("</value></api>");
} else if (StringUtils.equals(name, OperatingIndexConstants.BUSINESS_SYSTEM_SESSION_NUM)) {
// 页面会话连接数
String operatingIndexNum = operatingIndexService.getOperatingIndexNum(name, time);
sb.append("<api name=\"").append(name).append("\"><value>")
.append(operatingIndexNum == null ? "" : operatingIndexNum).append("</value></api>");
} else if (StringUtils.equals(name, OperatingIndexConstants.BUSINESS_SYSTEM_RESPONSE_TIME)) {
// 系统服务响应时长
String operatingIndexNum = operatingIndexService.getOperatingIndexNum(name, time);
sb.append("<api name=\"").append(name).append("\"><value>")
.append(operatingIndexNum == null ? "" : operatingIndexNum).append("</value></api>");
} else if (StringUtils.equals(name,OperatingIndexConstants.BUSINESS_SYSTEM_RUNNING_TIME)) {
// 系统运行健康时长
String operatingIndexNum = operatingIndexService.getOperatingIndexNum(name, time);
sb.append("<api name=\"").append(name).append("\"><value>")
.append(operatingIndexNum == null ? "" : operatingIndexNum).append("</value></api>");
} else if (StringUtils.equals(name, OperatingIndexConstants.BUSINESS_DATA_TABLE_SPACE)) {
// 业务应用系统占用表空间大小
String operatingIndexNum = operatingIndexService.getOperatingIndexNum(name, time);
sb.append("<api name=\"").append(name).append("\"><value>")
.append(operatingIndexNum == null ? "" : operatingIndexNum).append("</value></api>");
} else if (StringUtils.equals(name, OperatingIndexConstants.BUSINESS_SYSTEM_DB_TIME)) {
// 数据库平均响应时长
String operatingIndexNum = operatingIndexService.getOperatingIndexNum(name, time);
sb.append("<api name=\"").append(name).append("\"><value>")
.append(operatingIndexNum == null ? "" : operatingIndexNum).append("</value></api>");
} else {
// 当指标名称传错的时候
sb.setLength(0);
sb.append(OperatingIndexConstants.XML_TITLE
+ "<return><status>failure</status><message>失败</message><reason>指标名称错误</reason></return>");
break;
}
}
sb.append("</Corporation></return>");
} else {
sb.append(OperatingIndexConstants.XML_TITLE
+ "<return><status>failure</status><message>失败</message><reason>电商ID或标签名称错误</reason></return>");
}
} else {
sb.append(OperatingIndexConstants.XML_TITLE
+ "<return><status>failure</status><message>失败</message><reason>传入xml为空</reason></return>");
}
} catch (Exception e) {
sb.setLength(0);
sb.append(OperatingIndexConstants.XML_TITLE
+ "<return><status>failure</status><message>失败</message><reason>webservice[OperatingIndexService]接口调用异常</reason></return>");
e.printStackTrace();
}
return sb.toString();
}
@Override
@InvokeLog(value = "webservice[OperatingIndexService.getStatus]", printArgs = true)
public String getStatus() {
StringBuilder sb = new StringBuilder();
sb.append(1);
return sb.toString();
}
}
WebServiceXmlUtil
public class WebServiceXmlUtil {
/**
* 抽取包头,抽取出requestXml中的corporationCode、time、api,映射到RequestXmlHeader对象并返回
* xml格式:
* <info>
* <!--传入的地域代码可以为一个或多个-->
* <corporationCode>地域代码</CorporationCode>
* <!--传入的指标名称可以为一个或多个-->
* <time>时间值</Time>
* <api name="指标名称"></api>
* </info>
*
* @param requestXml
* @return
*/
public static RequestXmlHeader xml2Bean(String requestXml) {
Document doc = null;
try {
doc = DocumentHelper.parseText(requestXml);
//获取根节点
Element root = doc.getRootElement();
//获取根节点下的所有元素
List<Element> children = root.elements();
if (CollectionUtils.isEmpty(children)) {
throw new CodeSourceException("0104");
}
RequestXmlHeader header = new RequestXmlHeader();
List<OperatingIndexBean> list = new ArrayList<OperatingIndexBean>();
for (Element element : children) {
OperatingIndexBean operatingIndexBean = new OperatingIndexBean();
String name = element.getName();
if (name.equals("CorporationCode")) {
header.setCorporationCode(element.getTextTrim());
} else if (name.equals("Time")) {
header.setTime(element.getTextTrim());
} else if (name.equals("api")) {
Attribute attr = element.attribute("name");
operatingIndexBean.setName(attr.getValue());
list.add(operatingIndexBean);
}
}
header.setApi(list);
return header;
} catch (Exception e) {
throw new CodeSourceException("0104", e);
}
}
}