@@ -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<ProjectCollectionVO> 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); | |||||
} | |||||
} |
@@ -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<ProjectCollectionVO> list(ProjectListReq req) { | |||||
UserInfoDetails user = LoginUserUtil.loginUserDetail(); | |||||
String buildOrgCode = req.getBuildOrgCode(); | |||||
//如果是超管 可以看所有 | |||||
if(user.getSuperAdmin()){ | |||||
buildOrgCode = null; | |||||
} | |||||
Page<ProjectCollection> page = req.page(); | |||||
LambdaQueryWrapper<ProjectCollection> 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<RegionDTO> 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<ProjectCollectionVO> 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 "删除失败"; | |||||
} | |||||
} |
@@ -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; | |||||
/** | |||||
* <p> | |||||
* Mapper 接口 | |||||
* </p> | |||||
* | |||||
* @author ZPF | |||||
* @since 2023-06-25 | |||||
*/ | |||||
public interface ProjectCollectionMapper extends BaseMapper<ProjectCollection> { | |||||
} |
@@ -0,0 +1,5 @@ | |||||
<?xml version="1.0" encoding="UTF-8"?> | |||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | |||||
<mapper namespace="com.ningdatech.pmapi.projectlib.mapper.ProjectCollectionMapper"> | |||||
</mapper> |
@@ -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; | |||||
/** | |||||
* <p> | |||||
* 项目归集对象 | |||||
* </p> | |||||
* | |||||
* @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; | |||||
} | |||||
} |
@@ -31,6 +31,9 @@ public class ProjectListReq extends PagePo { | |||||
@ApiModelProperty("区域编码") | @ApiModelProperty("区域编码") | ||||
private String regionCode; | private String regionCode; | ||||
@ApiModelProperty("区域等级") | |||||
private Integer regionLevel = 3; | |||||
@ApiModelProperty("项目名称") | @ApiModelProperty("项目名称") | ||||
private String projectName; | private String projectName; | ||||
@@ -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; | |||||
/** | |||||
* <p> | |||||
* 项目归集对象 | |||||
* </p> | |||||
* | |||||
* @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; | |||||
} | |||||
} |
@@ -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; | |||||
/** | |||||
* <p> | |||||
* 服务类 | |||||
* </p> | |||||
* | |||||
* @author ZPF | |||||
* @since 2023-06-25 | |||||
*/ | |||||
public interface IProjectCollectionService extends IService<ProjectCollection> { | |||||
} |
@@ -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; | |||||
/** | |||||
* <p> | |||||
* 服务实现类 | |||||
* </p> | |||||
* | |||||
* @author ZPF | |||||
* @since 2023-06-25 | |||||
*/ | |||||
@Service | |||||
public class ProjectCollectionServiceImpl extends ServiceImpl<ProjectCollectionMapper, ProjectCollection> | |||||
implements IProjectCollectionService { | |||||
} |
@@ -145,6 +145,18 @@ public class UserInfoDetails extends AbstractLoginUser implements UserDetails { | |||||
return Boolean.FALSE; | 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() { | public Boolean getIsMunicipalOrg() { | ||||
//如果是丽水市本级的code 就是 | //如果是丽水市本级的code 就是 | ||||
if (RegionConst.RC_LS.equals(this.regionCode)) { | if (RegionConst.RC_LS.equals(this.regionCode)) { | ||||