feat(purchase): 新增供应商往来及往来明细接口功能
| | |
| | | import com.ruoyi.basic.dto.SupplierManageDto; |
| | | import com.ruoyi.basic.excel.SupplierManageExcelDto; |
| | | import com.ruoyi.basic.pojo.SupplierManage; |
| | | import com.ruoyi.purchase.vo.SupplierTransactionsDetailsVo; |
| | | import com.ruoyi.purchase.vo.SupplierTransactionsVo; |
| | | import org.apache.ibatis.annotations.Mapper; |
| | | import org.apache.ibatis.annotations.Param; |
| | | |
| | |
| | | IPage<SupplierManage> supplierListPage(Page page, @Param("supplierManageDto") SupplierManageDto supplierManageDto); |
| | | |
| | | List<SupplierManageExcelDto> supplierExportList(@Param("supplierManageDto") SupplierManageDto supplierManageDto); |
| | | |
| | | IPage<SupplierTransactionsVo> supplierTransactions(Page page, @Param("supplierName") String supplierName); |
| | | |
| | | IPage<SupplierTransactionsDetailsVo> supplierTransactionsDetails(Page page, @Param("supplierId") Long supplierId); |
| | | } |
| | |
| | | import com.baomidou.mybatisplus.extension.service.IService; |
| | | import com.ruoyi.basic.dto.SupplierManageDto; |
| | | import com.ruoyi.basic.pojo.SupplierManage; |
| | | import com.ruoyi.framework.web.domain.AjaxResult; |
| | | import com.ruoyi.purchase.vo.SupplierTransactionsDetailsVo; |
| | | import com.ruoyi.purchase.vo.SupplierTransactionsVo; |
| | | import jakarta.servlet.http.HttpServletResponse; |
| | | import org.springframework.web.multipart.MultipartFile; |
| | | |
| | | import jakarta.servlet.http.HttpServletResponse; |
| | | import java.util.List; |
| | | |
| | | public interface ISupplierService extends IService<SupplierManage> { |
| | |
| | | void supplierExport(HttpServletResponse response, SupplierManageDto supplierManageDto); |
| | | |
| | | Boolean importData(MultipartFile file); |
| | | |
| | | /** |
| | | * ä¾åºå徿¥ |
| | | * @param page |
| | | * @param supplierName |
| | | * @return |
| | | */ |
| | | IPage<SupplierTransactionsVo> supplierTransactions(Page page, String supplierName); |
| | | |
| | | /** |
| | | * ä¾åºå徿¥è¯¦æ
|
| | | * @param page |
| | | * @param supplierId |
| | | * @return |
| | | */ |
| | | IPage<SupplierTransactionsDetailsVo> supplierTransactionsDetails(Page page, Long supplierId); |
| | | } |
| | |
| | | import com.ruoyi.common.utils.poi.ExcelUtil; |
| | | import com.ruoyi.purchase.mapper.PurchaseLedgerMapper; |
| | | import com.ruoyi.purchase.pojo.PurchaseLedger; |
| | | import com.ruoyi.purchase.vo.SupplierTransactionsDetailsVo; |
| | | import com.ruoyi.purchase.vo.SupplierTransactionsVo; |
| | | import jakarta.servlet.http.HttpServletResponse; |
| | | import lombok.RequiredArgsConstructor; |
| | | import org.springframework.beans.BeanUtils; |
| | |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | @Override |
| | | public IPage<SupplierTransactionsVo> supplierTransactions(Page page, String supplierName) { |
| | | return supplierMapper.supplierTransactions(page,supplierName); |
| | | } |
| | | |
| | | @Override |
| | | public IPage<SupplierTransactionsDetailsVo> supplierTransactionsDetails(Page page, Long supplierId) { |
| | | return supplierMapper.supplierTransactionsDetails(page,supplierId); |
| | | } |
| | | } |
| | |
| | | package com.ruoyi.purchase.controller; |
| | | |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.ruoyi.basic.service.ISupplierService; |
| | | import com.ruoyi.framework.aspectj.lang.annotation.Log; |
| | | import com.ruoyi.framework.aspectj.lang.enums.BusinessType; |
| | | import com.ruoyi.framework.web.domain.AjaxResult; |
| | | import com.ruoyi.framework.web.domain.R; |
| | | import io.swagger.v3.oas.annotations.Operation; |
| | | import io.swagger.v3.oas.annotations.tags.Tag; |
| | | import jakarta.servlet.http.HttpServletResponse; |
| | |
| | | @RequestMapping("/purchase/report") |
| | | @AllArgsConstructor |
| | | public class AccountingReportController { |
| | | |
| | | private final ISupplierService supplierService; |
| | | |
| | | |
| | | @GetMapping("/list") |
| | |
| | | @Operation(summary = "éè´æ¥è¡¨-å¢å¼ç¨æ¯å¯¹") |
| | | public void exportTwo(HttpServletResponse response) { |
| | | } |
| | | |
| | | @GetMapping("/supplierTransactions") |
| | | @Log(title = "ä¾åºå徿¥", businessType = BusinessType.OTHER) |
| | | @Operation(summary = "ä¾åºå徿¥") |
| | | public R supplierTransactions(Page page, String supplierName) { |
| | | return R.ok(supplierService.supplierTransactions(page,supplierName)); |
| | | } |
| | | |
| | | @GetMapping("/supplierTransactionsDetails") |
| | | @Log(title = "ä¾åºå徿¥æç»", businessType = BusinessType.OTHER) |
| | | @Operation(summary = "ä¾åºå徿¥æç»") |
| | | public R supplierTransactionsDetails(Page page, Long supplierId) { |
| | | return R.ok(supplierService.supplierTransactionsDetails(page,supplierId)); |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.purchase.vo; |
| | | |
| | | import com.fasterxml.jackson.annotation.JsonFormat; |
| | | import io.swagger.v3.oas.annotations.media.Schema; |
| | | import lombok.Data; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.util.Date; |
| | | |
| | | @Data |
| | | @Schema(name = "SupplierTransactionsDetailsVo", description = "éè´ç®¡ç--ä¾åºå徿¥æç»(è¿å)") |
| | | public class SupplierTransactionsDetailsVo { |
| | | |
| | | @Schema(description = "éè´åID") |
| | | private Long purchaseLedgerId; |
| | | |
| | | @Schema(description = "éè´ååå·") |
| | | private String purchaseContractNumber; |
| | | |
| | | @Schema(description = "éè´ååç¾è®¢æ¥æ") |
| | | @JsonFormat(pattern = "yyyy-MM-dd") |
| | | private Date executionDate; |
| | | |
| | | @Schema(description = "ååéé¢") |
| | | private BigDecimal contractAmount; |
| | | |
| | | @Schema(description = "仿¬¾éé¢") |
| | | private BigDecimal paymentAmount; |
| | | |
| | | @Schema(description = "åºä»éé¢") |
| | | private BigDecimal payableAmount; |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.purchase.vo; |
| | | |
| | | import io.swagger.v3.oas.annotations.media.Schema; |
| | | import lombok.Data; |
| | | |
| | | import java.math.BigDecimal; |
| | | |
| | | @Data |
| | | @Schema(name = "SupplierTransactionsVo", description = "éè´ç®¡ç--ä¾åºå徿¥(è¿å)") |
| | | public class SupplierTransactionsVo { |
| | | |
| | | @Schema(description = "ä¾åºåID") |
| | | private Long supplierId; |
| | | |
| | | @Schema(description = "ä¾åºååç§°") |
| | | private String supplierName; |
| | | |
| | | @Schema(description = "ååæ»éé¢") |
| | | //该ä¾åºåéè´åå累计éé¢ |
| | | private BigDecimal contractAmounts; |
| | | |
| | | @Schema(description = "仿¬¾éé¢") |
| | | //该ä¾åºåéè´ä»æ¬¾ç´¯è®¡éé¢ |
| | | private BigDecimal paymentAmount; |
| | | |
| | | @Schema(description = "åºä»éé¢") |
| | | //该ä¾åºåéè´åºä»ç´¯è®¡éé¢=è´¢å¡(å
¥åº-éè´§) |
| | | private BigDecimal payableAmount; |
| | | |
| | | } |
| | |
| | | SELECT DATE_FORMAT(payment_date, #{dateFormat}) AS dateStr, |
| | | IFNULL(SUM(payment_amount), 0) AS amount |
| | | FROM account_purchase_payment |
| | | WHERE payment_date BETWEEN #{startDate} AND #{endDate} |
| | | WHERE payment_date BETWEEN #{startStr} AND #{endStr} |
| | | GROUP BY dateStr |
| | | ORDER BY dateStr |
| | | </select> |
| | |
| | | SELECT DATE_FORMAT(collection_date, #{dateFormat}) AS dateStr, |
| | | IFNULL(SUM(collection_amount), 0) AS amount |
| | | FROM account_sales_collection |
| | | WHERE collection_date BETWEEN #{startDate} AND #{endDate} |
| | | WHERE collection_date BETWEEN #{startStr} AND #{endStr} |
| | | GROUP BY dateStr |
| | | ORDER BY dateStr |
| | | </select> |
| | |
| | | </if> |
| | | </where> |
| | | </select> |
| | | <select id="supplierTransactions" resultType="com.ruoyi.purchase.vo.SupplierTransactionsVo"> |
| | | select T1.supplier_id, |
| | | sm.supplier_name, |
| | | T1.contractAmounts, |
| | | IFNULL(T2.paymentAmount, 0) AS paymentAmount, |
| | | IFNULL(T3.InboundAmount, 0) - IFNULL(T4.returnAmount, 0) AS payableAmount |
| | | from (select supplier_id, sum(contract_amount) as contractAmounts from purchase_ledger group by supplier_id) T1 |
| | | left join (select supplier_id, sum(payment_amount) as paymentAmount from account_purchase_payment group by supplier_id) T2 on T1.supplier_id = T2.supplier_id |
| | | left join ( |
| | | SELECT |
| | | pl.supplier_id, |
| | | sum(sir.stock_in_num * slp.tax_inclusive_unit_price) AS InboundAmount |
| | | FROM stock_in_record sir |
| | | -- 10 ç±»åæå
³èè´¨æ£è¡¨ |
| | | LEFT JOIN quality_inspect qi ON sir.record_type = 10 AND sir.record_id = qi.id |
| | | -- 卿å
³èéè´ï¼èªå¨éé
7 å 10ï¼ |
| | | LEFT JOIN purchase_ledger pl |
| | | ON pl.id = IF(sir.record_type = 7, sir.record_id, qi.purchase_ledger_id) |
| | | -- 产åå
³èä¸å¨ |
| | | LEFT JOIN sales_ledger_product slp ON pl.id = slp.sales_ledger_id |
| | | -- æ¡ä»¶ |
| | | WHERE sir.approval_status = 1 AND slp.type = 2 |
| | | AND sir.record_type IN ('7','10') |
| | | group by pl.supplier_id |
| | | ) T3 on T3.supplier_id=T1.supplier_id |
| | | left join ( |
| | | select |
| | | supplier_id, |
| | | sum(total_amount) as returnAmount |
| | | from purchase_return_orders pro |
| | | group by supplier_id |
| | | ) T4 on T4.supplier_id=T1.supplier_id |
| | | left join supplier_manage sm on T1.supplier_id = sm.id |
| | | <where> |
| | | <if test="supplierName!=null and supplierName!=''"> |
| | | AND sm.supplier_name LIKE CONCAT('%',#{supplierName},'%') |
| | | </if> |
| | | </where> |
| | | </select> |
| | | <select id="supplierTransactionsDetails" |
| | | resultType="com.ruoyi.purchase.vo.SupplierTransactionsDetailsVo"> |
| | | select pl.id purchaseLedgerId, |
| | | pl.purchase_contract_number, |
| | | pl.execution_date, |
| | | pl.contract_amount, |
| | | IFNULL(T1.paymentAmount, 0) AS paymentAmount, |
| | | IFNULL(T2.InboundAmount, 0) - IFNULL(T3.returnAmount, 0) AS payableAmount |
| | | from purchase_ledger pl |
| | | left join ( |
| | | select |
| | | pl.id, |
| | | sum(app.payment_amount) as paymentAmount |
| | | from account_purchase_payment app |
| | | left join account_payment_application apa on app.account_payment_application_id = apa.id |
| | | left join stock_in_record sir on FIND_IN_SET(sir.id, apa.stock_in_record_ids) > 0 |
| | | -- 10 ç±»åæå
³èè´¨æ£è¡¨ |
| | | LEFT JOIN quality_inspect qi ON sir.record_type = 10 AND sir.record_id = qi.id |
| | | -- 卿å
³èéè´ï¼èªå¨éé
7 å 10ï¼ |
| | | LEFT JOIN purchase_ledger pl |
| | | ON pl.id = IF(sir.record_type = 7, sir.record_id, qi.purchase_ledger_id) |
| | | WHERE sir.approval_status = 1 |
| | | AND sir.record_type IN ('7','10') |
| | | group by pl.id |
| | | )T1 on T1.id = pl.id |
| | | left join ( |
| | | SELECT |
| | | pl.id, |
| | | sum(sir.stock_in_num * slp.tax_inclusive_unit_price) AS InboundAmount |
| | | FROM stock_in_record sir |
| | | -- 10 ç±»åæå
³èè´¨æ£è¡¨ |
| | | LEFT JOIN quality_inspect qi ON sir.record_type = 10 AND sir.record_id = qi.id |
| | | -- 卿å
³èéè´ï¼èªå¨éé
7 å 10ï¼ |
| | | LEFT JOIN purchase_ledger pl |
| | | ON pl.id = IF(sir.record_type = 7, sir.record_id, qi.purchase_ledger_id) |
| | | -- 产åå
³èä¸å¨ |
| | | LEFT JOIN sales_ledger_product slp ON pl.id = slp.sales_ledger_id |
| | | -- æ¡ä»¶ |
| | | WHERE sir.approval_status = 1 AND slp.type = 2 |
| | | AND sir.record_type IN ('7','10') |
| | | group by pl.id |
| | | )T2 on T2.id = pl.id |
| | | left join ( |
| | | select pl.id, |
| | | sum(pro.total_amount) as returnAmount |
| | | from purchase_return_orders pro |
| | | left join purchase_ledger pl on pro.purchase_ledger_id = pl.id |
| | | group by pl.id |
| | | )T3 on T3.id = pl.id |
| | | where pl.supplier_id = #{supplierId} |
| | | </select> |
| | | |
| | | </mapper> |
| | | </mapper> |
| | |
| | | GROUP BY dateStr |
| | | </select> |
| | | |
| | | <select id="selectPurchaseLedgerListPage" resultType="com.ruoyi.purchase.dto.PurchaseLedgerDto"> |
| | | SELECT |
| | | pl.id, |
| | | pl.purchase_contract_number, |
| | | pl.sales_contract_no, |
| | | pl.supplier_id, |
| | | pl.supplier_name, |
| | | pl.project_name, |
| | | pl.contract_amount, |
| | | pl.entry_date, |
| | | pl.execution_date, |
| | | pl.recorder_id, |
| | | pl.recorder_name, |
| | | pl.template_name, |
| | | pl.approve_user_ids, |
| | | sm.is_white, |
| | | pl.approval_status, |
| | | pl.payment_method, |
| | | pl.remarks |
| | | FROM purchase_ledger pl |
| | | LEFT JOIN supplier_manage sm ON pl.supplier_id = sm.id |
| | | <where> |
| | | <if test="c.purchaseContractNumber != null and c.purchaseContractNumber != ''"> |
| | | AND pl.purchase_contract_number LIKE CONCAT('%', #{c.purchaseContractNumber}, '%') |
| | | </if> |
| | | <if test="c.approvalStatus != null and c.approvalStatus != ''"> |
| | | AND pl.approval_status = #{c.approvalStatus} |
| | | </if> |
| | | <if test="c.supplierName != null and c.supplierName != ''"> |
| | | AND pl.supplier_name LIKE CONCAT('%', #{c.supplierName}, '%') |
| | | </if> |
| | | <if test="c.salesContractNo != null and c.salesContractNo != ''"> |
| | | AND pl.sales_contract_no LIKE CONCAT('%', #{c.salesContractNo}, '%') |
| | | </if> |
| | | <if test="c.projectName != null and c.projectName != ''"> |
| | | AND pl.project_name LIKE CONCAT('%', #{c.projectName}, '%') |
| | | </if> |
| | | <if test="c.entryDateStart != null and c.entryDateStart != ''"> |
| | | AND pl.entry_date >= #{c.entryDateStart} |
| | | </if> |
| | | <if test="c.entryDateEnd != null and c.entryDateEnd != ''"> |
| | | AND pl.entry_date <= #{c.entryDateEnd} |
| | | </if> |
| | | <if test="c.supplierId != null"> |
| | | AND pl.supplier_id = #{c.supplierId} |
| | | </if> |
| | | <if test="c.approvalStatus != null"> |
| | | AND pl.approval_status = #{c.approvalStatus} |
| | | </if> |
| | | </where> |
| | | ORDER BY pl.entry_date DESC |
| | | </select> |
| | | |
| | | <select id="selectTotalPurchaseAmount" resultType="java.math.BigDecimal"> |
| | | SELECT IFNULL(SUM(contract_amount), 0) |
| | | FROM purchase_ledger |