Ver código fonte

采购付款---发票管理

caozj 2 anos atrás
pai
commit
0915b1d3c0
41 arquivos alterados com 1709 adições e 0 exclusões
  1. 72 0
      hx-purchase/src/main/java/com/fjhx/purchase/controller/invoice/InvoiceController.java
  2. 71 0
      hx-purchase/src/main/java/com/fjhx/purchase/controller/invoice/InvoiceDetailsController.java
  3. 68 0
      hx-purchase/src/main/java/com/fjhx/purchase/controller/pay/PayController.java
  4. 68 0
      hx-purchase/src/main/java/com/fjhx/purchase/controller/pay/PayDetailController.java
  5. 11 0
      hx-purchase/src/main/java/com/fjhx/purchase/controller/purchase/PurchaseController.java
  6. 17 0
      hx-purchase/src/main/java/com/fjhx/purchase/entity/invoice/dto/InvoiceDetailsDto.java
  7. 21 0
      hx-purchase/src/main/java/com/fjhx/purchase/entity/invoice/dto/InvoiceDetailsSelectDto.java
  8. 17 0
      hx-purchase/src/main/java/com/fjhx/purchase/entity/invoice/dto/InvoiceDto.java
  9. 21 0
      hx-purchase/src/main/java/com/fjhx/purchase/entity/invoice/dto/InvoiceSelectDto.java
  10. 59 0
      hx-purchase/src/main/java/com/fjhx/purchase/entity/invoice/po/Invoice.java
  11. 43 0
      hx-purchase/src/main/java/com/fjhx/purchase/entity/invoice/po/InvoiceDetails.java
  12. 49 0
      hx-purchase/src/main/java/com/fjhx/purchase/entity/invoice/vo/InvoiceDetailsVo.java
  13. 37 0
      hx-purchase/src/main/java/com/fjhx/purchase/entity/invoice/vo/InvoiceVo.java
  14. 17 0
      hx-purchase/src/main/java/com/fjhx/purchase/entity/pay/dto/PayDetailDto.java
  15. 17 0
      hx-purchase/src/main/java/com/fjhx/purchase/entity/pay/dto/PayDetailSelectDto.java
  16. 17 0
      hx-purchase/src/main/java/com/fjhx/purchase/entity/pay/dto/PayDto.java
  17. 17 0
      hx-purchase/src/main/java/com/fjhx/purchase/entity/pay/dto/PaySelectDto.java
  18. 58 0
      hx-purchase/src/main/java/com/fjhx/purchase/entity/pay/po/Pay.java
  19. 38 0
      hx-purchase/src/main/java/com/fjhx/purchase/entity/pay/po/PayDetail.java
  20. 17 0
      hx-purchase/src/main/java/com/fjhx/purchase/entity/pay/vo/PayDetailVo.java
  21. 17 0
      hx-purchase/src/main/java/com/fjhx/purchase/entity/pay/vo/PayVo.java
  22. 7 0
      hx-purchase/src/main/java/com/fjhx/purchase/entity/purchase/po/Purchase.java
  23. 88 0
      hx-purchase/src/main/java/com/fjhx/purchase/flow/PayFlow.java
  24. 42 0
      hx-purchase/src/main/java/com/fjhx/purchase/mapper/invoice/InvoiceDetailsMapper.java
  25. 26 0
      hx-purchase/src/main/java/com/fjhx/purchase/mapper/invoice/InvoiceMapper.java
  26. 26 0
      hx-purchase/src/main/java/com/fjhx/purchase/mapper/pay/PayDetailMapper.java
  27. 26 0
      hx-purchase/src/main/java/com/fjhx/purchase/mapper/pay/PayMapper.java
  28. 62 0
      hx-purchase/src/main/java/com/fjhx/purchase/service/invoice/InvoiceDetailsService.java
  29. 46 0
      hx-purchase/src/main/java/com/fjhx/purchase/service/invoice/InvoiceService.java
  30. 118 0
      hx-purchase/src/main/java/com/fjhx/purchase/service/invoice/impl/InvoiceDetailsServiceImpl.java
  31. 164 0
      hx-purchase/src/main/java/com/fjhx/purchase/service/invoice/impl/InvoiceServiceImpl.java
  32. 46 0
      hx-purchase/src/main/java/com/fjhx/purchase/service/pay/PayDetailService.java
  33. 46 0
      hx-purchase/src/main/java/com/fjhx/purchase/service/pay/PayService.java
  34. 57 0
      hx-purchase/src/main/java/com/fjhx/purchase/service/pay/impl/PayDetailServiceImpl.java
  35. 57 0
      hx-purchase/src/main/java/com/fjhx/purchase/service/pay/impl/PayServiceImpl.java
  36. 8 0
      hx-purchase/src/main/java/com/fjhx/purchase/service/purchase/PurchaseService.java
  37. 32 0
      hx-purchase/src/main/java/com/fjhx/purchase/service/purchase/impl/PurchaseServiceImpl.java
  38. 44 0
      hx-purchase/src/main/resources/mapper/invoice/InvoiceDetailsMapper.xml
  39. 22 0
      hx-purchase/src/main/resources/mapper/invoice/InvoiceMapper.xml
  40. 18 0
      hx-purchase/src/main/resources/mapper/pay/PayDetailMapper.xml
  41. 22 0
      hx-purchase/src/main/resources/mapper/pay/PayMapper.xml

+ 72 - 0
hx-purchase/src/main/java/com/fjhx/purchase/controller/invoice/InvoiceController.java

@@ -0,0 +1,72 @@
+package com.fjhx.purchase.controller.invoice;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.fjhx.common.constant.SourceConstant;
+import com.fjhx.purchase.entity.invoice.po.Invoice;
+import org.springframework.web.bind.annotation.*;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.purchase.entity.invoice.vo.InvoiceVo;
+import com.fjhx.purchase.entity.invoice.dto.InvoiceSelectDto;
+import com.fjhx.purchase.entity.invoice.dto.InvoiceDto;
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import com.fjhx.purchase.service.invoice.InvoiceService;
+import org.springframework.beans.factory.annotation.Autowired;
+
+
+/**
+ * <p>
+ * 发票管理 前端控制器
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-12
+ */
+@DS(SourceConstant.PURCHASE)
+@RestController
+@RequestMapping("/invoice")
+public class InvoiceController {
+
+    @Autowired
+    private InvoiceService invoiceService;
+
+    /**
+     * 发票管理分页
+     */
+    @PostMapping("/page")
+    public Page<InvoiceVo> page(@RequestBody InvoiceSelectDto dto) {
+        return invoiceService.getPage(dto);
+    }
+
+    /**
+     * 发票管理明细
+     */
+    @PostMapping("/detail")
+    public InvoiceVo detail(@RequestBody BaseSelectDto dto) {
+        return invoiceService.detail(dto.getId());
+    }
+
+    /**
+     * 发票管理新增
+     */
+    @PostMapping("/add")
+    public void add(@RequestBody Invoice invoice) {
+        invoiceService.add(invoice);
+    }
+
+    /**
+     * 发票管理编辑
+     */
+    @PostMapping("/edit")
+    public void edit(@RequestBody Invoice invoice) {
+        invoiceService.edit(invoice);
+    }
+
+    /**
+     * 发票管理删除
+     */
+    @PostMapping("/delete")
+    public void delete(@RequestBody BaseSelectDto dto) {
+        invoiceService.delete(dto.getId());
+    }
+
+}

+ 71 - 0
hx-purchase/src/main/java/com/fjhx/purchase/controller/invoice/InvoiceDetailsController.java

