@ -2,33 +2,50 @@ package com.epmet.dataaggre.service.govproject.impl;
import com.epmet.commons.dynamic.datasource.annotation.DataSource ;
import com.epmet.commons.tools.constant.NumConstant ;
import com.epmet.commons.tools.exception.RenException ;
import com.epmet.commons.tools.security.dto.TokenDto ;
import com.epmet.commons.tools.utils.ConvertUtils ;
import com.epmet.commons.tools.utils.Result ;
import com.epmet.dataaggre.constant.DataSourceConstant ;
import com.epmet.dataaggre.constant.ProjectConstant ;
import com.epmet.dataaggre.dao.govorg.CustomerStaffAgencyDao ;
import com.epmet.dataaggre.dao.govproject.ProjectDao ;
import com.epmet.dataaggre.dto.govissue.result.IssueListResultDTO ;
import com.epmet.dataaggre.dto.govorg.CustomerStaffAgencyDTO ;
import com.epmet.dataaggre.dto.govproject.ProjectDTO ;
import com.epmet.dataaggre.dto.govproject.form.AllProjectFormDTO ;
import com.epmet.dataaggre.dto.govproject.result.AllProjectResultDTO ;
import com.epmet.dataaggre.dto.govproject.result.ProjectInfoDTO ;
import com.epmet.dataaggre.dto.govproject.result.ShiftProjectResultDTO ;
import com.epmet.dataaggre.service.govorg.GovOrgService ;
import com.epmet.dataaggre.service.govproject.GovProjectService ;
import com.epmet.dto.form.TimestampIntervalFormDTO ;
import com.epmet.dto.form.WorkMinuteFormDTO ;
import com.epmet.feign.EpmetCommonServiceOpenFeignClient ;
import lombok.extern.slf4j.Slf4j ;
import org.apache.commons.collections4.CollectionUtils ;
import org.apache.commons.lang3.StringUtils ;
import org.springframework.beans.factory.annotation.Autowired ;
import org.springframework.stereotype.Service ;
import org.springframework.util.CollectionUtils ;
import java.util.ArrayList ;
import java.util.Comparator ;
import java.util.List ;
import java.util.Map ;
import java.util.* ;
import java.util.stream.Collectors ;
/ * *
* @Author zxc
* @DateTime 2020 / 12 / 24 下午5 : 50
* /
@Slf4j
@Service
@DataSource ( DataSourceConstant . GOV_PROJECT )
public class GovProjectServiceImpl implements GovProjectService {
@Autowired
private ProjectDao projectDao ;
@Autowired
private GovOrgService govOrgService ;
@Autowired
private EpmetCommonServiceOpenFeignClient epmetCommonServiceOpenFeignClient ;
/ * *
* @Description 查询项目信息
@ -46,11 +63,15 @@ public class GovProjectServiceImpl implements GovProjectService {
// 为关闭项目
List < IssueListResultDTO > pendingResult = projectDao . selectProjectInfoPending ( issueIds ) ;
if ( CollectionUtils . isEmpty ( closedResult ) ) {
if ( CollectionUtils . isEmpty ( pendingResult ) ) return new ArrayList < > ( ) ;
if ( CollectionUtils . isEmpty ( pendingResult ) ) {
return new ArrayList < > ( ) ;
}
return pendingResult ;
}
if ( CollectionUtils . isEmpty ( pendingResult ) ) {
if ( CollectionUtils . isEmpty ( closedResult ) ) return new ArrayList < > ( ) ;
if ( CollectionUtils . isEmpty ( closedResult ) ) {
return new ArrayList < > ( ) ;
}
return closedResult ;
}
closedResult . addAll ( pendingResult ) ;
@ -82,4 +103,94 @@ public class GovProjectServiceImpl implements GovProjectService {
return resultList ;
}
/ * *
* 全部项目
*
* @param tokenDto token
* @param formDTO 入参
* @return java . util . List < com . epmet . dataaggre . dto . govproject . result . AllProjectResultDTO >
* @author zhaoqifeng
* @date 2020 / 12 / 25 15 : 59
* /
@Override
public AllProjectResultDTO allProjectList ( TokenDto tokenDto , AllProjectFormDTO formDTO ) {
AllProjectResultDTO resultDTO = new AllProjectResultDTO ( ) ;
String agencyId = govOrgService . getAgencyIdByUserId ( tokenDto . getUserId ( ) ) ;
int pageIndex = ( formDTO . getPageNo ( ) - NumConstant . ONE ) * formDTO . getPageSize ( ) ;
if ( StringUtils . isEmpty ( agencyId ) ) {
throw new RenException ( String . format ( "获取工作人员组织信息失败,staffId->%s" , tokenDto . getUserId ( ) ) ) ;
}
formDTO . setAgencyId ( agencyId ) ;
List < ProjectInfoDTO > projectList = projectDao . getAllProject ( formDTO ) ;
if ( CollectionUtils . isNotEmpty ( projectList ) ) {
resultDTO . setProjectCount ( projectList . size ( ) ) ;
projectList . forEach ( project - > {
//计算项目耗时
Integer timeSpent ;
if ( ProjectConstant . PROJECT_STATUS_CLOSED . equals ( project . getProjectStatus ( ) ) ) {
timeSpent = getTimeSpent ( project . getProjectId ( ) , project . getStartTime ( ) , project . getEndTime ( ) ) ;
} else {
timeSpent = getTimeSpent ( project . getProjectId ( ) , project . getStartTime ( ) , new Date ( ) ) ;
}
project . setTimeSpent ( timeSpent ) ;
//获取当前处理部门
ProjectDTO projectDTO = new ProjectDTO ( ) ;
projectDTO . setId ( project . getProjectId ( ) ) ;
List < String > departmentList = projectDao . selectDepartmentNameList ( projectDTO ) ;
project . setCurrentDisposeDept ( departmentList ) ;
} ) ;
//排序(创建:create 更新:update 部门:department 耗时:date 次数:count)
switch ( formDTO . getSortType ( ) ) {
case "create" :
projectList = projectList . stream ( ) . sorted ( Comparator . comparing ( ProjectInfoDTO : : getProjectTime ) . reversed ( ) )
. collect ( Collectors . toList ( ) ) . subList ( pageIndex , pageIndex + formDTO . getPageSize ( ) ) ;
break ;
case "update" :
projectList = projectList . stream ( ) . sorted ( Comparator . comparing ( ProjectInfoDTO : : getUpdateTime ) . reversed ( ) )
. collect ( Collectors . toList ( ) ) . subList ( pageIndex , pageIndex + formDTO . getPageSize ( ) ) ;
break ;
case "department" :
projectList = projectList . stream ( ) . sorted ( Comparator . comparing ( ProjectInfoDTO : : getDepartmentCount ) . reversed ( ) )
. collect ( Collectors . toList ( ) ) . subList ( pageIndex , pageIndex + formDTO . getPageSize ( ) ) ;
break ;
case "date" :
projectList = projectList . stream ( ) . sorted ( Comparator . comparing ( ProjectInfoDTO : : getTimeSpent ) . reversed ( ) )
. collect ( Collectors . toList ( ) ) . subList ( pageIndex , pageIndex + formDTO . getPageSize ( ) ) ;
break ;
case "count" :
projectList = projectList . stream ( ) . sorted ( Comparator . comparing ( ProjectInfoDTO : : getProcessCount ) . reversed ( ) )
. collect ( Collectors . toList ( ) ) . subList ( pageIndex , pageIndex + formDTO . getPageSize ( ) ) ;
break ;
default :
break ;
}
resultDTO . setProjectList ( projectList ) ;
} else {
resultDTO . setProjectCount ( NumConstant . ZERO ) ;
resultDTO . setProjectList ( Collections . emptyList ( ) ) ;
}
return resultDTO ;
}
private Integer getTimeSpent ( String id , Date startTime , Date endTime ) {
WorkMinuteFormDTO timeParam = new WorkMinuteFormDTO ( ) ;
timeParam . setIfPrecise ( "imprecise" ) ;
timeParam . setIfCustom ( "default" ) ;
TimestampIntervalFormDTO interval = new TimestampIntervalFormDTO ( id , startTime , endTime ) ;
List < TimestampIntervalFormDTO > intervalList = new LinkedList < > ( ) ;
intervalList . add ( interval ) ;
timeParam . setTimeList ( intervalList ) ;
Result < Map < String , Integer > > timeResult = epmetCommonServiceOpenFeignClient . workMinutes ( timeParam ) ;
if ( timeResult . success ( ) & & ! org . springframework . util . CollectionUtils . isEmpty ( timeResult . getData ( ) ) & & null ! = timeResult . getData ( ) . get ( id ) ) {
return timeResult . getData ( ) . get ( id ) / 60 ;
} else {
log . error ( "计算首次响应时间失败" ) ;
throw new RenException ( "计算首次响应时间失败" ) ;
}
}
}