package com.cabletech.business.webservice.service.impl;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.annotation.Resource;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.WordUtils;
import org.apache.log4j.Logger;
import org.dom4j.Element;
import org.springframework.stereotype.Component;
import com.cabletech.baseinfo.business.Service.BaseInfoProvider;
import com.cabletech.baseinfo.business.entity.UserInfo;
import com.cabletech.business.base.service.PatrolGroupService;
import com.cabletech.business.base.service.UserInfoService;
import com.cabletech.business.webservice.interfaces.ExternalWebService;
import com.cabletech.business.webservice.service.BusinessService;
import com.cabletech.business.workflow.workorder.service.WorkOrderWorkflowWaitHandledService;
import com.cabletech.common.util.Page;
import com.cabletech.common.util.ReflectionUtils;
import com.cabletech.common.xmlparse.ParseXmlTools;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
/**
* 业务处理方法接口(用户登录服务)
*
* @author 杨隽 2012-08-16 创建
*
*/
@Component
public class UserWebServiceImpl implements BusinessService {
/**
* 日志输出
*/
private Logger logger = Logger.getLogger("UserWebServiceImpl");
/**
* 工单待办服务
*/
@Resource(name = "workOrderWorkflowWaitHandledService")
private WorkOrderWorkflowWaitHandledService workflowService;
/**
* 用户信息服务
*/
@Resource(name = "userInfoServiceImpl")
private UserInfoService userInfoService;
/**
* 巡检组信息服务
*/
@Resource(name = "patrolGroupServiceImpl")
private PatrolGroupService patrolGroupService;
/**
* 基础业务服务
*/
@Resource(name = "baseInfoProvider")
private BaseInfoProvider baseInfoProvider;
@SuppressWarnings("unchecked")
@Override
public String doBusiness(String cmd, Map<String, Object> parameter,
List<Element> props) {
String methodName = getMethodName(cmd);
Map<String, Object> valueMap = new HashMap<String, Object>();
if (StringUtils.isNotBlank(methodName)) {
try {
valueMap = (Map<String, Object>) ReflectionUtils.invokeMethod(
this, methodName,
new Class[] { Map.class, List.class }, new Object[] {
parameter, props });
} catch (Exception ex) {
logger.error("接口异常:", ex);
valueMap.put("code", ExternalWebService.EXCEPTION_CODE);
}
} else {
valueMap.put("code", ExternalWebService.NO_CMD_ERROR_CODE);
}
valueMap.put("cmd", cmd);
String datafomat = "yyyy-MM-dd HH:mm:ss";
Gson gson = new GsonBuilder().setDateFormat(datafomat).create();
String value = gson.toJson(valueMap);
logger.info(cmd + "::" + value);
return value;
}
/**
* 获取登录用户信息
*
* @param map
* Map<String,Object>
* @param props
* List<Element>
* @return Map<String,Object>
*/
public Map<String, Object> getLoginUserInfo(Map<String, Object> map,
List<Element> props) {
if (CollectionUtils.isEmpty(props)) {
return null;
}
Map<String, Object> valueMap = new HashMap<String, Object>();
String[] parameters = getInputParameters(map, props);
UserInfo user = baseInfoProvider.getLoginUserService()
.getUserInfoByUserId(parameters[0]);
if (user == null) {
valueMap.put("code", ExternalWebService.NO_USER_ERROR_CODE);
return valueMap;
}
if (!user.getPassword().equals(parameters[1])) {
valueMap.put("code", ExternalWebService.PASSWORD_ERROR_CODE);
return valueMap;
}
if (CollectionUtils.isEmpty(user.getRoles())) {
valueMap.put("code", ExternalWebService.NO_POWER_ERROR_CODE);
return valueMap;
}
List<Map<String, Object>> businessTypeList = user.getBusinessTypes();
workflowService.setBusinessTypeList(businessTypeList);
List<Map<String, Object>> list = workflowService
.getOneWorkflowHandledTaskList(businessTypeList, user);
valueMap.put("code", ExternalWebService.SUCCESS_CODE);
valueMap.put("userName", user.getUserName());
valueMap.put("deptName", user.getOrgName());
valueMap.put("headshipName", user.getStation());
valueMap.put("value", processPage(user.getRoles()));
if (CollectionUtils.isEmpty(list)) {
valueMap.put("taskNum", "0");
} else {
valueMap.put("taskNum", Integer.toString(list.size()));
}
valueMap.put("total", user.getRoles().size());
return valueMap;
}
/**
* 获取用户信息列表
*
* @param map
* Map<String, Object>
* @param props
* List<Element>
* @return Map<String, Object>
*/
public Map<String, Object> getUserInfoList(Map<String, Object> map,
List<Element> props) {
if (CollectionUtils.isEmpty(props)) {
return null;
}
Map<String, Object> valueMap = getValueMap(map, props, "user");
return valueMap;
}
/**
* 获取巡检组信息列表
*
* @param map
* Map<String, Object>
* @param props
* List<Element>
* @return Map<String, Object>
*/
public Map<String, Object> getPatrolGroupInfoList(Map<String, Object> map,
List<Element> props) {
if (CollectionUtils.isEmpty(props)) {
return null;
}
Map<String, Object> valueMap = getValueMap(map, props, "patrolgroup");
return valueMap;
}
/**
* 根据不同命令获取不同的调用方法名称
*
* @param cmd
* String
* @return String
*/
private String getMethodName(String cmd) {
Map<String, String> map = new HashMap<String, String>();
map.put("wlblogin", "getLoginUserInfo");
map.put("wlbuserinfo", "getUserInfoList");
map.put("wlbpatrolGroupList", "getPatrolGroupInfoList");
return map.get(cmd);
}
/**
* 获取列表的返回Map
*
* @param map
* Map<String, Object>
* @param props
* List<Element>
* @param type
* String
* @return Map<String, Object>
*/
@SuppressWarnings({ "rawtypes", "unchecked" })
private Map<String, Object> getValueMap(Map<String, Object> map,
List<Element> props, String type) {
String[] parameters = getInputParameters(map, props);
Map<String, Object> valueMap = new HashMap<String, Object>();
if (parameters.length < 4) {
valueMap.put("code", ExternalWebService.PARAMETER_ERROR_CODE);
return valueMap;
}
UserInfo user = userInfoService.getUserInfoByUserId(parameters[0]);
Page page = new Page();
page.setPageNo(Integer.parseInt(parameters[1]));
page.setPageSize(Integer.parseInt(parameters[2]));
if ("user".equals(type)) {
userInfoService.getUserInfoList(parameters[3], user, page);
}
if ("patrolgroup".equals(type)) {
patrolGroupService.getPatrolGroupList(parameters[3], user, page);
}
List<Map<String, Object>> result = processPage(page.getResult());
if (CollectionUtils.isNotEmpty(result)) {
page.setResult(result);
}
if (page.getTotalCount() == 0) {
valueMap.put("code", ExternalWebService.NO_DATA_LIST_CODE);
} else {
valueMap.put("code", ExternalWebService.SUCCESS_CODE);
valueMap.put("value", page.getResult());
}
valueMap.put("total", page.getTotalCount());
valueMap.put("totalpage", page.getTotalPages());
return valueMap;
}
/**
* 获取输入的参数信息
*
* @param map
* Map<String, Object>
* @param props
* List<Element>
* @return String[]
*/
private String[] getInputParameters(Map<String, Object> map,
List<Element> props) {
String[] parameters = new String[props.size()];
for (int i = 0; i < props.size(); i++) {
Element e = props.get(i);
String key = e.attributeValue(ParseXmlTools.ID_ATTRBUTE_KEY);
parameters[i] = (String) map.get(key);
}
return parameters;
}
/**
* 处理页面列表数据
*
* @param list
* List<Map<String, Object>>
* @return List<Map<String, Object>>
*/
private List<Map<String, Object>> processPage(List<Map<String, Object>> list) {
if (CollectionUtils.isEmpty(list)) {
return null;
}
List<Map<String, Object>> result = new ArrayList<Map<String, Object>>();
for (int i = 0; i < list.size(); i++) {
Map<String, Object> valueMap = new HashMap<String, Object>();
Map<String, Object> map = list.get(i);
Set<String> keySet = map.keySet();
Iterator<String> it = keySet.iterator();
if (it == null) {
continue;
}
while (it.hasNext()) {
String key = it.next();
Object value = map.get(key);
key = key.toLowerCase();
char firstChar = key.charAt(0);
key = WordUtils.capitalize(key, new char[] { '_' });
key = firstChar + key.replaceAll("_", "").substring(1);
valueMap.put(key, value);
}
result.add(valueMap);
}
return result;
}
}