diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/performance/controller/OrgSelfAppraisalController.java b/pmapi/src/main/java/com/ningdatech/pmapi/performance/controller/OrgSelfAppraisalController.java new file mode 100644 index 0000000..7b9b218 --- /dev/null +++ b/pmapi/src/main/java/com/ningdatech/pmapi/performance/controller/OrgSelfAppraisalController.java @@ -0,0 +1,37 @@ +package com.ningdatech.pmapi.performance.controller; + +import com.ningdatech.basic.model.PageVo; +import com.ningdatech.pmapi.performance.manage.OrgSelfAppraisalManage; +import com.ningdatech.pmapi.performance.model.req.PerformanceAppraisalListReq; +import com.ningdatech.pmapi.performance.model.vo.PerformanceAppraisalVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +/** + * @Classname OrgSelfAppraisalController + * @Description + * @Date 2023/6/25 14:16 + * @Author PoffyZhang + */ +@RestController +@RequiredArgsConstructor +@Api(tags = "绩效评价-单位自评") +@RequestMapping("/api/v1/self-appraisal") +public class OrgSelfAppraisalController { + + private final OrgSelfAppraisalManage selfAppraisalManage; + + @GetMapping("/list") + @ApiOperation("当前用户的绩效评价计划列表") + public PageVo list(PerformanceAppraisalListReq req) { + return selfAppraisalManage.list(req); + } + + @GetMapping("/detail/{id}") + @ApiOperation("当前用户的绩效评价计划详情") + public PerformanceAppraisalVO detail(@PathVariable Long id) { + return selfAppraisalManage.detail(id); + } +} diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/performance/controller/PerformanceAppraisalPlanController.java b/pmapi/src/main/java/com/ningdatech/pmapi/performance/controller/PerformanceAppraisalPlanController.java index 032e52d..c501e1c 100644 --- a/pmapi/src/main/java/com/ningdatech/pmapi/performance/controller/PerformanceAppraisalPlanController.java +++ b/pmapi/src/main/java/com/ningdatech/pmapi/performance/controller/PerformanceAppraisalPlanController.java @@ -57,6 +57,13 @@ public class PerformanceAppraisalPlanController { return performanceAppraisalPlanManage.edit(editDTO); } + @PostMapping("/delete/{id}") + @ApiOperation("绩效评价删除") + @WebLog("绩效评价删除") + public String delete(@PathVariable Long id) { + return performanceAppraisalPlanManage.delete(id); + } + @GetMapping("/group/list/{appraisalId}") @ApiOperation("绩效评价分组列表") public List groupList(@PathVariable Long appraisalId, @@ -64,10 +71,23 @@ public class PerformanceAppraisalPlanController { return performanceAppraisalPlanManage.groupList(appraisalId,name); } + @GetMapping("/group/detail/{id}") + @ApiOperation("绩效评价分组详情") + public PerformanceAppraisalProjectGroupVO groupDetail(@PathVariable Long id) { + return performanceAppraisalPlanManage.groupDetail(id); + } + @PostMapping("/group/save") @ApiOperation("绩效评价分组保存") @WebLog("绩效评价分组保存") public String groupSave(@Valid @RequestBody PerformanceAppraisalProjectGroupSaveDTO dto) { return performanceAppraisalPlanManage.groupSave(dto); } + + @PostMapping("/group/delete/{id}") + @ApiOperation("绩效评价分组删除") + @WebLog("绩效评价分组删除") + public String groupDelete(@PathVariable Long id) { + return performanceAppraisalPlanManage.groupDelete(id); + } } diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/performance/convert/PerformanceAppraisalConveter.java b/pmapi/src/main/java/com/ningdatech/pmapi/performance/convert/PerformanceAppraisalConveter.java index 1b45196..e31be2e 100644 --- a/pmapi/src/main/java/com/ningdatech/pmapi/performance/convert/PerformanceAppraisalConveter.java +++ b/pmapi/src/main/java/com/ningdatech/pmapi/performance/convert/PerformanceAppraisalConveter.java @@ -35,6 +35,8 @@ public class PerformanceAppraisalConveter { vo.setProjectType(project.getProjectType()); vo.setProjectTypeName(getProjectTypeName(project.getProjectType())); vo.setBuildOrgName(project.getBuildOrgName()); + vo.setDeclareAmount(project.getDeclareAmount()); + vo.setProjectYear(project.getProjectYear()); } return vo; }).collect(Collectors.toList()); @@ -54,7 +56,6 @@ public class PerformanceAppraisalConveter { application.getApplicationName() : application.getAccountAppName()); vo.setApplicationType(application.getApplicationType()); vo.setBizDomain(application.getBizDomain()); -// vo.setBuildOrgName(application.get()); vo.setPublishSide(application.getPublishSide()); } return vo; diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/performance/manage/OrgSelfAppraisalManage.java b/pmapi/src/main/java/com/ningdatech/pmapi/performance/manage/OrgSelfAppraisalManage.java new file mode 100644 index 0000000..56697ce --- /dev/null +++ b/pmapi/src/main/java/com/ningdatech/pmapi/performance/manage/OrgSelfAppraisalManage.java @@ -0,0 +1,180 @@ +package com.ningdatech.pmapi.performance.manage; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.google.common.collect.Maps; +import com.ningdatech.basic.function.VUtils; +import com.ningdatech.basic.model.PageVo; +import com.ningdatech.pmapi.performance.convert.PerformanceAppraisalConveter; +import com.ningdatech.pmapi.performance.model.entity.PerformanceAppraisal; +import com.ningdatech.pmapi.performance.model.entity.PerformanceAppraisalApplication; +import com.ningdatech.pmapi.performance.model.entity.PerformanceAppraisalProject; +import com.ningdatech.pmapi.performance.model.req.PerformanceAppraisalListReq; +import com.ningdatech.pmapi.performance.model.vo.PerformanceAppraisalVO; +import com.ningdatech.pmapi.performance.service.IPerformanceAppraisalApplicationService; +import com.ningdatech.pmapi.performance.service.IPerformanceAppraisalProjectService; +import com.ningdatech.pmapi.performance.service.IPerformanceAppraisalService; +import com.ningdatech.pmapi.projectlib.model.entity.Project; +import com.ningdatech.pmapi.projectlib.model.entity.ProjectApplication; +import com.ningdatech.pmapi.projectlib.service.IProjectApplicationService; +import com.ningdatech.pmapi.projectlib.service.IProjectService; +import com.ningdatech.pmapi.user.security.auth.model.UserInfoDetails; +import com.ningdatech.pmapi.user.util.LoginUserUtil; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import java.util.*; +import java.util.stream.Collectors; + +/** + * @Classname OrgSelfAppraisalManage + * @Description + * @Date 2023/6/19 14:18 + * @Author PoffyZhang + */ +@Component +@Slf4j +@AllArgsConstructor +public class OrgSelfAppraisalManage { + + private final IPerformanceAppraisalService performanceAppraisalService; + + private final IPerformanceAppraisalProjectService performanceAppraisalProjectService; + + private final IPerformanceAppraisalApplicationService performanceAppraisalApplicationService; + + private final IProjectService projectService; + + private final IProjectApplicationService applicationService; + + /** + * 绩效列表 + * @param req + * @return + */ + public PageVo list(PerformanceAppraisalListReq req) { + UserInfoDetails user = LoginUserUtil.loginUserDetail(); + + //当前登录用户 单位code + String empPosUnitCode = user.getEmpPosUnitCode(); + projectService.list(Wrappers.lambdaQuery(Project.class) + .eq(Project::getBuildOrgCode,empPosUnitCode)); + + + Page page = req.page(); + LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(PerformanceAppraisal.class) + .like(StringUtils.isNotBlank(req.getName()),PerformanceAppraisal::getName,req.getName()) + .ge(Objects.nonNull(req.getStart()),PerformanceAppraisal::getCreateOn,req.getStart()) + .le(Objects.nonNull(req.getEnd()),PerformanceAppraisal::getCreateOn,req.getEnd()) + .orderByDesc(PerformanceAppraisal::getUpdateOn); + performanceAppraisalService.page(page,wrapper); + if(0L == page.getTotal()){ + return PageVo.empty(); + } + + List paIds = page.getRecords().stream().map(PerformanceAppraisal::getId).collect(Collectors.toList()); + List paps = performanceAppraisalProjectService.list(Wrappers.lambdaQuery(PerformanceAppraisalProject.class) + .in(PerformanceAppraisalProject::getAppraisalId, paIds)); + + Map projectMap = Maps.newHashMap(); + Map> papsGroupMap = Maps.newHashMap(); + if(CollUtil.isNotEmpty(paps)){ + papsGroupMap = paps.stream().collect(Collectors.groupingBy(PerformanceAppraisalProject::getAppraisalId)); + + List projectCodes = paps.stream().map(PerformanceAppraisalProject::getProjectCode).collect(Collectors.toList()); + List projects = projectService.list(Wrappers.lambdaQuery(Project.class) + .in(Project::getProjectCode, projectCodes) + .eq(Project::getNewest, Boolean.TRUE)); + if(CollUtil.isNotEmpty(projects)){ + projectMap = projects.stream().collect(Collectors.toMap(Project::getProjectCode,p -> p)); + } + } + + List paas = performanceAppraisalApplicationService.list(Wrappers.lambdaQuery(PerformanceAppraisalApplication.class) + .in(PerformanceAppraisalApplication::getAppraisalId, paIds)); + Map applicationMap = Maps.newHashMap(); + Map> paasGroupMap = Maps.newHashMap(); + if(CollUtil.isNotEmpty(paas)){ + paasGroupMap = paas.stream().collect(Collectors.groupingBy(PerformanceAppraisalApplication::getAppraisalId)); + + List applicationIds = paas.stream().map(PerformanceAppraisalApplication::getApplicationId).collect(Collectors.toList()); + List apps = applicationService.list(Wrappers.lambdaQuery(ProjectApplication.class) + .in(ProjectApplication::getId, applicationIds)); + if(CollUtil.isNotEmpty(apps)){ + applicationMap = apps.stream().collect(Collectors.toMap(ProjectApplication::getId,a -> a)); + } + } + + Map> finalPapsGroupMap = papsGroupMap; + Map> finalPaasGroupMap = paasGroupMap; + Map finalProjectMap = projectMap; + Map finalApplicationMap = applicationMap; + List res = page.getRecords().stream().map(p -> { + PerformanceAppraisalVO vo = BeanUtil.copyProperties(p,PerformanceAppraisalVO.class); + if(finalPapsGroupMap.containsKey(p.getId())){ + vo.setProjects(PerformanceAppraisalConveter.convertProjects(finalPapsGroupMap.get(p.getId()),finalProjectMap)); + } + if(finalPaasGroupMap.containsKey(p.getId())){ + vo.setApplications(PerformanceAppraisalConveter.convertApplications(finalPaasGroupMap.get(p.getId()),finalApplicationMap)); + } + return vo; + }).collect(Collectors.toList()); + return PageVo.of(res,page.getTotal()); + } + + public PerformanceAppraisalVO detail(Long id) { + + PerformanceAppraisal pa = performanceAppraisalService.getById(id); + VUtils.isTrue(Objects.isNull(pa)).throwMessage("该计划不存在"); + + PerformanceAppraisalVO vo = BeanUtil.copyProperties(pa,PerformanceAppraisalVO.class); + //绩效关联的项目 + List paps = performanceAppraisalProjectService.list(Wrappers.lambdaQuery(PerformanceAppraisalProject.class) + .eq(PerformanceAppraisalProject::getAppraisalId, id)); + Map projectMap = Maps.newHashMap(); + Map> papsGroupMap = Maps.newHashMap(); + if(CollUtil.isNotEmpty(paps)){ + papsGroupMap = paps.stream().collect(Collectors.groupingBy(PerformanceAppraisalProject::getAppraisalId)); + + List projectCodes = paps.stream().map(PerformanceAppraisalProject::getProjectCode).collect(Collectors.toList()); + List projects = projectService.list(Wrappers.lambdaQuery(Project.class) + .in(Project::getProjectCode, projectCodes) + .eq(Project::getNewest, Boolean.TRUE)); + if(CollUtil.isNotEmpty(projects)){ + projectMap = projects.stream().collect(Collectors.toMap(Project::getProjectCode,p -> p)); + } + } + + //绩效关联的应用 + List paas = performanceAppraisalApplicationService.list(Wrappers.lambdaQuery(PerformanceAppraisalApplication.class) + .eq(PerformanceAppraisalApplication::getAppraisalId, id)); + Map applicationMap = Maps.newHashMap(); + Map> paasGroupMap = Maps.newHashMap(); + if(CollUtil.isNotEmpty(paas)){ + paasGroupMap = paas.stream().collect(Collectors.groupingBy(PerformanceAppraisalApplication::getAppraisalId)); + + List applicationIds = paas.stream().map(PerformanceAppraisalApplication::getApplicationId).collect(Collectors.toList()); + List apps = applicationService.list(Wrappers.lambdaQuery(ProjectApplication.class) + .in(ProjectApplication::getId, applicationIds)); + if(CollUtil.isNotEmpty(apps)){ + applicationMap = apps.stream().collect(Collectors.toMap(ProjectApplication::getId,a -> a)); + } + } + + Map> finalPapsGroupMap = papsGroupMap; + Map> finalPaasGroupMap = paasGroupMap; + Map finalProjectMap = projectMap; + Map finalApplicationMap = applicationMap; + if(finalPapsGroupMap.containsKey(vo.getId())){ + vo.setProjects(PerformanceAppraisalConveter.convertProjects(finalPapsGroupMap.get(vo.getId()),finalProjectMap)); + } + if(finalPaasGroupMap.containsKey(vo.getId())){ + vo.setApplications(PerformanceAppraisalConveter.convertApplications(finalPaasGroupMap.get(vo.getId()),finalApplicationMap)); + } + return vo; + } +} diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/performance/manage/PerformanceAppraisalPlanManage.java b/pmapi/src/main/java/com/ningdatech/pmapi/performance/manage/PerformanceAppraisalPlanManage.java index 1f0601d..d6dd8f3 100644 --- a/pmapi/src/main/java/com/ningdatech/pmapi/performance/manage/PerformanceAppraisalPlanManage.java +++ b/pmapi/src/main/java/com/ningdatech/pmapi/performance/manage/PerformanceAppraisalPlanManage.java @@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.google.common.collect.Maps; import com.google.common.collect.Sets; +import com.ningdatech.basic.exception.BizException; import com.ningdatech.basic.function.VUtils; import com.ningdatech.basic.model.PageVo; import com.ningdatech.basic.util.StrPool; @@ -368,6 +369,27 @@ public class PerformanceAppraisalPlanManage { } } + /** + * 删除绩效评价计划 + * 连带删除 其下所有 + * @param id + * @return + */ + public String delete(Long id) { + PerformanceAppraisal pa = performanceAppraisalService.getById(id); + VUtils.isTrue(Objects.isNull(pa)).throwMessage("绩效评价不存在 删除失败!"); + + //如果到了自评就不能删除了 + if(pa.getSelfAppraisalStart().compareTo(LocalDateTime.now()) < 0){ + throw new BizException("自评已经开始 不能够删除绩效评价"); + } + + if(performanceAppraisalService.removeById(id)){ + return "删除成功"; + } + return "删除失败"; + } + public List groupList(Long appraisalId,String name) { List groups = groupService.list( Wrappers.lambdaQuery(PerformanceAppraisalProjectGroup.class) @@ -422,6 +444,52 @@ public class PerformanceAppraisalPlanManage { } /** + * 分组详情 + * @param id + * @return + */ + public PerformanceAppraisalProjectGroupVO groupDetail(Long id) { + PerformanceAppraisalProjectGroup group = groupService.getById(id); + + if(Objects.isNull(group)){ + return null; + } + + Map projectMap = Maps.newHashMap(); + List projects = projectService.list(Wrappers.lambdaQuery(Project.class) + .in(StringUtils.isNotBlank(group.getProjectIds()),Project::getProjectCode, + Arrays.stream(group.getProjectIds().split(StrPool.COMMA)).collect(Collectors.toList())) + .eq(Project::getNewest,Boolean.TRUE)); + if(CollUtil.isNotEmpty(projects)){ + projectMap = projects.stream().collect(Collectors.toMap(Project::getProjectCode,p -> p)); + } + + Map userMap = Maps.newHashMap(); + Set allEmployeeCodes = Sets.newHashSet(); + allEmployeeCodes.addAll(CodeUtil.convertStrToList(group.getReAppraisalUsers())); + allEmployeeCodes.addAll(CodeUtil.convertStrToList(group.getVerificationUsers())); + if(CollUtil.isNotEmpty(allEmployeeCodes)){ + List users = userInfoHelper.getUserFullInfoByEmployeeCodes(allEmployeeCodes); + if(CollUtil.isNotEmpty(users)){ + userMap = users.stream().collect(Collectors.toMap(UserFullInfoDTO::getEmployeeCode,u -> u)); + } + } + + PerformanceAppraisalProjectGroupVO vo = new PerformanceAppraisalProjectGroupVO(); + vo.setAppraisalId(group.getAppraisalId()); + vo.setName(group.getName()); + vo.setCreateOn(group.getCreateOn()); + vo.setCreateBy(group.getCreateBy()); + vo.setUpdateBy(group.getUpdateBy()); + vo.setUpdateOn(group.getUpdateOn()); + vo.setId(group.getId()); + vo.setProjects(checkProject(group.getProjectIds(), projectMap)); + vo.setReAppraisalUsers(checkUser(group.getReAppraisalUsers(), userMap)); + vo.setVerificationUsers(checkUser(group.getVerificationUsers(), userMap)); + return vo; + } + + /** * 分组 保存 * @param dto * @return @@ -455,6 +523,32 @@ public class PerformanceAppraisalPlanManage { return "操作成功"; } + /** + * 删除分组 + * @param id + * @return + */ + public String groupDelete(Long id) { + PerformanceAppraisalProjectGroup group = groupService.getById(id); + VUtils.isTrue(Objects.isNull(group)).throwMessage("分组不存在"); + + //评价Id + Long appraisalId = group.getAppraisalId(); + + PerformanceAppraisal pa = performanceAppraisalService.getById(appraisalId); + VUtils.isTrue(Objects.isNull(pa)).throwMessage("评价不存在"); + + //如果到了自评就不能删除了 + if(pa.getSelfAppraisalStart().compareTo(LocalDateTime.now()) < 0){ + throw new BizException("自评已经开始 不能够删除绩效评价"); + } + + if(groupService.removeById(id)){ + return "删除成功"; + } + return "删除失败"; + } + private List checkProject(String projectIds, Map projectMap) { if(StringUtils.isBlank(projectIds)){ return Collections.emptyList(); diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/controller/ProjectCollectionController.java b/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/controller/ProjectCollectionController.java new file mode 100644 index 0000000..5a6a913 --- /dev/null +++ b/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/controller/ProjectCollectionController.java @@ -0,0 +1,55 @@ +package com.ningdatech.pmapi.projectlib.controller; + +import com.ningdatech.basic.model.PageVo; +import com.ningdatech.log.annotation.WebLog; +import com.ningdatech.pmapi.projectlib.manage.ProjectCollectionManage; +import com.ningdatech.pmapi.projectlib.model.dto.ProjectCollectionSaveDTO; +import com.ningdatech.pmapi.projectlib.model.req.ProjectListReq; +import com.ningdatech.pmapi.projectlib.model.vo.ProjectCollectionVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; + +/** + * @Classname ProjectCollectionController + * @Description + * @Date 2023/6/25 9:11 + * @Author PoffyZhang + */ +@RestController +@RequiredArgsConstructor +@Api(tags = "项目归集控制器") +@RequestMapping("/api/v1/project-collection") +public class ProjectCollectionController { + + private final ProjectCollectionManage collectionManage; + + @GetMapping("/list") + @ApiOperation("项目归集列表") + public PageVo list(ProjectListReq req) { + return collectionManage.list(req); + } + + @GetMapping("/detail/{id}") + @ApiOperation("项目归集详情") + public ProjectCollectionVO detail(@PathVariable Long id) { + return collectionManage.detail(id); + } + + @PostMapping("/save") + @ApiOperation("项目归集保存") + @WebLog("项目归集保存") + public String save(@Valid @RequestBody ProjectCollectionSaveDTO dto) { + return collectionManage.save(dto); + } + + @PostMapping("/delete/{id}") + @ApiOperation("项目归集删除") + @WebLog("项目归集删除") + public String delete(@PathVariable Long id) { + return collectionManage.delete(id); + } +} diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/manage/ProjectCollectionManage.java b/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/manage/ProjectCollectionManage.java new file mode 100644 index 0000000..e6c3cba --- /dev/null +++ b/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/manage/ProjectCollectionManage.java @@ -0,0 +1,136 @@ +package com.ningdatech.pmapi.projectlib.manage; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollUtil; +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.ningdatech.basic.function.VUtils; +import com.ningdatech.basic.model.PageVo; +import com.ningdatech.pmapi.common.helper.RegionCacheHelper; +import com.ningdatech.pmapi.projectlib.model.dto.ProjectCollectionSaveDTO; +import com.ningdatech.pmapi.projectlib.model.entity.ProjectCollection; +import com.ningdatech.pmapi.projectlib.model.req.ProjectListReq; +import com.ningdatech.pmapi.projectlib.model.vo.ProjectCollectionVO; +import com.ningdatech.pmapi.projectlib.service.IProjectCollectionService; +import com.ningdatech.pmapi.sys.model.dto.RegionDTO; +import com.ningdatech.pmapi.user.security.auth.model.UserInfoDetails; +import com.ningdatech.pmapi.user.util.LoginUserUtil; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Component; +import java.time.LocalDateTime; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + +/** + * @Classname ProjectCollectionManage + * @Description + * @Date 2023/6/25 9:13 + * @Author PoffyZhang + */ +@Component +@Slf4j +@AllArgsConstructor +public class ProjectCollectionManage { + + private final IProjectCollectionService collectionService; + + private final RegionCacheHelper regionCacheHelper; + + /** + * 项目归集 + * @param req + * @return + */ + public PageVo list(ProjectListReq req) { + UserInfoDetails user = LoginUserUtil.loginUserDetail(); + String buildOrgCode = req.getBuildOrgCode(); + //如果是超管 可以看所有 + if(user.getSuperAdmin()){ + buildOrgCode = null; + } + + Page page = req.page(); + + LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(ProjectCollection.class) + .like(StringUtils.isNotBlank(req.getProjectName()), ProjectCollection::getProjectName, req.getProjectName()) + .like(StringUtils.isNotBlank(req.getBuildOrgName()), ProjectCollection::getBuildOrgName, req.getBuildOrgName()) + .eq(Objects.nonNull(buildOrgCode), ProjectCollection::getBuildOrgCode, buildOrgCode); + //处理 行政区域 + if(StringUtils.isNotBlank(req.getRegionCode())){ + List regions = regionCacheHelper.listChildren(req.getRegionCode(), req.getRegionLevel()); + + if(CollUtil.isNotEmpty(regions)){ + wrapper.in(ProjectCollection::getAreaCode,regions.stream().map(RegionDTO::getRegionCode).collect(Collectors.toList())); + } + } + + collectionService.page(page,wrapper); + + if(0L == page.getTotal()){ + return PageVo.empty(); + } + + List res = page.getRecords().stream() + .map(record -> BeanUtil.copyProperties(record,ProjectCollectionVO.class)) + .collect(Collectors.toList()); + + return PageVo.of(res,page.getTotal()); + } + + /** + * 项目归集详情 + * @param id + * @return + */ + public ProjectCollectionVO detail(Long id) { + ProjectCollection projectCollection = collectionService.getById(id); + + return BeanUtil.copyProperties(projectCollection,ProjectCollectionVO.class); + } + + /** + * 保存 + * @param dto + * @return + */ + public String save(ProjectCollectionSaveDTO dto) { + UserInfoDetails user = LoginUserUtil.loginUserDetail(); + + ProjectCollection projectCollection = BeanUtil.copyProperties(dto,ProjectCollection.class); + if(Objects.nonNull(dto.getId())){ + ProjectCollection old = collectionService.getById(dto.getId()); + VUtils.isTrue(Objects.isNull(old)).throwMessage("该项目归集不存在!"); + projectCollection.setId(dto.getId()); + }else{ + projectCollection.setCreateBy(user.getUsername()); + projectCollection.setCreateOn(LocalDateTime.now()); + } + + projectCollection.setUpdateBy(user.getUsername()); + projectCollection.setUpdateOn(LocalDateTime.now()); + if(collectionService.saveOrUpdate(projectCollection)){ + return "保存成功"; + } + return "保存失败"; + } + + /** + * 删除 + * @param id + * @return + */ + public String delete(Long id) { + ProjectCollection projectCollection = collectionService.getById(id); + + VUtils.isTrue(Objects.isNull(projectCollection)).throwMessage("该项目归集不存在 删除失败"); + + if(collectionService.removeById(id)){ + return "删除成功"; + } + return "删除失败"; + } +} diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/mapper/ProjectCollectionMapper.java b/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/mapper/ProjectCollectionMapper.java new file mode 100644 index 0000000..297d91b --- /dev/null +++ b/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/mapper/ProjectCollectionMapper.java @@ -0,0 +1,16 @@ +package com.ningdatech.pmapi.projectlib.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ningdatech.pmapi.projectlib.model.entity.ProjectCollection; + +/** + *

