@@ -1,18 +1,38 @@ | |||||
package com.hz.pm.api.projectlib.controller; | 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.web.bind.annotation.RequestMapping; | ||||
import org.springframework.stereotype.Controller; | import org.springframework.stereotype.Controller; | ||||
import org.springframework.web.bind.annotation.RestController; | |||||
/** | /** | ||||
* <p> | * <p> | ||||
* 前端控制器 | |||||
* 前端控制器 | |||||
* </p> | * </p> | ||||
* | * | ||||
* @author WendyYang | * @author WendyYang | ||||
* @since 2024-01-30 | * @since 2024-01-30 | ||||
*/ | */ | ||||
@Controller | |||||
@RequestMapping("/api.projectlib/mhProject") | |||||
@Api(tags = "信产项目(立项备案)列表") | |||||
@RestController | |||||
@RequiredArgsConstructor | |||||
@RequestMapping("/api/v1/mh/project") | |||||
public class MhProjectController { | 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 com.baomidou.mybatisplus.annotation.TableName; | ||||
import java.io.Serializable; | import java.io.Serializable; | ||||
import java.math.BigDecimal; | import java.math.BigDecimal; | ||||
import java.time.LocalDateTime; | |||||
import com.hz.pm.api.external.model.dto.MhProjectSchemeTargetDTO; | import com.hz.pm.api.external.model.dto.MhProjectSchemeTargetDTO; | ||||
import io.swagger.annotations.ApiModel; | import io.swagger.annotations.ApiModel; | ||||
@@ -53,4 +54,9 @@ public class MhProject implements Serializable { | |||||
@ApiModelProperty("单位名称") | @ApiModelProperty("单位名称") | ||||
private String unitName; | 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; | 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.conditions.update.LambdaUpdateWrapper; | ||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers; | import com.baomidou.mybatisplus.core.toolkit.Wrappers; | ||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; | 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.po.ProjectPO; | ||||
import com.hz.pm.api.projectlib.model.req.ProjectListReq; | import com.hz.pm.api.projectlib.model.req.ProjectListReq; | ||||
import java.util.Collection; | |||||
import java.util.List; | import java.util.List; | ||||
/** | /** | ||||
@@ -43,4 +46,11 @@ public interface IProjectService extends IService<Project> { | |||||
update(wrapper); | 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); | |||||
} | |||||
} | } |