package cn.iocoder.yudao.module.erp.controller.admin.purchase;
|
|
import cn.hutool.core.collection.CollUtil;
|
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.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.controller.admin.purchase.vo.contract.ErpSupplierContractPageReqVO;
|
import cn.iocoder.yudao.module.erp.controller.admin.purchase.vo.contract.ErpSupplierContractRespVO;
|
import cn.iocoder.yudao.module.erp.controller.admin.purchase.vo.contract.ErpSupplierContractSaveReqVO;
|
import cn.iocoder.yudao.module.erp.dal.dataobject.purchase.ErpPurchaseOrderDO;
|
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 io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Parameter;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
import jakarta.annotation.Resource;
|
import jakarta.servlet.http.HttpServletResponse;
|
import jakarta.validation.Valid;
|
import org.springframework.security.access.prepost.PreAuthorize;
|
import org.springframework.validation.annotation.Validated;
|
import org.springframework.web.bind.annotation.*;
|
|
import java.io.IOException;
|
import java.math.BigDecimal;
|
import java.util.List;
|
import java.util.Map;
|
import java.util.stream.Collectors;
|
|
import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
|
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
|
@Tag(name = "管理后台 - ERP 供应商合同")
|
@RestController
|
@RequestMapping("/erp/supplier-contract")
|
@Validated
|
public class ErpSupplierContractController {
|
|
@Resource
|
private ErpSupplierContractService contractService;
|
@Resource
|
private ErpPurchaseOrderMapper purchaseOrderMapper;
|
|
@PostMapping("/create")
|
@Operation(summary = "创建供应商合同")
|
@PreAuthorize("@ss.hasPermission('erp:supplier-contract:create')")
|
public CommonResult<Long> createContract(@Valid @RequestBody ErpSupplierContractSaveReqVO createReqVO) {
|
return success(contractService.createContract(createReqVO));
|
}
|
|
@PutMapping("/update")
|
@Operation(summary = "更新供应商合同")
|
@PreAuthorize("@ss.hasPermission('erp:supplier-contract:update')")
|
public CommonResult<Boolean> updateContract(@Valid @RequestBody ErpSupplierContractSaveReqVO updateReqVO) {
|
contractService.updateContract(updateReqVO);
|
return success(true);
|
}
|
|
@DeleteMapping("/delete")
|
@Operation(summary = "删除供应商合同")
|
@Parameter(name = "id", description = "编号", required = true)
|
@PreAuthorize("@ss.hasPermission('erp:supplier-contract:delete')")
|
public CommonResult<Boolean> deleteContract(@RequestParam("id") Long id) {
|
contractService.deleteContract(id);
|
return success(true);
|
}
|
|
@GetMapping("/get")
|
@Operation(summary = "获得供应商合同")
|
@Parameter(name = "id", description = "编号", required = true, example = "1024")
|
@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));
|
}
|
|
@GetMapping("/page")
|
@Operation(summary = "获得供应商合同分页")
|
@PreAuthorize("@ss.hasPermission('erp:supplier-contract:query')")
|
public CommonResult<PageResult<ErpSupplierContractRespVO>> getContractPage(
|
@Valid ErpSupplierContractPageReqVO pageReqVO) {
|
PageResult<ErpSupplierContractDO> pageResult = contractService.getContractPage(pageReqVO);
|
return success(new PageResult<>(buildRespList(pageResult.getList()), pageResult.getTotal()));
|
}
|
|
@GetMapping("/list-by-supplier")
|
@Operation(summary = "获得指定供应商的合同列表", description = "采购订单关联合同时使用,返回采购合同与合同模板")
|
@Parameter(name = "supplierId", description = "供应商编号", required = true, example = "1")
|
@PreAuthorize("@ss.hasPermission('erp:supplier-contract:query')")
|
public CommonResult<List<ErpSupplierContractRespVO>> getContractListBySupplier(
|
@RequestParam("supplierId") Long supplierId) {
|
return success(buildRespList(contractService.getContractListBySupplierId(supplierId)));
|
}
|
|
@GetMapping("/export-excel")
|
@Operation(summary = "导出供应商合同 Excel")
|
@PreAuthorize("@ss.hasPermission('erp:supplier-contract:export')")
|
@ApiAccessLog(operateType = EXPORT)
|
public void exportContractExcel(@Valid ErpSupplierContractPageReqVO pageReqVO,
|
HttpServletResponse response) throws IOException {
|
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
|
List<ErpSupplierContractDO> list = contractService.getContractPage(pageReqVO).getList();
|
ExcelUtils.write(response, "供应商合同.xls", "数据", ErpSupplierContractRespVO.class, buildRespList(list));
|
}
|
|
// ==================== 拼接 VO ====================
|
|
private List<ErpSupplierContractRespVO> buildRespList(List<ErpSupplierContractDO> list) {
|
if (CollUtil.isEmpty(list)) {
|
return java.util.Collections.emptyList();
|
}
|
List<ErpSupplierContractRespVO> result = new java.util.ArrayList<>(list.size());
|
for (ErpSupplierContractDO contract : list) {
|
result.add(buildResp(contract));
|
}
|
return result;
|
}
|
|
private ErpSupplierContractRespVO buildResp(ErpSupplierContractDO contract) {
|
ErpSupplierContractRespVO vo = BeanUtils.toBean(contract, ErpSupplierContractRespVO.class);
|
// 执行进度:关联的采购订单数量与金额合计
|
List<ErpPurchaseOrderDO> orders = purchaseOrderMapper.selectListByContractId(contract.getId());
|
vo.setOrderCount(orders.size());
|
vo.setOrderAmount(orders.stream()
|
.map(ErpPurchaseOrderDO::getTotalPrice)
|
.filter(java.util.Objects::nonNull)
|
.reduce(BigDecimal.ZERO, BigDecimal::add));
|
return vo;
|
}
|
|
}
|