+ * Mapper 接口 + *

+ * + * @author ZPF + * @since 2023-06-25 + */ +public interface ProjectCollectionMapper extends BaseMapper { + +} diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/mapper/ProjectCollectionMapper.xml b/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/mapper/ProjectCollectionMapper.xml new file mode 100644 index 0000000..463409d --- /dev/null +++ b/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/mapper/ProjectCollectionMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/model/dto/ProjectCollectionSaveDTO.java b/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/model/dto/ProjectCollectionSaveDTO.java new file mode 100644 index 0000000..7060b4f --- /dev/null +++ b/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/model/dto/ProjectCollectionSaveDTO.java @@ -0,0 +1,151 @@ +package com.ningdatech.pmapi.projectlib.model.dto; + +import com.ningdatech.pmapi.projectlib.enumeration.ProjectTypeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.Objects; +import java.util.Optional; + +/** + *

+ * 项目归集对象 + *

+ * + * @author ZPF + * @since 2023-06-21 + */ +@Data +@ApiModel(value = "ProjectCollectionSaveDTO", description = "项目归集对象保存") +public class ProjectCollectionSaveDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + private Long id; + + @ApiModelProperty("项目编号") + private String projectCode; + + @ApiModelProperty("所属地区编号") + private String areaCode; + + @ApiModelProperty("所属地区名称") + private String area; + + @ApiModelProperty("项目阶段") + private Integer stage; + + @ApiModelProperty("项目状态") + private Integer status; + + @ApiModelProperty("项目名称") + private String projectName; + + @ApiModelProperty("项目负责人") + private String responsibleMan; + + @ApiModelProperty("负责人手机号码") + private String responsibleManMobile; + + @ApiModelProperty("项目联系人") + private String contactName; + + @ApiModelProperty("项目联系人手机号码") + private String contactPhone; + + @ApiModelProperty("建设单位名称") + private String buildOrgName; + + @ApiModelProperty("建设单位统一社会信用代码") + private String orgCreditCode; + + @ApiModelProperty("公司编码code") + private String buildOrgCode; + + @ApiModelProperty("项目类型 1:建设 2:运维") + private Integer projectType; + + @ApiModelProperty("是否首次新建 0:否 1:是") + private Integer isFirst; + + @ApiModelProperty("项目预算年度") + private Integer projectYear; + + @ApiModelProperty("建设层级 1:国家级 2:省级 3:省本级 4:市级 5:市本级 6:区县 7乡镇") + private Integer buildLevel; + + @ApiModelProperty("发改编码") + private String developCode; + + @ApiModelProperty("财政编码") + private String financialCode; + + @ApiModelProperty("项目简介") + private String projectIntroduction; + + @ApiModelProperty("资金申报情况-申报金额(万元)") + private BigDecimal declareAmount; + + @ApiModelProperty("立项批复资金(万元)") + private BigDecimal approvalAmount; + + @ApiModelProperty("关联应用") + private String applicationName; + + @ApiModelProperty("关联应用IRS编码") + private String applicationIrsCode; + + @ApiModelProperty("可行性研究报告") + private String feasibilityStudyReport; + + @ApiModelProperty("立项批复文件") + private String approvedFile; + + @ApiModelProperty("采购文件") + private String purchaseFile; + + @ApiModelProperty("中标通知书") + private String acceptanceLetter; + + @ApiModelProperty("采购合同") + private String purchaseContract; + + @ApiModelProperty("验收报告") + private String acceptanceReport; + + @ApiModelProperty("变更批复文件") + private String changeApprovalDoc; + + @ApiModelProperty("承建单位") + private String constructionOrg; + + @ApiModelProperty("承建单位统一信用编码") + private String constructionOrgCreditCode; + + @ApiModelProperty("监理单位") + private String supervisorOrg; + + @ApiModelProperty("监理单位统一信用编码") + private String supervisorOrgCreditCode; + + @ApiModelProperty("主管部门名称") + private String superOrg; + + @ApiModelProperty("主管部门Code") + private String superOrgCode; + + private String projectTypeName; + + public String getProjectTypeName() { + if (Objects.nonNull(this.projectType)) { + Optional.ofNullable(ProjectTypeEnum.getDesc(this.projectType)) + .ifPresent(desc -> this.projectTypeName = desc); + } + return this.projectTypeName; + } +} diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/model/entity/ProjectCollection.java b/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/model/entity/ProjectCollection.java index ce6c860..8eb46e2 100644 --- a/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/model/entity/ProjectCollection.java +++ b/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/model/entity/ProjectCollection.java @@ -28,6 +28,9 @@ public class ProjectCollection implements Serializable { @TableId(type = IdType.AUTO) private Long id; + @ApiModelProperty("项目编号") + private String projectCode; + @ApiModelProperty("所属地区编号") private String areaCode; diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/model/req/ProjectListReq.java b/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/model/req/ProjectListReq.java index 1dae680..0259e92 100644 --- a/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/model/req/ProjectListReq.java +++ b/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/model/req/ProjectListReq.java @@ -31,6 +31,9 @@ public class ProjectListReq extends PagePo { @ApiModelProperty("区域编码") private String regionCode; + @ApiModelProperty("区域等级") + private Integer regionLevel = 3; + @ApiModelProperty("项目名称") private String projectName; diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/model/vo/ProjectCollectionVO.java b/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/model/vo/ProjectCollectionVO.java new file mode 100644 index 0000000..cc136a2 --- /dev/null +++ b/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/model/vo/ProjectCollectionVO.java @@ -0,0 +1,156 @@ +package com.ningdatech.pmapi.projectlib.model.vo; + +import com.ningdatech.pmapi.projectlib.enumeration.ProjectTypeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.Objects; +import java.util.Optional; + +/** + *

+ * 项目归集对象 + *

+ * + * @author ZPF + * @since 2023-06-21 + */ +@Data +@ApiModel(value = "ProjectCollectionVO", description = "项目归集对象") +public class ProjectCollectionVO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + private Long id; + + @ApiModelProperty("项目编号") + private String projectCode; + + @ApiModelProperty("所属地区编号") + private String areaCode; + + @ApiModelProperty("所属地区名称") + private String area; + + @ApiModelProperty("项目阶段") + private Integer stage; + + @ApiModelProperty("项目状态") + private Integer status; + + @ApiModelProperty("项目名称") + private String projectName; + + @ApiModelProperty("项目负责人") + private String responsibleMan; + + @ApiModelProperty("负责人手机号码") + private String responsibleManMobile; + + @ApiModelProperty("项目联系人") + private String contactName; + + @ApiModelProperty("项目联系人手机号码") + private String contactPhone; + + @ApiModelProperty("建设单位名称") + private String buildOrgName; + + @ApiModelProperty("建设单位统一社会信用代码") + private String orgCreditCode; + + @ApiModelProperty("公司编码code") + private String buildOrgCode; + + @ApiModelProperty("项目类型 1:建设 2:运维") + private Integer projectType; + + @ApiModelProperty("是否首次新建 0:否 1:是") + private Integer isFirst; + + @ApiModelProperty("项目预算年度") + private Integer projectYear; + + @ApiModelProperty("建设层级 1:国家级 2:省级 3:省本级 4:市级 5:市本级 6:区县 7乡镇") + private Integer buildLevel; + + @ApiModelProperty("发改编码") + private String developCode; + + @ApiModelProperty("财政编码") + private String financialCode; + + @ApiModelProperty("项目简介") + private String projectIntroduction; + + @ApiModelProperty("资金申报情况-申报金额(万元)") + private BigDecimal declareAmount; + + @ApiModelProperty("立项批复资金(万元)") + private BigDecimal approvalAmount; + + @ApiModelProperty("关联应用") + private String applicationName; + + @ApiModelProperty("关联应用IRS编码") + private String applicationIrsCode; + + private LocalDateTime createOn; + private LocalDateTime updateOn; + private String createBy; + private String updateBy; + + @ApiModelProperty("可行性研究报告") + private String feasibilityStudyReport; + + @ApiModelProperty("立项批复文件") + private String approvedFile; + + @ApiModelProperty("采购文件") + private String purchaseFile; + + @ApiModelProperty("中标通知书") + private String acceptanceLetter; + + @ApiModelProperty("采购合同") + private String purchaseContract; + + @ApiModelProperty("验收报告") + private String acceptanceReport; + + @ApiModelProperty("变更批复文件") + private String changeApprovalDoc; + + @ApiModelProperty("承建单位") + private String constructionOrg; + + @ApiModelProperty("承建单位统一信用编码") + private String constructionOrgCreditCode; + + @ApiModelProperty("监理单位") + private String supervisorOrg; + + @ApiModelProperty("监理单位统一信用编码") + private String supervisorOrgCreditCode; + + @ApiModelProperty("主管部门名称") + private String superOrg; + + @ApiModelProperty("主管部门Code") + private String superOrgCode; + + private String projectTypeName; + + public String getProjectTypeName() { + if (Objects.nonNull(this.projectType)) { + Optional.ofNullable(ProjectTypeEnum.getDesc(this.projectType)) + .ifPresent(desc -> this.projectTypeName = desc); + } + return this.projectTypeName; + } +} diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/service/IProjectCollectionService.java b/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/service/IProjectCollectionService.java new file mode 100644 index 0000000..e48b496 --- /dev/null +++ b/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/service/IProjectCollectionService.java @@ -0,0 +1,16 @@ +package com.ningdatech.pmapi.projectlib.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.ningdatech.pmapi.projectlib.model.entity.ProjectCollection; + +/** + *

+ * 服务类 + *

+ * + * @author ZPF + * @since 2023-06-25 + */ +public interface IProjectCollectionService extends IService { + +} diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/service/impl/ProjectCollectionServiceImpl.java b/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/service/impl/ProjectCollectionServiceImpl.java new file mode 100644 index 0000000..2504fe0 --- /dev/null +++ b/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/service/impl/ProjectCollectionServiceImpl.java @@ -0,0 +1,21 @@ +package com.ningdatech.pmapi.projectlib.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ningdatech.pmapi.projectlib.mapper.ProjectCollectionMapper; +import com.ningdatech.pmapi.projectlib.model.entity.ProjectCollection; +import com.ningdatech.pmapi.projectlib.service.IProjectCollectionService; +import org.springframework.stereotype.Service; + +/** + *

+ * 服务实现类 + *

+ * + * @author ZPF + * @since 2023-06-25 + */ +@Service +public class ProjectCollectionServiceImpl extends ServiceImpl + implements IProjectCollectionService { + +} diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/sys/service/impl/RoleServiceImpl.java b/pmapi/src/main/java/com/ningdatech/pmapi/sys/service/impl/RoleServiceImpl.java index 56e2464..b94cd34 100644 --- a/pmapi/src/main/java/com/ningdatech/pmapi/sys/service/impl/RoleServiceImpl.java +++ b/pmapi/src/main/java/com/ningdatech/pmapi/sys/service/impl/RoleServiceImpl.java @@ -19,6 +19,7 @@ import com.ningdatech.pmapi.sys.model.dto.RoleUpdateDTO; import com.ningdatech.pmapi.sys.model.entity.*; import com.ningdatech.pmapi.sys.service.*; import com.ningdatech.pmapi.sys.utils.AuthCacheKeyUtils; +import com.ningdatech.pmapi.user.entity.enumeration.RoleEnum; import com.ningdatech.pmapi.user.manage.UserAuthManage; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -119,6 +120,7 @@ public class RoleServiceImpl extends ServiceImpl implements IR Role role = BeanUtil.toBean(data, Role.class); role.setCreateBy(userId); role.setUpdateBy(userId); + role.setCode(RoleEnum.NORMAL_MEMBER.name()); save(role); saveRoleMenu(data.getMenuIds(), role.getId()); saveRoleMenuDatascope(data.getMenuDataScopeList(), role.getId()); diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/user/security/auth/model/UserInfoDetails.java b/pmapi/src/main/java/com/ningdatech/pmapi/user/security/auth/model/UserInfoDetails.java index 831ee2b..c477497 100644 --- a/pmapi/src/main/java/com/ningdatech/pmapi/user/security/auth/model/UserInfoDetails.java +++ b/pmapi/src/main/java/com/ningdatech/pmapi/user/security/auth/model/UserInfoDetails.java @@ -145,6 +145,18 @@ public class UserInfoDetails extends AbstractLoginUser implements UserDetails { return Boolean.FALSE; } + public Boolean getSuperAdmin() { + if (CollUtil.isNotEmpty(this.userRoleList)) { + for (Role role : this.userRoleList) { + RoleEnum roleEnum = RoleEnum.mathByName(role.getCode()); + if (Objects.nonNull(roleEnum) && roleEnum.eq(RoleEnum.SUPER_ADMIN.name())) { + return Boolean.TRUE; + } + } + } + return Boolean.FALSE; + } + public Boolean getIsMunicipalOrg() { //如果是丽水市本级的code 就是 if (RegionConst.RC_LS.equals(this.regionCode)) {