@@ -0,0 +1,71 @@
+package com.fjhx.purchase.controller.invoice;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.fjhx.common.constant.SourceConstant;
+import org.springframework.web.bind.annotation.*;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.purchase.entity.invoice.vo.InvoiceDetailsVo;
+import com.fjhx.purchase.entity.invoice.dto.InvoiceDetailsSelectDto;
+import com.fjhx.purchase.entity.invoice.dto.InvoiceDetailsDto;
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import com.fjhx.purchase.service.invoice.InvoiceDetailsService;
+import org.springframework.beans.factory.annotation.Autowired;
+
+
+/**
+ * <p>
+ * 发票明细 前端控制器
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-12
+ */
+@DS(SourceConstant.PURCHASE)
+@RestController
+@RequestMapping("/invoiceDetails")
+public class InvoiceDetailsController {
+
+    @Autowired
+    private InvoiceDetailsService invoiceDetailsService;
+
+    /**
+     * 发票明细分页
+     */
+    @PostMapping("/page")
+    public Page<InvoiceDetailsVo> page(@RequestBody InvoiceDetailsSelectDto dto) {
+        return invoiceDetailsService.getPage(dto);
+    }
+
+    /**
+     * 发票明细明细
+     */
+    @PostMapping("/detail")
+    public InvoiceDetailsVo detail(@RequestBody BaseSelectDto dto) {
+        return invoiceDetailsService.detail(dto.getId());
+    }
+
+    /**
+     * 发票明细新增
+     */
+    @PostMapping("/add")
+    public void add(@RequestBody InvoiceDetailsDto invoiceDetailsDto) {
+        invoiceDetailsService.add(invoiceDetailsDto);
+    }
+
+    /**
+     * 发票明细编辑
+     */
+    @PostMapping("/edit")
+    public void edit(@RequestBody InvoiceDetailsDto invoiceDetailsDto) {
+        invoiceDetailsService.edit(invoiceDetailsDto);
+    }
+
+    /**
+     * 发票明细删除
+     */
+    @PostMapping("/delete")
+    public void delete(@RequestBody BaseSelectDto dto) {
+        invoiceDetailsService.delete(dto.getId());
+    }
+
+}

+ 68 - 0
hx-purchase/src/main/java/com/fjhx/purchase/controller/pay/PayController.java

@@ -0,0 +1,68 @@
+package com.fjhx.purchase.controller.pay;
+
+import org.springframework.web.bind.annotation.*;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.purchase.entity.pay.vo.PayVo;
+import com.fjhx.purchase.entity.pay.dto.PaySelectDto;
+import com.fjhx.purchase.entity.pay.dto.PayDto;
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import com.fjhx.purchase.service.pay.PayService;
+import org.springframework.beans.factory.annotation.Autowired;
+
+
+/**
+ * <p>
+ * 采购付款 前端控制器
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-13
+ */
+@RestController
+@RequestMapping("/pay")
+public class PayController {
+
+    @Autowired
+    private PayService payService;
+
+    /**
+     * 采购付款分页
+     */
+    @PostMapping("/page")
+    public Page<PayVo> page(@RequestBody PaySelectDto dto) {
+        return payService.getPage(dto);
+    }
+
+    /**
+     * 采购付款明细
+     */
+    @PostMapping("/detail")
+    public PayVo detail(@RequestBody BaseSelectDto dto) {
+        return payService.detail(dto.getId());
+    }
+
+    /**
+     * 采购付款新增
+     */
+    @PostMapping("/add")
+    public void add(@RequestBody PayDto payDto) {
+        payService.add(payDto);
+    }
+
+    /**
+     * 采购付款编辑
+     */
+    @PostMapping("/edit")
+    public void edit(@RequestBody PayDto payDto) {
+        payService.edit(payDto);
+    }
+
+    /**
+     * 采购付款删除
+     */
+    @PostMapping("/delete")
+    public void delete(@RequestBody BaseSelectDto dto) {
+        payService.delete(dto.getId());
+    }
+
+}

+ 68 - 0
hx-purchase/src/main/java/com/fjhx/purchase/controller/pay/PayDetailController.java

@@ -0,0 +1,68 @@
+package com.fjhx.purchase.controller.pay;
+
+import org.springframework.web.bind.annotation.*;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.purchase.entity.pay.vo.PayDetailVo;
+import com.fjhx.purchase.entity.pay.dto.PayDetailSelectDto;
+import com.fjhx.purchase.entity.pay.dto.PayDetailDto;
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import com.fjhx.purchase.service.pay.PayDetailService;
+import org.springframework.beans.factory.annotation.Autowired;
+
+
+/**
+ * <p>
+ * 发票明细 前端控制器
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-13
+ */
+@RestController
+@RequestMapping("/payDetail")
+public class PayDetailController {
+
+    @Autowired
+    private PayDetailService payDetailService;
+
+    /**
+     * 发票明细分页
+     */
+    @PostMapping("/page")
+    public Page<PayDetailVo> page(@RequestBody PayDetailSelectDto dto) {
+        return payDetailService.getPage(dto);
+    }
+
+    /**
+     * 发票明细明细
+     */
+    @PostMapping("/detail")
+    public PayDetailVo detail(@RequestBody BaseSelectDto dto) {
+        return payDetailService.detail(dto.getId());
+    }
+
+    /**
+     * 发票明细新增
+     */
+    @PostMapping("/add")
+    public void add(@RequestBody PayDetailDto payDetailDto) {
+        payDetailService.add(payDetailDto);
+    }
+
+    /**
+     * 发票明细编辑
+     */
+    @PostMapping("/edit")
+    public void edit(@RequestBody PayDetailDto payDetailDto) {
+        payDetailService.edit(payDetailDto);
+    }
+
+    /**
+     * 发票明细删除
+     */
+    @PostMapping("/delete")
+    public void delete(@RequestBody BaseSelectDto dto) {
+        payDetailService.delete(dto.getId());
+    }
+
+}

+ 11 - 0
hx-purchase/src/main/java/com/fjhx/purchase/controller/purchase/PurchaseController.java

@@ -12,6 +12,8 @@ import com.ruoyi.common.core.domain.BaseSelectDto;
 import com.fjhx.purchase.service.purchase.PurchaseService;
 import org.springframework.beans.factory.annotation.Autowired;
 
+import java.util.List;
+
 
 /**
  * <p>
@@ -69,4 +71,13 @@ public class PurchaseController {
         purchaseService.delete(dto.getId());
     }
 
+    /**
+     * 根据供应商查询采购合同
+     */
+    @GetMapping("/getListBySupplyId")
+    public List<Purchase> getListBySupplyId(@RequestParam("supplyId") String supplyId) {
+        return purchaseService.getListBySupplyId(supplyId);
+    }
+
+
 }

+ 17 - 0
hx-purchase/src/main/java/com/fjhx/purchase/entity/invoice/dto/InvoiceDetailsDto.java

@@ -0,0 +1,17 @@
+package com.fjhx.purchase.entity.invoice.dto;
+
+import com.fjhx.purchase.entity.invoice.po.InvoiceDetails;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 发票明细新增编辑入参实体
+ *
+ * @author 
+ * @since 2023-04-12
+ */
+@Getter
+@Setter
+public class InvoiceDetailsDto extends InvoiceDetails {
+
+}

+ 21 - 0
hx-purchase/src/main/java/com/fjhx/purchase/entity/invoice/dto/InvoiceDetailsSelectDto.java

@@ -0,0 +1,21 @@
+package com.fjhx.purchase.entity.invoice.dto;
+
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 发票明细列表查询入参实体
+ *
+ * @author 
+ * @since 2023-04-12
+ */
+@Getter
+@Setter
+public class InvoiceDetailsSelectDto extends BaseSelectDto {
+
+    /**
+     * 发票类型
+     */
+    private Integer invoiceType;
+}

