From 53bdb26a0ae994418e92d93aab23d6f5e7225f37 Mon Sep 17 00:00:00 2001
From: liding <756868258@qq.com>
Date: 星期一, 19 五月 2025 16:20:56 +0800
Subject: [PATCH] 产品

---
 src/main/java/com/ruoyi/basic/controller/ProductController.java           |   85 ++++++++
 src/main/java/com/ruoyi/basic/dto/ProductTreeDto.java                     |   14 +
 src/main/java/com/ruoyi/sales/service/ReceiptPaymentService.java          |    3 
 src/main/java/com/ruoyi/basic/dto/ProductDto.java                         |   13 +
 src/main/java/com/ruoyi/basic/mapper/ProductModelMapper.java              |   15 +
 src/main/java/com/ruoyi/basic/service/IProductService.java                |   18 +
 src/main/java/com/ruoyi/sales/service/impl/InvoiceLedgerServiceImpl.java  |   26 ++
 src/main/java/com/ruoyi/sales/controller/InvoiceLedgerController.java     |   14 +
 src/main/java/com/ruoyi/basic/service/impl/ProductModelServiceImpl.java   |   52 +++++
 src/main/java/com/ruoyi/sales/service/ISalesLedgerService.java            |    9 
 src/main/java/com/ruoyi/sales/controller/ReceiptPaymentController.java    |   14 +
 src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java       |   25 ++
 src/main/java/com/ruoyi/basic/mapper/ProductMapper.java                   |    8 
 src/main/java/com/ruoyi/basic/pojo/Product.java                           |   29 ++
 src/main/java/com/ruoyi/basic/dto/ProductModelDto.java                    |    8 
 src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java    |   37 +++
 src/main/java/com/ruoyi/basic/controller/CustomerController.java          |   18 -
 src/main/java/com/ruoyi/basic/service/impl/ProductServiceImpl.java        |  118 +++++++++++
 src/main/java/com/ruoyi/sales/service/impl/ReceiptPaymentServiceImpl.java |   25 ++
 src/main/java/com/ruoyi/basic/pojo/ProductModel.java                      |   29 ++
 src/main/java/com/ruoyi/basic/service/IProductModelService.java           |   24 ++
 src/main/java/com/ruoyi/sales/service/InvoiceLedgerService.java           |    4 
 22 files changed, 566 insertions(+), 22 deletions(-)

diff --git a/src/main/java/com/ruoyi/basic/controller/CustomerController.java b/src/main/java/com/ruoyi/basic/controller/CustomerController.java
index cc94893..c1c66d9 100644
--- a/src/main/java/com/ruoyi/basic/controller/CustomerController.java
+++ b/src/main/java/com/ruoyi/basic/controller/CustomerController.java
@@ -1,24 +1,18 @@
 package com.ruoyi.basic.controller;
 
-import java.util.List;
-import javax.servlet.http.HttpServletResponse;
-
 import com.ruoyi.basic.pojo.Customer;
 import com.ruoyi.basic.service.ICustomerService;
-import lombok.AllArgsConstructor;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.framework.aspectj.lang.annotation.Log;
 import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
 import com.ruoyi.framework.web.controller.BaseController;
 import com.ruoyi.framework.web.domain.AjaxResult;
