From ba84c5cf33c131013257d849257962e74403a499 Mon Sep 17 00:00:00 2001 From: WendyYang Date: Tue, 30 Jan 2024 20:15:04 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E7=AB=8B=E9=A1=B9=E5=A4=87?= =?UTF-8?q?=E6=A1=88=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../projectlib/controller/MhProjectController.java | 26 +++++- .../pm/api/projectlib/manage/MhProjectManage.java | 96 ++++++++++++++++++++++ .../pm/api/projectlib/model/entity/MhProject.java | 6 ++ .../model/req/DeclaredProjectListReq.java | 32 ++++++++ .../projectlib/model/vo/DeclaredProjectListVO.java | 47 +++++++++++ .../pm/api/projectlib/service/IProjectService.java | 10 +++ 6 files changed, 214 insertions(+), 3 deletions(-) create mode 100644 hz-pm-api/src/main/java/com/hz/pm/api/projectlib/manage/MhProjectManage.java create mode 100644 hz-pm-api/src/main/java/com/hz/pm/api/projectlib/model/req/DeclaredProjectListReq.java create mode 100644 hz-pm-api/src/main/java/com/hz/pm/api/projectlib/model/vo/DeclaredProjectListVO.java 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); + } + }