feat(REQ-3488): 资质upsert接口实现

This commit is contained in:
zhanghonghao 2025-01-16 09:51:57 +08:00
parent 9fe926ef19
commit 8109723d4e
14 changed files with 426 additions and 0 deletions

View File

@ -56,4 +56,11 @@ public interface OrgUnitQualificationApi {
@PostMapping("/api/org/qualifications-apply/update")
ApiResult<Void> updateQualificationsApply(@RequestBody @Validated UpdateQualificationsApplyReq req);
@PostMapping("/api/org/qualification/upsert")
ApiResult<Void> upsertQualification(@RequestBody @Validated UpsertQualificationReq req);
@PostMapping("/api/org/qualification-ou-type/upsert")
ApiResult<Void> upsertQualificationOuType(@RequestBody @Validated UpsertQualificationOuTypeReq req);
}

View File

@ -0,0 +1,46 @@
package cn.axzo.orgmanax.dto.unit.qualification.req;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
import javax.validation.constraints.NotNull;
/**
* @author : zhanghonghao@axzo.cn
* @since : 2025/1/16
*/
@NoArgsConstructor
@AllArgsConstructor
@Data
@SuperBuilder
public class UpsertQualificationOuTypeReq {
/**
* 单位id
*/
@NotNull(message = "单位id不能为空")
private Long ouId;
/**
* 企业名称(冗余查询用)
*/
private String ouName;
/**
* 统一社会信用代码(冗余)
*/
private String uscc;
/**
* 资质id
*/
private Long qualificationId;
/**
* 资质序列/单位类型 1:施工单位施工总承包资质 2:建设单位房地产开发资质3:工程监理工程监理资质 4:劳务分包施工劳务资质 5:专业分包专业承包资质30:其他
*/
private Integer type;
}

View File

@ -0,0 +1,90 @@
package cn.axzo.orgmanax.dto.unit.qualification.req;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
import javax.validation.constraints.NotNull;
import java.util.Date;
/**
* @author : zhanghonghao@axzo.cn
* @since : 2025/1/15
*/
@NoArgsConstructor
@AllArgsConstructor
@Data
@SuperBuilder
public class UpsertQualificationReq {
private Long id;
/**
* 单位id
*/
@NotNull(message = "单位id不能为空")
private Long ouId;
/**
* 企业名称(冗余查询用)
*/
private String ouName;
/**
* 证书编号
*/
private String number;
/**
* 证书名称
* 1:建筑业企业资质证书
* 2:房地产开发企业资质证书
* 3:工程监理资质证书
*/
private String name;
/**
* 资质认证到期时间
*/
private Date endTime;
/**
* 资质文件名称
*/
private String fileName;
/**
* 资质文件url
*/
private String fileUrl;
/**
* 资质序列/资质分类 1:施工总承包 2:建设单位 3:监理单位 4:劳务分包 5:专业承包 30:其他
* 建筑业企业资质证书--施工总承包专业承包劳务分包
* 房地产开发企业资质证书--建设单位
* 工程监理资质证书--监理单位
* 其他 -- 自定义
*/
private Integer type;
/**
* 证书类型: 1:建筑业企业资质证书 2:房地产开发企业资质证书 3:工程监理资质证书 20:其他
*/
private Integer qualificationType;
/**
* 资质类别(纯手录)
* REQ-1806
*/
private String category;
/**
* 资质等级
* a. 房地产开发企业资质证书壹级贰级叁级肆级
* b. 建筑业企业资质证书特级壹级贰级叁级不分
* c. 工程监理资质证书甲级乙级丙级
* REQ-1806
*/
private String categoryLevel;
}

View File

@ -0,0 +1,9 @@
package cn.axzo.orgmanax.infra.dao.qualification.repository;
import cn.axzo.orgmanax.infra.dao.qualification.entity.QualificationOuType;
public interface QualificationOuTypeUpsertRepository {
void save(QualificationOuType qualificationOuType);
}

View File

@ -0,0 +1,13 @@
package cn.axzo.orgmanax.infra.dao.qualification.repository;
import cn.axzo.orgmanax.infra.dao.qualification.entity.Qualification;
/**
* @author : zhanghonghao@axzo.cn
* @since : 2025/1/16
*/
public interface QualificationUpsertRepository {
void upsert(Qualification qualification);
}

View File

@ -0,0 +1,26 @@
package cn.axzo.orgmanax.infra.dao.qualification.repository.impl;
import cn.axzo.orgmanax.infra.dao.qualification.dao.QualificationOuTypeDao;
import cn.axzo.orgmanax.infra.dao.qualification.entity.QualificationOuType;
import cn.axzo.orgmanax.infra.dao.qualification.repository.QualificationOuTypeUpsertRepository;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
/**
* @author : zhanghonghao@axzo.cn
* @since : 2025/1/16
*/
@Service
@RequiredArgsConstructor
@Slf4j
public class QualificationOuTypeUpsertRepositoryImpl implements QualificationOuTypeUpsertRepository {
private final QualificationOuTypeDao qualificationOuTypeDao;
@Override
public void save(QualificationOuType qualificationOuType) {
qualificationOuTypeDao.save(qualificationOuType);
}
}

