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/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/purchase/controller/PaymentRegistrationController.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,100 @@ 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.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)); } } 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/pojo/PurchaseLedger.java
@@ -34,7 +34,7 @@ /** * ä¾åºååç§°id */ private String supplierId; private Long supplierId; /** * ä¾åºååç§° src/main/java/com/ruoyi/purchase/service/IPaymentRegistrationService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,63 @@ package com.ruoyi.purchase.service; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.purchase.dto.PaymentRegistrationDto; import com.ruoyi.purchase.pojo.PaymentRegistration; import java.util.List; /** * 仿¬¾ç»è®°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); } src/main/java/com/ruoyi/purchase/service/impl/PaymentRegistrationServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,169 @@ package com.ruoyi.purchase.service.impl; 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.common.utils.DateUtils; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.framework.security.LoginUser; 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.pojo.SalesLedger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.math.BigDecimal; import java.util.List; /** * 仿¬¾ç»è®°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; /** * æ¥è¯¢ä»æ¬¾ç»è®° * * @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; } } 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>