package com.ycsoft.business.component.task; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; import org.springframework.stereotype.Component; import com.ycsoft.beans.core.user.CUser; import com.ycsoft.beans.system.SDept; import com.ycsoft.beans.system.SOptr; import com.ycsoft.beans.task.TTaskDetailType; import com.ycsoft.beans.task.WCustInfo; import com.ycsoft.beans.task.WPrint; import com.ycsoft.beans.task.WTaskBaseInfo; import com.ycsoft.beans.task.WTaskServ; import com.ycsoft.beans.task.WWork; import com.ycsoft.business.cache.PrintContentConfiguration; import com.ycsoft.business.commons.abstracts.BaseBusiComponent; import com.ycsoft.business.dao.config.TTemplateDao; import com.ycsoft.business.dao.task.TTaskDetailTypeDao; import com.ycsoft.business.dao.task.TTaskTemplatefileDao; import com.ycsoft.business.dao.task.WCustInfoDao; import com.ycsoft.business.dao.task.WLogDao; import com.ycsoft.business.dao.task.WPrintDao; import com.ycsoft.business.dao.task.WTaskBaseInfoDao; import com.ycsoft.business.dao.task.WTaskServDao; import com.ycsoft.business.dao.task.WWorkDao; import com.ycsoft.business.dto.config.TaskDetailTypeDto; import com.ycsoft.business.dto.config.TaskQueryWorkDto; import com.ycsoft.business.dto.config.TaskWorkDto; import com.ycsoft.business.dto.core.cust.CustFullInfoDto; import com.ycsoft.business.dto.core.cust.QueryTaskConditionDto; import com.ycsoft.business.dto.core.cust.QueryTaskResultDto; import com.ycsoft.commons.constants.DataRight; import com.ycsoft.commons.constants.SequenceConstants; import com.ycsoft.commons.constants.StatusConstants; import com.ycsoft.commons.constants.SystemConstants; import com.ycsoft.commons.helper.CollectionHelper; import com.ycsoft.commons.helper.StringHelper; import com.ycsoft.commons.store.TemplateConfig; import com.ycsoft.daos.core.Pager; /** * 工单类型业务组件封装类 * * @author hh * @date Mar 4, 2010 4:39:08 PM */ @Component public class TaskComponent extends BaseBusiComponent { private TTaskDetailTypeDao tTaskDetailTypeDao; private WTaskBaseInfoDao wTaskBaseInfoDao; private WWorkDao wWorkDao; private WCustInfoDao wCustInfoDao; private WPrintDao wPrintDao; private WTaskServDao wTaskServDao; private TTaskTemplatefileDao tTaskTemplatefileDao; private TTemplateDao tTemplateDao; /** * 当前地区的工单类型 * @return * @throws Exception */ public List<TaskDetailTypeDto> queryTaskTypes()throws Exception{ return tTaskDetailTypeDao.getTaskTypes(getOptr().getCounty_id()); } /** * 获取业务代码对应的工单类型 * @param busiCode 业务代码 * @return * @throws Exception */ public List<TTaskDetailType> queryTaskTypes(String busiCode)throws Exception{ return tTaskDetailTypeDao.getTaskTypes(busiCode,getOptr().getCounty_id()); } /** * 生成taskid * @return * @throws Exception */ public String gTaskId()throws Exception{ return wWorkDao.findSequence(SequenceConstants.SEQ_TASK).toString(); } /** * 创建业务工单 * @param taskIds 业务需要生成的工单数组 * @param doneCode 流水号 * @param cua 完整客户信息 * @param newAddr 客户新地址,只有客户地址发生变动的业务需要传递 * @throws Exception */ public void createTask(String[] taskIds,Integer doneCode,CustFullInfoDto cust,List<CUser> users,String newAddr) throws Exception{ if (taskIds != null && taskIds.length>0){ WTaskBaseInfo[] tasks = new WTaskBaseInfo[taskIds.length]; WTaskBaseInfo tTask = null ; for(int i = 0; i< taskIds.length ; i++){ tTask = new WTaskBaseInfo(); tTask.setTask_id(gTaskId()); tTask.setTask_detail_type_id( taskIds[i] ); tTask.setCust_id(cust.getCust().getCust_id()); tTask.setDone_code(doneCode); //设置工单对应的用户数,如果用户信息为空,则设置用户数为1 // if (users != null && users.size()>0) // tTask.setUser_count(users.size()); // else // tTask.setUser_count(1); tTask.setCust_name(cust.getCust().getCust_name()); //设置工单的施工地址 if (StringHelper.isNotEmpty(newAddr)){ tTask.setNew_addr(newAddr); tTask.setOld_addr(cust.getCust().getAddress()); } else { tTask.setNew_addr(cust.getCust().getAddress()); } tTask.setMobile(cust.getLinkman().getMobile()); tTask.setTel(cust.getLinkman().getTel()); //setUserType( users , tTask ); //设置地区县市信息 tTask.setCounty_id(cust.getCust().getCounty_id()); tTask.setArea_id(cust.getCust().getArea_id()); tasks[i] = tTask; } wTaskBaseInfoDao.save(tasks); } } /** * 新建工单(系统,手工生成) * @param taskIds * @param doneCode * @param cust * @param users * @param newAddr * @param booksTime * @param taskCustName * @param mobile * @param bugCause * @param remark * @param optr * @throws Exception */ public void createTask(String[] taskIds,Integer doneCode,CustFullInfoDto cust,List<CUser> users,String newAddr, String booksTime, String taskCustName, String mobile, String bugCause,String remark,SOptr optr) throws Exception{ if (taskIds != null && taskIds.length>0){ WWork[] tasks = new WWork[taskIds.length]; List<WCustInfo> wCustList = new ArrayList<WCustInfo>(); List<WTaskServ> wTaskServs = new ArrayList<WTaskServ>(); WWork tTask = null ; List<SDept> list = wWorkDao.queryInstallerDeptById(cust.getCust().getAddr_id()); Map<String, TTaskDetailType> tasktypesmap = CollectionHelper.converToMapSingle(tTaskDetailTypeDao.querytask(), "detail_type_id"); for(int i = 0; i< taskIds.length ; i++){ //记录工单 tTask = new WWork(); String[] taskInfo = taskIds[i].split("#"); String workId = gTaskId(); tTask.setWork_id(workId); tTask.setTask_type(taskInfo[0] ); //设置故障单 if(bugCause != null && !"".equals(bugCause)){ tTask.setBug_cause(bugCause); }else{ tTask.setBug_cause(tasktypesmap.get(tTask.getTask_type()).getBug_cause()); } tTask.setCreate_type("MANUAL"); tTask.setBooks_optr(optr.getOptr_id()); if(StringHelper.isNotEmpty(booksTime)) tTask.setBooks_time(booksTime); tTask.setCreate_done_code(""+doneCode); tTask.setRemark(remark); tTask.setTask_status(StatusConstants.TASK_CREATE); tTask.setCounty_id(cust.getCust().getCounty_id()); if(list.size() == 1){ tTask.setAssign_dept(list.get(0).getDept_id()); tTask.setAssign_time(new Date()); } tasks[i] = tTask; for(int j=1 ; j < taskInfo.length ;j ++){ wTaskServs.add(new WTaskServ(tTask.getWork_id(), taskInfo[j])); } //记录工单客户信息 WCustInfo info = new WCustInfo(); info.setCust_id(cust.getCust().getCust_id()); info.setTask_cust_name(taskCustName); //施工地址 if (StringHelper.isNotEmpty(newAddr)){ info.setInstall_addr(newAddr); info.setOld_addr(cust.getCust().getAddress()); }else{ info.setInstall_addr(cust.getCust().getAddress()); } //联系方式 if(StringHelper.isNotEmpty(mobile)){ info.setTel(mobile); }else{ if(StringHelper.isNotEmpty(cust.getLinkman().getMobile())){ info.setTel(cust.getLinkman().getMobile()); }else{ info.setTel(cust.getLinkman().getTel()); } } if (users.size()==1) info.setUser_id(users.get(0).getUser_id()); info.setWork_id(workId); wCustList.add(info); } //记录工单操作记录 //saveWorkLog(SystemConstants.WORK_CREATE,tTask.getWork_id().split(","),getOptr(),null); wTaskServDao.save(wTaskServs.toArray(new WTaskServ[wTaskServs.size()])); //记录工单客户信息 wCustInfoDao.save(wCustList.toArray(new WCustInfo[wCustList.size()])); //记录工单基础信息 wWorkDao.save(tasks); } } /** * 查询打印内容 * @return * @throws Exception */ public String queryPrintContent(String taskDetailType)throws Exception{ String id = tTemplateDao.getTemplateId(getOptr().getCounty_id(), TemplateConfig.Template.TASK.toString()); String fileName = tTaskTemplatefileDao.findPrintXml(taskDetailType, id); //获取打印内容 String content = PrintContentConfiguration.getTemplate(fileName); if(null == content){ throw new IllegalArgumentException("[" + fileName + "]文件不存在"); } return content; } /** * 查询工单基础信息 * @param taskId * @return * @throws Exception */ public TaskQueryWorkDto queryTaskByTaskId(String taskId) throws Exception { TaskQueryWorkDto workDto = new TaskQueryWorkDto(); workDto = wWorkDao.queryBillTaskByTaskId(taskId); //查询服务类型 workDto.setTaskServList(wTaskServDao.queryTaskServByTaskId(taskId)); return workDto; } /** * 记录工单打印时间 * @param taskList * @throws Exception */ public void saveTaskPrintTime(List<WPrint> taskList) throws Exception { wPrintDao.save(taskList.toArray(new WPrint[taskList.size()])); } /** * 更新工单状态 * @param wList * @throws Exception */ public void updateWork(List<WWork> wList) throws Exception { wWorkDao.update(wList.toArray(new WWork[wList.size()])); String[] workIds = CollectionHelper.converValueToArray(wList, "work_id"); //记录工单操作 String info = "工单打印:"+StatusConstants.TASK_CREATE+"->"+StatusConstants.TASK_INIT; //saveWorkLog(SystemConstants.WORK_CANCEL,workIds,getOptr(),info); } /** * 作废工单 * @param doneCode * @throws Exception */ public void cancelTaskByDoneCode(Integer doneCode) throws Exception{ List<WWork> list = wWorkDao.queryWorkByDoneCode(doneCode); String[] workIds = CollectionHelper.converValueToArray(list, "work_id"); wWorkDao.cancelTaskByDoneCode(doneCode); //记录工单操作 String info = "业务冲正,流水号:"+doneCode; //saveWorkLog(SystemConstants.WORK_CANCEL,workIds,getOptr(),info); } /** * 查询客户的工单 * @param custId * @return */ public List<TaskQueryWorkDto> queryTaskByCustId(String custId) throws Exception { return wWorkDao.queryTaskByCustId(custId,getOptr().getCounty_id()); } public List<TaskWorkDto> queryTaskType() throws Exception{ return wWorkDao.getTaskTypes(getOptr().getCounty_id()); } public Pager<QueryTaskResultDto> queryTasks(QueryTaskConditionDto cond)throws Exception{ String dataRight = this.queryDataRightCon(); return wWorkDao.queryTasks(cond,dataRight, getOptr().getCounty_id()); } private String queryDataRightCon() { String dataRight = ""; try { dataRight = this.queryDataRightCon(getOptr(),DataRight.QUERY_CUST.toString()); } catch (Exception e) { dataRight=SystemConstants.DEFAULT_DATA_RIGHT; } if(!SystemConstants.DEFAULT_DATA_RIGHT.equals(dataRight)){ dataRight = "t."+dataRight.trim(); } return dataRight; } /** * @param task_ids */ public void cancelTask(String[] task_ids,String cancelRemark)throws Exception { wWorkDao.cancelTask(task_ids, StatusConstants.TASK_CANCEL,cancelRemark); } /** * @param task_ids */ public void assignTask(String[] task_ids)throws Exception { wWorkDao.assignTask(task_ids, StatusConstants.TASK_INIT); } public void setTTaskDetailTypeDao(TTaskDetailTypeDao taskDetailTypeDao) { tTaskDetailTypeDao = taskDetailTypeDao; } public void setWTaskBaseInfoDao(WTaskBaseInfoDao taskBaseInfoDao) { wTaskBaseInfoDao = taskBaseInfoDao; } public void setWWorkDao(WWorkDao workDao) { wWorkDao = workDao; } public void setWCustInfoDao(WCustInfoDao custInfoDao) { wCustInfoDao = custInfoDao; } public void setWLogDao(WLogDao logDao) { wLogDao = logDao; } public void setTTaskTemplatefileDao(TTaskTemplatefileDao taskTemplatefileDao) { tTaskTemplatefileDao = taskTemplatefileDao; } public void setTTemplateDao(TTemplateDao templateDao) { tTemplateDao = templateDao; } public void setWPrintDao(WPrintDao printDao) { wPrintDao = printDao; } public void setWTaskServDao(WTaskServDao taskServDao) { wTaskServDao = taskServDao; } /** * @param taskId * @param success * @param failureCause * @param finishTime */ public void saveTaskFinish(String taskId, int success, String failureCause, Date finishTime) throws Exception{ WTaskBaseInfo task = new WTaskBaseInfo(); task.setTask_id(taskId); task.setTask_finish_time(finishTime); task.setTask_finish_type(String.valueOf(success)); task.setRemark(failureCause); wTaskBaseInfoDao.save(task); wWorkDao.updateStatus(new String[]{taskId}, "COMPLETE"); } /** * @param task_id * @param booksTime * @param taskCustName * @param tel * @param remark */ public void updateTask(String task_id, String booksTime, String taskCustName, String tel, String remark,String bugCause) throws Exception{ wWorkDao.updateTask(task_id,booksTime,remark,bugCause); wCustInfoDao.updateTask(task_id,taskCustName,tel); } /** * 查询工单类型,canAddManual =T 手工添加工单进行过滤 * @param booleanTrue * @return */ public List<TTaskDetailType> getTaskType(String canAddManual) throws Exception{ return tTaskDetailTypeDao.getTaskType(canAddManual); } }