From e8304b5b39787b25eb024fafd00d7db512ee6438 Mon Sep 17 00:00:00 2001 From: liding <756868258@qq.com> Date: 星期一, 19 五月 2025 09:02:44 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- src/main/java/com/ruoyi/purchase/service/IPaymentRegistrationService.java | 67 +++++ src/main/java/com/ruoyi/purchase/dto/PaymentRegistrationDto.java | 34 ++ src/main/java/com/ruoyi/purchase/pojo/PaymentRegistration.java | 83 ++++++ src/main/resources/mapper/sales/ReceiptPaymentMapper.xml | 4 src/main/java/com/ruoyi/sales/service/impl/InvoiceLedgerServiceImpl.java | 32 ++ src/main/java/com/ruoyi/sales/controller/InvoiceLedgerController.java | 11 src/main/java/com/ruoyi/sales/mapper/InvoiceLedgerMapper.java | 8 src/main/java/com/ruoyi/purchase/controller/PaymentRegistrationController.java | 110 ++++++++ src/main/java/com/ruoyi/purchase/mapper/PaymentRegistrationMapper.java | 32 ++ src/main/java/com/ruoyi/purchase/service/impl/PaymentRegistrationServiceImpl.java | 246 ++++++++++++++++++ src/main/java/com/ruoyi/sales/dto/InvoiceLedgerDto.java | 8 src/main/java/com/ruoyi/purchase/dto/PaymentLedgerDto.java | 16 + src/main/java/com/ruoyi/basic/service/ISupplierService.java | 3 src/main/resources/mapper/sales/InvoiceLedgerMapper.xml | 13 + src/main/java/com/ruoyi/basic/controller/SupplierManageController.java | 9 src/main/java/com/ruoyi/sales/service/InvoiceLedgerService.java | 8 src/main/resources/mapper/purchase/PaymentRegistrationMapper.xml | 87 ++++++ 17 files changed, 770 insertions(+), 1 deletions(-) diff --git a/src/main/java/com/ruoyi/basic/controller/SupplierManageController.java b/src/main/java/com/ruoyi/basic/controller/SupplierManageController.java index f75564e..123da95 100644 --- a/src/main/java/com/ruoyi/basic/controller/SupplierManageController.java +++ b/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()); + } } diff --git a/src/main/java/com/ruoyi/basic/service/ISupplierService.java b/src/main/java/com/ruoyi/basic/service/ISupplierService.java index 5055a34..d9dd829 100644 --- a/src/main/java/com/ruoyi/basic/service/ISupplierService.java +++ b/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> { /** * 渚涘簲鍟嗘柊澧� diff --git a/src/main/java/com/ruoyi/purchase/controller/PaymentRegistrationController.java b/src/main/java/com/ruoyi/purchase/controller/PaymentRegistrationController.java new file mode 100644 index 0000000..b8f233d --- /dev/null +++ b/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)); + } +} diff --git a/src/main/java/com/ruoyi/purchase/dto/PaymentLedgerDto.java b/src/main/java/com/ruoyi/purchase/dto/PaymentLedgerDto.java new file mode 100644 index 0000000..dc97a72 --- /dev/null +++ b/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; +} diff --git a/src/main/java/com/ruoyi/purchase/dto/PaymentRegistrationDto.java b/src/main/java/com/ruoyi/purchase/dto/PaymentRegistrationDto.java new file mode 100644 index 0000000..b2db4f4 --- /dev/null +++ b/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; +} diff --git a/src/main/java/com/ruoyi/purchase/mapper/PaymentRegistrationMapper.java b/src/main/java/com/ruoyi/purchase/mapper/PaymentRegistrationMapper.java new file mode 100644 index 0000000..52024bc --- /dev/null +++ b/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); +} diff --git a/src/main/java/com/ruoyi/purchase/pojo/PaymentRegistration.java b/src/main/java/com/ruoyi/purchase/pojo/PaymentRegistration.java new file mode 100644 index 0000000..403c424 --- /dev/null +++ b/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; + + /** + * 閿�鍞彴璐d + */ + private Long saleLedgerId; + + /** + * 閲囪喘鍙拌处id + */ + private Long purchaseLedgerId; + + /** + * 渚涘簲鍟唅d + */ + 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; +} diff --git a/src/main/java/com/ruoyi/purchase/service/IPaymentRegistrationService.java b/src/main/java/com/ruoyi/purchase/service/IPaymentRegistrationService.java new file mode 100644 index 0000000..cbf484f --- /dev/null +++ b/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); +} diff --git a/src/main/java/com/ruoyi/purchase/service/impl/PaymentRegistrationServiceImpl.java b/src/main/java/com/ruoyi/purchase/service/impl/PaymentRegistrationServiceImpl.java new file mode 100644 index 0000000..e858038 --- /dev/null +++ b/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; + } +} diff --git a/src/main/java/com/ruoyi/sales/controller/InvoiceLedgerController.java b/src/main/java/com/ruoyi/sales/controller/InvoiceLedgerController.java index 42896c6..99a3ea2 100644 --- a/src/main/java/com/ruoyi/sales/controller/InvoiceLedgerController.java +++ b/src/main/java/com/ruoyi/sales/controller/InvoiceLedgerController.java @@ -121,4 +121,15 @@ 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)); + } + } diff --git a/src/main/java/com/ruoyi/sales/dto/InvoiceLedgerDto.java b/src/main/java/com/ruoyi/sales/dto/InvoiceLedgerDto.java index b8d9318..4f6ecb8 100644 --- a/src/main/java/com/ruoyi/sales/dto/InvoiceLedgerDto.java +++ b/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; } diff --git a/src/main/java/com/ruoyi/sales/mapper/InvoiceLedgerMapper.java b/src/main/java/com/ruoyi/sales/mapper/InvoiceLedgerMapper.java index ed78d68..57a2cd0 100644 --- a/src/main/java/com/ruoyi/sales/mapper/InvoiceLedgerMapper.java +++ b/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); + } diff --git a/src/main/java/com/ruoyi/sales/service/InvoiceLedgerService.java b/src/main/java/com/ruoyi/sales/service/InvoiceLedgerService.java index a828f02..f159d89 100644 --- a/src/main/java/com/ruoyi/sales/service/InvoiceLedgerService.java +++ b/src/main/java/com/ruoyi/sales/service/InvoiceLedgerService.java @@ -77,4 +77,12 @@ * @return */ List<InvoiceLedgerDto> invoiceLedgerList(InvoiceLedgerDto invoiceLedgerDto); + + /** + * 瀹㈡埛閿�鍞褰� + * @param page + * @param invoiceLedgerDto + * @return + */ + IPage<InvoiceLedgerDto> invoiceLedgerSalesAccount(Page page, InvoiceLedgerDto invoiceLedgerDto); } 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 298f44a..89520b4 100644 --- a/src/main/java/com/ruoyi/sales/service/impl/InvoiceLedgerServiceImpl.java +++ b/src/main/java/com/ruoyi/sales/service/impl/InvoiceLedgerServiceImpl.java @@ -12,8 +12,10 @@ 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,6 +28,7 @@ import javax.servlet.http.HttpServletResponse; import java.io.File; +import java.math.BigDecimal; import java.util.Collections; import java.util.List; import java.util.UUID; @@ -42,6 +45,9 @@ @Autowired private InvoiceLedgerFileMapper invoiceLedgerFileMapper; + + @Autowired + private ReceiptPaymentMapper receiptPaymentMapper; /** * 寮�绁ㄥ彴璐︽柊澧� @@ -210,4 +216,30 @@ 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; + } + } diff --git a/src/main/resources/mapper/purchase/PaymentRegistrationMapper.xml b/src/main/resources/mapper/purchase/PaymentRegistrationMapper.xml new file mode 100644 index 0000000..9f21eff --- /dev/null +++ b/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> \ No newline at end of file diff --git a/src/main/resources/mapper/sales/InvoiceLedgerMapper.xml b/src/main/resources/mapper/sales/InvoiceLedgerMapper.xml index 6d38405..e08366b 100644 --- a/src/main/resources/mapper/sales/InvoiceLedgerMapper.xml +++ b/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> \ No newline at end of file diff --git a/src/main/resources/mapper/sales/ReceiptPaymentMapper.xml b/src/main/resources/mapper/sales/ReceiptPaymentMapper.xml index 7ff62bf..14587ee 100644 --- a/src/main/resources/mapper/sales/ReceiptPaymentMapper.xml +++ b/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"> -- Gitblit v1.9.3