Browse Source

修改采购列表

tags/24080901
WendyYang 8 months ago
parent
commit
0ce381263d
13 changed files with 223 additions and 103 deletions
  1. +2
    -2
      hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/controller/PurchaseController.java
  2. +7
    -1
      hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/manage/ConstructionManage.java
  3. +14
    -17
      hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/manage/OperationManage.java
  4. +52
    -27
      hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/manage/PurchaseManage.java
  5. +24
    -19
      hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/model/req/SubmitPurchaseNoticeReq.java
  6. +19
    -1
      hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/service/IContractService.java
  7. +5
    -2
      hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/service/IPurchaseService.java
  8. +11
    -1
      hz-pm-api/src/main/java/com/hz/pm/api/projectlib/handle/ProcessExecuteChainHandle.java
  9. +22
    -20
      hz-pm-api/src/main/java/com/hz/pm/api/projectlib/handle/ProjectApprovalHandle.java
  10. +10
    -11
      hz-pm-api/src/main/java/com/hz/pm/api/projectlib/handle/UnitInnerAuditHandle.java
  11. +4
    -0
      hz-pm-api/src/main/java/com/hz/pm/api/projectlib/model/vo/ProjectLibListItemVO.java
  12. +35
    -0
      hz-pm-api/src/main/java/com/hz/pm/api/projectlib/model/vo/TenderListInfoVO.java
  13. +18
    -2
      hz-pm-api/src/main/java/com/hz/pm/api/projectlib/service/IMhProjectService.java

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

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

