CMM 1 year ago
parent
commit
e22eb0b837
20 changed files with 556 additions and 677 deletions
  1. +50
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/projectdeclared/controller/ConstructionPlanController.java
  2. +1
    -5
      pmapi/src/main/java/com/ningdatech/pmapi/projectdeclared/controller/DeclaredProjectController.java
  3. +1
    -1
      pmapi/src/main/java/com/ningdatech/pmapi/projectdeclared/controller/PrequalificationDeclaredController.java
  4. +14
    -134
      pmapi/src/main/java/com/ningdatech/pmapi/projectdeclared/entity/ProjectDraft.java
  5. +45
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/projectdeclared/entity/dto/ConstructionPlanDto.java
  6. +2
    -4
      pmapi/src/main/java/com/ningdatech/pmapi/projectdeclared/entity/dto/DeclaredProjectDto.java
  7. +2
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/projectdeclared/entity/dto/DeclaredProjectListParamDto.java
  8. +0
    -1
      pmapi/src/main/java/com/ningdatech/pmapi/projectdeclared/entity/dto/PreDeclaredProjectDto.java
  9. +7
    -371
      pmapi/src/main/java/com/ningdatech/pmapi/projectdeclared/entity/dto/ProjectDraftSaveDto.java
  10. +20
    -134
      pmapi/src/main/java/com/ningdatech/pmapi/projectdeclared/entity/vo/ProjectDraftVo.java
  11. +118
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/projectdeclared/manage/ConstructionPlanManage.java
  12. +22
    -17
      pmapi/src/main/java/com/ningdatech/pmapi/projectdeclared/manage/DeclaredProjectManage.java
  13. +23
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/projectlib/controller/AnnualPlanController.java
  14. +82
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/projectlib/manage/AnnualPlanLibManage.java
  15. +108
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/projectlib/model/dto/AnnualLibImportDTO.java
  16. +1
    -1
      pmapi/src/main/java/com/ningdatech/pmapi/projectlib/model/dto/ProjectApplicationDTO.java
  17. +4
    -3
      pmapi/src/main/java/com/ningdatech/pmapi/projectlib/model/dto/ProjectDTO.java
  18. +6
    -4
      pmapi/src/main/java/com/ningdatech/pmapi/projectlib/model/entity/Project.java
  19. +3
    -2
      pmapi/src/test/java/com/ningdatech/pmapi/sys/project/ProjectStateTest.java
  20. +47
    -0
      pmapi/src/test/java/com/ningdatech/pmapi/sys/service/IMenuServiceTest.java

+ 50
- 0
pmapi/src/main/java/com/ningdatech/pmapi/projectdeclared/controller/ConstructionPlanController.java View File

@@ -0,0 +1,50 @@
package com.ningdatech.pmapi.projectdeclared.controller;

import com.ningdatech.basic.model.PageVo;
import com.ningdatech.pmapi.projectdeclared.entity.dto.ConstructionPlanDto;
import com.ningdatech.pmapi.projectdeclared.manage.ConstructionPlanManage;
import com.ningdatech.pmapi.projectlib.enumeration.ProjectStatusEnum;
import com.ningdatech.pmapi.projectlib.manage.ProjectLibManage;
import com.ningdatech.pmapi.projectlib.model.req.ProjectListReq;
import com.ningdatech.pmapi.projectlib.model.vo.ProjectLibListItemVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

/**
* @Classname ConstructionPlanController
* @Description 建设方案申报
* @Date 2023/2/13 9:53
* @Author PoffyZhang
*/
@Slf4j
@Validated
@RestController
@RequestMapping("/api/v1/construction")
@Api(value = "ConstructionPlan", tags = "申报管理-建设方案申报")
@RequiredArgsConstructor
public class ConstructionPlanController {

private final ConstructionPlanManage constructionPlanManage;

private final ProjectLibManage projectLibManage;

@ApiOperation(value = "可申报建设方案项目列表", notes = "可申报建设方案项目列表")
@GetMapping("/list")
public PageVo<ProjectLibListItemVO> list(@Validated @ModelAttribute ProjectListReq req) {
//项目阶段 状态 已定 方案待申报
req.setStage(ProjectStatusEnum.NOT_APPROVED.getCode());
req.setStatus(ProjectStatusEnum.PLAN_TO_BE_DECLARED.getCode());
return projectLibManage.projectLibList(req);
}

@ApiOperation(value = "建设方案申报", notes = "建设方案申报")
@PostMapping("/start")
public String startTheProcess(@Validated @RequestBody ConstructionPlanDto dto) {
String instanceId = constructionPlanManage.startTheProcess(dto);
return "建设方案申报 【" + instanceId + "】 成功";
}
}

+ 1
- 5
pmapi/src/main/java/com/ningdatech/pmapi/projectdeclared/controller/DeclaredProjectController.java View File

@@ -1,17 +1,13 @@
package com.ningdatech.pmapi.projectdeclared.controller;

import com.ningdatech.basic.model.ApiResponse;
import com.ningdatech.basic.model.PageVo;
import com.ningdatech.pmapi.projectdeclared.entity.dto.DeclaredProjectDto;
import com.ningdatech.pmapi.projectdeclared.entity.dto.DeclaredProjectListParamDto;
import com.ningdatech.pmapi.projectdeclared.entity.dto.ProjectDraftSaveDto;
import com.ningdatech.pmapi.projectdeclared.entity.vo.ProjectDeclaredDetailVO;
import com.ningdatech.pmapi.projectdeclared.entity.vo.ProjectDeclaredListItemVO;
import com.ningdatech.pmapi.projectdeclared.entity.vo.ProjectDraftVo;
import com.ningdatech.pmapi.projectdeclared.manage.DeclaredProjectManage;
import com.ningdatech.pmapi.projectlib.manage.ProjectLibManage;
import com.ningdatech.pmapi.projectlib.model.req.ProjectListReq;
import com.ningdatech.pmapi.projectlib.model.vo.ProjectDetailVO;
import com.ningdatech.pmapi.projectlib.model.vo.ProjectLibListItemVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -65,6 +61,6 @@ public class DeclaredProjectController {
@PostMapping("/start")
public String startTheProcess(@Validated @RequestBody DeclaredProjectDto dto) {
String instanceId = declaredProjectManage.startTheProcess(dto);
return "启动流程实例 " + instanceId + " 成功";
return "启动流程实例 " + instanceId + " 成功";
}
}

+ 1
- 1
pmapi/src/main/java/com/ningdatech/pmapi/projectdeclared/controller/PrequalificationDeclaredController.java View File

@@ -45,6 +45,6 @@ public class PrequalificationDeclaredController {
@PostMapping("/start")
public String startTheProcess(@Validated @RequestBody PreDeclaredProjectDto dto) {
String instanceId = prequalificationDeclaredProjectManage.startTheProcess(dto);
return "提交预审 " + instanceId + " 成功";
return "提交预审 " + instanceId + " 成功";
}
}

+ 14
- 134
pmapi/src/main/java/com/ningdatech/pmapi/projectdeclared/entity/ProjectDraft.java View File