+ 17 - 0
hx-purchase/src/main/java/com/fjhx/purchase/entity/invoice/dto/InvoiceDto.java

@@ -0,0 +1,17 @@
+package com.fjhx.purchase.entity.invoice.dto;
+
+import com.fjhx.purchase.entity.invoice.po.Invoice;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 发票管理新增编辑入参实体
+ *
+ * @author 
+ * @since 2023-04-12
+ */
+@Getter
+@Setter
+public class InvoiceDto extends Invoice {
+
+}

+ 21 - 0
hx-purchase/src/main/java/com/fjhx/purchase/entity/invoice/dto/InvoiceSelectDto.java

@@ -0,0 +1,21 @@
+package com.fjhx.purchase.entity.invoice.dto;
+
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 发票管理列表查询入参实体
+ *
+ * @author 
+ * @since 2023-04-12
+ */
+@Getter
+@Setter
+public class InvoiceSelectDto extends BaseSelectDto {
+
+    /**
+     * 发票类型
+     */
+    private Integer invoiceType;
+}

+ 59 - 0
hx-purchase/src/main/java/com/fjhx/purchase/entity/invoice/po/Invoice.java

@@ -0,0 +1,59 @@
+package com.fjhx.purchase.entity.invoice.po;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fjhx.file.entity.ObsFile;
+import com.ruoyi.common.core.domain.BasePo;
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 发票管理
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-12
+ */
+@Getter
+@Setter
+@TableName("invoice")
+public class Invoice extends BasePo {
+
+    /**
+     * 供应商ID
+     */
+    private Long supplyId;
+
+    /**
+     * 开票金额
+     */
+    private BigDecimal money;
+
+    /**
+     * 发票类型
+     */
+    private Integer type;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    /**
+     * 发票明细列表
+     */
+    @TableField(exist = false)
+    private List<InvoiceDetails> invoiceDetailsList;
+
+    /**
+     * 附件列表
+     */
+    @TableField(exist = false)
+    private List<ObsFile> fileList;
+
+}

+ 43 - 0
hx-purchase/src/main/java/com/fjhx/purchase/entity/invoice/po/InvoiceDetails.java

@@ -0,0 +1,43 @@
+package com.fjhx.purchase.entity.invoice.po;
+
+import com.ruoyi.common.core.domain.BasePo;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.math.BigDecimal;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 发票明细
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-12
+ */
+@Getter
+@Setter
+@TableName("invoice_details")
+public class InvoiceDetails extends BasePo {
+
+    /**
+     * 发票管理id
+     */
+    private Long invoiceId;
+
+    /**
+     * 合同id
+     */
+    private Long purchaseId;
+
+    /**
+     * 关联金额
+     */
+    private BigDecimal money;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+}

+ 49 - 0
hx-purchase/src/main/java/com/fjhx/purchase/entity/invoice/vo/InvoiceDetailsVo.java

@@ -0,0 +1,49 @@
+package com.fjhx.purchase.entity.invoice.vo;
+
+import com.fjhx.purchase.entity.invoice.po.InvoiceDetails;
+import lombok.Getter;
+import lombok.Setter;
+import sun.nio.cs.ext.Big5;
+
+import java.math.BigDecimal;
+
+/**
+ * 发票明细列表查询返回值实体
+ *
+ * @author 
+ * @since 2023-04-12
+ */
+@Getter
+@Setter
+public class InvoiceDetailsVo extends InvoiceDetails {
+
+    /**
+     * 供应商名称
+     */
+    private String supplyName;
+
+    /**
+     * 供应商ID
+     */
+    private Long supplyId;
+
+    /**
+     * 发票类型
+     */
+    private Integer invoiceType;
+
+    /**
+     * 总发票金额
+     */
+    private BigDecimal sumMoney;
+
+    /**
+     * 采购编码
+     */
+    private String purchaseCode;
+
+    /**
+     * 采购总金额
+     */
+    private BigDecimal purchaseAmount;
+}

+ 37 - 0
hx-purchase/src/main/java/com/fjhx/purchase/entity/invoice/vo/InvoiceVo.java

@@ -0,0 +1,37 @@
+package com.fjhx.purchase.entity.invoice.vo;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.fjhx.file.entity.ObsFile;
+import com.fjhx.purchase.entity.invoice.po.Invoice;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * 发票管理列表查询返回值实体
+ *
+ * @author 
+ * @since 2023-04-12
+ */
+@Getter
+@Setter
+public class InvoiceVo extends Invoice {
+
+
+    /**
+     * 采购合同编码集合
+     */
+    private String purchaseCodes;
+
+    /**
+     * 供应商名称
+     */
+    private String supplyName;
+
+    /**
+     * 发票列表
+     */
+    private List<InvoiceDetailsVo> invoiceDetailsVoList;
+
+}

+ 17 - 0
hx-purchase/src/main/java/com/fjhx/purchase/entity/pay/dto/PayDetailDto.java

@@ -0,0 +1,17 @@
+package com.fjhx.purchase.entity.pay.dto;
+
+import com.fjhx.purchase.entity.pay.po.PayDetail;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 发票明细新增编辑入参实体
+ *
+ * @author 
+ * @since 2023-04-13
+ */
+@Getter
+@Setter
+public class PayDetailDto extends PayDetail {
+
+}

+ 17 - 0
hx-purchase/src/main/java/com/fjhx/purchase/entity/pay/dto/PayDetailSelectDto.java

@@ -0,0 +1,17 @@
+package com.fjhx.purchase.entity.pay.dto;
+
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 发票明细列表查询入参实体
+ *
+ * @author 
+ * @since 2023-04-13
+ */
+@Getter
+@Setter
+public class PayDetailSelectDto extends BaseSelectDto {
+
+}

+ 17 - 0
hx-purchase/src/main/java/com/fjhx/purchase/entity/pay/dto/PayDto.java

@@ -0,0 +1,17 @@
+package com.fjhx.purchase.entity.pay.dto;
+
+import com.fjhx.purchase.entity.pay.po.Pay;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 采购付款新增编辑入参实体
+ *
+ * @author 
+ * @since 2023-04-13
+ */
+@Getter
+@Setter
+public class PayDto extends Pay {
+
+}

+ 17 - 0
hx-purchase/src/main/java/com/fjhx/purchase/entity/pay/dto/PaySelectDto.java

@@ -0,0 +1,17 @@
+package com.fjhx.purchase.entity.pay.dto;
+
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 采购付款列表查询入参实体
+ *
+ * @author 
+ * @since 2023-04-13
+ */
+@Getter
+@Setter
+public class PaySelectDto extends BaseSelectDto {
+
+}

+ 58 - 0
hx-purchase/src/main/java/com/fjhx/purchase/entity/pay/po/Pay.java

@@ -0,0 +1,58 @@
+package com.fjhx.purchase.entity.pay.po;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ruoyi.common.core.domain.BasePo;
+import java.math.BigDecimal;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 采购付款
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-13
+ */
+@Getter
+@Setter
+@TableName("pay")
+public class Pay extends BasePo {
+
+    /**
+     * 供应商ID
+     */
+    private Long supplyId;
+
+    /**
+     * 付款总额
+     */
+    private BigDecimal amount;
+
+    /**
+     * 发票类型 字典invoice_type
+     */
+    private Integer invoiceType;
+
+    /**
+     * 付款说明
+     */
+    private String remark;
+
+    /**
+     * 付款期限
+     */
+    private String deadline;
+
+    /**
+     * 单据数量
+     */
+    private Integer receiptsNum;
+
+    /**
+     * 付款方式 funds_payment_method
+     */
+    private Integer payType;
+
+}

