diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/controller/MhProjectController.java b/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/controller/MhProjectController.java
index 7f95f17..7f565d9 100644
--- a/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/controller/MhProjectController.java
+++ b/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/controller/MhProjectController.java
@@ -1,18 +1,38 @@
package com.hz.pm.api.projectlib.controller;
+import com.hz.pm.api.projectlib.manage.MhProjectManage;
+import com.hz.pm.api.projectlib.model.req.DeclaredProjectListReq;
+import com.hz.pm.api.projectlib.model.vo.DeclaredProjectListVO;
+import com.ningdatech.basic.model.PageVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RestController;
/**
*
- * 前端控制器
+ * 前端控制器
*
*
* @author WendyYang
* @since 2024-01-30
*/
-@Controller
-@RequestMapping("/api.projectlib/mhProject")
+@Api(tags = "信产项目(立项备案)列表")
+@RestController
+@RequiredArgsConstructor
+@RequestMapping("/api/v1/mh/project")
public class MhProjectController {
+ private final MhProjectManage mhProjectManage;
+
+ @ApiOperation("立项备案列表")
+ @GetMapping("/pageDeclaredProject")
+ public PageVo pageDeclaredProject(DeclaredProjectListReq req) {
+ return mhProjectManage.pageDeclaredProject(req);
+ }
+
+
}
diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/manage/MhProjectManage.java b/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/manage/MhProjectManage.java
new file mode 100644
index 0000000..e31d27a
--- /dev/null
+++ b/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/manage/MhProjectManage.java
@@ -0,0 +1,96 @@
+package com.hz.pm.api.projectlib.manage;
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.hz.pm.api.projectlib.model.entity.MhProject;
+import com.hz.pm.api.projectlib.model.entity.Project;
+import com.hz.pm.api.projectlib.model.req.DeclaredProjectListReq;
+import com.hz.pm.api.projectlib.model.vo.DeclaredProjectListVO;
+import com.hz.pm.api.projectlib.service.IMhProjectService;
+import com.hz.pm.api.projectlib.service.IProjectService;
+import com.hz.pm.api.user.security.model.UserInfoDetails;
+import com.hz.pm.api.user.util.LoginUserUtil;
+import com.ningdatech.basic.model.PageVo;
+import com.ningdatech.basic.util.CollUtils;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Component;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ *
+ * MhProjectManage
+ *
+ *
+ * @author WendyYang
+ * @since 19:06 2024/1/30
+ */
+@Component
+@RequiredArgsConstructor
+public class MhProjectManage {
+
+ private final IMhProjectService mhProjectService;
+ private final IProjectService projectService;
+
+ private LambdaQueryWrapper buildQuery(DeclaredProjectListReq req) {
+ LambdaQueryWrapper query = Wrappers.lambdaQuery(MhProject.class)
+ .like(StrUtil.isNotBlank(req.getProjectName()), MhProject::getProjectName, req.getProjectName())
+ .like(StrUtil.isNotBlank(req.getDeclaredUnit()), MhProject::getUnitName, req.getDeclaredUnit());
+ if (req.getBudgetYear() != null) {
+ LocalDateTime startTime = LocalDate.of(req.getBudgetYear(), 1, 1).atStartOfDay();
+ LocalDateTime endTime = startTime.plusYears(1);
+ query.ge(MhProject::getCreateTime, startTime);
+ query.lt(MhProject::getCreateTime, endTime);
+ }
+ UserInfoDetails user = LoginUserUtil.loginUserDetail();
+ if (!user.getSuperAdmin() && !user.getRegionAdmin()) {
+ query.eq(MhProject::getUnitId, user.getMhUnitId());
+ }
+ return query;
+ }
+
+ public PageVo pageDeclaredProject(DeclaredProjectListReq req) {
+ LambdaQueryWrapper query = buildQuery(req);
+ Page page = mhProjectService.page(req.page(), query);
+ if (page.getTotal() == 0) {
+ return PageVo.empty();
+ }
+ List records = page.getRecords();
+ List projectCodes = CollUtils.fieldList(records, MhProject::getProjectCode);
+ Map projectMap;
+ if (!projectCodes.isEmpty()) {
+ List projects = projectService.listNewestByProjectCodes(projectCodes);
+ projectMap = CollUtils.listToMap(projects, Project::getProjectCode);
+ } else {
+ projectMap = Collections.emptyMap();
+ }
+ List data = records.stream().map(w -> {
+ DeclaredProjectListVO item = new DeclaredProjectListVO();
+ item.setMhProjectId(w.getId());
+ Project project = projectMap.get(w.getProjectCode());
+ if (project == null) {
+ item.setStatus(null);
+ item.setStage(null);
+ } else {
+ item.setStatus(project.getStatus());
+ item.setStage(project.getStage());
+ item.setBizDomain(project.getBizDomain());
+ }
+ item.setProjectCode(w.getProjectCode());
+ item.setProjectName(w.getProjectName());
+ item.setDeclaredAmount(w.getTotalMoney());
+ item.setCreateTime(w.getCreateTime());
+ return item;
+ }).collect(Collectors.toList());
+ return PageVo.of(data, page.getTotal());
+ }
+
+
+}
diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/model/entity/MhProject.java b/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/model/entity/MhProject.java
index bdd955e..790672d 100644
--- a/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/model/entity/MhProject.java
+++ b/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/model/entity/MhProject.java
@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.math.BigDecimal;
+import java.time.LocalDateTime;
import com.hz.pm.api.external.model.dto.MhProjectSchemeTargetDTO;
import io.swagger.annotations.ApiModel;
@@ -53,4 +54,9 @@ public class MhProject implements Serializable {
@ApiModelProperty("单位名称")
private String unitName;
+ @ApiModelProperty("项目编码")
+ private String projectCode;
+
+ private LocalDateTime createTime;
+
}
diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/model/req/DeclaredProjectListReq.java b/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/model/req/DeclaredProjectListReq.java
new file mode 100644
index 0000000..ab5d047
--- /dev/null
+++ b/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/model/req/DeclaredProjectListReq.java
@@ -0,0 +1,32 @@
+package com.hz.pm.api.projectlib.model.req;
+
+import com.ningdatech.basic.model.PagePo;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ *
+ * DeclaredProjectListReq
+ *
+ *
+ * @author WendyYang
+ * @since 19:13 2024/1/30
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class DeclaredProjectListReq extends PagePo {
+
+ @ApiModelProperty("项目名称")
+ private String projectName;
+
+ @ApiModelProperty("申报单位")
+ private String declaredUnit;
+
+ @ApiModelProperty("项目类型")
+ private String projectType;
+
+ @ApiModelProperty("预算年度")
+ private Integer budgetYear;
+
+}
diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/model/vo/DeclaredProjectListVO.java b/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/model/vo/DeclaredProjectListVO.java
new file mode 100644
index 0000000..cece008
--- /dev/null
+++ b/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/model/vo/DeclaredProjectListVO.java
@@ -0,0 +1,47 @@
+package com.hz.pm.api.projectlib.model.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ *
+ * DeclaredProjectList
+ *
+ *
+ * @author WendyYang
+ * @since 19:07 2024/1/30
+ */
+@Data
+public class DeclaredProjectListVO {
+
+ @ApiModelProperty("项目名称")
+ private String projectName;
+
+ @ApiModelProperty("申报单位")
+ private String declaredUnit;
+
+ @ApiModelProperty("领域")
+ private Integer bizDomain;
+
+ @ApiModelProperty("项目申报金额(万元)")
+ private BigDecimal declaredAmount;
+
+ @ApiModelProperty("项目阶段")
+ private Integer stage;
+
+ @ApiModelProperty("项目状态")
+ private Integer status;
+
+ @ApiModelProperty("创建时间")
+ private LocalDateTime createTime;
+
+ @ApiModelProperty("项目名称")
+ private String projectCode;
+
+ @ApiModelProperty("ID")
+ private Long mhProjectId;
+
+}
diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/service/IProjectService.java b/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/service/IProjectService.java
index cd4758d..560fa06 100644
--- a/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/service/IProjectService.java
+++ b/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/service/IProjectService.java
@@ -1,5 +1,7 @@
package com.hz.pm.api.projectlib.service;
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -8,6 +10,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
import com.hz.pm.api.projectlib.model.po.ProjectPO;
import com.hz.pm.api.projectlib.model.req.ProjectListReq;
+import java.util.Collection;
import java.util.List;
/**
@@ -43,4 +46,11 @@ public interface IProjectService extends IService {
update(wrapper);
}
+ default List listNewestByProjectCodes(Collection projectCode){
+ Wrapper query = Wrappers.lambdaQuery(Project.class)
+ .eq(Project::getNewest, Boolean.TRUE)
+ .in(Project::getProjectCode, projectCode);
+ return list(query);
+ }
+
}