package com.cabletech.business.workflow.fault.service.impl;
import java.util.Date;
import javax.annotation.Resource;
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.dao.FaultBaseDao;
import com.cabletech.business.workflow.fault.model.FaultAlert;
import com.cabletech.business.workflow.fault.model.FaultAudit;
import com.cabletech.business.workflow.fault.model.FaultDispatch;
import com.cabletech.business.workflow.fault.service.FaultAuditService;
import com.cabletech.common.base.SysConstant;
/**
* 故障回单审核业务操作
*
* @author 杨隽 2011-10-27 创建
* @author 杨隽 2011-10-31 添加“获取故障回单审核历史”方法并修改继承的基类
* @author 杨隽 2011-11-25 修改“审核”方法(审核通过时将故障告警单状态置为“完成”状态)
* @author 杨隽 2012-02-08 修改getBaseDao()方法实现为getFaultBaseDao ()方法实现
* @author 杨隽 2012-02-15 删除getAuditHistoryList()方法
* @author 杨隽 2012-02-24 修改doWorkflow()方法以支持转审
* @author 杨隽 2012-03-27 集成工单短信发送功能(添加getSmParameter方法并修改audit方法和doWorkflow方法)
*
*/
@Service
public class FaultAuditServiceImpl extends
FaultBaseServiceImpl<FaultAudit, String> implements FaultAuditService {
// 故障告警单Dao操作
@Resource(name = "faultAlertDao")
private FaultBaseDao<FaultAlert, String> faultAlertDao;
// 故障派单Dao操作
@Resource(name = "faultDispatchDao")
private FaultBaseDao<FaultDispatch, String> faultDispatchDao;
// 故障回单审核Dao操作
@Resource(name = "faultAuditDao")
private FaultBaseDao<FaultAudit, String> faultAuditDao;
@Override
protected FaultBaseDao<FaultAudit, String> getFaultBaseDao() {
// TODO Auto-generated method stub
return faultAuditDao;
}
/**
* 故障回单审核
*
* @param faultAudit
* FaultAudit 故障回单审核输入信息
* @param userInfo
* UserInfo 当前登录用户信息
*/
@Transactional
public void audit(FaultAudit faultAudit, UserInfo userInfo) {
// TODO Auto-generated method stub
FaultDispatch faultDispatch = faultDispatchDao.get(faultAudit
.getTaskId());
faultAudit.setAuditor(userInfo.getPersonId());
faultAudit.setAuditingTime(new Date());
if (SysConstant.PASS_WORKFLOW_TRANSTION.equals(faultAudit
.getIsAuditing())) {
faultDispatch.setState(FaultDispatch.END_STATE);
} else if (SysConstant.REJECT_WORKFLOW_TRANSITION.equals(faultAudit
.getIsAuditing())) {
faultDispatch.setState(FaultDispatch.PROCESSING_STATE);
}
faultDispatchDao.save(faultDispatch);
SmParameter parameter = getSmParameter(faultAudit, faultDispatch);
// 执行工作流业务
ProMockPo pro = doWorkflow(faultAudit, parameter);
if (pro.isFlowOver()) {
setFaultAlertFinishedState(faultDispatch);
}
}
/**
* 执行故障回单审核工作流
*
* @param faultAudit
* 故障回单审核信息
* @param smParameter
* SmParameter 短信发送传递参数
* @return ProMockPo 故障回单审核工作流执行后的结果
*/
private ProMockPo doWorkflow(FaultAudit faultAudit, SmParameter smParameter) {
// TODO Auto-generated method stub
ProMockPo pro = new ProMockPo();
String sendUserId = faultAudit.getAuditor();
String processUserId = faultAudit.getTransferApprover();
pro.setUserId(sendUserId);
pro.setUserName(super.getUserName(sendUserId));
pro.setTaskId(faultAudit.getWorkflowTaskId());
pro.setDealUsers(processUserId);
pro.setDealUsersName(super.getUserName(processUserId));
pro.setTransition(faultAudit.getIsAuditing());
pro.setComment(faultAudit.getRemark());
return super.getFaultWorkflowManager().doTask(pro, smParameter);
}
/**
* 设置故障告警单的“故障完成”状态
*
* @param faultDispatch
* FaultDispatch 故障派单信息
*/
private void setFaultAlertFinishedState(FaultDispatch faultDispatch) {
FaultAlert faultAlert = faultAlertDao.get(faultDispatch.getAlarmId());
faultAlert.setState(FaultAlert.FINISHED_STATE);
faultAlertDao.save(faultAlert);
}
/**
* 获取短信发送参数
*
* @param faultAudit
* FaultAudit 故障审核结果实体
* @param faultDispatch
* FaultDispatch 故障派单实体
* @return SmParameter 短信发送参数
*/
private SmParameter getSmParameter(FaultAudit faultAudit,
FaultDispatch faultDispatch) {
// TODO Auto-generated method stub
String msgId = getMessageId(faultAudit);
String simId = getSimId(faultAudit, faultDispatch);
String alertId = faultDispatch.getAlarmId();
FaultAlert faultAlert = faultAlertDao.get(alertId);
String[] contentParameters = new String[] { faultAlert
.getTroubleTitle() };
SmParameter parameter = SmParameter.getInstance(FAULT_XML_FILE_ID,
msgId, 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;
}
/**
* 根据故障审核结果获取发送短信的信息编号
*
* @param faultAudit
* FaultAudit 故障审核结果
* @return String 发送短信的信息编号
*/
private String getMessageId(FaultAudit faultAudit) {
String msgId = "";
if (SysConstant.PASS_WORKFLOW_TRANSTION.equals(faultAudit
.getIsAuditing())) {
msgId = APPROVE_PASSED_TROUBLE_MSG_ID;
} else if (SysConstant.TRANSFER_WORKFLOW_TRANSTION.equals(faultAudit
.getIsAuditing())) {
msgId = APPROVE_TRANSFER_TROUBLE_MSG_ID;
} else {
msgId = APPROVE_NOTPASSED_TROUBLE_MSG_ID;
}
return msgId;
}
/**
* 根据故障审核结果和故障派单实体获取sim卡号
*
* @param faultAudit
* FaultAudit 故障审核结果
* @param faultDispatch
* FaultDispatch 故障派单实体
* @return String sim卡号
*/
private String getSimId(FaultAudit faultAudit, FaultDispatch faultDispatch) {
String simId = "";
if (SysConstant.TRANSFER_WORKFLOW_TRANSTION.equals(faultAudit
.getIsAuditing())) {
simId = super.getUserPhone(faultAudit.getTransferApprover());
} else {
simId = super.getOrgTel(faultDispatch.getMaintenanceId());
}
return simId;
}
}