+ 38 - 0
hx-purchase/src/main/java/com/fjhx/purchase/entity/pay/po/PayDetail.java

@@ -0,0 +1,38 @@
+package com.fjhx.purchase.entity.pay.po;
+
+import com.ruoyi.common.core.domain.BasePo;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.math.BigDecimal;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 发票明细
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-13
+ */
+@Getter
+@Setter
+@TableName("pay_detail")
+public class PayDetail extends BasePo {
+
+    /**
+     * 采购合同id
+     */
+    private Long purchaseId;
+
+    /**
+     * 付款金额
+     */
+    private BigDecimal money;
+
+    /**
+     * 款项说明
+     */
+    private String remark;
+
+}

+ 17 - 0
hx-purchase/src/main/java/com/fjhx/purchase/entity/pay/vo/PayDetailVo.java

@@ -0,0 +1,17 @@
+package com.fjhx.purchase.entity.pay.vo;
+
+import com.fjhx.purchase.entity.pay.po.PayDetail;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 发票明细列表查询返回值实体
+ *
+ * @author 
+ * @since 2023-04-13
+ */
+@Getter
+@Setter
+public class PayDetailVo extends PayDetail {
+
+}

+ 17 - 0
hx-purchase/src/main/java/com/fjhx/purchase/entity/pay/vo/PayVo.java

@@ -0,0 +1,17 @@
+package com.fjhx.purchase.entity.pay.vo;
+
+import com.fjhx.purchase.entity.pay.po.Pay;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 采购付款列表查询返回值实体
+ *
+ * @author 
+ * @since 2023-04-13
+ */
+@Getter
+@Setter
+public class PayVo extends Pay {
+
+}

+ 7 - 0
hx-purchase/src/main/java/com/fjhx/purchase/entity/purchase/po/Purchase.java