-import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.framework.web.page.TableDataInfo;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
 
 /**
  * 瀹㈡埛妗fController
diff --git a/src/main/java/com/ruoyi/basic/controller/ProductController.java b/src/main/java/com/ruoyi/basic/controller/ProductController.java
new file mode 100644
index 0000000..d042cb6
--- /dev/null
+++ b/src/main/java/com/ruoyi/basic/controller/ProductController.java
@@ -0,0 +1,85 @@
+package com.ruoyi.basic.controller;
+
+import com.ruoyi.basic.dto.ProductDto;
+import com.ruoyi.basic.dto.ProductModelDto;
+import com.ruoyi.basic.dto.ProductTreeDto;
+import com.ruoyi.basic.pojo.ProductModel;
+import com.ruoyi.basic.service.IProductModelService;
+import com.ruoyi.basic.service.IProductService;
+import com.ruoyi.framework.aspectj.lang.annotation.Log;
+import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
+import com.ruoyi.framework.web.controller.BaseController;
+import com.ruoyi.framework.web.domain.AjaxResult;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@RestController
+@AllArgsConstructor
+@RequestMapping("/basic/product")
+public class ProductController extends BaseController {
+
+    private IProductService productService;
+
+    private IProductModelService productModelService;
+
+
+    /**
+     * 鏌ヨ浜у搧
+     */
+    @GetMapping("/list")
+    public List<ProductTreeDto> selectProductList(ProductDto productDto) {
+        return productService.selectProductList(productDto);
+    }
+
+    /**
+     * 鏍规嵁id鏌ヨ浜у搧瑙勬牸
+     */
+    @GetMapping("/modelList")
+    public List<ProductModel> selectModelList(ProductDto productDto) {
+        return productModelService.selectModelList(productDto);
+    }
+
+    /**
+     * 鏂板鏇存柊浜у搧
+     */
+    @Log(title = "浜у搧", businessType = BusinessType.INSERT)
+    @PostMapping("/addOrEditProduct")
+    public AjaxResult addOrEditProduct(@RequestBody ProductDto productDto) {
+        return toAjax(productService.addOrEditProduct(productDto));
+    }
+
+    /**
+     * 鏂板鏇存柊浜у搧瑙勬牸鍨嬪彿
+     */
+    @Log(title = "浜у搧瑙勬牸鍨嬪彿", businessType = BusinessType.INSERT)
+    @PostMapping("/addOrEditProductModel")
+    public AjaxResult addOrEditProductModel(@RequestBody ProductModelDto productModelDto) {
+        return toAjax(productModelService.addOrEditProductModel(productModelDto));
+    }
+
+    /**
+     * 鍒犻櫎
+     */
+    @Log(title = "浜у搧", businessType = BusinessType.DELETE)
+    @DeleteMapping("/delProduct")
+    public AjaxResult remove(@RequestBody Long[] ids) {
+        if (ids == null || ids.length == 0) {
+            return AjaxResult.error("璇蜂紶鍏ヨ鍒犻櫎鐨処D");
+        }
+        return toAjax(productService.delProductByIds(ids));
+    }
+
+    /**
+     * 鍒犻櫎浜у搧瑙勬牸鍨嬪彿
+     */
+    @Log(title = "浜у搧瑙勬牸鍨嬪彿", businessType = BusinessType.DELETE)
+    @DeleteMapping("/delProductModel")
+    public AjaxResult delProductModel(@RequestBody Long[] ids) {
+        if (ids == null || ids.length == 0) {
+            return AjaxResult.error("璇蜂紶鍏ヨ鍒犻櫎鐨処D");
+        }
+        return toAjax(productModelService.delProductModel(ids));
+    }
+}
diff --git a/src/main/java/com/ruoyi/basic/dto/ProductDto.java b/src/main/java/com/ruoyi/basic/dto/ProductDto.java
new file mode 100644
index 0000000..7b38d99
--- /dev/null
+++ b/src/main/java/com/ruoyi/basic/dto/ProductDto.java
@@ -0,0 +1,13 @@
+package com.ruoyi.basic.dto;
+
+import com.ruoyi.basic.pojo.Product;
+import com.ruoyi.basic.pojo.ProductModel;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class ProductDto extends Product {
+
+    private List<ProductModel> productModelList;
+}
diff --git a/src/main/java/com/ruoyi/basic/dto/ProductModelDto.java b/src/main/java/com/ruoyi/basic/dto/ProductModelDto.java
new file mode 100644
index 0000000..577d75d
--- /dev/null
+++ b/src/main/java/com/ruoyi/basic/dto/ProductModelDto.java
@@ -0,0 +1,8 @@
+package com.ruoyi.basic.dto;
+
+import com.ruoyi.basic.pojo.ProductModel;
+import lombok.Data;
+
+@Data
+public class ProductModelDto extends ProductModel {
+}
diff --git a/src/main/java/com/ruoyi/basic/dto/ProductTreeDto.java b/src/main/java/com/ruoyi/basic/dto/ProductTreeDto.java
new file mode 100644
index 0000000..1fd8c81
--- /dev/null
+++ b/src/main/java/com/ruoyi/basic/dto/ProductTreeDto.java
@@ -0,0 +1,14 @@
+package com.ruoyi.basic.dto;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class ProductTreeDto {
+    private Long id;
+    private Long parentId;
+    private String productName;
+    private String label; // 鐢ㄤ簬鏍戝舰缁撴瀯鐨勬樉绀哄悕绉�
+    private List<ProductTreeDto> children;
+}
diff --git a/src/main/java/com/ruoyi/basic/mapper/ProductMapper.java b/src/main/java/com/ruoyi/basic/mapper/ProductMapper.java
new file mode 100644
index 0000000..1d016fb
--- /dev/null
+++ b/src/main/java/com/ruoyi/basic/mapper/ProductMapper.java
@@ -0,0 +1,8 @@
+package com.ruoyi.basic.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.basic.pojo.Product;
+
+public interface ProductMapper extends BaseMapper<Product> {
+
+}
diff --git a/src/main/java/com/ruoyi/basic/mapper/ProductModelMapper.java b/src/main/java/com/ruoyi/basic/mapper/ProductModelMapper.java
new file mode 100644
index 0000000..2248421
--- /dev/null
+++ b/src/main/java/com/ruoyi/basic/mapper/ProductModelMapper.java
@@ -0,0 +1,15 @@
+package com.ruoyi.basic.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.basic.pojo.ProductModel;
+
+
+/**
+ * 銆愯濉啓鍔熻兘鍚嶇О銆慚apper鎺ュ彛
+ *
+ * @author ruoyi
+ * @date 2025-05-19
+ */
+public interface ProductModelMapper extends BaseMapper<ProductModel> {
+ 
+}
diff --git a/src/main/java/com/ruoyi/basic/pojo/Product.java b/src/main/java/com/ruoyi/basic/pojo/Product.java
new file mode 100644
index 0000000..bd079d9
--- /dev/null
+++ b/src/main/java/com/ruoyi/basic/pojo/Product.java
@@ -0,0 +1,29 @@
+package com.ruoyi.basic.pojo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+@Data
+@TableName("product")
+public class Product {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 搴忓彿
+     */
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 鐖禝D
+     */
+    private Long parentId;
+
+    /**
+     *  浜у搧鍚嶇О
+     */
+    private String productName;
+}
diff --git a/src/main/java/com/ruoyi/basic/pojo/ProductModel.java b/src/main/java/com/ruoyi/basic/pojo/ProductModel.java
new file mode 100644
index 0000000..4d336b7
--- /dev/null
+++ b/src/main/java/com/ruoyi/basic/pojo/ProductModel.java
@@ -0,0 +1,29 @@
+package com.ruoyi.basic.pojo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+@Data
+@TableName("product_model")
+public class ProductModel {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 搴忓彿
+     */
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 鍏宠仈浜у搧id
+     */
+    private Long productId;
+
+    /**
+     * 瑙勬牸鍨嬪彿
+     */
+    private String model;
+}
diff --git a/src/main/java/com/ruoyi/basic/service/IProductModelService.java b/src/main/java/com/ruoyi/basic/service/IProductModelService.java
new file mode 100644
index 0000000..d5103ee
--- /dev/null
+++ b/src/main/java/com/ruoyi/basic/service/IProductModelService.java
@@ -0,0 +1,24 @@
+package com.ruoyi.basic.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.basic.dto.ProductDto;
+import com.ruoyi.basic.dto.ProductModelDto;
+import com.ruoyi.basic.pojo.ProductModel;
+
+import java.util.List;
+
+
+/**
+ * 銆愯濉啓鍔熻兘鍚嶇О銆慡ervice鎺ュ彛
+ *
+ * @author ruoyi
+ * @date 2025-05-19
+ */
+public interface IProductModelService extends IService<ProductModel> {
+
+    int addOrEditProductModel(ProductModelDto productModelDto);
+
+    int delProductModel(Long[] ids);
+
+    List<ProductModel> selectModelList(ProductDto productDto);
+}
diff --git a/src/main/java/com/ruoyi/basic/service/IProductService.java b/src/main/java/com/ruoyi/basic/service/IProductService.java
new file mode 100644
index 0000000..cd9bdff
--- /dev/null
+++ b/src/main/java/com/ruoyi/basic/service/IProductService.java
@@ -0,0 +1,18 @@
+package com.ruoyi.basic.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.basic.dto.ProductDto;
+import com.ruoyi.basic.dto.ProductTreeDto;
+import com.ruoyi.basic.pojo.Product;
+
+import java.util.List;
+
+public interface IProductService extends IService<Product> {
+    
+    int addOrEditProduct(ProductDto productDto);
+
+    int delProductByIds(Long[] ids);
+
+    List<ProductTreeDto> selectProductList(ProductDto productDto);
+
+}
diff --git a/src/main/java/com/ruoyi/basic/service/impl/ProductModelServiceImpl.java b/src/main/java/com/ruoyi/basic/service/impl/ProductModelServiceImpl.java
new file mode 100644
index 0000000..754d93f
--- /dev/null
+++ b/src/main/java/com/ruoyi/basic/service/impl/ProductModelServiceImpl.java
@@ -0,0 +1,52 @@
+package com.ruoyi.basic.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.basic.dto.ProductDto;
+import com.ruoyi.basic.dto.ProductModelDto;
+import com.ruoyi.basic.mapper.ProductModelMapper;
+import com.ruoyi.basic.pojo.ProductModel;
+import com.ruoyi.basic.service.IProductModelService;
+import com.ruoyi.common.utils.bean.BeanUtils;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * 銆愯濉啓鍔熻兘鍚嶇О銆慡ervice涓氬姟灞傚鐞�
+ *
+ * @author ruoyi
+ * @date 2025-05-19
+ */
+@Service
+@AllArgsConstructor
+public class ProductModelServiceImpl extends ServiceImpl<ProductModelMapper, ProductModel> implements IProductModelService {
+
+    private ProductModelMapper productModelMapper;
+
+    @Override
+    public int addOrEditProductModel(ProductModelDto productModelDto) {
+
+        if (productModelDto.getId() == null) {
+            ProductModel productModel = new ProductModel();
+            BeanUtils.copyProperties(productModelDto,productModel);
+            return productModelMapper.insert(productModel);
+        } else {
+            return productModelMapper.updateById(productModelDto);
+        }
+    }
+
+    @Override
+    public int delProductModel(Long[] ids) {
+        return productModelMapper.deleteBatchIds(Arrays.asList(ids));
+    }
+
+    @Override
+    public List<ProductModel> selectModelList(ProductDto productDto) {
+        LambdaQueryWrapper<ProductModel> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(ProductModel::getProductId, productDto.getId());
+        return productModelMapper.selectList(queryWrapper);
+    }
+}
diff --git a/src/main/java/com/ruoyi/basic/service/impl/ProductServiceImpl.java b/src/main/java/com/ruoyi/basic/service/impl/ProductServiceImpl.java
new file mode 100644
index 0000000..9825b39
--- /dev/null
+++ b/src/main/java/com/ruoyi/basic/service/impl/ProductServiceImpl.java
@@ -0,0 +1,118 @@
+package com.ruoyi.basic.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.basic.dto.ProductDto;
+import com.ruoyi.basic.dto.ProductTreeDto;
+import com.ruoyi.basic.mapper.ProductMapper;
+import com.ruoyi.basic.mapper.ProductModelMapper;
+import com.ruoyi.basic.pojo.Product;
+import com.ruoyi.basic.pojo.ProductModel;
+import com.ruoyi.basic.service.IProductService;
+import com.ruoyi.common.utils.bean.BeanUtils;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+@Service
+@AllArgsConstructor
+public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> implements IProductService {
+
+    private ProductMapper productMapper;
+
+    private ProductModelMapper productModelMapper;
+
+    @Override
+    public List<ProductTreeDto> selectProductList(ProductDto productDto) {
+        // 鏌ヨ鏍硅妭鐐癸紙parentId 涓� null锛�
+        LambdaQueryWrapper<Product> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.isNull(Product::getParentId);
+
+        // 濡傛灉鏈変骇鍝佸悕绉版潯浠讹紝娣诲姞鍒版煡璇腑
+        if (productDto.getProductName() != null && !productDto.getProductName().isEmpty()) {
+            queryWrapper.like(Product::getProductName, productDto.getProductName());
+        }
+
+        // 鏌ヨ鏍硅妭鐐瑰垪琛�
+        List<Product> rootProducts = productMapper.selectList(queryWrapper);
+
+        // 杞崲涓烘爲鑺傜偣骞堕�掑綊鏋勫缓瀛愭爲
+        List<ProductTreeDto> tree = new ArrayList<>();
+        for (Product product : rootProducts) {
+            ProductTreeDto node = convertToTreeDto(product);
+            node.setChildren(buildChildrenNodes(product.getId()));
+            tree.add(node);
+        }
+        return tree;
+    }
+
+    // 閫掑綊鏋勫缓瀛愯妭鐐�
+    private List<ProductTreeDto> buildChildrenNodes(Long parentId) {
+        // 鏌ヨ褰撳墠鐖惰妭鐐圭殑瀛愯妭鐐�
+        LambdaQueryWrapper<Product> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(Product::getParentId, parentId);
+        List<Product> childProducts = productMapper.selectList(queryWrapper);
+
+        // 杞崲瀛愯妭鐐瑰苟閫掑綊鏋勫缓瀹冧滑鐨勫瓙鏍�
+        List<ProductTreeDto> children = new ArrayList<>();
+        for (Product child : childProducts) {
+            ProductTreeDto childNode = convertToTreeDto(child);
+            childNode.setChildren(buildChildrenNodes(child.getId()));
+            children.add(childNode);
+        }
+
+        return children;
+    }
+
+    // 灏� Product 杞崲涓� ProductTreeDto
+    private ProductTreeDto convertToTreeDto(Product product) {
+        ProductTreeDto dto = new ProductTreeDto();
+        BeanUtils.copyProperties(product, dto);
+        dto.setLabel(product.getProductName()); // 璁剧疆 label 涓轰骇鍝佸悕绉�
+        dto.setChildren(new ArrayList<>());
+        return dto;
+    }
+
+    @Override
+    public int addOrEditProduct(ProductDto productDto) {
+        if (productDto.getId() == null) {
+            // 鏂板浜у搧閫昏緫
+            if (productDto.getParentId() == null) {
+                // 鑻ユ湭鎸囧畾鐖惰妭鐐癸紝榛樿涓烘牴鑺傜偣锛坧arentId 璁句负 null锛�
+                productDto.setParentId(null);
+            } else {
+                // 妫�鏌ョ埗鑺傜偣鏄惁瀛樺湪锛堝彲閫夛紝鏍规嵁涓氬姟闇�姹傦級
+                Product parent = productMapper.selectById(productDto.getParentId());
+                if (parent == null) {
+                    throw new IllegalArgumentException("鐖惰妭鐐逛笉瀛樺湪锛屾棤娉曟坊鍔犲瓙浜у搧");
+                }
+            }
+            return productMapper.insert(productDto);
+        } else {
+            // 缂栬緫浜у搧閫昏緫
+            // 妫�鏌ヤ骇鍝佹槸鍚﹀瓨鍦紙鍙�夛紝鏍规嵁涓氬姟闇�姹傦級
+            Product existingProduct = productMapper.selectById(productDto.getId());
+            if (existingProduct == null) {
+                throw new IllegalArgumentException("瑕佺紪杈戠殑浜у搧涓嶅瓨鍦�");
+            }
+            return productMapper.updateById(productDto);
+        }
+    }
+
+    @Override
+    public int delProductByIds(Long[] ids) {
+        // 1. 鍒犻櫎瀛愯〃 product_model 涓叧鑱旂殑鏁版嵁
+        LambdaQueryWrapper<ProductModel> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.in(ProductModel::getProductId, ids);
+        productModelMapper.delete(queryWrapper);
+
+        // 2. 鍒犻櫎涓昏〃 product 鏁版嵁
+        int deleteCount = productMapper.deleteBatchIds(Arrays.asList(ids));
+
+        return deleteCount;
+    }
+
+}
diff --git a/src/main/java/com/ruoyi/sales/controller/InvoiceLedgerController.java b/src/main/java/com/ruoyi/sales/controller/InvoiceLedgerController.java
index 99a3ea2..ae7c5e7 100644
--- a/src/main/java/com/ruoyi/sales/controller/InvoiceLedgerController.java
+++ b/src/main/java/com/ruoyi/sales/controller/InvoiceLedgerController.java
@@ -9,6 +9,7 @@
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletResponse;
+import java.math.BigDecimal;
 import java.util.List;
 
 @RestController
