Browse Source

feat:

1. 项目总览统计修改;
tags/25012001
climba 1 month ago
parent
commit
f93dcd9446
10 changed files with 177 additions and 180 deletions
  1. +3
    -1
      hz-pm-api/src/main/java/com/hz/pm/api/meeting/entity/enumeration/MeetingReviewTypeEnum.java
  2. +1
    -0
      hz-pm-api/src/main/java/com/hz/pm/api/meeting/manage/MeetingManage.java
  3. +1
    -1
      hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/controller/PurchaseController.java
  4. +129
    -153
      hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/manage/PurchaseManage.java
  5. +3
    -0
      hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/model/req/PurchaseAdaptionListReq.java
  6. +6
    -12
      hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/model/vo/AdaptionProgressVO.java
  7. +1
    -3
      hz-pm-api/src/main/java/com/hz/pm/api/projectlib/manage/ProjectManageTodoCountManage.java
  8. +2
    -0
      hz-pm-api/src/main/java/com/hz/pm/api/projectlib/model/enumeration/status/ProjectStatus.java
  9. +3
    -0
      hz-pm-api/src/main/java/com/hz/pm/api/projectlib/model/vo/TenderListInfoVO.java
  10. +28
    -10
      hz-pm-api/src/main/java/com/hz/pm/api/workbench/manage/WorkbenchManage.java

+ 3
- 1
hz-pm-api/src/main/java/com/hz/pm/api/meeting/entity/enumeration/MeetingReviewTypeEnum.java View File

