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..5392876 --- /dev/null +++ b/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/model/dto/ProjectCollectionSaveDTO.java @@ -0,0 +1,148 @@ +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 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/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..a6ab4dc --- /dev/null +++ b/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/model/vo/ProjectCollectionVO.java @@ -0,0 +1,153 @@ +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 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/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)) {