feat(REQ-3488): 资质申请更新接口

This commit is contained in:
zhanghonghao 2025-01-10 16:59:33 +08:00
parent 0254ecf85c
commit c2cf7ea9cb
13 changed files with 338 additions and 1 deletions

View File

@ -8,6 +8,7 @@ import cn.axzo.orgmanax.dto.unit.qualification.dto.OrgQualificationsApplyDTO;
import cn.axzo.orgmanax.dto.unit.qualification.req.ListQualificationOuTypeReq;
import cn.axzo.orgmanax.dto.unit.qualification.req.ListQualificationReq;
import cn.axzo.orgmanax.dto.unit.qualification.req.ListQualificationsApplyReq;
import cn.axzo.orgmanax.dto.unit.qualification.req.UpdateQualificationsApplyReq;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
@ -49,4 +50,7 @@ public interface OrgUnitQualificationApi {
*/
@PostMapping("/api/org/qualification-ou-type/list")
ApiResult<PageResp<OrgQualificationOuTypeDTO>> listOuType(@RequestBody @Validated ListQualificationOuTypeReq req);
@PostMapping("/api/org/qualifications-apply/update")
ApiResult<Void> updateQualificationsApply(@RequestBody @Validated UpdateQualificationsApplyReq req);
}

View File

@ -0,0 +1,67 @@
package cn.axzo.orgmanax.dto.unit.qualification.req;
import lombok.*;
import lombok.experimental.SuperBuilder;
import java.util.Set;
/**
* @author : zhanghonghao@axzo.cn
* @since : 2024/12/26
*/
@NoArgsConstructor
@AllArgsConstructor
@Data
@SuperBuilder
public class UpdateQualificationsApplyReq {
/**
* 资质ID
*/
private Long id;
/**
* 单位/团队注册记录ids
*/
private Set<Long> ouRegisterIds;
/**
* 证书编号精准匹配
*/
private String number;
/**
* 单位id
*/
private Long ouId;
/**
* 审批状态 0:已撤销 10:审核中,20:审核拒绝,30:审核通过 与单位表的状态枚举一致
*/
private Integer approvalStatus;
/**
* 审批意见
*/
private String approvalMsg;
/**
* 资质文件名称
*/
private String fileName;
/**
* 资质文件url
*/
private String fileUrl;
private Action action;
@AllArgsConstructor(access = AccessLevel.PRIVATE)
@Getter
public enum Action {
UPDATE("普通更新", "updateQualificationsApplyProcessor"),
DELETE("删除", "deleteQualificationsApplyProcessor"),
UPDATE_BY_OU_REGISTER("根据ouRegisterId更新", "updateQualificationsApplyByOuRegisterProcessor");
private final String desc;
private final String processor;
}
}

View File

