@ -21,6 +21,7 @@ import com.easy.admin.modules.huzhou.service.*;
import com.easy.admin.modules.huzhou.vo.* ;
import com.easy.admin.sys.model.SysDict ;
import com.easy.admin.sys.service.SysDictService ;
import kotlin.collections.EmptyList ;
import org.activiti.engine.RuntimeService ;
import org.activiti.engine.TaskService ;
import org.activiti.engine.runtime.ProcessInstance ;
@ -44,6 +45,8 @@ import java.math.BigDecimal;
import java.math.RoundingMode ;
import java.util.* ;
import java.util.stream.Collectors ;
import java.util.stream.DoubleStream ;
import java.util.stream.Stream ;
@Service
@Transactional
@ -1282,17 +1285,17 @@ public class HuzhouProjectinfoServiceImpl extends ServiceImpl<HuzhouProjectinfoM
return result ;
}
public Fo undByTypeOV countStoragedFound ( ) {
Fo undByTypeOV result = countFoundByType ( "1" ) ;
public FundByTypeOV countStoragedFound ( ) {
FundByTypeOV result = countFoundByType ( "1" ) ;
return result ;
}
public Fo undByTypeOV countSupportingFound ( ) {
Fo undByTypeOV result = countFoundByType ( "2" ) ;
public FundByTypeOV countSupportingFound ( ) {
FundByTypeOV result = countFoundByType ( "2" ) ;
return result ;
}
public Fo undByTypeOV countFoundByType ( String type ) {
public FundByTypeOV countFoundByType ( String type ) {
BigDecimal defVal = new BigDecimal ( "0.00" ) ;
BigDecimal totalAmount = new BigDecimal ( "0.00" ) ;
BigDecimal totalCentral = new BigDecimal ( "0.00" ) ;
@ -1317,7 +1320,7 @@ public class HuzhouProjectinfoServiceImpl extends ServiceImpl<HuzhouProjectinfoM
totalCounty = totalMap ! = null ? totalMap . get ( "countyAcount" ) : defVal ;
totalSelf = totalMap ! = null ? totalMap . get ( "selfAcount" ) : defVal ;
}
Fo undByTypeOV result = new Fo undByTypeOV ( ) ;
FundByTypeOV result = new FundByTypeOV ( ) ;
result . setTotalMoney ( totalAmount ) ;
result . setTotalCentral ( totalCentral ) ;
result . setTotalProvincial ( totalProvincial ) ;
@ -1327,4 +1330,120 @@ public class HuzhouProjectinfoServiceImpl extends ServiceImpl<HuzhouProjectinfoM
return result ;
}
public IPage < ProjectSummaryOV > getProjectSummaryPage ( HuzhouProjectinfo projectInfo , Integer pageNo , Integer pageSize ) {
IPage < ProjectSummaryOV > result = new Page < > ( ) ;
List < ProjectSummaryOV > records = new ArrayList < > ( ) ;
//只要入库项目
projectInfo . setType ( "1" ) ;
ProjectInfoAuthSelect projectInfoAuthSelect = CommonUtils . setGetProjectInfoAuth ( projectInfo ) ;
Page page = new Page ( 1 , 10000 ) ;
Page < HuzhouProjectinfoOV > projectAndChildInfoPageList = projectinfoMapper . getProjectAndChildInfoPageList ( page , projectInfoAuthSelect ) ;
Map < String , List < HuzhouProjectinfoOV > > projectsMap = projectAndChildInfoPageList . getRecords ( ) . stream ( ) . collect ( Collectors . groupingBy ( x - > x . getDutyWorkplace ( ) ) ) ;
for ( Map . Entry < String , List < HuzhouProjectinfoOV > > entry : projectsMap . entrySet ( ) ) {
ProjectSummaryOV projectSummary = new ProjectSummaryOV ( ) ;
projectSummary . setDutyWorkplace ( entry . getKey ( ) ) ;
projectSummary . setProjectNum ( entry . getValue ( ) . size ( ) ) ;
List < Double > totalList = entry . getValue ( ) . stream ( ) . map ( x - > Optional . ofNullable ( x . getTotalMoney ( ) ) . orElse ( 0 . 00 ) ) . collect ( Collectors . toList ( ) ) ;
double total = totalList . isEmpty ( ) ? 0 . 00 : totalList . stream ( ) . reduce ( 0 . 00 , Double : : sum ) ;
BigDecimal totalMoney = new BigDecimal ( String . valueOf ( total ) ) ;
projectSummary . setTotalMoney ( totalMoney ) ;
List < Double > estimatedList = entry . getValue ( ) . stream ( ) . map ( x - > Optional . ofNullable ( x . getUrtEstimatedAmount ( ) ) . orElse ( 0 . 00 ) ) . collect ( Collectors . toList ( ) ) ;
Double estimate = estimatedList . isEmpty ( ) ? 0 . 00 : estimatedList . stream ( ) . reduce ( 0 . 00 , Double : : sum ) ;
BigDecimal estimateMoney = new BigDecimal ( String . valueOf ( estimate ) ) ;
projectSummary . setEstimateMoney ( estimateMoney ) ;
List < String > ids = entry . getValue ( ) . stream ( ) . map ( x - > x . getId ( ) ) . collect ( Collectors . toList ( ) ) ;
BigDecimal contractMoney = new BigDecimal ( "0" ) ;
BigDecimal contractCentralMoney = new BigDecimal ( "0" ) ;
if ( ! ids . isEmpty ( ) ) {
Map < String , BigDecimal > moneyMap = projectinfoMapper . countMoneyByIds ( ids ) ;
if ( moneyMap ! = null & & moneyMap . isEmpty ( ) ) {
contractMoney = Optional . ofNullable ( moneyMap . get ( "contractMoney" ) ) . orElse ( new BigDecimal ( "0" ) ) ;
contractCentralMoney = Optional . ofNullable ( moneyMap . get ( "contractCentralMoney" ) ) . orElse ( new BigDecimal ( "0" ) ) ;
}
projectSummary . setContractMoney ( contractMoney ) ;
projectSummary . setContractCentralMoney ( contractCentralMoney ) ;
}
ProjectProgressOV progress = this . getProgress ( ids ) ;
projectSummary . setProjectProgress ( progress . getProjectProgress ( ) ) ;
records . add ( projectSummary ) ;
}
//手动分页
int fromIndex = ( pageNo - 1 ) * pageSize ;
List < ProjectSummaryOV > currentPageData = records . subList ( fromIndex , Math . min ( fromIndex + pageSize , records . size ( ) ) ) ;
result . setSize ( pageSize ) . setCurrent ( pageNo ) . setRecords ( currentPageData ) . setTotal ( records . size ( ) ) ;
return result ;
}
public IPage < ProjectSummaryOV > getProjectSummaryPageByTask ( HuzhouProjectinfo projectInfo , Integer pageNo , Integer pageSize ) {
IPage < ProjectSummaryOV > result = new Page < > ( ) ;
//只要入库项目
projectInfo . setType ( "1" ) ;
ProjectInfoAuthSelect projectInfoAuthSelect = CommonUtils . setGetProjectInfoAuth ( projectInfo ) ;
Page page = new Page ( 1 , 10000 ) ;
Page < HuzhouProjectinfoOV > projectAndChildInfoPageList = projectinfoMapper . getProjectAndChildInfoPageList ( page , projectInfoAuthSelect ) ;
List < String > ids = projectAndChildInfoPageList . getRecords ( ) . stream ( ) . map ( x - > x . getId ( ) ) . collect ( Collectors . toList ( ) ) ;
List < ProjectSummaryOV > projectSummaryPageList = projectinfoMapper . getProjectSummaryPageList ( ids ) ;
for ( ProjectSummaryOV p : projectSummaryPageList ) {
List < String > projectIds = projectinfoMapper . getIds ( p . getReformName ( ) , p . getSuperLeader ( ) ) ;
ProjectProgressOV progress = this . getProgress ( projectIds ) ;
p . setProjectProgress ( progress . getProjectProgress ( ) ) ;
}
//手动分页
int fromIndex = ( pageNo - 1 ) * pageSize ;
List < ProjectSummaryOV > currentPageData = projectSummaryPageList . subList ( fromIndex , Math . min ( fromIndex + pageSize , projectSummaryPageList . size ( ) ) ) ;
result . setSize ( pageSize ) . setCurrent ( pageNo ) . setRecords ( currentPageData ) . setTotal ( projectSummaryPageList . size ( ) ) ;
return result ;
}
public IPage < ProjectDetailOV > getProjectDetailPage ( HuzhouProjectinfo projectInfo , Integer pageNo , Integer pageSize ) {
IPage < ProjectDetailOV > result = new Page < > ( ) ;
List < ProjectDetailOV > records = new ArrayList < > ( ) ;
//只要入库项目
projectInfo . setType ( "1" ) ;
projectInfo . setDutyWorkplace ( projectInfo . getDutyWorkplace ( ) ) ;
ProjectInfoAuthSelect projectInfoAuthSelect = CommonUtils . setGetProjectInfoAuth ( projectInfo ) ;
Page page = new Page ( pageNo , pageSize ) ;
Page < HuzhouProjectinfoOV > projectAndChildInfoPageList = projectinfoMapper . getProjectAndChildInfoPageList ( page , projectInfoAuthSelect ) ;
List < HuzhouProjectinfoOV > projectAndChildInfoList = projectAndChildInfoPageList . getRecords ( ) . stream ( ) . collect ( Collectors . toList ( ) ) ;
BigDecimal contractMoney = new BigDecimal ( "0" ) ;
BigDecimal contractCentralMoney = new BigDecimal ( "0" ) ;
for ( HuzhouProjectinfoOV p : projectAndChildInfoList ) {
ProjectDetailOV projectDetail = new ProjectDetailOV ( ) ;
BeanUtils . copyProperties ( p , projectDetail ) ;
Map < String , BigDecimal > moneyMap = projectinfoMapper . countMoneyById ( p . getId ( ) ) ;
if ( moneyMap ! = null & & ! moneyMap . isEmpty ( ) ) {
contractMoney = Optional . ofNullable ( moneyMap . get ( "contractMoney" ) ) . orElse ( new BigDecimal ( "0" ) ) ;
contractCentralMoney = Optional . ofNullable ( moneyMap . get ( "contractCentralMoney" ) ) . orElse ( new BigDecimal ( "0" ) ) ;
}
projectDetail . setContractMoney ( contractMoney ) ;
projectDetail . setContractCentralMoney ( contractCentralMoney ) ;
//当前阶段
LambdaQueryWrapper < HuzhouPlaninfo > query = new LambdaQueryWrapper < > ( ) ;
query . eq ( HuzhouPlaninfo : : getProjectId , p . getId ( ) ) ;
query . eq ( HuzhouPlaninfo : : getIsfinish , "2" ) ;
Map < String , HuzhouPlaninfo > planMap = planinfoService . list ( query ) . stream ( ) . collect ( Collectors . toMap ( x - > x . getTaskLevel ( ) , o - > o ) ) ;
String taskName ;
if ( moneyMap ! = null & & ! moneyMap . isEmpty ( ) ) {
List < String [ ] > splitList = planMap . keySet ( ) . stream ( ) . map ( x - > x . split ( "\\." ) ) . collect ( Collectors . toList ( ) ) ;
List < String [ ] > keyList = splitList . stream ( ) . filter ( x - > x . length = = 1 ) . collect ( Collectors . toList ( ) ) ;
int max = keyList . stream ( ) . mapToInt ( x - > Integer . parseInt ( x [ 0 ] ) ) . summaryStatistics ( ) . getMax ( ) ;
String key = String . valueOf ( max ) ;
taskName = planMap . get ( key ) . getTaskName ( ) ;
} else {
taskName = "项目立项阶段" ;
}
projectDetail . setProjectStage ( taskName ) ;
// 进度
List < String > projectIds = new ArrayList < > ( ) ;
projectIds . add ( p . getId ( ) ) ;
ProjectProgressOV progress = this . getProgress ( projectIds ) ;
projectDetail . setProjectProgress ( progress . getProjectProgress ( ) ) ;
records . add ( projectDetail ) ;
}
result . setCurrent ( pageNo ) . setSize ( pageSize ) . setRecords ( records ) . setTotal ( projectAndChildInfoPageList . getTotal ( ) ) ;
return result ;
}
}