Browse Source

Merge remote-tracking branch 'origin/master'

liuyc 2 years ago
parent
commit
9267d329c2
26 changed files with 1116 additions and 31 deletions
  1. 25 0
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/dto/ControlProjectInfoDTO.java
  2. 81 0
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/ControlProjectInfo.java
  3. 51 0
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/ProjectProcess.java
  4. 61 0
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/ProjectReimbursement.java
  5. 23 0
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/ControlProjectInfoVO.java
  6. 18 0
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/ProjectProcessVO.java
  7. 61 0
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/ProjectReimbursementVO.java
  8. 19 0
      blade-service/blade-archive/src/main/java/org/springblade/archive/config/ThreadPoolConfig.java
  9. 116 27
      blade-service/blade-archive/src/main/java/org/springblade/archive/service/impl/ArchivesAutoServiceImpl.java
  10. 101 0
      blade-service/blade-control/src/main/java/org/springblade/control/controller/ProjectInfoController.java
  11. 33 0
      blade-service/blade-control/src/main/java/org/springblade/control/controller/ProjectProcessController.java
  12. 68 0
      blade-service/blade-control/src/main/java/org/springblade/control/controller/ProjectReimbursementController.java
  13. 26 0
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectInfoMapper.java
  14. 39 0
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectInfoMapper.xml
  15. 19 0
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectProcessMapper.java
  16. 16 0
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectProcessMapper.xml
  17. 12 0
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectReimbursementMapper.java
  18. 6 0
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectReimbursementMapper.xml
  19. 32 0
      blade-service/blade-control/src/main/java/org/springblade/control/service/IProjectInfoService.java
  20. 21 0
      blade-service/blade-control/src/main/java/org/springblade/control/service/IProjectProcessService.java
  21. 20 0
      blade-service/blade-control/src/main/java/org/springblade/control/service/IProjectReimbursementService.java
  22. 107 0
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/ProjectInfoServiceImpl.java
  23. 93 0
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/ProjectProcessServiceImpl.java
  24. 52 0
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/ProjectReimbursementServiceImpl.java
  25. 4 4
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/TaskInfoServiceImpl.java
  26. 12 0
      blade-service/blade-control/src/main/java/org/springblade/control/utils/BHUtils.java

+ 25 - 0
blade-service-api/blade-control-api/src/main/java/org/springblade/control/dto/ControlProjectInfoDTO.java

@@ -0,0 +1,25 @@
+package org.springblade.control.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.control.entity.ControlProjectInfo;
+import org.springblade.control.entity.ProjectProcess;
+
+import java.util.List;
+
+/**
+ * @Param
+ * @Author wangwl
+ * @Date 2023/5/12 16:40
+ **/
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class ControlProjectInfoDTO extends ControlProjectInfo {
+    //项目进程集合
+    private List<ProjectProcess> projectProcessList;
+
+    //模糊查询
+    @ApiModelProperty(value = "搜索值")
+    private String queryValue;
+}

+ 81 - 0
blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/ControlProjectInfo.java

@@ -0,0 +1,81 @@
+package org.springblade.control.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.core.mp.base.BaseEntity;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.math.BigDecimal;
+import java.text.DecimalFormat;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+/**
+ * @Param
+ * @Author wangwl
+ * @Date 2023/5/12 9:21
+ **/
+@Data
+@TableName("c_control_project_info")
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "项目表", description = "项目表")
+public class ControlProjectInfo extends BaseEntity {
+    @ApiModelProperty(value = "项目编号")
+    private String number;
+
+    @ApiModelProperty(value = "项目名称")
+    private String name;
+
+    @ApiModelProperty(value = "项目进程")
+    private String process;
+
+    @DateTimeFormat(
+            pattern = "yyyy-MM-dd"
+    )
+    @JsonFormat(
+            pattern = "yyyy-MM-dd"
+    )
+    @ApiModelProperty(value = "项目开始日期")
+    private LocalDate projectStartTime;
+
+    @ApiModelProperty(value = "项目类型")
+    private Integer projectType;
+
+    @ApiModelProperty(value = "合同类型")
+    private Integer contractType;
+
+    @ApiModelProperty(value = "合同金额")
+    private BigDecimal contractAmount;
+
+    @DateTimeFormat(
+            pattern = "yyyy-MM-dd"
+    )
+    @JsonFormat(
+            pattern = "yyyy-MM-dd"
+    )
+    @ApiModelProperty(value = "合同开始时间")
+    private LocalDate contractStartTime;
+
+    @DateTimeFormat(
+            pattern = "yyyy-MM-dd"
+    )
+    @JsonFormat(
+            pattern = "yyyy-MM-dd"
+    )
+    @ApiModelProperty(value = "合同停止日期")
+    private LocalDate contractEndTime;
+
+    @ApiModelProperty(value = "已回款")
+    private BigDecimal returnedMoney;
+
+    @ApiModelProperty(value = "合同pdf")
+    private String contractPdf;
+
+    @ApiModelProperty(value = "负责人")
+    private Long dutyUser;
+
+}

+ 51 - 0
blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/ProjectProcess.java

@@ -0,0 +1,51 @@
+package org.springblade.control.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.core.mp.base.BaseEntity;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+/**
+ * @Param
+ * @Author wangwl
+ * @Date 2023/5/12 11:42
+ **/
+@Data
+@TableName("c_control_project_process")
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "项目进程表", description = "项目进程表")
+public class ProjectProcess extends BaseEntity {
+    @ApiModelProperty(value = "项目id")
+    private Long projectId;
+
+    @ApiModelProperty(value = "进程名称")
+    private String name;
+
+    @ApiModelProperty(value = "进程排序")
+    private Integer sort;
+
+    @DateTimeFormat(
+            pattern = "yyyy-MM-dd"
+    )
+    @JsonFormat(
+            pattern = "yyyy-MM-dd"
+    )
+    @ApiModelProperty(value = "进程开始日期")
+    private LocalDate processStartTime;
+
+    @DateTimeFormat(
+            pattern = "yyyy-MM-dd"
+    )
+    @JsonFormat(
+            pattern = "yyyy-MM-dd"
+    )
+    @ApiModelProperty(value = "进程结束日期")
+    private LocalDate processEndTime;
+}

