package com.cabletech.business.analysis.dao; import java.util.List; import java.util.Map; import org.apache.commons.lang.StringUtils; import org.springframework.stereotype.Repository; import com.cabletech.common.util.Page; /** * 工单审核通过率统计Dao * * @author 杨隽 2012-03-22 创建 * @author 杨隽 2012-03-30 提取公共方法 * */ @SuppressWarnings("rawtypes") @Repository public class WorkOrderApprovePassedRateDao extends WorkOrderAnalyseBaseDao { /** * 进行工单审核通过率统计(按组织分组) * * @param parameters * Map<String, String> * @return */ public List getWorkOrderApprovedPassedRateListByOrg( Map<String, String> parameters) { StringBuffer sqlBuffer = new StringBuffer(""); sqlBuffer.append(" select vo.id,vo.name,vo.parentid, "); sqlBuffer.append(" '0' as level_,'false' as isLeaf, "); sqlBuffer.append(" 'false' as expanded,'true' as loaded, "); sqlBuffer.append(" result_.* from ( "); sqlBuffer.append(" select v.* from view_org v "); sqlBuffer.append(" where v.regionid=any( "); sqlBuffer.append(" select r.regionid from view_region r "); sqlBuffer.append(" start with r.regionid='"); sqlBuffer.append(parameters.get("regionId")); sqlBuffer.append("' "); sqlBuffer.append(" connect by prior r.regionid=r.parentid "); sqlBuffer.append(" ) "); if (StringUtils.isNotBlank(parameters.get("orgId"))) { sqlBuffer.append(" and v.id='"); sqlBuffer.append(parameters.get("orgId")); sqlBuffer.append("'"); } sqlBuffer.append(" ) vo "); sqlBuffer.append(" join ( "); sqlBuffer.append(getWorkOrderProcessInTimeRateSqlByOrg(parameters)); sqlBuffer.append(" ) result_ on vo.id=result_.orgid "); return super.getSQLALL(sqlBuffer.toString()); } /** * 获取n次审核通过工单的列表 * * @param page * Page * @param parameters * parameters Map<String, String> * @param approveTimes * approveTimes int * @return */ @SuppressWarnings("unchecked") public Page getNTimesApprovePassedWorkOrderList(Page page, Map<String, String> parameters, int approveTimes) { StringBuffer sqlBuffer = new StringBuffer(""); sqlBuffer .append(" select distinct id,task_code,task_name, task_type,creater,create_date,overtime_set,target_principal,task_type_dis,create_date_dis,pid,task_state,orgid,len from ( "); sqlBuffer.append(getAllWorkOrderSql(parameters)); sqlBuffer.append(" ) tb "); sqlBuffer.append(" where nvl(tb.task_times,'0')+1="); sqlBuffer.append(approveTimes); sqlBuffer.append(" "); return super.getSQLPageAll(page, sqlBuffer.toString()); } /** * 获取工单审核通过率统计的sql(按组织分组) * * @param parameters * Map<String, String> * @return */ private StringBuffer getWorkOrderProcessInTimeRateSqlByOrg( Map<String, String> parameters) { StringBuffer sqlBuffer = new StringBuffer(""); sqlBuffer.append(" select all_t.orgid, "); getStatisticNumberColumnSql(sqlBuffer); sqlBuffer.append(" from ( "); sqlBuffer.append(" select tb.*, "); sqlBuffer.append(" nvl(tb.task_times,'0')+1 as approve_times from ( "); sqlBuffer.append(getAllWorkOrderSql(parameters)); sqlBuffer.append(" ) tb "); sqlBuffer.append(" ) all_t "); sqlBuffer.append(" group by all_t.orgid "); return sqlBuffer; } /** * 获取统计使用的数据列 * * @param sqlBuffer * StringBuffer */ private void getStatisticNumberColumnSql(StringBuffer sqlBuffer) { sqlBuffer.append(" count(all_t.pid) as all_num, "); sqlBuffer .append(" decode(count(all_t.pid),0,0,sum(decode(approve_times,1,1,0))) as onepassed_num, "); sqlBuffer .append(" to_char(decode(count(all_t.pid),0,0,100*sum(decode(approve_times,1,1,0))/count(all_t.pid)),'FM990.09') as onepassed_rate, "); sqlBuffer .append(" decode(count(all_t.pid),0,0,sum(decode(approve_times,2,1,0))) as twopassed_num, "); sqlBuffer .append(" to_char(decode(count(all_t.pid),0,0,100*sum(decode(approve_times,2,1,0))/count(all_t.pid)),'FM990.09') as twopassed_rate "); } /** * 获取所有工单列表的sql * * @param parameters * Map<String, String> * @return */ private String getAllWorkOrderSql(Map<String, String> parameters) { // TODO Auto-generated method stub StringBuffer sqlBuffer = new StringBuffer(""); sqlBuffer.append(" select wo.id,wo.task_code,wo.task_name, "); sqlBuffer.append(" wo.task_type,wo.creater,wo.create_date, "); sqlBuffer.append(" wo.overtime_set,wt.target_principal, "); sqlBuffer.append(" FN_GETNAMEBYCODE(wo.task_type,'TASK_CODE') as task_type_dis, "); sqlBuffer.append(" to_char(wo.create_date,'yyyy-mm-dd hh:mi:ss') as create_date_dis, "); sqlBuffer.append(" wt.id as pid,wt.task_state,vu.orgid, "); sqlBuffer.append(" to_char((( "); sqlBuffer.append(" select min(jbpm_.end_time) from "); getJbpmTaskDataSql(sqlBuffer); sqlBuffer.append(" where jbpm_.key='workorder' "); sqlBuffer.append(" and jbpm_.task_name='填写回单' "); sqlBuffer.append(" and jbpm_.bzid=wt.id "); sqlBuffer.append(" )-wo.CREATE_DATE)*24,'FM99999990.099') as len, "); sqlBuffer.append(" ( "); String transitionSql = " and jha.transition_='reject' "; getJbpmTaskTimesSql(sqlBuffer, transitionSql); sqlBuffer.append(" where jbpm_times_.key='workorder' "); sqlBuffer.append(" and jbpm_times_.bzid=wt.id "); sqlBuffer.append(" and jbpm_times_.task_name='验证回单' "); sqlBuffer.append(" ) as task_times "); sqlBuffer.append(" from wtask_order wo "); sqlBuffer.append(" join wtask_transfer wt on wo.id=wt.task_id "); sqlBuffer.append(" left join view_userinfo vu on vu.sid=wt.target_principal "); sqlBuffer.append(" where wt.task_state='"); sqlBuffer.append(END_STATE); sqlBuffer.append("' "); sqlBuffer.append(" and ( "); sqlBuffer.append(" select min(jbpm_.end_time) from "); getJbpmTaskDataSql(sqlBuffer); sqlBuffer.append(" where jbpm_.key='workorder' "); sqlBuffer.append(" and jbpm_.task_name='填写回单' "); sqlBuffer.append(" and jbpm_.bzid=wt.id "); sqlBuffer.append(" ) is not null "); getWorkOrderCondition(parameters, sqlBuffer); return sqlBuffer.toString(); } }