@@ -88,6 +88,13 @@ public class Purchase extends BasePo {
     @TableField(exist = false)
     private List<PurchaseDetail> purchaseDetailList;
 
+
+    /**
+     * 发票总金额
+     */
+    @TableField(exist = false)
+    private BigDecimal sumInvoiceMoney;
+
     /**
      * 维多利亚扩展json
      */

+ 88 - 0
hx-purchase/src/main/java/com/fjhx/purchase/flow/PayFlow.java

@@ -0,0 +1,88 @@
+package com.fjhx.purchase.flow;
+
+import cn.hutool.extra.spring.SpringUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.fjhx.common.constant.SourceConstant;
+import com.fjhx.flow.core.FlowDelegate;
+import com.fjhx.purchase.entity.purchase.enums.PurchaseDetailStatusEnum;
+import com.fjhx.purchase.entity.purchase.enums.PurchaseStatusEnum;
+import com.fjhx.purchase.entity.purchase.po.Purchase;
+import com.fjhx.purchase.entity.purchase.po.PurchaseDetail;
+import com.fjhx.purchase.service.purchase.PurchaseDetailService;
+import com.fjhx.purchase.service.purchase.PurchaseService;
+import com.fjhx.purchase.util.code.CodeEnum;
+import com.obs.services.internal.ServiceException;
+import org.springframework.stereotype.Component;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 采购付款流程
+ * @Author:caozj
+ * @DATE:2023/4/3 17:38
+ */
+@DS(SourceConstant.PURCHASE)
+@Component
+public class PayFlow extends FlowDelegate {
+
+    @Override
+    public String getFlowKey() {
+        return "pay_flow";
+    }
+
+
+    /**
+     * 发起流程
+     * @param flowId 流程ID
+     * @param submitData 采购付款数据
+     * @return
+     */
+    @Override
+    public Long start(Long flowId, JSONObject submitData) {
+        PurchaseService purchaseService = SpringUtil.getBean(PurchaseService.class);
+        PurchaseDetailService purchaseDetailService = SpringUtil.getBean(PurchaseDetailService.class);
+        Purchase purchase = submitData.toJavaObject(Purchase.class);
+        purchase.setCode(CodeEnum.PURCHASE.getCode());
+        purchase.setPurchaseStatus(PurchaseStatusEnum.UNDER_REVIEW.getKey());
+        purchaseService.save(purchase);
+        List<PurchaseDetail> purchaseDetailList = purchase.getPurchaseDetailList();
+        if(CollectionUtils.isNotEmpty(purchaseDetailList)){
+            for(PurchaseDetail s : purchaseDetailList){
+                s.setPurchaseId(purchase.getId());
+            }
+            purchaseDetailService.saveBatch(purchaseDetailList);
+        }
+        return purchase.getId();
+    }
+
+    /**
+     * 结束流程
+     * @param flowId 流程ID
+     * @param businessId 业务ID
+     * @param submitData 数据
+     */
+    @Override
+    public void end(Long flowId, Long businessId, JSONObject submitData) {
+        PurchaseService purchaseService = SpringUtil.getBean(PurchaseService.class);
+        PurchaseDetailService purchaseDetailService = SpringUtil.getBean(PurchaseDetailService.class);
+        //通过业务ID查询申购数据
+        Purchase purchase = purchaseService.getById(businessId);
+        if(ObjectUtils.isEmpty(purchase)){
+            throw new ServiceException("采购单不存在");
+        }
+        //修改采购状态为审批通过
+        purchase.setPurchaseStatus(PurchaseStatusEnum.PASS.getKey());
+        purchase.setApprovedDate(new Date());
+        purchaseService.updateById(purchase);
+        //修改采购明细为待采购
+        PurchaseDetail detail = new PurchaseDetail();
+        detail.setStatus(PurchaseDetailStatusEnum.PASS.getKey());
+        purchaseDetailService.update(detail,Wrappers.<PurchaseDetail>query()
+                .lambda().eq(PurchaseDetail::getPurchaseId,purchase.getId()));
+    }
+}

+ 42 - 0
hx-purchase/src/main/java/com/fjhx/purchase/mapper/invoice/InvoiceDetailsMapper.java

@@ -0,0 +1,42 @@
+package com.fjhx.purchase.mapper.invoice;
+
+import com.fjhx.purchase.entity.invoice.po.InvoiceDetails;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.purchase.entity.invoice.vo.InvoiceDetailsVo;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+
+/**
+ * <p>
+ * 发票明细 Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-12
+ */
+public interface InvoiceDetailsMapper extends BaseMapper<InvoiceDetails> {
+
+    /**
+     * 发票明细分页
+     */
+    Page<InvoiceDetailsVo> getPage(@Param("page") Page<Object> page, @Param("ew") IWrapper<InvoiceDetails> wrapper);
+
+    /**
+     * 根据采购单ids查询总发票金额
+     * @param purchaseIds
+     * @return
+     */
+    List<InvoiceDetailsVo> getSumMoneyByPurchaseIds(@Param("purchaseIds") List<Long> purchaseIds);
+
+    /**
+     * 根据发票ID查询明细
+     * @param invoiceId
+     * @return
+     */
+    List<InvoiceDetailsVo> getDetail(@Param("invoiceId")Long invoiceId);
+}

+ 26 - 0
hx-purchase/src/main/java/com/fjhx/purchase/mapper/invoice/InvoiceMapper.java

@@ -0,0 +1,26 @@
+package com.fjhx.purchase.mapper.invoice;
+
+import com.fjhx.purchase.entity.invoice.po.Invoice;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.purchase.entity.invoice.vo.InvoiceVo;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import org.apache.ibatis.annotations.Param;
+
+
+/**
+ * <p>
+ * 发票管理 Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-12
+ */
+public interface InvoiceMapper extends BaseMapper<Invoice> {
+
+    /**
+     * 发票管理分页
+     */
+    Page<InvoiceVo> getPage(@Param("page") Page<Object> page, @Param("ew") IWrapper<Invoice> wrapper);
+
+}

+ 26 - 0
hx-purchase/src/main/java/com/fjhx/purchase/mapper/pay/PayDetailMapper.java

@@ -0,0 +1,26 @@
+package com.fjhx.purchase.mapper.pay;
+
+import com.fjhx.purchase.entity.pay.po.PayDetail;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.purchase.entity.pay.vo.PayDetailVo;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import org.apache.ibatis.annotations.Param;
+
+
+/**
+ * <p>
+ * 发票明细 Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-13
+ */
+public interface PayDetailMapper extends BaseMapper<PayDetail> {
+
+    /**
+     * 发票明细分页
+     */
+    Page<PayDetailVo> getPage(@Param("page") Page<Object> page, @Param("ew") IWrapper<PayDetail> wrapper);
+
+}

+ 26 - 0
hx-purchase/src/main/java/com/fjhx/purchase/mapper/pay/PayMapper.java

@@ -0,0 +1,26 @@
+package com.fjhx.purchase.mapper.pay;
+
+import com.fjhx.purchase.entity.pay.po.Pay;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.purchase.entity.pay.vo.PayVo;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import org.apache.ibatis.annotations.Param;
+
+
+/**
+ * <p>
+ * 采购付款 Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-13
+ */
+public interface PayMapper extends BaseMapper<Pay> {
+
+    /**
+     * 采购付款分页
+     */
+    Page<PayVo> getPage(@Param("page") Page<Object> page, @Param("ew") IWrapper<Pay> wrapper);
+
+}

+ 62 - 0
hx-purchase/src/main/java/com/fjhx/purchase/service/invoice/InvoiceDetailsService.java

@@ -0,0 +1,62 @@
+package com.fjhx.purchase.service.invoice;
+
+import com.fjhx.purchase.entity.invoice.po.InvoiceDetails;
+import com.ruoyi.common.core.service.BaseService;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.purchase.entity.invoice.vo.InvoiceDetailsVo;
+import com.fjhx.purchase.entity.invoice.dto.InvoiceDetailsSelectDto;
+import com.fjhx.purchase.entity.invoice.dto.InvoiceDetailsDto;
+
+import java.util.List;
+import java.util.Map;
+
+
+/**
+ * <p>
+ * 发票明细 服务类
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-12
+ */
+public interface InvoiceDetailsService extends BaseService<InvoiceDetails> {
+
+    /**
+     * 发票明细分页
+     */
+    Page<InvoiceDetailsVo> getPage(InvoiceDetailsSelectDto dto);
+
+    /**
+     * 发票明细明细
+     */
+    InvoiceDetailsVo detail(Long id);
+
+    /**
+     * 发票明细新增
+     */
+    void add(InvoiceDetailsDto invoiceDetailsDto);
+
+    /**
+     * 发票明细编辑
+     */
+    void edit(InvoiceDetailsDto invoiceDetailsDto);
+
+    /**
+     * 发票明细删除
+     */
+    void delete(Long id);
+
+    /**
+     * 根据采购单ids查询总发票金额
+     * @param purchaseIds
+     * @return
+     */
+    List<InvoiceDetailsVo> getSumMoneyByPurchaseIds(List<Long> purchaseIds);
+
+    /**
+     * 根据发票ID查询明细
+     * @param invoiceId
+     * @return
+     */
+    List<InvoiceDetailsVo> getDetail(Long invoiceId);
+}

+ 46 - 0
hx-purchase/src/main/java/com/fjhx/purchase/service/invoice/InvoiceService.java

@@ -0,0 +1,46 @@
+package com.fjhx.purchase.service.invoice;
+
+import com.fjhx.purchase.entity.invoice.po.Invoice;
+import com.ruoyi.common.core.service.BaseService;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.purchase.entity.invoice.vo.InvoiceVo;
+import com.fjhx.purchase.entity.invoice.dto.InvoiceSelectDto;
+import com.fjhx.purchase.entity.invoice.dto.InvoiceDto;
+
+
+/**
+ * <p>
+ * 发票管理 服务类
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-12
+ */
+public interface InvoiceService extends BaseService<Invoice> {
+
+    /**
+     * 发票管理分页
+     */
+    Page<InvoiceVo> getPage(InvoiceSelectDto dto);
+
+    /**
+     * 发票管理明细
+     */
+    InvoiceVo detail(Long id);
+
+    /**
+     * 发票管理新增
+     */
+    void add(Invoice invoice);
+
+    /**
+     * 发票管理编辑
+     */
+    void edit(Invoice invoice);
+
+    /**
+     * 发票管理删除
+     */
+    void delete(Long id);
+
+}

+ 118 - 0
hx-purchase/src/main/java/com/fjhx/purchase/service/invoice/impl/InvoiceDetailsServiceImpl.java

@@ -0,0 +1,118 @@
+package com.fjhx.purchase.service.invoice.impl;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.fjhx.common.constant.SourceConstant;
+import com.fjhx.purchase.entity.invoice.po.Invoice;
+import com.fjhx.purchase.entity.invoice.po.InvoiceDetails;
+import com.fjhx.purchase.entity.purchase.po.Purchase;
+import com.fjhx.purchase.mapper.invoice.InvoiceDetailsMapper;
+import com.fjhx.purchase.service.invoice.InvoiceDetailsService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fjhx.supply.entity.supplier.po.SupplierInfo;
+import com.fjhx.supply.service.supplier.SupplierInfoService;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.wrapper.SqlField;
+import org.apache.commons.collections4.MapUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.purchase.entity.invoice.vo.InvoiceDetailsVo;
+import com.fjhx.purchase.entity.invoice.dto.InvoiceDetailsSelectDto;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import com.fjhx.purchase.entity.invoice.dto.InvoiceDetailsDto;
+import cn.hutool.core.bean.BeanUtil;
+
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+
+/**
+ * <p>
+ * 发票明细 服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-12
+ */
+@DS(SourceConstant.PURCHASE)
+@Service
+public class InvoiceDetailsServiceImpl extends ServiceImpl<InvoiceDetailsMapper, InvoiceDetails> implements InvoiceDetailsService {
+
+    @Autowired
+    private SupplierInfoService supplierInfoService;
+
+
+    @Override
+    public Page<InvoiceDetailsVo> getPage(InvoiceDetailsSelectDto dto) {
+        IWrapper<InvoiceDetails> wrapper = getWrapper();
+        wrapper.orderByDesc("t1", InvoiceDetails::getCreateTime);
+        if(ObjectUtils.isNotEmpty(dto.getInvoiceType())){
+            wrapper.eq("t2", Invoice::getType,dto.getInvoiceType());
+        }
+        if(StringUtils.isNotEmpty(dto.getKeyword())){
+            wrapper.keyword(dto.getKeyword(), new SqlField("t3", Purchase::getCode));
+        }
+        Page<InvoiceDetailsVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
+        List<InvoiceDetailsVo> list = page.getRecords();
+        if(CollectionUtils.isNotEmpty(list)){
+            List<Long> supplyIds = list.stream().map(InvoiceDetailsVo::getSupplyId).collect(Collectors.toList());
+            List<SupplierInfo> supplierInfoList = supplierInfoService.list(Wrappers.<SupplierInfo>query().lambda().in(SupplierInfo::getId,supplyIds));
+            Map<Long,List<SupplierInfo>> supplyMap = supplierInfoList.stream().distinct().collect(Collectors.groupingBy(SupplierInfo::getId));
+            if(MapUtils.isNotEmpty(supplyMap)){
+                for(InvoiceDetailsVo p:list){
+                    List<SupplierInfo> supplys = supplyMap.getOrDefault(p.getSupplyId(),null);
+                    p.setSupplyName(supplys==null?null:supplys.get(0).getName());
+                }
+            }
+        }
+        return page;
+    }
+
+    @Override
+    public InvoiceDetailsVo detail(Long id) {
+        InvoiceDetails InvoiceDetails = this.getById(id);
+        InvoiceDetailsVo result = BeanUtil.toBean(InvoiceDetails, InvoiceDetailsVo.class);
+        return result;
+    }
+
+    @Override
+    public void add(InvoiceDetailsDto invoiceDetailsDto) {
+        this.save(invoiceDetailsDto);
+    }
+
+    @Override
+    public void edit(InvoiceDetailsDto invoiceDetailsDto) {
+        this.updateById(invoiceDetailsDto);
+    }
+
+    @Override
+    public void delete(Long id) {
+        this.removeById(id);
+    }
+
+    /**
+     * 根据采购单ids查询总发票金额
+     * @param purchaseIds
+     * @return
+     */
+    @Override
+    public List<InvoiceDetailsVo> getSumMoneyByPurchaseIds(List<Long> purchaseIds) {
+        return baseMapper.getSumMoneyByPurchaseIds(purchaseIds);
+    }
+
+    /**
+     * 根据发票ID查询明细
+     * @param invoiceId
+     * @return
+     */
+    @Override
+    public List<InvoiceDetailsVo> getDetail(Long invoiceId) {
+        return baseMapper.getDetail(invoiceId);
+    }
+
+
+}

+ 164 - 0
hx-purchase/src/main/java/com/fjhx/purchase/service/invoice/impl/InvoiceServiceImpl.java

@@ -0,0 +1,164 @@
+package com.fjhx.purchase.service.invoice.impl;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.fjhx.common.constant.SourceConstant;
+import com.fjhx.file.utils.ObsFileUtil;
+import com.fjhx.purchase.entity.invoice.po.Invoice;
+import com.fjhx.purchase.entity.invoice.po.InvoiceDetails;
+import com.fjhx.purchase.entity.invoice.vo.InvoiceDetailsVo;
+import com.fjhx.purchase.entity.purchase.po.Purchase;
+import com.fjhx.purchase.mapper.invoice.InvoiceMapper;
+import com.fjhx.purchase.service.invoice.InvoiceDetailsService;
+import com.fjhx.purchase.service.invoice.InvoiceService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fjhx.supply.entity.supplier.po.SupplierInfo;
+import com.fjhx.supply.service.supplier.SupplierInfoService;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.wrapper.SqlField;
+import io.seata.spring.annotation.GlobalTransactional;
+import org.apache.commons.collections4.MapUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.purchase.entity.invoice.vo.InvoiceVo;
+import com.fjhx.purchase.entity.invoice.dto.InvoiceSelectDto;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import com.fjhx.purchase.entity.invoice.dto.InvoiceDto;
+import cn.hutool.core.bean.BeanUtil;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+
+/**
+ * <p>
+ * 发票管理 服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-12
+ */
+@DS(SourceConstant.PURCHASE)
+@Service
+public class InvoiceServiceImpl extends ServiceImpl<InvoiceMapper, Invoice> implements InvoiceService {
+
+    @Autowired
+    private InvoiceDetailsService invoiceDetailsService;
+
+    @Autowired
+    private SupplierInfoService supplierInfoService;
+
+    /**
+     * 分页
+     * @param dto
+     * @return
+     */
+    @Override
+    public Page<InvoiceVo> getPage(InvoiceSelectDto dto) {
+        IWrapper<Invoice> wrapper = getWrapper();
+        wrapper.orderByDesc("t1", Invoice::getCreateTime);
+        if(ObjectUtils.isNotEmpty(dto.getInvoiceType())){
+            wrapper.eq("t1", Invoice::getType,dto.getInvoiceType());
+        }
+        if(StringUtils.isNotEmpty(dto.getKeyword())){
+            wrapper.keyword(dto.getKeyword(), new SqlField("t1.purchaseCodes"));
+        }
+        Page<InvoiceVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
+        List<InvoiceVo> list = page.getRecords();
+        if(CollectionUtils.isNotEmpty(list)){
+            List<Long> supplyIds = list.stream().map(InvoiceVo::getSupplyId).collect(Collectors.toList());
+            List<SupplierInfo> supplierInfoList = supplierInfoService.list(Wrappers.<SupplierInfo>query().lambda().in(SupplierInfo::getId,supplyIds));
+            Map<Long,List<SupplierInfo>> supplyMap = supplierInfoList.stream().distinct().collect(Collectors.groupingBy(SupplierInfo::getId));
+            if(MapUtils.isNotEmpty(supplyMap)){
+                for(InvoiceVo p:list){
+                    List<SupplierInfo> supplys = supplyMap.getOrDefault(p.getSupplyId(),null);
+                    p.setSupplyName(supplys==null?null:supplys.get(0).getName());
+                }
+            }
+        }
+        return page;
+    }
+
+    /**
+     * 详情
+     * @param id
+     * @return
+     */
+    @Override
+    public InvoiceVo detail(Long id) {
+        Invoice Invoice = this.getById(id);
+        InvoiceVo result = BeanUtil.toBean(Invoice, InvoiceVo.class);
+        List<InvoiceDetailsVo> invoiceDetailsVos = invoiceDetailsService.getDetail(id);
+        List<Long> ids = invoiceDetailsVos.stream().distinct().map(InvoiceDetailsVo::getPurchaseId).collect(Collectors.toList());
+        List<InvoiceDetailsVo> invoiceDetailsList = invoiceDetailsService.getSumMoneyByPurchaseIds(ids);
+        Map<Long, BigDecimal> invoiceMap = invoiceDetailsList.stream().collect(Collectors.toMap(InvoiceDetailsVo::getPurchaseId,InvoiceDetailsVo::getSumMoney));
+        for(InvoiceDetailsVo p:invoiceDetailsVos){
+            if(MapUtils.isNotEmpty(invoiceMap)){
+                p.setSumMoney(invoiceMap.getOrDefault(p.getPurchaseId(),null));
+            }else{
+                p.setSumMoney(BigDecimal.ZERO);
+            }
+        }
+        result.setInvoiceDetailsVoList(invoiceDetailsVos);
+        return result;
+    }
+
+    /**
+     * 新增
+     * @param invoice
+     */
+    @Override
+    @GlobalTransactional(rollbackFor = Exception.class)
+    public void add(Invoice invoice) {
+        this.save(invoice);
+        List<InvoiceDetails> invoiceDetailsList = invoice.getInvoiceDetailsList();
+        if(CollectionUtils.isNotEmpty(invoiceDetailsList)){
+            for(InvoiceDetails d:invoiceDetailsList){
+                d.setInvoiceId(invoice.getId());
+            }
+            invoiceDetailsService.saveBatch(invoiceDetailsList);
+        }
+        ObsFileUtil.saveFile(invoice.getFileList(),invoice.getId());
+    }
+
+    /**
+     * 修改
+     * @param invoice
+     */
+    @Override
+    @GlobalTransactional(rollbackFor = Exception.class)
+    public void edit(Invoice invoice) {
+        this.updateById(invoice);
+        invoiceDetailsService.remove(Wrappers.<InvoiceDetails>query().lambda().eq(InvoiceDetails::getInvoiceId,invoice.getId()));
+        List<InvoiceDetails> invoiceDetailsList = invoice.getInvoiceDetailsList();
+        if(CollectionUtils.isNotEmpty(invoiceDetailsList)){
+            for(InvoiceDetails d:invoiceDetailsList){
+                d.setInvoiceId(invoice.getId());
+            }
+            invoiceDetailsService.saveBatch(invoiceDetailsList);
+        }
+        //清空文件和明细
+        ObsFileUtil.removeFile(invoice.getId());
+        //重新添加
+        ObsFileUtil.saveFile(invoice.getFileList(),invoice.getId());
+    }
+
+    /**
+     * 删除
+     * @param id
+     */
+    @Override
+    @GlobalTransactional(rollbackFor = Exception.class)
+    public void delete(Long id) {
+        this.removeById(id);
+        invoiceDetailsService.remove(Wrappers.<InvoiceDetails>query().lambda().eq(InvoiceDetails::getInvoiceId,id));
+        ObsFileUtil.removeFile(id);
+    }
+
+}

+ 46 - 0
hx-purchase/src/main/java/com/fjhx/purchase/service/pay/PayDetailService.java

@@ -0,0 +1,46 @@
+package com.fjhx.purchase.service.pay;
+
+import com.fjhx.purchase.entity.pay.po.PayDetail;
+import com.ruoyi.common.core.service.BaseService;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.purchase.entity.pay.vo.PayDetailVo;
+import com.fjhx.purchase.entity.pay.dto.PayDetailSelectDto;
+import com.fjhx.purchase.entity.pay.dto.PayDetailDto;
+
+
+/**
+ * <p>
+ * 发票明细 服务类
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-13
+ */
+public interface PayDetailService extends BaseService<PayDetail> {
+
+    /**
+     * 发票明细分页
+     */
+    Page<PayDetailVo> getPage(PayDetailSelectDto dto);
+
+    /**
+     * 发票明细明细
+     */
+    PayDetailVo detail(Long id);
+
+    /**
+     * 发票明细新增
+     */
+    void add(PayDetailDto payDetailDto);
+
+    /**
+     * 发票明细编辑
+     */
+    void edit(PayDetailDto payDetailDto);
+
+    /**
+     * 发票明细删除
+     */
+    void delete(Long id);
+
+}

+ 46 - 0
hx-purchase/src/main/java/com/fjhx/purchase/service/pay/PayService.java

@@ -0,0 +1,46 @@
+package com.fjhx.purchase.service.pay;
+
+import com.fjhx.purchase.entity.pay.po.Pay;
+import com.ruoyi.common.core.service.BaseService;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.purchase.entity.pay.vo.PayVo;
+import com.fjhx.purchase.entity.pay.dto.PaySelectDto;
+import com.fjhx.purchase.entity.pay.dto.PayDto;
+
+
+/**
+ * <p>
+ * 采购付款 服务类
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-13
+ */
+public interface PayService extends BaseService<Pay> {
+
+    /**
+     * 采购付款分页
+     */
+    Page<PayVo> getPage(PaySelectDto dto);
+
+    /**
+     * 采购付款明细
+     */
+    PayVo detail(Long id);
+
+    /**
+     * 采购付款新增
+     */
+    void add(PayDto payDto);
+
+    /**
+     * 采购付款编辑
+     */
+    void edit(PayDto payDto);
+
+    /**
+     * 采购付款删除
+     */
+    void delete(Long id);
+
+}

+ 57 - 0
hx-purchase/src/main/java/com/fjhx/purchase/service/pay/impl/PayDetailServiceImpl.java

@@ -0,0 +1,57 @@
+package com.fjhx.purchase.service.pay.impl;
+
+import com.fjhx.purchase.entity.pay.po.PayDetail;
+import com.fjhx.purchase.mapper.pay.PayDetailMapper;
+import com.fjhx.purchase.service.pay.PayDetailService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.purchase.entity.pay.vo.PayDetailVo;
+import com.fjhx.purchase.entity.pay.dto.PayDetailSelectDto;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import com.fjhx.purchase.entity.pay.dto.PayDetailDto;
+import cn.hutool.core.bean.BeanUtil;
+
+
+/**
+ * <p>
+ * 发票明细 服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-13
+ */
+@Service
+public class PayDetailServiceImpl extends ServiceImpl<PayDetailMapper, PayDetail> implements PayDetailService {
+
+    @Override
+    public Page<PayDetailVo> getPage(PayDetailSelectDto dto) {
+        IWrapper<PayDetail> wrapper = getWrapper();
+        wrapper.orderByDesc("pd", PayDetail::getId);
+        Page<PayDetailVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
+        return page;
+    }
+
+    @Override
+    public PayDetailVo detail(Long id) {
+        PayDetail PayDetail = this.getById(id);
+        PayDetailVo result = BeanUtil.toBean(PayDetail, PayDetailVo.class);
+        return result;
+    }
+
+    @Override
+    public void add(PayDetailDto payDetailDto) {
+        this.save(payDetailDto);
+    }
+
+    @Override
+    public void edit(PayDetailDto payDetailDto) {
+        this.updateById(payDetailDto);
+    }
+
+    @Override
+    public void delete(Long id) {
+        this.removeById(id);
+    }
+
+}

+ 57 - 0
hx-purchase/src/main/java/com/fjhx/purchase/service/pay/impl/PayServiceImpl.java

@@ -0,0 +1,57 @@
+package com.fjhx.purchase.service.pay.impl;
+
+import com.fjhx.purchase.entity.pay.po.Pay;
+import com.fjhx.purchase.mapper.pay.PayMapper;
+import com.fjhx.purchase.service.pay.PayService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.purchase.entity.pay.vo.PayVo;
+import com.fjhx.purchase.entity.pay.dto.PaySelectDto;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import com.fjhx.purchase.entity.pay.dto.PayDto;
+import cn.hutool.core.bean.BeanUtil;
+
+
+/**
+ * <p>
+ * 采购付款 服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-13
+ */
+@Service
+public class PayServiceImpl extends ServiceImpl<PayMapper, Pay> implements PayService {
+
+    @Override
+    public Page<PayVo> getPage(PaySelectDto dto) {
+        IWrapper<Pay> wrapper = getWrapper();
+        wrapper.orderByDesc("p", Pay::getId);
+        Page<PayVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
+        return page;
+    }
+
+    @Override
+    public PayVo detail(Long id) {
+        Pay Pay = this.getById(id);
+        PayVo result = BeanUtil.toBean(Pay, PayVo.class);
+        return result;
+    }
+
+    @Override
+    public void add(PayDto payDto) {
+        this.save(payDto);
+    }
+
+    @Override
+    public void edit(PayDto payDto) {
+        this.updateById(payDto);
+    }
+
+    @Override
+    public void delete(Long id) {
+        this.removeById(id);
+    }
+
+}

+ 8 - 0
hx-purchase/src/main/java/com/fjhx/purchase/service/purchase/PurchaseService.java

@@ -7,6 +7,8 @@ import com.fjhx.purchase.entity.purchase.vo.PurchaseVo;
 import com.fjhx.purchase.entity.purchase.dto.PurchaseSelectDto;
 import com.fjhx.purchase.entity.purchase.dto.PurchaseDto;
 
+import java.util.List;
+
 
 /**
  * <p>
@@ -43,4 +45,10 @@ public interface PurchaseService extends BaseService<Purchase> {
      */
     void delete(Long id);
 
+    /**
+     * 根据供应商查询采购合同
+     * @param supplyId
+     * @return
+     */
+    List<Purchase> getListBySupplyId(String supplyId);
 }