@@ -132,4 +133,17 @@
         return AjaxResult.success(invoiceLedgerService.invoiceLedgerSalesAccount(page,invoiceLedgerDto));
     }
 
+    /**
+     * 鏈湀寮�绁ㄩ噾棰�
+     */
+    @GetMapping("/getInvoiceAmount")
+    public AjaxResult getInvoiceAmount() {
+        try {
+            BigDecimal amount = invoiceLedgerService.getInvoiceAmount();
+            return AjaxResult.success(amount != null ? amount : BigDecimal.ZERO);
+        } catch (Exception e) {
+            return AjaxResult.error("鑾峰彇寮�绁ㄩ噾棰濆け璐ワ細" + e.getMessage());
+        }
+    }
+
 }
diff --git a/src/main/java/com/ruoyi/sales/controller/ReceiptPaymentController.java b/src/main/java/com/ruoyi/sales/controller/ReceiptPaymentController.java
index 5697f89..7279df7 100644
--- a/src/main/java/com/ruoyi/sales/controller/ReceiptPaymentController.java
+++ b/src/main/java/com/ruoyi/sales/controller/ReceiptPaymentController.java
@@ -8,6 +8,7 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
+import java.math.BigDecimal;
 import java.util.List;
 
 @RestController
@@ -69,5 +70,16 @@
         return AjaxResult.success(receiptPaymentService.receiptPaymentInfo(id));
     }
 
