package com.cabletech.business.webservice.service.impl; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; 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.base.DateUtil; import com.cabletech.baseinfo.business.Service.BaseInfoProvider; import com.cabletech.baseinfo.business.entity.UserInfo; 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.model.WorkOrder; import com.cabletech.business.workflow.workorder.model.WorkOrderRefuseConfirm; import com.cabletech.business.workflow.workorder.model.WorkOrderReply; import com.cabletech.business.workflow.workorder.model.WorkOrderReplyCheck; import com.cabletech.business.workflow.workorder.model.WorkOrderSignFor; import com.cabletech.business.workflow.workorder.model.WorkOrderTransfer; import com.cabletech.business.workflow.workorder.service.WorkOrderDispatchService; import com.cabletech.business.workflow.workorder.service.WorkOrderHandledService; import com.cabletech.business.workflow.workorder.service.WorkOrderRefuseConfirmService; import com.cabletech.business.workflow.workorder.service.WorkOrderReplyCheckService; import com.cabletech.business.workflow.workorder.service.WorkOrderReplyService; import com.cabletech.business.workflow.workorder.service.WorkOrderSignForService; import com.cabletech.business.workflow.workorder.service.WorkOrderTransferService; import com.cabletech.business.workflow.workorder.service.WorkOrderWaitHandledService; import com.cabletech.common.base.SysConstant; 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 WorkOrderWebServiceImpl implements BusinessService { /** * 日志输出 */ private Logger logger = Logger.getLogger("WorkOrderWebServiceImpl"); /** * 用户信息服务 */ @Resource(name = "userInfoServiceImpl") private UserInfoService userInfoService; /** * 工单待办服务 */ @Resource(name = "workOrderWaitHandledServiceImpl") private WorkOrderWaitHandledService workOrderWaitHandledService; /** * 工单已办服务 */ @Resource(name = "workOrderHandledServiceImpl") private WorkOrderHandledService workOrderHandledService; /** * 工单信息服务 */ @Resource(name = "workOrderDispatchServiceImpl") private WorkOrderDispatchService workOrderDispatchService; /** * 通用工单分发信息服务 */ @Resource(name = "workOrderTransferServiceImpl") private WorkOrderTransferService workOrderTransferService; /** * 工单签收信息服务 */ @Resource(name = "workOrderSignForServiceImpl") private WorkOrderSignForService workOrderSignForService; /** * 工单拒签确认信息服务 */ @Resource(name = "workOrderRefuseConfirmServiceImpl") private WorkOrderRefuseConfirmService workOrderRefuseConfirmService; /** * 工单回复信息服务 */ @Resource(name = "workOrderReplyServiceImpl") private WorkOrderReplyService workOrderReplyService; /** * 工单回单验证信息服务 */ @Resource(name = "workOrderReplyCheckServiceImpl") private WorkOrderReplyCheckService workOrderReplyCheckService; /** * 基础业务服务 */ @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> */ @SuppressWarnings({ "rawtypes", "unchecked" }) public Map<String, Object> getWaitHandledTaskList(Map<String, Object> map, List<Element> props) { if (CollectionUtils.isEmpty(props)) { return null; } String[] parameters = getInputParameters(map, props); UserInfo user = userInfoService.getUserInfoByUserId(parameters[0]); Page page = new Page(); page.setPageNo(Integer.parseInt(parameters[1])); page.setPageSize(Integer.parseInt(parameters[2])); WorkOrder workOrder = new WorkOrder(); workOrder.setLoginUser(user); workOrder.setPage(page); page = workOrderWaitHandledService.getWaitHandledList(workOrder); List<Map<String, Object>> result = processPage(page.getResult()); if (CollectionUtils.isNotEmpty(result)) { page.setResult(result); } Map<String, Object> valueMap = new HashMap<String, Object>(); if (page.getTotalCount() == 0) { valueMap.put("code", ExternalWebService.NO_WAIT_HANDLED_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 Map<String, Object> */ @SuppressWarnings({ "rawtypes", "unchecked" }) public Map<String, Object> getHandledTaskList(Map<String, Object> map, List<Element> props) { if (CollectionUtils.isEmpty(props)) { return null; } String[] parameters = getInputParameters(map, props); UserInfo user = userInfoService.getUserInfoByUserId(parameters[0]); Page page = new Page(); page.setPageNo(Integer.parseInt(parameters[1])); page.setPageSize(Integer.parseInt(parameters[2])); WorkOrder workOrder = new WorkOrder(); workOrder.setLoginUser(user); workOrder.setPage(page); page = workOrderHandledService.getHandledList(workOrder); List<Map<String, Object>> result = processPage(page.getResult()); if (CollectionUtils.isNotEmpty(result)) { page.setResult(result); } Map<String, Object> valueMap = new HashMap<String, Object>(); 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 Map<String, Object> */ public Map<String, Object> getOneTaskInfo(Map<String, Object> map, List<Element> props) { if (CollectionUtils.isEmpty(props)) { return null; } String[] parameters = getInputParameters(map, props); Map<String, Object> valueMap = new HashMap<String, Object>(); if (StringUtils.isBlank(parameters[1])) { valueMap.put("code", ExternalWebService.PARAMETER_ERROR_CODE); return valueMap; } valueMap.put("code", ExternalWebService.SUCCESS_CODE); valueMap.put("id", parameters[1]); valueMap.put("pid", parameters[2]); valueMap.put("step", parameters[4]); String id = parameters[1]; String pid = parameters[2]; WorkOrder workOrder = workOrderDispatchService.view(id); WorkOrderTransfer workOrderTransfer = workOrderTransferService .view(pid); SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); valueMap.put("proinstState", WorkOrder.getTaskStateName(workOrderTransfer.getTaskState())); valueMap.put("taskCode", workOrder.getTaskCode()); valueMap.put("taskName", workOrder.getTaskName()); String taskType = workOrder.getTaskType(); taskType = (String) baseInfoProvider.getDicService() .getDicMap("TASK_CODE", taskType).get("LABLE"); valueMap.put("taskTypeDis", taskType); String creator = workOrder.getCreater(); creator = userInfoService.getUserInfoByPersonId(creator).getUserName(); valueMap.put("createrName", creator); valueMap.put("createDateDis", df.format(workOrder.getCreateDate())); valueMap.put("taskDate", df.format(workOrder.getOvertimeSet())); valueMap.put("taskDetail", workOrder.getTaskRequest()); return valueMap; } /** * 执行工单的签收 * * @param map * Map<String, Object> * @param props * List<Element> * @return Map<String, Object> */ public Map<String, Object> signinTask(Map<String, Object> map, List<Element> props) { if (CollectionUtils.isEmpty(props)) { return null; } String[] parameters = getInputParameters(map, props); UserInfo user = userInfoService.getUserInfoByUserId(parameters[0]); Map<String, Object> valueMap = new HashMap<String, Object>(); if (user == null) { valueMap.put("code", ExternalWebService.NO_USER_ERROR_CODE); return valueMap; } WorkOrderSignFor workorderSignFor = new WorkOrderSignFor(); workorderSignFor.setSignForRemark(parameters[7]); workorderSignFor.setPatrolGroupId(parameters[5]); workorderSignFor.setSignForResult(parameters[6]); workorderSignFor.setSignForUserId(user.getPersonId()); workorderSignFor.setTaskId(parameters[1]); workorderSignFor.setWorkflowBzId(parameters[2]); workorderSignFor.setWorkflowTaskId(parameters[3]); workOrderSignForService.save(workorderSignFor); valueMap.put("code", ExternalWebService.SUCCESS_CODE); return valueMap; } /** * 执行工单的回复 * * @param map * Map<String, Object> * @param props * List<Element> * @return Map<String, Object> */ public Map<String, Object> replyTask(Map<String, Object> map, List<Element> props) { if (CollectionUtils.isEmpty(props)) { return null; } String[] parameters = getInputParameters(map, props); UserInfo user = userInfoService.getUserInfoByUserId(parameters[0]); Map<String, Object> valueMap = new HashMap<String, Object>(); if (user == null) { valueMap.put("code", ExternalWebService.NO_USER_ERROR_CODE); return valueMap; } WorkOrder workOrder = workOrderDispatchService.view(parameters[1]); WorkOrderReply workOrderReply = new WorkOrderReply(); workOrderReply.setCreateDate(new Date()); workOrderReply.setCreater(user.getPersonId()); workOrderReply.setIsSubmited(parameters[5]); workOrderReply.setRemark(parameters[6]); workOrderReply.setReplyCheckUserId(workOrder.getCreater()); workOrderReply.setTaskId(parameters[1]); workOrderReply.setTransferId(parameters[2]); workOrderReply.setWorkflowTaskId(parameters[3]); workOrderReplyService.save(workOrderReply); valueMap.put("code", ExternalWebService.SUCCESS_CODE); valueMap.put("data", workOrderReply.getId()); return valueMap; } /** * 执行工单的转派 * * @param map * Map<String, Object> * @param props * List<Element> * @return Map<String, Object> */ public Map<String, Object> transferTask(Map<String, Object> map, List<Element> props) { if (CollectionUtils.isEmpty(props)) { return null; } String[] parameters = getInputParameters(map, props); UserInfo user = userInfoService.getUserInfoByUserId(parameters[0]); Map<String, Object> valueMap = new HashMap<String, Object>(); if (user == null) { valueMap.put("code", ExternalWebService.NO_USER_ERROR_CODE); return valueMap; } WorkOrder workOrder = workOrderDispatchService.view(parameters[1]); workOrder.setCreateDate(new Date()); workOrder.setCreater(user.getPersonId()); workOrder.setAcceptUserIds(parameters[3]); workOrder.setTaskType(parameters[4]); workOrder.setOvertimeSet(DateUtil.Str2UtilDate(parameters[5], "yyyy-MM-dd HH:mm:ss")); workOrder.setTaskRequest(parameters[6]); workOrder.setTaskName(parameters[7]); workOrder.setParentId(parameters[1]); workOrder.setIsSubmited(SysConstant.FORM_IS_SUBMITED); workOrderDispatchService.save(workOrder); valueMap.put("code", ExternalWebService.SUCCESS_CODE); return valueMap; } /** * 执行工单的拒签确认 * * @param map * Map<String, Object> * @param props * List<Element> * @return Map<String, Object> */ public Map<String, Object> refuseConfirmTask(Map<String, Object> map, List<Element> props) { if (CollectionUtils.isEmpty(props)) { return null; } String[] parameters = getInputParameters(map, props); UserInfo user = userInfoService.getUserInfoByUserId(parameters[0]); Map<String, Object> valueMap = new HashMap<String, Object>(); if (user == null) { valueMap.put("code", ExternalWebService.NO_USER_ERROR_CODE); return valueMap; } WorkOrderRefuseConfirm workOrderRefuseConfirm = new WorkOrderRefuseConfirm(); workOrderRefuseConfirm.setRefuseConfirmRemark(parameters[6]); workOrderRefuseConfirm.setRefuseConfirmResult(parameters[5]); workOrderRefuseConfirm.setRefuseConfirmUserId(user.getPersonId()); workOrderRefuseConfirm.setTaskId(parameters[1]); workOrderRefuseConfirm.setTransferApprover(parameters[7]); workOrderRefuseConfirm.setWorkflowBzId(parameters[2]); workOrderRefuseConfirm.setWorkflowTaskId(parameters[3]); workOrderRefuseConfirmService.save(workOrderRefuseConfirm); valueMap.put("code", ExternalWebService.SUCCESS_CODE); return valueMap; } /** * 执行工单的回单验证 * * @param map * Map<String, Object> * @param props * List<Element> * @return Map<String, Object> */ public Map<String, Object> checkTask(Map<String, Object> map, List<Element> props) { if (CollectionUtils.isEmpty(props)) { return null; } String[] parameters = getInputParameters(map, props); UserInfo user = userInfoService.getUserInfoByUserId(parameters[0]); Map<String, Object> valueMap = new HashMap<String, Object>(); if (user == null) { valueMap.put("code", ExternalWebService.NO_USER_ERROR_CODE); return valueMap; } WorkOrderReplyCheck workOrderReplyCheck = new WorkOrderReplyCheck(); workOrderReplyCheck.setCheckRemark(parameters[6]); workOrderReplyCheck.setCheckResult(parameters[5]); workOrderReplyCheck.setCheckUserId(user.getPersonId()); workOrderReplyCheck.setTaskId(parameters[1]); workOrderReplyCheck.setTransferApprover(parameters[7]); workOrderReplyCheck.setWorkflowBzId(parameters[2]); workOrderReplyCheck.setWorkflowTaskId(parameters[3]); workOrderReplyCheckService.save(workOrderReplyCheck); valueMap.put("code", ExternalWebService.SUCCESS_CODE); return valueMap; } /** * 获取工单类型列表 * * @param map * Map<String, Object> * @param props * List<Element> * @return Map<String, Object> */ public Map<String, Object> getTaskTypeList(Map<String, Object> map, List<Element> props) { if (CollectionUtils.isEmpty(props)) { return null; } Map<String, Object> valueMap = new HashMap<String, Object>(); List<Map<String, Object>> list = baseInfoProvider.getDicService() .getDicList("dispatch_task"); list = processPage(list); if (CollectionUtils.isEmpty(list)) { valueMap.put("code", ExternalWebService.NO_DATA_LIST_CODE); } else { valueMap.put("code", ExternalWebService.SUCCESS_CODE); valueMap.put("value", list); } valueMap.put("total", list.size()); return valueMap; } /** * 根据不同命令获取不同的调用方法名称 * * @param cmd * String * @return String */ private String getMethodName(String cmd) { Map<String, String> map = new HashMap<String, String>(); map.put("wlbtasklist", "getWaitHandledTaskList"); map.put("wlbhandledtasklist", "getHandledTaskList"); map.put("wlbtasktypelist", "getTaskTypeList"); map.put("wlbtaskdetail", "getOneTaskInfo"); map.put("wlbtaskdealsign", "signinTask"); map.put("wlbtaskdealrequest", "replyTask"); map.put("wlbtaskdealsend", "transferTask"); map.put("wlbtaskdealrefuse", "refuseConfirmTask"); map.put("wlbtaskdealcheck", "checkTask"); return map.get(cmd); } /** * 获取输入的参数信息 * * @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; } }