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; /** * å®¢æ·æ¡£æ¡Controller 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("è¯·ä¼ å ¥è¦å é¤çID"); } 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("è¯·ä¼ å ¥è¦å é¤çID"); } return toAjax(productModelService.delProductModel(ids)); } } src/main/java/com/ruoyi/basic/controller/SupplierManageController.java
@@ -85,4 +85,13 @@ public void supplierExport(HttpServletResponse response,SupplierManageDto supplierManageDto) { supplierService.supplierExport(response, supplierManageDto); } /** * ä¾åºåé项æ¥å£ * @return */ @GetMapping("/getOptions") public AjaxResult getOptions() { return AjaxResult.success(supplierService.list()); } } 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; } 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 { } 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; } 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> { } 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; /** * ã请填ååè½åç§°ãMapperæ¥å£ * * @author ruoyi * @date 2025-05-19 */ public interface ProductModelMapper extends BaseMapper<ProductModel> { } 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; /** * ç¶ID */ private Long parentId; /** * 产ååç§° */ private String productName; } 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; } 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; /** * ã请填ååè½åç§°ãServiceæ¥å£ * * @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); } 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); } src/main/java/com/ruoyi/basic/service/ISupplierService.java
@@ -2,13 +2,14 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.basic.dto.SupplierManageDto; import com.ruoyi.basic.pojo.SupplierManage; import javax.servlet.http.HttpServletResponse; import java.util.List; public interface ISupplierService { public interface ISupplierService extends IService<SupplierManage> { /** * ä¾åºåæ°å¢ 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; /** * ã请填ååè½åç§°ãServiceä¸å¡å±å¤ç * * @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); } } 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) { // è¥æªæå®ç¶èç¹ï¼é»è®¤ä¸ºæ ¹èç¹ï¼parentId 设为 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; } } src/main/java/com/ruoyi/common/config/IgnoreTableConfig.java
@@ -28,6 +28,8 @@ IGNORE_TABLES.add("sales_ledger_product"); IGNORE_TABLES.add("sales_ledger_file"); IGNORE_TABLES.add("temp_file"); IGNORE_TABLES.add("common_file"); } } src/main/java/com/ruoyi/purchase/controller/PaymentRegistrationController.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,110 @@ package com.ruoyi.purchase.controller; 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.framework.web.page.TableDataInfo; import com.ruoyi.purchase.dto.PaymentLedgerDto; import com.ruoyi.purchase.dto.PaymentRegistrationDto; import com.ruoyi.purchase.pojo.PaymentRegistration; import com.ruoyi.purchase.service.IPaymentRegistrationService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.List; /** * 仿¬¾ç»è®°Controller * * @author ruoyi * @date 2025-05-15 */ @RestController @RequestMapping("/purchase/paymentRegistration") public class PaymentRegistrationController extends BaseController { @Autowired private IPaymentRegistrationService paymentRegistrationService; /** * æ¥è¯¢ä»æ¬¾ç»è®°å表 */ // @PreAuthorize("@ss.hasPermi('system:registration:list')") @GetMapping("/list") public TableDataInfo list(PaymentRegistrationDto paymentRegistrationDto) { startPage(); List<PaymentRegistrationDto> list = paymentRegistrationService.selectPaymentRegistrationList(paymentRegistrationDto); return getDataTable(list); } /** * 导åºä»æ¬¾ç»è®°å表 */ // @Log(title = "仿¬¾ç»è®°", businessType = BusinessType.EXPORT) // @PostMapping("/export") // public void export(HttpServletResponse response, PaymentRegistrationDto paymentRegistrationDto) // { // List<PaymentRegistrationDto> list = paymentRegistrationService.selectPaymentRegistrationList(paymentRegistrationDto); // ExcelUtil<PaymentRegistration> util = new ExcelUtil<PaymentRegistration>(PaymentRegistration.class); // util.exportExcel(response, list, "仿¬¾ç»è®°æ°æ®"); // } /** * è·å仿¬¾ç»è®°è¯¦ç»ä¿¡æ¯ */ @GetMapping(value = "/{id}") public AjaxResult getInfo(@PathVariable("id") Long id) { return success(paymentRegistrationService.selectPaymentRegistrationById(id)); } /** * æ°å¢ä»æ¬¾ç»è®° */ @Log(title = "仿¬¾ç»è®°", businessType = BusinessType.INSERT) @PostMapping public AjaxResult add(@RequestBody PaymentRegistration paymentRegistration) { return toAjax(paymentRegistrationService.insertPaymentRegistration(paymentRegistration)); } /** * ä¿®æ¹ä»æ¬¾ç»è®° */ @Log(title = "仿¬¾ç»è®°", businessType = BusinessType.UPDATE) @PutMapping public AjaxResult edit(@RequestBody PaymentRegistration paymentRegistration) { return toAjax(paymentRegistrationService.updatePaymentRegistration(paymentRegistration)); } /** * å é¤ä»æ¬¾ç»è®° */ @Log(title = "仿¬¾ç»è®°", businessType = BusinessType.DELETE) @DeleteMapping("/del") public AjaxResult remove(@RequestBody Long[] ids) { return toAjax(paymentRegistrationService.deletePaymentRegistrationByIds(ids)); } /** * è·å仿¬¾ç»è®°è¯¦ç»ä¿¡æ¯ */ @GetMapping(value = "/byPurchaseId/{id}") public AjaxResult getPurchaseInfo(@PathVariable("id") Long id) { return success(paymentRegistrationService.selectPaymentRegistrationByPurchaseId(id)); } /** * è·å仿¬¾ç»è®°è¯¦ç»ä¿¡æ¯ */ @GetMapping(value = "/paymentLedgerList") public AjaxResult paymentLedgerList(PaymentLedgerDto paymentLedgerDto) { return success(paymentRegistrationService.selectPaymentLedgerList(paymentLedgerDto)); } } src/main/java/com/ruoyi/purchase/dto/PaymentLedgerDto.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,16 @@ package com.ruoyi.purchase.dto; import lombok.Data; @Data public class PaymentLedgerDto { // ä¾åºååç§° private String supplierName; // å¼å§æ¥æ private String startDate; // ç»ææ¥æ private String endDate; } src/main/java/com/ruoyi/purchase/dto/PaymentRegistrationDto.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,34 @@ package com.ruoyi.purchase.dto; import com.ruoyi.purchase.pojo.PaymentRegistration; import lombok.Data; import java.math.BigDecimal; @Data public class PaymentRegistrationDto extends PaymentRegistration { // æ¥è¯¢å表æ¥è¯¢ç¨ä¾åºåå·åååå· private String supplierNameOrContractNo; // éå®ååå· private String salesContractNo; // éè´ååå· private String purchaseContractNumber; // ä¾åºååç§° private String supplierName; // åç¥¨å· private String invoiceNumber; // å票éé¢ private BigDecimal invoiceAmount; // å¾ ä»æ¬¾éé¢ private BigDecimal unPaymentAmount; // ç¨ç private BigDecimal taxRate; } src/main/java/com/ruoyi/purchase/mapper/PaymentRegistrationMapper.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,32 @@ package com.ruoyi.purchase.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.purchase.dto.PaymentRegistrationDto; import com.ruoyi.purchase.pojo.PaymentRegistration; import org.apache.ibatis.annotations.Param; import java.util.List; /** * 仿¬¾ç»è®°Mapperæ¥å£ * * @author ruoyi * @date 2025-05-15 */ public interface PaymentRegistrationMapper extends BaseMapper<PaymentRegistration> { /** * æ¥è¯¢ä»æ¬¾ç»è®° * * @param id 仿¬¾ç»è®°ä¸»é® * @return 仿¬¾ç»è®° */ public PaymentRegistrationDto selectPaymentRegistrationById(@Param("id") Long id); /** * æ¥è¯¢ä»æ¬¾ç»è®°å表 * * @param paymentRegistrationDto 仿¬¾ç»è®° * @return 仿¬¾ç»è®°éå */ public List<PaymentRegistrationDto> selectPaymentRegistrationList(PaymentRegistrationDto paymentRegistrationDto); } src/main/java/com/ruoyi/purchase/pojo/PaymentRegistration.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,83 @@ package com.ruoyi.purchase.pojo; import com.baomidou.mybatisplus.annotation.*; import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Data; import java.math.BigDecimal; import java.util.Date; /** * 仿¬¾ç»è®°å¯¹è±¡ payment_registration * * @author ruoyi * @date 2025-05-15 */ @Data @TableName("payment_registration") public class PaymentRegistration { private static final long serialVersionUID = 1L; /** * id */ @TableId(value = "id", type = IdType.AUTO) private Long id; /** * éå®å°è´¦id */ private Long saleLedgerId; /** * éè´å°è´¦id */ private Long purchaseLedgerId; /** * ä¾åºåid */ private Long supplierId; /** * å票id */ private Long invoicePurchaseId; /** * æ¬æ¬¡ä»æ¬¾éé¢ */ private BigDecimal currentPaymentAmount; /** * 仿¬¾å½¢å¼ */ private String paymentMethod; /** * ç»è®°äºº */ private Long registrantId; // ç§æ·id private Long tenantId; /** * 仿¬¾æ¥æ */ @JsonFormat(pattern = "yyyy-MM-dd") private Date paymentDate; /** * åå»ºæ¥æ */ @TableField(fill = FieldFill.INSERT) private Date createTime; /** * ä¿®æ¹æ¥æ */ @TableField(fill = FieldFill.INSERT_UPDATE) private Date updateTime; } src/main/java/com/ruoyi/purchase/service/IPaymentRegistrationService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,67 @@ package com.ruoyi.purchase.service; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.purchase.dto.PaymentLedgerDto; import com.ruoyi.purchase.dto.PaymentRegistrationDto; import com.ruoyi.purchase.pojo.PaymentRegistration; import java.util.List; import java.util.Map; /** * 仿¬¾ç»è®°Serviceæ¥å£ * * @author ruoyi * @date 2025-05-15 */ public interface IPaymentRegistrationService extends IService<PaymentRegistration> { /** * æ¥è¯¢ä»æ¬¾ç»è®° * * @param id 仿¬¾ç»è®°ä¸»é® * @return 仿¬¾ç»è®° */ public PaymentRegistration selectPaymentRegistrationById(Long id); /** * æ¥è¯¢ä»æ¬¾ç»è®°å表 * * @param paymentRegistrationDto 仿¬¾ç»è®° * @return 仿¬¾ç»è®°éå */ public List<PaymentRegistrationDto> selectPaymentRegistrationList(PaymentRegistrationDto paymentRegistrationDto); /** * æ°å¢ä»æ¬¾ç»è®° * * @param paymentRegistration 仿¬¾ç»è®° * @return ç»æ */ public int insertPaymentRegistration(PaymentRegistration paymentRegistration); /** * ä¿®æ¹ä»æ¬¾ç»è®° * * @param paymentRegistration 仿¬¾ç»è®° * @return ç»æ */ public int updatePaymentRegistration(PaymentRegistration paymentRegistration); /** * æ¹éå é¤ä»æ¬¾ç»è®° * * @param ids éè¦å é¤ç仿¬¾ç»è®°ä¸»é®éå * @return ç»æ */ public int deletePaymentRegistrationByIds(Long[] ids); /** * éè¿éè´ååå·æ¥è¯¢éå®ååå·ï¼ä¾åºååç§°ï¼å票å·ï¼å票éé¢ï¼ç¨ç * * @param purchaseId éè´ååid * @return ç»æ */ PaymentRegistration selectPaymentRegistrationByPurchaseId(Long purchaseId); List<Map<String, Object>> selectPaymentLedgerList(PaymentLedgerDto paymentLedgerDto); } src/main/java/com/ruoyi/purchase/service/impl/PaymentRegistrationServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,246 @@ package com.ruoyi.purchase.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.basic.mapper.SupplierManageMapper; import com.ruoyi.basic.pojo.SupplierManage; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.framework.security.LoginUser; import com.ruoyi.purchase.dto.PaymentLedgerDto; import com.ruoyi.purchase.dto.PaymentRegistrationDto; import com.ruoyi.purchase.mapper.InvoicePurchaseMapper; import com.ruoyi.purchase.mapper.PaymentRegistrationMapper; import com.ruoyi.purchase.mapper.PurchaseLedgerMapper; import com.ruoyi.purchase.pojo.InvoicePurchase; import com.ruoyi.purchase.pojo.PaymentRegistration; import com.ruoyi.purchase.pojo.PurchaseLedger; import com.ruoyi.purchase.service.IPaymentRegistrationService; import com.ruoyi.sales.mapper.SalesLedgerMapper; import com.ruoyi.sales.mapper.SalesLedgerProductMapper; import com.ruoyi.sales.pojo.SalesLedger; import com.ruoyi.sales.pojo.SalesLedgerProduct; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.util.*; import java.util.stream.Collectors; /** * 仿¬¾ç»è®°Serviceä¸å¡å±å¤ç * * @author ruoyi * @date 2025-05-15 */ @Service public class PaymentRegistrationServiceImpl extends ServiceImpl<PaymentRegistrationMapper, PaymentRegistration> implements IPaymentRegistrationService { @Autowired private PaymentRegistrationMapper paymentRegistrationMapper; @Autowired private PurchaseLedgerMapper purchaseLedgerMapper; @Autowired private InvoicePurchaseMapper invoicePurchaseMapper; @Autowired private SalesLedgerMapper salesLedgerMapper; @Autowired private SupplierManageMapper supplierManageMapper; @Autowired private SalesLedgerProductMapper salesLedgerProductMapper; /** * æ¥è¯¢ä»æ¬¾ç»è®° * * @param id 仿¬¾ç»è®°ä¸»é® * @return 仿¬¾ç»è®° */ @Override public PaymentRegistration selectPaymentRegistrationById(Long id) { return paymentRegistrationMapper.selectPaymentRegistrationById(id); } /** * æ¥è¯¢ä»æ¬¾ç»è®°å表 * * @param paymentRegistrationDto 仿¬¾ç»è®° * @return 仿¬¾ç»è®° */ @Override public List<PaymentRegistrationDto> selectPaymentRegistrationList(PaymentRegistrationDto paymentRegistrationDto) { List<PaymentRegistrationDto> list = paymentRegistrationMapper.selectPaymentRegistrationList(paymentRegistrationDto); for (PaymentRegistrationDto registrationDto : list) { List<PaymentRegistration> paymentRegistrations = paymentRegistrationMapper.selectList(new QueryWrapper<PaymentRegistration>() .eq("invoice_purchase_id", registrationDto.getInvoicePurchaseId())); BigDecimal total = paymentRegistrations.stream().map(PaymentRegistration::getCurrentPaymentAmount).reduce(BigDecimal.ZERO, BigDecimal::add); registrationDto.setUnPaymentAmount(registrationDto.getInvoiceAmount().subtract(total)); } return list; } /** * æ°å¢ä»æ¬¾ç»è®° * * @param paymentRegistration 仿¬¾ç»è®° * @return ç»æ */ @Override public int insertPaymentRegistration(PaymentRegistration paymentRegistration) { PurchaseLedger purchaseLedger = purchaseLedgerMapper.selectById(paymentRegistration.getPurchaseLedgerId()); SalesLedger salesLedger = salesLedgerMapper.selectOne(new QueryWrapper<SalesLedger>(). eq("sales_contract_no", purchaseLedger.getSalesContractNo())); if (salesLedger == null) { throw new RuntimeException("å ³èéå®ååå·ä¸åå¨"); } paymentRegistration.setSaleLedgerId(salesLedger.getId()); paymentRegistration.setSupplierId(purchaseLedger.getSupplierId()); List<InvoicePurchase> invoicePurchases = invoicePurchaseMapper.selectList(new QueryWrapper<InvoicePurchase>(). eq("purchase_contract_no", purchaseLedger.getPurchaseContractNumber())); if (invoicePurchases == null || invoicePurchases.size() == 0) { throw new RuntimeException("å ³èå票ä¸åå¨"); } paymentRegistration.setInvoicePurchaseId(invoicePurchases.get(0).getId()); List<PaymentRegistration> paymentRegistrations = paymentRegistrationMapper.selectList(new QueryWrapper<PaymentRegistration>() .eq("invoice_purchase_id", invoicePurchases.get(0).getId())); BigDecimal total = paymentRegistrations.stream().map(PaymentRegistration::getCurrentPaymentAmount).reduce(BigDecimal.ZERO, BigDecimal::add); if (total.add(paymentRegistration.getCurrentPaymentAmount()).compareTo(invoicePurchases.get(0).getInvoiceAmount()) > 0) { throw new RuntimeException("仿¬¾éé¢è¶ åºå票éé¢"); } LoginUser loginUser = SecurityUtils.getLoginUser(); Integer tenantId = loginUser.getTenantId(); paymentRegistration.setTenantId(tenantId.longValue()); paymentRegistration.setCreateTime(DateUtils.getNowDate()); paymentRegistration.setUpdateTime(DateUtils.getNowDate()); return paymentRegistrationMapper.insert(paymentRegistration); } /** * ä¿®æ¹ä»æ¬¾ç»è®° * * @param paymentRegistration 仿¬¾ç»è®° * @return ç»æ */ @Override public int updatePaymentRegistration(PaymentRegistration paymentRegistration) { InvoicePurchase invoicePurchase = invoicePurchaseMapper.selectById(paymentRegistration.getInvoicePurchaseId()); List<PaymentRegistration> paymentRegistrations = paymentRegistrationMapper.selectList(new QueryWrapper<PaymentRegistration>() .eq("invoice_purchase_id", paymentRegistration.getInvoicePurchaseId()).ne("id", paymentRegistration.getId())); BigDecimal total = paymentRegistrations.stream().map(PaymentRegistration::getCurrentPaymentAmount).reduce(BigDecimal.ZERO, BigDecimal::add); if (total.add(paymentRegistration.getCurrentPaymentAmount()).compareTo(invoicePurchase.getInvoiceAmount()) > 0) { throw new RuntimeException("仿¬¾éé¢è¶ åºå票éé¢"); } paymentRegistration.setUpdateTime(DateUtils.getNowDate()); return paymentRegistrationMapper.updateById(paymentRegistration); } /** * æ¹éå é¤ä»æ¬¾ç»è®° * * @param ids éè¦å é¤ç仿¬¾ç»è®°ä¸»é® * @return ç»æ */ @Override public int deletePaymentRegistrationByIds(Long[] ids) { return paymentRegistrationMapper.delete(new QueryWrapper<PaymentRegistration>().in("id", ids)); } @Override public PaymentRegistration selectPaymentRegistrationByPurchaseId(Long id) { PaymentRegistrationDto paymentRegistrationDto = new PaymentRegistrationDto(); PurchaseLedger purchaseLedger = purchaseLedgerMapper.selectById(id); paymentRegistrationDto.setSalesContractNo(purchaseLedger.getSalesContractNo()); paymentRegistrationDto.setSupplierName(purchaseLedger.getSupplierName()); paymentRegistrationDto.setSupplierId(purchaseLedger.getSupplierId()); List<InvoicePurchase> invoicePurchaseList = invoicePurchaseMapper.selectList(new QueryWrapper<InvoicePurchase>() .eq("purchase_contract_no", purchaseLedger.getPurchaseContractNumber())); if (invoicePurchaseList != null && invoicePurchaseList.size() > 0) { paymentRegistrationDto.setInvoiceNumber(invoicePurchaseList.get(0).getInvoiceNumber()); paymentRegistrationDto.setInvoiceAmount(invoicePurchaseList.get(0).getInvoiceAmount()); paymentRegistrationDto.setTaxRate(invoicePurchaseList.get(0).getTaxRate()); } return paymentRegistrationDto; } @Override public List<Map<String, Object>> selectPaymentLedgerList(PaymentLedgerDto paymentLedgerDto) { List<Map<String, Object>> result = new ArrayList<>(); LambdaQueryWrapper<SupplierManage> queryWrapper = new LambdaQueryWrapper<>(); Optional.ofNullable(paymentLedgerDto) .ifPresent(dto -> { if (StringUtils.hasText(dto.getSupplierName())) { queryWrapper.like(SupplierManage::getSupplierName, dto.getSupplierName()); } }); List<SupplierManage> supplierManages = supplierManageMapper.selectList(queryWrapper); for (SupplierManage supplierManage : supplierManages) { Map<String, Object> res = new HashMap<>(); res.put("supplierName", supplierManage.getSupplierName()); // åºä»éé¢ BigDecimal payableAmount = BigDecimal.ZERO; List<SalesLedger> salesLedgers = salesLedgerMapper.selectList(new QueryWrapper<SalesLedger>().eq("customer_id", supplierManage.getId())); if (salesLedgers != null && salesLedgers.size() > 0) { List<SalesLedgerProduct> salesLedgerProducts = salesLedgerProductMapper.selectList(new QueryWrapper<SalesLedgerProduct>() .in("sales_ledger_id", salesLedgers.stream().map(SalesLedger::getId).collect(Collectors.toList()))); // åºä»éé¢ payableAmount = salesLedgerProducts.stream().map(SalesLedgerProduct::getTaxInclusiveTotalPrice).reduce(BigDecimal.ZERO, BigDecimal::add); } // å¼ç¥¨éé¢ BigDecimal invoiceAmount = salesLedgers.stream().map(SalesLedger::getContractAmount).reduce(BigDecimal.ZERO, BigDecimal::add); // 仿¬¾éé¢ List<PaymentRegistration> paymentRegistrations = paymentRegistrationMapper.selectList(new QueryWrapper<PaymentRegistration>() .eq("supplier_id", supplierManage.getId())); BigDecimal paymentAmount = BigDecimal.ZERO; if (paymentRegistrations != null && paymentRegistrations.size() > 0) { paymentAmount = paymentRegistrations.stream().map(PaymentRegistration::getCurrentPaymentAmount).reduce(BigDecimal.ZERO, BigDecimal::add); } res.put("invoiceAmount", invoiceAmount); res.put("payableAmount", payableAmount); res.put("paymentAmount", paymentAmount); // 详æ List<Map<String, Object>> details = new ArrayList<>(); for (PaymentRegistration paymentRegistration : paymentRegistrations) { Map<String, Object> detail = new HashMap<>(); detail.put("voteCount", 1); // 票æ°ï¼æªç¥æ°æ®æºï¼ææ¶ç¨1 detail.put("paymentAmount", paymentRegistration.getCurrentPaymentAmount()); // 仿¬¾éé¢ InvoicePurchase invoicePurchase = invoicePurchaseMapper.selectById(paymentRegistration.getInvoicePurchaseId()); detail.put("payableAmount", invoicePurchase.getInvoiceAmount()); // åºä»éé¢ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); String formattedDate = sdf.format(paymentRegistration.getPaymentDate()); detail.put("createTime", formattedDate); // åçæ¶é´ details.add(detail); } res.put("details", paymentRegistrations); result.add(res); } return result; } } 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 @@ -121,4 +122,28 @@ return AjaxResult.success(invoiceLedgerService.invoiceLedgerList(invoiceLedgerDto)); } /** * 客æ·éå®è®°å½ * @param page * @param invoiceLedgerDto * @return */ @GetMapping("/salesAccount") public AjaxResult invoiceLedgerSalesAccount(Page page, InvoiceLedgerDto invoiceLedgerDto) { 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()); } } } 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()); } } } 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()); } } src/main/java/com/ruoyi/sales/dto/InvoiceLedgerDto.java
@@ -4,6 +4,8 @@ import com.ruoyi.sales.pojo.InvoiceLedger; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; import java.util.List; @Data @@ -25,4 +27,10 @@ @ApiModelProperty(value = "å票æä»¶å") private String invoiceFileName; @ApiModelProperty(value = "忬¾éé¢") private BigDecimal receiptPaymentAmount; @ApiModelProperty(value = "æªå款éé¢") private BigDecimal unReceiptPaymentAmount; } src/main/java/com/ruoyi/sales/mapper/InvoiceLedgerMapper.java
@@ -33,4 +33,12 @@ */ InvoiceLedgerDto invoiceLedgerInfo(Integer id); /** * 客æ·éå®è®°å½ * @param page * @param invoiceLedgerDto * @return */ IPage<InvoiceLedgerDto> invoiceLedgerSalesAccount(Page page, InvoiceLedgerDto invoiceLedgerDto); } 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; /** * éå®å°è´¦Serviceæ¥å£ @@ -23,4 +24,8 @@ SalesLedgerDto getSalesLedgerWithProducts(SalesLedgerDto salesLedgerDto); List getSalesNo(); BigDecimal getContractAmount(); List getTopFiveList(); } 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 { @@ -77,4 +77,14 @@ * @return */ List<InvoiceLedgerDto> invoiceLedgerList(InvoiceLedgerDto invoiceLedgerDto); /** * 客æ·éå®è®°å½ * @param page * @param invoiceLedgerDto * @return */ IPage<InvoiceLedgerDto> invoiceLedgerSalesAccount(Page page, InvoiceLedgerDto invoiceLedgerDto); BigDecimal getInvoiceAmount(); } 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(); } src/main/java/com/ruoyi/sales/service/impl/InvoiceLedgerServiceImpl.java
@@ -5,15 +5,16 @@ 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; import com.ruoyi.sales.excel.InvoiceLedgerExcelDto; import com.ruoyi.sales.mapper.InvoiceLedgerFileMapper; import com.ruoyi.sales.mapper.InvoiceLedgerMapper; import com.ruoyi.sales.mapper.ReceiptPaymentMapper; import com.ruoyi.sales.pojo.InvoiceLedger; import com.ruoyi.sales.pojo.InvoiceLedgerFile; import com.ruoyi.sales.pojo.ReceiptPayment; import com.ruoyi.sales.service.InvoiceLedgerService; import org.apache.commons.collections4.CollectionUtils; import org.springframework.beans.BeanUtils; @@ -26,8 +27,11 @@ import javax.servlet.http.HttpServletResponse; import java.io.File; import java.util.Collections; import java.math.BigDecimal; 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; @@ -42,6 +46,9 @@ @Autowired private InvoiceLedgerFileMapper invoiceLedgerFileMapper; @Autowired private ReceiptPaymentMapper receiptPaymentMapper; /** * å¼ç¥¨å°è´¦æ°å¢ @@ -210,4 +217,51 @@ return invoiceLedgerMapper.invoiceLedgerList(invoiceLedgerDto); } /** * 客æ·éå®è®°å½ * @param page * @param invoiceLedgerDto * @return */ @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); } 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; } } 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; } } 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) { // æIDåç»ï¼åºåæ°å¢åæ´æ°çè®°å½ Map<Boolean, List<SalesLedgerProduct>> partitionedProducts = products.stream() .peek(p -> p.setSalesLedgerId(salesLedgerId)) src/main/resources/mapper/purchase/PaymentRegistrationMapper.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,87 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.ruoyi.purchase.mapper.PaymentRegistrationMapper"> <resultMap type="PaymentRegistration" id="PaymentRegistrationResult"> <result property="id" column="id"/> <result property="saleLedgerId" column="sale_ledger_id"/> <result property="purchaseLedgerId" column="purchase_ledger_id"/> <result property="supplierId" column="supplier_id"/> <result property="invoicePurchaseId" column="invoice_purchase_id"/> <result property="currentPaymentAmount" column="current_payment_amount"/> <result property="paymentMethod" column="payment_method"/> <result property="registrantId" column="registrant_id"/> <result property="paymentDate" column="payment_date"/> <result property="createTime" column="create_time"/> <result property="updateTime" column="update_time"/> <result property="tenantId" column="tenant_id"/> </resultMap> <resultMap type="com.ruoyi.purchase.dto.PaymentRegistrationDto" id="PaymentRegistrationDtoResult"> <result property="id" column="id"/> <result property="saleLedgerId" column="sale_ledger_id"/> <result property="purchaseLedgerId" column="purchase_ledger_id"/> <result property="supplierId" column="supplier_id"/> <result property="invoicePurchaseId" column="invoice_purchase_id"/> <result property="currentPaymentAmount" column="current_payment_amount"/> <result property="paymentMethod" column="payment_method"/> <result property="registrantId" column="registrant_id"/> <result property="paymentDate" column="payment_date"/> <result property="createTime" column="create_time"/> <result property="updateTime" column="update_time"/> <result property="salesContractNo" column="sales_contract_no"/> <result property="purchaseContractNumber" column="purchase_contract_number"/> <result property="supplierName" column="supplier_name"/> <result property="invoiceNumber" column="invoice_number"/> <result property="taxRate" column="tax_rate"/> <result property="invoiceAmount" column="invoice_amount"/> <result property="tenantId" column="tenant_id"/> </resultMap> <sql id="selectPaymentRegistrationVo"> select pr.id, pr.sale_ledger_id, pr.purchase_ledger_id, pr.supplier_id, pr.invoice_purchase_id, pr.current_payment_amount, pr.payment_method, pr.registrant_id, pr.payment_date, pr.create_time, pr.update_time, pr.tenant_id, sl.sales_contract_no as sales_contract_no, pl.purchase_contract_number as purchase_contract_number, sm.supplier_name as supplier_name, ip.invoice_number as invoice_number, ip.tax_rate as tax_rate, ip.invoice_amount as invoice_amount from payment_registration pr left join sales_ledger sl on pr.sale_ledger_id = sl.id left join purchase_ledger pl on pr.purchase_ledger_id = pl.id left join supplier_manage sm on pr.supplier_id = sm.id left join invoice_purchase ip on pr.invoice_purchase_id = ip.id left join sys_user su on pr.registrant_id = su.user_id </sql> <select id="selectPaymentRegistrationList" parameterType="com.ruoyi.purchase.dto.PaymentRegistrationDto" resultMap="PaymentRegistrationDtoResult"> <include refid="selectPaymentRegistrationVo"/> <where> <if test="supplierNameOrContractNo != null and supplierNameOrContractNo != ''"> and sm.supplier_name LIKE CONCAT('%', #{supplierNameOrContractNo}, '%') or sl.sales_contract_no LIKE CONCAT('%', #{supplierNameOrContractNo}, '%') or pl.purchase_contract_number LIKE CONCAT('%', #{supplierNameOrContractNo}, '%') </if> </where> </select> <select id="selectPaymentRegistrationById" parameterType="Long" resultMap="PaymentRegistrationDtoResult"> <include refid="selectPaymentRegistrationVo"/> where pr.id = #{id} </select> </mapper> src/main/resources/mapper/sales/InvoiceLedgerMapper.xml
@@ -109,5 +109,18 @@ WHERE T1.id = #{id} </select> <select id="invoiceLedgerSalesAccount" resultType="com.ruoyi.sales.dto.InvoiceLedgerDto"> SELECT customer_id, T2.customer_name, SUM( invoice_amount ) invoiceAmount FROM invoice_ledger T1 LEFT JOIN customer T2 ON T1.customer_id = T2.id GROUP BY customer_id, T2.customer_name; </select> </mapper> src/main/resources/mapper/sales/ReceiptPaymentMapper.xml
@@ -33,7 +33,11 @@ OR T1.sales_contract_no LIKE CONCAT('%',#{receiptPaymentDto.searchText},'%') ) </if> <if test="receiptPaymentDto.customerId != null"> AND T1.customer_id = #{receiptPaymentDto.customerId} </if> </where> ORDER BY T1.receipt_payment_date ASC </select> <select id="receiptPaymentInfo" resultType="com.ruoyi.sales.dto.ReceiptPaymentDto">