-
+    /**
+     * 鏈湀鍥炴閲戦
+     */
+    @GetMapping("/getReceiptAmount")
+    public AjaxResult getReceiptAmount() {
+        try {
+            BigDecimal amount = receiptPaymentService.getReceiptAmount();
+            return AjaxResult.success(amount != null ? amount : BigDecimal.ZERO);
+        } catch (Exception e) {
+            return AjaxResult.error("鑾峰彇鍚堝悓閲戦澶辫触锛�" + e.getMessage());
+        }
+    }
 }
diff --git a/src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java b/src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java
index fae38e5..d21a2dd 100644
--- a/src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java
+++ b/src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java
@@ -14,6 +14,7 @@
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletResponse;
+import java.math.BigDecimal;
 import java.util.List;
 
 /**
@@ -83,11 +84,12 @@
 
     /**
      * 鏌ヨ閿�鍞彴璐︿笉鍒嗛〉
+     *
      * @param salesLedgerDto
      * @return
      */
     @GetMapping("/listNoPage")
-    public AjaxResult listNoPage(SalesLedgerDto salesLedgerDto){
+    public AjaxResult listNoPage(SalesLedgerDto salesLedgerDto) {
         List<SalesLedger> list = salesLedgerService.selectSalesLedgerList(salesLedgerDto);
         return AjaxResult.success(list);
     }
@@ -103,4 +105,25 @@
         }
         return toAjax(commonFileService.deleteSalesLedgerByIds(ids));
     }