+ 32 - 0
hx-purchase/src/main/java/com/fjhx/purchase/service/purchase/impl/PurchaseServiceImpl.java

@@ -9,11 +9,15 @@ import com.fjhx.common.constant.SourceConstant;
 import com.fjhx.item.entity.product.po.ProductInfo;
 import com.fjhx.item.entity.product.vo.ProductInfoVo;
 import com.fjhx.item.service.product.ProductInfoService;
+import com.fjhx.purchase.entity.invoice.po.Invoice;
+import com.fjhx.purchase.entity.invoice.po.InvoiceDetails;
+import com.fjhx.purchase.entity.invoice.vo.InvoiceDetailsVo;
 import com.fjhx.purchase.entity.purchase.enums.PurchaseStatusEnum;
 import com.fjhx.purchase.entity.purchase.po.Purchase;
 import com.fjhx.purchase.entity.purchase.po.PurchaseDetail;
 import com.fjhx.purchase.mapper.purchase.PurchaseMapper;
 import com.fjhx.purchase.service.arrival.ArrivalDetailService;
+import com.fjhx.purchase.service.invoice.InvoiceDetailsService;
 import com.fjhx.purchase.service.purchase.PurchaseDetailService;
 import com.fjhx.purchase.service.purchase.PurchaseService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -21,6 +25,7 @@ import com.fjhx.purchase.util.code.CodeEnum;
 import com.fjhx.supply.entity.supplier.po.SupplierInfo;
 import com.fjhx.supply.service.supplier.SupplierInfoService;
 import com.obs.services.internal.ServiceException;