+ 61 - 0
blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/ProjectReimbursement.java

@@ -0,0 +1,61 @@
+package org.springblade.control.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.core.mp.base.BaseEntity;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.math.BigDecimal;
+import java.time.LocalDate;
+
+/**
+ * @Param
+ * @Author wangwl
+ * @Date 2023/5/15 13:39
+ **/
+@Data
+@TableName("c_control_project_reimbursement")
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "项目报销表", description = "项目报销表")
+public class ProjectReimbursement extends BaseEntity {
+    @ApiModelProperty(value = "项目id")
+    private Long projectId;
+
+    @ApiModelProperty(value = "报销编号")
+    private String number;
+
+    @ApiModelProperty(value = "报销类型")
+    private Integer type;
+
+    @ApiModelProperty(value = "项目名称")
+    private String projectName;
+
+    @ApiModelProperty(value = "项目进程")
+    private Long projectProcessId;
+
+    @ApiModelProperty(value = "报销金额")
+    private BigDecimal reimbursementAmount;
+
+    @ApiModelProperty(value = "报销人")
+    private Long reimbursementUser;
+
+    @ApiModelProperty(value = "报销人姓名")
+    private String reimbursementUserName;
+
+    @DateTimeFormat(
+            pattern = "yyyy-MM-dd"
+    )
+    @JsonFormat(
+            pattern = "yyyy-MM-dd"
+    )
+    @ApiModelProperty(value = "报销时间")
+    private LocalDate reimbursementTime;
+
+    @ApiModelProperty(value = "关联预算节点")
+    private Long budgetId;
+
+}

+ 23 - 0
blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/ControlProjectInfoVO.java

@@ -0,0 +1,23 @@
+package org.springblade.control.vo;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.control.entity.ControlProjectInfo;
+
+import java.util.List;
+
+/**
+ * @Param
+ * @Author wangwl
+ * @Date 2023/5/12 11:20
+ **/
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class ControlProjectInfoVO extends ControlProjectInfo {
+    //项目类型值
+    private String projectTypeValue;
+    //合同类型值
+    private String contractTypeValue;
+    //项目进程集合
+    private List<ProjectProcessVO> projectProcessList;
+}

+ 18 - 0
blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/ProjectProcessVO.java

@@ -0,0 +1,18 @@
+package org.springblade.control.vo;
+
+import jdk.net.SocketFlow;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.control.entity.ProjectProcess;
+
+/**
+ * @Param
+ * @Author wangwl
+ * @Date 2023/5/12 15:00
+ **/
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class ProjectProcessVO extends ProjectProcess {
+    //进程状态值
+    private String statusValue;
+}

+ 61 - 0
blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/ProjectReimbursementVO.java

@@ -0,0 +1,61 @@
+package org.springblade.control.vo;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.core.mp.base.BaseEntity;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.math.BigDecimal;
+import java.time.LocalDate;
+
+/**
+ * @Param
+ * @Author wangwl
+ * @Date 2023/5/15 13:39
+ **/
+@Data
+@TableName("c_control_project_reimbursement")
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "项目报销表", description = "项目报销表")
+public class ProjectReimbursementVO extends BaseEntity {
+    @ApiModelProperty(value = "项目id")
+    private Long projectId;
+
+    @ApiModelProperty(value = "报销编号")
+    private String number;
+
+    @ApiModelProperty(value = "报销类型")
+    private Integer type;
+
+    @ApiModelProperty(value = "项目名称")
+    private String projectName;
+
+    @ApiModelProperty(value = "项目进程")
+    private Long projectProcessId;
+
+    @ApiModelProperty(value = "报销金额")
+    private BigDecimal reimbursementAmount;
+
+    @ApiModelProperty(value = "报销人")
+    private Long reimbursementUser;
+
+    @ApiModelProperty(value = "报销人姓名")
+    private String reimbursementUserName;
+
+    @DateTimeFormat(
+            pattern = "yyyy-MM-dd"
+    )
+    @JsonFormat(
+            pattern = "yyyy-MM-dd"
+    )
+    @ApiModelProperty(value = "报销时间")
+    private LocalDate reimbursementTime;
+
+    @ApiModelProperty(value = "关联预算节点")
+    private Long budgetId;
+
+}

+ 19 - 0
blade-service/blade-archive/src/main/java/org/springblade/archive/config/ThreadPoolConfig.java

@@ -0,0 +1,19 @@
+package org.springblade.archive.config;
+
+import org.springframework.boot.SpringBootConfiguration;
+import org.springframework.context.annotation.Bean;
+import org.springframework.scheduling.annotation.EnableAsync;
+
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
+@SpringBootConfiguration
+public class ThreadPoolConfig {
+
+
+    @Bean(name = "executorService")
+    public ExecutorService executorService(){
+        return Executors.newFixedThreadPool(10);
+    }
+
+}

+ 116 - 27
blade-service/blade-archive/src/main/java/org/springblade/archive/service/impl/ArchivesAutoServiceImpl.java