+
+    /**
+     * 鏈湀閿�鍞悎鍚岄噾棰�
+     */
+    @GetMapping("/getContractAmount")
+    public AjaxResult getContractAmount() {
+        try {
+            BigDecimal amount = salesLedgerService.getContractAmount();
+            return AjaxResult.success(amount != null ? amount : BigDecimal.ZERO);
+        } catch (Exception e) {
+            return AjaxResult.error("鑾峰彇鍚堝悓閲戦澶辫触锛�" + e.getMessage());
+        }
+    }
+
+    /**
+     * 瀹㈡埛鍚堝悓閲戦TOP5缁熻
+     */
+    @GetMapping("/getTopFiveList")
+    public AjaxResult getTopFiveList() {
+        return AjaxResult.success(salesLedgerService.getTopFiveList());
+    }
 }
diff --git a/src/main/java/com/ruoyi/sales/service/ISalesLedgerService.java b/src/main/java/com/ruoyi/sales/service/ISalesLedgerService.java
index 870db65..4f736c7 100644
--- a/src/main/java/com/ruoyi/sales/service/ISalesLedgerService.java
+++ b/src/main/java/com/ruoyi/sales/service/ISalesLedgerService.java
@@ -1,10 +1,11 @@
 package com.ruoyi.sales.service;
 
