10 小时以前 db46314b9c56256a31c9114bd45d9bd63368cbd8
yudao-module-srm/src/main/java/cn/iocoder/yudao/module/srm/service/tender/SrmBidEvaluationServiceImpl.java
@@ -44,6 +44,8 @@
    @Transactional(rollbackFor = Exception.class)
    public Long createEvaluation(SrmBidEvaluationSaveReqVO createReqVO) {
        SrmBidEvaluationDO evaluation = BeanUtils.toBean(createReqVO, SrmBidEvaluationDO.class);
        // 强制置空 id,避免前端传入已有 id 导致主键冲突,由数据库序列自动生成
        evaluation.setId(null);
        // 计算综合评分: 价格*0.4 + 技术*0.3 + 交付*0.2 + 服务*0.1
        BigDecimal price = nvl(evaluation.getPriceScore());
        BigDecimal tech = nvl(evaluation.getTechScore());
@@ -67,6 +69,28 @@
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void updateEvaluation(SrmBidEvaluationSaveReqVO updateReqVO) {
        SrmBidEvaluationDO existing = bidEvaluationMapper.selectById(updateReqVO.getId());
        if (existing == null) {
            throw ServiceExceptionUtil.exception(ErrorCodeConstants.EVALUATION_NOT_EXISTS_TENDER);
        }
        SrmBidEvaluationDO evaluation = BeanUtils.toBean(updateReqVO, SrmBidEvaluationDO.class);
        BigDecimal price = nvl(evaluation.getPriceScore());
        BigDecimal tech = nvl(evaluation.getTechScore());
        BigDecimal delivery = nvl(evaluation.getDeliveryScore());
        BigDecimal service = nvl(evaluation.getServiceScore());
        BigDecimal composite = price.multiply(new BigDecimal("0.4"))
                .add(tech.multiply(new BigDecimal("0.3")))
                .add(delivery.multiply(new BigDecimal("0.2")))
                .add(service.multiply(new BigDecimal("0.1")))
                .setScale(2, RoundingMode.HALF_UP);
        evaluation.setCompositeScore(composite);
        evaluation.setEvaluationTime(LocalDateTime.now());
        bidEvaluationMapper.updateById(evaluation);
    }
    @Override
    public List<SrmBidEvaluationDO> getEvaluationList(Long tenderProjectId) {
        return bidEvaluationMapper.selectListByTenderProjectId(tenderProjectId);
    }