@@ -67,13 +67,13 @@ public class ProjectDraft implements Serializable {
private String contactPhone;

@ApiModelProperty("建设单位名称")
private String buildUnitName;
private String buildOrgName;

@ApiModelProperty("建设单位统一社会信用代码")
private String buildUnitCode;
private String buildOrgCode;

@ApiModelProperty("建设单位浙政钉ID")
private String buildUnitZheJiangGovernmentDingId;
private String buildOrgZheJiangGovDingId;

@ApiModelProperty("项目类型 1:建设 2:运维")
private Integer projectType;
@@ -132,10 +132,10 @@ public class ProjectDraft implements Serializable {
private BigDecimal declareHaveAmount;

@ApiModelProperty("资金申报情况-政府投资-本级财政资金(万元)")
private BigDecimal declareGovernmentOwnFinanceAmount;
private BigDecimal declareGovOwnFinanceAmount;

@ApiModelProperty("资金申报情况-政府投资-上级补助资金(万元)")
private BigDecimal declareGovernmentSuperiorFinanceAmount;
private BigDecimal declareGovSuperiorFinanceAmount;

@ApiModelProperty("银行贷款(万元)")
private BigDecimal declareBankLendingAmount;
@@ -159,10 +159,10 @@ public class ProjectDraft implements Serializable {
private BigDecimal annualPlanHaveAmount;

@ApiModelProperty("年度支付计划-政府投资-本级财政资金(万元)")
private BigDecimal annualPlanGovernmentOwnFinanceAmount;
private BigDecimal annualPlanGovOwnFinanceAmount;

@ApiModelProperty("年度支付计划-政府投资-上级补助资金(万元)")
private BigDecimal annualPlanGovernmentSuperiorFinanceAmount;
private BigDecimal annualPlanGovSuperiorFinanceAmount;

@ApiModelProperty("年度支付计划-银行贷款(万元)")
private BigDecimal annualPlanBankLendingAmount;
@@ -267,149 +267,29 @@ public class ProjectDraft implements Serializable {
private BigDecimal approvedTotalInvestmentIncrease;

@ApiModelProperty("上级主管部门")
private String higherSuperUnit;
private String higherSuperOrg;

@ApiModelProperty("上级主管部门Code")
private String higherSuperUnitCode;
private String higherSuperOrgCode;

@ApiModelProperty("主管部门名称")
private String superUnit;
private String superOrg;

@ApiModelProperty("主管部门Code")
private String superUnitCode;
private String superOrgCode;

@ApiModelProperty("前端所需验证字段")
private Integer allApplicationsDone;

@ApiModelProperty("项目一级状态 10000 20000 30000")
private Integer projectStatusFirst;

@ApiModelProperty("项目二级状态")
private Integer projectStatusSecond;

@ApiModelProperty("应用名称")
private String applicationName;

@ApiModelProperty("关联IRS现有应用")
private String relatedExistsApplication;

@ApiModelProperty("关联IRS现有应用-IRS应用编码")
private String relatedExistsApplicationCode;

@ApiModelProperty("应用类型")
private String applicationType;

@ApiModelProperty("是否统建应用 0:否 1:是")
private Integer isUniteBuild;

@ApiModelProperty("统建类型 1:全省统建 2:全市统建")
private Integer unionBuildKind;

@ApiModelProperty("是否数改系统 0:否 1:是")
private Integer isDigitalModification;

@ApiModelProperty("数改系统")
private String digitalModification;

@ApiModelProperty("发布端")
private String publishSide;

@ApiModelProperty("是否一本账场景应用名称 0:否 1:是")
private Integer isAccountAppName;

@ApiModelProperty("一本账应用名称")
private String accountAppName;

@ApiModelProperty("领域大脑一本账")
private String domainBrainAccount;

@ApiModelProperty("是否业务协同 0:否 1:是")
private Integer isBizCooperate;

@ApiModelProperty("业务协同描述")
private String bizCooperateInfo;

@ApiModelProperty("使用范围")
private String usesRangeRemark;

@ApiModelProperty("应用简介")
private String applicationSummary;

@ApiModelProperty("应用备注")
private String applicationRemark;

@ApiModelProperty("应用总投资测算明细-文件")
private String applicationEstimateFile;

@ApiModelProperty("等保级别 1:一级 2:二级 3:三级 4:四级 5:五级")
private Integer secrecyGrade;

@ApiModelProperty("密码测评级别 1:一级 2:二级 3:三级 4:四级 5:五级")
private Integer passwordGrade;

@ApiModelProperty("是否符合国家信息技术应用创新相关规范 0:否 1:是")
private Integer nationalItSpec;

@ApiModelProperty("是否使用政务云资源 0否 1是")
private Integer useGovCloud;

@ApiModelProperty("云资源类型")
private String cloudsType;

@ApiModelProperty("云资源基础规格")
private String cloudsFoundationSpecifications;

@ApiModelProperty("云资源台数")
private Integer cloudsNumber;

@ApiModelProperty("云资源用户描述")
private String cloudsDescription;

@ApiModelProperty("网络环境 1:政务内网 2:政务外网 3:互联网 4:业务专网 5:单机")
private Integer netEnv;

@ApiModelProperty("是否使用公共数据 0否 1是")
private Integer useCommonData;

@ApiModelProperty("数据名称")
private String dataName;

@ApiModelProperty("是否使用公共组件 0否 1是")
private Integer useCommonComponent;

@ApiModelProperty("使用的公共组件名称")
private String commonComponents;

@ApiModelProperty("是否产生公共组件 0否 1是")
private Integer produceCommonComponent;

@ApiModelProperty("预计产生组件名称")
private String produceCommonComponents;

@ApiModelProperty("试点任务名称")
private String pilotTasksName;

@ApiModelProperty("试点任务编号")
private String pilotTasksCode;

@ApiModelProperty("所属重大应用名称")
private String importantTaskName;

@ApiModelProperty("所属重大应用编号")
private String importantTaskCode;

@ApiModelProperty("所属子场景应用名称")
private String subSceneApplicationName;

@ApiModelProperty("试点文件")
private String experimentsFile;

@ApiModelProperty("项目应用")
private String projectApplicationList;

@ApiModelProperty("新增form内容")
private String dynamicForm;

@ApiModelProperty("用户id")
private String userId;

private Long createBy;
private Long updateBy;
}

+ 45
- 0
pmapi/src/main/java/com/ningdatech/pmapi/projectdeclared/entity/dto/ConstructionPlanDto.java View File

@@ -0,0 +1,45 @@
package com.ningdatech.pmapi.projectdeclared.entity.dto;

import cn.hutool.core.collection.CollUtil;
import com.google.common.collect.Maps;
import com.wflow.workflow.bean.dto.ProcessInstanceUserDto;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.Map;

/**
* @Classname DeclaredProjectDto
* @Description 申报项目
* @Date 2023/2/1 14:52
* @Author PoffyZhang
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ConstructionPlanDto implements Serializable {

@NotNull
private Long projectId;

//建设方案文件
private String constructionPlanFile;

private Map<String,Object> formData;

@NotNull
private ProcessInstanceUserDto user;

public Map<String,Object> getFormData(){
if(CollUtil.isEmpty(this.formData)){
this.formData = Maps.newHashMap();
return this.formData;
}
return this.formData;
}
}

+ 2
- 4
pmapi/src/main/java/com/ningdatech/pmapi/projectdeclared/entity/dto/DeclaredProjectDto.java View File

@@ -2,15 +2,13 @@ package com.ningdatech.pmapi.projectdeclared.entity.dto;

import cn.hutool.core.collection.CollUtil;
import com.google.common.collect.Maps;
import com.ningdatech.pmapi.projectlib.model.dto.ProjectDto;
import com.ningdatech.pmapi.projectlib.model.entity.Project;
import com.ningdatech.pmapi.projectlib.model.dto.ProjectDTO;
import com.wflow.workflow.bean.dto.ProcessInstanceUserDto;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.Map;
@@ -28,7 +26,7 @@ import java.util.Map;
public class DeclaredProjectDto implements Serializable {

@NotNull
private ProjectDto projectInfo;
private ProjectDTO projectInfo;

private Map<String,Object> formData;



+ 2
- 0
pmapi/src/main/java/com/ningdatech/pmapi/projectdeclared/entity/dto/DeclaredProjectListParamDto.java View File

@@ -19,6 +19,8 @@ import org.springframework.format.annotation.DateTimeFormat;
@AllArgsConstructor
public class DeclaredProjectListParamDto extends PagePo {

private String userId;

private String projectName;

private Integer projectType;


+ 0
- 1
pmapi/src/main/java/com/ningdatech/pmapi/projectdeclared/entity/dto/PreDeclaredProjectDto.java View File

@@ -2,7 +2,6 @@ package com.ningdatech.pmapi.projectdeclared.entity.dto;

import cn.hutool.core.collection.CollUtil;
import com.google.common.collect.Maps;
import com.ningdatech.pmapi.projectlib.model.dto.ProjectDto;
import com.wflow.workflow.bean.dto.ProcessInstanceUserDto;
import lombok.AllArgsConstructor;
import lombok.Builder;


+ 7
- 371
pmapi/src/main/java/com/ningdatech/pmapi/projectdeclared/entity/dto/ProjectDraftSaveDto.java View File

@@ -1,15 +1,11 @@
package com.ningdatech.pmapi.projectdeclared.entity.dto;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.ningdatech.pmapi.projectlib.model.dto.ProjectDTO;
import com.wflow.workflow.bean.dto.ProcessInstanceUserDto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.*;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;

/**
* <p>
@@ -29,370 +25,10 @@ public class ProjectDraftSaveDto implements Serializable {

private static final long serialVersionUID = 1L;

@ApiModelProperty("应用ID 新增为空")
private Long id;

@ApiModelProperty("所属地区编号")
private String areaCode;

@ApiModelProperty("所属地区名称")
private String area;

@ApiModelProperty("项目阶段")
private Integer stage;

@ApiModelProperty("项目状态")
private Integer status;

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

@ApiModelProperty("是否临时增补 0:否 1:是")
private Integer isTemporaryAugment;

@ApiModelProperty("项目负责人")
private String responsibleMan;

@ApiModelProperty("负责人手机号码")
private String responsibleManMobile;

@ApiModelProperty("项目联系人")
private String contactName;

@ApiModelProperty("项目联系人手机号码")
private String contactPhone;

@ApiModelProperty("建设单位名称")
private String buildUnitName;

@ApiModelProperty("建设单位统一社会信用代码")
private String buildUnitCode;

@ApiModelProperty("建设单位浙政钉ID")
private String buildUnitZheJiangGovernmentDingId;

@ApiModelProperty("项目类型 1:建设 2:运维")
private Integer projectType;

@ApiModelProperty("是否首次新建 0:否 1:是")
private Integer isFirst;

@ApiModelProperty("项目预算年度")
private Integer projectYear;

@ApiModelProperty("项目建设起始时间")
private String beginTime;

@ApiModelProperty("项目建设终止时间")
private String endTime;

@ApiModelProperty("四大体系 1:业务应用 2:应用支撑 3:数据资源 4:基础设施")
private Integer fourSystems;

@ApiModelProperty("是否数字化改革项目 0:否 1:是")
private Integer isDigitalReform;

@ApiModelProperty("综合业务领域")
private String bizDomain;

@ApiModelProperty("建设层级 1:国家级 2:省级 3:省本级 4:市级 5:市本级 6:区县 7乡镇")
private Integer buildLevel;

@ApiModelProperty("立项依据")
private String buildBasis;

@ApiModelProperty("发改编码")
private String developCode;

@ApiModelProperty("财政编码")
private String financialCode;

@ApiModelProperty("是否上云 0:否 1:是")
private Integer isCloud;

private String cloudType;

@ApiModelProperty("等保级别 1:一级 2:二级 3:三级 4:四级 5:五级")
private Integer protectionLevel;

@ApiModelProperty("是否密评 0:否 1:是")
private Integer isSecretComments;

@ApiModelProperty("项目简介")
private String projectIntroduction;

@ApiModelProperty("资金申报情况-申报金额(万元)")
private BigDecimal declareAmount;

@ApiModelProperty("资金申报情况-自有金额(万元)")
private BigDecimal declareHaveAmount;

@ApiModelProperty("资金申报情况-政府投资-本级财政资金(万元)")
private BigDecimal declareGovernmentOwnFinanceAmount;

@ApiModelProperty("资金申报情况-政府投资-上级补助资金(万元)")
private BigDecimal declareGovernmentSuperiorFinanceAmount;

@ApiModelProperty("银行贷款(万元)")
private BigDecimal declareBankLendingAmount;

@ApiModelProperty("其它资金(万元)")
private BigDecimal declareOtherAmount;

@ApiModelProperty("资金分配情况-软件开发(万元)")
private BigDecimal softwareDevelopmentAmount;

@ApiModelProperty("资金分配情况-云资源、硬件购置(万元)")
private BigDecimal cloudHardwarePurchaseAmount;

@ApiModelProperty("资金分配情况-第三方服务(万元)")
private BigDecimal thirdPartyAmount;

@ApiModelProperty("年度支付计划-年度支付计划(万元)")
private BigDecimal annualPlanAmount;

@ApiModelProperty("年度支付计划-自有金额(万元)")
private BigDecimal annualPlanHaveAmount;

@ApiModelProperty("年度支付计划-政府投资-本级财政资金(万元)")
private BigDecimal annualPlanGovernmentOwnFinanceAmount;

@ApiModelProperty("年度支付计划-政府投资-上级补助资金(万元)")
private BigDecimal annualPlanGovernmentSuperiorFinanceAmount;

@ApiModelProperty("年度支付计划-银行贷款(万元)")
private BigDecimal annualPlanBankLendingAmount;

@ApiModelProperty("年度支付计划-其它资金(万元)")
private BigDecimal annualPlanOtherAmount;

@ApiModelProperty("立项批复资金(万元)")
private BigDecimal approvalAmount;

private LocalDateTime annualPlanAddTime;

@ApiModelProperty("核心业务-核心业务模块")
private String coreBusiness;

@ApiModelProperty("安全投入-投入项")
private String safetyInputTitle;

@ApiModelProperty("安全投入-内容描述")
private String safetyInputDescribe;

@ApiModelProperty("安全投入-金额(万元)")
private BigDecimal safetyInputAmount;

@ApiModelProperty("附件-初步方案")
private String preliminaryPlanFile;

@ApiModelProperty("附件-佐证材料")
private String supportingMaterialsFile;

@ApiModelProperty("附件-项目总投资测算明细")
private String calculationTotalInvestmentFile;

@ApiModelProperty("附件-申报单位主要职责(单位三定方案)")
private String mainResponsibilitiesApplicantFile;

@ApiModelProperty("备注")
private String projectRemarks;

@ApiModelProperty("是否包含应用 0:否 1:是")
private Integer includeApplication;

@ApiModelProperty("工程形象进度-第一季度")
private String engineeringSpeedOne;

@ApiModelProperty("工程形象进度-第二季度")
private String engineeringSpeedTwo;

@ApiModelProperty("工程形象进度-第三季度")
private String engineeringSpeedThree;

@ApiModelProperty("工程形象进度-第四季度")
private String engineeringSpeedFour;

@ApiModelProperty("核心业务-是否开启核心业务模块 false:关闭 true:开启")
private Boolean isOpenCoreBusiness;

@ApiModelProperty("安全投入-是否开启安全投入模块 false:关闭 true:开启")
private Boolean isOpenSafetyInput;

@ApiModelProperty("工程形象进度-是否开启 false:关闭 true:开启")
private Boolean isEngineeringSpeed;

@ApiModelProperty("附件-是否开启 false:关闭 true:开启")
private Boolean isAccessories;

@ApiModelProperty("备注-是否开启 false:关闭 true:开启")
private Boolean isRemarks;

@ApiModelProperty("年度支付计划-是否开启 false:关闭 true:开启")
private Boolean isAnnualPlanAmount;

@ApiModelProperty("一地创新全省共享项目-是否开启 false:关闭 true:开启")
private Boolean isInnovateWholeProvinceShare;

@ApiModelProperty("安全投入-模块信息")
private String safetyInputModular;

@ApiModelProperty("项目申报pdf")
private String projectPdf;

@ApiModelProperty("立项申报pdf")
private String declarationPdf;

@ApiModelProperty("建设周期(月)")
private String buildCycle;

@ApiModelProperty("建设方案文件")
private String constructionPlanFile;

@ApiModelProperty("立项批复文件")
private String approvedFile;

@ApiModelProperty("批复金额")
private BigDecimal approvedTotalInvestmentIncrease;

@ApiModelProperty("上级主管部门")
private String higherSuperUnit;

@ApiModelProperty("上级主管部门Code")
private String higherSuperUnitCode;

@ApiModelProperty("主管部门名称")
private String superUnit;

@ApiModelProperty("主管部门Code")
private String superUnitCode;

@ApiModelProperty("前端所需验证字段")
private Integer allApplicationsDone;

@ApiModelProperty("项目一级状态 10000 20000 30000")
private Integer projectStatusFirst;

@ApiModelProperty("项目二级状态")
private Integer projectStatusSecond;

@ApiModelProperty("应用名称")
private String applicationName;

@ApiModelProperty("关联IRS现有应用")
private String relatedExistsApplication;

@ApiModelProperty("关联IRS现有应用-IRS应用编码")
private String relatedExistsApplicationCode;

@ApiModelProperty("应用类型")
private String applicationType;

@ApiModelProperty("是否统建应用 0:否 1:是")
private Integer isUniteBuild;

@ApiModelProperty("统建类型 1:全省统建 2:全市统建")
private Integer unionBuildKind;

@ApiModelProperty("是否数改系统 0:否 1:是")
private Integer isDigitalModification;

@ApiModelProperty("数改系统")
private String digitalModification;

@ApiModelProperty("发布端")
private String publishSide;

@ApiModelProperty("是否一本账场景应用名称 0:否 1:是")
private Integer isAccountAppName;

@ApiModelProperty("一本账应用名称")
private String accountAppName;

@ApiModelProperty("领域大脑一本账")
private String domainBrainAccount;

@ApiModelProperty("是否业务协同 0:否 1:是")
private Integer isBizCooperate;

@ApiModelProperty("业务协同描述")
private String bizCooperateInfo;

@ApiModelProperty("使用范围")
private String usesRangeRemark;

@ApiModelProperty("应用简介")
private String applicationSummary;

@ApiModelProperty("应用备注")
private String applicationRemark;

@ApiModelProperty("应用总投资测算明细-文件")
private String applicationEstimateFile;

@ApiModelProperty("等保级别 1:一级 2:二级 3:三级 4:四级 5:五级")
private Integer secrecyGrade;

@ApiModelProperty("密码测评级别 1:一级 2:二级 3:三级 4:四级 5:五级")
private Integer passwordGrade;

@ApiModelProperty("是否符合国家信息技术应用创新相关规范 0:否 1:是")
private Integer nationalItSpec;

@ApiModelProperty("是否使用政务云资源 0否 1是")
private Integer useGovCloud;

@ApiModelProperty("云资源类型")
private String cloudsType;

@ApiModelProperty("云资源基础规格")
private String cloudsFoundationSpecifications;

@ApiModelProperty("云资源台数")
private Integer cloudsNumber;

@ApiModelProperty("云资源用户描述")
private String cloudsDescription;

@ApiModelProperty("网络环境 1:政务内网 2:政务外网 3:互联网 4:业务专网 5:单机")
private Integer netEnv;

@ApiModelProperty("是否使用公共数据 0否 1是")
private Integer useCommonData;

@ApiModelProperty("数据名称")
private String dataName;

@ApiModelProperty("是否使用公共组件 0否 1是")
private Integer useCommonComponent;

@ApiModelProperty("使用的公共组件名称")
private String commonComponents;

@ApiModelProperty("是否产生公共组件 0否 1是")
private Integer produceCommonComponent;

@ApiModelProperty("预计产生组件名称")
private String produceCommonComponents;

@ApiModelProperty("试点任务名称")
private String pilotTasksName;

@ApiModelProperty("试点任务编号")
private String pilotTasksCode;

@ApiModelProperty("所属重大应用名称")
private String importantTaskName;

@ApiModelProperty("所属重大应用编号")
private String importantTaskCode;

@ApiModelProperty("所属子场景应用名称")
private String subSceneApplicationName;
@NotNull
private ProjectDTO projectInfo;

@ApiModelProperty("试点文件")
private String experimentsFile;
@NotNull
private ProcessInstanceUserDto user;

@ApiModelProperty("新增form内容")
private String formData;
}

+ 20
- 134
pmapi/src/main/java/com/ningdatech/pmapi/projectdeclared/entity/vo/ProjectDraftVo.java View File

@@ -2,6 +2,7 @@ package com.ningdatech.pmapi.projectdeclared.entity.vo;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.ningdatech.pmapi.projectlib.model.entity.ProjectApplication;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
@@ -12,6 +13,8 @@ import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;

/**
* <p>
@@ -65,13 +68,13 @@ public class ProjectDraftVo implements Serializable {
private String contactPhone;

@ApiModelProperty("建设单位名称")
private String buildUnitName;
private String buildOrgName;

@ApiModelProperty("建设单位统一社会信用代码")
private String buildUnitCode;
private String buildOrgCode;

@ApiModelProperty("建设单位浙政钉ID")
private String buildUnitZheJiangGovernmentDingId;
private String buildOrgZheJiangGovDingId;

@ApiModelProperty("项目类型 1:建设 2:运维")
private Integer projectType;
@@ -130,10 +133,10 @@ public class ProjectDraftVo implements Serializable {
private BigDecimal declareHaveAmount;

@ApiModelProperty("资金申报情况-政府投资-本级财政资金(万元)")
private BigDecimal declareGovernmentOwnFinanceAmount;
private BigDecimal declareGovOwnFinanceAmount;

@ApiModelProperty("资金申报情况-政府投资-上级补助资金(万元)")
private BigDecimal declareGovernmentSuperiorFinanceAmount;
private BigDecimal declareGovSuperiorFinanceAmount;

@ApiModelProperty("银行贷款(万元)")
private BigDecimal declareBankLendingAmount;
@@ -157,10 +160,10 @@ public class ProjectDraftVo implements Serializable {
private BigDecimal annualPlanHaveAmount;

@ApiModelProperty("年度支付计划-政府投资-本级财政资金(万元)")
private BigDecimal annualPlanGovernmentOwnFinanceAmount;
private BigDecimal annualPlanGovOwnFinanceAmount;

@ApiModelProperty("年度支付计划-政府投资-上级补助资金(万元)")
private BigDecimal annualPlanGovernmentSuperiorFinanceAmount;
private BigDecimal annualPlanGovSuperiorFinanceAmount;

@ApiModelProperty("年度支付计划-银行贷款(万元)")
private BigDecimal annualPlanBankLendingAmount;
@@ -265,145 +268,28 @@ public class ProjectDraftVo implements Serializable {
private BigDecimal approvedTotalInvestmentIncrease;

@ApiModelProperty("上级主管部门")
private String higherSuperUnit;
private String higherSuperOrg;

@ApiModelProperty("上级主管部门Code")
private String higherSuperUnitCode;
private String higherSuperOrgCode;

@ApiModelProperty("主管部门名称")
private String superUnit;
private String superOrg;

@ApiModelProperty("主管部门Code")
private String superUnitCode;
private String superOrgCode;

@ApiModelProperty("前端所需验证字段")
private Integer allApplicationsDone;

@ApiModelProperty("项目一级状态 10000 20000 30000")
private Integer projectStatusFirst;

@ApiModelProperty("项目二级状态")
private Integer projectStatusSecond;

@ApiModelProperty("应用名称")
private String applicationName;

@ApiModelProperty("关联IRS现有应用")
private String relatedExistsApplication;

@ApiModelProperty("关联IRS现有应用-IRS应用编码")
private String relatedExistsApplicationCode;

@ApiModelProperty("应用类型")
private String applicationType;

@ApiModelProperty("是否统建应用 0:否 1:是")
private Integer isUniteBuild;

@ApiModelProperty("统建类型 1:全省统建 2:全市统建")
private Integer unionBuildKind;

@ApiModelProperty("是否数改系统 0:否 1:是")
private Integer isDigitalModification;

@ApiModelProperty("数改系统")
private String digitalModification;

@ApiModelProperty("发布端")
private String publishSide;

@ApiModelProperty("是否一本账场景应用名称 0:否 1:是")
private Integer isAccountAppName;

@ApiModelProperty("一本账应用名称")
private String accountAppName;

@ApiModelProperty("领域大脑一本账")
private String domainBrainAccount;

@ApiModelProperty("是否业务协同 0:否 1:是")
private Integer isBizCooperate;

@ApiModelProperty("业务协同描述")
private String bizCooperateInfo;

@ApiModelProperty("使用范围")
private String usesRangeRemark;

@ApiModelProperty("应用简介")
private String applicationSummary;

@ApiModelProperty("应用备注")
private String applicationRemark;

@ApiModelProperty("应用总投资测算明细-文件")
private String applicationEstimateFile;

@ApiModelProperty("等保级别 1:一级 2:二级 3:三级 4:四级 5:五级")
private Integer secrecyGrade;

@ApiModelProperty("密码测评级别 1:一级 2:二级 3:三级 4:四级 5:五级")
private Integer passwordGrade;

@ApiModelProperty("是否符合国家信息技术应用创新相关规范 0:否 1:是")
private Integer nationalItSpec;

@ApiModelProperty("是否使用政务云资源 0否 1是")
private Integer useGovCloud;

@ApiModelProperty("云资源类型")
private String cloudsType;

@ApiModelProperty("云资源基础规格")
private String cloudsFoundationSpecifications;

@ApiModelProperty("云资源台数")
private Integer cloudsNumber;

@ApiModelProperty("云资源用户描述")
private String cloudsDescription;

@ApiModelProperty("网络环境 1:政务内网 2:政务外网 3:互联网 4:业务专网 5:单机")
private Integer netEnv;

@ApiModelProperty("是否使用公共数据 0否 1是")
private Integer useCommonData;

@ApiModelProperty("数据名称")
private String dataName;

@ApiModelProperty("是否使用公共组件 0否 1是")
private Integer useCommonComponent;

@ApiModelProperty("使用的公共组件名称")
private String commonComponents;

@ApiModelProperty("是否产生公共组件 0否 1是")
private Integer produceCommonComponent;

@ApiModelProperty("预计产生组件名称")
private String produceCommonComponents;

@ApiModelProperty("试点任务名称")
private String pilotTasksName;

@ApiModelProperty("试点任务编号")
private String pilotTasksCode;

@ApiModelProperty("所属重大应用名称")
private String importantTaskName;

@ApiModelProperty("所属重大应用编号")
private String importantTaskCode;

@ApiModelProperty("所属子场景应用名称")
private String subSceneApplicationName;

@ApiModelProperty("试点文件")
private String experimentsFile;
@ApiModelProperty("项目应用")
private List<ProjectApplication> applicationList;

@ApiModelProperty("新增form内容")
private String formData;
private Map<String,Object> dynamicForm;

@ApiModelProperty("用户id")
private String userId;


private Long createBy;


+ 118
- 0
pmapi/src/main/java/com/ningdatech/pmapi/projectdeclared/manage/ConstructionPlanManage.java View File

@@ -0,0 +1,118 @@
package com.ningdatech.pmapi.projectdeclared.manage;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.ningdatech.basic.function.VUtils;
import com.ningdatech.pmapi.common.enumeration.ProjectProessStageEnum;
import com.ningdatech.pmapi.common.statemachine.util.StateMachineUtils;
import com.ningdatech.pmapi.projectdeclared.entity.dto.ConstructionPlanDto;
import com.ningdatech.pmapi.projectdeclared.entity.dto.ProjectConditionDto;
import com.ningdatech.pmapi.projectlib.enumeration.ProjectStatusEnum;
import com.ningdatech.pmapi.projectlib.model.entity.Project;
import com.ningdatech.pmapi.projectlib.service.IProjectService;
import com.wflow.bean.entity.WflowModels;
import com.wflow.exception.BusinessException;
import com.wflow.workflow.bean.vo.ProcessStartParamsVo;
import com.wflow.workflow.service.ProcessInstanceService;
import com.wflow.workflow.service.ProcessModelService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
import java.util.Collections;
import java.util.Map;
import java.util.Objects;

/**
* @Classname DeclaredProjectManage
* @Description
* @Date 2023/2/1 14:48
* @Author PoffyZhang
*/
@Component
@Slf4j
@RequiredArgsConstructor
public class ConstructionPlanManage {

private final IProjectService projectService;

private final ProcessInstanceService processService;

private final ProcessModelService processModelService;

private final StateMachineUtils stateMachineUtils;

/**
* 提交预审
*
* @param dto
* @return
*/
public String startTheProcess(ConstructionPlanDto dto) {
Project projectInfo = projectService.getById(dto.getProjectId());

VUtils.isTrue(Objects.isNull(projectInfo)).throwMessage("提交失败 此项目不存在!");

String regionCode = projectInfo.getAreaCode();

WflowModels model = processModelService.getOne(Wrappers.lambdaQuery(WflowModels.class)
.eq(WflowModels::getRegionCode, regionCode)
.eq(WflowModels::getFormName, ProjectProessStageEnum.CONSTRUCTION_PROJECT_APPROVAL_PROCESS.getDesc())
.last("limit 1"));

if (Objects.isNull(model)) {
log.error("此 【{}】区域找不到 建设申报流程配置", regionCode);
throw new BusinessException(String.format("此 【%s】区域找不到 建设申报流程配置", regionCode));
}

//首先要判断 项目当前状态 是不是 方案待申报
VUtils.isTrue(!ProjectStatusEnum.PLAN_TO_BE_DECLARED.getCode().equals(projectInfo.getStatus()) ||
!ProjectStatusEnum.NOT_APPROVED.getCode().equals(projectInfo.getStage()))
.throwMessage("提交失败 该项目不是 待预审状态或者未立项阶段");
//TODO 再判断 该项目是否 真实走完 单位内部审批

ProcessStartParamsVo params = new ProcessStartParamsVo();
params.setUser(dto.getUser());
params.setProcessUsers(Collections.emptyMap());
//放入条件判断的项目字段
ProjectConditionDto conditionDto = new ProjectConditionDto();
BeanUtils.copyProperties(projectInfo, conditionDto);
if (Objects.nonNull(conditionDto)) {
dto.getFormData().putAll(
JSON.parseObject(JSON.toJSONString(conditionDto), new TypeReference<Map<String, Object>>() {
})
);
}
params.setFormData(dto.getFormData());
String instanceId = processService.startProcess(model.getProcessDefId(), params);
log.info("建设方案项目申报成功 【{}】", instanceId);

//保存建设项目
modifyProject(projectInfo, instanceId, dto.getConstructionPlanFile());

return instanceId;
}

/**
* 提交预审项目 时 更新信息
*
* @param project
* @param instanceId
*/
private void modifyProject(Project project, String instanceId, String constructionPlanFile) {
//流程启动之后 入库项目 重要业务信息 用于列表查询 展示
try {
project.setUpdateOn(LocalDateTime.now());
project.setInstCode(instanceId);
project.setConstructionPlanFile(constructionPlanFile);
//调用状态机 进入下一个通过状态
stateMachineUtils.execute(project, stateMachineUtils.getProjectStatusPassEvent(project.getStatus()));
projectService.updateById(project);
} catch (Exception e) {
log.error("提交建设方案 项目信息修改 错误 ", e);
throw new BusinessException("提交建设方案 项目信息修改 错误 :" + e.getMessage());
}
}
}

+ 22
- 17
pmapi/src/main/java/com/ningdatech/pmapi/projectdeclared/manage/DeclaredProjectManage.java View File

@@ -2,6 +2,7 @@ package com.ningdatech.pmapi.projectdeclared.manage;

import cn.hutool.core.collection.CollUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.TypeReference;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -14,11 +15,10 @@ import com.ningdatech.pmapi.projectdeclared.entity.dto.DeclaredProjectListParamD
import com.ningdatech.pmapi.projectdeclared.entity.dto.ProjectConditionDto;
import com.ningdatech.pmapi.projectdeclared.entity.dto.ProjectDraftSaveDto;
import com.ningdatech.pmapi.projectdeclared.entity.vo.ProjectDeclaredDetailVO;
import com.ningdatech.pmapi.projectdeclared.entity.vo.ProjectDeclaredListItemVO;
import com.ningdatech.pmapi.projectdeclared.entity.vo.ProjectDraftVo;
import com.ningdatech.pmapi.projectdeclared.service.IProjectDraftService;
import com.ningdatech.pmapi.projectlib.enumeration.ProjectStatusEnum;
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.ProjectApplication;
import com.ningdatech.pmapi.projectlib.model.vo.ProjectLibListItemVO;
@@ -86,25 +86,16 @@ public class DeclaredProjectManage {
return PageVo.of(res, page.getTotal());
}

public ProjectDeclaredDetailVO detail(Long id) {
Project project = projectService.getById(id);
ProjectDeclaredDetailVO vo = new ProjectDeclaredDetailVO();
BeanUtils.copyProperties(project, vo);
List<ProjectApplication> projectApptions = projectApplicationService.list(Wrappers.lambdaQuery(ProjectApplication.class)
.eq(ProjectApplication::getProjectId, id));
vo.setProjectApplications(projectApptions);
return vo;
}

public PageVo<ProjectDraftVo> pageDraft(DeclaredProjectListParamDto params) {
Page<ProjectDraft> page = params.page();
LambdaQueryWrapper<ProjectDraft> wrapper = Wrappers.lambdaQuery(ProjectDraft.class)
.eq(ProjectDraft::getUserId,params.getUserId())
.ge(Objects.nonNull(params.getStartTime()), ProjectDraft::getCreateOn, params.getStartTime())
.le(Objects.nonNull(params.getEndTime()), ProjectDraft::getCreateOn, params.getEndTime())
.eq(Objects.nonNull(params.getProjectType()), ProjectDraft::getProjectType, params.getProjectType())
.eq(Objects.nonNull(params.getProjectYear()), ProjectDraft::getProjectYear, params.getProjectYear())
.eq(Objects.nonNull(params.getProjectStage()), ProjectDraft::getProjectStatusFirst, params.getProjectStage())
.eq(Objects.nonNull(params.getProjectStatus()), ProjectDraft::getProjectStatusSecond, params.getProjectStatus())
.eq(Objects.nonNull(params.getProjectStage()), ProjectDraft::getStage, params.getProjectStage())
.eq(Objects.nonNull(params.getProjectStatus()), ProjectDraft::getStatus, params.getProjectStatus())
.like(StringUtils.isNotBlank(params.getProjectName()), ProjectDraft::getProjectName, params.getProjectName())
.orderByDesc(ProjectDraft::getUpdateOn);
projectDraftService.page(page, wrapper);
@@ -123,6 +114,12 @@ public class DeclaredProjectManage {
ProjectDraft draft = projectDraftService.getById(id);
ProjectDraftVo vo = new ProjectDraftVo();
BeanUtils.copyProperties(draft, vo);
if(StringUtils.isNotBlank(draft.getProjectApplicationList())){
vo.setApplicationList(JSON.parseArray(draft.getProjectApplicationList(),ProjectApplication.class));
}
if(StringUtils.isNotBlank(draft.getDynamicForm())){
vo.setDynamicForm(JSON.parseObject(draft.getDynamicForm(),Map.class));
}
return vo;
}

@@ -133,7 +130,7 @@ public class DeclaredProjectManage {
* @return
*/
public String startTheProcess(DeclaredProjectDto dto) {
ProjectDto projectInfo = dto.getProjectInfo();
ProjectDTO projectInfo = dto.getProjectInfo();
String regionCode = projectInfo.getAreaCode();

WflowModels model = processModelService.getOne(Wrappers.lambdaQuery(WflowModels.class)
@@ -174,7 +171,7 @@ public class DeclaredProjectManage {
* @param projectDto
* @param instanceId
*/
private void saveProject(ProjectDto projectDto, String instanceId, String regionCode) {
private void saveProject(ProjectDTO projectDto, String instanceId, String regionCode) {
//流程启动之后 入库项目 重要业务信息 用于列表查询 展示
try {
//保存项目表信息
@@ -210,8 +207,16 @@ public class DeclaredProjectManage {
* @return
*/
public Long saveToDraft(ProjectDraftSaveDto dto) {
ProjectDTO projectInfo = dto.getProjectInfo();
ProjectDraft draft = new ProjectDraft();
BeanUtils.copyProperties(dto, draft);
BeanUtils.copyProperties(projectInfo, draft);
draft.setUserId(dto.getUser().getUserId());
if(CollUtil.isNotEmpty(projectInfo.getDynamicForm())){
draft.setDynamicForm(JSON.toJSONString(projectInfo.getDynamicForm()));
}
if(CollUtil.isNotEmpty(projectInfo.getApplicationList())){
draft.setProjectApplicationList(JSON.toJSONString(projectInfo.getApplicationList()));
}
if (Objects.isNull(draft.getId())) {
draft.setCreateOn(LocalDateTime.now());
}


+ 23
- 0
pmapi/src/main/java/com/ningdatech/pmapi/projectlib/controller/AnnualPlanController.java View File

@@ -3,6 +3,7 @@ package com.ningdatech.pmapi.projectlib.controller;
import com.ningdatech.basic.model.PageVo;
import com.ningdatech.log.annotation.WebLog;
import com.ningdatech.pmapi.projectlib.manage.AnnualPlanLibManage;
import com.ningdatech.pmapi.projectlib.model.dto.ProjectDTO;
import com.ningdatech.pmapi.projectlib.model.req.ProjectApprovedReq;
import com.ningdatech.pmapi.projectlib.model.req.ProjectIdReq;
import com.ningdatech.pmapi.projectlib.model.req.ProjectListReq;
@@ -12,7 +13,9 @@ import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;

/**
@@ -58,4 +61,24 @@ public class AnnualPlanController {
annualPlanLibManage.suspendAnnualPlan(req);
}

@PostMapping("/importAnnualPlan")
@ApiOperation("导入年度计划")
@WebLog("导入年度计划")
public void importAnnualPlan(MultipartFile file) {
annualPlanLibManage.importAnnualPlan(file);
}

@GetMapping("/exportAnnualPlanEditTable")
@ApiOperation("导出年度计划编辑表")
public void exportAnnualPlanEditTable(HttpServletResponse response) {
annualPlanLibManage.exportAnnualPlanEditTable(response);
}

@GetMapping("/modify")
@ApiOperation("年度计划编辑")
@WebLog("年度计划编辑")
public void modify(@RequestBody ProjectDTO req) {
annualPlanLibManage.updateAnnualPlan(req);
}

}

+ 82
- 0
pmapi/src/main/java/com/ningdatech/pmapi/projectlib/manage/AnnualPlanLibManage.java View File

@@ -1,5 +1,9 @@
package com.ningdatech.pmapi.projectlib.manage;

import cn.hutool.core.bean.BeanUtil;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -7,10 +11,13 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ningdatech.basic.exception.BizException;
import com.ningdatech.basic.model.PageVo;
import com.ningdatech.basic.util.CollUtils;
import com.ningdatech.basic.util.ValidUtil;
import com.ningdatech.pmapi.common.statemachine.event.ProjectStatusChangeEvent;
import com.ningdatech.pmapi.common.statemachine.util.StateMachineUtils;
import com.ningdatech.pmapi.projectlib.enumeration.ProjectStatusEnum;
import com.ningdatech.pmapi.projectlib.helper.ProjectHelper;
import com.ningdatech.pmapi.projectlib.model.dto.AnnualLibImportDTO;
import com.ningdatech.pmapi.projectlib.model.dto.ProjectDTO;
import com.ningdatech.pmapi.projectlib.model.entity.Project;
import com.ningdatech.pmapi.projectlib.model.req.ProjectApprovedReq;
import com.ningdatech.pmapi.projectlib.model.req.ProjectIdReq;
@@ -21,7 +28,11 @@ import com.ningdatech.pmapi.projectlib.service.IProjectService;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@@ -129,4 +140,75 @@ public class AnnualPlanLibManage {
stateMachine.execute(project, ProjectStatusChangeEvent.ANNUAL_PLAN_SUSPEND);
}

@Transactional(rollbackFor = Exception.class)
public void importAnnualPlan(MultipartFile file) {
try (InputStream inputStream = file.getInputStream()) {
EasyExcel.read(inputStream, new AnalysisEventListener<AnnualLibImportDTO>() {

private List<Project> records = new ArrayList<>();

@Override
public void onException(Exception exception, AnalysisContext context) throws Exception {
super.onException(exception, context);
throw BizException.wrap("导入年度计划解析失败");
}

@Override
public void invoke(AnnualLibImportDTO data, AnalysisContext context) {
ValidUtil.valid(data);
Project project = new Project();
project.setId(data.getProjectId());
project.setProjectName(data.getProjectName());
project.setProjectRemarks(data.getProjectRemarks());
project.setEngineeringSpeedOne(data.getEngineeringSpeedOne());
project.setEngineeringSpeedTwo(data.getEngineeringSpeedTwo());
project.setEngineeringSpeedThree(data.getEngineeringSpeedThree());
project.setEngineeringSpeedFour(data.getEngineeringSpeedFour());
project.setAnnualPlanAmount(data.getAnnualPlanAmount());
project.setDeclareOtherAmount(data.getDeclareOtherAmount());
project.setBuildBasis(data.getBuildBasis());
project.setBuildOrgName(data.getBuildUnitName());
project.setDeclareBankLendingAmount(data.getDeclareBankLendingAmount());
project.setDeclareGovOwnFinanceAmount(data.getDeclareGovOwnFinanceAmount());
project.setDeclareGovSuperiorFinanceAmount(data.getDeclareGovSuperiorFinanceAmount());
project.setDeclareHaveAmount(data.getDeclareHaveAmount());
project.setDeclareOtherAmount(data.getDeclareOtherAmount());
project.setContactName(data.getContactName());
project.setResponsibleMan(data.getResponsibleMan());
String[] dataArr = data.getBuildCycle().split("至");
project.setBeginTime(dataArr[0].trim());
project.setEndTime(dataArr[1].trim());
project.setProjectIntroduction(data.getProjectIntroduction());
project.setIsFirst(data.getIsFirst().equals("新建") ? 1 : 0);
records.add(project);
}

@Override
public void doAfterAllAnalysed(AnalysisContext context) {
if (records.isEmpty()) {
throw BizException.wrap("导入年度计划为空");
}
List<Long> projectIds = CollUtils.fieldList(records, Project::getId);
long count = projectService.count(Wrappers.lambdaQuery(Project.class)
.in(Project::getId, projectIds));
if (count != records.size()) {
throw BizException.wrap("请确保所有项目都存在");
}
projectService.updateBatchById(records);
}
}).sheet(0).doReadSync();
} catch (IOException e) {
throw BizException.wrap("导入年度计划失败");
}
}

public void exportAnnualPlanEditTable(HttpServletResponse response) {
// TODO
}

public void updateAnnualPlan(ProjectDTO req) {
Project project = BeanUtil.copyProperties(req, Project.class);
projectService.updateById(project);
}

}

+ 108
- 0
pmapi/src/main/java/com/ningdatech/pmapi/projectlib/model/dto/AnnualLibImportDTO.java View File

@@ -0,0 +1,108 @@
package com.ningdatech.pmapi.projectlib.model.dto;

import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;

/**
* <p>
* AnnualLibImportDTO
* </p>
*
* @author WendyYang
* @since 13:46 2023/2/13
*/
@Data
public class AnnualLibImportDTO {

@ExcelProperty("序号")
@NotNull(message = "序号不能为空")
private Integer serialNumber;

@ExcelProperty("项目id")
@NotNull(message = "项目ID不能为空")
private Long projectId;

@ExcelProperty("项目名称")
@NotBlank(message = "项目名称不能为空")
private String projectName;

@NotBlank(message = "建设内容不能为空")
@ExcelProperty("建设内容")
private String projectIntroduction;

@NotBlank(message = "建设依据不能为空")
@ExcelProperty("建设依据")
private String buildBasis;

@ExcelProperty("建设性质")
@NotBlank(message = "建设性质不能为空")
private String isFirst;

@ExcelProperty("建设起止年限")
@NotBlank(message = "建设起止年限不能为空")
private String buildCycle;

@NotBlank(message = "总投资不能为空")
@ExcelProperty("总投资")
private BigDecimal declaredAmount;

@NotNull(message = "年度投资额不能为空")
@ExcelProperty("年度投资额")
private BigDecimal annualPlanAmount;

@ExcelProperty("自有资金")
@NotNull(message = "自由资金不能为空")
private BigDecimal declareHaveAmount;

@ExcelProperty("政府投资-本级财政")
@NotNull(message = "政府投资-本级财政不能为空")
private BigDecimal declareGovOwnFinanceAmount;

@ExcelProperty("政府投资-上级补")
@NotNull(message = "政府投资-上级补不能为空")
private BigDecimal declareGovSuperiorFinanceAmount;

@ExcelProperty("银行贷款")
@NotNull(message = "银行贷款不能为空")
private BigDecimal declareBankLendingAmount;

@ExcelProperty("其他")
@NotNull(message = "其他不能为空")
private BigDecimal declareOtherAmount;

@ExcelProperty("一季度")
@NotBlank(message = "一季度不能为空")
private String engineeringSpeedOne;

@ExcelProperty("二季度")
@NotBlank(message = "二季度不能为空")
private String engineeringSpeedTwo;

@ExcelProperty("三季度")
@NotBlank(message = "三季度不能为空")
private String engineeringSpeedThree;

@ExcelProperty("四季度")
@NotBlank(message = "四季度不能为空")
private String engineeringSpeedFour;

@ExcelProperty("建设单位")
@NotBlank(message = "建设单位不能为空")
private String buildUnitName;

@ExcelProperty("项目联系人")
@NotBlank(message = "项目联系人不能为空")
private String contactName;

@ExcelProperty("项目分管领导")
@NotBlank(message = "项目分管领导不能为空")
private String responsibleMan;

@ExcelProperty("备注")
private String projectRemarks;

}

pmapi/src/main/java/com/ningdatech/pmapi/projectlib/model/dto/ProjectApplicationDto.java → pmapi/src/main/java/com/ningdatech/pmapi/projectlib/model/dto/ProjectApplicationDTO.java View File

@@ -17,7 +17,7 @@ import java.time.LocalDateTime;
*/
@ApiModel(value = "NdProjectApplication对象", description = "")
@Data
public class ProjectApplicationDto implements Serializable {
public class ProjectApplicationDTO implements Serializable {

private static final long serialVersionUID = 1L;


pmapi/src/main/java/com/ningdatech/pmapi/projectlib/model/dto/ProjectDto.java → pmapi/src/main/java/com/ningdatech/pmapi/projectlib/model/dto/ProjectDTO.java View File

@@ -9,6 +9,7 @@ import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;

/**
* <p>
@@ -20,7 +21,7 @@ import java.util.List;
*/
@Data
@ApiModel(value = "NdProjectDto", description = "")
public class ProjectDto implements Serializable {
public class ProjectDTO implements Serializable {

private static final long serialVersionUID = 1L;

@@ -280,13 +281,13 @@ public class ProjectDto implements Serializable {
private String formId;

@ApiModelProperty("项目应用实例")
private List<ProjectApplicationDto> applicationList;
private List<ProjectApplicationDTO> applicationList;

@ApiModelProperty("流程状态")
private Integer processStatus;

@ApiModelProperty("动态表单 json")
private String dynamicForm;
private Map<String,Object> dynamicForm;

private Long createBy;


+ 6
- 4
pmapi/src/main/java/com/ningdatech/pmapi/projectlib/model/entity/Project.java View File

@@ -1,8 +1,6 @@
package com.ningdatech.pmapi.projectlib.model.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.*;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@@ -233,8 +231,10 @@ public class Project implements Serializable {
@ApiModelProperty("一地创新全省共享项目-是否开启 false:关闭 true:开启")
private Boolean isInnovateWholeProvinceShare;

@TableField(fill = FieldFill.INSERT)
private LocalDateTime createOn;

@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateOn;

@ApiModelProperty("流程实例编号")
@@ -285,8 +285,10 @@ public class Project implements Serializable {
@ApiModelProperty("动态表单 json")
private String dynamicForm;

@TableField(fill = FieldFill.INSERT)
private Long createBy;

@TableField(fill = FieldFill.INSERT_UPDATE)
private Long updateBy;

}

+ 3
- 2
pmapi/src/test/java/com/ningdatech/pmapi/sys/project/ProjectStateTest.java View File

@@ -36,8 +36,9 @@ public class ProjectStateTest extends AppTests {
project.setInstCode("1");
project.setId(1L);
project.setStage(ProjectStatusEnum.NOT_APPROVED.getCode());
project.setStatus(ProjectStatusEnum.UNDER_INTERNAL_AUDIT.getCode());
stateMachineUtils.execute(project, ProjectStatusChangeEvent.UNDER_INTERNAL_PASS);
project.setStatus(ProjectStatusEnum.PENDING_PREQUALIFICATION.getCode());
//调用状态机 进入下一个通过状态
stateMachineUtils.execute(project,stateMachineUtils.getProjectStatusPassEvent(project.getStatus()));

stopWatch.stop();
System.out.println("调用状态机结束 :" + stopWatch.getTotalTimeSeconds());


+ 47
- 0
pmapi/src/test/java/com/ningdatech/pmapi/sys/service/IMenuServiceTest.java View File

@@ -1,9 +1,15 @@
package com.ningdatech.pmapi.sys.service;

import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.io.FileUtil;
import cn.hutool.db.Db;
import cn.hutool.db.Entity;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.ningdatech.pmapi.AppTests;
import com.ningdatech.pmapi.sys.model.entity.Menu;
import com.ningdatech.pmapi.sys.model.entity.RoleMenu;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;

@@ -34,4 +40,45 @@ class IMenuServiceTest extends AppTests {
});
}


@Autowired
private IRoleMenuService roleMenuService;

@Test
public void initMenu() {
/*String str = FileUtil.readString("/Users/wendy/Desktop/long_text_2023-02-13-15-28-42.txt", "UTF-8");
List<JSONObject> obj = JSONUtil.toList(str, JSONObject.class);
save(obj, 0);*/
menuService.list().forEach(w -> {
roleMenuService.save(new RoleMenu(){{
setRoleId(1L);
setMenuId(w.getId());
}});
});
}

public void save(List<JSONObject> objs, long parentId) {
objs.forEach(w -> {
Menu menu = new Menu();
menu.setActiveMenu(w.getStr("activeMenu"));
menu.setComponent(w.getStr("component"));
menu.setIcon(w.getStr("icon"));
menu.setPath(w.getStr("path"));
menu.setName(w.getStr("path").replace("/", ""));
menu.setTopMenu(w.getStr("topMenu"));
menu.setTitle(w.getStr("title"));
menu.setHidden(w.getBool("hidden"));
menu.setPid(parentId);
menu.setRedirect(w.getStr("redirect"));
menu.setSort(w.getInt("sort"));
menu.setDataScopeOption("");
menu.setHasDataScope(false);
menuService.save(menu);
List<JSONObject> children = w.getBeanList("children", JSONObject.class);
if (CollUtil.isNotEmpty(children)) {
save(children, menu.getId());
}
});
}

}

Loading…
Cancel
Save