-import java.util.List;
-
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.ruoyi.sales.dto.SalesLedgerDto;
 import com.ruoyi.sales.pojo.SalesLedger;
+
+import java.math.BigDecimal;
+import java.util.List;
 
 /**
  * 閿�鍞彴璐ervice鎺ュ彛
@@ -23,4 +24,8 @@
     SalesLedgerDto getSalesLedgerWithProducts(SalesLedgerDto salesLedgerDto);
 
     List getSalesNo();
+
+    BigDecimal getContractAmount();
+
+    List getTopFiveList();
 }
diff --git a/src/main/java/com/ruoyi/sales/service/InvoiceLedgerService.java b/src/main/java/com/ruoyi/sales/service/InvoiceLedgerService.java
index f159d89..7e69edc 100644
--- a/src/main/java/com/ruoyi/sales/service/InvoiceLedgerService.java
+++ b/src/main/java/com/ruoyi/sales/service/InvoiceLedgerService.java
@@ -2,13 +2,13 @@
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.ruoyi.basic.dto.SupplierManageDto;
 import com.ruoyi.common.vo.FileVo;
 import com.ruoyi.sales.dto.InvoiceLedgerDto;
 import com.ruoyi.sales.pojo.InvoiceLedgerFile;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletResponse;
+import java.math.BigDecimal;
 import java.util.List;
 
 public interface InvoiceLedgerService {
@@ -85,4 +85,6 @@
      * @return
      */
     IPage<InvoiceLedgerDto> invoiceLedgerSalesAccount(Page page, InvoiceLedgerDto invoiceLedgerDto);
