| | |
| | | import cn.hutool.core.collection.CollUtil; |
| | | import cn.hutool.core.lang.Assert; |
| | | import cn.hutool.core.util.ObjectUtil; |
| | | import cn.hutool.core.util.StrUtil; |
| | | import cn.iocoder.yudao.framework.common.exception.ServiceException; |
| | | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| | | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| | | import cn.iocoder.yudao.module.erp.controller.admin.purchase.vo.invoice.ErpPurchaseInvoiceImportExcelVO; |
| | | import cn.iocoder.yudao.module.erp.controller.admin.purchase.vo.invoice.ErpPurchaseInvoiceImportReqVO; |
| | | import cn.iocoder.yudao.module.erp.controller.admin.purchase.vo.invoice.ErpPurchaseInvoiceImportRespVO; |
| | | import cn.iocoder.yudao.module.erp.controller.admin.purchase.vo.invoice.ErpPurchaseInvoicePageReqVO; |
| | | import cn.iocoder.yudao.module.erp.controller.admin.purchase.vo.invoice.ErpPurchaseInvoiceSaveReqVO; |
| | | import cn.iocoder.yudao.module.erp.dal.dataobject.purchase.ErpPurchaseInvoiceDO; |
| | | import cn.iocoder.yudao.module.erp.dal.dataobject.purchase.ErpPurchaseOrderDO; |
| | | import cn.iocoder.yudao.module.erp.dal.mysql.finance.ErpFinancePaymentMapper; |
| | | import cn.iocoder.yudao.module.erp.dal.mysql.purchase.ErpPurchaseInvoiceMapper; |
| | | import cn.iocoder.yudao.module.erp.dal.mysql.purchase.ErpPurchaseOrderMapper; |
| | | import cn.iocoder.yudao.module.erp.dal.redis.no.ErpNoRedisDAO; |
| | | import cn.iocoder.yudao.module.system.api.storage.StorageAttachmentApi; |
| | | import jakarta.annotation.Resource; |
| | |
| | | import org.springframework.validation.annotation.Validated; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.util.ArrayList; |
| | | import java.util.Collection; |
| | | import java.util.LinkedHashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; |
| | | import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.filterList; |
| | | import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.getSumValue; |
| | | import static cn.iocoder.yudao.module.erp.enums.ErrorCodeConstants.*; |
| | | |
| | |
| | | |
| | | @Resource |
| | | private ErpPurchaseOrderService purchaseOrderService; |
| | | |
| | | @Resource |
| | | private ErpPurchaseOrderMapper purchaseOrderMapper; |
| | | |
| | | @Resource |
| | | private StorageAttachmentApi storageAttachmentApi; |
| | |
| | | return invoiceMapper.selectListBySupplierId(supplierId); |
| | | } |
| | | |
| | | @Override |
| | | public ErpPurchaseInvoiceImportRespVO importPurchaseInvoiceList(List<ErpPurchaseInvoiceImportExcelVO> importInvoices, |
| | | ErpPurchaseInvoiceImportReqVO importReqVO) { |
| | | // 1. 校验非空(过滤完全空白的行) |
| | | importInvoices = filterList(importInvoices, item -> StrUtil.isNotBlank(item.getPurchaseOrderNo())); |
| | | if (CollUtil.isEmpty(importInvoices)) { |
| | | throw exception(PURCHASE_INVOICE_IMPORT_LIST_IS_EMPTY); |
| | | } |
| | | // 2. 逐行创建来票(一行一张,来票号由系统生成) |
| | | ErpPurchaseInvoiceImportRespVO respVO = ErpPurchaseInvoiceImportRespVO.builder() |
| | | .createPurchaseInvoiceNos(new ArrayList<>()) |
| | | .failurePurchaseInvoiceNos(new LinkedHashMap<>()) |
| | | .build(); |
| | | for (int i = 0; i < importInvoices.size(); i++) { |
| | | ErpPurchaseInvoiceImportExcelVO row = importInvoices.get(i); |
| | | String rowKey = StrUtil.isNotBlank(row.getInvoiceNo()) ? row.getInvoiceNo() : ("第" + (i + 1) + "行"); |
| | | try { |
| | | ErpPurchaseInvoiceSaveReqVO createReqVO = buildPurchaseInvoiceImportSaveReqVO(row); |
| | | Long invoiceId = createPurchaseInvoice(createReqVO); |
| | | respVO.getCreatePurchaseInvoiceNos().add(invoiceMapper.selectById(invoiceId).getNo()); |
| | | } catch (ServiceException ex) { |
| | | respVO.getFailurePurchaseInvoiceNos().put(rowKey, ex.getMessage()); |
| | | } |
| | | } |
| | | return respVO; |
| | | } |
| | | |
| | | /** |
| | | * 将一行来票转换成创建 Request VO |
| | | */ |
| | | private ErpPurchaseInvoiceSaveReqVO buildPurchaseInvoiceImportSaveReqVO(ErpPurchaseInvoiceImportExcelVO row) { |
| | | // 1. 校验来票日期与金额 |
| | | if (row.getInvoiceTime() == null) { |
| | | throw exception(PURCHASE_INVOICE_IMPORT_INVOICE_TIME_REQUIRED); |
| | | } |
| | | if (row.getPrice() == null) { |
| | | throw exception(PURCHASE_INVOICE_IMPORT_PRICE_REQUIRED); |
| | | } |
| | | // 2. 按采购订单号解析采购订单(供应商由 createPurchaseInvoice 以订单为准回填) |
| | | ErpPurchaseOrderDO purchaseOrder = purchaseOrderMapper.selectByNo(row.getPurchaseOrderNo()); |
| | | if (purchaseOrder == null) { |
| | | throw exception(PURCHASE_INVOICE_IMPORT_ORDER_NOT_EXISTS, row.getPurchaseOrderNo()); |
| | | } |
| | | // 3. 组装保存 VO |
| | | return new ErpPurchaseInvoiceSaveReqVO() |
| | | .setPurchaseOrderId(purchaseOrder.getId()) |
| | | .setInvoiceNo(row.getInvoiceNo()) |
| | | .setInvoiceTitle(row.getInvoiceTitle()) |
| | | .setPrice(row.getPrice()) |
| | | .setInvoiceTime(row.getInvoiceTime()) |
| | | .setRemark(row.getRemark()); |
| | | } |
| | | |
| | | } |