@@ -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; | |||
/** | |||
* <p> | |||
* 前端控制器 | |||
* 前端控制器 | |||
* </p> | |||
* | |||
* @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<DeclaredProjectListVO> pageDeclaredProject(DeclaredProjectListReq req) { | |||
return mhProjectManage.pageDeclaredProject(req); | |||
} | |||
} |
@@ -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; | |||
/** | |||
* <p> | |||
* MhProjectManage | |||
* </p> | |||
* | |||
* @author WendyYang | |||
* @since 19:06 2024/1/30 | |||
*/ | |||
@Component | |||
@RequiredArgsConstructor | |||
public class MhProjectManage { | |||
private final IMhProjectService mhProjectService; | |||
private final IProjectService projectService; | |||
private LambdaQueryWrapper<MhProject> buildQuery(DeclaredProjectListReq req) { | |||
LambdaQueryWrapper<MhProject> 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<DeclaredProjectListVO> pageDeclaredProject(DeclaredProjectListReq req) { | |||
LambdaQueryWrapper<MhProject> query = buildQuery(req); | |||
Page<MhProject> page = mhProjectService.page(req.page(), query); | |||
if (page.getTotal() == 0) { | |||
return PageVo.empty(); | |||
} | |||
List<MhProject> records = page.getRecords(); | |||
List<String> projectCodes = CollUtils.fieldList(records, MhProject::getProjectCode); | |||
Map<String, Project> projectMap; | |||
if (!projectCodes.isEmpty()) { | |||
List<Project> projects = projectService.listNewestByProjectCodes(projectCodes); | |||
projectMap = CollUtils.listToMap(projects, Project::getProjectCode); | |||
} else { | |||
projectMap = Collections.emptyMap(); | |||
} | |||
List<DeclaredProjectListVO> 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()); | |||
} | |||
} |
@@ -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; | |||
} |
@@ -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; | |||
/** | |||
* <p> | |||
* DeclaredProjectListReq | |||
* </p> | |||
* | |||
* @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; | |||
} |
@@ -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; | |||
/** | |||
* <p> | |||
* DeclaredProjectList | |||
* </p> | |||
* | |||
* @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; | |||
} |
@@ -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<Project> { | |||
update(wrapper); | |||
} | |||
default List<Project> listNewestByProjectCodes(Collection<String> projectCode){ | |||
Wrapper<Project> query = Wrappers.lambdaQuery(Project.class) | |||
.eq(Project::getNewest, Boolean.TRUE) | |||
.in(Project::getProjectCode, projectCode); | |||
return list(query); | |||
} | |||
} |