| src/main/java/com/ruoyi/basic/enums/RecordTypeEnum.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/ruoyi/basic/utils/FileUtil.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/ruoyi/sales/dto/SalesLedgerDto.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/ruoyi/sales/mapper/SalesLedgerMapper.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/ruoyi/sales/service/ISalesLedgerService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/ruoyi/sales/vo/SalesLedgerVo.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/resources/application-dev-pro.yml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/resources/mapper/sales/SalesLedgerMapper.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/main/java/com/ruoyi/basic/enums/RecordTypeEnum.java
@@ -3,7 +3,10 @@ public enum RecordTypeEnum { SHIPPING_INFO("shipping_info"), INSPECTION_TASK("inspection_task"), PDA_VERSION("pda_version"); PDA_VERSION("pda_version"), SALES_LEDGER("sales_ledger"), SUPPLIER_MANAGE("supplier_manage"), APPROVAL_PROCESS("approval_process"); private final String type; RecordTypeEnum(String type) { this.type = type; } src/main/java/com/ruoyi/basic/utils/FileUtil.java
@@ -52,9 +52,6 @@ * @param storageBlobDTOS æä»¶ä¿¡æ¯ */ public void saveStorageAttachment(ApplicationTypeEnum application, RecordTypeEnum recordType, Long recordId, List<StorageBlobDTO> storageBlobDTOS) { if (CollectionUtils.isEmpty(storageBlobDTOS)) { throw new RuntimeException("æä»¶ä¿¡æ¯ä¸è½ä¸ºç©º"); } if (application == null) { throw new RuntimeException("æä»¶ç¨éä¸è½ä¸ºç©º"); } @@ -66,6 +63,9 @@ } // å 餿§éä»¶ä¿¡æ¯ deleteStorageAttachmentsByApplicationAndRecordTypeAndRecordId(application, recordType, recordId); if (CollectionUtils.isEmpty(storageBlobDTOS)) { return; } List<StorageAttachment> storageAttachments = new ArrayList<>(); for (StorageBlobDTO storageBlobDTO : storageBlobDTOS) { StorageAttachment storageAttachment = new StorageAttachment(); src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java
@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.basic.enums.ApplicationTypeEnum; import com.ruoyi.basic.enums.RecordTypeEnum; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.framework.aspectj.lang.annotation.Log; import com.ruoyi.framework.aspectj.lang.enums.BusinessType; @@ -19,6 +21,7 @@ import com.ruoyi.sales.pojo.SalesLedger; import com.ruoyi.sales.service.ICommonFileService; import com.ruoyi.sales.service.ISalesLedgerService; import com.ruoyi.sales.vo.SalesLedgerVo; import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.Operation; import io.swagger.annotations.ApiParam; @@ -28,6 +31,7 @@ import org.springframework.util.CollectionUtils; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import com.ruoyi.basic.utils.FileUtil; import java.io.FileNotFoundException; import java.io.IOException; @@ -55,6 +59,7 @@ private ICommonFileService commonFileService; private InvoiceLedgerMapper invoiceLedgerMapper; private ReceiptPaymentMapper receiptPaymentMapper; private final FileUtil fileUtil; /** * å¯¼å ¥éå®å°è´¦ @@ -149,13 +154,13 @@ @PostMapping("/export") public void export(HttpServletResponse response, SalesLedgerDto salesLedgerDto) { Page page = new Page(-1,-1); IPage<SalesLedger> salesLedgerIPage = listPage(page, salesLedgerDto); ExcelUtil<SalesLedger> util = new ExcelUtil<SalesLedger>(SalesLedger.class); IPage<SalesLedgerVo> salesLedgerIPage = listPage(page, salesLedgerDto); ExcelUtil<SalesLedgerVo> util = new ExcelUtil<SalesLedgerVo>(SalesLedgerVo.class); if(salesLedgerIPage == null){ util.exportExcel(response, new ArrayList<>(), "éå®å°è´¦æ°æ®"); return; } List<SalesLedger> list = salesLedgerIPage.getRecords(); List<SalesLedgerVo> list = salesLedgerIPage.getRecords(); util.exportExcel(response, list, "éå®å°è´¦æ°æ®"); } @@ -168,8 +173,8 @@ Page page = new Page(); page.setCurrent(-1); page.setSize(-1); IPage<SalesLedger> salesLedgerIPage = listPage(page, salesLedgerDto); ExcelUtil<SalesLedger> util = new ExcelUtil<SalesLedger>(SalesLedger.class); IPage<SalesLedgerVo> salesLedgerIPage = listPage(page, salesLedgerDto); ExcelUtil<SalesLedgerVo> util = new ExcelUtil<SalesLedgerVo>(SalesLedgerVo.class); util.exportExcel(response, salesLedgerIPage == null ? new ArrayList<>() : salesLedgerIPage.getRecords(), "导åºå¼ç¥¨ç»è®°å表"); } @@ -251,8 +256,8 @@ * æ¥è¯¢éå®å°è´¦å表 */ @GetMapping("/listPage") public IPage<SalesLedger> listPage(Page page, SalesLedgerDto salesLedgerDto) { IPage<SalesLedger> iPage = salesLedgerService.selectSalesLedgerListPage(page, salesLedgerDto); public IPage<SalesLedgerVo> listPage(Page page, SalesLedgerDto salesLedgerDto) { IPage<SalesLedgerVo> iPage = salesLedgerService.selectSalesLedgerListPage(page, salesLedgerDto); // æ¥è¯¢ç»æä¸ºç©º,ç´æ¥è¿å if (CollectionUtils.isEmpty(iPage.getRecords())) { @@ -295,10 +300,10 @@ } } for (SalesLedger salesLedger : iPage.getRecords()) { Long ledgerId = salesLedger.getId(); for (SalesLedgerVo salesLedgerVo : iPage.getRecords()) { Long ledgerId = salesLedgerVo.getId(); // ååæ»éé¢ BigDecimal contractAmount = salesLedger.getContractAmount() == null ? BigDecimal.ZERO : salesLedger.getContractAmount(); BigDecimal contractAmount = salesLedgerVo.getContractAmount() == null ? BigDecimal.ZERO : salesLedgerVo.getContractAmount(); // å¼ç¥¨æ»é¢å忬¾æ»é¢ BigDecimal invoiceTotal = invoiceTotals.getOrDefault(ledgerId, BigDecimal.ZERO); BigDecimal receiptPaymentAmountTotal = receiptTotals.getOrDefault(ledgerId, BigDecimal.ZERO); @@ -315,15 +320,17 @@ noReceiptPaymentAmountTotal = BigDecimal.ZERO; } salesLedger.setNoInvoiceAmountTotal(noInvoiceAmountTotal); salesLedger.setInvoiceTotal(invoiceTotal); salesLedger.setReceiptPaymentAmountTotal(receiptPaymentAmountTotal); salesLedger.setNoReceiptAmount(noReceiptPaymentAmountTotal); salesLedgerVo.setNoInvoiceAmountTotal(noInvoiceAmountTotal); salesLedgerVo.setInvoiceTotal(invoiceTotal); salesLedgerVo.setReceiptPaymentAmountTotal(receiptPaymentAmountTotal); salesLedgerVo.setNoReceiptAmount(noReceiptPaymentAmountTotal); // å¦æå·²ç»æè¿å¼ç¥¨æå款æä½,åä¸å 许ç¼è¾ boolean hasInvoiceOperation = invoiceTotal.compareTo(BigDecimal.ZERO) > 0; boolean hasReceiptOperation = receiptPaymentAmountTotal.compareTo(BigDecimal.ZERO) > 0; salesLedger.setIsEdit(!(hasInvoiceOperation || hasReceiptOperation)); salesLedgerVo.setIsEdit(!(hasInvoiceOperation || hasReceiptOperation)); salesLedgerVo.setStorageBlobVOs(fileUtil.getStorageBlobVOsByApplicationAndRecordTypeAndRecordId(ApplicationTypeEnum.FILE, RecordTypeEnum.SALES_LEDGER, ledgerId)); } if (ObjectUtils.isNotEmpty(salesLedgerDto.getStatus())) { src/main/java/com/ruoyi/sales/dto/SalesLedgerDto.java
@@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.fasterxml.jackson.annotation.JsonFormat; import com.ruoyi.basic.dto.StorageBlobDTO; import com.ruoyi.sales.pojo.CommonFile; import com.ruoyi.sales.pojo.SalesLedgerProduct; import io.swagger.v3.oas.annotations.media.Schema; @@ -58,4 +59,6 @@ @Schema(description = "äº¤è´§æ¥æ") private LocalDate deliveryDate; private List<StorageBlobDTO> storageBlobDTOs; } src/main/java/com/ruoyi/sales/mapper/SalesLedgerMapper.java
@@ -10,6 +10,7 @@ import com.ruoyi.sales.dto.SalesTrendDto; import com.ruoyi.sales.dto.StatisticsTableDto; import com.ruoyi.sales.pojo.SalesLedger; import com.ruoyi.sales.vo.SalesLedgerVo; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; @@ -52,7 +53,7 @@ * @param salesLedgerDto * @return */ IPage<SalesLedger> selectSalesLedgerListPage(Page page, @Param("salesLedgerDto") SalesLedgerDto salesLedgerDto); IPage<SalesLedgerVo> selectSalesLedgerListPage(Page page, @Param("salesLedgerDto") SalesLedgerDto salesLedgerDto); /** * ææä»½ç»è®¡è®¢åæ°ãéå®é¢ï¼æ¯æäº§å大类ã客æ·åç§°çéï¼ src/main/java/com/ruoyi/sales/service/ISalesLedgerService.java
@@ -11,6 +11,7 @@ import com.ruoyi.sales.dto.SalesLedgerDto; import com.ruoyi.sales.pojo.SalesLedger; import com.ruoyi.sales.pojo.SalesLedgerProduct; import com.ruoyi.sales.vo.SalesLedgerVo; import org.springframework.web.multipart.MultipartFile; import jakarta.annotation.Nullable; @@ -47,7 +48,7 @@ List<MonthlyAmountDto> getAmountHalfYear(Integer type); IPage<SalesLedger> selectSalesLedgerListPage(Page page, SalesLedgerDto salesLedgerDto); IPage<SalesLedgerVo> selectSalesLedgerListPage(Page page, SalesLedgerDto salesLedgerDto); AjaxResult importData(MultipartFile file); src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
@@ -10,10 +10,13 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.account.service.AccountIncomeService; import com.ruoyi.basic.dto.CustomerPrivatePoolDto; import com.ruoyi.basic.enums.ApplicationTypeEnum; import com.ruoyi.basic.enums.RecordTypeEnum; import com.ruoyi.basic.mapper.CustomerMapper; import com.ruoyi.basic.mapper.CustomerPrivatePoolMapper; import com.ruoyi.basic.mapper.ProductModelMapper; import com.ruoyi.basic.pojo.Customer; import com.ruoyi.basic.utils.FileUtil; import com.ruoyi.common.enums.FileNameType; import com.ruoyi.common.enums.SaleEnum; import com.ruoyi.common.exception.base.BaseException; @@ -41,6 +44,7 @@ import com.ruoyi.sales.mapper.*; import com.ruoyi.sales.pojo.*; import com.ruoyi.sales.service.ISalesLedgerService; import com.ruoyi.sales.vo.SalesLedgerVo; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.io.FilenameUtils; @@ -111,6 +115,7 @@ private final PurchaseReturnOrderProductsMapper purchaseReturnOrderProductsMapper; private final SysUserMapper sysUserMapper; private final CustomerPrivatePoolMapper customerPrivatePoolMapper; private final FileUtil fileUtil; @Override public List<SalesLedger> selectSalesLedgerList(SalesLedgerDto salesLedgerDto) { @@ -317,7 +322,7 @@ } @Override public IPage<SalesLedger> selectSalesLedgerListPage(Page page, SalesLedgerDto salesLedgerDto) { public IPage<SalesLedgerVo> selectSalesLedgerListPage(Page page, SalesLedgerDto salesLedgerDto) { return salesLedgerMapper.selectSalesLedgerListPage(page, salesLedgerDto); } @@ -575,47 +580,43 @@ @Override @Transactional(rollbackFor = Exception.class) public int addOrUpdateSalesLedger(SalesLedgerDto salesLedgerDto) { try { // 1. æ ¡éªå®¢æ·ä¿¡æ¯ CustomerPrivatePoolDto customer = customerPrivatePoolMapper.selectInfo(salesLedgerDto.getCustomerId()); if (customer == null) { throw new BaseException("客æ·ä¸åå¨"); } // 2. DTO转Entity SalesLedger salesLedger = convertToEntity(salesLedgerDto); salesLedger.setCustomerName(customer.getCustomerName()); salesLedger.setTenantId(customer.getTenantId()); // 3. æ°å¢ææ´æ°ä¸»è¡¨ if (salesLedger.getId() == null) { String contractNo = generateSalesContractNo(); salesLedger.setSalesContractNo(contractNo); salesLedgerMapper.insert(salesLedger); } else { salesLedgerMapper.updateById(salesLedger); } // 4. å¤çåè¡¨æ°æ® List<SalesLedgerProduct> productList = salesLedgerDto.getProductData(); if (productList != null && !productList.isEmpty()) { handleSalesLedgerProducts(salesLedger.getId(), productList, EnumUtil.fromCode(SaleEnum.class, salesLedgerDto.getType())); updateMainContractAmount( salesLedger.getId(), productList, SalesLedgerProduct::getTaxInclusiveTotalPrice, salesLedgerMapper, SalesLedger.class ); } // 5. è¿ç§»ä¸´æ¶æä»¶å°æ£å¼ç®å½ if (salesLedgerDto.getTempFileIds() != null && !salesLedgerDto.getTempFileIds().isEmpty()) { migrateTempFilesToFormal(salesLedger.getId(), salesLedgerDto.getTempFileIds()); } return 1; } catch (IOException e) { throw new BaseException("æä»¶è¿ç§»å¤±è´¥: " + e.getMessage()); // 1. æ ¡éªå®¢æ·ä¿¡æ¯ CustomerPrivatePoolDto customer = customerPrivatePoolMapper.selectInfo(salesLedgerDto.getCustomerId()); if (customer == null) { throw new BaseException("客æ·ä¸åå¨"); } // 2. DTO转Entity SalesLedger salesLedger = convertToEntity(salesLedgerDto); salesLedger.setCustomerName(customer.getCustomerName()); salesLedger.setTenantId(customer.getTenantId()); // 3. æ°å¢ææ´æ°ä¸»è¡¨ if (salesLedger.getId() == null) { String contractNo = generateSalesContractNo(); salesLedger.setSalesContractNo(contractNo); salesLedgerMapper.insert(salesLedger); } else { salesLedgerMapper.updateById(salesLedger); } // 4. å¤çåè¡¨æ°æ® List<SalesLedgerProduct> productList = salesLedgerDto.getProductData(); if (productList != null && !productList.isEmpty()) { handleSalesLedgerProducts(salesLedger.getId(), productList, EnumUtil.fromCode(SaleEnum.class, salesLedgerDto.getType())); updateMainContractAmount( salesLedger.getId(), productList, SalesLedgerProduct::getTaxInclusiveTotalPrice, salesLedgerMapper, SalesLedger.class ); } // 5. ä¿åæä»¶ if (salesLedgerDto.getStorageBlobDTOs() != null && !salesLedgerDto.getStorageBlobDTOs().isEmpty()) { fileUtil.saveStorageAttachment(ApplicationTypeEnum.FILE, RecordTypeEnum.SALES_LEDGER, salesLedger.getId(), salesLedgerDto.getStorageBlobDTOs()); } return 1; } /** src/main/java/com/ruoyi/sales/vo/SalesLedgerVo.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,13 @@ package com.ruoyi.sales.vo; import com.ruoyi.basic.dto.StorageBlobVO; import com.ruoyi.sales.pojo.SalesLedger; import lombok.Data; import java.util.List; @Data public class SalesLedgerVo extends SalesLedger { private List<StorageBlobVO> storageBlobVOs; } src/main/resources/application-dev-pro.yml
@@ -53,14 +53,6 @@ com.ruoyi: warn org.springframework: warn minio: endpoint: http://114.132.189.42/ port: 7019 secure: false accessKey: admin secretKey: 12345678 preview-expiry: 24 # é¢è§å°åé»è®¤24å°æ¶ default-bucket: uploadPath # ç¨æ·é ç½® user: password: @@ -79,7 +71,7 @@ druid: # ä¸»åºæ°æ®æº master: url: jdbc:mysql://localhost:3307/product-inventory-management-new-pro?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 url: jdbc:mysql://localhost:3306/product-inventory-management-new-pro?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 username: root password: 123456 # ä»åºæ°æ®æº @@ -259,6 +251,7 @@ # æ¯å¦å è®¸çææä»¶è¦çå°æ¬å°ï¼èªå®ä¹è·¯å¾ï¼ï¼é»è®¤ä¸å 许 allowOverwrite: false # æä»¶ä¸ä¼ é ç½® file: temp-dir: D:/ruoyi/temp/uploads # 临æ¶ç®å½ upload-dir: D:/ruoyi/prod/uploads # æ£å¼ç®å½ @@ -269,4 +262,4 @@ useLimit: 10 # ä½¿ç¨æ¬¡æ° compress: true # æ¯å¦å缩 needCompressSize: 10MB # å缩éå¼ compressQuality: 0.1 # å缩质é(0.0-1.0) compressQuality: 0.5 # å缩质é(0.0-1.0) src/main/resources/mapper/sales/SalesLedgerMapper.xml
@@ -42,7 +42,7 @@ </where> </select> <select id="selectSalesLedgerListPage" resultType="com.ruoyi.sales.pojo.SalesLedger"> <select id="selectSalesLedgerListPage" resultType="com.ruoyi.sales.vo.SalesLedgerVo"> SELECT T1.id, T1.sales_contract_no, T1.customer_contract_no,