+import com.ruoyi.common.utils.StringUtils;
 import io.seata.spring.annotation.GlobalTransactional;
 import org.apache.commons.collections4.MapUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -54,6 +59,9 @@ public class PurchaseServiceImpl extends ServiceImpl<PurchaseMapper, Purchase> i
     private SupplierInfoService supplierInfoService;
 
     @Autowired
+    private InvoiceDetailsService invoiceDetailsService;
+
+    @Autowired
     private PurchaseDetailService purchaseDetailService;
 
     @Autowired
@@ -167,4 +175,28 @@ public class PurchaseServiceImpl extends ServiceImpl<PurchaseMapper, Purchase> i
         this.removeById(id);
     }
 
+    /**
+     * 根据供应商查询采购合同
+     * @param supplyId
+     * @return
+     */
+    @Override
+    public List<Purchase> getListBySupplyId(String supplyId) {
+        if(StringUtils.isEmpty(supplyId)){
+            throw new ServiceException("供应商ID不能为空");
+        }
+        List<Purchase> list = this.list(Wrappers.<Purchase>query().lambda().eq(Purchase::getSupplyId,supplyId));
+        List<Long> ids = list.stream().distinct().map(Purchase::getId).collect(Collectors.toList());
+        List<InvoiceDetailsVo> invoiceDetailsList = invoiceDetailsService.getSumMoneyByPurchaseIds(ids);
+        Map<Long,BigDecimal> invoiceMap = invoiceDetailsList.stream().collect(Collectors.toMap(InvoiceDetailsVo::getPurchaseId,InvoiceDetailsVo::getSumMoney));
+        for(Purchase p:list){
+            if(MapUtils.isNotEmpty(invoiceMap)){
+                p.setSumInvoiceMoney(invoiceMap.getOrDefault(p.getId(),null));
+            }else{
+                p.setSumInvoiceMoney(BigDecimal.ZERO);
+            }
+        }
+        return list;
+    }
+
 }