+
+    BigDecimal getInvoiceAmount();
 }
diff --git a/src/main/java/com/ruoyi/sales/service/ReceiptPaymentService.java b/src/main/java/com/ruoyi/sales/service/ReceiptPaymentService.java
index 57ff4c8..0689fcf 100644
--- a/src/main/java/com/ruoyi/sales/service/ReceiptPaymentService.java
+++ b/src/main/java/com/ruoyi/sales/service/ReceiptPaymentService.java
@@ -5,6 +5,7 @@
 import com.ruoyi.sales.dto.ReceiptPaymentDto;
 import com.ruoyi.sales.pojo.ReceiptPayment;
 
+import java.math.BigDecimal;
 import java.util.List;
 
 public interface ReceiptPaymentService {
@@ -44,4 +45,6 @@
      * @return
      */
     ReceiptPaymentDto receiptPaymentInfo(Integer id);
+
+    BigDecimal getReceiptAmount();
 }
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 89520b4..2fc0eb7 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/InvoiceLedgerServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/InvoiceLedgerServiceImpl.java
@@ -5,7 +5,6 @@
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.ruoyi.basic.dto.SupplierManageDto;
 import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.common.vo.FileVo;
 import com.ruoyi.sales.dto.InvoiceLedgerDto;
@@ -29,8 +28,10 @@
 import javax.servlet.http.HttpServletResponse;
 import java.io.File;
 import java.math.BigDecimal;
-import java.util.Collections;
+import java.time.LocalDate;
+import java.time.YearMonth;
 import java.util.List;
+import java.util.Objects;
 import java.util.UUID;
 import java.util.stream.Collectors;
 
@@ -242,4 +243,25 @@
         return invoiceLedgerDtoIPage;
     }
 
+    @Override
+    public BigDecimal getInvoiceAmount() {
+        LocalDate now = LocalDate.now();
+        YearMonth currentMonth = YearMonth.from(now);
+
+        // 鍒涘缓LambdaQueryWrapper
+        LambdaQueryWrapper<InvoiceLedger> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.ge(InvoiceLedger::getInvoiceDate, currentMonth.atDay(1).atStartOfDay())  // 澶т簬绛変簬鏈湀绗竴澶�
+                .lt(InvoiceLedger::getInvoiceDate, currentMonth.plusMonths(1).atDay(1).atStartOfDay()); // 灏忎簬涓嬫湀绗竴澶�
+
+        // 鎵ц鏌ヨ骞惰绠楁�诲拰
+        List<InvoiceLedger> invoiceLedgers = invoiceLedgerMapper.selectList(queryWrapper);
+
+        BigDecimal totalContractAmount = invoiceLedgers.stream()
+                .map(InvoiceLedger::getInvoiceAmount)
+                .filter(Objects::nonNull)
+                .reduce(BigDecimal.ZERO, BigDecimal::add);
+
+        return totalContractAmount;
+    }
+
 }
diff --git a/src/main/java/com/ruoyi/sales/service/impl/ReceiptPaymentServiceImpl.java b/src/main/java/com/ruoyi/sales/service/impl/ReceiptPaymentServiceImpl.java
index 661e1eb..93d3783 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/ReceiptPaymentServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/ReceiptPaymentServiceImpl.java
@@ -11,7 +11,11 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.YearMonth;
 import java.util.List;