@@ -58,11 +58,16 @@ import org.springblade.manager.feign.ProjectClient;
 import org.springblade.resource.feign.NewIOSSClient;
 import org.springblade.system.entity.DictBiz;
 import org.springblade.system.feign.IDictBizClient;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.scheduling.annotation.EnableAsync;
 import org.springframework.stereotype.Service;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 
 import java.time.LocalDateTime;
 import java.util.*;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
 import java.util.stream.Collectors;
 
 /**
@@ -81,6 +86,9 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 	private ContractClient contractClient;
 	private ProjectClient projectClient;
 
+	@Autowired
+	private ExecutorService executorService;
+
 	private Map<String,Integer> indexMap = new HashMap<>(); //按立卷位区分和生成流水号
 	private IArchiveAutoPdfService archiveAutoPdfService;
 	private final NewIOSSClient iossClient;
@@ -233,6 +241,7 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 		List<Map<String,String>> list = baseMapper.getAllArchiveAgeByContractType(projectId);
 		return list;
 	}
+
 	@Override
 	public void splitArchvies(Long projectId){
 		List<String> removeFiles = new ArrayList<>();
@@ -242,7 +251,9 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 			for(String outUrl:archivesOutUrlList){
 				String[] splits = outUrl.split(",");
 				for(String url:splits){
-					removeFiles.add(FileUtils.getAliYunSubUrl(url));
+					if(StringUtils.isNotEmpty(url.trim())){
+						removeFiles.add(FileUtils.getAliYunSubUrl(url));
+					}
 				}
 			}
 		}
@@ -250,13 +261,15 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 		List<String> filePageUrlList = baseMapper.getFilePageUrlList(projectId);
 		if(filePageUrlList!=null && filePageUrlList.size()>0){
 			for(String url:filePageUrlList){
-				removeFiles.add(FileUtils.getAliYunSubUrl(url));
+				if(StringUtils.isNotEmpty(url.trim())){
+					removeFiles.add(FileUtils.getAliYunSubUrl(url));
+				}
 			}
 		}
-
-		iossClient.removeFiles(removeFiles);
-
-
+		executorService.execute(()->{
+			iossClient.removeFiles(removeFiles);
+			log.debug("文件删完了");
+		});
 		//取消未锁定案卷文件关联
 		baseMapper.splitArchvies(projectId);
 
@@ -289,7 +302,7 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 		//步骤四:按照单独,分类,默认,分盒的顺序执行组卷流程。
 
 		//分盒文件集合
-		Map<Integer,List<ArchiveFile>> boxMap = new LinkedHashMap<>();
+		Map<String,List<ArchiveFile>> boxMap = new LinkedHashMap<>();
 
 		archiveAutoMethod3(list3,boxMap);//单独组卷
 		archiveAutoMethod2(list2,projectId,boxMap);//分类组卷
@@ -297,16 +310,16 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 		archiveAutoMethodBox(boxMap);//分盒组卷
 	}
 
-	private void addBoxMap(ArchiveFile file,Map<Integer,List<ArchiveFile>> boxMap){
-		Integer boxNumber = file.getBoxNumber();
-		if(boxMap.containsKey(boxNumber)){
-			List<ArchiveFile> boxFiles = boxMap.get(boxNumber);
+	private void addBoxMap(ArchiveFile file,Map<String,List<ArchiveFile>> boxMap){
+		String boxName = file.getBoxName();
+		if(boxMap.containsKey(boxName)){
+			List<ArchiveFile> boxFiles = boxMap.get(boxName);
 			boxFiles.add(file);
-			boxMap.put(boxNumber,boxFiles);
+			boxMap.put(boxName,boxFiles);
 		}else{
 			List<ArchiveFile> boxFiles = new ArrayList<>();
 			boxFiles.add(file);
-			boxMap.put(boxNumber,boxFiles);
+			boxMap.put(boxName,boxFiles);
 		}
 	}
 
@@ -399,6 +412,8 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 			indexMap=new HashMap<>(); //监理,施工的按合同段分类从0开始依次设置档号,建设单位的没有合同段 就先按一类依次设置
 		}
 
+		ContractInfo nodeContract=null;
+		List<ContractInfo> contracts =null;
 		//获取立卷单位
 		String unit="";
 		String treeCode = node.getTreeCode();
@@ -439,8 +454,65 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 		archivesAuto.setSpecification(node.getSpecification());//案卷规格 从节点规格获取
 		//archivesAuto.setStartDate(LocalDateTime.parse(startDate));//文件开始时间
 		//archivesAuto.setEndDate(LocalDateTime.parse(endDate));//文件结束时间
-		archivesAuto.setStorageTime(node.getStorageTime());//保管期限  从节点规格获取
-		archivesAuto.setSecretLevel("");//保密级别 没地方设置 暂留
+
+		//TODO 保管期限
+		String storageTime = node.getStorageTime();
+		if(StringUtils.isEmpty(storageTime)){
+			//节点没有值,就从合同段获取,没有合同段id的 用业主的合同段
+			Long nodeContractId = archivesAuto.getContractId();
+			if(nodeContractId!=null){
+				if(nodeContract==null){
+					nodeContract = contractClient.getContractById(nodeContractId);
+				}
+				storageTime = nodeContract.getStoragePeriod().toString();
+			}else{
+				List<Long> pids= new ArrayList<>();
+				pids.add(archivesAuto.getProjectId());
+				if(contracts==null){
+					contracts = contractClient.queryContractListByIds(pids);
+				}
+				for(ContractInfo c:contracts){
+					if(c.getContractType()==3){
+						storageTime = c.getStoragePeriod().toString();
+					}
+				}
+			}
+		}
+		archivesAuto.setStorageTime(storageTime);//保管期限  从节点规格获取
+
+		//保密级别 没地方设置 暂留
+		String secretLevel="";
+		if(StringUtils.isEmpty(secretLevel)){
+			//节点没有值,就从合同段获取,没有合同段id的 用业主的合同段
+			Long nodeContractId = archivesAuto.getContractId();
+			if(nodeContractId!=null){
+				if(nodeContract==null){
+					nodeContract = contractClient.getContractById(nodeContractId);
+				}
+				secretLevel = nodeContract.getSecurityLevel().toString();
+			}else{
+				List<Long> pids= new ArrayList<>();
+				pids.add(archivesAuto.getProjectId());
+				if(contracts==null){
+					contracts = contractClient.queryContractListByIds(pids);
+				}
+				for(ContractInfo c:contracts){
+					if(c.getContractType()==3){
+						secretLevel = c.getSecurityLevel().toString();
+					}
+				}
+			}
+		}
+		archivesAuto.setSecretLevel(secretLevel);
+
+		//立卷人 从节点规格获取
+		String rollor = node.getRollor();
+		archivesAuto.setRollor(node.getRollor());
+
+		//审核人 从节点规格获取
+		String reviewer = node.getReviewer();
+		archivesAuto.setReviewer(node.getReviewer());
+
 		//载体类型
 		if (node.getStorageType()!= null){
 			archivesAuto.setCarrierType(node.getStorageType().toString());
@@ -450,8 +522,7 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 		archivesAuto.setIsArchive(1);//已归档
 		//archivesAuto.setRemark();//备注
 		archivesAuto.setRollDate(LocalDateTime.now());//立卷日期
-		archivesAuto.setRollor(node.getRollor());//立卷人 从节点规格获取
-		archivesAuto.setReviewer(node.getReviewer());//审核人 从节点规格获取
+
 		archivesAuto.setNodeId(node.getId());//归档树节点
 		archivesAuto.setOutUrl("");//TODO 生成案卷的封面 目录 备考表,背级
 		archivesAuto.setFileN(fileN);//文件数量
@@ -466,6 +537,7 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 		archivesAuto.setIsLock(0);//案卷锁定状态
 		archivesAuto.setIsDeleted(0);
 		baseMapper.insert(archivesAuto);
+		log.debug("组好"+archivesAuto.getName());
 		return archivesAuto;
 	}
 
@@ -641,7 +713,7 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 		archiveFileClient.updateArchiveFileForCreateArchive(waitArchiveFiles);
 	}
 
-	private void createArchiveBox(List<ArchiveFile> waitArchiveFiles){
+	private void createArchiveBox(String boxName,List<ArchiveFile> waitArchiveFiles){
 
 		if(waitArchiveFiles.size()==0){
 			return;
@@ -666,10 +738,10 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 
 		//默认组卷存在跨节点组卷  注意案卷归属节点,案卷命名方式
 		//获取案卷题名
-		String archiveName=builtArchiveName(waitArchiveFiles,node,false);//获取案卷题名
+		//String archiveName=builtArchiveName(waitArchiveFiles,node,false);//获取案卷题名
 
 		//1.创建新案卷
-		ArchivesAuto archivesAuto = builtArchives(node,pageN,fileN,startDate,endDate,archiveName);
+		ArchivesAuto archivesAuto = builtArchives(node,pageN,fileN,startDate,endDate,boxName);
 
 		//2.封面和生成文件页码
 		archiveAutoPdfService.buildArchiveFrontPdfs(archivesAuto.getProjectId(),archivesAuto,waitArchiveFiles);
@@ -689,7 +761,7 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 	/**
 	 * 单租组卷流程  节点下的文件只在当前节点下组卷
 	 */