@@ -21,7 +21,9 @@ public enum MeetingReviewTypeEnum {

PROJECT_REVIEW("项目评审", "6"),

EXPERT_REVIEW("专家论证", "7");
EXPERT_REVIEW("专家论证", "7"),

OTHER("其他会议", "99");

private final String value;
private final String code;


+ 1
- 0
hz-pm-api/src/main/java/com/hz/pm/api/meeting/manage/MeetingManage.java View File

@@ -1099,6 +1099,7 @@ public class MeetingManage {
switch (MeetingReviewTypeEnum.getNoNull(meetingType)) {
case PROJECT_REVIEW:
case EXPERT_REVIEW:
case OTHER:
query.eq(Project::getStatus, ProjectStatus.WITHOUT_EXPERT_REVIEW.getCode())
.isNotNull(Project::getConstructionPlanSealFile);
break;


+ 1
- 1
hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/controller/PurchaseController.java View File

@@ -110,7 +110,7 @@ public class PurchaseController {

@GetMapping("/pageAdaption")
@ApiOperation("获取适配改造列表")
public PageVo<PurchaseAdaptionListVO> pageAdaption(PurchaseAdaptionListReq req) {
public PageVo<ProjectLibListItemVO> pageAdaption(PurchaseAdaptionListReq req) {
return purchaseManage.adaptList(req);
}



+ 129
- 153
hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/manage/PurchaseManage.java View File

@@ -29,7 +29,6 @@ import com.hz.pm.api.external.MhApiClient;
import com.hz.pm.api.external.MhFileClient;
import com.hz.pm.api.external.model.dto.MhPurchaseIntentionDTO;
import com.hz.pm.api.external.model.dto.MhPurchaseNoticeDTO;
import com.hz.pm.api.external.model.enumeration.MhUnitStripEnum;
import com.hz.pm.api.external.todo.enumerization.MHTodoTypeEnum;
import com.hz.pm.api.projectdeclared.chain.ProjectStatusRewriteHandlerContext;
import com.hz.pm.api.projectdeclared.helper.MhXcfhxReportHelper;
@@ -100,8 +99,7 @@ import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
import java.util.stream.Stream;

import static com.hz.pm.api.projectlib.model.enumeration.status.TenderMainStatus.PURCHASE_NOTICE_FAILED;
import static com.hz.pm.api.projectlib.model.enumeration.status.TenderMainStatus.TO_BE_SUBMIT_PURCHASE_NOTICE;
import static com.hz.pm.api.projectlib.model.enumeration.status.TenderMainStatus.*;

/**
* <p>
@@ -720,178 +718,156 @@ public class PurchaseManage {
}

public AdaptionProgressVO adaptionProgress(PurchaseAdaptionListReq req) {
LambdaQueryWrapper<Purchase> query = Wrappers.lambdaQuery(Purchase.class)
.select(Purchase::getStatus, Purchase::getId)
.eq(Purchase::getBidType, BidTypeEnum.BUILD_APP.getCode())
.exists(ExistsSqlConst.PURCHASE_EXISTS_STATUS_CHANGE
+ " and npsc.event = {0}", TenderStateChangeEvent.SUBMIT_PURCHASE_CONSTRUCTION_INFO)
.notExists(ExistsSqlConst.PURCHASE_EXISTS_PROJECT
+ "and (np.stage = {0} or np.status in ({1},{2}))", ProjectStatus.STOPPED.getCode(),
ProjectStatus.CHANGE_APPLY_PASSED.getCode(), ProjectStatus.DELETED_PASSED.getCode())
.orderByDesc(Purchase::getCreateOn);
UserFullInfoDTO user = userInfoHelper.getUserFullInfo(LoginUserUtil.getUserId());
if (!purchaseService.buildPurchaseQueryPermission(query, user)) {
return null;
UnitQueryState unitQueryState = mhUnitQueryAuthHelper.listCanViewUnitIds(req.getBuildOrgCode());
if (!unitQueryState.isState()) {
return new AdaptionProgressVO();
}
if (req.hasProjectQuery()) {
List<Long> projectIds = filterProjectIdsForPurchase(req);
if (projectIds.isEmpty()) {
return null;
}
query.in(Purchase::getProjectId, projectIds);
LambdaQueryWrapper<Project> projQuery = Wrappers.lambdaQuery(Project.class)
.eq(Project::getNewest, Boolean.TRUE)
.eq(req.getProjectYear() != null, Project::getProjectYear, req.getProjectYear())
.like(StrUtil.isNotBlank(req.getProjectName()), Project::getProjectName, req.getProjectName())
.like(StrUtil.isNotBlank(req.getBuildOrgName()), Project::getBuildOrgName, req.getBuildOrgName())
.eq(req.getUnitStrip() != null, Project::getUnitStrip, req.getUnitStrip());
BizUtils.notEmpty(unitQueryState.getUnitIds(), w -> {
List<String> buildOrgCodeStr = CollUtils.convert(w, String::valueOf);
projQuery.in(Project::getBuildOrgCode, buildOrgCodeStr);
});
projQuery.select(Project::getId);
projQuery.exists(ExistsSqlConst.PROJECT_EXISTS_STATUS_CHANGE
+ " and npsc.event = {0}", ProjectStateChangeEvent.SUBMIT_PURCHASE_CONTRACT_RECORD)
.exists(ExistsSqlConst.PROJECT_EXISTS_PURCHASE
+ " and np.bid_type = {0}", BidTypeEnum.BUILD_APP.getCode())
.notIn(Project::getStatus, ProjectStatusConstant.CHANGE_STOP_DELETE_PASSED);
List<Long> projectIds = CollUtils.fieldList(projectService.list(projQuery), Project::getId);
if (projectIds.isEmpty()) {
return new AdaptionProgressVO();
}
query.like(StrUtil.isNotBlank(req.getBidName()), Purchase::getBidName, req.getBidName())
.le(req.getCreateOnMax() != null, Purchase::getCreateOn, req.getCreateOnMax())
.ge(req.getCreateOnMin() != null, Purchase::getCreateOn, req.getCreateOnMin());
List<Purchase> purchases = purchaseService.list(query);
Wrapper<Purchase> purQuery = Wrappers.lambdaQuery(Purchase.class)
.select(Purchase::getProjectId, Purchase::getBidType, Purchase::getStatus)
.in(Purchase::getProjectId, projectIds)
.eq(Purchase::getBidType, BidTypeEnum.BUILD_APP.getCode());
List<Purchase> purchases = purchaseService.list(purQuery);
return adaptionProgress(purchases);
}

private static final List<Integer> ON_ADAPTING_STATUS = Arrays.asList(
TenderMainStatus.TO_BE_SUBMIT_OPERATION_PLAN.getCode(),
TenderMainStatus.WAIT_ORG_CONFIRM.getCode(),
TenderAdaptStatus.WITHOUT_ADAPT_INFO.getCode(),
TenderAdaptStatus.ADAPT_INFO_AUDIT.getCode(),
TenderAdaptStatus.ADAPT_INFO_FAILED.getCode(),
TenderTestValidStatus.WITHOUT_TEST_VALID_INFO.getCode(),
TenderTestValidStatus.TEST_VALID_INFO_AUDIT.getCode(),
TenderTestValidStatus.TEST_VALID_INFO_FAILED.getCode(),
TenderSelfTestStatus.WITHOUT_SELF_TEST_INFO.getCode(),
TenderSelfTestStatus.SELF_TEST_INFO_FAILED.getCode(),
TenderSelfTestStatus.SELF_TEST_INFO_AUDIT.getCode()
);

public AdaptionProgressVO adaptionProgress(List<Purchase> purchases) {
Map<ITenderStatus, Long> statusCountMap = CollUtils.groupCount(purchases,
w -> {
ITenderStatus status = TenderMainStatus.getNoNull(w.getStatus());
if (TenderMainStatus.TO_BE_SUBMIT_OPERATION_PLAN.eq(status)) {
return TenderMainStatus.TO_BE_SUBMIT_OPERATION_PLAN;
} else if (TenderMainStatus.WAIT_ORG_CONFIRM.eq(status)) {
return TenderMainStatus.WAIT_ORG_CONFIRM;
} else if (TenderAdaptStatus.WITHOUT_ADAPT_INFO.eq(status)
|| TenderAdaptStatus.ADAPT_INFO_AUDIT.eq(status)
|| TenderAdaptStatus.ADAPT_INFO_FAILED.eq(status)) {
return TenderAdaptStatus.WITHOUT_ADAPT_INFO;
} else if (TenderSelfTestStatus.WITHOUT_SELF_TEST_INFO.eq(status)
|| TenderSelfTestStatus.SELF_TEST_INFO_AUDIT.eq(status)
|| TenderSelfTestStatus.SELF_TEST_INFO_FAILED.eq(status)) {
return TenderSelfTestStatus.WITHOUT_SELF_TEST_INFO;
} else if (TenderTestValidStatus.WITHOUT_TEST_VALID_INFO.eq(status)
|| TenderTestValidStatus.TEST_VALID_INFO_AUDIT.eq(status)
|| TenderTestValidStatus.TEST_VALID_INFO_FAILED.eq(status)) {
return TenderTestValidStatus.WITHOUT_TEST_VALID_INFO;
} else {
return status;
}
});
Map<Long, List<Purchase>> purchaseMap = CollUtils.group(purchases, Purchase::getProjectId);
Map<ProjectStatus, Long> statusCountMap = CollUtils.groupCount(purchaseMap.values(), w -> {
List<Integer> buildAppBidStatus = w.stream()
.filter(x -> BidTypeEnum.BUILD_APP.eq(x.getBidType()))
.map(Purchase::getStatus)
.collect(Collectors.toList());
if (CollUtil.allMatch(buildAppBidStatus, TO_BE_SUBMIT_OPERATION_PLAN::eq)) {
return ProjectStatus.TO_BE_ADAPT;
} else if (CollUtil.anyMatch(buildAppBidStatus, ON_ADAPTING_STATUS::contains)) {
return ProjectStatus.ON_ADAPTING;
} else {
return ProjectStatus.FINISH_ADAPT;
}
});
return AdaptionProgressVO.builder()
.withoutAdaptionInfo(statusCountMap.getOrDefault(TenderAdaptStatus.WITHOUT_ADAPT_INFO, 0L))
.withoutOperationCount(statusCountMap.getOrDefault(TenderMainStatus.TO_BE_SUBMIT_OPERATION_PLAN, 0L))
.withoutOrgConfirmCount(statusCountMap.getOrDefault(TenderMainStatus.WAIT_ORG_CONFIRM, 0L))
.withoutSelfTestCount(statusCountMap.getOrDefault(TenderSelfTestStatus.WITHOUT_SELF_TEST_INFO, 0L))
.withoutTestValidCount(statusCountMap.getOrDefault(TenderTestValidStatus.WITHOUT_TEST_VALID_INFO, 0L))
.totalCount(purchases.size())
.toBeAdapt(statusCountMap.getOrDefault(ProjectStatus.TO_BE_ADAPT, 0L))
.onAdapting(statusCountMap.getOrDefault(ProjectStatus.ON_ADAPTING, 0L))
.finishAdapt(statusCountMap.getOrDefault(ProjectStatus.FINISH_ADAPT, 0L))
.totalCount(purchaseMap.size())
.build();
}

private PageVo<PurchaseAdaptionListVO> queryData(PurchaseAdaptionListReq req) {
LambdaQueryWrapper<Purchase> query = Wrappers.lambdaQuery(Purchase.class)
.eq(Purchase::getBidType, BidTypeEnum.BUILD_APP.getCode())
.exists(ExistsSqlConst.PURCHASE_EXISTS_STATUS_CHANGE
+ " and npsc.event = {0}", TenderStateChangeEvent.SUBMIT_PURCHASE_CONSTRUCTION_INFO)
.notExists(ExistsSqlConst.PURCHASE_EXISTS_PROJECT
+ "and (np.stage = {0} or np.status in ({1},{2}))", ProjectStatus.STOPPED.getCode(),
ProjectStatus.CHANGE_APPLY_PASSED.getCode(), ProjectStatus.DELETED_PASSED.getCode())
.orderByDesc(Purchase::getCreateOn);
UserFullInfoDTO user = userInfoHelper.getUserFullInfo(LoginUserUtil.getUserId());
if (!purchaseService.buildPurchaseQueryPermission(query, user)) {
private PageVo<ProjectLibListItemVO> queryData(PurchaseAdaptionListReq req) {
UnitQueryState unitQueryState = mhUnitQueryAuthHelper.listCanViewUnitIds(req.getBuildOrgCode());
if (!unitQueryState.isState()) {
return PageVo.empty();
}
if (req.hasProjectQuery()) {
List<Long> projectIds = filterProjectIdsForPurchase(req);
if (projectIds.isEmpty()) {
return PageVo.empty();
}
query.in(Purchase::getProjectId, projectIds);
}
query.like(StrUtil.isNotBlank(req.getBidName()), Purchase::getBidName, req.getBidName())
.le(req.getCreateOnMax() != null, Purchase::getCreateOn, req.getCreateOnMax())
.ge(req.getCreateOnMin() != null, Purchase::getCreateOn, req.getCreateOnMin());
LambdaQueryWrapper<Project> projQuery = Wrappers.lambdaQuery(Project.class)
.eq(Project::getNewest, Boolean.TRUE)
.eq(req.getProjectYear() != null, Project::getProjectYear, req.getProjectYear())
.like(StrUtil.isNotBlank(req.getProjectName()), Project::getProjectName, req.getProjectName())
.like(StrUtil.isNotBlank(req.getBuildOrgName()), Project::getBuildOrgName, req.getBuildOrgName())
.eq(req.getUnitStrip() != null, Project::getUnitStrip, req.getUnitStrip());
BizUtils.notEmpty(unitQueryState.getUnitIds(), w -> {
List<String> buildOrgCodeStr = CollUtils.convert(w, String::valueOf);
projQuery.in(Project::getBuildOrgCode, buildOrgCodeStr);
});
ProjectManageUtil.projectBaseQuery(projQuery);
projQuery.exists(ExistsSqlConst.PROJECT_EXISTS_STATUS_CHANGE
+ " and npsc.event = {0}", ProjectStateChangeEvent.SUBMIT_PURCHASE_CONTRACT_RECORD)
.exists(ExistsSqlConst.PROJECT_EXISTS_PURCHASE
+ " and np.bid_type = {0}", BidTypeEnum.BUILD_APP.getCode())
.notIn(Project::getStatus, ProjectStatusConstant.CHANGE_STOP_DELETE_PASSED);
if (req.getStatus() != null) {
ITenderStatus tenderStatus = TenderMainStatus.getNoNull(req.getStatus());
if (tenderStatus.eq(TenderMainStatus.TO_BE_SUBMIT_OPERATION_PLAN)) {
query.eq(Purchase::getStatus, TenderMainStatus.TO_BE_SUBMIT_OPERATION_PLAN.getCode());
} else if (tenderStatus.eq(TenderAdaptStatus.WITHOUT_ADAPT_INFO)) {
query.in(Purchase::getStatus, TenderAdaptStatus.WITHOUT_ADAPT_INFO.getCode(),
TenderAdaptStatus.ADAPT_INFO_FAILED.getCode(),
TenderAdaptStatus.ADAPT_INFO_AUDIT.getCode());
} else if (tenderStatus.eq(TenderSelfTestStatus.WITHOUT_SELF_TEST_INFO)) {
query.in(Purchase::getStatus, TenderSelfTestStatus.WITHOUT_SELF_TEST_INFO.getCode(),
TenderSelfTestStatus.SELF_TEST_INFO_FAILED.getCode(),
TenderSelfTestStatus.SELF_TEST_INFO_AUDIT.getCode());
} else if (tenderStatus.eq(TenderTestValidStatus.WITHOUT_TEST_VALID_INFO)) {
query.in(Purchase::getStatus, TenderTestValidStatus.WITHOUT_TEST_VALID_INFO.getCode(),
TenderTestValidStatus.TEST_VALID_INFO_FAILED.getCode(),
TenderTestValidStatus.TEST_VALID_INFO_AUDIT.getCode());
} else if (tenderStatus.eq(TenderMainStatus.WAIT_ORG_CONFIRM)) {
query.eq(Purchase::getStatus, TenderMainStatus.WAIT_ORG_CONFIRM.getCode());
if (ProjectStatus.TO_BE_ADAPT.eq(req.getStatus())) {
projQuery.notExists(ExistsSqlConst.PROJECT_EXISTS_PURCHASE_STATUS_CHANGE
+ " and npsc.event = {0}", TenderStateChangeEvent.SUBMIT_OPERATION_PLAN);
} else if (ProjectStatus.ON_ADAPTING.eq(req.getStatus())) {
projQuery.exists(ExistsSqlConst.PROJECT_EXISTS_PURCHASE_STATUS_CHANGE
+ " and npsc.event = {0}", TenderStateChangeEvent.SUBMIT_OPERATION_PLAN)
.notExists(ExistsSqlConst.PROJECT_EXISTS_STATUS_CHANGE
+ " and npsc.event = {0}", ProjectStateChangeEvent.SUBMIT_PURCHASE_ORG_CONFIRM);
} else {
return PageVo.empty();
projQuery.exists(ExistsSqlConst.PROJECT_EXISTS_STATUS_CHANGE
+ " and npsc.event = {0}", ProjectStateChangeEvent.SUBMIT_PURCHASE_ORG_CONFIRM);
}
}
Page<Purchase> page = purchaseService.page(req.page(), query);
Page<Project> page = projectService.page(req.page(), projQuery);
if (page.getTotal() == 0) {
return PageVo.empty();
}
List<Purchase> records = page.getRecords();
List<Long> projectIds = CollUtils.fieldList(records, Purchase::getProjectId);
Wrapper<Project> projectQuery = Wrappers.lambdaQuery(Project.class)
.select(Project::getId, Project::getProjectCode, Project::getProjectName, Project::getStatus,
Project::getBuildOrgName, Project::getBuildOrgCode, Project::getUnitStrip, Project::getProjectYear)
.in(Project::getId, projectIds);
List<Project> projects = projectService.list(projectQuery);
Map<Long, Project> projectMap = CollUtils.listToMap(projects, Project::getId);
Map<Long, Contract> contractMap = contractService.listByProjectIds(projectIds);
List<Long> finishOrgConfirmBidIds = new ArrayList<>();
if (req.getStatus() == null) {
List<Long> bidIds = CollUtils.fieldList(records, Purchase::getId);
Wrapper<PurchaseStatusChange> pscQuery = Wrappers.lambdaQuery(PurchaseStatusChange.class)
.select(PurchaseStatusChange::getBidId)
.eq(PurchaseStatusChange::getEvent, TenderStateChangeEvent.SUBMIT_PURCHASE_ORG_CONFIRM)
.in(PurchaseStatusChange::getBidId, bidIds);
List<PurchaseStatusChange> changes = purchaseStatusChangeService.list(pscQuery);
changes.forEach(c -> finishOrgConfirmBidIds.add(c.getBidId()));
}
List<PurchaseAdaptionListVO> data = records.stream().map(w -> {
PurchaseAdaptionListVO adaption = new PurchaseAdaptionListVO();
adaption.setBidId(w.getId());
if (finishOrgConfirmBidIds.contains(w.getId())) {
adaption.setStatus(TenderMainStatus.ORG_CONFIRM_PASSED.getCode());
} else {
adaption.setStatus(w.getStatus());
}
adaption.setBizName(w.getBidName());
adaption.setProjectId(w.getProjectId());
Project project = projectMap.get(w.getProjectId());
adaption.setProjectYear(project.getProjectYear());
adaption.setProjectName(project.getProjectName());
adaption.setBuildOrg(project.getBuildOrgName());
adaption.setProjectStatus(project.getStatus());
adaption.setProjectCode(project.getProjectCode());
adaption.setUnitStripName(MhUnitStripEnum.getVal(project.getUnitStrip()));
Contract contract = contractMap.get(w.getId());
if (contract != null) {
adaption.setContractAmount(contract.getTotalAmount());
List<Project> pageData = page.getRecords();
List<Long> projectIds = CollUtils.fieldList(pageData, Project::getId);
List<Purchase> purchases = purchaseService.listByProjectIds(projectIds);
Map<Long, List<Purchase>> purchaseMap = CollUtils.group(purchases, Purchase::getProjectId);
Map<Long, BigDecimal> contractAmountMap = contractService.listContractAmountByProjectIds(projectIds);
List<ProjectLibListItemVO> retData = CollUtils.convert(pageData, w -> {
ProjectLibListItemVO item = new ProjectLibListItemVO();
item.setId(w.getId());
item.setProjectName(w.getProjectName());
item.setProjectCode(w.getProjectCode());
item.setProjectYear(w.getProjectYear());
item.setBuildOrgName(w.getBuildOrgName());
item.setUnitStrip(w.getUnitStrip());
item.setStage(w.getStage());
item.setStatus(w.getStatus());
item.setProjectType(w.getProjectType());
item.setApprovedAmount(w.getApprovalAmount());
item.setReviewAmount(w.getReviewAmount());
item.setApprovalDate(w.getApprovalDate());
item.setCreateOn(w.getCreateOn());
List<Purchase> currPurchases = purchaseMap.get(w.getId());
if (currPurchases != null) {
List<TenderListInfoVO> tenders = new ArrayList<>();
for (Purchase p : currPurchases) {
TenderListInfoVO tender = new TenderListInfoVO();
tender.setBidName(p.getBidName());
tender.setBidId(p.getId());
tender.setBidType(p.getBidType());
ITenderStatus status = TenderMainStatus.getNoNull(p.getStatus());
tender.setBidStatus(status.getCode());
tender.setBidStatusName(status.getDesc());
tender.setConstructionAmount(contractAmountMap.get(p.getId()));
tenders.add(tender);
item.setTenders(tenders);
}
}
return adaption;
}).collect(Collectors.toList());
return PageVo.of(data, page.getTotal());
}

private List<Long> filterProjectIdsForPurchase(PurchaseAdaptionListReq req) {
LambdaQueryWrapper<Project> projQuery = Wrappers.lambdaQuery(Project.class)
.select(Project::getId)
.ne(Project::getStage, ProjectStatus.STOPPED.getCode())
.eq(Project::getNewest, Boolean.TRUE)
.eq(req.getProjectYear() != null, Project::getProjectYear, req.getProjectYear())
.like(StrUtil.isNotBlank(req.getProjectName()), Project::getProjectName, req.getProjectName())
.like(StrUtil.isNotBlank(req.getBuildOrgName()), Project::getBuildOrgName, req.getBuildOrgName());
if (req.getBuildOrgCode() != null) {
projQuery.in(Project::getBuildOrgCode, mhUnitCache.getViewChildIdsRecursion(req.getBuildOrgCode()));
}
List<Project> projects = projectService.list(projQuery);
return CollUtils.fieldList(projects, Project::getId);
return item;
});
return PageVo.of(retData, page.getTotal());
}


public PageVo<PurchaseAdaptionListVO> adaptList(PurchaseAdaptionListReq req) {
public PageVo<ProjectLibListItemVO> adaptList(PurchaseAdaptionListReq req) {
return queryData(req);
}



+ 3
- 0
hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/model/req/PurchaseAdaptionListReq.java View File

@@ -29,6 +29,9 @@ public class PurchaseAdaptionListReq extends PagePo {
@ApiModelProperty("建设单位")
private String buildOrgName;

@ApiModelProperty("申报单位所属领域")
private Integer unitStrip;

@ApiModelProperty("项目名称")
private String projectName;



+ 6
- 12
hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/model/vo/AdaptionProgressVO.java View File

@@ -25,19 +25,13 @@ public class AdaptionProgressVO {
@ApiModelProperty("总数")
private Integer totalCount;

@ApiModelProperty("待填写实施计划")
private Long withoutOperationCount;
@ApiModelProperty("待适配改造")
private Long toBeAdapt;

@ApiModelProperty("待上传开工文件")
private Long withoutAdaptionInfo;
@ApiModelProperty("适配改造中")
private Long onAdapting;

@ApiModelProperty("待上传自测材料")
private Long withoutSelfTestCount;

@ApiModelProperty("待上传测试验证材料")
private Long withoutTestValidCount;

@ApiModelProperty("待单位确认")
private Long withoutOrgConfirmCount;
@ApiModelProperty("适配改造完成")
private Long finishAdapt;

}

+ 1
- 3
hz-pm-api/src/main/java/com/hz/pm/api/projectlib/manage/ProjectManageTodoCountManage.java View File

@@ -95,9 +95,7 @@ public class ProjectManageTodoCountManage {
adaptionReq.setBuildOrgCode(buildOrgCode);
adaptionReq.setProjectYear(req.getProjectYear());
AdaptionProgressVO adaptionStat = purchaseManage.adaptionProgress(adaptionReq);
ret.setProjectAdaption(sum(adaptionStat, AdaptionProgressVO::getWithoutOperationCount,
AdaptionProgressVO::getWithoutAdaptionInfo, AdaptionProgressVO::getWithoutTestValidCount,
AdaptionProgressVO::getWithoutOrgConfirmCount, AdaptionProgressVO::getWithoutSelfTestCount));
ret.setProjectAdaption(sum(adaptionStat, AdaptionProgressVO::getToBeAdapt, AdaptionProgressVO::getOnAdapting));
// 项目初验
projReqOrg.setBuildOrgCode(req.getBuildOrgCode());
FirstAcceptProgressVO firstAccept = constructionManage.firstAcceptProgress(projReqOrg);


+ 2
- 0
hz-pm-api/src/main/java/com/hz/pm/api/projectlib/model/enumeration/status/ProjectStatus.java View File

@@ -68,6 +68,8 @@ public enum ProjectStatus implements IStatus<Integer, String> {
ON_PURCHASING(20007, "采购中", 20000),

ON_ADAPTING(20010, "适配改造中", 20000),
TO_BE_ADAPT(20011, "待适配改造", 20000),
FINISH_ADAPT(20012, "适配改造完成", 20000),

TO_BE_FIRST_INSPECTED(20008, "待上传初验材料", 20000),
ON_PILOT_RUNNING(20009, "试运行中", 20000),


+ 3
- 0
hz-pm-api/src/main/java/com/hz/pm/api/projectlib/model/vo/TenderListInfoVO.java View File

@@ -22,6 +22,9 @@ public class TenderListInfoVO {
@ApiModelProperty("标段名称")
private String bidName;

@ApiModelProperty("标段类型")
private Integer bidType;

@ApiModelProperty("标段状态")
private Integer bidStatus;



+ 28
- 10
hz-pm-api/src/main/java/com/hz/pm/api/workbench/manage/WorkbenchManage.java View File

@@ -337,10 +337,10 @@ public class WorkbenchManage {
return projectStatusChanges.entrySet().stream()
.filter(w -> {
List<ProjectStatusChange> changes = w.getValue();
if (CollUtil.anyMatch(changes, w1 -> ProjectStateChangeEvent.STOPPED_APPLY_PASS.eq(w1.getEvent())
/*if (CollUtil.anyMatch(changes, w1 -> ProjectStateChangeEvent.STOPPED_APPLY_PASS.eq(w1.getEvent())
|| ProjectStateChangeEvent.STOPPED_APPLY_AUTO_PASS.eq(w1.getEvent()))) {
return false;
}
}*/
return CollUtil.anyMatch(w.getValue(), w1 -> event.eq(w1.getEvent()));
})
.map(Map.Entry::getKey)
@@ -349,9 +349,17 @@ public class WorkbenchManage {

public Integer processNodeNotFinishedCount(Map<String, List<ProjectStatusChange>> projectStatusChanges,
ProjectStateChangeEvent startEvent,
ProjectStateChangeEvent finishEvent) {
ProjectStateChangeEvent finishEvent,
Map<Long, List<Purchase>> projectPurchaseMap) {
return CollUtil.count(projectStatusChanges.entrySet(), w -> {
List<ProjectStatusChange> changes = w.getValue();
if (startEvent.equals(ProjectStateChangeEvent.SUBMIT_PURCHASE_CONTRACT_RECORD)) {
Long projectId = ProjectIdCodeCacheUtil.newest(w.getKey());
List<Purchase> purchases = projectPurchaseMap.getOrDefault(projectId, Collections.emptyList());
if (!CollUtil.anyMatch(purchases, x -> BidTypeEnum.BUILD_APP.eq(x.getBidType()))) {
return false;
}
}
return CollUtil.anyMatch(changes, w1 -> startEvent.eq(w1.getEvent()))
&& CollUtil.allMatch(changes, w1 -> !finishEvent.eq(w1.getEvent()));
});
@@ -399,7 +407,7 @@ public class WorkbenchManage {
List<ProjectStatusChange> projectStatusChanges = projectStatusChangeService.list(pscQuery);
projectStatusChangeMap.putAll(CollUtils.group(projectStatusChanges, ProjectStatusChange::getProjectCode));
// 移除已停止项目
projects.removeIf(w -> ProjectStatus.STOPPED_PASSED.eq(w.getStatus()));
//projects.removeIf(w -> ProjectStatus.STOPPED_PASSED.eq(w.getStatus()));
currStat.setProjectCount(projects.size());
for (Project project : projects) {
allProjectCodes.add(project.getProjectCode());
@@ -426,7 +434,8 @@ public class WorkbenchManage {
currStat.setReviewingCount(reviewing);
currStat.setReviewFailedCount(reviewFailed);
currStat.setPendingCount(processNodeNotFinishedCount(projectStatusChangeMap,
ProjectStateChangeEvent.COMPLIANCE_REVIEW_PASS, ProjectStateChangeEvent.PROJECT_REVIEW_PASS));
ProjectStateChangeEvent.COMPLIANCE_REVIEW_PASS, ProjectStateChangeEvent.PROJECT_REVIEW_PASS,
projectPurchaseCountMap));
}
break;
case APPROVAL_AMOUNT: {
@@ -454,7 +463,8 @@ public class WorkbenchManage {
currStat.setStoppedCount(stoppedProjectCount(projectStatusChangeMap,
ProjectStateChangeEvent.ANNUAL_PLAN_PASS, ProjectStateChangeEvent.DECLARED_RECORD_PASS));
currStat.setPendingCount(processNodeNotFinishedCount(projectStatusChangeMap,
ProjectStateChangeEvent.ANNUAL_PLAN_PASS, ProjectStateChangeEvent.DECLARED_RECORD_PASS));
ProjectStateChangeEvent.ANNUAL_PLAN_PASS, ProjectStateChangeEvent.DECLARED_RECORD_PASS,
projectPurchaseCountMap));
}
break;
case PROJECT_PURCHASE: {
@@ -491,7 +501,8 @@ public class WorkbenchManage {
purchaseEventMap.putAll(purchaseEventMapTmp);
}
currStat.setPendingCount(processNodeNotFinishedCount(projectStatusChangeMap,
ProjectStateChangeEvent.DECLARED_RECORD_PASS, ProjectStateChangeEvent.SUBMIT_PURCHASE_CONTRACT_RECORD));
ProjectStateChangeEvent.DECLARED_RECORD_PASS, ProjectStateChangeEvent.SUBMIT_PURCHASE_CONTRACT_RECORD,
projectPurchaseCountMap));
}
break;
case PROJECT_ADAPTION: {
@@ -524,6 +535,9 @@ public class WorkbenchManage {
adaptFinishStat.setFinishPurchaseCountWithoutApp(finishPurchaseByWithoutApp);
currStat.setStoppedCount(stoppedProjectCount(projectStatusChangeMap,
ProjectStateChangeEvent.SUBMIT_PURCHASE_CONTRACT_RECORD, ProjectStateChangeEvent.SUBMIT_PURCHASE_ORG_CONFIRM));
currStat.setPendingCount(processNodeNotFinishedCount(projectStatusChangeMap,
ProjectStateChangeEvent.SUBMIT_PURCHASE_CONTRACT_RECORD, ProjectStateChangeEvent.SUBMIT_PURCHASE_ORG_CONFIRM,
projectPurchaseCountMap));
}
break;
case FIRST_INSPECTED: {
@@ -535,7 +549,8 @@ public class WorkbenchManage {
currStat.setStoppedCount(stoppedProjectCount(projectStatusChangeMap,
ProjectStateChangeEvent.SUBMIT_PURCHASE_ORG_CONFIRM, ProjectStateChangeEvent.SUBMIT_FIRST_INSPECTED_FILES));
currStat.setPendingCount(processNodeNotFinishedCount(projectStatusChangeMap,
ProjectStateChangeEvent.SUBMIT_PURCHASE_ORG_CONFIRM, ProjectStateChangeEvent.SUBMIT_FIRST_INSPECTED_FILES));
ProjectStateChangeEvent.SUBMIT_PURCHASE_ORG_CONFIRM, ProjectStateChangeEvent.SUBMIT_FIRST_INSPECTED_FILES,
projectPurchaseCountMap));
}
break;
case FINAL_INSPECTED: {
@@ -547,7 +562,8 @@ public class WorkbenchManage {
currStat.setStoppedCount(stoppedProjectCount(projectStatusChangeMap,
ProjectStateChangeEvent.SUBMIT_FIRST_INSPECTED_FILES, ProjectStateChangeEvent.FINAL_ACCEPTANCE_PASS));
currStat.setPendingCount(processNodeNotFinishedCount(projectStatusChangeMap,
ProjectStateChangeEvent.SUBMIT_FIRST_INSPECTED_FILES, ProjectStateChangeEvent.FINAL_ACCEPTANCE_PASS));
ProjectStateChangeEvent.SUBMIT_FIRST_INSPECTED_FILES, ProjectStateChangeEvent.FINAL_ACCEPTANCE_PASS,
projectPurchaseCountMap));
}
break;
default:
@@ -649,7 +665,7 @@ public class WorkbenchManage {
return PageVo.empty();
}
ProjectManageUtil.projectBaseQuery(query);
query.notIn(Project::getStatus, ProjectStatusConstant.CHANGE_STOP_DELETE_PASSED);
query.notIn(Project::getStatus, ProjectStatusConstant.CHANGE_DELETE_PASSED);
projectQueryExistsProjectStatusChange(query, ProjectStateChangeEvent.PROJECT_APPLICATION_SUBMIT);
switch (req.getProcessNode()) {
case PROJECT_DECLARED:
@@ -683,6 +699,8 @@ public class WorkbenchManage {
TEST_VALID_INFO_PASSED, SUBMIT_PURCHASE_ORG_CONFIRM);
break;
case PROJECT_ADAPTION:
query.exists(ExistsSqlConst.PROJECT_EXISTS_PURCHASE
+ "and np.bid_type = {0}", BidTypeEnum.BUILD_APP.getCode());
projectProcessNodeFinishedQuery(query, req.getProcessNodeFinished(),
ProjectStateChangeEvent.SUBMIT_PURCHASE_CONTRACT_RECORD, ProjectStateChangeEvent.SUBMIT_PURCHASE_ORG_CONFIRM);
break;


Loading…
Cancel
Save