@@ -52,11 +52,11 @@ public enum TenderStatusChangeEvent { | |||
/** | |||
* 终验申报重新提交 | |||
*/ | |||
RESUBMIT_FINALLY_INSPECTED(402, null, null), | |||
RESUBMIT_FINALLY_INSPECTED(502, null, null), | |||
/** | |||
* 终验申报通过 | |||
*/ | |||
FINALLY_INSPECTED_PASSED(502, null, null), | |||
FINALLY_INSPECTED_PASSED(501, null, null), | |||
/** | |||
* 终验申报拒绝 | |||
*/ | |||
@@ -21,6 +21,7 @@ import org.springframework.validation.annotation.Validated; | |||
import org.springframework.web.bind.annotation.*; | |||
import javax.servlet.http.HttpServletResponse; | |||
import javax.validation.Valid; | |||
import java.util.List; | |||
/** | |||
@@ -106,7 +107,7 @@ public class ConstructionController { | |||
@ApiOperation("信创符合性申请") | |||
@WebLog("信创符合性申请") | |||
@PostMapping("/submitXcfhxApply") | |||
public void submitXcfhxApply(@RequestBody XcfhxApplyReq req) { | |||
public void submitXcfhxApply(@RequestBody @Valid XcfhxApplyReq req) { | |||
constructionManage.submitXcfhxApply(req); | |||
} | |||
@@ -78,14 +78,14 @@ public class DeclaredProjectController { | |||
@WebLog("申报项目保存至草稿箱") | |||
@PostMapping("/save-to-draft") | |||
public Object saveToDraft(@Validated @RequestBody ProjectDraftSaveDTO dto) { | |||
return declaredProjectManage.saveToDraft(dto, ProjectDraftTypeEnum.PROJECT_DECLARED.getCode()); | |||
return declaredProjectManage.saveToDraft(dto, ProjectDraftTypeEnum.PROJECT_DECLARED); | |||
} | |||
@ApiOperation(value = "立项备案保存至草稿箱", notes = "立项备案保存至草稿箱") | |||
@WebLog("立项备案保存至草稿箱") | |||
@PostMapping("/declaredRecord/save-to-draft") | |||
public Object declaredRecordSaveToDraft(@Validated @RequestBody ProjectDraftSaveDTO dto) { | |||
return declaredProjectManage.saveToDraft(dto, ProjectDraftTypeEnum.DECLARED_RECORD.getCode()); | |||
return declaredProjectManage.saveToDraft(dto, ProjectDraftTypeEnum.DECLARED_RECORD); | |||
} | |||
@ApiOperation(value = "申报项目", notes = "申报项目") | |||
@@ -29,16 +29,16 @@ import com.hz.pm.api.projectdeclared.model.vo.ProjectContractListVO; | |||
import com.hz.pm.api.projectdeclared.service.*; | |||
import com.hz.pm.api.projectlib.helper.ProjectHelper; | |||
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.entity.ProjectAnnualPaymentPlan; | |||
import com.hz.pm.api.projectlib.model.entity.ProjectInst; | |||
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.IProjectInstService; | |||
import com.hz.pm.api.projectlib.service.IProjectAnnualPaymentPlanService; | |||
import com.hz.pm.api.projectlib.service.IProjectInstService; | |||
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; | |||
@@ -334,6 +334,16 @@ public class ConstructionManage { | |||
return "填写成功"; | |||
} | |||
private static final List<TenderStatusEnum> PRE_INSPECTED_PURCHASE_STATUS; | |||
static { | |||
PRE_INSPECTED_PURCHASE_STATUS = new ArrayList<>(); | |||
PRE_INSPECTED_PURCHASE_STATUS.add(TenderStatusEnum.TO_BE_SUBMIT_FIRST_INSPECTED_INFO); | |||
PRE_INSPECTED_PURCHASE_STATUS.add(TenderStatusEnum.TO_BE_SUBMIT_XCFHX_APPLY); | |||
PRE_INSPECTED_PURCHASE_STATUS.add(TenderStatusEnum.ON_XCFHX_APPLY); | |||
PRE_INSPECTED_PURCHASE_STATUS.add(TenderStatusEnum.XCFHX_APPLY_FAILED); | |||
} | |||
/** | |||
* 待初验项目列表 | |||
* | |||
@@ -342,11 +352,12 @@ public class ConstructionManage { | |||
*/ | |||
public PageVo<ProjectLibListItemVO> preProjectList(ProjectListReq req) { | |||
UserInfoDetails user = LoginUserUtil.loginUserDetail(); | |||
VUtils.isTrue(Objects.isNull(user)).throwMessage("获取登录用户失败!"); | |||
Set<Long> projectIds = purchaseService.listProjectIdByStatus(PRE_INSPECTED_PURCHASE_STATUS); | |||
if (projectIds.isEmpty()) { | |||
return PageVo.empty(); | |||
} | |||
LambdaQueryWrapper<Project> query = ProjectHelper.projectQuery(req); | |||
//建设中状态 | |||
query.in(Project::getStatus, ProjectStatusEnum.TO_BE_FIRST_INSPECTED.getCode(), | |||
ProjectStatusEnum.ON_FIRST_INSPECTED.getCode()); | |||
query.in(Project::getId, projectIds); | |||
query.eq(Project::getStage, ProjectStatusEnum.PROJECT_APPROVED.getCode()); | |||
query.eq(Project::getNewest, Boolean.TRUE); | |||
//只能看自己单位的 | |||
@@ -357,12 +368,8 @@ public class ConstructionManage { | |||
if ((total = page.getTotal()) == 0) { | |||
return PageVo.empty(); | |||
} | |||
List<Long> projectIds = new ArrayList<>(); | |||
for (Project project : page.getRecords()) { | |||
projectIds.add(project.getId()); | |||
} | |||
List<Purchase> purchases = purchaseService.listByProjectIds(projectIds); | |||
List<Long> currPageProjectIds = CollUtils.fieldList(page.getRecords(), Project::getId); | |||
List<Purchase> purchases = purchaseService.listByProjectIds(currPageProjectIds); | |||
Map<Long, List<Purchase>> purchaseMap = CollUtils.group(purchases, Purchase::getProjectId); | |||
Map<Long, Contract> contractMap = contractService.listByProjectIds(projectIds); | |||
Map<Long, List<ProjectAnnualPaymentPlan>> paymentPlansMap = projectPaymentPlanService.listByProjectIds(projectIds); | |||
@@ -621,9 +628,11 @@ public class ConstructionManage { | |||
purchase.setActualPerformanceIndicators(req.getActualPerformanceIndicators()); | |||
purchaseService.updateById(purchase); | |||
// 判断是否所有标段都上传了初验材料 | |||
List<Purchase> purchases = purchaseService.listByProjectId(req.getProjectId()); | |||
boolean finishedPreInst = purchases.stream().noneMatch(w -> TenderStatusEnum.TO_BE_SUBMIT_FIRST_INSPECTED_INFO.eq(w.getStatus())); | |||
if (finishedPreInst) { | |||
LambdaQueryWrapper<Purchase> purchaseQuery = Wrappers.lambdaQuery(Purchase.class) | |||
.eq(Purchase::getProjectId, req.getProjectId()) | |||
.apply("LENGTH(NVL(preliminary_inspection_materials,'')) = 0") | |||
.last(BizConst.LIMIT_1); | |||
if (purchaseService.count(purchaseQuery) == 0) { | |||
Project project = projectService.getById(req.getProjectId()); | |||
stateMachineUtil.pass(project); | |||
projectService.updateById(project); | |||
@@ -26,6 +26,7 @@ import com.hz.pm.api.irs.manage.ProjectIrsManage; | |||
import com.hz.pm.api.projectdeclared.contants.DeclaredProjectConst; | |||
import com.hz.pm.api.projectdeclared.model.dto.*; | |||
import com.hz.pm.api.projectdeclared.model.entity.ProjectDraft; | |||
import com.hz.pm.api.projectdeclared.model.enumerization.ProjectDraftTypeEnum; | |||
import com.hz.pm.api.projectdeclared.model.vo.ProjectDraftVO; | |||
import com.hz.pm.api.projectdeclared.service.IProjectDraftService; | |||
import com.hz.pm.api.projectlib.helper.ProjectHelper; | |||
@@ -312,9 +313,8 @@ public class DeclaredProjectManage { | |||
* @param dto \ | |||
* @return \ | |||
*/ | |||
public Long saveToDraft(ProjectDraftSaveDTO dto, Integer draftType) { | |||
public Long saveToDraft(ProjectDraftSaveDTO dto, ProjectDraftTypeEnum draftType) { | |||
UserInfoDetails user = LoginUserUtil.loginUserDetail(); | |||
Long userId = user.getUserId(); | |||
ProjectDTO projectInfo = dto.getProjectInfo(); | |||
ProjectDraft draft = new ProjectDraft(); | |||
@@ -323,7 +323,7 @@ public class DeclaredProjectManage { | |||
//写死 是否有主管单位 | |||
draft.setIsHigherSuperOrg(CommonEnum.YES.getCode()); | |||
draft.setIsSuperOrg(CommonEnum.YES.getCode()); | |||
draft.setUserId(String.valueOf(userId)); | |||
draft.setUserId(user.getUserIdStr()); | |||
draft.setBuildOrgCode(user.getMhUnitIdStr()); | |||
draft.setBuildOrgName(user.getMhUnitName()); | |||
@@ -344,9 +344,9 @@ public class DeclaredProjectManage { | |||
draft.setCreateOn(LocalDateTime.now()); | |||
} | |||
} | |||
draft.setDraftType(draftType); | |||
draft.setDraftType(draftType.getCode()); | |||
draft.setUpdateOn(LocalDateTime.now()); | |||
draft.setUserId(String.valueOf(userId)); | |||
draft.setUserId(user.getUserIdStr()); | |||
projectDraftService.saveOrUpdate(draft); | |||
return draft.getId(); | |||
} | |||
@@ -1,6 +1,7 @@ | |||
package com.hz.pm.api.projectdeclared.manage; | |||
import cn.hutool.core.collection.CollUtil; | |||
import cn.hutool.core.util.ArrayUtil; | |||
import com.alibaba.excel.EasyExcel; | |||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | |||
import com.baomidou.mybatisplus.core.toolkit.Assert; | |||
@@ -89,6 +90,15 @@ public class FinalAcceptanceManage { | |||
private final IProjectInstService projectInstService; | |||
private final HandlerManage handlerManage; | |||
private static final List<TenderStatusEnum> FINAL_INSPECTED_TENDER_STATUS; | |||
static { | |||
FINAL_INSPECTED_TENDER_STATUS = new ArrayList<>(); | |||
FINAL_INSPECTED_TENDER_STATUS.add(TenderStatusEnum.FINALLY_INSPECTED_FAILED); | |||
FINAL_INSPECTED_TENDER_STATUS.add(TenderStatusEnum.TO_BE_SUBMIT_FINALLY_INSPECTED_APPLY); | |||
FINAL_INSPECTED_TENDER_STATUS.add(TenderStatusEnum.ON_FINALLY_INSPECTED_APPLY); | |||
} | |||
/** | |||
* 待采购的-项目列表 | |||
@@ -97,12 +107,12 @@ public class FinalAcceptanceManage { | |||
* @return \ | |||
*/ | |||
public PageVo<ProjectLibListItemVO> projectLibList(ProjectListReq req) { | |||
UserInfoDetails user = LoginUserUtil.loginUserDetail(); | |||
LambdaQueryWrapper<Project> query = ProjectHelper.projectQuery(req); | |||
//待终验 并且还未过期 | |||
//只能看自己单位的 | |||
Set<Long> projectIds = purchaseService.listProjectIdByStatus(TenderStatusEnum.FINALLY_INSPECTED_FAILED, | |||
TenderStatusEnum.TO_BE_SUBMIT_FINALLY_INSPECTED_APPLY); | |||
Set<Long> projectIds = purchaseService.listProjectIdByStatus(FINAL_INSPECTED_TENDER_STATUS); | |||
if (projectIds.isEmpty()) { | |||
return PageVo.empty(); | |||
} | |||
@@ -1,27 +1,24 @@ | |||
package com.hz.pm.api.projectdeclared.model.entity; | |||
import com.baomidou.mybatisplus.annotation.*; | |||
import com.hz.pm.api.common.compare.Compare; | |||
import io.swagger.annotations.ApiModel; | |||
import io.swagger.annotations.ApiModelProperty; | |||
import lombok.AllArgsConstructor; | |||
import lombok.Data; | |||
import lombok.NoArgsConstructor; | |||
import java.math.BigDecimal; | |||
import java.time.LocalDateTime; | |||
/** | |||
* @Classname Purchase | |||
* @Description | |||
* @Date 2023/5/29 10:00 | |||
* @Author PoffyZhang | |||
* <p> | |||
* 采购信息(标段) | |||
* </p> | |||
* | |||
* @author WendyYang | |||
* @since 15:07 2024/2/28 | |||
*/ | |||
@TableName("nd_purchase") | |||
@ApiModel(value = "采购对象", description = "采购对象") | |||
@Data | |||
@AllArgsConstructor | |||
@NoArgsConstructor | |||
@TableName("nd_purchase") | |||
@ApiModel(value = "采购对象") | |||
public class Purchase { | |||
@TableId(type = IdType.AUTO) | |||
@@ -43,9 +40,11 @@ public class Purchase { | |||
private LocalDateTime updateOn; | |||
@ApiModelProperty("创建人 工号") | |||
@TableField(fill = FieldFill.INSERT) | |||
private String createBy; | |||
@ApiModelProperty("修改人 工号") | |||
@TableField(fill = FieldFill.INSERT_UPDATE) | |||
private String updateBy; | |||
@ApiModelProperty("供应商") | |||
@@ -104,10 +103,10 @@ public class Purchase { | |||
@ApiModelProperty("初验材料") | |||
private String preliminaryInspectionMaterials; | |||
@ApiModelProperty("是否完成日志数据归集") | |||
@ApiModelProperty("(初验)是否完成日志数据归集") | |||
private Boolean isCompletedLogCollection; | |||
@ApiModelProperty("实际成效指标") | |||
@ApiModelProperty("(初验)实际成效指标") | |||
private String actualPerformanceIndicators; | |||
@ApiModelProperty("终验申报材料") | |||
@@ -5,6 +5,8 @@ import io.swagger.annotations.ApiModelProperty; | |||
import lombok.AllArgsConstructor; | |||
import lombok.Data; | |||
import javax.validation.constraints.NotBlank; | |||
import javax.validation.constraints.NotEmpty; | |||
import javax.validation.constraints.NotNull; | |||
import java.math.BigDecimal; | |||
import java.time.LocalDateTime; | |||
@@ -27,6 +29,7 @@ public class SubmitPurchaseNoticeReq { | |||
private Long projectId; | |||
@ApiModelProperty("标段信息") | |||
@NotEmpty(message = "标段信息不能为空") | |||
private List<PurchaseNoticeTenderDTO> tenders; | |||
@Data | |||
@@ -36,26 +39,33 @@ public class SubmitPurchaseNoticeReq { | |||
private Long bidId; | |||
@ApiModelProperty("标段名称") | |||
@NotBlank(message = "标段名称不能为空") | |||
private String bidName; | |||
@ApiModelProperty("标段预算") | |||
@NotNull(message = "标段预算不能为空") | |||
private BigDecimal bidBudget; | |||
@ApiModelProperty("开标时间") | |||
@NotNull(message = "开标时间不能为空") | |||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm") | |||
private LocalDateTime bidStartTime; | |||
@ApiModelProperty("投标截止时间") | |||
@NotNull(message = "投标截止时间不能为空") | |||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm") | |||
private LocalDateTime bidEndTime; | |||
@ApiModelProperty("投标地址") | |||
@NotBlank(message = "投标地址不能为空") | |||
private String bidAddress; | |||
@ApiModelProperty("采购方式") | |||
@NotBlank(message = "采购方式不能为空") | |||
private String purchaseMethod; | |||
@ApiModelProperty("招标文件") | |||
@NotBlank(message = "招标文件不能为空") | |||
private String bidDoc; | |||
} | |||
@@ -3,6 +3,8 @@ package com.hz.pm.api.projectdeclared.model.req; | |||
import io.swagger.annotations.ApiModelProperty; | |||
import lombok.Data; | |||
import javax.validation.constraints.NotNull; | |||
/** | |||
* <p> | |||
* 信创符合性申请参数类 | |||
@@ -15,12 +17,15 @@ import lombok.Data; | |||
public class XcfhxApplyReq { | |||
@ApiModelProperty("项目ID") | |||
@NotNull(message = "项目ID不能为空") | |||
private Long projectId; | |||
@ApiModelProperty("标段ID") | |||
@NotNull(message = "标段ID不能为空") | |||
private Long bidId; | |||
@ApiModelProperty("是否符合信创符合性要求") | |||
@NotNull(message = "是否符合信创符合性要求不能为空") | |||
private Boolean matchXcfhx; | |||
@ApiModelProperty("备注") | |||
@@ -1,5 +1,6 @@ | |||
package com.hz.pm.api.projectdeclared.service; | |||
import cn.hutool.core.collection.CollUtil; | |||
import cn.hutool.core.util.ArrayUtil; | |||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | |||
import com.baomidou.mybatisplus.core.toolkit.Wrappers; | |||
@@ -33,11 +34,11 @@ public interface IPurchaseService extends IService<Purchase> { | |||
.orderByAsc(Purchase::getId)); | |||
} | |||
default Set<Long> listProjectIdByStatus(TenderStatusEnum... status) { | |||
if (ArrayUtil.isEmpty(status)) { | |||
default Set<Long> listProjectIdByStatus(Collection<TenderStatusEnum> status) { | |||
if (CollUtil.isEmpty(status)) { | |||
return Collections.emptySet(); | |||
} | |||
List<Integer> statusCodes = Arrays.stream(status) | |||
List<Integer> statusCodes = status.stream() | |||
.map(TenderStatusEnum::getTenderStatus) | |||
.collect(Collectors.toList()); | |||
LambdaQueryWrapper<Purchase> query = Wrappers.lambdaQuery(Purchase.class) | |||
@@ -417,7 +417,7 @@ public class HandlerManage { | |||
// 保存到草稿箱中 | |||
private void saveToDraft(Project req) { | |||
ProjectDraftSaveDTO draftSaveDto = new ProjectDraftSaveDTO(); | |||
ProjectDraftSaveDTO projectDraft = new ProjectDraftSaveDTO(); | |||
ProjectDTO projectInfo = new ProjectDTO(); | |||
BeanUtils.copyProperties(req, projectInfo); | |||
// 查询出项目关联的应用信息 | |||
@@ -432,8 +432,8 @@ public class HandlerManage { | |||
new TypeReference<Map<String, Object>>() { | |||
}); | |||
projectInfo.setDynamicForm(dynamicMap); | |||
draftSaveDto.setProjectInfo(projectInfo); | |||
declaredProjectManage.saveToDraft(draftSaveDto, ProjectDraftTypeEnum.PROJECT_DECLARED.getCode()); | |||
projectDraft.setProjectInfo(projectInfo); | |||
declaredProjectManage.saveToDraft(projectDraft, ProjectDraftTypeEnum.PROJECT_DECLARED); | |||
} | |||
/** | |||