View File

@ -0,0 +1,26 @@
package cn.axzo.orgmanax.infra.dao.qualification.repository.impl;
import cn.axzo.orgmanax.infra.dao.qualification.dao.QualificationDao;
import cn.axzo.orgmanax.infra.dao.qualification.entity.Qualification;
import cn.axzo.orgmanax.infra.dao.qualification.repository.QualificationUpsertRepository;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
/**
* @author : zhanghonghao@axzo.cn
* @since : 2025/1/16
*/
@Service
@RequiredArgsConstructor
@Slf4j
public class QualificationUpsertRepositoryImpl implements QualificationUpsertRepository {
private final QualificationDao qualificationDao;
@Override
public void upsert(Qualification qualification) {
qualificationDao.saveOrUpdate(qualification);
}
}

View File

@ -57,4 +57,16 @@ public class UnitQualificationController implements OrgUnitQualificationApi {
return ApiResult.success();
}
@Override
public ApiResult<Void> upsertQualification(UpsertQualificationReq req) {
qualificationService.upsertQualification(req);
return ApiResult.success();
}
@Override
public ApiResult<Void> upsertQualificationOuType(UpsertQualificationOuTypeReq req) {
qualificationService.upsertQualificationOuType(req);
return ApiResult.success();
}
}

View File

@ -1,5 +1,7 @@
package cn.axzo.orgmanax.server.unit.foundation;
import cn.axzo.orgmanax.server.unit.foundation.dto.QualificationCreator;
import cn.axzo.orgmanax.server.unit.foundation.dto.QualificationOuTypeCreator;
import cn.axzo.orgmanax.server.unit.foundation.dto.QualificationsApplyCreator;
import java.util.List;
@ -7,4 +9,8 @@ import java.util.List;
public interface QualificationFoundationService {
void saveApplyList(List<QualificationsApplyCreator> applyList);
void upsertQualification(QualificationCreator qualification);
void upsertQualificationOuType(QualificationOuTypeCreator qualificationOuType);
}

View File

@ -0,0 +1,93 @@
package cn.axzo.orgmanax.server.unit.foundation.dto;
import cn.axzo.orgmanax.infra.dao.qualification.entity.Qualification;
import cn.hutool.core.bean.BeanUtil;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.util.Date;
/**
* @author : zhanghonghao@axzo.cn
* @since : 2025/1/16
*/
@Data
public class QualificationCreator {
private Long id;
/**
* 单位id
*/
@NotNull(message = "单位id不能为空")
private Long ouId;
/**
* 企业名称(冗余查询用)
*/
private String ouName;
/**
* 证书编号
*/
private String number;
/**
* 证书名称
* 1:建筑业企业资质证书
* 2:房地产开发企业资质证书
* 3:工程监理资质证书
*/
private String name;
/**
* 资质认证到期时间
*/
private Date endTime;
/**
* 资质文件名称
*/
private String fileName;
/**
* 资质文件url
*/
private String fileUrl;
/**
* 资质序列/资质分类 1:施工总承包 2:建设单位 3:监理单位 4:劳务分包 5:专业承包 30:其他
* 建筑业企业资质证书--施工总承包专业承包劳务分包
* 房地产开发企业资质证书--建设单位
* 工程监理资质证书--监理单位
* 其他 -- 自定义
*/
private Integer type;
/**
* 证书类型: 1:建筑业企业资质证书 2:房地产开发企业资质证书 3:工程监理资质证书 20:其他
*/
private Integer qualificationType;
/**
* 资质类别(纯手录)
* REQ-1806
*/
private String category;
/**
* 资质等级
* a. 房地产开发企业资质证书壹级贰级叁级肆级
* b. 建筑业企业资质证书特级壹级贰级叁级不分
* c. 工程监理资质证书甲级乙级丙级
* REQ-1806
*/
private String categoryLevel;
/**
* 转换实体
*/
public Qualification toEntity() {
return BeanUtil.copyProperties(this, Qualification.class);
}
}

View File

@ -0,0 +1,46 @@
package cn.axzo.orgmanax.server.unit.foundation.dto;
import cn.axzo.orgmanax.infra.dao.qualification.entity.QualificationOuType;
import cn.hutool.core.bean.BeanUtil;
import lombok.Data;
/**
* @author : zhanghonghao@axzo.cn
* @since : 2025/1/16
*/
@Data
public class QualificationOuTypeCreator {
/**
* 单位id
*/
private Long ouId;
/**
* 企业名称(冗余查询用)
*/
private String ouName;
/**
* 统一社会信用代码(冗余)
*/
private String uscc;
/**
* 资质id
*/
private Long qualificationId;
/**
* 资质序列/单位类型 1:施工单位施工总承包资质 2:建设单位房地产开发资质3:工程监理工程监理资质 4:劳务分包施工劳务资质 5:专业分包专业承包资质30:其他
*/
private Integer type;
/**
* 转换实体
*/
public QualificationOuType toEntity() {
return BeanUtil.copyProperties(this, QualificationOuType.class);
}
}

