| | |
| | | import cn.iocoder.yudao.module.crm.enums.common.CrmAuditStatusEnum; |
| | | import cn.iocoder.yudao.module.mdm.api.item.MdmItemApi; |
| | | import cn.iocoder.yudao.module.mdm.api.item.dto.MdmItemRespDTO; |
| | | import cn.iocoder.yudao.module.mdm.api.unit.MdmUnitMeasureApi; |
| | | import cn.iocoder.yudao.module.mdm.api.unit.dto.MdmUnitMeasureRespDTO; |
| | | import cn.iocoder.yudao.module.crm.service.business.CrmBusinessService; |
| | | import cn.iocoder.yudao.module.crm.service.contact.CrmContactService; |
| | | import cn.iocoder.yudao.module.crm.service.contract.CrmContractService; |
| | |
| | | |
| | | @Resource |
| | | private MdmItemApi mdmItemApi; |
| | | @Resource |
| | | private MdmUnitMeasureApi mdmUnitMeasureApi; |
| | | |
| | | @Resource |
| | | private AdminUserApi adminUserApi; |
| | |
| | | contractVO.setProducts(BeanUtils.toBean(businessProducts, CrmContractRespVO.Product.class, businessProductVO -> |
| | | MapUtils.findAndThen(itemMap, businessProductVO.getItemId(), |
| | | item -> businessProductVO.setItemCode(item.getCode()) |
| | | .setItemName(item.getName()).setItemBarCode(item.getBarCode())))); |
| | | .setItemName(item.getName()).setBarCode(item.getBarCode()) |
| | | .setItemSpecification(item.getSpecification())))); |
| | | // 拼接计量单位名称 |
| | | Map<Long, MdmUnitMeasureRespDTO> unitMap = mdmUnitMeasureApi.getUnitMeasureMap( |
| | | convertSet(businessProducts, CrmContractProductDO::getItemUnitId)); |
| | | contractVO.getProducts().forEach(product -> MapUtils.findAndThen(unitMap, product.getItemUnitId(), |
| | | unit -> product.setItemUnitName(unit.getName()))); |
| | | return contractVO; |
| | | } |
| | | |
| | |
| | | .orderDate("2026-01-01 10:00:00").startTime("2026-01-01").endTime("2026-12-31") |
| | | .discountPercent(new BigDecimal("0")).depositPrice(new BigDecimal("0")) |
| | | .productCode("ITEM001").productName("示例产品A") |
| | | .count(100).contractPrice(new BigDecimal("20.00")).remark("示例数据,导入前请替换") |
| | | .count(new BigDecimal("100")).contractPrice(new BigDecimal("20.00")).remark("示例数据,导入前请替换") |
| | | .build()); |
| | | ExcelUtils.write(response, "合同导入模板.xls", "合同", CrmContractImportExcelVO.class, list); |
| | | } |
| | |
| | | @Operation(summary = "导入合同") |
| | | @PreAuthorize("@ss.hasPermission('crm:contract:import')") |
| | | public CommonResult<CrmContractImportRespVO> importContractExcel(@RequestParam("file") MultipartFile file) throws Exception { |
| | | List<CrmContractImportExcelVO> list = ExcelUtils.read(file, CrmContractImportExcelVO.class); |
| | | // readFlat:把纵向合并单元格(同一张合同的多行明细)拉平,否则除首行外的主表字段会读不到 |
| | | List<CrmContractImportExcelVO> list = ExcelUtils.readFlat(file, CrmContractImportExcelVO.class); |
| | | return success(contractService.importContractList(list)); |
| | | } |
| | | |