-	private void archiveAutoMethod3(List<ArchiveTreeContract> list,Map<Integer,List<ArchiveFile>> boxMap){
+	private void archiveAutoMethod3(List<ArchiveTreeContract> list,Map<String,List<ArchiveFile>> boxMap){
 		//步骤1:遍历节点集合
 		for(ArchiveTreeContract node:list){
 			//步骤2:获取当前节点的案卷规格
@@ -783,7 +855,7 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 	/**
 	 * 分类并卷组卷  设置分类的节点下只有一个案卷,节点下的所有文件都组成这个案卷。如果设置分类节点(select=1的)多个,案卷归属排序第一个节点。
 	 */
-	private void archiveAutoMethod2(List<ArchiveTreeContract> list,Long projectId,Map<Integer,List<ArchiveFile>> boxMap){
+	private void archiveAutoMethod2(List<ArchiveTreeContract> list,Long projectId,Map<String,List<ArchiveFile>> boxMap){
 
 		//分类并卷集合<groupId,List<文件>>
 		Map<Long,List<ArchiveFile>> archiveMap = new HashMap<>();
@@ -834,7 +906,7 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 	/**
 	 * 默认组卷流程 文件可以跨节点组卷,受最高并卷节点限制范围,跨节点文件组卷时,案卷规格按照第一个文件所在的节点规格 组卷。
 	 */
-	private void archiveAutoMethod1(List<ArchiveTreeContract> list,Map<Integer,List<ArchiveFile>> boxMap){
+	private void archiveAutoMethod1(List<ArchiveTreeContract> list,Map<String,List<ArchiveFile>> boxMap){
 		//最高并卷节点
 		Long archiveAutoNodeId=null;
 
@@ -974,11 +1046,11 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 	 * 分盒组卷流程
 	 * @param boxMap
 	 */
-	private void archiveAutoMethodBox(Map<Integer,List<ArchiveFile>> boxMap){
-		Set<Map.Entry<Integer, List<ArchiveFile>>> entries = boxMap.entrySet();
-		for (Map.Entry<Integer, List<ArchiveFile>> entry:entries){
+	private void archiveAutoMethodBox(Map<String,List<ArchiveFile>> boxMap){
+		Set<Map.Entry<String, List<ArchiveFile>>> entries = boxMap.entrySet();
+		for (Map.Entry<String, List<ArchiveFile>> entry:entries){
 			//一个分盒一个案卷 归属第一个文件所在节点
-			createArchiveBox(entry.getValue());
+			createArchiveBox(entry.getKey(),entry.getValue());
 		}
 	}
 
@@ -1058,6 +1130,23 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 				String fileNumberPrefix ="";
 				if(node_fileNumberPrefixMap.containsKey(nodeId1)){
 					fileNumberPrefix=node_fileNumberPrefixMap.get(nodeId1);
+					if(StringUtils.isEmpty(fileNumberPrefix)){
+						//节点没有值,就从合同段获取,没有合同段id的 用业主的合同段
+						Long nodeContractId = archivesAuto.getContractId();
+						if(nodeContractId!=null){
+							ContractInfo nodeContract = contractClient.getContractById(nodeContractId);
+							fileNumberPrefix = nodeContract.getPrefix();
+						}else{
+							List<Long> pids= new ArrayList<>();
+							pids.add(archivesAuto.getProjectId());
+							List<ContractInfo> contracts = contractClient.queryContractListByIds(pids);
+							for(ContractInfo c:contracts){
+								if(c.getContractType()==3){
+									fileNumberPrefix = c.getPrefix();
+								}
+							}
+						}
+					}
 				}
 
 				String fileNumber = fileNumberPrefix + index;

+ 101 - 0
blade-service/blade-control/src/main/java/org/springblade/control/controller/ProjectInfoController.java

@@ -0,0 +1,101 @@
+package org.springblade.control.controller;
+
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springblade.common.utils.SnowFlakeUtil;
+import org.springblade.control.dto.ControlProjectInfoDTO;
+import org.springblade.control.entity.ControlProjectInfo;
+import org.springblade.control.service.IProjectInfoService;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tool.api.R;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * @Param
+ * @Author wangwl
+ * @Date 2023/5/12 9:46
+ **/
+@RestController
+@AllArgsConstructor
+@RequestMapping("/projectInfo")
+@Api(value = "项目信息接口", tags = "项目信息接口")
+public class ProjectInfoController {
+    private final IProjectInfoService projectInfoService;
+
+    /**
+     * 项目列表
+     */
+    @GetMapping("/page")
+    @ApiOperationSupport(order = 1)
+    @ApiOperation(value = "分页查询项目列表")
+    public R page(ControlProjectInfoDTO dto, Query query){
+        return R.data(projectInfoService.page(dto,query));
+    }
+
+    /**
+     * 新增项目
+     */
+    @PostMapping("/addProjectInfo")
+    @ApiOperationSupport(order = 2)
+    @ApiOperation(value = "新增项目")
+    public R addProjectInfo(@RequestBody ControlProjectInfoDTO dto){
+        projectInfoService.addProjectInfo(dto);
+        return R.success("新增成功");
+    }
+
+    /**
+     * 修改项目
+     */
+    @PostMapping("/updateProjectInfo")
+    @ApiOperationSupport(order = 2)
+    @ApiOperation(value = "修改项目")
+    public R updateProjectInfo(@RequestBody ControlProjectInfoDTO dto){
+        projectInfoService.updateProjectInfo(dto);
+        return R.success("修改成功");
+    }
+
+    /**
+     * 删除项目
+     */
+    @GetMapping("removeProjectInfo")
+    @ApiOperationSupport(order = 2)
+    @ApiOperation(value = "删除项目")
+    public R removeProjectInfo(Long id){
+        projectInfoService.removeProjectInfo(id);
+        return R.success("删除成功");
+    }
+
+
+    /**
+     * 根据id获取项目和流程
+     */
+    @GetMapping("/getProjectInfoById")
+    @ApiOperationSupport(order = 2)
+    @ApiOperation(value = "根据id获取项目和流程")
+    public R getProjectInfoById(Long id){
+        return R.data(projectInfoService.getProjectInfoById(id));
+    }
+
+    /**
+     * 获取项目类型字典
+     */
+    @GetMapping("/getProjectTypeDict")
+    @ApiOperationSupport(order = 2)
+    @ApiOperation(value = "获取项目类型字典")
+    public R getProjectTypeDict(){
+        return R.data(projectInfoService.getProjectTypeDict());
+    }
+
+    /**
+     * 获取合同类型字典
+     */
+    @GetMapping("/getContractTypeDict")
+    @ApiOperationSupport(order = 2)
+    @ApiOperation(value = "获取合同类型字典")
+    public R getContractTypeDict(){
+        return R.data(projectInfoService.getContractTypeDict());
+    }
+
+}

+ 33 - 0
blade-service/blade-control/src/main/java/org/springblade/control/controller/ProjectProcessController.java

@@ -0,0 +1,33 @@
+package org.springblade.control.controller;
+
+
+import cn.hutool.core.util.ReUtil;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springblade.control.service.IProjectProcessService;
+import org.springblade.core.tool.api.R;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @Param
+ * @Author wangwl
+ * @Date 2023/5/12 11:42
+ **/
+@RestController
+@AllArgsConstructor
+@RequestMapping("/projectProcess")
+@Api(value = "项目进程接口", tags = "项目进程接口")
+public class ProjectProcessController{
+   private final IProjectProcessService processService;
+
+   @GetMapping("/getBaseProcess")
+   @ApiOperationSupport(order = 2)
+   @ApiOperation(value = "新增项目获取项目流程")
+   public R getBaseProcess(){
+      return R.data(processService.getBaseProcess());
+   }
+}

+ 68 - 0
blade-service/blade-control/src/main/java/org/springblade/control/controller/ProjectReimbursementController.java

@@ -0,0 +1,68 @@
+package org.springblade.control.controller;
+
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springblade.control.dto.ControlProjectInfoDTO;
+import org.springblade.control.entity.ProjectReimbursement;
+import org.springblade.control.service.IProjectReimbursementService;
+import org.springblade.core.tool.api.R;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * @Param
+ * @Author wangwl
+ * @Date 2023/5/15 14:00
+ **/
+@RestController
+@AllArgsConstructor
+@RequestMapping("/projectReimbursement")
+@Api(value = "项目报销接口", tags = "项目报销接口")
+public class ProjectReimbursementController {
+
+    private final IProjectReimbursementService reimbursementService;
+
+    /**
+     * 新增报销
+     */
+    @PostMapping("/addReimbursement")
+    @ApiOperationSupport(order = 2)
+    @ApiOperation(value = "新增报销")
+    public R addReimbursement(@RequestBody ProjectReimbursement projectReimbursement){
+        reimbursementService.addReimbursement(projectReimbursement);
+        return R.success("新增成功");
+    }
+
+    /**
+     * 修改报销
+     */
+    @PostMapping("/updateReimbursement")
+    @ApiOperationSupport(order = 2)
+    @ApiOperation(value = "修改报销")
+    public R updateReimbursement(@RequestBody ProjectReimbursement projectReimbursement){
+        reimbursementService.updateReimbursement(projectReimbursement);
+        return R.success("修改成功");
+    }
+
+    /**
+     * 删除报销
+     */
+    @GetMapping("removeReimbursement")
+    @ApiOperationSupport(order = 2)
+    @ApiOperation(value = "删除项目")
+    public R removeReimbursement(Long id){
+        reimbursementService.removeReimbursement(id);
+        return R.success("删除成功");
+    }
+
+    /**
+     * 根据id获取报销信息
+     */
+    @GetMapping("/getReimbursementById")
+    @ApiOperationSupport(order = 2)
+    @ApiOperation(value = "根据id获取报销信息")
+    public R getReimbursementById(Long id){
+        return R.data(reimbursementService.getReimbursementById(id));
+    }
+}

+ 26 - 0
blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectInfoMapper.java

@@ -0,0 +1,26 @@
+package org.springblade.control.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.apache.ibatis.annotations.Param;
+import org.springblade.control.dto.ControlProjectInfoDTO;
+import org.springblade.control.entity.ControlProjectInfo;
+import org.springblade.control.vo.ControlProjectInfoVO;
+import org.springblade.system.entity.DictBiz;
+
+import java.util.List;
+
+/**
+ * @Param
+ * @Author wangwl
+ * @Date 2023/5/12 9:38
+ **/
+public interface ProjectInfoMapper extends BaseMapper<ControlProjectInfo> {
+    List<ControlProjectInfoVO> selectByPage(IPage page, @Param("dto") ControlProjectInfoDTO dto);
+
+    ControlProjectInfoVO getProjectInfoById(@Param("id") Long id);
+
+    List<DictBiz> getProjectTypeDict();
+
+    List<DictBiz> getContractTypeDict();
+}

+ 39 - 0
blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectInfoMapper.xml

@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.springblade.control.mapper.ProjectInfoMapper">
+
+
+    <select id="selectByPage" resultType="org.springblade.control.vo.ControlProjectInfoVO">
+        select pi.*,d1.dict_value as projectTypeValue,d2.dict_value as contractTypeValue
+        from c_control_project_info pi
+            LEFT JOIN ( SELECT * FROM blade_dict_biz WHERE CODE = 'project_type' ) d1 ON pi.project_type = d1.dict_key
+            LEFT JOIN ( SELECT * FROM blade_dict_biz WHERE CODE = 'contract_type' ) d2 ON pi.contract_type = d2.dict_key
+        where pi.is_deleted = 0
+        <if test="dto.projectType != null and dto.projectType != ''">
+            and pi.project_type = #{dto.projectType}
+        </if>
+        <if test="dto.contractType != null and dto.contractType != ''">
+            and pi.contract_type = #{dto.contractType}
+        </if>
+        <if test="dto.process != null and dto.process != ''">
+            and pi.process = #{dto.process}
+        </if>
+        <if test="dto.queryValue != null and dto.queryValue != ''">
+            and pi.name like concat('%', #{dto.queryValue}, '%')
+        </if>
+
+
+    </select>
+    <select id="getProjectInfoById" resultType="org.springblade.control.vo.ControlProjectInfoVO">
+        select pi.*
+        from c_control_project_info pi
+        where pi.is_deleted = 0 and pi.id = #{id}
+    </select>
+    <select id="getProjectTypeDict" resultType="org.springblade.system.entity.DictBiz">
+        SELECT * FROM blade_dict_biz WHERE CODE = 'project_type' and parent_id > 0
+    </select>
+    <select id="getContractTypeDict" resultType="org.springblade.system.entity.DictBiz">
+        SELECT * FROM blade_dict_biz WHERE CODE = 'contract_type' and parent_id > 0
+    </select>
+
+</mapper>

+ 19 - 0
blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectProcessMapper.java

@@ -0,0 +1,19 @@
+package org.springblade.control.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+import org.springblade.control.entity.ProjectProcess;
+import org.springblade.control.vo.ProjectProcessVO;
+
+import java.util.List;
+
+/**
+ * @Param
+ * @Author wangwl
+ * @Date 2023/5/12 13:38
+ **/
+public interface ProjectProcessMapper extends BaseMapper<ProjectProcess> {
+    List<ProjectProcessVO> getBaseProcess();
+
+    List<ProjectProcessVO> getProjectProcess(@Param("id") Long id);
+}

+ 16 - 0
blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectProcessMapper.xml

@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.springblade.control.mapper.ProjectProcessMapper">
+
+
+    <select id="getBaseProcess" resultType="org.springblade.control.vo.ProjectProcessVO">
+        SELECT bdb.dict_value as name,bdb.sort as sort
+        FROM blade_dict_biz bdb
+        WHERE bdb.code = 'project_process' AND  bdb.parent_id > 0
+        ORDER BY bdb.sort
+    </select>
+    <select id="getProjectProcess" resultType="org.springblade.control.vo.ProjectProcessVO">
+        SELECT * FROM c_control_project_process ccpp
+        WHERE ccpp.project_id = #{id}
+    </select>
+</mapper>

+ 12 - 0
blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectReimbursementMapper.java

@@ -0,0 +1,12 @@
+package org.springblade.control.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.springblade.control.entity.ProjectReimbursement;
+
+/**
+ * @Param
+ * @Author wangwl
+ * @Date 2023/5/15 13:56
+ **/
+public interface ProjectReimbursementMapper extends BaseMapper<ProjectReimbursement> {
+}

+ 6 - 0
blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectReimbursementMapper.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.springblade.control.mapper.ProjectReimbursementMapper">
+
+
+</mapper>

+ 32 - 0
blade-service/blade-control/src/main/java/org/springblade/control/service/IProjectInfoService.java

@@ -0,0 +1,32 @@
+package org.springblade.control.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springblade.control.dto.ControlProjectInfoDTO;
+import org.springblade.control.entity.ControlProjectInfo;
+import org.springblade.control.vo.ControlProjectInfoVO;
+import org.springblade.core.mp.base.BaseService;
+import org.springblade.core.mp.support.Query;
+import org.springblade.system.entity.DictBiz;
+
+import java.util.List;
+
+/**
+ * @Param
+ * @Author wangwl
+ * @Date 2023/5/12 9:41
+ **/
+public interface IProjectInfoService extends BaseService<ControlProjectInfo> {
+    IPage<ControlProjectInfoVO> page(ControlProjectInfoDTO dto, Query query);
+
+    void addProjectInfo(ControlProjectInfoDTO dto);
+
+    void updateProjectInfo(ControlProjectInfoDTO dto);
+
+    void removeProjectInfo(Long id);
+
+    ControlProjectInfoVO getProjectInfoById(Long id);
+
+    List<DictBiz> getProjectTypeDict();
+
+    List<DictBiz> getContractTypeDict();
+}

+ 21 - 0
blade-service/blade-control/src/main/java/org/springblade/control/service/IProjectProcessService.java

@@ -0,0 +1,21 @@
+package org.springblade.control.service;
+
+import org.springblade.control.dto.ControlProjectInfoDTO;
+import org.springblade.control.entity.ProjectProcess;
+import org.springblade.control.vo.ProjectProcessVO;
+import org.springblade.core.mp.base.BaseService;
+
+import java.util.List;
+
+/**
+ * @Param
+ * @Author wangwl
+ * @Date 2023/5/12 13:41
+ **/
+public interface IProjectProcessService extends BaseService<ProjectProcess> {
+    void addProjectProcess(ControlProjectInfoDTO dto);
+    void updateProjectProcess(List<ProjectProcess> processList);
+    void removeProjectProcess(Long projectId);
+    List<ProjectProcessVO> getBaseProcess();
+    List<ProjectProcessVO> getProjectProcess(Long id);
+}

+ 20 - 0
blade-service/blade-control/src/main/java/org/springblade/control/service/IProjectReimbursementService.java

@@ -0,0 +1,20 @@
+package org.springblade.control.service;
+
+import org.springblade.control.entity.ProjectReimbursement;
+import org.springblade.control.vo.ProjectReimbursementVO;
+import org.springblade.core.mp.base.BaseService;
+
+/**
+ * @Param
+ * @Author wangwl
+ * @Date 2023/5/15 13:58
+ **/
+public interface IProjectReimbursementService extends BaseService<ProjectReimbursement> {
+    void addReimbursement(ProjectReimbursement projectReimbursement);
+
+    void updateReimbursement(ProjectReimbursement projectReimbursement);
+
+    void removeReimbursement(Long id);
+
+    ProjectReimbursementVO getReimbursementById(Long id);
+}

+ 107 - 0
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/ProjectInfoServiceImpl.java

@@ -0,0 +1,107 @@
+package org.springblade.control.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.AllArgsConstructor;
+import org.springblade.common.utils.SnowFlakeUtil;
+import org.springblade.control.dto.ControlProjectInfoDTO;
+import org.springblade.control.entity.ControlProjectInfo;
+import org.springblade.control.mapper.ProjectInfoMapper;
+import org.springblade.control.service.IProjectInfoService;
+import org.springblade.control.service.IProjectProcessService;
+import org.springblade.control.vo.ControlProjectInfoVO;
+import org.springblade.core.mp.base.BaseServiceImpl;
+import org.springblade.core.mp.support.Query;
+import org.springblade.system.entity.DictBiz;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+/**
+ * @Param
+ * @Author wangwl
+ * @Date 2023/5/12 9:43
+ **/
+@Service
+@AllArgsConstructor
+public class ProjectInfoServiceImpl extends BaseServiceImpl<ProjectInfoMapper, ControlProjectInfo> implements IProjectInfoService {
+    private final ProjectInfoMapper infoMapper;
+    private final IProjectProcessService processService;
+
+    /**
+     * 自定义分页
+     * @param dto
+     * @param query
+     * @return
+     */
+    @Override
+    public IPage<ControlProjectInfoVO> page(ControlProjectInfoDTO dto, Query query) {
+        IPage page = new Page(query.getCurrent(),query.getSize());
+        List<ControlProjectInfoVO> projectInfoVos = infoMapper.selectByPage(page, dto);
+        return page.setRecords(projectInfoVos);
+    }
+
+    /**
+     * 新增项目
+     * @param dto
+     */
+    @Override
+    @Transactional
+    public void addProjectInfo(ControlProjectInfoDTO dto) {
+        Long id = SnowFlakeUtil.getId();
+        dto.setId(id);
+        ControlProjectInfo info = new ControlProjectInfo();
+        BeanUtils.copyProperties(dto,info);
+        infoMapper.insert(info);
+        processService.addProjectProcess(dto);
+    }
+
+    /**
+     * 修改项目
+     * @param dto
+     */
+    @Override
+    @Transactional
+    public void updateProjectInfo(ControlProjectInfoDTO dto) {
+        ControlProjectInfo info = new ControlProjectInfo();
+        BeanUtils.copyProperties(dto,info);
+        infoMapper.updateById(info);
+        processService.updateProjectProcess(dto.getProjectProcessList());
+
+    }
+
+    /**
+     * 删除项目
+     * @param id
+     */
+    @Override
+    @Transactional
+    public void removeProjectInfo(Long id) {
+        baseMapper.deleteById(id);
+        processService.removeProjectProcess(id);
+    }
+
+    /**
+     * 根据id获取项目和流程信息
+     * @param id
+     * @return
+     */
+    @Override
+    public ControlProjectInfoVO getProjectInfoById(Long id) {
+        ControlProjectInfoVO vo = infoMapper.getProjectInfoById(id);
+        vo.setProjectProcessList(processService.getProjectProcess(id));
+        return vo;
+    }
+
+    @Override
+    public List<DictBiz> getProjectTypeDict() {
+        return infoMapper.getProjectTypeDict();
+    }
+
+    @Override
+    public List<DictBiz> getContractTypeDict() {
+        return infoMapper.getContractTypeDict();
+    }
+}

+ 93 - 0
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/ProjectProcessServiceImpl.java

@@ -0,0 +1,93 @@
+package org.springblade.control.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import lombok.AllArgsConstructor;
+import org.springblade.common.utils.SnowFlakeUtil;
+import org.springblade.control.dto.ControlProjectInfoDTO;
+import org.springblade.control.entity.ProjectProcess;
+import org.springblade.control.mapper.ProjectProcessMapper;
+import org.springblade.control.service.IProjectProcessService;
+import org.springblade.control.vo.ProjectProcessVO;
+import org.springblade.core.mp.base.BaseServiceImpl;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * @Param
+ * @Author wangwl
+ * @Date 2023/5/12 13:41
+ **/
+@Service
+@AllArgsConstructor
+public class ProjectProcessServiceImpl extends BaseServiceImpl<ProjectProcessMapper, ProjectProcess> implements IProjectProcessService {
+    private final ProjectProcessMapper processMapper;
+    /**
+     * 新增项目时保存进程
+     * @param dto
+     */
+    @Override
+    public void addProjectProcess(ControlProjectInfoDTO dto) {
+        List<ProjectProcess> list = dto.getProjectProcessList();
+        for (ProjectProcess process : list) {
+            process.setProjectId(dto.getId());
+            process.setId(SnowFlakeUtil.getId());
+        }
+        this.saveBatch(list);
+    }
+
+    /**
+     * 修改项目时保存进程
+     * @param list
+     */
+    @Override
+    public void updateProjectProcess(List<ProjectProcess> list) {
+        if (list != null && list.size() > 0) {
+            this.updateBatchById(list);
+        }
+    }
+
+    /**
+     * 删除项目下的进程
+     * @param projectId
+     */
+    @Override
+    public void removeProjectProcess(Long projectId) {
+        this.remove(new LambdaQueryWrapper<ProjectProcess>().eq(ProjectProcess::getProjectId,projectId));
+    }
+
+    /**
+     * 创建项目时获取项目基础流程
+     * @return
+     */
+    @Override
+    public List<ProjectProcessVO> getBaseProcess() {
+        List<ProjectProcessVO> list = processMapper.getBaseProcess();
+        list.stream().forEach(l->l.setStatusValue("未开始"));
+        return list;
+    }
+
+    /**
+     * 根基项目id获取项目的进程
+     * @return
+     */
+    @Override
+    public List<ProjectProcessVO> getProjectProcess(Long id) {
+        List<ProjectProcessVO> list = processMapper.getProjectProcess(id);
+        list.stream().forEach(l->{
+            //是否开始时间,在当前时间之前
+            if (l.getProcessStartTime().isBefore(LocalDate.now())){
+                if (l.getProcessEndTime().isBefore(LocalDate.now())){
+                    l.setStatusValue("已闭环");
+                }else {
+                    l.setStatusValue("进行中");
+                }
+            }else {
+                l.setStatusValue("未开始");
+            }
+        });
+        return list;
+    }
+}

+ 52 - 0
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/ProjectReimbursementServiceImpl.java

@@ -0,0 +1,52 @@
+package org.springblade.control.service.impl;
+
+import lombok.AllArgsConstructor;
+import org.springblade.control.entity.ProjectReimbursement;
+import org.springblade.control.mapper.ProjectReimbursementMapper;
+import org.springblade.control.service.IProjectReimbursementService;
+import org.springblade.control.vo.ProjectReimbursementVO;
+import org.springblade.core.mp.base.BaseServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * @Param
+ * @Author wangwl
+ * @Date 2023/5/15 13:59
+ **/
+@Service
+@AllArgsConstructor
+public class ProjectReimbursementServiceImpl extends BaseServiceImpl<ProjectReimbursementMapper, ProjectReimbursement> implements IProjectReimbursementService {
+    private final ProjectReimbursementMapper reimbursementMapper;
+
+    /**
+     * 新增报销
+     * @param projectReimbursement
+     */
+    @Override
+    public void addReimbursement(ProjectReimbursement projectReimbursement) {
+
+    }
+
+    /**
+     * 修改报销
+     * @param projectReimbursement
+     */
+    @Override
+    public void updateReimbursement(ProjectReimbursement projectReimbursement) {
+        reimbursementMapper.updateById(projectReimbursement);
+    }
+
+    /**
+     * 删除报销
+     * @param id
+     */
+    @Override
+    public void removeReimbursement(Long id) {
+        reimbursementMapper.deleteById(id);
+    }
+
+    @Override
+    public ProjectReimbursementVO getReimbursementById(Long id) {
+        return null;
+    }
+}

+ 4 - 4
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/TaskInfoServiceImpl.java

@@ -43,12 +43,12 @@ public class TaskInfoServiceImpl extends BaseServiceImpl<TaskInfoMapper, TaskInf
     public List<TaskInfo> taskList(String id) {
         if (StringUtils.isNotEmpty(id)) {
             List<Long> taskIds = jdbcTemplate.queryForList("select task_id from c_control_plan_task_record where plan_id = " + id, Long.class);
-            List<TaskInfo> taskInfos = baseMapper.selectBatchIds(taskIds);
+            //List<TaskInfo> taskInfos = baseMapper.selectBatchIds(taskIds);
 
             //TODO 项目名称、进度等,返回VO
-            for (TaskInfo taskInfo : taskInfos) {
-
-            }
+//            for (TaskInfo taskInfo : taskInfos) {
+//
+//            }
             return null;
         }
         return null;

+ 12 - 0
blade-service/blade-control/src/main/java/org/springblade/control/utils/BHUtils.java

@@ -0,0 +1,12 @@
+package org.springblade.control.utils;
+
+/**
+ * @Param
+ * @Author wangwl
+ * @Date 2023/5/15 15:59
+ **/
+public class BHUtils {
+    public static String getNextBH(String BH){
+        return null;
+    }
+}