@ -1,10 +1,14 @@
package cn.axzo.orgmanax.infra.dao.qualification.dao;
import cn.axzo.orgmanax.dto.unit.enums.ApprovalStatusEnum;
import cn.axzo.orgmanax.infra.dao.qualification.entity.QualificationsApply;
import cn.axzo.orgmanax.infra.dao.qualification.mapper.QualificationsApplyMapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Repository;
import java.util.Set;
/**
* @author : zhanghonghao@axzo.cn
* @since : 2024/12/24
@ -12,4 +16,22 @@ import org.springframework.stereotype.Repository;
@Repository
public class QualificationsApplyDao extends ServiceImpl<QualificationsApplyMapper, QualificationsApply> {
public void updateByPresenterPhoneAndNumber(String presenterPhone, String number, String fileName, String fileUrl) {
lambdaUpdate()
// 同一个提交人,相同的证书号
.eq(QualificationsApply::getPresenterPhone, presenterPhone)
.eq(QualificationsApply::getNumber, number)
.set(StringUtils.isNotBlank(fileName), QualificationsApply::getFileName, fileName)
.set(StringUtils.isNotBlank(fileUrl), QualificationsApply::getFileUrl, fileUrl)
.update();
}
public void refuseByOuRegisterIds(Set<Long> ouRegisterIds, String approvalMsg) {
lambdaUpdate()
.in(QualificationsApply::getOuRegisterId, ouRegisterIds)
.set(QualificationsApply::getApprovalStatus, ApprovalStatusEnum.AUDIT_REFUSE.getValue())
.set(QualificationsApply::getApprovalMsg, approvalMsg)
.update();
}
}

View File

@ -0,0 +1,16 @@
package cn.axzo.orgmanax.infra.dao.qualification.repository;
import cn.axzo.orgmanax.infra.dao.qualification.entity.QualificationsApply;
import java.util.Set;
public interface QualificationsApplyUpsertRepository {
void updateByPresenterPhoneAndNumber(String presenterPhone, String number, String fileName, String fileUrl);
void updateByOuRegisterIds(Set<Long> ouRegisterIds, String approvalMsg);
void update(QualificationsApply qualificationsApply);
void delete(Long id);
}

View File

@ -0,0 +1,46 @@
package cn.axzo.orgmanax.infra.dao.qualification.repository.impl;
import cn.axzo.orgmanax.infra.dao.qualification.dao.QualificationsApplyDao;
import cn.axzo.orgmanax.infra.dao.qualification.entity.QualificationsApply;
import cn.axzo.orgmanax.infra.dao.qualification.repository.QualificationsApplyUpsertRepository;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.Set;
/**
* @author : zhanghonghao@axzo.cn
* @since : 2025/1/10
*/
@Service
@RequiredArgsConstructor
@Slf4j
public class QualificationsApplyUpsertRepositoryImpl implements QualificationsApplyUpsertRepository {
private final QualificationsApplyDao qualificationsApplyDao;
@Override
public void updateByPresenterPhoneAndNumber(String presenterPhone, String number, String fileName, String fileUrl) {
qualificationsApplyDao.updateByPresenterPhoneAndNumber(presenterPhone, number, fileName, fileUrl);
}
@Override
public void updateByOuRegisterIds(Set<Long> ouRegisterIds, String approvalMsg) {
qualificationsApplyDao.refuseByOuRegisterIds(ouRegisterIds, approvalMsg);
}
@Override
public void update(QualificationsApply qualificationsApply) {
qualificationsApplyDao.updateById(qualificationsApply);
}
@Override
public void delete(Long id) {
qualificationsApplyDao.lambdaUpdate()
.setSql(" is_delete = id ")
.eq(QualificationsApply::getId, id)
.update();
}
}

View File

@ -9,6 +9,7 @@ import cn.axzo.orgmanax.dto.unit.qualification.dto.OrgQualificationsApplyDTO;
import cn.axzo.orgmanax.dto.unit.qualification.req.ListQualificationOuTypeReq;
import cn.axzo.orgmanax.dto.unit.qualification.req.ListQualificationReq;
import cn.axzo.orgmanax.dto.unit.qualification.req.ListQualificationsApplyReq;
import cn.axzo.orgmanax.dto.unit.qualification.req.UpdateQualificationsApplyReq;
import cn.axzo.orgmanax.server.unit.service.QualificationService;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.RequestMapping;
@ -47,4 +48,10 @@ public class UnitQualificationController implements OrgUnitQualificationApi {
return ApiResult.success(qualificationService.listOuType(req));
}
@Override
public ApiResult<Void> updateQualificationsApply(UpdateQualificationsApplyReq req) {
qualificationService.updateQualificationsApply(req);
return ApiResult.success();
}
}

View File

@ -7,6 +7,7 @@ import cn.axzo.orgmanax.dto.unit.qualification.dto.OrgQualificationsApplyDTO;
import cn.axzo.orgmanax.dto.unit.qualification.req.ListQualificationOuTypeReq;
import cn.axzo.orgmanax.dto.unit.qualification.req.ListQualificationReq;
import cn.axzo.orgmanax.dto.unit.qualification.req.ListQualificationsApplyReq;
import cn.axzo.orgmanax.dto.unit.qualification.req.UpdateQualificationsApplyReq;
import java.util.List;
@ -19,4 +20,7 @@ public interface QualificationService {
PageResp<OrgQualificationsApplyDTO> listApply(ListQualificationsApplyReq req);
PageResp<OrgQualificationOuTypeDTO> listOuType(ListQualificationOuTypeReq req);
void updateQualificationsApply(UpdateQualificationsApplyReq req);
}

