This commit is contained in:
zt
2025-04-03 09:56:56 +08:00
parent bfc839fa8d
commit 6a6adcf8b2
26 changed files with 521 additions and 38 deletions

View File

@ -4,9 +4,7 @@ package com.ruoyi.zbf.service;
import com.ruoyi.common.core.mybatisplus.core.IServicePlus;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.fbs.domain.dto.FbsProjectListDTO;
import com.ruoyi.fbs.domain.vo.FbsProjectDetailVO;
import com.ruoyi.fbs.domain.vo.FbsProjectListCountVO;
import com.ruoyi.fbs.domain.vo.FbsProjectListVO;
import com.ruoyi.fbs.domain.vo.*;
import com.ruoyi.zbf.bo.ZbfProjectQueryBo;
import com.ruoyi.zbf.domain.ZbfProject;
import com.ruoyi.zbf.domain.dto.ZbfProjectAddDTO;
@ -97,6 +95,11 @@ public interface IZbfProjectService extends IServicePlus<ZbfProject> {
*/
FbsProjectDetailVO signUpDetail(Long projectId);
/**
* 分包商查看所有申请项目详情
*/
FbsProjectDetailVO applyAllDetail(Long projectId);
/**
* 分包商查看已申请项目详情
*/
@ -107,6 +110,18 @@ public interface IZbfProjectService extends IServicePlus<ZbfProject> {
*/
FbsProjectDetailVO joinOrCompleteDetail(Long projectId);
/**
* 分包商查询项目详情-用工进度
*/
FbsProjectTaskDetailProgressVO fbsProgress(Long projectId);
/**
* 分包商查询项目详情-结算情况
*/
FbsProjectTaskDetailWageVO fbsWage(Long projectId);
/**
* 总包方新增项目
*/
@ -121,4 +136,7 @@ public interface IZbfProjectService extends IServicePlus<ZbfProject> {
* 总包方查询自建项目统计
*/
ZbfProjectCountVO projectCount();
}

View File

@ -6,14 +6,22 @@ import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.bgt.domain.BgtProjectTaskProgress;
import com.ruoyi.bgt.domain.BgtWageApplication;
import com.ruoyi.bgt.service.IBgtProjectTaskProgressService;
import com.ruoyi.bgt.service.IBgtWageApplicationService;
import com.ruoyi.common.core.mybatisplus.core.ServicePlusImpl;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.ProjectStatus;
import com.ruoyi.common.enums.SubcontractingApplyStatus;
import com.ruoyi.common.utils.PageUtils;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.fbs.domain.FbsProjectTask;
import com.ruoyi.fbs.domain.FbsWageApplication;
import com.ruoyi.fbs.domain.dto.FbsProjectListDTO;
import com.ruoyi.fbs.domain.vo.*;
import com.ruoyi.fbs.service.IFbsProjectTaskService;
import com.ruoyi.fbs.service.IFbsWageApplicationService;
import com.ruoyi.zbf.bo.ZbfProjectQueryBo;
import com.ruoyi.zbf.domain.ZbfProject;
import com.ruoyi.zbf.domain.ZbfProjectSection;
@ -36,6 +44,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
@ -54,6 +63,14 @@ public class ZbfProjectServiceImpl extends ServicePlusImpl<ZbfProjectMapper, Zbf
private IZbfProjectSubcontractingService zbfProjectSubcontractingService;
@Autowired
private IZbfProjectSubcontractingApplyService zbfProjectSubcontractingApplyService;
@Autowired
private IFbsProjectTaskService fbsProjectTaskService;
@Autowired
private IBgtProjectTaskProgressService bgtProjectTaskProgressService;
@Autowired
private IFbsWageApplicationService fbsWageApplicationService;
@Autowired
private IBgtWageApplicationService bgtWageApplicationService;
@Override
public ZbfProject queryById(Long id) {
@ -332,6 +349,58 @@ public class ZbfProjectServiceImpl extends ServicePlusImpl<ZbfProjectMapper, Zbf
return fbsProjectDetailVO;
}
@Override
public FbsProjectDetailVO applyAllDetail(Long projectId) {
ZbfProject byId = getById(projectId);
FbsProjectDetailVO fbsProjectDetailVO = BeanUtil.copyProperties(byId, FbsProjectDetailVO.class);
//查询项目下的所有申请中的申请和已拒绝的申请
List<ZbfProjectSubcontractingApply> applyList = zbfProjectSubcontractingApplyService.list(Wrappers.<ZbfProjectSubcontractingApply>lambdaQuery()
.eq(ZbfProjectSubcontractingApply::getProjectId, projectId)
.eq(ZbfProjectSubcontractingApply::getFbsUserId, SecurityUtils.getAppUserId())
.in(ZbfProjectSubcontractingApply::getApplyStatus, SubcontractingApplyStatus.getApplyAllStatus()));
HashMap<Long, String> map = applyList.stream()
.collect(Collectors.toMap(
ZbfProjectSubcontractingApply::getSubId,
ZbfProjectSubcontractingApply::getApplyStatus,
(existing, replacement) -> replacement,
HashMap::new
));
//标段处理
List<FbsProjectSectionListVO> sectionListVO = new ArrayList<>();
//查询项目下的所有标段
List<ZbfProjectSection> sectionList = zbfProjectSectionService.list(Wrappers.<ZbfProjectSection>lambdaQuery()
.eq(ZbfProjectSection::getProjectId, projectId));
for (ZbfProjectSection zbfProjectSection : sectionList) {
//分包处理
List<FbsProjectSubcontractingListVO> subListVO = new ArrayList<>();
//查询标段下的所有的分包
List<ZbfProjectSubcontracting> subList = zbfProjectSubcontractingService.list(Wrappers.<ZbfProjectSubcontracting>lambdaQuery()
.eq(ZbfProjectSubcontracting::getSectionId, zbfProjectSection.getId()));
//排除掉未申请、已拒绝、已取消的分包
for (ZbfProjectSubcontracting sub : subList) {
String status = map.get(sub.getId());
if (StrUtil.isBlank(status)) {
continue;
}
FbsProjectSubcontractingListVO fbsProjectSubcontractingListVO = new FbsProjectSubcontractingListVO();
BeanUtil.copyProperties(sub, fbsProjectSubcontractingListVO);
fbsProjectSubcontractingListVO.setApplyStatus(status);
subListVO.add(fbsProjectSubcontractingListVO);
}
if (CollectionUtil.isEmpty(subListVO)) {
continue;
}
FbsProjectSectionListVO fbsProjectSectionListVO = new FbsProjectSectionListVO();
BeanUtil.copyProperties(zbfProjectSection, fbsProjectSectionListVO);
fbsProjectSectionListVO.setSubList(subListVO);
sectionListVO.add(fbsProjectSectionListVO);
}
fbsProjectDetailVO.setSectionList(sectionListVO);
return fbsProjectDetailVO;
}
@Override
public FbsProjectDetailVO applyDetail(Long projectId) {
ZbfProject byId = getById(projectId);
@ -419,6 +488,63 @@ public class ZbfProjectServiceImpl extends ServicePlusImpl<ZbfProjectMapper, Zbf
return sectionListVO;
}
@Override
public FbsProjectTaskDetailProgressVO fbsProgress(Long projectId) {
//查询所有创建的任务
List<FbsProjectTask> taskList = fbsProjectTaskService.list(Wrappers.<FbsProjectTask>lambdaQuery()
.eq(FbsProjectTask::getCreateId, SecurityUtils.getAppUserId())
.eq(FbsProjectTask::getProjectId, projectId)
);
FbsProjectTaskDetailProgressVO vo = new FbsProjectTaskDetailProgressVO();
List<Long> taskIds = taskList.stream().map(FbsProjectTask::getId).collect(Collectors.toList());
if(CollectionUtil.isNotEmpty(taskIds)){
List<BgtProjectTaskProgress> progressByTaskIds = bgtProjectTaskProgressService.getProgressByTaskIds(taskIds);
vo.setProgress(progressByTaskIds.stream().mapToInt(BgtProjectTaskProgress::getProgress).sum());
vo.setTotalProgress(taskList.size() * 100);
}
return vo;
}
@Override
public FbsProjectTaskDetailWageVO fbsWage(Long projectId) {
FbsProjectTaskDetailWageVO vo = new FbsProjectTaskDetailWageVO();
List<ZbfProjectSubcontracting> subList = zbfProjectSubcontractingService.list(Wrappers.<ZbfProjectSubcontracting>lambdaQuery()
.eq(ZbfProjectSubcontracting::getProjectId, projectId)
.eq(ZbfProjectSubcontracting::getUserId, SecurityUtils.getAppUserId())
);
List<Long> subIds = subList.stream().map(ZbfProjectSubcontracting::getId).collect(Collectors.toList());
//总金额
BigDecimal totalAmount = subList.stream().map(ZbfProjectSubcontracting::getSubAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
vo.setTotalAmount(totalAmount);
//接收金额
vo.setReceiveAmount(BigDecimal.ZERO);
if(CollectionUtil.isNotEmpty(subIds)){
List<FbsWageApplication> passList= fbsWageApplicationService.getPassListBySubIds(subIds);
BigDecimal receiveAmount = passList.stream().map(FbsWageApplication::getApplicantAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
vo.setReceiveAmount(receiveAmount);
List<FbsProjectTask> taskList = fbsProjectTaskService.list(Wrappers.<FbsProjectTask>lambdaQuery()
.in(FbsProjectTask::getSubId, subIds)
.eq(FbsProjectTask::getCreateId, SecurityUtils.getAppUserId())
);
//支付总金额
BigDecimal payTotalAmount = taskList.stream().map(FbsProjectTask::getTaskAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
vo.setPayTotalAmount(payTotalAmount);
//已支付金额
vo.setPayAmount(BigDecimal.ZERO);
if(CollectionUtil.isNotEmpty(subIds)){
List<BgtWageApplication> payList = bgtWageApplicationService.getPassListByTaskIds(subIds);
BigDecimal payAmount = payList.stream().map(BgtWageApplication::getApplicantAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
vo.setPayAmount(payAmount);
}
}
return vo;
}
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean add(ZbfProjectAddDTO dto) {