| | |
| | | import cn.iocoder.yudao.module.srm.enums.BidStatusEnum; |
| | | import cn.iocoder.yudao.module.srm.enums.ErrorCodeConstants; |
| | | import cn.iocoder.yudao.module.srm.enums.TenderStatusEnum; |
| | | import com.mzt.logapi.starter.annotation.LogRecord; |
| | | import jakarta.annotation.Resource; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.stereotype.Service; |
| | |
| | | import java.util.*; |
| | | import java.util.function.Function; |
| | | import java.util.stream.Collectors; |
| | | |
| | | import static cn.iocoder.yudao.module.srm.enums.LogRecordConstants.*; |
| | | |
| | | /** |
| | | * SRM 定标管理 Service 实现类 |
| | |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | @LogRecord(type = LOG_AWARD_TYPE, subType = LOG_AWARD_CREATE_SUB_TYPE, |
| | | bizNo = "{{#createReqVO.awardNo}}", success = LOG_AWARD_CREATE_SUCCESS) |
| | | public Long createAward(SrmBidAwardSaveReqVO createReqVO) { |
| | | // 检查招标项目状态:仅 EVALUATING 允许创建定标 |
| | | SrmTenderProjectDO project = tenderProjectMapper.selectById(createReqVO.getTenderProjectId()); |
| | | if (project == null || !TenderStatusEnum.canAward(project.getTenderStatus())) { |
| | | throw ServiceExceptionUtil.exception(ErrorCodeConstants.TENDER_AWARD_FORBIDDEN); |
| | | } |
| | | // 校验是否已存在定标 |
| | | SrmBidAwardDO existing = bidAwardMapper.selectByTenderProjectId(createReqVO.getTenderProjectId()); |
| | | if (existing != null) { |
| | |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void deleteAward(Long id) { |
| | | SrmBidAwardDO award = validateAwardExists(id); |
| | | // 仅待审批状态可删除 |
| | | if (!AwardStatusEnum.PENDING_APPROVAL.getCode().equals(award.getAwardStatus())) { |
| | | throw ServiceExceptionUtil.exception(ErrorCodeConstants.TENDER_AWARD_FORBIDDEN); |
| | | } |
| | | bidAwardMapper.deleteById(id); |
| | | } |
| | | |
| | |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void approveAward(Long id) { |
| | | SrmBidAwardDO award = validateAwardExists(id); |
| | | // 校验招标项目状态为评标中 |
| | | SrmTenderProjectDO project = tenderProjectMapper.selectById(award.getTenderProjectId()); |
| | | if (project == null || !TenderStatusEnum.canAward(project.getTenderStatus())) { |
| | | throw ServiceExceptionUtil.exception(ErrorCodeConstants.TENDER_AWARD_FORBIDDEN); |
| | | } |
| | | award.setAwardStatus(AwardStatusEnum.AWARDED.getCode()); |
| | | award.setApprovalTime(LocalDateTime.now()); |
| | | bidAwardMapper.updateById(award); |
| | | |
| | | // 更新招标项目状态为已定标 |
| | | SrmTenderProjectDO project = tenderProjectMapper.selectById(award.getTenderProjectId()); |
| | | if (project != null) { |
| | | project.setTenderStatus(TenderStatusEnum.AWARDED.getCode()); |
| | | tenderProjectMapper.updateById(project); |
| | | } |
| | | project.setTenderStatus(TenderStatusEnum.AWARDED.getCode()); |
| | | tenderProjectMapper.updateById(project); |
| | | } |
| | | |
| | | @Override |
| | |
| | | SrmBidAwardDO award = validateAwardExists(id); |
| | | if (!AwardStatusEnum.AWARDED.getCode().equals(award.getAwardStatus())) { |
| | | throw ServiceExceptionUtil.exception(ErrorCodeConstants.AWARD_STATUS_NOT_AWARDED); |
| | | } |
| | | // 校验招标项目状态为已定标 |
| | | SrmTenderProjectDO project = tenderProjectMapper.selectById(award.getTenderProjectId()); |
| | | if (project == null || !TenderStatusEnum.AWARDED.getCode().equals(project.getTenderStatus())) { |
| | | throw ServiceExceptionUtil.exception(ErrorCodeConstants.TENDER_AWARD_FORBIDDEN); |
| | | } |
| | | |
| | | // 2. 查 SRM 供应商 |
| | |
| | | bidAwardMapper.updateById(award); |
| | | |
| | | // 9. 更新招标项目状态 |
| | | SrmTenderProjectDO project = tenderProjectMapper.selectById(award.getTenderProjectId()); |
| | | if (project != null) { |
| | | project.setTenderStatus(TenderStatusEnum.CLOSED.getCode()); |
| | | tenderProjectMapper.updateById(project); |
| | | } |
| | | project.setTenderStatus(TenderStatusEnum.CLOSED.getCode()); |
| | | tenderProjectMapper.updateById(project); |
| | | } |
| | | |
| | | private SrmBidAwardDO validateAwardExists(Long id) { |