From 336275bafca413d0d5f0113c91c9b287c4a4dae1 Mon Sep 17 00:00:00 2001 From: chenrui <1187576398@qq.com> Date: 星期二, 20 五月 2025 17:45:50 +0800 Subject: [PATCH] 回款台账 --- src/main/resources/mapper/sales/InvoiceRegistrationProductMapper.xml | 44 +++++++ src/main/java/com/ruoyi/sales/pojo/InvoiceLedger.java | 15 -- src/main/java/com/ruoyi/sales/dto/InvoiceRegistrationProductDto.java | 40 ++++++ src/main/resources/mapper/sales/InvoiceLedgerMapper.xml | 38 ++++++ src/main/java/com/ruoyi/sales/service/impl/InvoiceLedgerServiceImpl.java | 110 +++++++++++++---- src/main/java/com/ruoyi/sales/controller/InvoiceLedgerController.java | 33 +++++ src/main/java/com/ruoyi/sales/mapper/InvoiceLedgerMapper.java | 9 + src/main/java/com/ruoyi/sales/mapper/InvoiceRegistrationProductMapper.java | 11 + src/main/java/com/ruoyi/sales/service/InvoiceLedgerService.java | 21 +++ 9 files changed, 274 insertions(+), 47 deletions(-) diff --git a/src/main/java/com/ruoyi/sales/controller/InvoiceLedgerController.java b/src/main/java/com/ruoyi/sales/controller/InvoiceLedgerController.java index ae7c5e7..650dbaa 100644 --- a/src/main/java/com/ruoyi/sales/controller/InvoiceLedgerController.java +++ b/src/main/java/com/ruoyi/sales/controller/InvoiceLedgerController.java @@ -3,6 +3,9 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.framework.web.domain.AjaxResult; import com.ruoyi.sales.dto.InvoiceLedgerDto; +import com.ruoyi.sales.dto.InvoiceRegistrationProductDto; +import com.ruoyi.sales.mapper.InvoiceRegistrationProductMapper; +import com.ruoyi.sales.pojo.InvoiceRegistrationProduct; import com.ruoyi.sales.service.InvoiceLedgerService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -19,14 +22,17 @@ @Autowired private InvoiceLedgerService invoiceLedgerService; + @Autowired + private InvoiceRegistrationProductMapper invoiceRegistrationProductMapper; + /** * 寮�绁ㄥ彴璐︽柊澧� - * @param invoiceLedgerDto + * @param productDto * @return */ @PostMapping("/saveOrUpdate") - public AjaxResult invoiceLedgerSaveOrUpdate(@RequestBody InvoiceLedgerDto invoiceLedgerDto) { - invoiceLedgerService.invoiceLedgerSaveOrUpdate(invoiceLedgerDto); + public AjaxResult invoiceLedgerSaveOrUpdate(@RequestBody InvoiceRegistrationProductDto productDto) { + invoiceLedgerService.invoiceLedgerSaveOrUpdate(productDto); return AjaxResult.success(); } @@ -146,4 +152,25 @@ } } + /** + * 浜у搧寮�绁ㄨ褰曟煡璇� + * @param page + * @param registrationProductDto + * @return + */ + @GetMapping("/registrationProductPage") + public AjaxResult registrationProductPage(Page page, InvoiceRegistrationProductDto registrationProductDto) { + return AjaxResult.success(invoiceLedgerService.registrationProductPage(page,registrationProductDto)); + } + + /** + * 浜у搧寮�绁ㄨ鎯� + * @param id + * @return + */ + @GetMapping("/invoiceLedgerProductInfo") + public AjaxResult invoiceLedgerProductDetail(Integer id) { + return AjaxResult.success(invoiceLedgerService.invoiceLedgerProductDetail(id)); + } + } diff --git a/src/main/java/com/ruoyi/sales/dto/InvoiceRegistrationProductDto.java b/src/main/java/com/ruoyi/sales/dto/InvoiceRegistrationProductDto.java index 9a86ebd..13819da 100644 --- a/src/main/java/com/ruoyi/sales/dto/InvoiceRegistrationProductDto.java +++ b/src/main/java/com/ruoyi/sales/dto/InvoiceRegistrationProductDto.java @@ -1,9 +1,49 @@ package com.ruoyi.sales.dto; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.vo.FileVo; import com.ruoyi.sales.pojo.InvoiceRegistrationProduct; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.math.BigDecimal; +import java.time.LocalDate; +import java.util.List; @Data public class InvoiceRegistrationProductDto extends InvoiceRegistrationProduct { + @ApiModelProperty(name = "瀹㈡埛鍚堝悓鍙�") + private String customerContractNo; + + @ApiModelProperty(name = "瀹㈡埛鍚嶇О") + private String customerName; + + @ApiModelProperty(name = "閿�鍞悎鍚屽彿") + private String salesContractNo; + + @ApiModelProperty(name = "闄勪欢") + private List<FileVo> fileList; + + @ApiModelProperty(value = "鍙戠エ鍙�") + private String invoiceNo; + + @ApiModelProperty(value = "鍙戠エ閲戦") + private BigDecimal invoiceTotal; + + @ApiModelProperty(value = "寮�绁ㄤ汉") + private String invoicePerson; + + @ApiModelProperty(value = "寮�绁ㄦ椂闂�") + @JsonFormat(pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private LocalDate invoiceDate; + + @ApiModelProperty(value = "寮�绁ㄥ彴璐d") + private Integer invoiceLedgerId; + + @ApiModelProperty(value = "鍙戠エ鏂囦欢鍚�") + private String invoiceFileName; + } diff --git a/src/main/java/com/ruoyi/sales/mapper/InvoiceLedgerMapper.java b/src/main/java/com/ruoyi/sales/mapper/InvoiceLedgerMapper.java index 57a2cd0..f018413 100644 --- a/src/main/java/com/ruoyi/sales/mapper/InvoiceLedgerMapper.java +++ b/src/main/java/com/ruoyi/sales/mapper/InvoiceLedgerMapper.java @@ -4,7 +4,9 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.sales.dto.InvoiceLedgerDto; +import com.ruoyi.sales.dto.InvoiceRegistrationProductDto; import com.ruoyi.sales.pojo.InvoiceLedger; +import com.ruoyi.sales.pojo.InvoiceRegistrationProduct; import org.apache.ibatis.annotations.Param; import java.util.List; @@ -41,4 +43,11 @@ */ IPage<InvoiceLedgerDto> invoiceLedgerSalesAccount(Page page, InvoiceLedgerDto invoiceLedgerDto); + /** + * 浜у搧寮�绁ㄥ彴璐﹁鎯� + * @param id + * @return + */ + InvoiceRegistrationProductDto invoiceLedgerProductInfo(Integer id); + } diff --git a/src/main/java/com/ruoyi/sales/mapper/InvoiceRegistrationProductMapper.java b/src/main/java/com/ruoyi/sales/mapper/InvoiceRegistrationProductMapper.java index 6173459..1c1ae7a 100644 --- a/src/main/java/com/ruoyi/sales/mapper/InvoiceRegistrationProductMapper.java +++ b/src/main/java/com/ruoyi/sales/mapper/InvoiceRegistrationProductMapper.java @@ -1,7 +1,8 @@ package com.ruoyi.sales.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.ruoyi.sales.dto.InvoiceRegistrationDto; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.sales.dto.InvoiceRegistrationProductDto; import com.ruoyi.sales.pojo.InvoiceRegistrationProduct; import org.apache.ibatis.annotations.Param; @@ -16,4 +17,12 @@ * @return */ List<InvoiceRegistrationProductDto> invoiceRegistrationProductList(@Param("invoiceRegistrationProductDto") InvoiceRegistrationProductDto invoiceRegistrationProductDto); + + /** + * 寮�绁ㄧ櫥璁颁骇鍝佸垎椤垫煡璇� + * @param page + * @param invoiceRegistrationProductDto + * @return + */ + IPage<InvoiceRegistrationProductDto> invoiceRegistrationProductPage(Page page, @Param("invoiceRegistrationProductDto") InvoiceRegistrationProductDto invoiceRegistrationProductDto); } diff --git a/src/main/java/com/ruoyi/sales/pojo/InvoiceLedger.java b/src/main/java/com/ruoyi/sales/pojo/InvoiceLedger.java index 9f4c0d8..802ae90 100644 --- a/src/main/java/com/ruoyi/sales/pojo/InvoiceLedger.java +++ b/src/main/java/com/ruoyi/sales/pojo/InvoiceLedger.java @@ -22,23 +22,14 @@ @TableId(type = IdType.AUTO) private Integer id; - @ApiModelProperty(value = "閿�鍞彴璐ales_ledger") - private Integer salesLedgerId; - - @ApiModelProperty(value = "閿�鍞悎鍚屽彿") - private String salesContractNo; - - @ApiModelProperty(value = "瀹㈡埛鍚嶇ОID") - private Integer customerId; + @ApiModelProperty(value = "invoice_registration_product琛ㄤ富閿�") + private Integer invoiceRegistrationProductId; @ApiModelProperty(value = "鍙戠エ鍙�") private String invoiceNo; @ApiModelProperty(value = "鍙戠エ閲戦") - private BigDecimal invoiceAmount; - - @ApiModelProperty(value = "绋庣巼") - private BigDecimal taxRate; + private BigDecimal invoiceTotal; @ApiModelProperty(value = "寮�绁ㄤ汉") private String invoicePerson; diff --git a/src/main/java/com/ruoyi/sales/service/InvoiceLedgerService.java b/src/main/java/com/ruoyi/sales/service/InvoiceLedgerService.java index 7e69edc..5a3b6fb 100644 --- a/src/main/java/com/ruoyi/sales/service/InvoiceLedgerService.java +++ b/src/main/java/com/ruoyi/sales/service/InvoiceLedgerService.java @@ -4,7 +4,9 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.common.vo.FileVo; import com.ruoyi.sales.dto.InvoiceLedgerDto; +import com.ruoyi.sales.dto.InvoiceRegistrationProductDto; import com.ruoyi.sales.pojo.InvoiceLedgerFile; +import com.ruoyi.sales.pojo.InvoiceRegistrationProduct; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; @@ -15,10 +17,10 @@ /** * 寮�绁ㄥ彴璐︽柊澧� - * @param invoiceLedgerDto + * @param productDto * @return */ - int invoiceLedgerSaveOrUpdate( InvoiceLedgerDto invoiceLedgerDto); + int invoiceLedgerSaveOrUpdate( InvoiceRegistrationProductDto productDto); /** * 寮�绁ㄥ彴璐﹀垹闄� @@ -87,4 +89,19 @@ IPage<InvoiceLedgerDto> invoiceLedgerSalesAccount(Page page, InvoiceLedgerDto invoiceLedgerDto); BigDecimal getInvoiceAmount(); + + /** + * 寮�绁ㄧ櫥璁颁骇鍝佸垎椤垫煡璇� + * @param page + * @param registrationProductDto + * @return + */ + IPage<InvoiceRegistrationProductDto> registrationProductPage(Page page, InvoiceRegistrationProductDto registrationProductDto); + + /** + * 浜у搧寮�绁ㄥ彴璐﹁鎯� + * @param id + * @return + */ + InvoiceRegistrationProductDto invoiceLedgerProductDetail(Integer id); } diff --git a/src/main/java/com/ruoyi/sales/service/impl/InvoiceLedgerServiceImpl.java b/src/main/java/com/ruoyi/sales/service/impl/InvoiceLedgerServiceImpl.java index 2fc0eb7..f561a72 100644 --- a/src/main/java/com/ruoyi/sales/service/impl/InvoiceLedgerServiceImpl.java +++ b/src/main/java/com/ruoyi/sales/service/impl/InvoiceLedgerServiceImpl.java @@ -8,12 +8,15 @@ import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.common.vo.FileVo; import com.ruoyi.sales.dto.InvoiceLedgerDto; +import com.ruoyi.sales.dto.InvoiceRegistrationProductDto; import com.ruoyi.sales.excel.InvoiceLedgerExcelDto; import com.ruoyi.sales.mapper.InvoiceLedgerFileMapper; import com.ruoyi.sales.mapper.InvoiceLedgerMapper; +import com.ruoyi.sales.mapper.InvoiceRegistrationProductMapper; import com.ruoyi.sales.mapper.ReceiptPaymentMapper; import com.ruoyi.sales.pojo.InvoiceLedger; import com.ruoyi.sales.pojo.InvoiceLedgerFile; +import com.ruoyi.sales.pojo.InvoiceRegistrationProduct; import com.ruoyi.sales.pojo.ReceiptPayment; import com.ruoyi.sales.service.InvoiceLedgerService; import org.apache.commons.collections4.CollectionUtils; @@ -30,6 +33,7 @@ import java.math.BigDecimal; import java.time.LocalDate; import java.time.YearMonth; +import java.util.Collections; import java.util.List; import java.util.Objects; import java.util.UUID; @@ -48,36 +52,48 @@ private InvoiceLedgerFileMapper invoiceLedgerFileMapper; @Autowired - private ReceiptPaymentMapper receiptPaymentMapper; + private InvoiceRegistrationProductMapper invoiceRegistrationProductMapper; /** * 寮�绁ㄥ彴璐︽柊澧� - * @param invoiceLedgerDto + * @param productDto * @return */ @Override @Transactional(rollbackFor = Exception.class) - public int invoiceLedgerSaveOrUpdate(InvoiceLedgerDto invoiceLedgerDto) { - InvoiceLedger invoiceLedger = new InvoiceLedger(); - BeanUtils.copyProperties(invoiceLedgerDto, invoiceLedger); + public int invoiceLedgerSaveOrUpdate(InvoiceRegistrationProductDto productDto) { + // 鍒ゆ柇鏄惁宸茬粡鏂板寮�绁ㄥ彴璐� + QueryWrapper<InvoiceLedger> ledgerQueryWrapper = new QueryWrapper<>(); + ledgerQueryWrapper.eq("invoice_registration_product_id", productDto.getId()); + InvoiceLedger invoiceLedger = invoiceLedgerMapper.selectOne(ledgerQueryWrapper); int result; - if(invoiceLedgerDto.getId() == null){ + if(ObjectUtils.isEmpty(invoiceLedger)){ + invoiceLedger = new InvoiceLedger(); + invoiceLedger.setInvoiceRegistrationProductId(productDto.getId()); + invoiceLedger.setInvoiceNo(productDto.getInvoiceNo()); + invoiceLedger.setInvoiceTotal(productDto.getInvoiceTotal()); + invoiceLedger.setInvoiceDate(productDto.getInvoiceDate()); + invoiceLedger.setInvoicePerson(productDto.getInvoicePerson()); result = invoiceLedgerMapper.insert(invoiceLedger); }else { + invoiceLedger.setInvoiceNo(productDto.getInvoiceNo()); + invoiceLedger.setInvoiceTotal(productDto.getInvoiceTotal()); + invoiceLedger.setInvoiceDate(productDto.getInvoiceDate()); + invoiceLedger.setInvoicePerson(productDto.getInvoicePerson()); result = invoiceLedgerMapper.updateById(invoiceLedger); //鍒犻櫎鎵�鏈夐檮浠跺叧鑱� LambdaQueryWrapper<InvoiceLedgerFile> delWrapper = new LambdaQueryWrapper<>(); - delWrapper.eq(InvoiceLedgerFile::getInvoiceLedgerId, invoiceLedgerDto.getId()); + delWrapper.eq(InvoiceLedgerFile::getInvoiceLedgerId, invoiceLedger.getId()); invoiceLedgerFileMapper.delete(delWrapper); } - List<FileVo> fileList = invoiceLedgerDto.getFileList(); + List<FileVo> fileList = productDto.getFileList(); if(CollectionUtils.isNotEmpty(fileList)){ - fileList.forEach(fileVo -> { + for (FileVo fileVo : fileList) { InvoiceLedgerFile invoiceLedgerFile = new InvoiceLedgerFile(); BeanUtils.copyProperties(fileVo, invoiceLedgerFile); invoiceLedgerFile.setInvoiceLedgerId(invoiceLedger.getId()); invoiceLedgerFileMapper.insert(invoiceLedgerFile); - }); + } } return result; } @@ -226,20 +242,20 @@ @Override public IPage<InvoiceLedgerDto> invoiceLedgerSalesAccount(Page page, InvoiceLedgerDto invoiceLedgerDto) { IPage<InvoiceLedgerDto> invoiceLedgerDtoIPage = invoiceLedgerMapper.invoiceLedgerSalesAccount(page, invoiceLedgerDto); - for (InvoiceLedgerDto record : invoiceLedgerDtoIPage.getRecords()) { - QueryWrapper<ReceiptPayment> queryWrapper = new QueryWrapper<>(); - queryWrapper.eq("customer_id", record.getCustomerId()); - List<ReceiptPayment> receiptPaymentList = receiptPaymentMapper.selectList(queryWrapper); - BigDecimal totalAmount = BigDecimal.ZERO; - if(!CollectionUtils.isEmpty(receiptPaymentList)){ - for (ReceiptPayment receiptPayment : receiptPaymentList) { - totalAmount = totalAmount.add(receiptPayment.getInvoiceAmount()); - } - } - BigDecimal unReceiptPaymentAmount = record.getInvoiceAmount().subtract(totalAmount); - record.setReceiptPaymentAmount(totalAmount); - record.setUnReceiptPaymentAmount(unReceiptPaymentAmount); - } +// for (InvoiceLedgerDto record : invoiceLedgerDtoIPage.getRecords()) { +// QueryWrapper<ReceiptPayment> queryWrapper = new QueryWrapper<>(); +// queryWrapper.eq("customer_id", record.getCustomerId()); +// List<ReceiptPayment> receiptPaymentList = receiptPaymentMapper.selectList(queryWrapper); +// BigDecimal totalAmount = BigDecimal.ZERO; +// if(!CollectionUtils.isEmpty(receiptPaymentList)){ +// for (ReceiptPayment receiptPayment : receiptPaymentList) { +// totalAmount = totalAmount.add(receiptPayment.getInvoiceAmount()); +// } +// } +// BigDecimal unReceiptPaymentAmount = record.getInvoiceAmount().subtract(totalAmount); +// record.setReceiptPaymentAmount(totalAmount); +// record.setUnReceiptPaymentAmount(unReceiptPaymentAmount); +// } return invoiceLedgerDtoIPage; } @@ -256,12 +272,48 @@ // 鎵ц鏌ヨ骞惰绠楁�诲拰 List<InvoiceLedger> invoiceLedgers = invoiceLedgerMapper.selectList(queryWrapper); - BigDecimal totalContractAmount = invoiceLedgers.stream() - .map(InvoiceLedger::getInvoiceAmount) - .filter(Objects::nonNull) - .reduce(BigDecimal.ZERO, BigDecimal::add); +// BigDecimal totalContractAmount = invoiceLedgers.stream() +// .map(InvoiceLedger::getInvoiceAmount) +// .filter(Objects::nonNull) +// .reduce(BigDecimal.ZERO, BigDecimal::add); +// +// return totalContractAmount; + return null; + } - return totalContractAmount; + /** + * 寮�绁ㄧ櫥璁颁骇鍝佸垎椤垫煡璇� + * @param page + * @param registrationProductDto + * @return + */ + @Override + public IPage<InvoiceRegistrationProductDto> registrationProductPage(Page page, InvoiceRegistrationProductDto registrationProductDto) { + return invoiceRegistrationProductMapper.invoiceRegistrationProductPage(page,registrationProductDto); + } + + /** + * 浜у搧寮�绁ㄥ彴璐﹁鎯� + * @param id + * @return + */ + @Override + public InvoiceRegistrationProductDto invoiceLedgerProductDetail(Integer id) { + InvoiceRegistrationProductDto invoiceRegistrationProductDto = invoiceLedgerMapper.invoiceLedgerProductInfo(id); + if(ObjectUtils.isEmpty(invoiceRegistrationProductDto)){ + throw new RuntimeException("浜у搧寮�绁ㄥ彴璐︽煡鎵惧け璐�"); + } + // 鏌ヨ闄勪欢 + QueryWrapper<InvoiceLedgerFile> queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("invoice_ledger_id", invoiceRegistrationProductDto.getInvoiceLedgerId()); + List<InvoiceLedgerFile> invoiceLedgerFileList = invoiceLedgerFileMapper.selectList(queryWrapper); + List<FileVo> fileList = invoiceLedgerFileList.stream().map(item -> { + FileVo fileVo = new FileVo(); + BeanUtils.copyProperties(item, fileVo); + return fileVo; + }).collect(Collectors.toList()); + invoiceRegistrationProductDto.setFileList(fileList); + return invoiceRegistrationProductDto; } } diff --git a/src/main/resources/mapper/sales/InvoiceLedgerMapper.xml b/src/main/resources/mapper/sales/InvoiceLedgerMapper.xml index e08366b..11d1538 100644 --- a/src/main/resources/mapper/sales/InvoiceLedgerMapper.xml +++ b/src/main/resources/mapper/sales/InvoiceLedgerMapper.xml @@ -122,5 +122,43 @@ T2.customer_name; </select> + <select id="invoiceLedgerProductInfo" resultType="com.ruoyi.sales.dto.InvoiceRegistrationProductDto"> + SELECT + T1.id , + T1.sales_ledger_id , + T1.sales_ledger_product_id , + T1.invoice_registration_id , + T1.product_category , + T1.specification_model , + T1.unit , + T1.quantity , + T1.tax_rate , + T1.tax_inclusive_unit_price , + T1.tax_inclusive_total_price , + T1.tax_exclusive_total_price , + T1.invoice_type , + T1.invoice_num , + T1.invoice_amount , + T1.no_invoice_num , + T1.no_invoice_amount , + T1.create_time , + T1.create_user , + T1.update_time , + T1.update_user , + T1.tenant_id, + T2.sales_contract_no, + T2.customer_contract_no, + T2.customer_name, + T3.invoice_no, + T3.invoice_total, + T3.invoice_person, + T3.invoice_date, + T3.id AS invoice_ledger_id + FROM invoice_registration_product T1 + LEFT JOIN sales_ledger T2 ON T1.sales_ledger_id = T2.id + LEFT JOIN invoice_ledger T3 ON T1.id = T3.invoice_registration_product_id + WHERE T1.id = #{id} + </select> + </mapper> \ No newline at end of file diff --git a/src/main/resources/mapper/sales/InvoiceRegistrationProductMapper.xml b/src/main/resources/mapper/sales/InvoiceRegistrationProductMapper.xml index 5c6f164..f414e75 100644 --- a/src/main/resources/mapper/sales/InvoiceRegistrationProductMapper.xml +++ b/src/main/resources/mapper/sales/InvoiceRegistrationProductMapper.xml @@ -35,4 +35,48 @@ </if> </where> </select> + + <select id="invoiceRegistrationProductPage" resultType="com.ruoyi.sales.dto.InvoiceRegistrationProductDto"> + SELECT + T1.id , + T1.sales_ledger_id , + T1.sales_ledger_product_id , + T1.invoice_registration_id , + T1.product_category , + T1.specification_model , + T1.unit , + T1.quantity , + T1.tax_rate , + T1.tax_inclusive_unit_price , + T1.tax_inclusive_total_price , + T1.tax_exclusive_total_price , + T1.invoice_type , + T1.invoice_num , + T1.invoice_amount , + T1.no_invoice_num , + T1.no_invoice_amount , + T1.create_time , + T1.create_user , + T1.update_time , + T1.update_user , + T1.tenant_id, + T2.sales_contract_no, + T2.customer_contract_no, + T2.customer_name, + T3.invoice_no, + T3.invoice_total, + T3.invoice_person, + T3.invoice_date, + T4.invoiceFileName + FROM invoice_registration_product T1 + LEFT JOIN sales_ledger T2 ON T1.sales_ledger_id = T2.id + LEFT JOIN invoice_ledger T3 ON T1.id = T3.invoice_registration_product_id + LEFT JOIN ( + SELECT + invoice_ledger_id, + GROUP_CONCAT( name ORDER BY id ASC SEPARATOR ' | ') AS invoiceFileName + FROM invoice_ledger_file GROUP BY invoice_ledger_id + ) T4 ON T4.invoice_ledger_id = T3.id + ORDER BY T1.create_time DESC + </select> </mapper> \ No newline at end of file -- Gitblit v1.9.3