| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | |
| | | 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; |
| | |
| | | private ErpSupplierContractService contractService; |
| | | @Resource |
| | | private ErpPurchaseOrderMapper purchaseOrderMapper; |
| | | @Resource |
| | | private StorageAttachmentApi storageAttachmentApi; |
| | | @Resource |
| | | private SrmSupplierApi srmSupplierApi; |
| | | |
| | | @PostMapping("/create") |
| | | @Operation(summary = "创建供应商合同") |
| | |
| | | @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") |
| | |
| | | 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()); |
| | |
| | | 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)); |
| | | } |
| | | |
| | | } |