package com.cabletech.business.workflow.wmaintain.service.impl; import java.util.Date; import java.util.List; import java.util.Map; import javax.annotation.Resource; import org.apache.commons.lang.ArrayUtils; 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.wmaintain.dao.WMaintainBaseDao; import com.cabletech.business.workflow.wmaintain.model.WMaintainPlan; import com.cabletech.business.workflow.wmaintain.service.WMaintainCreatePlanService; import com.cabletech.business.workflow.wmaintain.service.WMaintainResultService; import com.cabletech.business.workflow.wmaintain.service.WMaintainSiteService; import com.cabletech.common.base.SysConstant; /** * 制定维修作业计划服务接口实现 * * @author 杨隽 2012-04-11 创建 * @author 杨隽 2012-04-16 添加注释部分 * @author 杨隽 2012-04-18 添加deletePlan()方法 * @author 杨隽 2012-04-18 修改view()方法 * @author 杨隽 2012-04-26 修改view()方法(添加获取计划中站点列表及站点异常项列表) * @author 杨隽 2012-05-04 更改使用公共的表单提交标识 * */ @Service @Transactional public class WMaintainCreatePlanServiceImpl extends WMaintainBaseServiceImpl<WMaintainPlan, String> implements WMaintainCreatePlanService { // 维修作业计划Dao @Resource(name = "WMaintainPlanDao") private WMaintainBaseDao<WMaintainPlan, String> wMaintainPlanDao; // 计划维护站点服务 @Resource(name = "WMaintainSiteServiceImpl") private WMaintainSiteService wMaintainSiteService; // 站点异常项及处理结果服务 @Resource(name = "WMaintainResultServiceImpl") private WMaintainResultService wMaintainResultService; /** * 制定维修作业计划 * * @param plan * WMaintainPlan 维修作业计划表单数据 * @param userInfo * UserInfo 当前登录用户信息 */ @Override public void save(WMaintainPlan plan, UserInfo userInfo) { // TODO Auto-generated method stub writePlanInfo(plan, userInfo); if (StringUtils.isNotBlank(plan.getId())) { wMaintainResultService.deletePlanResult(plan.getId()); wMaintainSiteService.deletePlanSite(plan.getId()); } wMaintainPlanDao.save(plan); wMaintainSiteService.save(plan); if (SysConstant.FORM_IS_SUBMITED.equals(plan.getIsSubmited())) { SmParameter smParameter = getSmParameter(plan); if (StringUtils.isBlank(plan.getWorkflowTaskId())) { doWorkflowStart(plan, smParameter); } else { doWorkflowTask(plan, smParameter); } } } /** * 查看维修作业计划详细信息 * * @param id * String 维修作业计划编号 * @return WMaintainPlan 维修作业计划详细信息数据 */ @Override @Transactional(readOnly = true) public WMaintainPlan view(String id) { // TODO Auto-generated method stub WMaintainPlan plan = wMaintainPlanDao.get(id); plan.setPatrolGroupName(super.getPatrolGroupName(plan.getPatrolGroup())); plan.setAuditorName(super.getUserName(plan.getAuditor())); plan.setCreaterName(super.getUserName(plan.getCreater())); plan.setOrgName(super.getPatrolGroupOrgName(plan.getPatrolGroup())); List<Map<String, Object>> siteList = wMaintainSiteService .getWMaintainSiteListInGrid(id); plan.setSiteList(siteList); List<Map<String, Object>> resultList = wMaintainResultService .getWMaintainResultListInGrid(id); plan.setResultList(resultList); return plan; } /** * 删除维修作业计划信息 * * @param id * String[] 维修作业计划编号 */ public void deletePlan(String[] id) { if (ArrayUtils.isEmpty(id)) { return; } for (int i = 0; i < id.length; i++) { wMaintainResultService.deletePlanResult(id[i]); wMaintainSiteService.deletePlanSite(id[i]); wMaintainPlanDao.delete(id[i]); } } /** * 获取维修作业计划处理操作Dao * * @return WMaintainBaseDao<T, PK> 维修作业计划处理操作Dao */ @Override protected WMaintainBaseDao<WMaintainPlan, String> getWMaintainBaseDao() { // TODO Auto-generated method stub return wMaintainPlanDao; } /** * 补充维修作业计划信息数据 * * @param plan * WMaintainPlan 维修作业计划表单数据 * @param userInfo * UserInfo 当前登录用户信息 */ private void writePlanInfo(WMaintainPlan plan, UserInfo userInfo) { plan.setCreateDate(new Date()); plan.setCreater(userInfo.getPersonId()); plan.setCurrentProcessUserId(userInfo.getPersonId()); plan.setNextProcessUserId(plan.getAuditor()); if (SysConstant.FORM_IS_SUBMITED.equals(plan.getIsSubmited())) { plan.setPlanState(WMaintainPlan.WMAINTAIN_PLAN_SUBMITED_STATE); } else { plan.setPlanState(WMaintainPlan.WMAINTAIN_PLAN_NOTSUBMITED_STATE); } } /** * 获取短信发送参数 * * @param plan * WMaintainPlan 维修作业计划信息 * @return SmParameter 短信发送参数 */ private SmParameter getSmParameter(WMaintainPlan plan) { SmParameter smParameter = new SmParameter(); String simId = super.getUserPhone(plan.getNextProcessUserId()); String[] contentParameters = new String[] { plan.getPlanName() }; smParameter.setSimId(simId); smParameter.setContentParameters(contentParameters); smParameter.setXmlFileId(WMAINTAIN_XML_FILE_ID); smParameter.setXmlMessageId(CREATE_PLAN_SEND_MSG_ID); return smParameter; } /** * 执行制定维修作业计划工作流 * * @param plan * WMaintainPlan 维修作业计划信息 * @param smParameter * SmParameter 短信发送参数 */ private void doWorkflowStart(WMaintainPlan plan, SmParameter smParameter) { // TODO Auto-generated method stub ProMockPo taskPi = new ProMockPo(); setTaskPi(plan, taskPi); super.getwMaintainWorkflowService().sendTaskTwoSteps(taskPi, smParameter); } /** * 执行修改维修作业计划工作流 * * @param plan * WMaintainPlan 维修作业计划信息 * @param smParameter * SmParameter 短信发送参数 */ private void doWorkflowTask(WMaintainPlan plan, SmParameter smParameter) { // TODO Auto-generated method stub ProMockPo taskPi = new ProMockPo(); taskPi.setTaskId(plan.getWorkflowTaskId()); setTaskPi(plan, taskPi); taskPi.setTransition(SysConstant.PASS_WORKFLOW_TRANSTION); super.getwMaintainWorkflowService().doTask(taskPi, smParameter); } /** * 将计划中信息放到工作流业务实体中 * * @param plan * WMaintainPlan 计划信息 * @param taskPi * ProMockPo 工作流业务实体 */ private void setTaskPi(WMaintainPlan plan, ProMockPo taskPi) { String sendUserId = plan.getCurrentProcessUserId(); String processUserId = plan.getNextProcessUserId(); taskPi.setBzid(plan.getId()); taskPi.setDealUsers(processUserId); String userName = super.getUserName(processUserId); taskPi.setDealUsersName(userName); taskPi.setUserId(sendUserId); userName = super.getUserName(sendUserId); taskPi.setUserName(userName); } }