gaoluyang
6 天以前 8e4eee5ad4d74e1a4e6ab4de3a9c28000700dce0
yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/purchase/ErpSupplierContractController.java
@@ -4,6 +4,7 @@
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.collection.MapUtils;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
@@ -14,6 +15,9 @@
import cn.iocoder.yudao.module.erp.dal.dataobject.purchase.ErpSupplierContractDO;
import cn.iocoder.yudao.module.erp.dal.mysql.purchase.ErpPurchaseOrderMapper;
import cn.iocoder.yudao.module.erp.service.purchase.ErpSupplierContractService;
import cn.iocoder.yudao.module.srm.api.supplier.SrmSupplierApi;
import cn.iocoder.yudao.module.srm.api.supplier.dto.SrmSupplierRespDTO;
import cn.iocoder.yudao.module.system.api.storage.StorageAttachmentApi;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
@@ -26,6 +30,7 @@
import java.io.IOException;
import java.math.BigDecimal;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@@ -43,6 +48,10 @@
    private ErpSupplierContractService contractService;
    @Resource
    private ErpPurchaseOrderMapper purchaseOrderMapper;
    @Resource
    private StorageAttachmentApi storageAttachmentApi;
    @Resource
    private SrmSupplierApi srmSupplierApi;
    @PostMapping("/create")
    @Operation(summary = "创建供应商合同")
@@ -74,7 +83,12 @@
    @PreAuthorize("@ss.hasPermission('erp:supplier-contract:query')")
    public CommonResult<ErpSupplierContractRespVO> getContract(@RequestParam("id") Long id) {
        ErpSupplierContractDO contract = contractService.getContract(id);
        return success(contract == null ? null : buildResp(contract));
        if (contract == null) {
            return success(null);
        }
        ErpSupplierContractRespVO respVO = buildRespList(java.util.Collections.singletonList(contract)).get(0);
        respVO.setAttachmentList(storageAttachmentApi.listAttachments("erp_supplier_contract", id));
        return success(respVO);
    }
    @GetMapping("/page")
@@ -112,15 +126,22 @@
        if (CollUtil.isEmpty(list)) {
            return java.util.Collections.emptyList();
        }
        // 供应商名称:批量查询后回填,避免逐行查库
        Map<Long, SrmSupplierRespDTO> supplierMap = getSupplierMap(
                list.stream().map(ErpSupplierContractDO::getSupplierId)
                        .filter(java.util.Objects::nonNull)
                        .collect(Collectors.toSet()));
        List<ErpSupplierContractRespVO> result = new java.util.ArrayList<>(list.size());
        for (ErpSupplierContractDO contract : list) {
            result.add(buildResp(contract));
            result.add(buildResp(contract, supplierMap));
        }
        return result;
    }
    private ErpSupplierContractRespVO buildResp(ErpSupplierContractDO contract) {
    private ErpSupplierContractRespVO buildResp(ErpSupplierContractDO contract, Map<Long, SrmSupplierRespDTO> supplierMap) {
        ErpSupplierContractRespVO vo = BeanUtils.toBean(contract, ErpSupplierContractRespVO.class);
        // 供应商名称(列表、详情、导出都要反显,否则供应商列是空的)
        MapUtils.findAndThen(supplierMap, vo.getSupplierId(), supplier -> vo.setSupplierName(supplier.getName()));
        // 执行进度:关联的采购订单数量与金额合计
        List<ErpPurchaseOrderDO> orders = purchaseOrderMapper.selectListByContractId(contract.getId());
        vo.setOrderCount(orders.size());
@@ -131,4 +152,12 @@
        return vo;
    }
    private Map<Long, SrmSupplierRespDTO> getSupplierMap(Collection<Long> supplierIds) {
        if (CollUtil.isEmpty(supplierIds)) {
            return java.util.Collections.emptyMap();
        }
        return srmSupplierApi.getSupplierList(supplierIds).getCheckedData().stream()
                .collect(Collectors.toMap(SrmSupplierRespDTO::getId, v -> v, (a, b) -> a));
    }
}