package cn.iocoder.yudao.module.srm.service.tender;
|
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
import cn.iocoder.yudao.module.srm.controller.admin.tender.vo.SrmTenderMaterialSaveReqVO;
|
import cn.iocoder.yudao.module.srm.controller.admin.tender.vo.SrmTenderProjectPageReqVO;
|
import cn.iocoder.yudao.module.srm.controller.admin.tender.vo.SrmTenderProjectSaveReqVO;
|
import cn.iocoder.yudao.module.srm.dal.dataobject.SrmBidAwardDO;
|
import cn.iocoder.yudao.module.srm.dal.dataobject.SrmTenderMaterialDO;
|
import cn.iocoder.yudao.module.srm.dal.dataobject.SrmTenderProjectDO;
|
import cn.iocoder.yudao.module.srm.dal.mysql.SrmBidAwardMapper;
|
import cn.iocoder.yudao.module.srm.dal.mysql.SrmTenderMaterialMapper;
|
import cn.iocoder.yudao.module.srm.dal.mysql.SrmTenderProjectMapper;
|
import cn.iocoder.yudao.module.srm.enums.ErrorCodeConstants;
|
import cn.iocoder.yudao.module.srm.enums.TenderStatusEnum;
|
import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil;
|
import jakarta.annotation.Resource;
|
import org.springframework.stereotype.Service;
|
import org.springframework.validation.annotation.Validated;
|
|
import java.util.List;
|
import java.util.Map;
|
import java.util.function.Function;
|
import java.util.stream.Collectors;
|
|
@Service
|
@Validated
|
public class SrmTenderProjectServiceImpl implements SrmTenderProjectService {
|
|
@Resource
|
private SrmTenderProjectMapper tenderProjectMapper;
|
@Resource
|
private SrmTenderMaterialMapper tenderMaterialMapper;
|
@Resource
|
private SrmBidAwardMapper bidAwardMapper;
|
|
@Override
|
public Long createTenderProject(SrmTenderProjectSaveReqVO createReqVO) {
|
SrmTenderProjectDO project = BeanUtils.toBean(createReqVO, SrmTenderProjectDO.class);
|
project.setTenderStatus(TenderStatusEnum.DRAFT.getCode());
|
tenderProjectMapper.insert(project);
|
return project.getId();
|
}
|
|
@Override
|
public void updateTenderProject(SrmTenderProjectSaveReqVO updateReqVO) {
|
SrmTenderProjectDO project = validateTenderExists(updateReqVO.getId());
|
if (!TenderStatusEnum.DRAFT.getCode().equals(project.getTenderStatus())) {
|
throw ServiceExceptionUtil.exception(ErrorCodeConstants.TENDER_STATUS_NOT_DRAFT);
|
}
|
SrmTenderProjectDO updateObj = BeanUtils.toBean(updateReqVO, SrmTenderProjectDO.class);
|
tenderProjectMapper.updateById(updateObj);
|
}
|
|
@Override
|
public void deleteTenderProject(Long id) {
|
SrmTenderProjectDO project = validateTenderExists(id);
|
if (!TenderStatusEnum.DRAFT.getCode().equals(project.getTenderStatus())) {
|
throw ServiceExceptionUtil.exception(ErrorCodeConstants.TENDER_STATUS_NOT_DRAFT);
|
}
|
tenderMaterialMapper.deleteByTenderProjectId(id);
|
tenderProjectMapper.deleteById(id);
|
}
|
|
@Override
|
public SrmTenderProjectDO getTenderProject(Long id) {
|
return tenderProjectMapper.selectById(id);
|
}
|
|
@Override
|
public PageResult<SrmTenderProjectDO> getTenderProjectPage(SrmTenderProjectPageReqVO pageReqVO) {
|
PageResult<SrmTenderProjectDO> pageResult = tenderProjectMapper.selectPage(pageReqVO);
|
// 批量查询定标信息,填充 awardId 和 purchaseOrderNo
|
List<Long> projectIds = pageResult.getList().stream()
|
.map(SrmTenderProjectDO::getId).collect(Collectors.toList());
|
if (!projectIds.isEmpty()) {
|
List<SrmBidAwardDO> awards = bidAwardMapper.selectListByTenderProjectIds(projectIds);
|
Map<Long, SrmBidAwardDO> awardMap = awards.stream().collect(Collectors.toMap(
|
SrmBidAwardDO::getTenderProjectId, Function.identity(), (a, b) -> a));
|
pageResult.getList().forEach(project -> {
|
SrmBidAwardDO award = awardMap.get(project.getId());
|
if (award != null) {
|
project.setAwardId(award.getId());
|
project.setPurchaseOrderNo(award.getPurchaseOrderNo());
|
}
|
});
|
}
|
return pageResult;
|
}
|
|
@Override
|
public void publishTender(Long id) {
|
SrmTenderProjectDO project = validateTenderExists(id);
|
if (!TenderStatusEnum.DRAFT.getCode().equals(project.getTenderStatus())) {
|
throw ServiceExceptionUtil.exception(ErrorCodeConstants.TENDER_STATUS_NOT_DRAFT);
|
}
|
project.setTenderStatus(TenderStatusEnum.PUBLISHED.getCode());
|
tenderProjectMapper.updateById(project);
|
}
|
|
@Override
|
public void closeTender(Long id) {
|
SrmTenderProjectDO project = validateTenderExists(id);
|
if (TenderStatusEnum.CLOSED.getCode().equals(project.getTenderStatus())) {
|
throw ServiceExceptionUtil.exception(ErrorCodeConstants.TENDER_STATUS_ALREADY_CLOSED);
|
}
|
project.setTenderStatus(TenderStatusEnum.CLOSED.getCode());
|
tenderProjectMapper.updateById(project);
|
}
|
|
@Override
|
public void startBidding(Long id) {
|
SrmTenderProjectDO project = validateTenderExists(id);
|
if (!TenderStatusEnum.PUBLISHED.getCode().equals(project.getTenderStatus())) {
|
throw ServiceExceptionUtil.exception(ErrorCodeConstants.TENDER_STATUS_NOT_PUBLISHED);
|
}
|
project.setTenderStatus(TenderStatusEnum.BIDDING.getCode());
|
tenderProjectMapper.updateById(project);
|
}
|
|
@Override
|
public void startEvaluation(Long id) {
|
SrmTenderProjectDO project = validateTenderExists(id);
|
if (!TenderStatusEnum.BIDDING.getCode().equals(project.getTenderStatus())) {
|
throw ServiceExceptionUtil.exception(ErrorCodeConstants.TENDER_STATUS_NOT_BIDDING);
|
}
|
project.setTenderStatus(TenderStatusEnum.EVALUATING.getCode());
|
tenderProjectMapper.updateById(project);
|
}
|
|
// ========== 物料子表 ==========
|
|
@Override
|
public void createMaterial(SrmTenderMaterialSaveReqVO createReqVO) {
|
SrmTenderMaterialDO material = BeanUtils.toBean(createReqVO, SrmTenderMaterialDO.class);
|
tenderMaterialMapper.insert(material);
|
}
|
|
@Override
|
public void updateMaterial(SrmTenderMaterialSaveReqVO updateReqVO) {
|
SrmTenderMaterialDO updateObj = BeanUtils.toBean(updateReqVO, SrmTenderMaterialDO.class);
|
tenderMaterialMapper.updateById(updateObj);
|
}
|
|
@Override
|
public void deleteMaterial(Long id) {
|
tenderMaterialMapper.deleteById(id);
|
}
|
|
@Override
|
public List<SrmTenderMaterialDO> getMaterialList(Long tenderProjectId) {
|
return tenderMaterialMapper.selectListByTenderProjectId(tenderProjectId);
|
}
|
|
private SrmTenderProjectDO validateTenderExists(Long id) {
|
SrmTenderProjectDO project = tenderProjectMapper.selectById(id);
|
if (project == null) {
|
throw ServiceExceptionUtil.exception(ErrorCodeConstants.TENDER_NOT_EXISTS);
|
}
|
return project;
|
}
|
|
}
|