@@ -1700,4 +1700,269 @@ public class DemandServiceImpl extends BaseService implements IDemandService {
return SdmResponse . success ( ) ;
}
@Override
public SdmResponse listNoPermission ( SpdmDemandListReq req ) {
JSONObject jsonObject = new JSONObject ( ) ;
jsonObject . put ( " data " , new ArrayList < > ( ) ) ;
List < SpdmDemandVo > demandList = mapper . getDemandListNoPermission ( req ) ;
if ( CollectionUtils . isEmpty ( demandList ) ) {
log . error ( " 未查询到需求 " ) ;
return SdmResponse . success ( jsonObject ) ;
}
// 0: 我发起的 1: 我确认的
Integer type = req . getType ( ) ;
if ( type ! = 0 & & type ! = 1 ) {
log . error ( " type必须为0或1 " ) ;
return SdmResponse . success ( jsonObject ) ;
}
List < SpdmDemandMemberVo > demandMemberVoList = mapper . getMemberList ( demandList . stream ( ) . map ( SpdmDemandVo : : getUuid ) . toList ( ) , null ) ;
List < SpdmTaskVo > taskList = taskMapper . getTaskListByDemandIdList ( demandList . stream ( ) . map ( SpdmDemandVo : : getUuid ) . toList ( ) ) ;
Map < String , List < SpdmTaskVo > > taskMap = Map . of ( ) ;
if ( CollectionUtils . isNotEmpty ( taskList ) ) {
taskMap = taskList . stream ( ) . collect ( Collectors . groupingBy ( SpdmTaskVo : : getDemandId ) ) ;
}
// 需求的状态和进度需要根据任务来确定
if ( StringUtils . isNotBlank ( req . getAchieveStatus ( ) ) | | StringUtils . isNotBlank ( req . getDemandStatus ( ) ) ) {
if ( StringUtils . isNotBlank ( req . getAchieveStatus ( ) ) ) {
String achieveStatus = req . getAchieveStatus ( ) ;
List < String > achieveStatusList = Arrays . stream ( achieveStatus . split ( " , " ) ) . toList ( ) ;
if ( CollectionUtils . isEmpty ( taskList ) ) {
demandList = demandList . stream ( ) . filter ( firstDemand - > achieveStatusList . contains ( firstDemand . getAchieveStatus ( ) ) ) . toList ( ) ;
} else {
List < SpdmTaskVo > eachTaskList ;
String eachStatus ;
List < SpdmDemandVo > newDemandList = new ArrayList < > ( ) ;
for ( SpdmDemandVo demand : demandList ) {
eachTaskList = taskMap . get ( demand . getUuid ( ) ) ;
if ( CollectionUtils . isEmpty ( eachTaskList ) ) {
log . info ( " 当前需求:{}没有关联的任务 " , demand . getId ( ) ) ;
if ( achieveStatusList . contains ( demand . getAchieveStatus ( ) ) ) {
newDemandList . add ( demand ) ;
}
} else {
if ( eachTaskList . stream ( ) . map ( SpdmTaskVo : : getAchieveStatus ) . toList ( ) . contains ( TaskAchieveStatusEnum . UNQUALIFIED . getCode ( ) ) ) {
eachStatus = TaskAchieveStatusEnum . UNQUALIFIED . getCode ( ) ;
} else if ( eachTaskList . stream ( ) . map ( SpdmTaskVo : : getAchieveStatus ) . toList ( ) . contains ( TaskAchieveStatusEnum . NO_CALCULATE . getCode ( ) ) ) {
eachStatus = TaskAchieveStatusEnum . NO_CALCULATE . getCode ( ) ;
} else {
eachStatus = TaskAchieveStatusEnum . QUALIFIED . getCode ( ) ;
}
log . info ( " 当前需求:{}的风险状态为:{} " , demand . getId ( ) , eachStatus ) ;
if ( ! achieveStatusList . contains ( eachStatus ) ) {
continue ;
}
newDemandList . add ( demand ) ;
}
}
demandList = newDemandList ;
}
}
if ( CollectionUtils . isEmpty ( demandList ) ) {
log . error ( " demandList2为空 " ) ;
return SdmResponse . success ( jsonObject ) ;
}
if ( StringUtils . isNotBlank ( req . getDemandStatus ( ) ) ) {
String demandStatus = req . getDemandStatus ( ) ;
List < String > demandStatusList = Arrays . stream ( demandStatus . split ( " , " ) ) . toList ( ) ;
if ( CollectionUtils . isEmpty ( taskList ) ) {
demandList = demandList . stream ( ) . filter ( firstDemand - > demandStatusList . contains ( firstDemand . getDemandStatus ( ) ) ) . toList ( ) ;
} else {
List < SpdmTaskVo > eachTaskList ;
String eachStatus = " " ;
List < SpdmDemandVo > newDemandList = new ArrayList < > ( ) ;
for ( SpdmDemandVo demand : demandList ) {
eachTaskList = taskMap . get ( demand . getUuid ( ) ) ;
if ( CollectionUtils . isEmpty ( eachTaskList ) ) {
log . info ( " 当前需求:{}没有关联的任务 " , demand . getId ( ) ) ;
if ( demandStatusList . contains ( demand . getDemandStatus ( ) ) ) {
newDemandList . add ( demand ) ;
}
} else {
// 有进行中就是进行中,
// 没有进行中,有暂停就是暂停
// 没有进行中和暂停,有延期就是延期
// 全部已完成就已完成
// 全部关闭就已关闭
// 全部未开始就未开始
// 全部驳回就驳回
// 其他 进行中
List < String > statusList = eachTaskList . stream ( ) . map ( SpdmTaskVo : : getExeStatus ) . toList ( ) ;
if ( statusList . contains ( TaskExeStatusEnum . IN_PROGRESS . getCode ( ) ) ) {
eachStatus = TaskExeStatusEnum . IN_PROGRESS . getCode ( ) ;
} else if ( statusList . contains ( TaskExeStatusEnum . PAUSED . getCode ( ) ) ) {
eachStatus = TaskExeStatusEnum . PAUSED . getCode ( ) ;
} else if ( statusList . contains ( TaskExeStatusEnum . POSTPONED . getCode ( ) ) ) {
eachStatus = TaskExeStatusEnum . POSTPONED . getCode ( ) ;
} else if ( statusList . stream ( ) . allMatch ( status - > TaskExeStatusEnum . COMPLETED . getCode ( ) . equals ( status ) ) ) {
eachStatus = TaskExeStatusEnum . COMPLETED . getCode ( ) ;
} else if ( statusList . stream ( ) . allMatch ( status - > TaskExeStatusEnum . CLOSED . getCode ( ) . equals ( status ) ) ) {
eachStatus = TaskExeStatusEnum . CLOSED . getCode ( ) ;
} else if ( statusList . stream ( ) . allMatch ( status - > TaskExeStatusEnum . NO_STARTED . getCode ( ) . equals ( status ) ) ) {
eachStatus = TaskExeStatusEnum . NO_STARTED . getCode ( ) ;
} else if ( statusList . stream ( ) . allMatch ( status - > TaskExeStatusEnum . REJECTED . getCode ( ) . equals ( status ) ) ) {
eachStatus = TaskExeStatusEnum . REJECTED . getCode ( ) ;
} else {
eachStatus = TaskExeStatusEnum . IN_PROGRESS . getCode ( ) ;
}
log . info ( " 当前需求:{}的需求状态为:{} " , demand . getId ( ) , eachStatus ) ;
if ( ! demandStatusList . contains ( eachStatus ) ) {
continue ;
}
newDemandList . add ( demand ) ;
}
}
demandList = newDemandList ;
}
}
}
if ( CollectionUtils . isEmpty ( demandList ) ) {
log . error ( " demandList3为空 " ) ;
return SdmResponse . success ( jsonObject ) ;
}
jsonObject . put ( " currentPage " , req . getCurrent ( ) ) ;
jsonObject . put ( " pageSize " , req . getSize ( ) ) ;
jsonObject . put ( " total " , demandList . size ( ) ) ;
demandList = demandList . stream ( ) . skip ( ( long ) ( req . getCurrent ( ) - 1 ) * req . getSize ( ) ) . limit ( req . getSize ( ) ) . toList ( ) ;
if ( CollectionUtils . isEmpty ( demandList ) ) {
log . error ( " demandList4为空 " ) ;
return SdmResponse . success ( jsonObject ) ;
}
List < SpdmTaskVo > eachTaskList ;
String eachAchieveStatus ;
String eachExeStatus ;
for ( SpdmDemandVo demand : demandList ) {
eachTaskList = taskMap . get ( demand . getUuid ( ) ) ;
if ( CollectionUtils . isEmpty ( eachTaskList ) ) {
demand . setAchieveStatus ( " 0 " ) ;
continue ;
}
if ( eachTaskList . stream ( ) . map ( SpdmTaskVo : : getAchieveStatus ) . toList ( ) . contains ( TaskAchieveStatusEnum . UNQUALIFIED . getCode ( ) ) ) {
eachAchieveStatus = TaskAchieveStatusEnum . UNQUALIFIED . getCode ( ) ;
} else if ( eachTaskList . stream ( ) . map ( SpdmTaskVo : : getAchieveStatus ) . toList ( ) . contains ( TaskAchieveStatusEnum . NO_CALCULATE . getCode ( ) ) ) {
eachAchieveStatus = TaskAchieveStatusEnum . NO_CALCULATE . getCode ( ) ;
} else {
eachAchieveStatus = TaskAchieveStatusEnum . QUALIFIED . getCode ( ) ;
}
demand . setAchieveStatus ( eachAchieveStatus ) ;
List < String > statusList = eachTaskList . stream ( ) . map ( SpdmTaskVo : : getExeStatus ) . toList ( ) ;
if ( statusList . contains ( TaskExeStatusEnum . IN_PROGRESS . getCode ( ) ) ) {
eachExeStatus = TaskExeStatusEnum . IN_PROGRESS . getCode ( ) ;
} else if ( statusList . contains ( TaskExeStatusEnum . PAUSED . getCode ( ) ) ) {
eachExeStatus = TaskExeStatusEnum . PAUSED . getCode ( ) ;
} else if ( statusList . contains ( TaskExeStatusEnum . POSTPONED . getCode ( ) ) ) {
eachExeStatus = TaskExeStatusEnum . POSTPONED . getCode ( ) ;
} else if ( statusList . stream ( ) . allMatch ( status - > TaskExeStatusEnum . COMPLETED . getCode ( ) . equals ( status ) ) ) {
eachExeStatus = TaskExeStatusEnum . COMPLETED . getCode ( ) ;
} else if ( statusList . stream ( ) . allMatch ( status - > TaskExeStatusEnum . CLOSED . getCode ( ) . equals ( status ) ) ) {
eachExeStatus = TaskExeStatusEnum . CLOSED . getCode ( ) ;
} else if ( statusList . stream ( ) . allMatch ( status - > TaskExeStatusEnum . NO_STARTED . getCode ( ) . equals ( status ) ) ) {
eachExeStatus = TaskExeStatusEnum . NO_STARTED . getCode ( ) ;
} else if ( statusList . stream ( ) . allMatch ( status - > TaskExeStatusEnum . REJECTED . getCode ( ) . equals ( status ) ) ) {
eachExeStatus = TaskExeStatusEnum . REJECTED . getCode ( ) ;
} else {
eachExeStatus = TaskExeStatusEnum . IN_PROGRESS . getCode ( ) ;
}
demand . setDemandStatus ( eachExeStatus ) ;
}
Map < String , List < SpdmDemandMemberVo > > demandMemberMap = Map . of ( ) ;
if ( CollectionUtils . isNotEmpty ( demandMemberVoList ) ) {
demandMemberMap = demandMemberVoList . stream ( ) . collect ( Collectors . groupingBy ( SpdmDemandMemberVo : : getDemandId ) ) ;
}
List < SpdmDemandMemberVo > eachDemandMemberList ;
List < String > nodeIdList = new ArrayList < > ( ) ;
List < String > projectIdList = demandList . stream ( ) . map ( SpdmDemandVo : : getProjectId ) . toList ( ) ;
if ( CollectionUtils . isNotEmpty ( projectIdList ) ) {
nodeIdList . addAll ( projectIdList ) ;
}
List < String > phaseIdList = demandList . stream ( ) . map ( SpdmDemandVo : : getPhaseId ) . toList ( ) ;
if ( CollectionUtils . isNotEmpty ( phaseIdList ) ) {
nodeIdList . addAll ( phaseIdList ) ;
}
Map < String , List < SpdmNodeVo > > nodeMap = Map . of ( ) ;
if ( CollectionUtils . isNotEmpty ( nodeIdList ) ) {
List < SpdmNodeVo > nodeList = nodeMapper . getNodeListByIds ( nodeIdList ) ;
if ( CollectionUtils . isNotEmpty ( nodeList ) ) {
nodeMap = nodeList . stream ( ) . collect ( Collectors . groupingBy ( SpdmNodeVo : : getUuid ) ) ;
}
}
List < Long > userIdList = new ArrayList < > ( ) ;
if ( CollectionUtils . isNotEmpty ( demandMemberVoList ) ) {
userIdList = demandMemberVoList . stream ( ) . map ( SpdmDemandMemberVo : : getUserId ) . toList ( ) ;
}
Map < Long , List < CIDUserResp > > userMap = Map . of ( ) ;
if ( CollectionUtils . isNotEmpty ( userIdList ) ) {
SdmResponse < List < CIDUserResp > > cidUserResp = sysUserFeignClient . listUserByIds ( UserQueryReq . builder ( ) . userIds ( userIdList ) . build ( ) ) ;
List < CIDUserResp > userList = cidUserResp . getData ( ) ;
if ( CollectionUtils . isNotEmpty ( userList ) ) {
userMap = userList . stream ( ) . collect ( Collectors . groupingBy ( CIDUserResp : : getUserId ) ) ;
}
}
List < String > demandIdList = demandList . stream ( ) . map ( SpdmDemandVo : : getUuid ) . toList ( ) ;
List < SpdmDemandExtraVo > demandExtraList = mapper . getDemandExtraList ( demandIdList ) ;
Map < String , List < SpdmDemandExtraVo > > demandExtraMap = Map . of ( ) ;
if ( CollectionUtils . isNotEmpty ( demandExtraList ) ) {
demandExtraMap = demandExtraList . stream ( ) . collect ( Collectors . groupingBy ( SpdmDemandExtraVo : : getDemandId ) ) ;
}
for ( SpdmDemandVo spdmDemandVo : demandList ) {
spdmDemandVo . setExtras ( demandExtraMap . get ( spdmDemandVo . getUuid ( ) ) ) ;
eachTaskList = taskMap . get ( spdmDemandVo . getUuid ( ) ) ;
spdmDemandVo . setProgress ( CollectionUtils . isEmpty ( eachTaskList ) ? 0 : eachTaskList . stream ( ) . mapToInt ( SpdmTaskVo : : getProgress ) . sum ( ) / eachTaskList . size ( ) ) ;
if ( StringUtils . isNotBlank ( spdmDemandVo . getProjectId ( ) ) ) {
spdmDemandVo . setProjectName ( CollectionUtils . isNotEmpty ( nodeMap . get ( spdmDemandVo . getProjectId ( ) ) ) ? nodeMap . get ( spdmDemandVo . getProjectId ( ) ) . get ( 0 ) . getNodeName ( ) : " " ) ;
}
if ( StringUtils . isNotBlank ( spdmDemandVo . getPhaseId ( ) ) ) {
spdmDemandVo . setPhaseName ( CollectionUtils . isNotEmpty ( nodeMap . get ( spdmDemandVo . getPhaseId ( ) ) ) ? nodeMap . get ( spdmDemandVo . getPhaseId ( ) ) . get ( 0 ) . getNodeName ( ) : " " ) ;
}
if ( StringUtils . isNotBlank ( spdmDemandVo . getMachineId ( ) ) ) {
spdmDemandVo . setMachineName ( CollectionUtils . isNotEmpty ( nodeMap . get ( spdmDemandVo . getMachineId ( ) ) ) ? nodeMap . get ( spdmDemandVo . getMachineId ( ) ) . get ( 0 ) . getNodeName ( ) : " " ) ;
}
if ( StringUtils . isNotBlank ( spdmDemandVo . getWorkspaceId ( ) ) ) {
spdmDemandVo . setWorkspaceName ( CollectionUtils . isNotEmpty ( nodeMap . get ( spdmDemandVo . getWorkspaceId ( ) ) ) ? nodeMap . get ( spdmDemandVo . getWorkspaceId ( ) ) . get ( 0 ) . getNodeName ( ) : " " ) ;
}
eachDemandMemberList = demandMemberMap . get ( spdmDemandVo . getUuid ( ) ) ;
if ( CollectionUtils . isEmpty ( eachDemandMemberList ) ) {
continue ;
}
List < CIDUserResp > spdmPUserVoList = new ArrayList < > ( ) ;
for ( Long userId : eachDemandMemberList . stream ( ) . filter ( member - > MemberTypeEnum . PRINCIPAL . getCode ( ) . equals ( member . getType ( ) ) ) . map ( SpdmDemandMemberVo : : getUserId ) . toList ( ) ) {
if ( ObjectUtils . isNotEmpty ( userId ) & & CollectionUtils . isNotEmpty ( userMap . get ( userId ) ) ) {
spdmPUserVoList . addAll ( userMap . get ( userId ) ) ;
}
}
spdmDemandVo . setPMemberList ( spdmPUserVoList ) ;
List < CIDUserResp > spdmEUserVoList = new ArrayList < > ( ) ;
for ( Long userId : eachDemandMemberList . stream ( ) . filter ( member - > MemberTypeEnum . EXECUTOR . getCode ( ) . equals ( member . getType ( ) ) ) . map ( SpdmDemandMemberVo : : getUserId ) . toList ( ) ) {
if ( ObjectUtils . isNotEmpty ( userId ) & & CollectionUtils . isNotEmpty ( userMap . get ( userId ) ) ) {
spdmEUserVoList . addAll ( userMap . get ( userId ) ) ;
}
}
spdmDemandVo . setEMemberList ( spdmEUserVoList ) ;
List < CIDUserResp > spdmTUserVoList = new ArrayList < > ( ) ;
for ( Long userId : eachDemandMemberList . stream ( ) . filter ( member - > MemberTypeEnum . THREED . getCode ( ) . equals ( member . getType ( ) ) ) . map ( SpdmDemandMemberVo : : getUserId ) . toList ( ) ) {
if ( ObjectUtils . isNotEmpty ( userId ) & & CollectionUtils . isNotEmpty ( userMap . get ( userId ) ) ) {
spdmTUserVoList . addAll ( userMap . get ( userId ) ) ;
}
}
spdmDemandVo . setTMemberList ( spdmTUserVoList ) ;
List < CIDUserResp > spdmAUserVoList = new ArrayList < > ( ) ;
for ( Long userId : eachDemandMemberList . stream ( ) . filter ( member - > MemberTypeEnum . ATTENTION . getCode ( ) . equals ( member . getType ( ) ) ) . map ( SpdmDemandMemberVo : : getUserId ) . toList ( ) ) {
if ( ObjectUtils . isNotEmpty ( userId ) & & CollectionUtils . isNotEmpty ( userMap . get ( userId ) ) ) {
spdmAUserVoList . addAll ( userMap . get ( userId ) ) ;
}
}
spdmDemandVo . setAMemberList ( spdmAUserVoList ) ;
}
jsonObject . put ( " data " , demandList ) ;
return SdmResponse . success ( jsonObject ) ;
}
}