@ApiOperation(value = "待采购结果备案列表", notes = "待采购结果备案列表")
@GetMapping("/project-list")
public PageVo<ProjectLibListItemVO> projectlist(@ModelAttribute ProjectListReq req) {
public PageVo<ProjectLibListItemVO> projectList(@ModelAttribute ProjectListReq req) {
return purchaseManage.projectLibList(req);
}

@@ -54,7 +54,7 @@ public class PurchaseController {
ExcelDownUtil.downXls(response, req, purchaseManage::exportList);
}

@ApiOperation(value = "填写采购结果", notes = "填写采购结果")
@ApiOperation(value = "填写采购结果")
@WebLog("填写采购结果")
@PostMapping("/submit-result")
public String submitResult(@Validated @RequestBody PurchaseSaveDTO dto) {


+ 7
- 1
hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/manage/ConstructionManage.java View File

@@ -79,7 +79,6 @@ public class ConstructionManage {

private final IProjectService projectService;
private final UserInfoHelper userInfoHelper;

private final IPurchaseService purchaseService;
private final IPurchaseInstService purchaseInstService;
private final IContractService contractService;
@@ -283,6 +282,13 @@ public class ConstructionManage {
!ProjectStatusEnum.PROJECT_APPROVED.getCode().equals(project.getStage()))
.throwMessage("提交失败 该项目不是 建设中或者已立项阶段");

Purchase purchase = purchaseService.getById(req.getBidId());

if (!TenderStatusEnum.TO_BE_SUBMIT_CONSTRUCTION_INFO.eq(purchase.getStatus())) {
throw BizException.wrap("该标段不支持填写合同信息");
}
tenderStateMachineUtil.pass(purchase);
purchaseService.updateById(purchase);
LocalDateTime now = LocalDateTime.now();
Contract contract = new Contract();
contract.setContractTime(req.getContractTime());


+ 14
- 17
hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/manage/OperationManage.java View File

@@ -4,17 +4,19 @@ import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.toolkit.Assert;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.hz.pm.api.common.model.constant.BizConst;
import com.hz.pm.api.common.statemachine.util.StateMachineUtil;
import com.hz.pm.api.common.statemachine.util.TenderStateMachineUtil;
import com.hz.pm.api.projectdeclared.model.dto.OperationReq;
import com.hz.pm.api.projectdeclared.model.entity.Operation;
import com.hz.pm.api.projectdeclared.model.entity.Purchase;
import com.hz.pm.api.projectdeclared.model.vo.OperationVO;
import com.hz.pm.api.projectdeclared.service.IOperationService;
import com.hz.pm.api.projectdeclared.service.IPurchaseService;
import com.hz.pm.api.projectlib.model.entity.Project;
import com.hz.pm.api.projectlib.model.enumeration.ProjectStatusEnum;
import com.hz.pm.api.projectlib.model.enumeration.TenderStatusEnum;
import com.hz.pm.api.projectlib.service.IProjectService;
import com.hz.pm.api.user.security.model.UserInfoDetails;
import com.hz.pm.api.user.util.LoginUserUtil;
import com.ningdatech.basic.function.VUtils;
import com.ningdatech.basic.exception.BizException;
import com.ningdatech.basic.util.CollUtils;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@@ -37,10 +39,9 @@ import java.util.Objects;
public class OperationManage {

private final IOperationService operationService;
private final IPurchaseService purchaseService;
private final IProjectService projectService;

private final StateMachineUtil stateMachineUtil;
private final TenderStateMachineUtil tenderStateMachineUtil;

/**
* 获取实施详情
@@ -61,20 +62,14 @@ public class OperationManage {
@Transactional(rollbackFor = Exception.class)
public String pushOperation(OperationReq req) {
UserInfoDetails user = LoginUserUtil.loginUserDetail();

Project project = projectService.getNewProject(req.getProjectId());
Assert.notNull(project, "项目不存在!");

//首先要判断 项目当前状态 是不是 待开工状态
VUtils.isTrue(!ProjectStatusEnum.OPERATION.eq(project.getStatus()) ||
!ProjectStatusEnum.PROJECT_APPROVED.eq(project.getStage()))
.throwMessage("提交失败 该项目不是 待开工或者已立项阶段");

Purchase purchase = purchaseService.getById(req.getBidId());
if (!TenderStatusEnum.TO_BE_SUBMIT_OPERATION_PLAN.eq(purchase.getStatus())) {
throw BizException.wrap("该标段不支持填写实施计划");
}
Operation pre = operationService.getOne(Wrappers.lambdaQuery(Operation.class)
.eq(Operation::getProjectCode, project.getProjectCode())
.eq(Operation::getBidId, req.getBidId())
.last(BizConst.LIMIT_1));
Project project = projectService.getNewProject(req.getProjectId());
LocalDateTime now = LocalDateTime.now();
Operation curr = BeanUtil.copyProperties(req, Operation.class);
if (Objects.nonNull(pre)) {
@@ -87,6 +82,8 @@ public class OperationManage {
curr.setUpdateOn(now);
curr.setUpdateBy(user.getUsername());
operationService.saveOrUpdate(curr);
tenderStateMachineUtil.pass(purchase);
purchaseService.updateById(purchase);
return curr.getProjectCode();
}
}

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

@@ -8,21 +8,26 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.google.common.collect.Lists;
import com.hz.pm.api.common.helper.UserInfoHelper;
import com.hz.pm.api.common.statemachine.util.StateMachineUtil;
import com.hz.pm.api.common.statemachine.util.TenderStateMachineUtil;
import com.hz.pm.api.common.util.ExcelDownUtil;
import com.hz.pm.api.common.util.ExcelExportStyle;
import com.hz.pm.api.projectdeclared.model.dto.DeclaredProjectExportDTO;
import com.hz.pm.api.projectdeclared.model.dto.PurchaseSaveDTO;
import com.hz.pm.api.projectdeclared.model.entity.Contract;
import com.hz.pm.api.projectdeclared.model.entity.Purchase;
import com.hz.pm.api.projectdeclared.model.req.SubmitPurchaseNoticeReq;
import com.hz.pm.api.projectdeclared.model.req.SubmitPurchaseRecordReq;
import com.hz.pm.api.projectdeclared.model.vo.PurchaseVO;
import com.hz.pm.api.projectdeclared.service.IContractService;
import com.hz.pm.api.projectdeclared.service.IPurchaseService;
import com.hz.pm.api.projectlib.helper.ProjectHelper;
import com.hz.pm.api.projectlib.model.entity.Project;
import com.hz.pm.api.projectlib.model.enumeration.ProjectStatusEnum;
import com.hz.pm.api.projectlib.model.enumeration.ProjectTypeNewEnum;
import com.hz.pm.api.projectlib.model.enumeration.TenderStatusEnum;
import com.hz.pm.api.projectlib.model.req.ProjectListReq;
import com.hz.pm.api.projectlib.model.vo.ProjectLibListItemVO;
import com.hz.pm.api.projectlib.model.vo.TenderListInfoVO;
import com.hz.pm.api.projectlib.service.IProjectService;
import com.hz.pm.api.user.security.model.UserFullInfoDTO;
import com.hz.pm.api.user.security.model.UserInfoDetails;
@@ -46,6 +51,7 @@ import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;

/**
* @Classname PurchaseManage
@@ -60,9 +66,9 @@ public class PurchaseManage {

private final IProjectService projectService;
private final UserInfoHelper userInfoHelper;
private final IContractService contractService;
private final IPurchaseService purchaseService;
private final TenderStateMachineUtil tenderStateMachineUtil;
private final StateMachineUtil stateMachineUtil;

/**
@@ -72,7 +78,7 @@ public class PurchaseManage {
* @return
*/
public PageVo<ProjectLibListItemVO> projectLibList(ProjectListReq req) {
UserFullInfoDTO user = userInfoHelper.getUserFullInfo(LoginUserUtil.getUserId());
UserInfoDetails user = LoginUserUtil.loginUserDetail();
Assert.notNull(user, "获取登录用户失败!");
LambdaQueryWrapper<Project> query = ProjectHelper.projectQuery(req);
//只能看自己单位的
@@ -88,6 +94,10 @@ public class PurchaseManage {
if ((total = page.getTotal()) == 0) {
return PageVo.empty();
}
List<Long> projectIds = CollUtils.fieldList(page.getRecords(), Project::getId);
List<Purchase> purchases = purchaseService.listByProjectIds(projectIds);
Map<Long, List<Purchase>> purchaseMap = CollUtils.group(purchases, Purchase::getProjectId);
Map<Long, Contract> contractMap = contractService.listByProjectIds(projectIds);
List<ProjectLibListItemVO> records = CollUtils.convert(page.getRecords(), w -> {
ProjectLibListItemVO item = new ProjectLibListItemVO();
item.setId(w.getId());
@@ -105,6 +115,22 @@ public class PurchaseManage {
item.setIsHigherSuperOrg(w.getIsHigherSuperOrg());
item.setApprovedAmount(w.getApprovalAmount());
item.setApprovalDate(w.getApprovalDate());
List<Purchase> currPurchases = purchaseMap.get(w.getId());
if (currPurchases != null) {
List<TenderListInfoVO> tmpPurchases = CollUtils.convert(currPurchases, x -> {
TenderListInfoVO tender = new TenderListInfoVO();
tender.setBidName(x.getBidName());
tender.setBidId(x.getId());
tender.setBidStatus(x.getStatus());
tender.setBidStatusName(TenderStatusEnum.getDescByStatus(x.getStatus()));
Contract contract = contractMap.get(x.getId());
if (contract != null) {
tender.setConstructionAmount(contract.getTotalAmount());
}
return tender;
});
item.setTenders(tmpPurchases);
}
return item;
});
return PageVo.of(records, total);
@@ -228,33 +254,31 @@ public class PurchaseManage {
VUtils.isTrue(!ProjectStatusEnum.TO_BE_PURCHASED.eq(project.getStatus())
|| !ProjectStatusEnum.PROJECT_APPROVED.eq(project.getStage()))
.throwMessage("提交失败,该项目不是待采购备案状态或者已立项阶段");
Purchase purchase = new Purchase();
purchase.setPurchaseMethod(req.getPurchaseMethod());
purchase.setBidAddress(req.getBidAddress());
purchase.setBidName(req.getBidName());
purchase.setBidBudget(req.getBidBudget());
purchase.setBidDoc(req.getBidDoc());
purchase.setBidStartTime(req.getBidStartTime());
purchase.setBidEndTime(req.getBidEndTime());
purchase.setId(req.getBidId());
purchase.setProjectId(projectId);
if (purchase.getId() == null) {
purchase.setCreateBy(user.getUserIdStr());
}
purchaseService.saveOrUpdate(purchase);
List<Purchase> purchases = req.getTenders().stream().map(w -> {
Purchase purchase = new Purchase();
purchase.setPurchaseMethod(w.getPurchaseMethod());
purchase.setBidAddress(w.getBidAddress());
purchase.setBidName(w.getBidName());
purchase.setBidBudget(w.getBidBudget());
purchase.setBidDoc(w.getBidDoc());
purchase.setBidStartTime(w.getBidStartTime());
purchase.setBidEndTime(w.getBidEndTime());
purchase.setId(w.getBidId());
purchase.setProjectId(projectId);
if (purchase.getId() == null) {
purchase.setCreateBy(user.getUserIdStr());
}
purchase.setStatus(TenderStatusEnum.TO_BE_SUBMIT_PURCHASE_INFO.getTenderStatus());
return purchase;
}).collect(Collectors.toList());
purchaseService.saveOrUpdateBatch(purchases);
}

public void submitPurchaseRecord(SubmitPurchaseRecordReq req) {
Long projectId = req.getProjectId();
Project project = projectService.getNewProject(projectId);
Assert.notNull(project, "提交失败 此项目不存在!");

//首先要判断 项目当前状态 是不是 采购结果备案
VUtils.isTrue(!ProjectStatusEnum.TO_BE_PURCHASED.eq(project.getStatus())
|| !ProjectStatusEnum.PROJECT_APPROVED.eq(project.getStage()))
.throwMessage("提交失败,该项目不是待采购备案状态或者已立项阶段");

Purchase purchase = new Purchase();
Purchase purchase = purchaseService.getById(req.getBidId());
if (!TenderStatusEnum.TO_BE_SUBMIT_PURCHASE_INFO.eq(purchase.getStatus())) {
throw BizException.wrap("该标段无法进行采购信息备案");
}
purchase.setId(req.getBidId());
purchase.setAcceptanceLetter(req.getAcceptanceLetter());
purchase.setBidBuildContent(req.getBidBuildContent());
@@ -262,6 +286,7 @@ public class PurchaseManage {
purchase.setSupplier(req.getSupplier());
purchase.setSupplierSocialCreditCode(req.getSupplierSocialCreditCode());
purchase.setBidType(req.getBidType());
tenderStateMachineUtil.pass(purchase);
purchaseService.saveOrUpdate(purchase);
}



+ 24
- 19
hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/model/req/SubmitPurchaseNoticeReq.java View File

@@ -5,7 +5,6 @@ import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;

import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.time.LocalDateTime;
@@ -27,31 +26,37 @@ public class SubmitPurchaseNoticeReq {
@NotNull(message = "请传项目ID")
private Long projectId;

@ApiModelProperty("标段信息")
private List<PurchaseNoticeTenderDTO> tenders;

@ApiModelProperty("标段ID")
private Long bidId;
@Data
public static class PurchaseNoticeTenderDTO {

@ApiModelProperty("标段名称")
private String bidName;
@ApiModelProperty("标段ID")
private Long bidId;

@ApiModelProperty("标段预算")
private BigDecimal bidBudget;
@ApiModelProperty("标段名称")
private String bidName;

@ApiModelProperty("开标时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm")
private LocalDateTime bidStartTime;
@ApiModelProperty("标段预算")
private BigDecimal bidBudget;

@ApiModelProperty("投标截止时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm")
private LocalDateTime bidEndTime;
@ApiModelProperty("开标时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm")
private LocalDateTime bidStartTime;

@ApiModelProperty("投标地址")
private String bidAddress;
@ApiModelProperty("投标截止时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm")
private LocalDateTime bidEndTime;

@ApiModelProperty("采购方式")
private String purchaseMethod;
@ApiModelProperty("投标地址")
private String bidAddress;

@ApiModelProperty("招标文件")
private String bidDoc;
@ApiModelProperty("采购方式")
private String purchaseMethod;

@ApiModelProperty("招标文件")
private String bidDoc;

}
}

+ 19
- 1
hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/service/IContractService.java View File

@@ -1,11 +1,17 @@
package com.hz.pm.api.projectdeclared.service;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.IService;
import com.hz.pm.api.projectdeclared.model.entity.Contract;
import com.ningdatech.basic.util.CollUtils;

import java.util.Collection;
import java.util.Map;

/**
* <p>
* 服务类
* 服务类
* </p>
*
* @author zpf
@@ -13,4 +19,16 @@ import com.hz.pm.api.projectdeclared.model.entity.Contract;
*/
public interface IContractService extends IService<Contract> {

default Map<Long, Contract> listByBidIds(Collection<Long> bidIds) {
LambdaQueryWrapper<Contract> query = Wrappers.lambdaQuery(Contract.class)
.in(Contract::getBidId, bidIds);
return CollUtils.listToMap(list(query), Contract::getBidId);
}

default Map<Long, Contract> listByProjectIds(Collection<Long> projectIds) {
LambdaQueryWrapper<Contract> query = Wrappers.lambdaQuery(Contract.class)
.in(Contract::getProjectId, projectIds);
return CollUtils.listToMap(list(query), Contract::getBidId);
}

}

+ 5
- 2
hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/service/IPurchaseService.java View File

@@ -18,11 +18,14 @@ public interface IPurchaseService extends IService<Purchase> {

default List<Purchase> listByProjectId(Long projectId) {
return list(Wrappers.lambdaQuery(Purchase.class)
.eq(Purchase::getProjectId, projectId));
.eq(Purchase::getProjectId, projectId)
.orderByAsc(Purchase::getId));
}

default List<Purchase> listByProjectIds(List<Long> projectIds) {
return list(Wrappers.lambdaQuery(Purchase.class)
.in(Purchase::getProjectId, projectIds));
.in(Purchase::getProjectId, projectIds)
.orderByAsc(Purchase::getId));
}

}

+ 11
- 1
hz-pm-api/src/main/java/com/hz/pm/api/projectlib/handle/ProcessExecuteChainHandle.java View File

@@ -10,6 +10,7 @@ import com.hz.pm.api.projectlib.model.entity.Project;
import com.hz.pm.api.projectlib.service.IProjectService;
import com.wflow.bean.entity.WflowModels;
import com.wflow.workflow.bean.vo.ProcessDetailVO;
import com.wflow.workflow.enums.StepStatusEnum;
import com.wflow.workflow.service.ProcessModelService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;
@@ -60,7 +61,7 @@ public class ProcessExecuteChainHandle {
.eq(WflowModels::getProcessType, ProjectProcessStageEnum.CONSTRUCTION_PROJECT_APPROVAL_PROCESS.getCode())
.last(BizConst.LIMIT_1));
if (Objects.nonNull(model) && (Boolean.FALSE.equals(model.getIsStop()))) {
handles.add(processBusinessHandle);
handles.add(processBusinessHandle);
}
} else if (processBusinessHandle instanceof ProvinceUnitedReviewHandle) {
//省级联审
@@ -75,6 +76,15 @@ public class ProcessExecuteChainHandle {
for (AbstractProcessBusinessHandle processBusinessHandle : handles) {
processBusinessHandle.businessHandle(projectId, processSchedule);
}
for (int i = processSchedule.size() - 1; i >= 1; i--) {
ProcessDetailVO curr = processSchedule.get(i);
if (curr.getStepStatus() == null ||
curr.getStepStatus().equals(StepStatusEnum.NOT_START)) {
continue;
}
ProcessDetailVO pre = processSchedule.get(i - 1);
pre.setStepStatus(StepStatusEnum.COMPLETED);
}
return processSchedule;
}
return Collections.emptyList();


+ 22
- 20
hz-pm-api/src/main/java/com/hz/pm/api/projectlib/handle/ProjectApprovalHandle.java View File

@@ -4,7 +4,6 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.hz.pm.api.common.model.constant.BizConst;
import com.hz.pm.api.common.model.constant.CommonConst;
import com.hz.pm.api.common.statemachine.event.ProjectStatusChangeEvent;
import com.hz.pm.api.projectlib.manage.AnnualPlanLibManage;
import com.hz.pm.api.projectlib.model.entity.Project;
import com.hz.pm.api.projectlib.model.entity.ProjectStatusChange;
import com.hz.pm.api.projectlib.model.enumeration.ProjectStatusEnum;
@@ -32,7 +31,8 @@ public class ProjectApprovalHandle extends AbstractProcessBusinessHandle {

private Integer order = 8;

public ProjectApprovalHandle(AnnualPlanLibManage annualPlanLibManage, INdProjectStatusChangeService projectStatusChangeService, IProjectService projectService) {
public ProjectApprovalHandle(INdProjectStatusChangeService projectStatusChangeService,
IProjectService projectService) {
this.projectStatusChangeService = projectStatusChangeService;
this.projectService = projectService;
}
@@ -40,46 +40,48 @@ public class ProjectApprovalHandle extends AbstractProcessBusinessHandle {
@Override
void businessHandle(Long projectId, List<ProcessDetailVO> processSchedule) {
ProcessDetailVO processDetailVO = new ProcessDetailVO();
processDetailVO.setProcessName(CommonConst.PROJECT_APPROVAL);
Project project = projectService.getNewProject(projectId);

//查出历史版本的 所有项目ID
List<Long> allVersionProjectIds = projectService.getAllVersionProjectId(project);
Integer status = project.getStatus();
if (Objects.isNull(status)) {
return;
}

// 项目状态为待立项批复之前的状态
if (status < ProjectStatusEnum.TO_BE_APPROVED.getCode()) {
processDetailVO.setStepStatus(StepStatusEnum.NOT_START);
processDetailVO.setProcessName(CommonConst.PROJECT_APPROVAL);
processSchedule.add(processDetailVO);
return;
}

// 当前项目状态为待立项批复
if (ProjectStatusEnum.TO_BE_APPROVED.getCode().equals(status)) {
if (ProjectStatusEnum.TO_BE_APPROVED.eq(status)
|| ProjectStatusEnum.DECLARED_APPROVED_RECORD_AUDITING.eq(status)) {
// 根据建设方案评审通过的时间获取
ProjectStatusChange projectStatusChange = projectStatusChangeService.getOne(Wrappers.lambdaQuery(ProjectStatusChange.class)
.in(ProjectStatusChange::getProjectId, allVersionProjectIds)
.eq(ProjectStatusChange::getEvent, ProjectStatusChangeEvent.PLAN_REVIEW_PASS.name())
.in(ProjectStatusChange::getEvent, ProjectStatusChangeEvent.PLAN_REVIEW_PASS,
ProjectStatusChangeEvent.DECLARED_RECORD_SUBMIT,
ProjectStatusChangeEvent.DECLARED_RECORD_RESUBMIT)
.orderByDesc(ProjectStatusChange::getCreateOn)
.last(BizConst.LIMIT_1));
processDetailVO.setFinishTime(projectStatusChange.getCreateOn());
processDetailVO.setStepStatus(StepStatusEnum.ON_GOING);

} else {
// 取 状态机 改变状态时间
ProjectStatusChange projectStatusChange = projectStatusChangeService.getOne(Wrappers.lambdaQuery(ProjectStatusChange.class)
.in(ProjectStatusChange::getProjectId, allVersionProjectIds)
.eq(ProjectStatusChange::getEvent, ProjectStatusChangeEvent.PROJECT_APPROVAL.name())
.last(BizConst.LIMIT_1));
if (Objects.nonNull(projectStatusChange)) {
processDetailVO.setFinishTime(projectStatusChange.getCreateOn());
processDetailVO.setStepStatus(StepStatusEnum.COMPLETED);
}
return;
}
processDetailVO.setProcessName(CommonConst.PROJECT_APPROVAL);
// 取 状态机 改变状态时间
ProjectStatusChange projectStatusChange = projectStatusChangeService.getOne(Wrappers.lambdaQuery(ProjectStatusChange.class)
.in(ProjectStatusChange::getProjectId, allVersionProjectIds)
.in(ProjectStatusChange::getEvent, ProjectStatusChangeEvent.PLAN_REVIEW_PASS,
ProjectStatusChangeEvent.DECLARED_RECORD_FAILED,
ProjectStatusChangeEvent.DECLARED_RECORD_PASS)
.last(BizConst.LIMIT_1));
if (Objects.nonNull(projectStatusChange)) {
processDetailVO.setFinishTime(projectStatusChange.getCreateOn());
processDetailVO.setStepStatus(StepStatusEnum.COMPLETED);
}

processSchedule.add(processDetailVO);
}



+ 10
- 11
hz-pm-api/src/main/java/com/hz/pm/api/projectlib/handle/UnitInnerAuditHandle.java View File

@@ -5,15 +5,14 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.google.common.collect.Lists;
import com.hz.pm.api.common.model.constant.BizConst;
import com.hz.pm.api.common.model.constant.CommonConst;
import com.hz.pm.api.projectlib.model.enumeration.InstTypeEnum;
import com.hz.pm.api.projectlib.model.entity.Project;
import com.hz.pm.api.projectlib.model.entity.ProjectInst;
import com.hz.pm.api.projectlib.model.enumeration.InstTypeEnum;
import com.hz.pm.api.projectlib.service.IProjectInstService;
import com.hz.pm.api.projectlib.service.IProjectService;
import com.hz.pm.api.projectlib.utils.ProjectVersionUtil;
import com.hz.pm.api.todocenter.constant.TodoCenterConst;
import com.hz.pm.api.todocenter.utils.BuildUserUtils;
import com.ningdatech.basic.exception.BizException;
import com.ningdatech.basic.util.NdDateUtils;
import com.wflow.workflow.bean.dto.ProcessInstanceUserDto;
import com.wflow.workflow.bean.process.ProgressNode;
@@ -49,7 +48,7 @@ public class UnitInnerAuditHandle extends AbstractProcessBusinessHandle {

private Integer order = 2;

public UnitInnerAuditHandle(IProjectInstService projectInstService, ProcessInstanceService processInstanceService, BuildUserUtils buildUserUtils, ProjectVersionUtil projectVersionUtil, IProjectService projectService){
public UnitInnerAuditHandle(IProjectInstService projectInstService, ProcessInstanceService processInstanceService, BuildUserUtils buildUserUtils, ProjectVersionUtil projectVersionUtil, IProjectService projectService) {
this.projectInstService = projectInstService;
this.processInstanceService = processInstanceService;
this.buildUserUtils = buildUserUtils;
@@ -60,6 +59,7 @@ public class UnitInnerAuditHandle extends AbstractProcessBusinessHandle {
@Override
void businessHandle(Long projectId, List<ProcessDetailVO> processSchedule) {
ProcessDetailVO processDetailVO = new ProcessDetailVO();
processDetailVO.setProcessName(CommonConst.UNIT_INNER_AUDIT);
Project project = projectService.getById(projectId);
List<Long> allVersionProjectIds = projectService.getAllVersionProjectId(project);
// 根据项目ID查询出单位内部审核流程的流程状态
@@ -74,19 +74,20 @@ public class UnitInnerAuditHandle extends AbstractProcessBusinessHandle {
// 未找到当前版本项目的单位内部审核流程且当前项目版本号大于1(是被驳回重新申报的项目)
// 注意:已经在项目库中的项目,一定是单位内部审核已经开始的项目
if (Objects.isNull(projectInst)) {
if (project.getVersion() > CommonConst.VERSION_ONE){
if (project.getVersion() > CommonConst.VERSION_ONE) {
// 获取上个版本的信息
instanceDetail = projectVersionUtil.getPreVerProcessInfo(projectId, InstTypeEnum.UNIT_INNER_AUDIT);
}
}else {
} else {
String instCode = projectInst.getInstCode();
instanceDetail = processInstanceService.getProgressInstanceDetail(null, instCode);
}
if (Objects.isNull(instanceDetail)){
throw new BizException("未获取到单位内部审核流程详情!");
processSchedule.add(processDetailVO);
if (Objects.isNull(instanceDetail)) {
return;
}
String status = instanceDetail.getStatus();
if (ProcessStatusEnum.UNDER_REVIEW.getDesc().equals(status)){
if (ProcessStatusEnum.UNDER_REVIEW.getDesc().equals(status)) {
processDetailVO.setStepStatus(StepStatusEnum.ON_GOING);
} else if (ProcessStatusEnum.BE_REJECTED.getDesc().equals(status)) {
processDetailVO.setStepStatus(StepStatusEnum.REJECTED);
@@ -107,13 +108,11 @@ public class UnitInnerAuditHandle extends AbstractProcessBusinessHandle {
LocalDateTime finishTime = NdDateUtils.date2LocalDateTime(progressNode.getFinishTime());
processDetailVO.setFinishTime(finishTime);
}
}else {
} else {
LocalDateTime finishTime = NdDateUtils.date2LocalDateTime(instanceDetail.getStartTime());
processDetailVO.setFinishTime(finishTime);
}
processDetailVO.setProcessProgressVo(instanceDetail);
processDetailVO.setProcessName(CommonConst.UNIT_INNER_AUDIT);
processSchedule.add(processDetailVO);
}

@Override


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

@@ -162,6 +162,10 @@ public class ProjectLibListItemVO {

@ApiModelProperty("年度投资金额总额")
private BigDecimal annualAccumulateAmount;

private List<AnnualAmountVO> annualAccumulateAmountList;

@ApiModelProperty("标段信息")
private List<TenderListInfoVO> tenders;

}

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

@@ -0,0 +1,35 @@
package com.hz.pm.api.projectlib.model.vo;

import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.math.BigDecimal;

/**
* <p>
* TenderInfoVO
* </p>
*
* @author WendyYang
* @since 14:10 2024/2/25
*/
@Data
public class TenderListInfoVO {

@ApiModelProperty("标段ID")
private Long bidId;

@ApiModelProperty("标段名称")
private String bidName;

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

@ApiModelProperty("标段状态描述")
private String bidStatusName;

@ApiModelProperty("合同金额")
private BigDecimal constructionAmount;


}

+ 18
- 2
hz-pm-api/src/main/java/com/hz/pm/api/projectlib/service/IMhProjectService.java View File

@@ -1,11 +1,14 @@
package com.hz.pm.api.projectlib.service;

import com.hz.pm.api.projectlib.model.entity.MhProject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.IService;
import com.hz.pm.api.common.model.constant.BizConst;
import com.hz.pm.api.projectlib.model.entity.MhProject;

/**
* <p>
* 服务类
* 服务类
* </p>
*
* @author WendyYang
@@ -13,4 +16,17 @@ import com.baomidou.mybatisplus.extension.service.IService;
*/
public interface IMhProjectService extends IService<MhProject> {

default MhProject getByProjectCode(String projectCode) {
LambdaQueryWrapper<MhProject> query = Wrappers.lambdaQuery(MhProject.class)
.eq(MhProject::getProjectCode, projectCode);
return getOne(query);
}

default boolean existsByProjectCode(String projectCode) {
LambdaQueryWrapper<MhProject> query = Wrappers.lambdaQuery(MhProject.class)
.eq(MhProject::getProjectCode, projectCode)
.last(BizConst.LIMIT_1);
return count(query) > 0;
}

}

Loading…
Cancel
Save