+import java.util.Objects;
 
 @Service
 public class ReceiptPaymentServiceImpl extends ServiceImpl<ReceiptPaymentMapper,ReceiptPayment> implements ReceiptPaymentService {
@@ -75,4 +79,25 @@
     public ReceiptPaymentDto receiptPaymentInfo(Integer id) {
         return receiptPaymentMapper.receiptPaymentInfo(id);
     }
+
+    @Override
+    public BigDecimal getReceiptAmount() {
+        LocalDate now = LocalDate.now();
+        YearMonth currentMonth = YearMonth.from(now);
+
+        // 鍒涘缓LambdaQueryWrapper
+        LambdaQueryWrapper<ReceiptPayment> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.ge(ReceiptPayment::getReceiptPaymentDate, currentMonth.atDay(1).atStartOfDay())  // 澶т簬绛変簬鏈湀绗竴澶�
+                .lt(ReceiptPayment::getReceiptPaymentDate, currentMonth.plusMonths(1).atDay(1).atStartOfDay()); // 灏忎簬涓嬫湀绗竴澶�
+
+        // 鎵ц鏌ヨ骞惰绠楁�诲拰
+        List<ReceiptPayment> receiptPayments = receiptPaymentMapper.selectList(queryWrapper);
+
+        BigDecimal totalContractAmount = receiptPayments.stream()
+                .map(ReceiptPayment::getReceiptPaymentAmount)
+                .filter(Objects::nonNull)
+                .reduce(BigDecimal.ZERO, BigDecimal::add);
+
+        return totalContractAmount;
+    }
 }
diff --git a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
index 988410d..557b898 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
@@ -32,9 +32,13 @@
 import java.io.IOException;
 import java.lang.reflect.Field;
 import java.math.BigDecimal;
-import java.nio.file.*;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.nio.file.StandardCopyOption;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
+import java.time.YearMonth;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
@@ -124,6 +128,33 @@
         ).collect(Collectors.toList());
     }
 
+    @Override
+    public BigDecimal getContractAmount() {
+        LocalDate now = LocalDate.now();
+        YearMonth currentMonth = YearMonth.from(now);
+
+        // 鍒涘缓LambdaQueryWrapper
+        LambdaQueryWrapper<SalesLedger> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.ge(SalesLedger::getEntryDate, currentMonth.atDay(1).atStartOfDay())  // 澶т簬绛変簬鏈湀绗竴澶�
+                .lt(SalesLedger::getEntryDate, currentMonth.plusMonths(1).atDay(1).atStartOfDay()); // 灏忎簬涓嬫湀绗竴澶�
+
+        // 鎵ц鏌ヨ骞惰绠楁�诲拰
+        List<SalesLedger> salesLedgers = salesLedgerMapper.selectList(queryWrapper);
+
+        BigDecimal totalContractAmount = salesLedgers.stream()
+                .map(SalesLedger::getContractAmount)
+                .filter(Objects::nonNull)
+                .reduce(BigDecimal.ZERO, BigDecimal::add);
+
+        return totalContractAmount;
+    }
+
+    @Override
+    public List getTopFiveList() {
+        
+        return null;
+    }
+
     /**
      * 涓嬪垝绾垮懡鍚嶈浆椹煎嘲鍛藉悕
      */
@@ -192,7 +223,7 @@
             // 4. 澶勭悊瀛愯〃鏁版嵁
             List<SalesLedgerProduct> productList = salesLedgerDto.getProductData();
             if (productList != null && !productList.isEmpty()) {
-                handleSalesLedgerProducts(salesLedger.getId(), productList,salesLedgerDto.getType());
+                handleSalesLedgerProducts(salesLedger.getId(), productList, salesLedgerDto.getType());
                 updateMainContractAmount(
                         salesLedger.getId(),
                         productList,
@@ -287,7 +318,7 @@
     }
 
 
-    private void handleSalesLedgerProducts(Long salesLedgerId, List<SalesLedgerProduct> products,Integer type) {
+    private void handleSalesLedgerProducts(Long salesLedgerId, List<SalesLedgerProduct> products, Integer type) {
         // 鎸塈D鍒嗙粍锛屽尯鍒嗘柊澧炲拰鏇存柊鐨勮褰�
         Map<Boolean, List<SalesLedgerProduct>> partitionedProducts = products.stream()
                 .peek(p -> p.setSalesLedgerId(salesLedgerId))

--
Gitblit v1.9.3