@ -9,6 +9,7 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage ;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page ;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl ;
import com.easy.admin.auth.model.SysRole ;
import com.easy.admin.auth.model.SysUser ;
import com.easy.admin.auth.service.SysUserService ;
import com.easy.admin.common.core.common.select.Select ;
@ -23,6 +24,7 @@ import com.easy.admin.modules.huzhou.vo.*;
import com.easy.admin.sys.model.SysDict ;
import com.easy.admin.sys.service.SysDictService ;
import com.easy.admin.util.ShiroUtil ;
import org.activiti.engine.RuntimeService ;
import org.activiti.engine.TaskService ;
import org.activiti.engine.runtime.ProcessInstance ;
@ -100,7 +102,9 @@ public class HuzhouProjectinfoServiceImpl extends ServiceImpl<HuzhouProjectinfoM
@Autowired
HuzhouPlaninfoMapper planinfoMapper ;
@Autowired
private SysUserService userService ;
private HuzhouContractinfoMapper huzhouContractinfoMapper ;
@Autowired
private HuzhouProjectinfoMoneyMapper projectinfoMoneyMapper ;
@Override
@ -1454,7 +1458,8 @@ public class HuzhouProjectinfoServiceImpl extends ServiceImpl<HuzhouProjectinfoM
@Override
public IPage < ProjectSummaryOV > getProjectSummaryPage ( HuzhouProjectinfo projectInfo , Integer pageNo , Integer pageSize , String orderBy , String orderDir ) {
IPage < ProjectSummaryOV > result = new Page < > ( ) ;
IPage result = new Page < > ( ) ;
pageSize = 10000 ;
List < String > dutyWorkplaceList = List . of ( "湖州市第一人民医院" , "湖州市中心医院" , "湖州市第三人民医院" , "湖州市妇幼保健院" , "湖州市中医院" ,
"医政处" , "妇幼处" , "科教处" , "体改处" , "规信处" , "中医处" , "财审处" , "机关党委" , "人事处" ) ;
List < String > adminDivisionList = List . of ( "吴兴区" , "南浔区" , "德清县" , "长兴县" , "安吉县" ) ;
@ -1506,6 +1511,66 @@ public class HuzhouProjectinfoServiceImpl extends ServiceImpl<HuzhouProjectinfoM
List < ProjectSummaryOV > currentPageData = projectSummaryPageList . subList ( fromIndex , Math . min ( fromIndex + pageSize , projectSummaryPageList . size ( ) ) ) ;
result . setSize ( pageSize ) . setCurrent ( pageNo ) . setRecords ( currentPageData ) . setTotal ( projectSummaryPageList . size ( ) ) ;
}
List < ProjectSummaryOV > records = result . getRecords ( ) ;
//找出DutyWorkplace 是"湖州市第一人民医院","湖州市中心医院","湖州市第三人民医院","湖州市妇幼保健院", "湖州市中医院" 为一组list 分组叫市委建委
//找出DutyWorkplace是"医政处","妇幼处","科教处","体改处","规信处","中医处","财审处","机关党委","人事处" 为一组list 分组叫市级医院
//找出DutyWorkplace 是 "吴兴区","南浔区","德清县","长兴县","安吉县" 为一组list 分组叫区县
//分组后的先后顺序和原本一致
//创建一个List<map> map key有centralMoney,totalMoney,projectNum 是各组的和,projectProgress 是各组的平均值 children 是各组的list
// 定义分组条件
Set < String > shijiYiyuan = new HashSet < > ( Arrays . asList (
"湖州市第一人民医院" , "湖州市中心医院" , "湖州市第三人民医院" , "湖州市妇幼保健院" , "湖州市中医院"
) ) ;
Set < String > shiweiJianwei = new HashSet < > ( Arrays . asList (
"医政处" , "妇幼处" , "科教处" , "体改处" , "规信处" , "中医处" , "财审处" , "机关党委" , "人事处"
) ) ;
Set < String > quxian = new HashSet < > ( Arrays . asList (
"吴兴区" , "南浔区" , "德清县" , "长兴县" , "安吉县"
) ) ;
// 分组
Map < String , List < ProjectSummaryOV > > groupedRecords = new HashMap < > ( ) ;
groupedRecords . put ( "市委建委" , records . stream ( ) . filter ( r - > shiweiJianwei . contains ( r . getDutyWorkplace ( ) ) ) . collect ( Collectors . toList ( ) ) ) ;
groupedRecords . put ( "市级医院" , records . stream ( ) . filter ( r - > shijiYiyuan . contains ( r . getDutyWorkplace ( ) ) ) . collect ( Collectors . toList ( ) ) ) ;
groupedRecords . put ( "区县" , records . stream ( ) . filter ( r - > quxian . contains ( r . getDutyWorkplace ( ) ) ) . collect ( Collectors . toList ( ) ) ) ;
// 创建最终的 List<Map>
List < Map < String , Object > > resultList = new ArrayList < > ( ) ;
for ( Map . Entry < String , List < ProjectSummaryOV > > entry : groupedRecords . entrySet ( ) ) {
String groupName = entry . getKey ( ) ;
List < ProjectSummaryOV > groupList = entry . getValue ( ) ;
BigDecimal totalCentralMoney = groupList . stream ( )
. map ( ProjectSummaryOV : : getCentralMoney )
. reduce ( BigDecimal . ZERO , BigDecimal : : add ) ;
BigDecimal totalTotalMoney = groupList . stream ( )
. map ( ProjectSummaryOV : : getTotalMoney )
. reduce ( BigDecimal . ZERO , BigDecimal : : add ) ;
int totalProjectNum = groupList . stream ( )
. mapToInt ( ProjectSummaryOV : : getProjectNum )
. sum ( ) ;
double averageProjectProgress = groupList . stream ( )
. map ( ProjectSummaryOV : : getProjectProgress )
. map ( Double : : parseDouble )
. mapToDouble ( Double : : doubleValue )
. average ( )
. orElse ( 0 . 0 ) ;
Map < String , Object > groupInfo = new HashMap < > ( ) ;
groupInfo . put ( "dutyWorkplace" , groupName ) ;
groupInfo . put ( "centralMoney" , totalCentralMoney ) ;
groupInfo . put ( "totalMoney" , totalTotalMoney ) ;
groupInfo . put ( "projectNum" , totalProjectNum ) ;
groupInfo . put ( "projectProgress" , averageProjectProgress ) ;
groupInfo . put ( "children" , groupList ) ;
resultList . add ( groupInfo ) ;
}
result . setRecords ( resultList ) ;
} else {
result . setSize ( pageSize ) . setCurrent ( pageNo ) . setRecords ( Collections . emptyList ( ) ) . setTotal ( 0 ) ;
}
@ -1776,6 +1841,8 @@ public class HuzhouProjectinfoServiceImpl extends ServiceImpl<HuzhouProjectinfoM
List < BigDecimal > contractMoneyList = originalList . stream ( ) . map ( x - > x . getContractMoney ( ) ) . collect ( Collectors . toList ( ) ) ;
List < BigDecimal > contractCentralMoneyList = originalList . stream ( ) . map ( x - > x . getContractCentralMoney ( ) ) . collect ( Collectors . toList ( ) ) ;
List < String > projectProgressList = originalList . stream ( ) . map ( x - > x . getProjectProgress ( ) ) . collect ( Collectors . toList ( ) ) ;
List < BigDecimal > approvalCentralMoneyList = originalList . stream ( ) . map ( x - > x . getApprovalCentralMoney ( ) ) . collect ( Collectors . toList ( ) ) ;
List < BigDecimal > approvalTotalMoneyList = originalList . stream ( ) . map ( x - > x . getApprovalTotalMoney ( ) ) . collect ( Collectors . toList ( ) ) ;
List < ProjectSummaryOV > empList = new ArrayList < > ( ) ;
if ( Objects . equals ( orderBy , "projectNum" ) & & Objects . equals ( orderDir , "descend" ) ) {
@ -1830,6 +1897,14 @@ public class HuzhouProjectinfoServiceImpl extends ServiceImpl<HuzhouProjectinfoM
sortedList = projectProgressList . isEmpty ( ) ? originalList : originalList . stream ( ) . filter ( x - > x . getProjectProgress ( ) ! = null ) . sorted ( Comparator . comparing ( ProjectSummaryOV : : getProjectProgress ) . reversed ( ) ) . collect ( Collectors . toList ( ) ) ;
empList = originalList . stream ( ) . filter ( x - > x . getProjectProgress ( ) = = null ) . collect ( Collectors . toList ( ) ) ;
sortedList . addAll ( empList ) ;
} else if ( Objects . equals ( orderBy , "approvalCentralMoney" ) & & Objects . equals ( orderDir , "descend" ) ) {
sortedList = approvalCentralMoneyList . isEmpty ( ) ? originalList : originalList . stream ( ) . filter ( x - > x . getApprovalCentralMoney ( ) ! = null ) . sorted ( Comparator . comparing ( ProjectSummaryOV : : getApprovalCentralMoney ) . reversed ( ) ) . collect ( Collectors . toList ( ) ) ;
empList = originalList . stream ( ) . filter ( x - > x . getApprovalCentralMoney ( ) = = null ) . collect ( Collectors . toList ( ) ) ;
sortedList . addAll ( empList ) ;
} else if ( Objects . equals ( orderBy , "approvalTotalMoney" ) & & Objects . equals ( orderDir , "ascend" ) ) {
sortedList = approvalCentralMoneyList . isEmpty ( ) ? originalList : originalList . stream ( ) . filter ( x - > x . getApprovalCentralMoney ( ) ! = null ) . sorted ( Comparator . comparing ( ProjectSummaryOV : : getApprovalCentralMoney ) . reversed ( ) ) . collect ( Collectors . toList ( ) ) ;
empList = originalList . stream ( ) . filter ( x - > x . getApprovalCentralMoney ( ) = = null ) . collect ( Collectors . toList ( ) ) ;
sortedList . addAll ( empList ) ;
}
return sortedList ;
}
@ -2328,4 +2403,81 @@ public class HuzhouProjectinfoServiceImpl extends ServiceImpl<HuzhouProjectinfoM
return result ;
}
@Override
public MoneyDetailOV queryMoneyDetail ( String projectid ) {
MoneyDetailOV moneyDetailOV = new MoneyDetailOV ( ) ;
HuzhouProjectinfo huzhouProjectinfo = projectinfoMapper . selectById ( projectid ) ;
HuzhouProjectinfoMoney huzhouProjectinfoMoney = projectinfoMoneyMapper . selectById ( projectid ) ;
if ( huzhouProjectinfo ! = null ) {
BeanUtils . copyProperties ( huzhouProjectinfo , moneyDetailOV ) ;
}
if ( huzhouProjectinfoMoney ! = null ) {
BeanUtils . copyProperties ( huzhouProjectinfoMoney , moneyDetailOV ) ;
}
moneyDetailOV . setProjectid ( projectid ) ;
return moneyDetailOV ;
}
@Override
public List < ProjectContactShouYeOV > projectContactShouYe ( ) {
ArrayList < ProjectContactShouYeOV > projectContactShouYeOVS = new ArrayList < > ( ) ;
HuzhouProjectinfo projectInfo = new HuzhouProjectinfo ( ) ;
projectInfo . setStage ( "0" ) ;
ProjectInfoAuthSelect projectInfoAuthSelect = CommonUtils . setGetProjectInfoAuth ( projectInfo ) ;
List < HuzhouProjectinfoOV > projectinfoOVList = projectinfoMapper . getProjectAndChildInfoPageList ( projectInfoAuthSelect ) ;
if ( projectinfoOVList . size ( ) > 0 ) {
for ( HuzhouProjectinfoOV huzhouProjectinfoOV : projectinfoOVList ) {
ProjectContactShouYeOV projectContactShouYeOV = new ProjectContactShouYeOV ( ) ;
projectContactShouYeOV . setProjectName ( huzhouProjectinfoOV . getProjectName ( ) ) ;
ArrayList < HuzhouPlaninfoOV > planInfoMainTimelineList = planinfoService . getPlanInfoMainTimelineList ( huzhouProjectinfoOV . getId ( ) ) ;
if ( planInfoMainTimelineList . size ( ) > 0 ) {
// 创建一个新的 "项目申报阶段" 项
HuzhouPlaninfoOV newPlanInfo = new HuzhouPlaninfoOV ( ) ;
newPlanInfo . setTaskName ( "项目申报阶段" ) ;
newPlanInfo . setPercent ( "100" ) ;
HuzhouPlaninfoOV childPlanInfo = new HuzhouPlaninfoOV ( ) ;
childPlanInfo . setTaskName ( "项目申报完成" ) ;
childPlanInfo . setIsfinish ( "2" ) ;
newPlanInfo . setChildren ( Arrays . asList ( childPlanInfo ) ) ;
// 过滤掉 "绩效评估阶段" 的项
List < HuzhouPlaninfoOV > filteredList = planInfoMainTimelineList . stream ( )
. filter ( planInfo - > ! "绩效评估阶段" . equals ( planInfo . getTaskName ( ) ) )
. collect ( Collectors . toList ( ) ) ;
// 在列表最前面添加 "项目申报阶段" 项
ArrayList < HuzhouPlaninfoOV > updatedList = new ArrayList < > ( ) ;
updatedList . add ( newPlanInfo ) ;
updatedList . addAll ( filteredList ) ;
projectContactShouYeOV . setProjectProgressDetail ( updatedList ) ; //要处理一下
projectContactShouYeOV . setProjectTotalProgress ( planInfoMainTimelineList . get ( 0 ) . getTotalPercent ( ) ) ;
} else {
projectContactShouYeOV . setProjectProgressDetail ( new ArrayList < > ( ) ) ;
projectContactShouYeOV . setProjectTotalProgress ( "0" ) ;
}
//获取项目合同信息
Map < String , BigDecimal > totalMap = contractinfoMapper . getTotalByProjectIds ( Arrays . asList ( huzhouProjectinfoOV . getId ( ) ) ) ;
//获取已支付金额
Map < String , BigDecimal > paymentsMap = contractinfoMapper . getPaymentsByProjectIds ( Arrays . asList ( huzhouProjectinfoOV . getId ( ) ) ) ;
if ( totalMap ! = null & & paymentsMap ! = null ) {
BigDecimal totalAcount = totalMap . get ( "totalAcount" ) ;
BigDecimal totalcentralAcount = totalMap . get ( "centralAcount" ) ;
BigDecimal totalPayment = paymentsMap . get ( "totalPayment" ) ;
BigDecimal centralPayment = paymentsMap . get ( "centralPayment" ) ;
projectContactShouYeOV . setProjectFundPaymentProgress ( totalPayment . divide ( totalAcount , 4 , BigDecimal . ROUND_HALF_UP ) . toString ( ) ) ;
projectContactShouYeOV . setCentralFundPaymentSituation ( centralPayment . divide ( totalcentralAcount , 4 , BigDecimal . ROUND_HALF_UP ) . toString ( ) ) ;
projectContactShouYeOVS . add ( projectContactShouYeOV ) ;
} else {
projectContactShouYeOV . setProjectFundPaymentProgress ( "0" ) ;
projectContactShouYeOV . setCentralFundPaymentSituation ( "0" ) ;
projectContactShouYeOVS . add ( projectContactShouYeOV ) ;
}
}
}
return projectContactShouYeOVS ;
}
}