package com.cabletech.business.workflow.fault.service.impl; import java.util.Date; import javax.annotation.Resource; import org.apache.commons.lang.StringUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.cabletech.baseinfo.business.entity.UserInfo; import com.cabletech.business.base.model.SmParameter; import com.cabletech.business.flowservice.util.ProMockPo; import com.cabletech.business.workflow.fault.condition.parameter.FaultQueryParameter; import com.cabletech.business.workflow.fault.dao.FaultBaseDao; import com.cabletech.business.workflow.fault.model.FaultAlert; import com.cabletech.business.workflow.fault.model.FaultDispatch; import com.cabletech.business.workflow.fault.service.FaultDispatchService; import com.cabletech.common.base.SysConstant; import com.cabletech.common.util.Page; /** * 故障派单业务操作 * * @author 杨隽 2011-10-27 创建 * @author 杨隽 2011-10-31 修改继承的基类 * @author 杨隽 2011-11-04 修改dispatch方法以支持手动派单 * @author 杨隽 2011-11-29 修改doWorkflow()方法(将下步处理人的编号改为代维单位编号) * @author 杨隽 2011-12-12 添加获取“联系电话”属性的过程 * @author 杨隽 2012-02-07 添加getList()方法和getWaitHandledList()方法 * @author 杨隽 2012-02-08 修改getBaseDao()方法实现为getFaultBaseDao ()方法实现 * @author 杨隽 2012-02-08 提取获取故障业务单列表的公共方法 * @author 杨隽 2012-02-22 添加故障派单保存的业务功能 * @author 杨隽 2012-02-22 添加deleteDispatch方法 * @author 杨隽 2012-03-27 * 集成工单短信发送功能(添加getSmParameter方法并修改dispatch方法和doWorkflow方法) * @author 杨隽 2012-05-04 更改使用公共的表单提交标识 * */ @Service public class FaultDispatchServiceImpl extends FaultBaseServiceImpl<FaultDispatch, String> implements FaultDispatchService { // 故障告警单Dao操作 @Resource(name = "faultAlertDao") private FaultBaseDao<FaultAlert, String> faultAlertDao; // 故障派单Dao操作 @Resource(name = "faultDispatchDao") private FaultBaseDao<FaultDispatch, String> faultDispatchDao; @Override protected FaultBaseDao<FaultDispatch, String> getFaultBaseDao() { // TODO Auto-generated method stub return faultDispatchDao; } /** * 根据故障派单编号读取故障派单详细信息 * * @param id * String 故障派单编号 * @return FaultDispatch 故障派单详细信息 */ @Transactional(readOnly = true) public FaultDispatch viewFaultDispatch(String id) { FaultDispatch faultDispatch = faultDispatchDao.get(id); String orgName = super.getOrgName(faultDispatch.getMaintenanceId()); String patrolGroupName = super.getPatrolGroupName(faultDispatch .getPatrolGroup()); String creatorName = super.getUserName(faultDispatch.getCreater()); String phone = super.getUserPhone(faultDispatch.getCreater()); faultDispatch.setCreaterName(creatorName); faultDispatch.setMaintenanceName(orgName); faultDispatch.setPatrolGroupName(patrolGroupName); faultDispatch.setPhone(phone); return faultDispatch; } /** * 故障派单 * * @param faultAlert * FaultAlert 故障告警单信息 * @param faultDispatch * FaultDispatch 输入的故障派单信息 * @param userInfo * UserInfo 当前登录用户信息 */ @Transactional public void dispatch(FaultAlert faultAlert, FaultDispatch faultDispatch, UserInfo userInfo) { // TODO Auto-generated method stub // 更新故障告警单的状态信息 faultAlert.setState(FaultAlert.NOT_SUBMITED_STATE); if (SysConstant.FORM_IS_SUBMITED.equals(faultDispatch.getIsSubmited())) { faultAlert.setState(FaultAlert.DISPATCHED_STATE); faultDispatch.setState(FaultDispatch.PROCESSING_STATE); } if (StringUtils.isBlank(faultAlert.getId())) { faultAlertDao.getSession().save(faultAlert); faultDispatch.setAlarmId(faultAlert.getId()); } else { faultAlertDao.save(faultAlert); } // 保存故障派单信息 faultDispatch.setSendTime(new Date()); faultDispatch.setCreater(userInfo.getPersonId()); String taskCode = super.commonOrderCodeService.generatorWorkOrderCode( userInfo.getRegionId(), faultAlert.getBusinessType(), SysConstant.FAULT_FLOW_TYPE); if (StringUtils.isBlank(faultDispatch.getTaskCode())) { faultDispatch.setTaskCode(taskCode); } faultDispatchDao.save(faultDispatch); if (SysConstant.FORM_IS_SUBMITED.equals(faultDispatch.getIsSubmited())) { SmParameter parameter = getSmParameter(faultAlert, faultDispatch); // 执行工作流业务 doWorkflow(faultDispatch, parameter); } } /** * 根据查询条件获取故障派单分页列表 * * @param faultQueryParameter * FaultQueryParameter 查询条件参数 * @param userInfo * UserInfo 当前登录用户信息 * @return Page 故障派单分页列表 */ @SuppressWarnings("rawtypes") @Transactional(readOnly = true) public Page getList(FaultQueryParameter faultQueryParameter, UserInfo userInfo) { // TODO Auto-generated method stub faultQueryParameter.setUser(userInfo); Page page = getFaultList(faultQueryParameter, DISPATCH_FAULT_LIST_CONDITION_GENERATE_KEY); return page; } /** * 根据查询条件获取待办故障派单分页列表 * * @param faultQueryParameter * FaultQueryParameter 查询条件参数 * @param userInfo * UserInfo 当前登录用户信息 * @return Page 待办故障派单分页列表 */ @SuppressWarnings("rawtypes") @Transactional(readOnly = true) public Page getWaitHandledList(FaultQueryParameter faultQueryParameter, UserInfo userInfo) { // TODO Auto-generated method stub faultQueryParameter.setUser(userInfo); Page page = getFaultList(faultQueryParameter, WAIT_HANDLED_DISPATCH_FAULT_LIST_CONDITION_GENERATE_KEY); return page; } /** * 根据故障派单编号删除故障派单信息 * * @param id * String 故障派单编号 */ @Override @Transactional public void deleteDispatch(String id) { // TODO Auto-generated method stub FaultDispatch faultDispatch = faultDispatchDao.get(id); FaultAlert faultAlert = faultAlertDao.get(faultDispatch.getAlarmId()); faultAlert.setState(FaultAlert.WAIT_HANDLED_STATE); faultAlertDao.save(faultAlert); super.delete(id); } /** * 执行故障派单工作流 * * @param faultDispatch * FaultDispatch 故障派单信息 * @param smParameter * SmParameter 短信发送传递参数 */ @Transactional private void doWorkflow(FaultDispatch faultDispatch, SmParameter smParameter) { // TODO Auto-generated method stub ProMockPo pro = new ProMockPo(); String sendUserId = faultDispatch.getCreater(); String processMaintenanceId = faultDispatch.getMaintenanceId(); pro.setBzid(faultDispatch.getId()); pro.setUserId(sendUserId); pro.setUserName(super.getUserName(sendUserId)); pro.setDealGroup(processMaintenanceId); pro.setDealGroupName(super.getOrgName(processMaintenanceId)); super.getFaultWorkflowManager().sendTaskTwoSteps(pro, smParameter); } /** * 获取短信发送传递参数 * * @param faultAlert * FaultAlert 故障告警单信息 * @param faultDispatch * FaultDispatch 故障派单信息 * @return SmParameter 短信发送传递参数 */ private SmParameter getSmParameter(FaultAlert faultAlert, FaultDispatch faultDispatch) { // TODO Auto-generated method stub String simId = super.getOrgTel(faultDispatch.getMaintenanceId()); String[] contentParameters = new String[] { faultAlert .getTroubleTitle() }; SmParameter parameter = SmParameter.getInstance(FAULT_XML_FILE_ID, SEND_TROUBLE_MSG_ID, simId, contentParameters); parameter.setWrittenDb(true); parameter.setBusinessType(faultAlert.getBusinessType()); parameter.setHandleLimit(faultDispatch.getDeadline()); parameter.setWorkorderId(faultDispatch.getId()); parameter.setWorkorderTitle(faultAlert.getTroubleTitle()); parameter.setWorkorderType(SysConstant.FAULT_FLOW_TYPE); return parameter; } }