package com.norteksoft.task.webservice;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.norteksoft.acs.service.organization.UserManager;
import com.norteksoft.product.util.SystemUrls;
import com.norteksoft.task.entity.Task;
import com.norteksoft.task.service.TaskManager;
//@WebService(endpointInterface = "com.norteksoft.task.webservice.TaskWebservice")
@Service
@Transactional
public class TaskWebserviceImpl implements TaskWebservice{
private TaskManager taskManager;
private UserManager userManager;
public final static String TASK_SYSTEM_CODE = "task";
public final static String TASK_INPUT_URL = "/task/task!input.htm?id=";
@Autowired
public void setTaskManager(TaskManager taskManager) {
this.taskManager = taskManager;
}
@Autowired
public void setUserManager(UserManager userManager) {
this.userManager = userManager;
}
public String personalTasks(List<String> prmtNames, List<String> prmtValues) {
Map<String, String> prmts = processParameter(prmtNames, prmtValues);
String loginName = prmts.get("loginName");
Long companyId = Long.valueOf(prmts.get("companyId"));
return personalTasks(loginName, companyId, 5,"createdTime");
}
public String personalTasks(String loginName, Long companyId, Integer size, String order) {
return getTaskTable(loginName,companyId,size,order,null);
}
public String detailTasks(String loginName, Long companyId, Integer size, String order, String typeName) {
return getTaskTable(loginName,companyId,size,order,typeName);
}
private String getTaskTable(String loginName, Long companyId, Integer size, String order, String typeName){
List<Task> tasks = null;
if(StringUtils.isNotEmpty(typeName)){
tasks = taskManager.getDetailTasksByUserType(companyId,loginName,typeName,size,order);
}else{
tasks = taskManager.getPersonalTasks(loginName, companyId, size,order);
}
processTaskCreator(tasks);
List<String> headNames = new ArrayList<String>();
headNames.add("任务名称");
headNames.add("创建时间");
headNames.add("发起人");
List<String> propNames = new ArrayList<String>();
propNames.add("title");
propNames.add("createdTime");
propNames.add("creator");
return generatTable(headNames, tasks, propNames);
}
private void processTaskCreator(List<Task> tasks) {
for(Task task : tasks){
Object o = userManager.getUserByLoginName(task.getCreator());
if(o != null){
task.setCreator(getBeanProp(o, "name"));
}
}
}
private Map<String, String> processParameter(List<String> prmtNames, List<String> prmtValues){
Map<String, String> map = new HashMap<String, String>();
for(int i = 0; i < prmtNames.size(); i++){
map.put(prmtNames.get(i), prmtValues.get(i));
}
return map;
}
private String generatTable(List<String> headNames, List<? extends Object> objs, List<String> propNames){
Document doc = DocumentHelper.createDocument();
Element root = doc.addElement("TABLE");
root.addAttribute("class", "leadTable");
generatTHead(root, headNames);
generatTBody(root, objs, propNames);
return root.asXML();
}
/*
* 生成表头
*/
private void generatTHead(Element root, List<String> headNames){
Element thead = root.addElement("THEAD");
Element tr = thead.addElement("TR");
Element td = null;
for(String headName : headNames){
td = tr.addElement("TH");
td.setText(headName);
if(!"任务名称".equals(headName)){
td.addAttribute("style", "width: 15%;");
}
}
}
/*
* 生成表体
*/
private void generatTBody(Element root, List<? extends Object> values, List<String> props){
Element tbody = root.addElement("TBODY");
if(CollectionUtils.isEmpty(values) || CollectionUtils.isEmpty(props))
return;
Element tr = null;
Element tagA = null;
for(Object bean : values){
tr = tbody.addElement("TR");
for(String prop : props){
if("createdTime".equals(prop)){
tr.addElement("TD").setText(getDataProp(bean, prop));
}else if("creator".equals(prop)){
tr.addElement("TD").setText(getBeanProp(bean, prop));
}else if("title".equals(prop)){
String taskActionInputUrl;
try {
taskActionInputUrl = getSystemUrl(TASK_SYSTEM_CODE);
Task task = taskManager.getTaskById(Long.valueOf(getBeanProp(bean, "id")));
if(!task.getRead()){
tagA = tr.addElement("TD").addElement("A")
.addAttribute("href", "#")
.addAttribute("onclick", "popWindow(this,'"+taskActionInputUrl
+getBeanProp(bean, "id")
+"', 'task');")
.addAttribute("style", "font-weight:bold;");
}else{
tagA = tr.addElement("TD").addElement("A")
.addAttribute("href", "#")
.addAttribute("onclick", "popWindow(this,'"+taskActionInputUrl
+getBeanProp(bean, "id")
+"', 'task');");
}
tagA.setText(getBeanProp(bean, prop));
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}
private String getSystemUrl(String key) throws Exception{
String url = SystemUrls.getSystemUrl(key);
url += TASK_INPUT_URL;
return url;
}
private String getDataProp(Object bean, String propName){
String value = null;
try {
value = BeanUtils.getProperty(bean, propName);
} catch (Exception e) {
throw new RuntimeException(e.getMessage());
}
if(value != null && value.length() >= 19){
value = value.substring(0, 10);
}
return value == null? "" : value;
}
/*
* 根据属性名从对象中取属性值
*/
private String getBeanProp(Object bean, String propName){
String value = null;
try {
value = BeanUtils.getProperty(bean, propName);
} catch (Exception e) {
throw new RuntimeException(e.getMessage());
}
return value == null? "" : value;
}
}