+ 44 - 0
hx-purchase/src/main/resources/mapper/invoice/InvoiceDetailsMapper.xml

@@ -0,0 +1,44 @@
+<?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.fjhx.purchase.mapper.invoice.InvoiceDetailsMapper">
+    <select id="getPage" resultType="com.fjhx.purchase.entity.invoice.vo.InvoiceDetailsVo">
+        SELECT
+            t1.*,
+            t2.supply_id AS supplyId,
+            t2.type  AS invoiceType,
+            t3.`code` AS purchaseCode
+        FROM
+            invoice_details t1
+        LEFT JOIN invoice t2 ON t1.invoice_id = t2.id
+        LEFT JOIN purchase t3 ON t3.id = t1.purchase_id
+            ${ew.customSqlSegment}
+    </select>
+
+    <select id="getSumMoneyByPurchaseIds" resultType="com.fjhx.purchase.entity.invoice.vo.InvoiceDetailsVo">
+        SELECT
+            purchase_id,
+            IFNULL(SUM(money),0) AS sumMoney
+        FROM
+            invoice_details
+        <where>
+            <if test="purchaseIds neq null and purchaseIds.size() > 0">
+                <foreach collection="purchaseIds" item="purchaseId" open="purchase_id IN (" separator="," close=")">
+                    #{purchaseId}
+                </foreach>
+            </if>
+        </where>
+        GROUP BY
+            purchase_id
+    </select>
+
+    <select id="getDetail" resultType="com.fjhx.purchase.entity.invoice.vo.InvoiceDetailsVo">
+        SELECT
+            t1.*,
+            t2.`code` AS purchaseCode,
+            t2.amount AS purchaseAmount
+        FROM
+            invoice_details t1
+            LEFT JOIN purchase t2 ON t1.purchase_id = t2.id
+        WHERE invoice_id = #{invoiceId}
+    </select>
+</mapper>

+ 22 - 0
hx-purchase/src/main/resources/mapper/invoice/InvoiceMapper.xml

@@ -0,0 +1,22 @@
+<?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.fjhx.purchase.mapper.invoice.InvoiceMapper">
+    <select id="getPage" resultType="com.fjhx.purchase.entity.invoice.vo.InvoiceVo">
+        SELECT
+            *
+        FROM
+            (
+                SELECT
+                    t1.*,
+                    GROUP_CONCAT( t3.`code` ) AS purchaseCodes
+                FROM
+                    invoice t1
+                        LEFT JOIN invoice_details t2 ON t1.id = t2.invoice_id
+                        LEFT JOIN purchase t3 ON t2.purchase_id = t3.id
+                GROUP BY
+                    t1.id
+            ) t1
+            ${ew.customSqlSegment}
+    </select>
+
+</mapper>

+ 18 - 0
hx-purchase/src/main/resources/mapper/pay/PayDetailMapper.xml

@@ -0,0 +1,18 @@
+<?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.fjhx.purchase.mapper.pay.PayDetailMapper">
+    <select id="getPage" resultType="com.fjhx.purchase.entity.pay.vo.PayDetailVo">
+        select
+            pd.id,
+            pd.purchase_id,
+            pd.money,
+            pd.remark,
+            pd.create_user,
+            pd.create_time,
+            pd.update_user,
+            pd.update_time
+        from pay_detail pd
+            ${ew.customSqlSegment}
+    </select>
+
+</mapper>

+ 22 - 0
hx-purchase/src/main/resources/mapper/pay/PayMapper.xml

@@ -0,0 +1,22 @@
+<?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.fjhx.purchase.mapper.pay.PayMapper">
+    <select id="getPage" resultType="com.fjhx.purchase.entity.pay.vo.PayVo">
+        select
+            p.id,
+            p.supply_id,
+            p.amount,
+            p.invoice_type,
+            p.remark,
+            p.deadline,
+            p.receipts_num,
+            p.pay_type,
+            p.create_user,
+            p.create_time,
+            p.update_user,
+            p.update_time
+        from pay p
+            ${ew.customSqlSegment}
+    </select>
+
+</mapper>