View File

@ -1,13 +1,22 @@
package cn.axzo.orgmanax.server.unit.foundation.impl;
import cn.axzo.orgmanax.infra.dao.qualification.entity.Qualification;
import cn.axzo.orgmanax.infra.dao.qualification.entity.QualificationOuType;
import cn.axzo.orgmanax.infra.dao.qualification.entity.QualificationsApply;
import cn.axzo.orgmanax.infra.dao.qualification.repository.QualificationOuTypeQueryRepository;
import cn.axzo.orgmanax.infra.dao.qualification.repository.QualificationOuTypeUpsertRepository;
import cn.axzo.orgmanax.infra.dao.qualification.repository.QualificationUpsertRepository;
import cn.axzo.orgmanax.infra.dao.qualification.repository.QualificationsApplyUpsertRepository;
import cn.axzo.orgmanax.server.unit.foundation.QualificationFoundationService;
import cn.axzo.orgmanax.server.unit.foundation.dto.QualificationCreator;
import cn.axzo.orgmanax.server.unit.foundation.dto.QualificationOuTypeCreator;
import cn.axzo.orgmanax.server.unit.foundation.dto.QualificationsApplyCreator;
import cn.hutool.core.collection.CollUtil;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
@ -22,9 +31,34 @@ public class QualificationFoundationServiceImpl implements QualificationFoundati
private final QualificationsApplyUpsertRepository qualificationsApplyUpsertRepository;
private final QualificationUpsertRepository qualificationUpsertRepository;
private final QualificationOuTypeUpsertRepository qualificationOuTypeUpsertRepository;
private final QualificationOuTypeQueryRepository qualificationOuTypeQueryRepository;
@Override
public void saveApplyList(List<QualificationsApplyCreator> applyCreatorList) {
List<QualificationsApply> contactList = applyCreatorList.stream().map(QualificationsApplyCreator::toEntity).collect(Collectors.toList());
qualificationsApplyUpsertRepository.saveBatch(contactList);
}
@Override
public void upsertQualification(QualificationCreator qualification) {
Qualification qualificationEntity = qualification.toEntity();
qualificationUpsertRepository.upsert(qualificationEntity);
}
@Override
public void upsertQualificationOuType(QualificationOuTypeCreator qualificationOuType) {
QualificationOuTypeQueryRepository.ListReq listReq = new QualificationOuTypeQueryRepository.ListReq();
listReq.setOuIds(Collections.singleton(qualificationOuType.getOuId()));
listReq.setTypes(Collections.singleton(qualificationOuType.getType()));
List<QualificationOuTypeQueryRepository.QualificationOuTypeResp> list = qualificationOuTypeQueryRepository.list(listReq);
if (CollUtil.isEmpty(list)) {
QualificationOuType entity = qualificationOuType.toEntity();
qualificationOuTypeUpsertRepository.save(entity);
}
}
}

View File

@ -21,4 +21,8 @@ public interface QualificationService {
void updateQualificationsApply(UpdateQualificationsApplyReq req);
void qualificationsApplySaveBatch(SaveBatchQualificationsApplyReq req);
void upsertQualification(UpsertQualificationReq req);
void upsertQualificationOuType(UpsertQualificationOuTypeReq req);
}

View File

@ -12,6 +12,8 @@ import cn.axzo.orgmanax.infra.dao.qualification.repository.QualificationOuTypeQu
import cn.axzo.orgmanax.infra.dao.qualification.repository.QualificationQueryRepository;
import cn.axzo.orgmanax.infra.dao.qualification.repository.QualificationsApplyQueryRepository;
import cn.axzo.orgmanax.server.unit.foundation.QualificationFoundationService;
import cn.axzo.orgmanax.server.unit.foundation.dto.QualificationCreator;
import cn.axzo.orgmanax.server.unit.foundation.dto.QualificationOuTypeCreator;
import cn.axzo.orgmanax.server.unit.foundation.dto.QualificationsApplyCreator;
import cn.axzo.orgmanax.server.unit.service.QualificationService;
import cn.axzo.orgmanax.server.unit.service.processor.QualificationApplyProcessor;
@ -98,4 +100,16 @@ public class QualificationServiceImpl implements QualificationService {
qualificationFoundationService.saveApplyList(applyList);
}
@Override
public void upsertQualification(UpsertQualificationReq req) {
QualificationCreator creator = BeanUtil.copyProperties(req, QualificationCreator.class);
qualificationFoundationService.upsertQualification(creator);
}
@Override
public void upsertQualificationOuType(UpsertQualificationOuTypeReq req) {
QualificationOuTypeCreator creator = BeanUtil.copyProperties(req, QualificationOuTypeCreator.class);
qualificationFoundationService.upsertQualificationOuType(creator);
}
}