View File

@ -1,20 +1,26 @@
package cn.axzo.orgmanax.server.unit.service.impl;
import cn.axzo.foundation.exception.Axssert;
import cn.axzo.foundation.page.PageResp;
import cn.axzo.orgmanax.common.config.BizResultCode;
import cn.axzo.orgmanax.dto.unit.qualification.dto.OrgQualificationDTO;
import cn.axzo.orgmanax.dto.unit.qualification.dto.OrgQualificationOuTypeDTO;
import cn.axzo.orgmanax.dto.unit.qualification.dto.OrgQualificationsApplyDTO;
import cn.axzo.orgmanax.dto.unit.qualification.req.ListQualificationOuTypeReq;
import cn.axzo.orgmanax.dto.unit.qualification.req.ListQualificationReq;
import cn.axzo.orgmanax.dto.unit.qualification.req.ListQualificationsApplyReq;
import cn.axzo.orgmanax.dto.unit.qualification.req.UpdateQualificationsApplyReq;
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.QualificationQueryRepository;
import cn.axzo.orgmanax.infra.dao.qualification.repository.QualificationsApplyQueryRepository;
import cn.axzo.orgmanax.server.unit.service.QualificationService;
import cn.axzo.orgmanax.server.unit.service.processor.QualificationApplyProcessor;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Service;
import java.util.Collections;
@ -33,6 +39,7 @@ public class QualificationServiceImpl implements QualificationService {
private final QualificationOuTypeQueryRepository qualificationOuTypeQueryRepository;
private final QualificationQueryRepository qualificationQueryRepository;
private final QualificationsApplyQueryRepository qualificationsApplyQueryRepository;
private final ApplicationContext applicationContext;
@Override
public List<Integer> getQualificationTypesByUnitId(Long unitId) {
@ -66,4 +73,23 @@ public class QualificationServiceImpl implements QualificationService {
return PageResp.<OrgQualificationOuTypeDTO>builder().current(page.getCurrent()).total(page.getTotal()).size(page.getSize()).data(BeanUtil.copyToList(page.getData(), OrgQualificationOuTypeDTO.class)).build();
}
@Override
public void updateQualificationsApply(UpdateQualificationsApplyReq req) {
// 通用check
Axssert.notNull(req.getAction(), BizResultCode.INVALID_PARAM, "执行行为不能为空");
QualificationsApply apply = new QualificationsApply();
apply.setId(req.getId());
apply.setFileName(req.getFileName());
apply.setFileUrl(req.getFileUrl());
// 构建processor所需上下文
QualificationApplyProcessor.ProcessContext processContext = QualificationApplyProcessor.ProcessContext.builder()
.action(req.getAction())
.apply(apply)
.ouRegisterIds(req.getOuRegisterIds())
.build();
QualificationApplyProcessor processor = applicationContext.getBean(req.getAction().getProcessor(), QualificationApplyProcessor.class);
processor.process(processContext);
}
}

View File

@ -0,0 +1,52 @@
package cn.axzo.orgmanax.server.unit.service.processor;
import cn.axzo.orgmanax.dto.unit.qualification.req.UpdateQualificationsApplyReq;
import cn.axzo.orgmanax.infra.dao.qualification.entity.QualificationsApply;
import lombok.*;
import org.springframework.transaction.annotation.Transactional;
import java.util.Set;
public interface QualificationApplyProcessor {
@Transactional(rollbackFor = Throwable.class)
QualificationApplyProcessor.ProcessResult process(QualificationApplyProcessor.ProcessContext context);
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
class ProcessContext {
QualificationsApply apply;
UpdateQualificationsApplyReq.Action action;
Set<Long> ouRegisterIds;
}
@Getter
@Builder(access = AccessLevel.PRIVATE)
@AllArgsConstructor
class ProcessResult {
@Builder.Default
Boolean success = Boolean.TRUE;
String msg;
public static QualificationApplyProcessor.ProcessResult success() {
return QualificationApplyProcessor.ProcessResult.builder()
.success(true)
.build();
}
public static QualificationApplyProcessor.ProcessResult fail() {
return fail(null);
}
public static QualificationApplyProcessor.ProcessResult fail(String msg) {
return QualificationApplyProcessor.ProcessResult.builder()
.success(false)
.msg(msg)
.build();
}
}
}

View File

@ -0,0 +1,25 @@
package cn.axzo.orgmanax.server.unit.service.processor.impl;
import cn.axzo.orgmanax.infra.dao.qualification.repository.QualificationsApplyUpsertRepository;
import cn.axzo.orgmanax.server.unit.service.processor.QualificationApplyProcessor;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
/**
* @author : zhanghonghao@axzo.cn
* @since : 2025/1/10
*/
@Component
@Slf4j
@RequiredArgsConstructor
public class DeleteQualificationsApplyProcessor implements QualificationApplyProcessor {
private final QualificationsApplyUpsertRepository upsertRepository;
@Override
public ProcessResult process(ProcessContext context) {
upsertRepository.delete(context.getApply().getId());
return ProcessResult.success();
}
}

View File

@ -0,0 +1,26 @@
package cn.axzo.orgmanax.server.unit.service.processor.impl;
import cn.axzo.orgmanax.infra.dao.qualification.repository.QualificationsApplyUpsertRepository;
import cn.axzo.orgmanax.server.unit.service.processor.QualificationApplyProcessor;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
/**
* @author : zhanghonghao@axzo.cn
* @since : 2025/1/10
*/
@Component
@Slf4j
@RequiredArgsConstructor
public class UpdateQualificationsApplyByOuRegisterProcessor implements QualificationApplyProcessor {
private final QualificationsApplyUpsertRepository upsertRepository;
@Override
public ProcessResult process(ProcessContext context) {
upsertRepository.updateByOuRegisterIds(context.getOuRegisterIds(), context.getApply().getApprovalMsg());
return ProcessResult.success();
}
}

View File

@ -0,0 +1,42 @@
package cn.axzo.orgmanax.server.unit.service.processor.impl;
import cn.axzo.orgmanax.infra.dao.qualification.entity.QualificationsApply;
import cn.axzo.orgmanax.infra.dao.qualification.repository.QualificationsApplyQueryRepository;
import cn.axzo.orgmanax.infra.dao.qualification.repository.QualificationsApplyUpsertRepository;
import cn.axzo.orgmanax.server.unit.service.processor.QualificationApplyProcessor;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;
/**
* @author : zhanghonghao@axzo.cn
* @since : 2025/1/10
*/
@Component
@Slf4j
@RequiredArgsConstructor
public class UpdateQualificationsApplyProcessor implements QualificationApplyProcessor {
private final QualificationsApplyUpsertRepository upsertRepository;
private final QualificationsApplyQueryRepository queryRepository;
@Override
public ProcessResult process(ProcessContext context) {
QualificationsApply apply = context.getApply();
QualificationsApplyQueryRepository.OneReq req = QualificationsApplyQueryRepository.OneReq.builder()
.id(apply.getId())
.build();
QualificationsApplyQueryRepository.QualificationsApplyResp one = queryRepository.one(req);
if (one == null) {
throw new IllegalArgumentException("未找到对应的资质信息 id:" + req.getId());
}
if (StringUtils.isNotBlank(one.getNumber())) {
upsertRepository.updateByPresenterPhoneAndNumber
(one.getPresenterPhone(), one.getNumber(), apply.getFileName(), apply.getFileUrl());
} else {
upsertRepository.update(apply);
}
return ProcessResult.success();
}
}