@@ -32,6 +32,7 @@ public interface CommonConst { | |||||
String ARCHIVED = "归档"; | String ARCHIVED = "归档"; | ||||
String FILE_NAME = "name"; | String FILE_NAME = "name"; | ||||
String BASIS_FILE_NAME = "fileName"; | |||||
String NULL = "null"; | String NULL = "null"; | ||||
@@ -44,7 +44,7 @@ public class ProjectDeclareAction { | |||||
} | } | ||||
@OnTransition(source = "UNDER_INTERNAL_AUDIT_NOT_PASS", target = "UNDER_INTERNAL_AUDIT") | @OnTransition(source = "UNDER_INTERNAL_AUDIT_NOT_PASS", target = "UNDER_INTERNAL_AUDIT") | ||||
public void UNDER_INTERNAL_RESUBMIT(Message<ProjectStatusChangeEvent> message) { | |||||
public void UNDER_INTERNAL_REJECT_RESUBMIT(Message<ProjectStatusChangeEvent> message) { | |||||
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE); | Project project = (Project) message.getHeaders().get(PROJECT_DECLARE); | ||||
project.setStatus(ProjectStatusEnum.UNDER_INTERNAL_AUDIT.getCode()); | project.setStatus(ProjectStatusEnum.UNDER_INTERNAL_AUDIT.getCode()); | ||||
} | } | ||||
@@ -99,6 +99,12 @@ public class ProjectDeclareAction { | |||||
project.setStatus(ProjectStatusEnum.PREQUALIFICATION_FAILED.getCode()); | project.setStatus(ProjectStatusEnum.PREQUALIFICATION_FAILED.getCode()); | ||||
} | } | ||||
@OnTransition(source = "PREQUALIFICATION_FAILED", target = "PENDING_PREQUALIFICATION_CHOICE") | |||||
public void PRELIMINARY_REVIEW_REJECT_RESUBMIT(Message<ProjectStatusChangeEvent> message) { | |||||
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE); | |||||
project.setStatus(ProjectStatusEnum.PENDING_PREQUALIFICATION_CHOICE.getCode()); | |||||
} | |||||
@OnTransition(source = "PRE_APPLYING", target = "PREQUALIFICATION_WITHDRAW_CHOICE") | @OnTransition(source = "PRE_APPLYING", target = "PREQUALIFICATION_WITHDRAW_CHOICE") | ||||
public void PRE_APPLYING_WITHDRAW(Message<ProjectStatusChangeEvent> message) { | public void PRE_APPLYING_WITHDRAW(Message<ProjectStatusChangeEvent> message) { | ||||
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE); | Project project = (Project) message.getHeaders().get(PROJECT_DECLARE); | ||||
@@ -174,6 +180,12 @@ public class ProjectDeclareAction { | |||||
project.setStatus(ProjectStatusEnum.SCHEME_REVIEW_FAILED.getCode()); | project.setStatus(ProjectStatusEnum.SCHEME_REVIEW_FAILED.getCode()); | ||||
} | } | ||||
@OnTransition(source = "SCHEME_REVIEW_FAILED", target = "SCHEME_UNDER_REVIEW") | |||||
public void PLAN_REVIEW_REJECT_RESUBMIT(Message<ProjectStatusChangeEvent> message) { | |||||
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE); | |||||
project.setStatus(ProjectStatusEnum.SCHEME_UNDER_REVIEW.getCode()); | |||||
} | |||||
@OnTransition(source = "SCHEME_UNDER_REVIEW", target = "PLAN_TO_BE_DECLARED") | @OnTransition(source = "SCHEME_UNDER_REVIEW", target = "PLAN_TO_BE_DECLARED") | ||||
public void SCHEME_UNDER_REVIEW_WITHDRAW(Message<ProjectStatusChangeEvent> message) { | public void SCHEME_UNDER_REVIEW_WITHDRAW(Message<ProjectStatusChangeEvent> message) { | ||||
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE); | Project project = (Project) message.getHeaders().get(PROJECT_DECLARE); | ||||
@@ -86,7 +86,7 @@ public class ProjectDeclareStateMachineBuilder { | |||||
.withExternal() | .withExternal() | ||||
.source(ProjectStatusEnum.UNDER_INTERNAL_AUDIT_NOT_PASS) | .source(ProjectStatusEnum.UNDER_INTERNAL_AUDIT_NOT_PASS) | ||||
.target(ProjectStatusEnum.UNDER_INTERNAL_AUDIT) | .target(ProjectStatusEnum.UNDER_INTERNAL_AUDIT) | ||||
.event(ProjectStatusChangeEvent.PROJECT_APPLICATION_SUBMIT).and() | |||||
.event(ProjectStatusChangeEvent.UNDER_INTERNAL_REJECT_RESUBMIT).and() | |||||
// 待预审预审申报,从待预审到待预审选择 | // 待预审预审申报,从待预审到待预审选择 | ||||
.withExternal() | .withExternal() | ||||
@@ -145,7 +145,7 @@ public class ProjectDeclareStateMachineBuilder { | |||||
.withExternal() | .withExternal() | ||||
.source(ProjectStatusEnum.PREQUALIFICATION_FAILED) | .source(ProjectStatusEnum.PREQUALIFICATION_FAILED) | ||||
.target(ProjectStatusEnum.PENDING_PREQUALIFICATION_CHOICE) | .target(ProjectStatusEnum.PENDING_PREQUALIFICATION_CHOICE) | ||||
.event(ProjectStatusChangeEvent.PRELIMINARY_REVIEW_DECLARE).and() | |||||
.event(ProjectStatusChangeEvent.PRELIMINARY_REVIEW_REJECT_RESUBMIT).and() | |||||
// 预审不通过重新提交,从待预审选择->省级部门联审中,预审中,完成其中一种状态 | // 预审不通过重新提交,从待预审选择->省级部门联审中,预审中,完成其中一种状态 | ||||
.withChoice() | .withChoice() | ||||
.source(ProjectStatusEnum.PENDING_PREQUALIFICATION_CHOICE) | .source(ProjectStatusEnum.PENDING_PREQUALIFICATION_CHOICE) | ||||
@@ -200,7 +200,7 @@ public class ProjectDeclareStateMachineBuilder { | |||||
.withExternal() | .withExternal() | ||||
.source(ProjectStatusEnum.SCHEME_REVIEW_FAILED) | .source(ProjectStatusEnum.SCHEME_REVIEW_FAILED) | ||||
.target(ProjectStatusEnum.SCHEME_UNDER_REVIEW) | .target(ProjectStatusEnum.SCHEME_UNDER_REVIEW) | ||||
.event(ProjectStatusChangeEvent.DECLARE_PLAN).and() | |||||
.event(ProjectStatusChangeEvent.PLAN_REVIEW_REJECT_RESUBMIT).and() | |||||
// 待立项批复批复,从待立项批复到待采购 | // 待立项批复批复,从待立项批复到待采购 | ||||
.withExternal() | .withExternal() | ||||
.source(ProjectStatusEnum.TO_BE_APPROVED) | .source(ProjectStatusEnum.TO_BE_APPROVED) | ||||
@@ -36,6 +36,11 @@ public enum ProjectStatusChangeEvent { | |||||
*/ | */ | ||||
UNDER_INTERNAL_PASS(ProjectStatusEnum.UNDER_INTERNAL_AUDIT.getCode(), null, null), | UNDER_INTERNAL_PASS(ProjectStatusEnum.UNDER_INTERNAL_AUDIT.getCode(), null, null), | ||||
/** | /** | ||||
* 单位内部审核不通过重新提交(项目状态进入:单位内部审核中) | |||||
*/ | |||||
UNDER_INTERNAL_REJECT_RESUBMIT(ProjectStatusEnum.UNDER_INTERNAL_AUDIT_NOT_PASS.getCode(),null,null), | |||||
/** | |||||
* 预审申报(项目状态进入:待预审选择,有判断条件:市级项目且申报金额大于1000万项目状态变为:省级部门联审中;否则项目状态变为:预审中) | * 预审申报(项目状态进入:待预审选择,有判断条件:市级项目且申报金额大于1000万项目状态变为:省级部门联审中;否则项目状态变为:预审中) | ||||
*/ | */ | ||||
PRELIMINARY_REVIEW_DECLARE(ProjectStatusEnum.PENDING_PREQUALIFICATION.getCode(), null, null), | PRELIMINARY_REVIEW_DECLARE(ProjectStatusEnum.PENDING_PREQUALIFICATION.getCode(), null, null), | ||||
@@ -57,6 +62,10 @@ public enum ProjectStatusChangeEvent { | |||||
*/ | */ | ||||
PRELIMINARY_REVIEW_REJECT(null, ProjectStatusEnum.PRE_APPLYING.getCode(), null), | PRELIMINARY_REVIEW_REJECT(null, ProjectStatusEnum.PRE_APPLYING.getCode(), null), | ||||
/** | /** | ||||
* 预审不通过重新提交(项目状态变为:待预审选择) | |||||
*/ | |||||
PRELIMINARY_REVIEW_REJECT_RESUBMIT(ProjectStatusEnum.PREQUALIFICATION_FAILED.getCode(),null,null), | |||||
/** | |||||
* 预审通过(项目状态变为:部门联审中) | * 预审通过(项目状态变为:部门联审中) | ||||
*/ | */ | ||||
PRELIMINARY_REVIEW_PASS(ProjectStatusEnum.PRE_APPLYING.getCode(), null, null), | PRELIMINARY_REVIEW_PASS(ProjectStatusEnum.PRE_APPLYING.getCode(), null, null), | ||||
@@ -85,6 +94,10 @@ public enum ProjectStatusChangeEvent { | |||||
*/ | */ | ||||
PLAN_REVIEW_REJECT(null, ProjectStatusEnum.SCHEME_UNDER_REVIEW.getCode(), null), | PLAN_REVIEW_REJECT(null, ProjectStatusEnum.SCHEME_UNDER_REVIEW.getCode(), null), | ||||
/** | /** | ||||
* 方案评审不通过重新提交(项目状态变为:方案评审中) | |||||
*/ | |||||
PLAN_REVIEW_REJECT_RESUBMIT(ProjectStatusEnum.SCHEME_REVIEW_FAILED.getCode(),null,null), | |||||
/** | |||||
* 方案评审通过(项目状态变为:待立项批复) | * 方案评审通过(项目状态变为:待立项批复) | ||||
*/ | */ | ||||
PLAN_REVIEW_PASS(ProjectStatusEnum.SCHEME_UNDER_REVIEW.getCode(), null, null), | PLAN_REVIEW_PASS(ProjectStatusEnum.SCHEME_UNDER_REVIEW.getCode(), null, null), | ||||
@@ -6,6 +6,8 @@ import cn.afterturn.easypoi.excel.entity.ImportParams; | |||||
import cn.afterturn.easypoi.excel.entity.TemplateExportParams; | import cn.afterturn.easypoi.excel.entity.TemplateExportParams; | ||||
import cn.hutool.core.bean.BeanUtil; | import cn.hutool.core.bean.BeanUtil; | ||||
import cn.hutool.poi.excel.ExcelUtil; | import cn.hutool.poi.excel.ExcelUtil; | ||||
import com.alibaba.fastjson.JSON; | |||||
import com.alibaba.fastjson.JSONObject; | |||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | ||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; | import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; | ||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers; | import com.baomidou.mybatisplus.core.toolkit.Wrappers; | ||||
@@ -13,6 +15,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; | |||||
import com.ningdatech.basic.exception.BizException; | import com.ningdatech.basic.exception.BizException; | ||||
import com.ningdatech.basic.model.PageVo; | import com.ningdatech.basic.model.PageVo; | ||||
import com.ningdatech.basic.util.CollUtils; | import com.ningdatech.basic.util.CollUtils; | ||||
import com.ningdatech.basic.util.StrPool; | |||||
import com.ningdatech.pmapi.common.constant.CommonConst; | import com.ningdatech.pmapi.common.constant.CommonConst; | ||||
import com.ningdatech.pmapi.common.enumeration.CommonEnum; | import com.ningdatech.pmapi.common.enumeration.CommonEnum; | ||||
import com.ningdatech.pmapi.common.helper.UserInfoHelper; | import com.ningdatech.pmapi.common.helper.UserInfoHelper; | ||||
@@ -26,6 +29,7 @@ import com.ningdatech.pmapi.projectlib.enumeration.ProjectLibFlagEnum; | |||||
import com.ningdatech.pmapi.projectlib.enumeration.ProjectRenewalApprovalStatusEnum; | import com.ningdatech.pmapi.projectlib.enumeration.ProjectRenewalApprovalStatusEnum; | ||||
import com.ningdatech.pmapi.projectlib.enumeration.ProjectStatusEnum; | import com.ningdatech.pmapi.projectlib.enumeration.ProjectStatusEnum; | ||||
import com.ningdatech.pmapi.projectlib.helper.ProjectHelper; | import com.ningdatech.pmapi.projectlib.helper.ProjectHelper; | ||||
import com.ningdatech.pmapi.projectlib.model.dto.AnnualLibExportDTO; | |||||
import com.ningdatech.pmapi.projectlib.model.dto.AnnualLibImportDTO; | import com.ningdatech.pmapi.projectlib.model.dto.AnnualLibImportDTO; | ||||
import com.ningdatech.pmapi.projectlib.model.dto.ProjectDTO; | import com.ningdatech.pmapi.projectlib.model.dto.ProjectDTO; | ||||
import com.ningdatech.pmapi.projectlib.model.entity.Project; | import com.ningdatech.pmapi.projectlib.model.entity.Project; | ||||
@@ -39,6 +43,7 @@ import com.ningdatech.pmapi.projectlib.service.INdProjectStatusChangeService; | |||||
import com.ningdatech.pmapi.projectlib.service.IProjectRenewalFundDeclarationService; | import com.ningdatech.pmapi.projectlib.service.IProjectRenewalFundDeclarationService; | ||||
import com.ningdatech.pmapi.projectlib.service.IProjectService; | import com.ningdatech.pmapi.projectlib.service.IProjectService; | ||||
import com.ningdatech.pmapi.user.security.auth.model.UserFullInfoDTO; | import com.ningdatech.pmapi.user.security.auth.model.UserFullInfoDTO; | ||||
import com.ningdatech.pmapi.user.security.auth.model.UserInfoDetails; | |||||
import com.ningdatech.pmapi.user.util.LoginUserUtil; | import com.ningdatech.pmapi.user.util.LoginUserUtil; | ||||
import lombok.AllArgsConstructor; | import lombok.AllArgsConstructor; | ||||
import lombok.extern.slf4j.Slf4j; | import lombok.extern.slf4j.Slf4j; | ||||
@@ -352,14 +357,36 @@ public class AnnualPlanLibManage { | |||||
isTemporaryAugment = 1; | isTemporaryAugment = 1; | ||||
fileName = "丽水市" + year + "年数字化项目年度计划增补库编辑表"; | fileName = "丽水市" + year + "年数字化项目年度计划增补库编辑表"; | ||||
} | } | ||||
param.setIsTemporaryAugment(isTemporaryAugment); | |||||
param.setStatusList(CollUtils.fieldList(ANNUAL_PLAN_LIST_STATUS, ProjectStatusEnum::getCode)); | |||||
LambdaQueryWrapper<Project> query = ProjectHelper.projectQuery(param); | LambdaQueryWrapper<Project> query = ProjectHelper.projectQuery(param); | ||||
query.eq(Project::getIsTemporaryAugment, isTemporaryAugment); | |||||
query.orderByDesc(Project::getAnnualPlanAddTime); | query.orderByDesc(Project::getAnnualPlanAddTime); | ||||
query.in(Project::getStatus, CollUtils.fieldList(ANNUAL_PLAN_LIST_STATUS, ProjectStatusEnum::getCode)); | |||||
//数据权限 | |||||
buildProjectLibPermission(query); | |||||
List<Project> projects = projectService.list(query); | List<Project> projects = projectService.list(query); | ||||
List<AnnualLibImportDTO> list = projects.stream().map(p -> { | |||||
AnnualLibImportDTO dto = new AnnualLibImportDTO(); | |||||
List<AnnualLibExportDTO> list = projects.stream().map(p -> { | |||||
AnnualLibExportDTO dto = new AnnualLibExportDTO(); | |||||
BeanUtils.copyProperties(p, dto); | BeanUtils.copyProperties(p, dto); | ||||
String buildCycle = p.getBuildCycle(); | |||||
if (Objects.nonNull(buildCycle)) { | |||||
String cycle = buildCycle.replace(StrPool.TILDA, CommonConst.ZHI); | |||||
dto.setBuildCycle(cycle); | |||||
} | |||||
dto.setProjectId(p.getId()); | |||||
dto.setDeclaredAmount(p.getDeclareAmount()); | |||||
dto.setBuildUnitName(p.getBuildOrgName()); | |||||
String buildBasis = p.getBuildBasis(); | |||||
List<JSONObject> fileArray = JSON.parseArray(buildBasis, JSONObject.class); | |||||
List<String> nameList = CollUtils.fieldList(fileArray, w -> | |||||
w.getString(CommonConst.TITLE) + StrPool.LEFT_BRACKET + | |||||
w.getString(CommonConst.BASIS_FILE_NAME) + StrPool.RIGHT_BRACKET); | |||||
String basis = nameList.stream().collect(Collectors.joining(StrPool.COMMA)); | |||||
dto.setBuildBasis(basis); | |||||
if (CommonEnum.YES.getCode().equals(p.getIsFirst())){ | |||||
dto.setIsFirst(CommonConst.NEW_CONSTRUCTION); | |||||
}else if (CommonEnum.NO.getCode().equals(p.getIsFirst())){ | |||||
dto.setIsFirst(CommonConst.CONTINUED_CONSTRUCTION); | |||||
} | |||||
dto.setFirstQuarter(p.getEngineeringSpeedOne()); | dto.setFirstQuarter(p.getEngineeringSpeedOne()); | ||||
dto.setSecondQuarter(p.getEngineeringSpeedTwo()); | dto.setSecondQuarter(p.getEngineeringSpeedTwo()); | ||||
dto.setThirdQuarter(p.getEngineeringSpeedThree()); | dto.setThirdQuarter(p.getEngineeringSpeedThree()); | ||||
@@ -367,6 +394,12 @@ public class AnnualPlanLibManage { | |||||
return dto; | return dto; | ||||
}).collect(Collectors.toList()); | }).collect(Collectors.toList()); | ||||
int count = 0; | |||||
for (AnnualLibExportDTO annualLibExportDTO : list) { | |||||
count++; | |||||
annualLibExportDTO.setSerialNumber(count); | |||||
} | |||||
// 获取本地目录的年度计划编辑表Excel模板 | // 获取本地目录的年度计划编辑表Excel模板 | ||||
File directory = new File(""); | File directory = new File(""); | ||||
String templateName = "丽水市" + year + "年数字化项目年度计划编辑表"; | String templateName = "丽水市" + year + "年数字化项目年度计划编辑表"; | ||||
@@ -0,0 +1,102 @@ | |||||
package com.ningdatech.pmapi.projectlib.model.dto; | |||||
import java.math.BigDecimal; | |||||
import javax.validation.constraints.NotBlank; | |||||
import javax.validation.constraints.NotNull; | |||||
import cn.afterturn.easypoi.excel.annotation.Excel; | |||||
import lombok.Data; | |||||
/** | |||||
* <p> | |||||
* AnnualLibImportDTO | |||||
* </p> | |||||
* | |||||
* @author WendyYang | |||||
* @since 13:46 2023/2/13 | |||||
*/ | |||||
@Data | |||||
public class AnnualLibExportDTO { | |||||
@NotNull(message = "年度投资额不能为空") | |||||
@Excel(name = "年度投资额",groupName = "2023年计划") | |||||
private BigDecimal annualPlanAmount; | |||||
@NotNull(message = "自由资金不能为空") | |||||
@Excel(name = "自有资金",groupName = "资金来源") | |||||
private BigDecimal declareHaveAmount; | |||||
@Excel(name = "政府投资-本级财政资金") | |||||
@NotNull(message = "政府投资-本级财政不能为空") | |||||
private BigDecimal declareGovOwnFinanceAmount; | |||||
@Excel(name = "政府投资-上级补助资金") | |||||
@NotNull(message = "政府投资-上级补助资金不能为空") | |||||
private BigDecimal declareGovSuperiorFinanceAmount; | |||||
@Excel(name = "银行贷款") | |||||
@NotNull(message = "银行贷款不能为空") | |||||
private BigDecimal declareBankLendingAmount; | |||||
@Excel(name = "其他") | |||||
@NotNull(message = "其他不能为空") | |||||
private BigDecimal declareOtherAmount; | |||||
@Excel(name = "一季度",groupName = "进度和支付计划") | |||||
@NotBlank(message = "一季度不能为空") | |||||
private String firstQuarter; | |||||
@Excel(name = "二季度") | |||||
@NotBlank(message = "二季度不能为空") | |||||
private String secondQuarter; | |||||
@Excel(name = "三季度") | |||||
@NotBlank(message = "三季度不能为空") | |||||
private String thirdQuarter; | |||||
@Excel(name = "四季度") | |||||
@NotBlank(message = "四季度不能为空") | |||||
private String fourthQuarter; | |||||
@NotNull(message = "序号不能为空") | |||||
@Excel(name = "序号") | |||||
private Integer serialNumber; | |||||
@Excel(name = "项目id") | |||||
@NotNull(message = "项目ID不能为空") | |||||
private Long projectId; | |||||
@Excel(name = "项目名称") | |||||
@NotBlank(message = "项目名称不能为空") | |||||
private String projectName; | |||||
@NotBlank(message = "建设内容不能为空") | |||||
@Excel(name = "建设内容") | |||||
private String projectIntroduction; | |||||
@NotBlank(message = "建设依据不能为空") | |||||
@Excel(name = "建设依据") | |||||
private String buildBasis; | |||||
@Excel(name = "建设性质") | |||||
@NotBlank(message = "建设性质不能为空") | |||||
private String isFirst; | |||||
@Excel(name = "建设起止年限(填写到月)") | |||||
@NotBlank(message = "建设起止年限不能为空") | |||||
private String buildCycle; | |||||
@NotBlank(message = "总投资不能为空") | |||||
@Excel(name = "总投资") | |||||
private BigDecimal declaredAmount; | |||||
@Excel(name = "建设单位") | |||||
@NotBlank(message = "建设单位不能为空") | |||||
private String buildUnitName; | |||||
@Excel(name = "项目联系人") | |||||
@NotBlank(message = "项目联系人不能为空") | |||||
private String contactName; | |||||
@Excel(name = "项目分管领导") | |||||
@NotBlank(message = "项目分管领导不能为空") | |||||
private String responsibleMan; | |||||
@Excel(name = "备注") | |||||
private String projectRemarks; | |||||
} |