Browse Source

Merge branch 'dev'

yzc 2 years ago
parent
commit
a46b4b21f7
100 changed files with 3396 additions and 606 deletions
  1. 17 0
      code/src/test/java/AccountDataSource.java
  2. 46 0
      hx-account/src/main/java/com/fjhx/account/controller/transaction/TransactionController.java
  3. 70 0
      hx-account/src/main/java/com/fjhx/account/controller/transaction/TransactionDepartmentController.java
  4. 55 0
      hx-account/src/main/java/com/fjhx/account/entity/account/dto/AccountRequestFundsSelectDto.java
  5. 4 4
      hx-account/src/main/java/com/fjhx/account/entity/account/po/AccountRunningWater.java
  6. 17 0
      hx-account/src/main/java/com/fjhx/account/entity/transaction/dto/TransactionDepartmentDto.java
  7. 17 0
      hx-account/src/main/java/com/fjhx/account/entity/transaction/dto/TransactionDepartmentSelectDto.java
  8. 17 0
      hx-account/src/main/java/com/fjhx/account/entity/transaction/dto/TransactionDto.java
  9. 31 0
      hx-account/src/main/java/com/fjhx/account/entity/transaction/dto/TransactionSelectDto.java
  10. 56 0
      hx-account/src/main/java/com/fjhx/account/entity/transaction/po/Transaction.java
  11. 31 0
      hx-account/src/main/java/com/fjhx/account/entity/transaction/po/TransactionDepartment.java
  12. 17 0
      hx-account/src/main/java/com/fjhx/account/entity/transaction/vo/TransactionDepartmentVo.java
  13. 27 0
      hx-account/src/main/java/com/fjhx/account/entity/transaction/vo/TransactionVo.java
  14. 25 0
      hx-account/src/main/java/com/fjhx/account/mapper/transaction/TransactionDepartmentMapper.java
  15. 26 0
      hx-account/src/main/java/com/fjhx/account/mapper/transaction/TransactionMapper.java
  16. 29 23
      hx-account/src/main/java/com/fjhx/account/service/account/impl/AccountPaymentServiceImpl.java
  17. 24 3
      hx-account/src/main/java/com/fjhx/account/service/account/impl/AccountRequestFundsServiceImpl.java
  18. 88 42
      hx-account/src/main/java/com/fjhx/account/service/account/impl/AccountRunningWaterServiceImpl.java
  19. 47 0
      hx-account/src/main/java/com/fjhx/account/service/transaction/TransactionDepartmentService.java
  20. 31 0
      hx-account/src/main/java/com/fjhx/account/service/transaction/TransactionService.java
  21. 57 0
      hx-account/src/main/java/com/fjhx/account/service/transaction/impl/TransactionDepartmentServiceImpl.java
  22. 72 0
      hx-account/src/main/java/com/fjhx/account/service/transaction/impl/TransactionServiceImpl.java
  23. 17 0
      hx-account/src/main/resources/mapper/transaction/TransactionDepartmentMapper.xml
  24. 21 0
      hx-account/src/main/resources/mapper/transaction/TransactionMapper.xml
  25. 1 1
      hx-common/src/main/java/com/fjhx/common/service/coding/impl/CodingRuleServiceImpl.java
  26. 170 0
      hx-common/src/main/java/com/fjhx/common/utils/ExchangeRateUtil.java
  27. 4 2
      hx-customer/src/main/java/com/fjhx/customer/entity/customer/vo/CustomerVo.java
  28. 15 0
      hx-customer/src/main/java/com/fjhx/customer/service/customer/impl/CustomerServiceImpl.java
  29. 20 6
      hx-item/src/main/java/com/fjhx/item/service/product/impl/ProductInfoServiceImpl.java
  30. 5 4
      hx-mes/src/main/java/com/fjhx/mes/service/work/impl/WorkOrderServiceImpl.java
  31. 1 1
      hx-purchase/src/main/java/com/fjhx/purchase/controller/purchase/PurchaseOtherFeeController.java
  32. 6 6
      hx-purchase/src/main/java/com/fjhx/purchase/controller/sales/SalesReturnController.java
  33. 1 1
      hx-purchase/src/main/java/com/fjhx/purchase/entity/pay/dto/PaySelectDto.java
  34. 10 0
      hx-purchase/src/main/java/com/fjhx/purchase/entity/purchase/po/Purchase.java
  35. 10 0
      hx-purchase/src/main/java/com/fjhx/purchase/entity/sales/vo/SalesReturnDetailVo.java
  36. 67 0
      hx-purchase/src/main/java/com/fjhx/purchase/flow/PayFlow.java
  37. 6 2
      hx-purchase/src/main/java/com/fjhx/purchase/mapper/pay/PayDetailMapper.java
  38. 9 3
      hx-purchase/src/main/java/com/fjhx/purchase/mapper/purchase/PurchaseDetailMapper.java
  39. 2 4
      hx-purchase/src/main/java/com/fjhx/purchase/mapper/purchase/PurchaseMapper.java
  40. 6 2
      hx-purchase/src/main/java/com/fjhx/purchase/mapper/sales/SalesReturnMapper.java
  41. 79 0
      hx-purchase/src/main/java/com/fjhx/purchase/service/MyPurchaseServiceImpl.java
  42. 34 28
      hx-purchase/src/main/java/com/fjhx/purchase/service/arrival/impl/ArrivalServiceImpl.java
  43. 11 4
      hx-purchase/src/main/java/com/fjhx/purchase/service/invoice/impl/InvoiceServiceImpl.java
  44. 10 5
      hx-purchase/src/main/java/com/fjhx/purchase/service/pay/PayDetailService.java
  45. 31 9
      hx-purchase/src/main/java/com/fjhx/purchase/service/pay/impl/PayDetailServiceImpl.java
  46. 5 5
      hx-purchase/src/main/java/com/fjhx/purchase/service/purchase/PurchaseDetailService.java
  47. 9 0
      hx-purchase/src/main/java/com/fjhx/purchase/service/purchase/impl/PurchaseDetailServiceImpl.java
  48. 23 19
      hx-purchase/src/main/java/com/fjhx/purchase/service/purchase/impl/PurchaseServiceImpl.java
  49. 31 21
      hx-purchase/src/main/java/com/fjhx/purchase/service/refund/impl/RefundServiceImpl.java
  50. 6 5
      hx-purchase/src/main/java/com/fjhx/purchase/service/sales/SalesReturnService.java
  51. 10 10
      hx-purchase/src/main/java/com/fjhx/purchase/service/sales/impl/SalesReturnDetailServiceImpl.java
  52. 11 10
      hx-purchase/src/main/java/com/fjhx/purchase/service/sales/impl/SalesReturnServiceImpl.java
  53. 3 1
      hx-purchase/src/main/java/com/fjhx/purchase/service/subscribe/impl/SubscribeDetailServiceImpl.java
  54. 9 1
      hx-purchase/src/main/resources/mapper/pay/PayDetailMapper.xml
  55. 9 2
      hx-purchase/src/main/resources/mapper/purchase/PurchaseDetailMapper.xml
  56. 20 21
      hx-purchase/src/main/resources/mapper/purchase/PurchaseMapper.xml
  57. 2 1
      hx-purchase/src/main/resources/mapper/refund/RefundMapper.xml
  58. 8 7
      hx-purchase/src/main/resources/mapper/sales/SalesReturnDetailMapper.xml
  59. 14 0
      hx-purchase/src/main/resources/mapper/sales/SalesReturnMapper.xml
  60. 21 15
      hx-sale/src/main/java/com/fjhx/sale/controller/contract/ContractController.java
  61. 74 0
      hx-sale/src/main/java/com/fjhx/sale/controller/intermediate/IntermediateContractController.java
  62. 6 1
      hx-sale/src/main/java/com/fjhx/sale/entity/contract/dto/ContractSelectDto.java
  63. 17 0
      hx-sale/src/main/java/com/fjhx/sale/entity/contract/dto/PayDecisionAidDto.java
  64. 23 6
      hx-sale/src/main/java/com/fjhx/sale/entity/contract/po/ContractProduct.java
  65. 18 4
      hx-sale/src/main/java/com/fjhx/sale/entity/contract/po/ContractShipment.java
  66. 10 0
      hx-sale/src/main/java/com/fjhx/sale/entity/contract/vo/ContractProductVo.java
  67. 22 1
      hx-sale/src/main/java/com/fjhx/sale/entity/contract/vo/ContractVo.java
  68. 74 0
      hx-sale/src/main/java/com/fjhx/sale/entity/contract/vo/PayDecisionAidVo.java
  69. 6 1
      hx-sale/src/main/java/com/fjhx/sale/entity/documents/vo/DocumentsVo.java
  70. 17 0
      hx-sale/src/main/java/com/fjhx/sale/entity/intermediate/dto/IntermediateContractDto.java
  71. 17 0
      hx-sale/src/main/java/com/fjhx/sale/entity/intermediate/dto/IntermediateContractSelectDto.java
  72. 56 0
      hx-sale/src/main/java/com/fjhx/sale/entity/intermediate/po/IntermediateContract.java
  73. 59 0
      hx-sale/src/main/java/com/fjhx/sale/entity/intermediate/vo/IntermediateContractVo.java
  74. 4 4
      hx-sale/src/main/java/com/fjhx/sale/entity/pack/po/PackDetailProduct.java
  75. 4 2
      hx-sale/src/main/java/com/fjhx/sale/entity/sale/vo/SaleQuotationVo.java
  76. 39 15
      hx-sale/src/main/java/com/fjhx/sale/flow/PurchaseFlow.java
  77. 3 3
      hx-sale/src/main/java/com/fjhx/sale/mapper/contract/ContractMapper.java
  78. 33 0
      hx-sale/src/main/java/com/fjhx/sale/mapper/intermediate/IntermediateContractMapper.java
  79. 22 0
      hx-sale/src/main/java/com/fjhx/sale/service/MySaleServiceImpl.java
  80. 8 8
      hx-sale/src/main/java/com/fjhx/sale/service/claim/impl/ClaimServiceImpl.java
  81. 7 4
      hx-sale/src/main/java/com/fjhx/sale/service/contract/ContractService.java
  82. 12 1
      hx-sale/src/main/java/com/fjhx/sale/service/contract/impl/ContractProductServiceImpl.java
  83. 325 101
      hx-sale/src/main/java/com/fjhx/sale/service/contract/impl/ContractServiceImpl.java
  84. 42 33
      hx-sale/src/main/java/com/fjhx/sale/service/documents/impl/DocumentsServiceImpl.java
  85. 50 0
      hx-sale/src/main/java/com/fjhx/sale/service/intermediate/IntermediateContractService.java
  86. 168 0
      hx-sale/src/main/java/com/fjhx/sale/service/intermediate/impl/IntermediateContractServiceImpl.java
  87. 26 14
      hx-sale/src/main/java/com/fjhx/sale/service/pack/impl/PackDetailServiceImpl.java
  88. 8 0
      hx-sale/src/main/java/com/fjhx/sale/service/sale/impl/SaleQuotationServiceImpl.java
  89. 6 10
      hx-sale/src/main/resources/mapper/contract/ContractMapper.xml
  90. 20 18
      hx-sale/src/main/resources/mapper/contract/ContractProductMapper.xml
  91. 37 0
      hx-sale/src/main/resources/mapper/intermediate/IntermediateContractMapper.xml
  92. 15 7
      hx-sale/src/main/resources/mapper/pack/PackDetailMapper.xml
  93. 48 22
      hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/service/jd/impl/JdOrderServiceImpl.java
  94. 26 59
      hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/service/purchase/impl/PurchaseBackServiceImpl.java
  95. 1 0
      hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/service/quality/impl/QualityInfoServiceImpl.java
  96. 60 24
      hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/service/stock/impl/StockTransferServiceImpl.java
  97. 4 0
      hx-wms/pom.xml
  98. 58 0
      hx-wms/src/main/java/com/fjhx/wms/entity/arrival/po/ArrivalDetailPo.java
  99. 326 0
      hx-wms/src/main/java/com/fjhx/wms/entity/contract/po/ContractPo.java
  100. 124 0
      hx-wms/src/main/java/com/fjhx/wms/entity/purchase/po/PurchaseDetailPo.java

+ 17 - 0
code/src/test/java/AccountDataSource.java

@@ -0,0 +1,17 @@
+import fly.generator.GeneratorApplication;
+
+public class AccountDataSource {
+
+    public static void main(String[] args) {
+        GeneratorApplication.builder()
+                .url("jdbc:mysql://36.134.91.96:12333/bytesailing_account?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true")
+                .username("root")
+                .password("Fjhx@pwd123")
+                .port(9989)
+                .module("hx-account")
+                .parent("com.fjhx.account")
+                .superServiceClass("com.ruoyi.common.core.service.BaseService")
+                .build();
+    }
+
+}

+ 46 - 0
hx-account/src/main/java/com/fjhx/account/controller/transaction/TransactionController.java

@@ -0,0 +1,46 @@
+package com.fjhx.account.controller.transaction;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.account.entity.transaction.dto.TransactionDto;
+import com.fjhx.account.entity.transaction.dto.TransactionSelectDto;
+import com.fjhx.account.entity.transaction.vo.TransactionVo;
+import com.fjhx.account.service.transaction.TransactionService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+
+/**
+ * <p>
+ * 往来管理 前端控制器
+ * </p>
+ *
+ * @author
+ * @since 2023-06-26
+ */
+@RestController
+@RequestMapping("/transaction")
+public class TransactionController {
+
+    @Autowired
+    private TransactionService transactionService;
+
+    /**
+     * 往来管理分页
+     */
+    @PostMapping("/page")
+    public Page<TransactionVo> page(@RequestBody TransactionSelectDto dto) {
+        return transactionService.getPage(dto);
+    }
+
+    /**
+     * 往来管理新增
+     */
+    @PostMapping("/add")
+    public void add(@RequestBody TransactionDto transactionDto) {
+        transactionService.add(transactionDto);
+    }
+
+}

+ 70 - 0
hx-account/src/main/java/com/fjhx/account/controller/transaction/TransactionDepartmentController.java

@@ -0,0 +1,70 @@
+package com.fjhx.account.controller.transaction;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.account.entity.transaction.dto.TransactionDepartmentDto;
+import com.fjhx.account.entity.transaction.dto.TransactionDepartmentSelectDto;
+import com.fjhx.account.entity.transaction.po.TransactionDepartment;
+import com.fjhx.account.entity.transaction.vo.TransactionDepartmentVo;
+import com.fjhx.account.service.transaction.TransactionDepartmentService;
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 往来单位 前端控制器
+ * </p>
+ *
+ * @author
+ * @since 2023-06-26
+ */
+@RestController
+@RequestMapping("/transactionDepartment")
+public class TransactionDepartmentController {
+
+    @Autowired
+    private TransactionDepartmentService transactionDepartmentService;
+
+    /**
+     * 往来单位列表
+     */
+    @GetMapping("/list")
+    public List<TransactionDepartment> list() {
+        return transactionDepartmentService.getList();
+    }
+
+    /**
+     * 往来单位分页
+     */
+    @PostMapping("/page")
+    public Page<TransactionDepartmentVo> page(@RequestBody TransactionDepartmentSelectDto dto) {
+        return transactionDepartmentService.getPage(dto);
+    }
+
+    /**
+     * 往来单位新增
+     */
+    @PostMapping("/add")
+    public void add(@RequestBody TransactionDepartmentDto transactionDepartmentDto) {
+        transactionDepartmentService.add(transactionDepartmentDto);
+    }
+
+    /**
+     * 往来单位编辑
+     */
+    @PostMapping("/edit")
+    public void edit(@RequestBody TransactionDepartmentDto transactionDepartmentDto) {
+        transactionDepartmentService.edit(transactionDepartmentDto);
+    }
+
+    /**
+     * 往来单位删除
+     */
+    @PostMapping("/delete")
+    public void delete(@RequestBody BaseSelectDto dto) {
+        transactionDepartmentService.delete(dto.getId());
+    }
+
+}

+ 55 - 0
hx-account/src/main/java/com/fjhx/account/entity/account/dto/AccountRequestFundsSelectDto.java

@@ -1,10 +1,14 @@
 package com.fjhx.account.entity.account.dto;
 
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.ObjectUtil;
 import com.ruoyi.common.core.domain.BaseSelectDto;
+import com.ruoyi.common.exception.ServiceException;
 import lombok.Getter;
 import lombok.Setter;
 
 import java.math.BigDecimal;
+import java.util.Date;
 
 /**
  * 请款表列表查询入参实体
@@ -75,4 +79,55 @@ public class AccountRequestFundsSelectDto extends BaseSelectDto {
      */
     private Integer writeOffStatus;
 
+    /**
+     * 最小请款金额
+     */
+    private BigDecimal minAdvanceAmounts;
+
+    /**
+     * 最大请款金额
+     */
+    private BigDecimal maxAdvanceAmounts;
+
+    /**
+     * 用款说明
+     */
+    private String paymentRemarks;
+
+    /**
+     * 付款方式
+     */
+    private String paymentMethod;
+
+    private String beginCreateTime;
+    private String endCreateTime;
+
+    public Date getBeginCreateTime() {
+        if (ObjectUtil.isEmpty(beginCreateTime)) {
+            return null;
+        }
+
+        try {
+            return DateUtil.beginOfDay(DateUtil.parse(beginCreateTime));
+        } catch (Exception e) {
+            throw new ServiceException("开始时间格式错误");
+        }
+
+    }
+
+    public Date getEndCreateTime() {
+
+        if (ObjectUtil.isEmpty(endCreateTime)) {
+            return null;
+        }
+
+        try {
+            return DateUtil.endOfDay(DateUtil.parse(endCreateTime));
+        } catch (Exception e) {
+            throw new ServiceException("结束时间格式错误");
+        }
+
+    }
+
+
 }

+ 4 - 4
hx-account/src/main/java/com/fjhx/account/entity/account/po/AccountRunningWater.java

@@ -1,14 +1,14 @@
 package com.fjhx.account.entity.account.po;
 
 import com.baomidou.mybatisplus.annotation.TableField;
-import com.ruoyi.common.core.domain.BasePo;
 import com.baomidou.mybatisplus.annotation.TableName;
-import java.math.BigDecimal;
-import java.util.Date;
+import com.ruoyi.common.core.domain.BasePo;
 import lombok.Getter;
 import lombok.Setter;
 
 import javax.validation.constraints.NotBlank;
+import java.math.BigDecimal;
+import java.util.Date;
 
 /**
  * <p>
@@ -33,7 +33,6 @@ public class AccountRunningWater extends BasePo {
      */
     private Long businessId;
 
-
     /**
      * 流水类型。10:打款
      */
@@ -100,4 +99,5 @@ public class AccountRunningWater extends BasePo {
      */
     @TableField(exist = false)
     private Integer count;
+
 }

+ 17 - 0
hx-account/src/main/java/com/fjhx/account/entity/transaction/dto/TransactionDepartmentDto.java

@@ -0,0 +1,17 @@
+package com.fjhx.account.entity.transaction.dto;
+
+import com.fjhx.account.entity.transaction.po.TransactionDepartment;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 往来单位新增编辑入参实体
+ *
+ * @author
+ * @since 2023-06-26
+ */
+@Getter
+@Setter
+public class TransactionDepartmentDto extends TransactionDepartment {
+
+}

+ 17 - 0
hx-account/src/main/java/com/fjhx/account/entity/transaction/dto/TransactionDepartmentSelectDto.java

@@ -0,0 +1,17 @@
+package com.fjhx.account.entity.transaction.dto;
+
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 往来单位列表查询入参实体
+ *
+ * @author
+ * @since 2023-06-26
+ */
+@Getter
+@Setter
+public class TransactionDepartmentSelectDto extends BaseSelectDto {
+
+}

+ 17 - 0
hx-account/src/main/java/com/fjhx/account/entity/transaction/dto/TransactionDto.java

@@ -0,0 +1,17 @@
+package com.fjhx.account.entity.transaction.dto;
+
+import com.fjhx.account.entity.transaction.po.Transaction;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 往来管理新增编辑入参实体
+ *
+ * @author
+ * @since 2023-06-26
+ */
+@Getter
+@Setter
+public class TransactionDto extends Transaction {
+
+}

+ 31 - 0
hx-account/src/main/java/com/fjhx/account/entity/transaction/dto/TransactionSelectDto.java

@@ -0,0 +1,31 @@
+package com.fjhx.account.entity.transaction.dto;
+
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 往来管理列表查询入参实体
+ *
+ * @author
+ * @since 2023-06-26
+ */
+@Getter
+@Setter
+public class TransactionSelectDto extends BaseSelectDto {
+
+    /**
+     * 是否流水 1是 0否
+     */
+    private String isFlowingWater;
+    /**
+     * 往来单位
+     */
+    private Long departmentId;
+
+    /**
+     * 往来类型 0收入 1支出
+     */
+    private Integer type;
+
+}

+ 56 - 0
hx-account/src/main/java/com/fjhx/account/entity/transaction/po/Transaction.java

@@ -0,0 +1,56 @@
+package com.fjhx.account.entity.transaction.po;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ruoyi.common.core.domain.BasePo;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 往来管理
+ * </p>
+ *
+ * @author
+ * @since 2023-06-26
+ */
+@Getter
+@Setter
+@TableName("transaction")
+public class Transaction extends BasePo {
+
+    /**
+     * 往来单位
+     */
+    private Long departmentId;
+
+    /**
+     * 往来类型 0收入 1支出
+     */
+    private Integer type;
+
+    /**
+     * 币种(字典account_currency)
+     */
+    private String currency;
+
+    /**
+     * 往来金额
+     */
+    private String amount;
+
+    /**
+     * 是否流水 1是 0否
+     */
+    private String isFlowingWater;
+
+    /**
+     * 往来账户
+     */
+    private Long accountId;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+}

+ 31 - 0
hx-account/src/main/java/com/fjhx/account/entity/transaction/po/TransactionDepartment.java

@@ -0,0 +1,31 @@
+package com.fjhx.account.entity.transaction.po;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ruoyi.common.core.domain.BasePo;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 往来单位
+ * </p>
+ *
+ * @author
+ * @since 2023-06-26
+ */
+@Getter
+@Setter
+@TableName("transaction_department")
+public class TransactionDepartment extends BasePo {
+
+    /**
+     * 名称
+     */
+    private String name;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+}

+ 17 - 0
hx-account/src/main/java/com/fjhx/account/entity/transaction/vo/TransactionDepartmentVo.java

@@ -0,0 +1,17 @@
+package com.fjhx.account.entity.transaction.vo;
+
+import com.fjhx.account.entity.transaction.po.TransactionDepartment;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 往来单位列表查询返回值实体
+ *
+ * @author
+ * @since 2023-06-26
+ */
+@Getter
+@Setter
+public class TransactionDepartmentVo extends TransactionDepartment {
+
+}

+ 27 - 0
hx-account/src/main/java/com/fjhx/account/entity/transaction/vo/TransactionVo.java

@@ -0,0 +1,27 @@
+package com.fjhx.account.entity.transaction.vo;
+
+import com.fjhx.account.entity.transaction.po.Transaction;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 往来管理列表查询返回值实体
+ *
+ * @author
+ * @since 2023-06-26
+ */
+@Getter
+@Setter
+public class TransactionVo extends Transaction {
+
+    /**
+     * 往来单位名称
+     */
+    private String departmentName;
+
+    /**
+     * 往来账户名称
+     */
+    private String accountName;
+
+}

+ 25 - 0
hx-account/src/main/java/com/fjhx/account/mapper/transaction/TransactionDepartmentMapper.java

@@ -0,0 +1,25 @@
+package com.fjhx.account.mapper.transaction;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.account.entity.transaction.po.TransactionDepartment;
+import com.fjhx.account.entity.transaction.vo.TransactionDepartmentVo;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 往来单位 Mapper 接口
+ * </p>
+ *
+ * @author
+ * @since 2023-06-26
+ */
+public interface TransactionDepartmentMapper extends BaseMapper<TransactionDepartment> {
+
+    /**
+     * 往来单位分页
+     */
+    Page<TransactionDepartmentVo> getPage(@Param("page") Page<Object> page, @Param("ew") IWrapper<TransactionDepartment> wrapper);
+
+}

+ 26 - 0
hx-account/src/main/java/com/fjhx/account/mapper/transaction/TransactionMapper.java

@@ -0,0 +1,26 @@
+package com.fjhx.account.mapper.transaction;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.account.entity.transaction.po.Transaction;
+import com.fjhx.account.entity.transaction.vo.TransactionVo;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import org.apache.ibatis.annotations.Param;
+
+
+/**
+ * <p>
+ * 往来管理 Mapper 接口
+ * </p>
+ *
+ * @author
+ * @since 2023-06-26
+ */
+public interface TransactionMapper extends BaseMapper<Transaction> {
+
+    /**
+     * 往来管理分页
+     */
+    Page<TransactionVo> getPage(@Param("page") Page<Object> page, @Param("ew") IWrapper<Transaction> wrapper);
+
+}

+ 29 - 23
hx-account/src/main/java/com/fjhx/account/service/account/impl/AccountPaymentServiceImpl.java

@@ -22,7 +22,6 @@ import com.fjhx.account.service.account.AccountPaymentService;
 import com.fjhx.account.service.account.AccountRemainderService;
 import com.fjhx.account.service.account.AccountRunningWaterService;
 import com.fjhx.common.constant.SourceConstant;
-import com.fjhx.common.entity.corporation.po.Corporation;
 import com.fjhx.common.service.corporation.CorporationService;
 import com.fjhx.file.utils.ObsFileUtil;
 import com.ruoyi.common.core.domain.BasePo;
@@ -68,28 +67,35 @@ public class AccountPaymentServiceImpl extends ServiceImpl<AccountPaymentMapper,
     public Page<AccountPaymentVo> getPage(AccountRequestFundsSelectDto dto) {
 
         QueryWrapper<Object> wrapper = Wrappers.query();
-        //付款状态
-        wrapper.eq(ObjectUtil.isNotEmpty(dto.getPaymentStatus()),"ap.status",dto.getPaymentStatus());
-        wrapper.like(ObjectUtil.isNotEmpty(dto.getKeyword()),"ap.payment_remark",dto.getKeyword());
-        wrapper.orderByDesc("ap.status","ap.payment_time","ap.create_time");
-        //归属公司
-        wrapper.eq(ObjectUtil.isNotEmpty(dto.getCorporationId()),"ap.corporation_id",dto.getCorporationId());
-        //归属部门
-        wrapper.eq(ObjectUtil.isNotEmpty(dto.getDepartmentId()),"ap.corporation_id",dto.getDepartmentId());
-        //申请人
-        wrapper.eq(ObjectUtil.isNotEmpty(dto.getCreateUser()),"ap.create_user",dto.getCreateUser());
-        //打款类型
-        wrapper.eq(ObjectUtil.isNotEmpty(dto.getType()),"ap.type",dto.getType());
-        //用款时间
-        wrapper.ge(ObjectUtil.isNotEmpty(dto.getBeginTime()),"ap.payment_time",dto.getBeginTime());
-        wrapper.le(ObjectUtil.isNotEmpty(dto.getEndTime()),"ap.payment_time",dto.getEndTime());
-        //币种
-        wrapper.eq(ObjectUtil.isNotEmpty(dto.getCurrency()),"ap.currency",dto.getCurrency());
-        //交易金额
-        wrapper.eq(ObjectUtil.isNotEmpty(dto.getStartAmount()),"ap.amount",dto.getStartAmount());
-        wrapper.eq(ObjectUtil.isNotEmpty(dto.getEndAmount()),"ap.amount",dto.getEndAmount());
-        //款项说明
-        wrapper.eq(ObjectUtil.isNotEmpty(dto.getPaymentRemark()),"ap.payment_remark",dto.getPaymentRemark());
+
+        wrapper.like(ObjectUtil.isNotEmpty(dto.getKeyword()), "ap.payment_remark", dto.getKeyword());
+
+        // 归属公司
+        wrapper.eq(ObjectUtil.isNotEmpty(dto.getCorporationId()), "ap.corporation_id", dto.getCorporationId());
+        // 归属部门
+        wrapper.eq(ObjectUtil.isNotEmpty(dto.getDepartmentId()), "ap.department_id", dto.getDepartmentId());
+        // 申请人
+        wrapper.eq(ObjectUtil.isNotEmpty(dto.getCreateUser()), "ap.create_user", dto.getCreateUser());
+        // 打款类型
+        wrapper.eq(ObjectUtil.isNotEmpty(dto.getType()), "ap.type", dto.getType());
+        // 请款时间
+        wrapper.ge(ObjectUtil.isNotEmpty(dto.getBeginCreateTime()), "ap.create_time", dto.getBeginCreateTime());
+        wrapper.le(ObjectUtil.isNotEmpty(dto.getEndCreateTime()), "ap.create_time", dto.getEndCreateTime());
+        // 用款时间
+        wrapper.ge(ObjectUtil.isNotEmpty(dto.getBeginTime()), "ap.payment_time", dto.getBeginTime());
+        wrapper.le(ObjectUtil.isNotEmpty(dto.getEndTime()), "ap.payment_time", dto.getEndTime());
+        // 币种
+        wrapper.eq(ObjectUtil.isNotEmpty(dto.getCurrency()), "ap.currency", dto.getCurrency());
+        // 交易金额
+        wrapper.ge(ObjectUtil.isNotEmpty(dto.getStartAmount()), "ap.amount", dto.getStartAmount());
+        wrapper.le(ObjectUtil.isNotEmpty(dto.getEndAmount()), "ap.amount", dto.getEndAmount());
+        // 付款状态
+        wrapper.eq(ObjectUtil.isNotEmpty(dto.getPaymentStatus()), "ap.status", dto.getPaymentStatus());
+        // 款项说明
+        wrapper.like(ObjectUtil.isNotEmpty(dto.getPaymentRemark()), "ap.payment_remark", dto.getPaymentRemark());
+
+        wrapper.orderByDesc("ap.status", "ap.payment_time", "ap.create_time");
+
         Page<AccountPaymentVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
         List<AccountPaymentVo> records = page.getRecords();
         if (records.size() == 0) {

+ 24 - 3
hx-account/src/main/java/com/fjhx/account/service/account/impl/AccountRequestFundsServiceImpl.java

@@ -22,15 +22,16 @@ import com.fjhx.common.entity.corporation.po.Corporation;
 import com.fjhx.common.service.corporation.CorporationService;
 import com.fjhx.flow.entity.flow.po.FlowExample;
 import com.fjhx.flow.service.flow.FlowExampleService;
-import com.obs.services.internal.ServiceException;
 import com.ruoyi.common.core.domain.BasePo;
 import com.ruoyi.common.core.domain.entity.SysDept;
+import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.system.service.ISysDeptService;
 import com.ruoyi.system.utils.UserUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
@@ -73,7 +74,7 @@ public class AccountRequestFundsServiceImpl extends ServiceImpl<AccountRequestFu
     public Page<AccountRequestFundsVo> getPage(AccountRequestFundsSelectDto dto) {
         QueryWrapper<Object> wrapper = Wrappers.query();
         wrapper.eq(ObjectUtil.isNotEmpty(dto.getType()), "arf.type", dto.getType());
-        wrapper.eq(ObjectUtil.isNotEmpty(dto.getStatus()), "arf.status", dto.getStatus());
+        wrapper.in(ObjectUtil.isNotEmpty(dto.getStatus()), "arf.status", Arrays.asList(dto.getStatus().split(",")));
         wrapper.eq(ObjectUtil.isNotEmpty(dto.getPaymentStatus()), "ap.status", dto.getPaymentStatus());
         wrapper.like(ObjectUtil.isNotEmpty(dto.getKeyword()), "arf.payment_remarks", dto.getKeyword());
         wrapper.eq(ObjectUtil.isNotEmpty(dto.getWriteOffStatus()), "arf.write_off_status", dto.getWriteOffStatus());
@@ -81,8 +82,28 @@ public class AccountRequestFundsServiceImpl extends ServiceImpl<AccountRequestFu
         wrapper.orderByAsc("case arf.status when 10 then 1 when 30 then 2 else 3 END");
         // 同状态按发起时间倒序排序
         wrapper.orderByDesc("arf.create_time");
-        //添加权限自己看自己
+        // 添加权限自己看自己
         wrapper.eq("arf.create_user", SecurityUtils.getUserId());
+
+        // 归属公司
+        wrapper.eq(ObjectUtil.isNotEmpty(dto.getCorporationId()), "arf.corporation_id", dto.getCorporationId());
+        // 归属部门
+        wrapper.eq(ObjectUtil.isNotEmpty(dto.getDepartmentId()), "arf.department_id", dto.getDepartmentId());
+        // 请款人
+        wrapper.eq(ObjectUtil.isNotEmpty(dto.getCreateUser()), "arf.create_user", dto.getCreateUser());
+        // 币种
+        wrapper.eq(ObjectUtil.isNotEmpty(dto.getCurrency()), "arf.currency", dto.getCurrency());
+        // 请款时间
+        wrapper.ge(ObjectUtil.isNotEmpty(dto.getBeginTime()), "arf.create_time", dto.getBeginTime());
+        wrapper.le(ObjectUtil.isNotEmpty(dto.getEndTime()), "arf.create_time", dto.getEndTime());
+        // 请款金额
+        wrapper.ge(ObjectUtil.isNotEmpty(dto.getMinAdvanceAmounts()), "arf.total", dto.getMinAdvanceAmounts());
+        wrapper.le(ObjectUtil.isNotEmpty(dto.getMaxAdvanceAmounts()), "arf.total", dto.getMaxAdvanceAmounts());
+        // 用款说明
+        wrapper.like(ObjectUtil.isNotEmpty(dto.getPaymentRemarks()), "arf.payment_remarks", dto.getPaymentRemarks());
+        // 付款方式
+        wrapper.like(ObjectUtil.isNotEmpty(dto.getPaymentMethod()), "arf.payment_method", dto.getPaymentMethod());
+
         Page<AccountRequestFundsVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
 
         List<AccountRequestFundsVo> records = page.getRecords();

+ 88 - 42
hx-account/src/main/java/com/fjhx/account/service/account/impl/AccountRunningWaterServiceImpl.java

@@ -2,6 +2,8 @@ package com.fjhx.account.service.account.impl;
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.dynamic.datasource.annotation.DSTransactional;
 import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -10,10 +12,12 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fjhx.account.entity.account.bo.AccountRunningWaterBo;
 import com.fjhx.account.entity.account.dto.AccountRunningWaterDto;
 import com.fjhx.account.entity.account.dto.AccountRunningWaterSelectDto;
+import com.fjhx.account.entity.account.po.AccountManagement;
 import com.fjhx.account.entity.account.po.AccountRemainder;
 import com.fjhx.account.entity.account.po.AccountRunningWater;
 import com.fjhx.account.entity.account.vo.AccountRunningWaterVo;
 import com.fjhx.account.mapper.account.AccountRunningWaterMapper;
+import com.fjhx.account.service.account.AccountManagementService;
 import com.fjhx.account.service.account.AccountRemainderService;
 import com.fjhx.account.service.account.AccountRunningWaterService;
 import com.fjhx.common.constant.SourceConstant;
@@ -21,6 +25,7 @@ import com.fjhx.common.entity.corporation.po.Corporation;
 import com.fjhx.common.service.corporation.CorporationService;
 import com.fjhx.common.utils.Assert;
 import com.fjhx.item.util.excel.util.ExcelUtil;
+import com.fjhx.socket.service.WebSocketServer;
 import com.fjhx.tenant.entity.dict.dto.DictTenantDataSelectDto;
 import com.fjhx.tenant.entity.dict.vo.DictTenantDataVo;
 import com.fjhx.tenant.service.dict.DictTenantDataService;
@@ -48,25 +53,29 @@ import java.util.stream.Collectors;
  */
 @Service
 public class AccountRunningWaterServiceImpl extends ServiceImpl<AccountRunningWaterMapper, AccountRunningWater> implements AccountRunningWaterService {
+
     @Autowired
     private AccountRemainderService accountRemainderService;
 
     @Autowired
     private DictTenantDataService dictTenantDataService;
+
     @Autowired
     private CorporationService corporationService;
 
+    @Autowired
+    private AccountManagementService accountManagementService;
 
     @Override
     public Page<AccountRunningWaterVo> getPage(AccountRunningWaterSelectDto dto) {
         QueryWrapper<Object> wrapper = Wrappers.query();
-        //资金账户
+        // 资金账户
         wrapper.eq(ObjectUtil.isNotEmpty(dto.getAccountManagementId()), "arw.account_management_id", dto.getAccountManagementId());
-        //交易类型
+        // 交易类型
         wrapper.eq(ObjectUtil.isNotEmpty(dto.getStatus()), "arw.status", dto.getStatus());
-        //是否合同到账
+        // 是否合同到账
         wrapper.eq(ObjectUtil.isNotEmpty(dto.getReceived()), "arw.received", dto.getReceived());
-        //币种
+        // 币种
         wrapper.eq(ObjectUtil.isNotEmpty(dto.getCurrency()), "arw.currency", dto.getCurrency());
         //是否认领
         wrapper.eq(ObjectUtil.isNotEmpty(dto.getIsClaim()), "arw.is_claim", dto.getIsClaim());
@@ -79,15 +88,18 @@ public class AccountRunningWaterServiceImpl extends ServiceImpl<AccountRunningWa
         //交易结束时间
         wrapper.le(ObjectUtil.isNotEmpty(dto.getStopTime()), "arw.transaction_time", dto.getStopTime());
         //对方账户名称
-        wrapper.eq(ObjectUtil.isNotEmpty(dto.getName()), "arw.name", dto.getName());
+        wrapper.like(ObjectUtil.isNotEmpty(dto.getName()), "arw.name", dto.getName());
         //摘要
-        wrapper.eq(ObjectUtil.isNotEmpty(dto.getRemarks()), "arw.name", dto.getRemarks());
+        wrapper.like(ObjectUtil.isNotEmpty(dto.getRemarks()), "arw.remarks", dto.getRemarks());
         if (StringUtils.isNotEmpty(dto.getKeyword())) {
             wrapper.and(wrapper1 -> wrapper1.like("arw.remarks", dto.getKeyword()).or().like("arw.name", dto.getKeyword()));
         }
         if (ObjectUtil.isNotEmpty(dto.getDataType()) && dto.getDataType() == 1) {// 到账认领数据
             wrapper.eq("arw.received", 10);
-            wrapper.orderByAsc("arw.is_claim", "arw.create_time");
+            //到账认领状态使用自定义排序 0未认领 2部分认领 1已认领
+            wrapper.orderByAsc("field(arw.is_claim,0,2,1)");
+            //到账时间倒序
+            wrapper.orderByDesc("arw.transaction_time");
         }
         // todo ERP-》资金管理-》资金流水分页 要求按交易时间排序,我也不懂上面if排序是在哪调用的,先在else里加吧
         else {
@@ -130,16 +142,10 @@ public class AccountRunningWaterServiceImpl extends ServiceImpl<AccountRunningWa
         wrapper.orderByDesc("arw.transaction_time");
         Page<AccountRunningWaterVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
         List<AccountRunningWaterVo> records = page.getRecords();
-        boolean flag = true;
         for (AccountRunningWaterVo record : records) {
-            //如果是第一条不计算余额
-            if (!flag) {
-                //根据当前余额 反向计算 每条记录操作后的余额 收入减 支出加
-                remainder = "10".equals(record.getStatus()) ? remainder.subtract(record.getAmount()) : remainder.add(record.getAmount());
-            } else {
-                flag = false;
-            }
             record.setRemainder(remainder);
+            //根据当前余额 反向计算 每条记录操作后的余额 收入减 支出加
+            remainder = "10".equals(record.getStatus()) ? remainder.subtract(record.getAmount()) : remainder.add(record.getAmount());
         }
         //赋值归属公司名称
         corporationService.attributeAssign(records, AccountRunningWaterVo::getCorporationId, (item, corporation) -> {
@@ -163,31 +169,71 @@ public class AccountRunningWaterServiceImpl extends ServiceImpl<AccountRunningWa
      * 账户资金流水表新增
      */
     @Override
-    @Transactional(rollbackFor = {Exception.class})
-    public void add(AccountRunningWaterDto accountRunningWaterDto) {
+    @DSTransactional
+    public void add(AccountRunningWaterDto dto) {
 
-        //修改账户余额表的余额
-        AccountRemainder accountRemainder = accountRemainderService.getOne(Wrappers.<AccountRemainder>lambdaQuery()
-                .eq(AccountRemainder::getAccountManagementId, accountRunningWaterDto.getAccountManagementId())
-                .eq(AccountRemainder::getCurrency, accountRunningWaterDto.getCurrency())
+        // 修改账户余额表的余额
+        AccountRemainder accountRemainder = accountRemainderService.getOne(q -> q
+                .eq(AccountRemainder::getAccountManagementId, dto.getAccountManagementId())
+                .eq(AccountRemainder::getCurrency, dto.getCurrency())
         );
+
         if (ObjectUtil.isEmpty(accountRemainder)) {
             throw new ServiceException("该账户不存在此币种,请前往资金账户添加");
         }
-        accountRemainder.setStatus(accountRunningWaterDto.getStatus());
-        //修改变更余额
-        accountRemainder.setChangeRemainder(accountRunningWaterDto.getAmount());
-        if (accountRunningWaterDto.getStatus().equals("10")) {
-            accountRemainder.setRemainder(accountRemainder.getRemainder().add(accountRunningWaterDto.getAmount()));
-        } else if (accountRunningWaterDto.getStatus().equals("20")) {
-            if (accountRemainder.getRemainder().compareTo(accountRunningWaterDto.getAmount()) == -1) {
+
+        BigDecimal amount = dto.getAmount();
+        String status = dto.getStatus();
+        BigDecimal remainder = accountRemainder.getRemainder();
+
+        accountRemainder.setStatus(status);
+        accountRemainder.setChangeRemainder(amount);
+
+        if (status.equals("10")) {
+            accountRemainder.setRemainder(remainder.add(amount));
+        } else if (status.equals("20")) {
+            if (remainder.compareTo(amount) < 0) {
                 throw new ServiceException("账户余额不足");
-            } else {
-                accountRemainder.setRemainder(accountRemainder.getRemainder().subtract(accountRunningWaterDto.getAmount()));
             }
+            accountRemainder.setRemainder(remainder.subtract(amount));
         }
         accountRemainderService.updateById(accountRemainder);
-        this.save(accountRunningWaterDto);
+
+        this.save(dto);
+
+        // 发送消息推送
+        sendSocket(dto);
+    }
+
+
+    private void sendSocket(AccountRunningWaterDto dto) {
+
+        if (ObjectUtil.notEqual(dto.getStatus(), "10") || ObjectUtil.notEqual(dto.getReceived(), "10")) {
+            return;
+        }
+
+        // 账户id
+        Long accountManagementId = dto.getAccountManagementId();
+        AccountManagement accountManagement = accountManagementService.getById(accountManagementId);
+        if (accountManagement == null) {
+            throw new ServiceException("没有找到公司账户");
+        }
+
+        // 归属公司
+        Long corporationId = accountManagement.getCorporationId();
+        if (corporationId == null) {
+            throw new ServiceException("归属公司id为空");
+        }
+        Corporation corporation = corporationService.getById(corporationId);
+        if (corporation == null) {
+            throw new ServiceException("没有找到归属公司");
+        }
+
+        String msg = "{} - {}账户有一笔新的到账(金额:{} {}),请相应业务员进行认领。";
+
+        WebSocketServer.sendInfoGroup(0, StrUtil.format(
+                msg, corporation.getName(), accountManagement.getName(), dto.getCurrency(), dto.getAmount()));
+
     }
 
 
@@ -197,17 +243,17 @@ public class AccountRunningWaterServiceImpl extends ServiceImpl<AccountRunningWa
     @Override
     @Transactional(rollbackFor = {Exception.class})
     public void edit(AccountRunningWater accountRunningWaterDto) {
-//        //查询资金流水表的数据
-//        AccountRunningWater accountRunningWater = this.getById(accountRunningWaterDto.getId());
-//
-//        //修改账户余额表的余额
-//        AccountRemainder accountRemainder = accountRemainderService.getOne(Wrappers.<AccountRemainder>lambdaQuery()
-//                .eq(AccountRemainder::getAccountManagementId,accountRunningWater.getAccountManagementId())
-//                .eq(AccountRemainder::getCurrency,accountRunningWater.getCurrency())
-//        );
-//        if (accountRemainder.getStatus().equals("10")){
-//            if (accountRemainder.getRemainder().compareTo(accountRunningWater.getAmount())==1)
-//        }
+        //        //查询资金流水表的数据
+        //        AccountRunningWater accountRunningWater = this.getById(accountRunningWaterDto.getId());
+        //
+        //        //修改账户余额表的余额
+        //        AccountRemainder accountRemainder = accountRemainderService.getOne(Wrappers.<AccountRemainder>lambdaQuery()
+        //                .eq(AccountRemainder::getAccountManagementId,accountRunningWater.getAccountManagementId())
+        //                .eq(AccountRemainder::getCurrency,accountRunningWater.getCurrency())
+        //        );
+        //        if (accountRemainder.getStatus().equals("10")){
+        //            if (accountRemainder.getRemainder().compareTo(accountRunningWater.getAmount())==1)
+        //        }
 
         this.updateById(accountRunningWaterDto);
     }

+ 47 - 0
hx-account/src/main/java/com/fjhx/account/service/transaction/TransactionDepartmentService.java

@@ -0,0 +1,47 @@
+package com.fjhx.account.service.transaction;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.account.entity.transaction.dto.TransactionDepartmentDto;
+import com.fjhx.account.entity.transaction.dto.TransactionDepartmentSelectDto;
+import com.fjhx.account.entity.transaction.po.TransactionDepartment;
+import com.fjhx.account.entity.transaction.vo.TransactionDepartmentVo;
+import com.ruoyi.common.core.service.BaseService;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 往来单位 服务类
+ * </p>
+ *
+ * @author
+ * @since 2023-06-26
+ */
+public interface TransactionDepartmentService extends BaseService<TransactionDepartment> {
+
+    /**
+     * 往来单位列表
+     */
+    List<TransactionDepartment> getList();
+
+    /**
+     * 往来单位分页
+     */
+    Page<TransactionDepartmentVo> getPage(TransactionDepartmentSelectDto dto);
+
+    /**
+     * 往来单位新增
+     */
+    void add(TransactionDepartmentDto transactionDepartmentDto);
+
+    /**
+     * 往来单位编辑
+     */
+    void edit(TransactionDepartmentDto transactionDepartmentDto);
+
+    /**
+     * 往来单位删除
+     */
+    void delete(Long id);
+
+}

+ 31 - 0
hx-account/src/main/java/com/fjhx/account/service/transaction/TransactionService.java

@@ -0,0 +1,31 @@
+package com.fjhx.account.service.transaction;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.account.entity.transaction.dto.TransactionDto;
+import com.fjhx.account.entity.transaction.dto.TransactionSelectDto;
+import com.fjhx.account.entity.transaction.po.Transaction;
+import com.fjhx.account.entity.transaction.vo.TransactionVo;
+import com.ruoyi.common.core.service.BaseService;
+
+
+/**
+ * <p>
+ * 往来管理 服务类
+ * </p>
+ *
+ * @author
+ * @since 2023-06-26
+ */
+public interface TransactionService extends BaseService<Transaction> {
+
+    /**
+     * 往来管理分页
+     */
+    Page<TransactionVo> getPage(TransactionSelectDto dto);
+
+    /**
+     * 往来管理新增
+     */
+    void add(TransactionDto transactionDto);
+
+}

+ 57 - 0
hx-account/src/main/java/com/fjhx/account/service/transaction/impl/TransactionDepartmentServiceImpl.java

@@ -0,0 +1,57 @@
+package com.fjhx.account.service.transaction.impl;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fjhx.account.entity.transaction.dto.TransactionDepartmentDto;
+import com.fjhx.account.entity.transaction.dto.TransactionDepartmentSelectDto;
+import com.fjhx.account.entity.transaction.po.TransactionDepartment;
+import com.fjhx.account.entity.transaction.vo.TransactionDepartmentVo;
+import com.fjhx.account.mapper.transaction.TransactionDepartmentMapper;
+import com.fjhx.account.service.transaction.TransactionDepartmentService;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 往来单位 服务实现类
+ * </p>
+ *
+ * @author
+ * @since 2023-06-26
+ */
+@Service
+public class TransactionDepartmentServiceImpl extends ServiceImpl<TransactionDepartmentMapper, TransactionDepartment> implements TransactionDepartmentService {
+
+    @Override
+    public List<TransactionDepartment> getList() {
+        List<TransactionDepartment> list = this.list();
+        return list;
+    }
+
+    @Override
+    public Page<TransactionDepartmentVo> getPage(TransactionDepartmentSelectDto dto) {
+        IWrapper<TransactionDepartment> wrapper = getWrapper();
+        wrapper.orderByDesc("td", TransactionDepartment::getId);
+        Page<TransactionDepartmentVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
+        return page;
+    }
+
+
+    @Override
+    public void add(TransactionDepartmentDto transactionDepartmentDto) {
+        this.save(transactionDepartmentDto);
+    }
+
+    @Override
+    public void edit(TransactionDepartmentDto transactionDepartmentDto) {
+        this.updateById(transactionDepartmentDto);
+    }
+
+    @Override
+    public void delete(Long id) {
+        this.removeById(id);
+    }
+
+}

+ 72 - 0
hx-account/src/main/java/com/fjhx/account/service/transaction/impl/TransactionServiceImpl.java

@@ -0,0 +1,72 @@
+package com.fjhx.account.service.transaction.impl;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fjhx.account.entity.account.po.AccountManagement;
+import com.fjhx.account.entity.transaction.dto.TransactionDto;
+import com.fjhx.account.entity.transaction.dto.TransactionSelectDto;
+import com.fjhx.account.entity.transaction.po.Transaction;
+import com.fjhx.account.entity.transaction.vo.TransactionVo;
+import com.fjhx.account.mapper.transaction.TransactionMapper;
+import com.fjhx.account.service.account.AccountManagementService;
+import com.fjhx.account.service.transaction.TransactionDepartmentService;
+import com.fjhx.account.service.transaction.TransactionService;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import com.ruoyi.common.utils.wrapper.SqlField;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+
+/**
+ * <p>
+ * 往来管理 服务实现类
+ * </p>
+ *
+ * @author
+ * @since 2023-06-26
+ */
+@Service
+public class TransactionServiceImpl extends ServiceImpl<TransactionMapper, Transaction> implements TransactionService {
+
+    @Autowired
+    private AccountManagementService accountManagementService;
+    @Autowired
+    private TransactionDepartmentService transactionDepartmentService;
+
+    @Override
+    public Page<TransactionVo> getPage(TransactionSelectDto dto) {
+        IWrapper<Transaction> wrapper = getWrapper();
+        //条件筛选
+        wrapper.eq(Transaction::getIsFlowingWater, dto.getIsFlowingWater());
+        wrapper.eq(Transaction::getDepartmentId, dto.getDepartmentId());
+        wrapper.eq(Transaction::getType, dto.getType());
+        //关键字搜索
+        List<Long> accountIds = accountManagementService.listObject(AccountManagement::getId,
+                q -> q.like(AccountManagement::getName, dto.getKeyword()));
+        wrapper.keyword(dto.getKeyword(),
+                new SqlField(Transaction::getAmount),
+                new SqlField(Transaction::getRemark)
+        ).or().in(Transaction::getAccountId, accountIds);
+        //排序
+        wrapper.orderByDesc("t", Transaction::getId);
+        Page<TransactionVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
+        //赋值往来单位名称
+        List<TransactionVo> records = page.getRecords();
+        transactionDepartmentService.attributeAssign(records, TransactionVo::getDepartmentId, (item, transactionDepartment) -> {
+            item.setDepartmentName(transactionDepartment.getName());
+        });
+        //赋值往来账户名称
+        accountManagementService.attributeAssign(records, TransactionVo::getAccountId, (item, account) -> {
+            item.setAccountName(account.getName());
+        });
+        return page;
+    }
+
+    @Override
+    public void add(TransactionDto transactionDto) {
+        this.save(transactionDto);
+    }
+
+}

+ 17 - 0
hx-account/src/main/resources/mapper/transaction/TransactionDepartmentMapper.xml

@@ -0,0 +1,17 @@
+<?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.account.mapper.transaction.TransactionDepartmentMapper">
+
+    <select id="getPage" resultType="com.fjhx.account.entity.transaction.vo.TransactionDepartmentVo">
+        select td.id,
+               td.name,
+               td.remark,
+               td.create_user,
+               td.create_time,
+               td.update_user,
+               td.update_time
+        from transaction_department td
+            ${ew.customSqlSegment}
+    </select>
+
+</mapper>

+ 21 - 0
hx-account/src/main/resources/mapper/transaction/TransactionMapper.xml

@@ -0,0 +1,21 @@
+<?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.account.mapper.transaction.TransactionMapper">
+    <select id="getPage" resultType="com.fjhx.account.entity.transaction.vo.TransactionVo">
+        select t.id,
+               t.department_id,
+               t.type,
+               t.currency,
+               t.amount,
+               t.is_flowing_water,
+               t.account_id,
+               t.remark,
+               t.create_user,
+               t.create_time,
+               t.update_user,
+               t.update_time
+        from transaction t
+            ${ew.customSqlSegment}
+    </select>
+
+</mapper>

+ 1 - 1
hx-common/src/main/java/com/fjhx/common/service/coding/impl/CodingRuleServiceImpl.java

@@ -194,7 +194,7 @@ public class CodingRuleServiceImpl extends ServiceImpl<CodingRuleMapper, CodingR
         return codeBuilder.toString();
     }
 
-    private Integer getAutoCode(String key) {
+    private synchronized Integer getAutoCode(String key) {
         CodingRuleAuto codingRuleAuto = codingRuleAutoService.getOne(q -> q.eq(CodingRuleAuto::getKey, key));
         if (codingRuleAuto == null) {
             codingRuleAuto = new CodingRuleAuto();

File diff suppressed because it is too large
+ 170 - 0
hx-common/src/main/java/com/fjhx/common/utils/ExchangeRateUtil.java


+ 4 - 2
hx-customer/src/main/java/com/fjhx/customer/entity/customer/vo/CustomerVo.java

@@ -1,7 +1,5 @@
 package com.fjhx.customer.entity.customer.vo;
 
-import com.fjhx.area.service.ISetAreaName;
-import com.fjhx.area.service.SetCustomizeAreaId;
 import com.fjhx.area.service.SetCustomizeAreaName;
 import com.fjhx.customer.entity.customer.po.Customer;
 import com.fjhx.customer.entity.customer.po.CustomerFollowRecords;
@@ -55,4 +53,8 @@ public class CustomerVo extends Customer implements SetCustomizeAreaName {
      */
     private Integer isTop;
 
+    /**
+     * 客户状态 字典值
+     */
+    private String statusVal;
 }

+ 15 - 0
hx-customer/src/main/java/com/fjhx/customer/service/customer/impl/CustomerServiceImpl.java

@@ -4,11 +4,13 @@ import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.dynamic.datasource.annotation.DSTransactional;
+import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fjhx.area.utils.CustomizeAreaUtil;
+import com.fjhx.common.constant.SourceConstant;
 import com.fjhx.common.entity.coding.bo.CustomerCodeAndCountryId;
 import com.fjhx.common.service.coding.CodingRuleCustomerService;
 import com.fjhx.customer.entity.customer.dto.CustomerDto;
@@ -41,6 +43,7 @@ import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -65,6 +68,7 @@ public class CustomerServiceImpl extends ServiceImpl<CustomerMapper, Customer> i
     @Autowired
     private DictTenantDataService dictTenantDataService;
 
+
     /**
      * 查询客户的列表
      *
@@ -131,6 +135,14 @@ public class CustomerServiceImpl extends ServiceImpl<CustomerMapper, Customer> i
         List<CustomerVo> records = page.getRecords();
         CustomizeAreaUtil.setAreaName(records);
 
+        //获取客户类型字典
+        DynamicDataSourceContextHolder.push(SourceConstant.BASE);
+        DictTenantDataSelectDto dictTenantDataSelectDto = new DictTenantDataSelectDto();
+        dictTenantDataSelectDto.setDictCode("customer_status");
+        List<DictTenantDataVo> dictTenantDataVoList = dictTenantDataService.getList(dictTenantDataSelectDto);
+        Map<String, String> customerStatusDic = dictTenantDataVoList.stream().collect(Collectors.toMap(DictTenantDataVo::getDictKey, DictTenantDataVo::getDictValue));
+        DynamicDataSourceContextHolder.poll();
+
         // 赋值客户跟进记录
         for (CustomerVo record : records) {
             List<CustomerFollowRecords> customerFollowRecordsList = customerFollowRecordsService.list(q -> q
@@ -139,6 +151,9 @@ public class CustomerServiceImpl extends ServiceImpl<CustomerMapper, Customer> i
                     .last("limit 3")
             );
             record.setCustomerFollowRecordsList(customerFollowRecordsList);
+
+            //赋值客户状态字典值
+            record.setStatusVal(customerStatusDic.get(record.getStatus()));
         }
 
         // 赋值是否置顶

+ 20 - 6
hx-item/src/main/java/com/fjhx/item/service/product/impl/ProductInfoServiceImpl.java

@@ -292,19 +292,26 @@ public class ProductInfoServiceImpl extends ServiceImpl<ProductInfoMapper, Produ
     public void add(ProductInfoDto productInfoDto) {
         // 赋值产品编号
         productInfoDto.setCode(CodeEnum.PRODUCT.getCode());
-        // 排除名称重复
-        this.nameDuplication(ProductInfo::getName, productInfoDto.getName(), "产品名称重复");
+        //检查【产品名称】和【规格型号】不能同时重复,但可以单项重复。
+        long nameAndSpecCount = this.count(q -> q
+                .eq(ProductInfo::getName, productInfoDto.getName())
+                .eq(ProductInfo::getSpec, productInfoDto.getSpec())
+        );
+        if (nameAndSpecCount != 0) {
+            throw new ServiceException("同名称同规格的产品已存在");
+        }
         // 排除不为空的自定义编码重复
-        long count = this.count(q -> q.eq(ProductInfo::getCustomCode, productInfoDto.getCustomCode()).ne(ProductInfo::getCustomCode,""));
+        long count = this.count(q -> q.eq(ProductInfo::getCustomCode, productInfoDto.getCustomCode()).ne(ProductInfo::getCustomCode, ""));
         if (count != 0) {
             throw new ServiceException("产品自定义编码重复");
         }
         // 排除不为空的条码编号重复
-        long count1 = this.count(q -> q.eq(ProductInfo::getBarCode, productInfoDto.getBarCode()).ne(ProductInfo::getBarCode,""));
+        long count1 = this.count(q -> q.eq(ProductInfo::getBarCode, productInfoDto.getBarCode()).ne(ProductInfo::getBarCode, ""));
         if (count1 != 0) {
             throw new ServiceException("产品条码编码重复");
         }
 
+
         this.save(productInfoDto);
         ObsFileUtil.saveFile(productInfoDto.getFileList(), productInfoDto.getId());
     }
@@ -457,8 +464,15 @@ public class ProductInfoServiceImpl extends ServiceImpl<ProductInfoMapper, Produ
     public void edit(ProductInfoDto productInfoDto) {
         // 禁止产品编号修改
         productInfoDto.setCode(null);
-        // 排除名称重复
-        this.nameDuplication(ProductInfo::getName, productInfoDto.getName(), productInfoDto.getId(), "产品名称重复");
+        //检查【产品名称】和【规格型号】不能同时重复,但可以单项重复。
+        long nameAndSpecCount = this.count(q -> q
+                .ne(ProductInfo::getId, productInfoDto.getId())
+                .eq(ProductInfo::getName, productInfoDto.getName())
+                .eq(ProductInfo::getSpec, productInfoDto.getSpec())
+        );
+        if (nameAndSpecCount != 0) {
+            throw new ServiceException("同名称同规格的产品已存在");
+        }
         // 排除不为空的自定义编码重复
         long count = this.count(q -> q
                 .ne(ProductInfo::getId, productInfoDto.getId())

+ 5 - 4
hx-mes/src/main/java/com/fjhx/mes/service/work/impl/WorkOrderServiceImpl.java

@@ -203,14 +203,15 @@ public class WorkOrderServiceImpl extends ServiceImpl<WorkOrderMapper, WorkOrder
             //生成工单编号,以及设置默认状态
             w.setCode(CodeEnum.WORK_ORDER.getCode());
             w.setStatus(0);
-            if (ObjectUtil.isNotEmpty(w.getSourceId()) && w.getSource() == "1") {//外销合同生产数据
+            if (ObjectUtil.isNotEmpty(w.getSourceId()) && "1".equals(w.getSource())) {//外销合同生产数据
                 ContractProduct contractProduct = contractProductService.getById(w.getSourceId());
-                if (ObjectUtil.isNotEmpty(contractProduct)) {
+                if (ObjectUtil.isEmpty(contractProduct)) {
                     throw new ServiceException("该合同产品不存在,请检查");
                 }
                 BigDecimal expendQuantity = contractProduct.getExpendQuantity().subtract(w.getQuantity());
-                if (expendQuantity.compareTo(BigDecimal.ZERO) < 1) {//小于0不让继续执行
-                    throw new ServiceException("生产数量不得大于销售合同数量");
+                if (expendQuantity.compareTo(BigDecimal.ZERO) < 0) {
+                    //外销合同-交接单转生产 如果转生产数量大于大于合同数量 将待处理数量改为0
+                    expendQuantity = BigDecimal.ZERO;
                 }
                 contractProduct.setExpendQuantity(expendQuantity);
                 upContractProduct.add(contractProduct);

+ 1 - 1
hx-purchase/src/main/java/com/fjhx/purchase/controller/purchase/PurchaseOtherFeeController.java

@@ -29,7 +29,7 @@ public class PurchaseOtherFeeController {
      * 获取采购其他费用已有列表
      */
     @GetMapping("/listName")
-    List<PurchaseOtherFee> listName() {
+    public List<PurchaseOtherFee> listName() {
         return purchaseOtherFeeService.listName();
     }
 

+ 6 - 6
hx-purchase/src/main/java/com/fjhx/purchase/controller/sales/SalesReturnController.java

@@ -1,16 +1,16 @@
 package com.fjhx.purchase.controller.sales;
 
 import com.baomidou.dynamic.datasource.annotation.DS;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fjhx.common.constant.SourceConstant;
+import com.fjhx.purchase.entity.sales.dto.SalesReturnDto;
+import com.fjhx.purchase.entity.sales.dto.SalesReturnSelectDto;
 import com.fjhx.purchase.entity.sales.po.SalesReturn;
-import org.springframework.web.bind.annotation.*;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fjhx.purchase.entity.sales.vo.SalesReturnVo;
-import com.fjhx.purchase.entity.sales.dto.SalesReturnSelectDto;
-import com.fjhx.purchase.entity.sales.dto.SalesReturnDto;
-import com.ruoyi.common.core.domain.BaseSelectDto;
 import com.fjhx.purchase.service.sales.SalesReturnService;
+import com.ruoyi.common.core.domain.BaseSelectDto;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
 
@@ -75,7 +75,7 @@ public class SalesReturnController {
      * 根据供应商查询退货列表
      */
     @GetMapping("/getBySupplyId")
-    public List<SalesReturn> getBySupplyId(@RequestParam("supplyId") String supplyId) {
+    public List<SalesReturn> getBySupplyId(@RequestParam("supplyId") Long supplyId) {
         return salesReturnService.getListBySupplyId(supplyId);
     }
 

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

@@ -34,7 +34,7 @@ public class PaySelectDto extends BaseSelectDto {
     /**
      * 付款方式 funds_payment_method
      */
-    private Integer payType;
+    private String payType;
 
     /**
      * 申请开始金额

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

@@ -120,4 +120,14 @@ public class Purchase extends BasePo {
      * 采购单个数
      */
     private Integer count;
+
+    /***
+     * 业务来源 0自建  1外销合同采购 2:样品单
+     */
+    private Integer dataResource;
+
+    /**
+     * 业务来源ID (外销合同id)
+     */
+    private Long dataResourceId;
 }

+ 10 - 0
hx-purchase/src/main/java/com/fjhx/purchase/entity/sales/vo/SalesReturnDetailVo.java

@@ -58,4 +58,14 @@ public class SalesReturnDetailVo extends SalesReturnDetail {
      * 货品规格型号
      */
     private String productSpec;
+
+    /**
+     * 退款状态
+     */
+    private Integer refundStatus;
+
+    /**
+     * 操作人
+     */
+    private String opUserName;
 }

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

@@ -14,14 +14,20 @@ import com.fjhx.flow.core.FlowDelegate;
 import com.fjhx.purchase.entity.pay.enums.PayStatusEnum;
 import com.fjhx.purchase.entity.pay.po.Pay;
 import com.fjhx.purchase.entity.pay.po.PayDetail;
+import com.fjhx.purchase.entity.purchase.po.Purchase;
 import com.fjhx.purchase.service.pay.PayDetailService;
 import com.fjhx.purchase.service.pay.PayService;
+import com.fjhx.purchase.service.purchase.PurchaseService;
 import com.ruoyi.common.exception.ServiceException;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
+import java.math.BigDecimal;
 import java.util.Date;
 import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.stream.Collectors;
 
 /**
  * 采购付款流程
@@ -42,6 +48,9 @@ public class PayFlow extends FlowDelegate {
     @Autowired
     private PayDetailService payDetailService;
 
+    @Autowired
+    private PurchaseService purchaseService;
+
     @Override
     public String getFlowKey() {
         return "pay_flow";
@@ -111,5 +120,63 @@ public class PayFlow extends FlowDelegate {
         payment.setPaymentMethod(pay.getPayType());
         accountPaymentService.save(payment);
 
+        // 修改合同付款状态
+        updatePurchasePayStatus(businessId);
+
+    }
+
+
+    /**
+     * 修改合同付款状态
+     *
+     * @param payId 付款id
+     */
+    private void updatePurchasePayStatus(Long payId) {
+
+        // 获取支付明细
+        List<PayDetail> list = payDetailService.list(q -> q.eq(PayDetail::getPayId, payId));
+
+        // 获取合同id
+        List<Long> purchaseIdList = list.stream().map(PayDetail::getPurchaseId).filter(Objects::nonNull).distinct().collect(Collectors.toList());
+
+        if (purchaseIdList.size() == 0) {
+            return;
+        }
+
+        // 通过合同id获取指定合同所有付款记录
+        Map<Long, BigDecimal> map = payDetailService.getPayMoneyCountByPurchaseId(purchaseIdList);
+
+        // 获取合同列表
+        List<Purchase> purchaseList = purchaseService.listByIds(purchaseIdList);
+
+        for (Purchase purchase : purchaseList) {
+
+            Integer payStatus = purchase.getPayStatus();
+
+            // 已经是已付款,跳过
+            if (Objects.equals(20, payStatus)) {
+                continue;
+            }
+
+            // 获取合同付款金额
+            BigDecimal payMoney = map.getOrDefault(purchase.getId(), BigDecimal.ZERO);
+            // 获取合同金额
+            BigDecimal amount = purchase.getAmount();
+
+            // 合同付款金额大于等于合同金额,已付款
+            if (payMoney.compareTo(amount) >= 0) {
+                purchase.setPayStatus(20);
+            }
+            // 否则进行中
+            else {
+                purchase.setPayStatus(10);
+            }
+
+        }
+
+        // 修改合同付款状态
+        purchaseService.updateBatchById(purchaseList);
+
     }
+
 }

+ 6 - 2
hx-purchase/src/main/java/com/fjhx/purchase/mapper/pay/PayDetailMapper.java

@@ -1,9 +1,9 @@
 package com.fjhx.purchase.mapper.pay;
 
-import com.fjhx.purchase.entity.invoice.vo.InvoiceDetailsVo;
-import com.fjhx.purchase.entity.pay.po.PayDetail;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.purchase.entity.pay.po.PayDetail;
 import com.fjhx.purchase.entity.pay.vo.PayDetailVo;
 import com.ruoyi.common.utils.wrapper.IWrapper;
 import org.apache.ibatis.annotations.Param;
@@ -28,8 +28,12 @@ public interface PayDetailMapper extends BaseMapper<PayDetail> {
 
     /**
      * 根据采购单ids查询已付款总额
+     *
      * @param purchaseIds
      * @return
      */
     List<PayDetailVo> getSumMoneyByPurchaseIds(@Param("purchaseIds") List<Long> purchaseIds);
+
+    List<PayDetail> getPayMoneyCountByPurchaseId(@Param("ew") QueryWrapper<Object> queryWrapper);
+
 }

+ 9 - 3
hx-purchase/src/main/java/com/fjhx/purchase/mapper/purchase/PurchaseDetailMapper.java

@@ -1,8 +1,8 @@
 package com.fjhx.purchase.mapper.purchase;
 
-import com.fjhx.purchase.entity.purchase.po.PurchaseDetail;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.purchase.entity.purchase.po.PurchaseDetail;
 import com.fjhx.purchase.entity.purchase.vo.PurchaseDetailVo;
 import com.ruoyi.common.utils.wrapper.IWrapper;
 import org.apache.ibatis.annotations.Param;
@@ -30,14 +30,20 @@ public interface PurchaseDetailMapper extends BaseMapper<PurchaseDetail> {
      * @param dataResourceIds
      * @return
      */
-    List<PurchaseDetailVo> getSumCountInDataResourceId(@Param("dataResourceIds")List<Long> dataResourceIds);
+    List<PurchaseDetailVo> getSumCountInDataResourceId(@Param("dataResourceIds") List<Long> dataResourceIds);
 
 
     /**
      * 获取外销合同总采购量审批通过的
+     *
      * @param dataResourceIds
      * @return
      */
-    List<PurchaseDetailVo> getSumCountInDataResourceIds(@Param("dataResourceIds")List<Long> dataResourceIds);
+    List<PurchaseDetailVo> getSumCountInDataResourceIds(@Param("dataResourceIds") List<Long> dataResourceIds);
+
+    /**
+     * 获取明细列表
+     */
+    List<PurchaseDetailVo> getPurchaseDetailList(@Param("ew") IWrapper<PurchaseDetail> wrapper);
 
 }

+ 2 - 4
hx-purchase/src/main/java/com/fjhx/purchase/mapper/purchase/PurchaseMapper.java

@@ -1,10 +1,10 @@
 package com.fjhx.purchase.mapper.purchase;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.fjhx.purchase.entity.purchase.dto.PurchaseDto;
-import com.fjhx.purchase.entity.purchase.po.Purchase;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.purchase.entity.purchase.dto.PurchaseDto;
+import com.fjhx.purchase.entity.purchase.po.Purchase;
 import com.fjhx.purchase.entity.purchase.vo.PurchaseVo;
 import com.ruoyi.common.utils.wrapper.IWrapper;
 import org.apache.ibatis.annotations.Param;
@@ -27,8 +27,6 @@ public interface PurchaseMapper extends BaseMapper<Purchase> {
      */
     Page<PurchaseVo> getPage(@Param("page") Page<Object> page, @Param("ew") IWrapper<Purchase> wrapper);
 
-
-
     /**
      * 查询货款账单
      * @param query

+ 6 - 2
hx-purchase/src/main/java/com/fjhx/purchase/mapper/sales/SalesReturnMapper.java

@@ -1,19 +1,21 @@
 package com.fjhx.purchase.mapper.sales;
 
-import com.fjhx.purchase.entity.sales.po.SalesReturn;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.purchase.entity.sales.po.SalesReturn;
 import com.fjhx.purchase.entity.sales.vo.SalesReturnVo;
 import com.ruoyi.common.utils.wrapper.IWrapper;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.List;
+
 
 /**
  * <p>
  * 退货 Mapper 接口
  * </p>
  *
- * @author 
+ * @author
  * @since 2023-04-11
  */
 public interface SalesReturnMapper extends BaseMapper<SalesReturn> {
@@ -23,4 +25,6 @@ public interface SalesReturnMapper extends BaseMapper<SalesReturn> {
      */
     Page<SalesReturnVo> getPage(@Param("page") Page<Object> page, @Param("ew") IWrapper<SalesReturn> wrapper);
 
+    List<SalesReturn> getListBySupplyId(@Param("supply_id") Long supply_id);
+
 }

+ 79 - 0
hx-purchase/src/main/java/com/fjhx/purchase/service/MyPurchaseServiceImpl.java

@@ -0,0 +1,79 @@
+package com.fjhx.purchase.service;
+
+import cn.hutool.core.bean.BeanUtil;
+import com.fjhx.common.utils.Assert;
+import com.fjhx.purchase.entity.arrival.po.ArrivalDetail;
+import com.fjhx.purchase.entity.purchase.po.Purchase;
+import com.fjhx.purchase.entity.purchase.po.PurchaseDetail;
+import com.fjhx.purchase.entity.sales.enums.SalesReturnDetailStatusEnum;
+import com.fjhx.purchase.entity.sales.po.SalesReturnDetail;
+import com.fjhx.purchase.service.arrival.ArrivalDetailService;
+import com.fjhx.purchase.service.purchase.PurchaseDetailService;
+import com.fjhx.purchase.service.purchase.PurchaseService;
+import com.fjhx.purchase.service.sales.SalesReturnDetailService;
+import com.fjhx.wms.entity.arrival.po.ArrivalDetailPo;
+import com.fjhx.wms.entity.purchase.po.PurchaseDetailPo;
+import com.fjhx.wms.entity.purchase.po.PurchasePo;
+import com.fjhx.wms.service.MyPurchaseService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+
+@Service
+public class MyPurchaseServiceImpl implements MyPurchaseService {
+
+    @Autowired
+    private SalesReturnDetailService salesReturnDetailService;
+    @Autowired
+    private PurchaseService purchaseService;
+    @Autowired
+    private PurchaseDetailService purchaseDetailService;
+    @Autowired
+    private ArrivalDetailService arrivalDetailService;
+
+    /**
+     * 修改采购退货状态
+     */
+    @Override
+    public void updateSalesReturnStatus(Long id, Integer status) {
+        switch (status) {
+            case 0://待出库
+                status = SalesReturnDetailStatusEnum.STATUS_20.getKey();//待退货
+                break;
+            case 1://部分出库
+                status = SalesReturnDetailStatusEnum.STATUS_30.getKey();//部分退货
+                break;
+            case 2://已出库
+                status = SalesReturnDetailStatusEnum.STATUS_40.getKey();//退货完成
+                break;
+        }
+        SalesReturnDetail salesReturnDetail = salesReturnDetailService.getById(id);
+        Assert.notEmpty(salesReturnDetail, "查询不到退货信息");
+        salesReturnDetail.setStatus(status);
+        salesReturnDetailService.updateById(salesReturnDetail);
+    }
+
+    @Override
+    public PurchasePo getPurchaseInfo(Long id) {
+        Purchase purchase = purchaseService.getById(id);
+        return BeanUtil.copyProperties(purchase, PurchasePo.class);
+    }
+
+    @Override
+    public Map<Long, PurchaseDetailPo> grtPurchaseDetail(Long id) {
+        List<PurchaseDetail> purchaseDetailList = purchaseDetailService.list(q -> q.eq(PurchaseDetail::getPurchaseId, id));
+        List<PurchaseDetailPo> purchaseDetailPos = BeanUtil.copyToList(purchaseDetailList, PurchaseDetailPo.class);
+        return purchaseDetailPos.stream().collect(Collectors.toMap(PurchaseDetailPo::getId, Function.identity()));
+    }
+
+    @Override
+    public ArrivalDetailPo getArrivalDetailInfo(Long id) {
+        ArrivalDetail arrivalDetail = arrivalDetailService.getById(id);
+        ArrivalDetailPo arrivalDetailPo = BeanUtil.copyProperties(arrivalDetail, ArrivalDetailPo.class);
+        return arrivalDetailPo;
+    }
+}

+ 34 - 28
hx-purchase/src/main/java/com/fjhx/purchase/service/arrival/impl/ArrivalServiceImpl.java

@@ -43,13 +43,17 @@ import com.fjhx.wms.entity.stock.po.StockWait;
 import com.fjhx.wms.entity.stock.po.StockWaitDetails;
 import com.fjhx.wms.service.stock.StockWaitDetailsService;
 import com.fjhx.wms.service.stock.StockWaitService;
+import com.ruoyi.common.core.domain.BaseIdPo;
+import com.ruoyi.common.core.domain.BasePo;
 import com.ruoyi.common.exception.ServiceException;
+import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.common.utils.wrapper.IWrapper;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
 import java.util.function.Function;
@@ -124,46 +128,48 @@ public class ArrivalServiceImpl extends ServiceImpl<ArrivalMapper, Arrival> impl
     @DSTransactional
     @Override
     public void add(Arrival arrival) {
+
         arrival.setCode(codingRuleService.createCode(CodingRuleEnum.ARRIVAL.getKey(), null));
-//        arrival.setCode(CodeEnum.ARRIVAL.getCode());
         this.save(arrival);
-        //修改采购状态
-        Purchase purchase = new Purchase();
-        purchase.setArrivalStatus(arrival.getArrivalStatus());
-        purchase.setId(arrival.getPurchaseId());
-        purchaseService.updateById(purchase);
-        Purchase purchase1 = purchaseService.getById(arrival.getPurchaseId());
-        //取出到货明细
+
+        // 修改采购状态
+        purchaseService.update(q -> q
+                .eq(BaseIdPo::getId, arrival.getPurchaseId())
+                .set(Purchase::getArrivalStatus, arrival.getArrivalStatus())
+                .set(BasePo::getUpdateTime, new Date())
+                .set(BasePo::getUpdateUser, SecurityUtils.getUserId())
+        );
+
+        Purchase purchase = purchaseService.getById(arrival.getPurchaseId());
+
+        // 取出到货明细
         List<ArrivalDetail> arrivalDetailList = arrival.getArrivalDetailList();
         if (CollectionUtils.isNotEmpty(arrivalDetailList)) {
+
             StockWait stockWait = new StockWait();
-            stockWait.setBusinessId(purchase1.getId());//采购id
-            stockWait.setBusinessCode(purchase1.getCode());//采购编码
-            stockWait.setType(1);//入库
-            stockWait.setStatus(0);//待入库
-            stockWait.setBusinessType(StockWaitType.PURCHASE_ARRIVAL_IN.getDetailType());//采购到货
+            stockWait.setBusinessId(purchase.getId());// 采购id
+            stockWait.setBusinessCode(purchase.getCode());// 采购编码
+            stockWait.setType(1);// 入库
+            stockWait.setStatus(0);// 待入库
+            stockWait.setBusinessType(StockWaitType.PURCHASE_ARRIVAL_IN.getDetailType());// 采购到货
             stockWaitService.save(stockWait);
+
             List<StockWaitDetails> stockWaitDetailsList = new ArrayList<>();
-            for (ArrivalDetail d : arrivalDetailList) {
-                Assert.notEmpty(d.getBussinessId(), "产品id不能为空");
-                //todo 这一块是做了采购到货状态修改。前端已经完成
-                //查询采购明细
-//                PurchaseDetail purchaseDetail = purchaseDetailService.getById(d.getPurchaseDetailId());
-                //查询当前到货总数--修改对应得申购状态
-//                BigDecimal arrivalCount = arrivalDetailService.getSumCount(d.getPurchaseDetailId(),d.getBussinessId());
-//                BigDecimal sumArrivalCount = arrivalCount.add(d.getCount());
-//                if(sumArrivalCount.compareTo(purchaseDetail.getCount())<0){//判断到货数量是否大于等于采购数量
-//
-//
-//                }
-                d.setArrivalId(arrival.getId());
+
+            for (ArrivalDetail arrivalDetail : arrivalDetailList) {
+                Assert.notEmpty(arrivalDetail.getBussinessId(), "产品id不能为空");
+                arrivalDetail.setId(IdWorker.getId());
+                arrivalDetail.setArrivalId(arrival.getId());
+
                 StockWaitDetails stockWaitDetails = new StockWaitDetails();
                 stockWaitDetails.setStockWaitId(stockWait.getId());
-                stockWaitDetails.setProductId(d.getBussinessId());
-                stockWaitDetails.setQuantity(d.getCount());
+                stockWaitDetails.setProductId(arrivalDetail.getBussinessId());
+                stockWaitDetails.setQuantity(arrivalDetail.getCount());
+                stockWaitDetails.setBusinessDetailsId(arrivalDetail.getId());
                 stockWaitDetailsList.add(stockWaitDetails);
             }
             arrivalDetailService.saveBatch(arrivalDetailList);
+
             stockWaitDetailsService.saveBatch(stockWaitDetailsList);
         }
     }

+ 11 - 4
hx-purchase/src/main/java/com/fjhx/purchase/service/invoice/impl/InvoiceServiceImpl.java

@@ -97,7 +97,7 @@ public class InvoiceServiceImpl extends ServiceImpl<InvoiceMapper, Invoice> impl
         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));
+                p.setSumMoney(invoiceMap.getOrDefault(p.getPurchaseId(), BigDecimal.ZERO));
             }else{
                 p.setSumMoney(BigDecimal.ZERO);
             }
@@ -116,11 +116,18 @@ public class InvoiceServiceImpl extends ServiceImpl<InvoiceMapper, Invoice> impl
         this.save(invoice);
         List<InvoiceDetails> invoiceDetailsList = invoice.getInvoiceDetailsList();
         if(CollectionUtils.isNotEmpty(invoiceDetailsList)){
-            for(InvoiceDetails d:invoiceDetailsList){
-                d.setInvoiceId(invoice.getId());
+
+            invoiceDetailsList = invoiceDetailsList.stream()
+                    .peek(item -> item.setInvoiceId(invoice.getId()))
+                    .filter(item -> item.getMoney() != null && item.getMoney().compareTo(BigDecimal.ZERO) > 0)
+                    .collect(Collectors.toList());
+
+            if (CollectionUtils.isNotEmpty(invoiceDetailsList)) {
+                invoiceDetailsService.saveBatch(invoiceDetailsList);
             }
-            invoiceDetailsService.saveBatch(invoiceDetailsList);
+
         }
+
         ObsFileUtil.saveFile(invoice.getFileList(),invoice.getId());
     }
 

+ 10 - 5
hx-purchase/src/main/java/com/fjhx/purchase/service/pay/PayDetailService.java

@@ -1,14 +1,15 @@
 package com.fjhx.purchase.service.pay;
 
-import com.fjhx.purchase.entity.invoice.vo.InvoiceDetailsVo;
-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;
+import com.fjhx.purchase.entity.pay.dto.PayDetailSelectDto;
+import com.fjhx.purchase.entity.pay.po.PayDetail;
+import com.fjhx.purchase.entity.pay.vo.PayDetailVo;
+import com.ruoyi.common.core.service.BaseService;
 
+import java.math.BigDecimal;
 import java.util.List;
+import java.util.Map;
 
 
 /**
@@ -48,8 +49,12 @@ public interface PayDetailService extends BaseService<PayDetail> {
 
     /**
      * 根据采购单ids查询已付款金额
+     *
      * @param purchaseIds
      * @return
      */
     List<PayDetailVo> getSumMoneyByPurchaseIds(List<Long> purchaseIds);
+
+    Map<Long, BigDecimal> getPayMoneyCountByPurchaseId(List<Long> purchaseIdList);
+
 }

+ 31 - 9
hx-purchase/src/main/java/com/fjhx/purchase/service/pay/impl/PayDetailServiceImpl.java

@@ -1,20 +1,24 @@
 package com.fjhx.purchase.service.pay.impl;
 
-import com.baomidou.dynamic.datasource.annotation.DS;
-import com.fjhx.common.constant.SourceConstant;
+import cn.hutool.core.bean.BeanUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fjhx.purchase.entity.pay.dto.PayDetailDto;
+import com.fjhx.purchase.entity.pay.dto.PayDetailSelectDto;
+import com.fjhx.purchase.entity.pay.enums.PayStatusEnum;
 import com.fjhx.purchase.entity.pay.po.PayDetail;
+import com.fjhx.purchase.entity.pay.vo.PayDetailVo;
 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;
+import org.springframework.stereotype.Service;
 
+import java.math.BigDecimal;
 import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 
 /**
@@ -60,6 +64,7 @@ public class PayDetailServiceImpl extends ServiceImpl<PayDetailMapper, PayDetail
 
     /**
      * 付款
+     *
      * @param purchaseIds
      * @return
      */
@@ -68,4 +73,21 @@ public class PayDetailServiceImpl extends ServiceImpl<PayDetailMapper, PayDetail
         return baseMapper.getSumMoneyByPurchaseIds(purchaseIds);
     }
 
+    @Override
+    public Map<Long, BigDecimal> getPayMoneyCountByPurchaseId(List<Long> purchaseIdList) {
+
+        QueryWrapper<Object> queryWrapper = Wrappers.query()
+                .ge("p.status", PayStatusEnum.PASS.getKey())
+                .in("pd.purchase_id", purchaseIdList);
+
+        List<PayDetail> list = baseMapper.getPayMoneyCountByPurchaseId(queryWrapper);
+
+        return list.stream().collect(Collectors.toMap(
+                PayDetail::getPurchaseId,
+                PayDetail::getMoney,
+                BigDecimal::add
+        ));
+    }
+
+
 }

+ 5 - 5
hx-purchase/src/main/java/com/fjhx/purchase/service/purchase/PurchaseDetailService.java

@@ -1,11 +1,11 @@
 package com.fjhx.purchase.service.purchase;
 
-import com.fjhx.purchase.entity.purchase.po.PurchaseDetail;
-import com.ruoyi.common.core.service.BaseService;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.fjhx.purchase.entity.purchase.vo.PurchaseDetailVo;
-import com.fjhx.purchase.entity.purchase.dto.PurchaseDetailSelectDto;
 import com.fjhx.purchase.entity.purchase.dto.PurchaseDetailDto;
+import com.fjhx.purchase.entity.purchase.dto.PurchaseDetailSelectDto;
+import com.fjhx.purchase.entity.purchase.po.PurchaseDetail;
+import com.fjhx.purchase.entity.purchase.vo.PurchaseDetailVo;
+import com.ruoyi.common.core.service.BaseService;
 
 import java.util.List;
 
@@ -57,5 +57,5 @@ public interface PurchaseDetailService extends BaseService<PurchaseDetail> {
      */
     List<PurchaseDetailVo> getSumCountInDataResourceIds(List<Long> dataResourceIds);
 
-
+    List<PurchaseDetailVo> getPurchaseCountListBySubscribeDetailIds(List<Long> PurchaseDetailIds);
 }

+ 9 - 0
hx-purchase/src/main/java/com/fjhx/purchase/service/purchase/impl/PurchaseDetailServiceImpl.java

@@ -75,6 +75,7 @@ public class PurchaseDetailServiceImpl extends ServiceImpl<PurchaseDetailMapper,
 
     /**
      * 获取外销合同总采购量审批通过的
+     *
      * @param dataResourceIds
      * @return
      */
@@ -83,4 +84,12 @@ public class PurchaseDetailServiceImpl extends ServiceImpl<PurchaseDetailMapper,
         return baseMapper.getSumCountInDataResourceIds(dataResourceIds);
     }
 
+    @Override
+    public List<PurchaseDetailVo> getPurchaseCountListBySubscribeDetailIds(List<Long> subscribeDetailIds) {
+        IWrapper<PurchaseDetail> wrapper = getWrapper();
+        wrapper.ne("p.purchase_status", "20");//过滤掉驳回数据
+        wrapper.in(PurchaseDetail::getSubscribeDetailId, subscribeDetailIds);
+        return baseMapper.getPurchaseDetailList(wrapper);
+    }
+
 }

+ 23 - 19
hx-purchase/src/main/java/com/fjhx/purchase/service/purchase/impl/PurchaseServiceImpl.java

@@ -45,6 +45,7 @@ import com.fjhx.supply.entity.supplier.po.SupplierInfo;
 import com.fjhx.supply.service.supplier.SupplierInfoService;
 import com.fjhx.wms.entity.warehouse.po.Warehouse;
 import com.fjhx.wms.service.warehouse.WarehouseService;
+import com.ruoyi.common.core.domain.BaseIdPo;
 import com.ruoyi.common.core.domain.BaseSelectDto;
 import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.common.utils.PageUtils;
@@ -229,7 +230,7 @@ public class PurchaseServiceImpl extends ServiceImpl<PurchaseMapper, Purchase>
                     JSONObject json = JSONObject.parseObject(victoriatouristJson);
                     String warehouseName = warehousesMap.get(json.getLong("receiptWarehouseId"));
                     json.put("receiptWarehouseName", warehouseName);
-                    purchaseVo.setVictoriatouristJson(JSONObject.toJSONString(json,JSONWriter.Feature.WriteLongAsString));
+                    purchaseVo.setVictoriatouristJson(JSONObject.toJSONString(json, JSONWriter.Feature.WriteLongAsString));
                 }
             }
             //赋值到货状态
@@ -378,12 +379,12 @@ public class PurchaseServiceImpl extends ServiceImpl<PurchaseMapper, Purchase>
         Map<Long, BigDecimal> payMap = payDetailVoList.stream().collect(Collectors.toMap(PayDetailVo::getPurchaseId, PayDetailVo::getSumMoney));
         for (Purchase p : list) {
             if (MapUtils.isNotEmpty(invoiceMap)) {
-                p.setSumInvoiceMoney(invoiceMap.getOrDefault(p.getId(), null));
+                p.setSumInvoiceMoney(invoiceMap.getOrDefault(p.getId(), BigDecimal.ZERO));
             } else {
                 p.setSumInvoiceMoney(BigDecimal.ZERO);
             }
             if (MapUtils.isNotEmpty(payMap)) {
-                p.setSumPayMoney(payMap.getOrDefault(p.getId(), null));
+                p.setSumPayMoney(payMap.getOrDefault(p.getId(), BigDecimal.ZERO));
             } else {
                 p.setSumPayMoney(BigDecimal.ZERO);
             }
@@ -397,10 +398,12 @@ public class PurchaseServiceImpl extends ServiceImpl<PurchaseMapper, Purchase>
      */
     @Override
     public Page<PurchaseDto> paymentBill(PurchaseSelectDto purchaseDto) {
+
         QueryWrapper<Object> query = Wrappers.query();
         query.eq(ObjectUtil.isNotEmpty(purchaseDto.getSupplyId()), "pu.supply_id", purchaseDto.getSupplyId());
         query.eq(ObjectUtil.isNotEmpty(purchaseDto.getPayStatus()), "pu.pay_status", purchaseDto.getPayStatus());
         query.like(StringUtils.isNotEmpty(purchaseDto.getKeyword()), "pu.code", purchaseDto.getKeyword());
+        query.eq("pu.purchase_status", PurchaseStatusEnum.PASS.getKey());
         query.groupBy("pu.id");
         //查询采购信息与已收发票
         Page<PurchaseDto> page = baseMapper.paymentBill(purchaseDto.getPage(), query);
@@ -408,8 +411,9 @@ public class PurchaseServiceImpl extends ServiceImpl<PurchaseMapper, Purchase>
         if (records.size() == 0) {
             return page;
         }
+
         //获取到所有的采购订单ID
-        List<Long> ids = records.stream().map(purchaseDto1 -> purchaseDto1.getId()).collect(Collectors.toList());
+        List<Long> ids = records.stream().map(BaseIdPo::getId).collect(Collectors.toList());
         QueryWrapper<Object> wrapper = Wrappers.query();
         wrapper.in("sw.business_id", ids);
         wrapper.eq("sw.type", 1);
@@ -418,8 +422,7 @@ public class PurchaseServiceImpl extends ServiceImpl<PurchaseMapper, Purchase>
         List<PurchaseDto> purchaseDtos = baseMapper.arrivalAmount(wrapper);
         Map<Long, List<PurchaseDto>> arrivalMap = purchaseDtos.stream().collect(Collectors.groupingBy(PurchaseDto::getId));
 
-
-        //查询已付款金额()
+        // 查询已付款金额()
         QueryWrapper<Object> queryWrapper = Wrappers.query();
         queryWrapper.in("pd.purchase_id", ids);
         queryWrapper.eq("p.status", 30);
@@ -457,14 +460,14 @@ public class PurchaseServiceImpl extends ServiceImpl<PurchaseMapper, Purchase>
      * 采购统计(采购列表)
      */
     @Override
-    public  Map<String,Object> purchaseStatistics(PurchaseSelectDto dto) {
+    public Map<String, Object> purchaseStatistics(PurchaseSelectDto dto) {
         //存放到货状态
         List<Integer> arrivalStatus = Arrays.asList(0, 10, 20);//到货状态 0未到货  10 部分到货  20已到货
 
         //存放采购统计数据
-        Map<String,Object> map = new HashMap<>();
+        Map<String, Object> map = new HashMap<>();
         //存放采购统计详情
-        List<Map<String,Object>> list = new ArrayList<>();
+        List<Map<String, Object>> list = new ArrayList<>();
 
         QueryWrapper<Purchase> query = Wrappers.query();
         query.select("count(*) count,sum(amount) amount,ifnull(arrival_status,-1) arrivalStatus");
@@ -472,29 +475,29 @@ public class PurchaseServiceImpl extends ServiceImpl<PurchaseMapper, Purchase>
         List<Purchase> purchaseList = baseMapper.selectList(query);
         //计算合计订单数
         Integer count = purchaseList.stream().map(Purchase::getCount).reduce(Integer::sum).orElse(0);
-        map.put("count",count);
+        map.put("count", count);
         //计算合计采购金额
         BigDecimal amount = purchaseList.stream().map(Purchase::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
-        map.put("amount",amount);
+        map.put("amount", amount);
         Map<Integer, List<Purchase>> purchaseMap = purchaseList.stream().collect(Collectors.groupingBy(Purchase::getArrivalStatus));
 
         //获取到每个到货状态的值
         for (Integer status : arrivalStatus) {
             //赋值初始值
-            Map<String,Object> statusMap = new HashMap<>();
-            statusMap.put("arrivalStatus",status);
-            statusMap.put("purchaseCount",0);
-            statusMap.put("purchaseAmount",0);
+            Map<String, Object> statusMap = new HashMap<>();
+            statusMap.put("arrivalStatus", status);
+            statusMap.put("purchaseCount", 0);
+            statusMap.put("purchaseAmount", 0);
 
             //赋值
             List<Purchase> purchases = purchaseMap.get(status);
-            if (CollectionUtils.isNotEmpty(purchases)){
-                statusMap.put("purchaseCount",purchases.get(0).getCount());
-                statusMap.put("purchaseAmount",purchases.get(0).getAmount());
+            if (CollectionUtils.isNotEmpty(purchases)) {
+                statusMap.put("purchaseCount", purchases.get(0).getCount());
+                statusMap.put("purchaseAmount", purchases.get(0).getAmount());
             }
             list.add(statusMap);
         }
-        map.put("purchaseList",list);
+        map.put("purchaseList", list);
         return map;
     }
 
@@ -525,4 +528,5 @@ public class PurchaseServiceImpl extends ServiceImpl<PurchaseMapper, Purchase>
 
         return page;
     }
+
 }

+ 31 - 21
hx-purchase/src/main/java/com/fjhx/purchase/service/refund/impl/RefundServiceImpl.java

@@ -7,8 +7,6 @@ import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.fjhx.account.entity.account.enums.PaymentStatusEnum;
-import com.fjhx.account.entity.account.po.AccountPayment;
 import com.fjhx.account.entity.account.po.AccountRunningWater;
 import com.fjhx.account.service.account.AccountPaymentService;
 import com.fjhx.account.service.account.AccountRunningWaterService;
@@ -30,6 +28,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
@@ -60,35 +59,45 @@ public class RefundServiceImpl extends ServiceImpl<RefundMapper, Refund> impleme
         IWrapper<Refund> wrapper = getWrapper();
         wrapper.orderByDesc("r", Refund::getCreateTime);
         if(StringUtils.isNotEmpty(dto.getStatus())){
-            wrapper.eq("p",Refund::getStatus,dto.getStatus());
+            wrapper.eq("r", Refund::getStatus, dto.getStatus());
         }
         if(StringUtils.isNotEmpty(dto.getRefundStatus())){
-            wrapper.eq("p",Refund::getRefundStatus,dto.getRefundStatus());
+            wrapper.eq("r", Refund::getRefundStatus, dto.getRefundStatus());
         }
         if(StringUtils.isNotEmpty(dto.getKeyword())){
             wrapper.keyword(dto.getKeyword(),new SqlField(Refund::getRefundName));
         }
         Page<RefundVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
         List<RefundVo> list = page.getRecords();
-        if(CollectionUtils.isNotEmpty(list)){
+        if(CollectionUtils.isNotEmpty(list)) {
             //查询供应商
             List<Long> supplyIds = list.stream().map(RefundVo::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));
+            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));
             //查询应退款金额
             List<Long> ids = list.stream().map(RefundVo::getId).collect(Collectors.toList());
-            List<AccountPayment> accountPaymentList = accountPaymentService.list(Wrappers.<AccountPayment>query().lambda().in(AccountPayment::getBusinessId,ids)
-                    .eq(AccountPayment::getStatus, PaymentStatusEnum.REJECT.getKey()));
-            Map<Long,List<AccountPayment>> accMap = accountPaymentList.stream().collect(Collectors.groupingBy(AccountPayment::getBusinessId));
-            for(RefundVo p:list){
-                if(MapUtils.isNotEmpty(supplyMap)){//赋值供应商
-                    List<SupplierInfo> supplys = supplyMap.getOrDefault(p.getSupplyId(),null);
-                    p.setSupplyName(supplys==null?null:supplys.get(0).getName());
+//            List<AccountPayment> accountPaymentList = accountPaymentService.list(Wrappers.<AccountPayment>query().lambda().in(AccountPayment::getBusinessId,ids)
+//                    .eq(AccountPayment::getStatus, PaymentStatusEnum.REJECT.getKey()));
+//            Map<Long,List<AccountPayment>> accMap = accountPaymentList.stream().collect(Collectors.groupingBy(AccountPayment::getBusinessId));
+            List<AccountRunningWater> accountRunningWaters = accountRunningWaterService.list(Wrappers.<AccountRunningWater>query().lambda().in(AccountRunningWater::getBusinessId, ids));
+            Map<Long, List<AccountRunningWater>> arwMap = accountRunningWaters.stream().collect(Collectors.groupingBy(AccountRunningWater::getBusinessId));
+            for (RefundVo p : list) {
+                if (MapUtils.isNotEmpty(supplyMap)) {//赋值供应商
+                    List<SupplierInfo> supplys = supplyMap.getOrDefault(p.getSupplyId(), null);
+                    p.setSupplyName(supplys == null ? null : supplys.get(0).getName());
                 }
-                if(MapUtils.isNotEmpty(accMap)){//赋值已退款总金额
-                    List<AccountPayment> sumList = accMap.getOrDefault(p.getId(),null);
-                    BigDecimal sum = sumList.stream().map(AccountPayment::getAmount).reduce(BigDecimal.ZERO,BigDecimal::add);
-                    p.setSumRefundMoney(sum==null?BigDecimal.ZERO:sum);
+//                if(MapUtils.isNotEmpty(accMap)){//赋值已退款总金额
+//                    List<AccountPayment> sumList = accMap.getOrDefault(p.getId(),null);
+//                    BigDecimal sum = sumList.stream().map(AccountPayment::getAmount).reduce(BigDecimal.ZERO,BigDecimal::add);
+//                    p.setSumRefundMoney(sum==null?BigDecimal.ZERO:sum);
+//                }
+                if (MapUtils.isNotEmpty(arwMap)) {//赋值已退款总金额
+                    p.setSumRefundMoney(BigDecimal.ZERO);
+                    List<AccountRunningWater> sumList = arwMap.getOrDefault(p.getId(), null);
+                    if (ObjectUtils.isNotEmpty(sumList)) {
+                        BigDecimal sum = sumList.stream().map(AccountRunningWater::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+                        p.setSumRefundMoney(sum);
+                    }
                 }
             }
         }
@@ -148,15 +157,16 @@ public class RefundServiceImpl extends ServiceImpl<RefundMapper, Refund> impleme
         //添加一条资金流水
         AccountRunningWater accountRunningWater = new AccountRunningWater();
         accountRunningWater.setAccountManagementId(refundDto.getReceiptAccountManagementId());
-        accountRunningWater.setStatus("10");//收入
+        accountRunningWater.setStatus("10");// 收入
         accountRunningWater.setBusinessId(refund.getId());
         accountRunningWater.setAmount(refundDto.getReceiptAmount());
         accountRunningWater.setCurrency(refund.getCurrency());
-        accountRunningWater.setReceived("20");//合同到账(10:是,20:否)
+        accountRunningWater.setReceived("20");// 合同到账(10:是,20:否)
         accountRunningWater.setName(refundDto.getReceiptName());
         accountRunningWater.setOpeningBank(refundDto.getReceiptOpeningBank());
         accountRunningWater.setAccountOpening(refundDto.getReceiptAccountOpening());
-        accountRunningWater.setType("20"); //添加流水类型 10 打款  20 到款登记
+        accountRunningWater.setType("20"); // 添加流水类型 10 打款  20 到款登记
+        accountRunningWater.setTransactionTime(new Date());
         accountRunningWaterService.save(accountRunningWater);
     }
 

+ 6 - 5
hx-purchase/src/main/java/com/fjhx/purchase/service/sales/SalesReturnService.java

@@ -1,11 +1,11 @@
 package com.fjhx.purchase.service.sales;
 
-import com.fjhx.purchase.entity.sales.po.SalesReturn;
-import com.ruoyi.common.core.service.BaseService;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.fjhx.purchase.entity.sales.vo.SalesReturnVo;
-import com.fjhx.purchase.entity.sales.dto.SalesReturnSelectDto;
 import com.fjhx.purchase.entity.sales.dto.SalesReturnDto;
+import com.fjhx.purchase.entity.sales.dto.SalesReturnSelectDto;
+import com.fjhx.purchase.entity.sales.po.SalesReturn;
+import com.fjhx.purchase.entity.sales.vo.SalesReturnVo;
+import com.ruoyi.common.core.service.BaseService;
 
 import java.util.List;
 
@@ -48,8 +48,9 @@ public interface SalesReturnService extends BaseService<SalesReturn> {
 
     /**
      * 根据供应商查询退货列表
+     *
      * @param supplyId
      * @return
      */
-    List<SalesReturn> getListBySupplyId(String supplyId);
+    List<SalesReturn> getListBySupplyId(Long supplyId);
 }

+ 10 - 10
hx-purchase/src/main/java/com/fjhx/purchase/service/sales/impl/SalesReturnDetailServiceImpl.java

@@ -1,30 +1,28 @@
 package com.fjhx.purchase.service.sales.impl;
 
+import cn.hutool.core.bean.BeanUtil;
 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.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fjhx.common.constant.SourceConstant;
 import com.fjhx.item.entity.product.vo.ProductInfoVo;
 import com.fjhx.item.service.product.ProductInfoService;
-import com.fjhx.purchase.entity.arrival.vo.ArrivalDetailVo;
-import com.fjhx.purchase.entity.purchase.vo.PurchaseVo;
+import com.fjhx.purchase.entity.sales.dto.SalesReturnDetailDto;
+import com.fjhx.purchase.entity.sales.dto.SalesReturnDetailSelectDto;
 import com.fjhx.purchase.entity.sales.po.SalesReturnDetail;
+import com.fjhx.purchase.entity.sales.vo.SalesReturnDetailVo;
 import com.fjhx.purchase.mapper.sales.SalesReturnDetailMapper;
 import com.fjhx.purchase.service.sales.SalesReturnDetailService;
-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.IWrapper;
+import com.ruoyi.system.utils.UserUtil;
 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.sales.vo.SalesReturnDetailVo;
-import com.fjhx.purchase.entity.sales.dto.SalesReturnDetailSelectDto;
-import com.ruoyi.common.utils.wrapper.IWrapper;
-import com.fjhx.purchase.entity.sales.dto.SalesReturnDetailDto;
-import cn.hutool.core.bean.BeanUtil;
 
 import java.util.List;
 import java.util.Map;
@@ -88,6 +86,8 @@ public class SalesReturnDetailServiceImpl extends ServiceImpl<SalesReturnDetailM
                 }
             }
         }
+        //赋值操作人
+        UserUtil.assignmentNickName(list, SalesReturnDetailVo::getUpdateUser, SalesReturnDetailVo::setOpUserName);
         return page;
     }
 

+ 11 - 10
hx-purchase/src/main/java/com/fjhx/purchase/service/sales/impl/SalesReturnServiceImpl.java

@@ -1,19 +1,18 @@
 package com.fjhx.purchase.service.sales.impl;
 
+import cn.hutool.core.bean.BeanUtil;
 import com.baomidou.dynamic.datasource.annotation.DS;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fjhx.common.constant.SourceConstant;
+import com.fjhx.purchase.entity.sales.dto.SalesReturnDto;
+import com.fjhx.purchase.entity.sales.dto.SalesReturnSelectDto;
 import com.fjhx.purchase.entity.sales.po.SalesReturn;
+import com.fjhx.purchase.entity.sales.vo.SalesReturnVo;
 import com.fjhx.purchase.mapper.sales.SalesReturnMapper;
 import com.fjhx.purchase.service.sales.SalesReturnService;
-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.sales.vo.SalesReturnVo;
-import com.fjhx.purchase.entity.sales.dto.SalesReturnSelectDto;
 import com.ruoyi.common.utils.wrapper.IWrapper;
-import com.fjhx.purchase.entity.sales.dto.SalesReturnDto;
-import cn.hutool.core.bean.BeanUtil;
+import org.springframework.stereotype.Service;
 
 import java.util.List;
 
@@ -62,12 +61,14 @@ public class SalesReturnServiceImpl extends ServiceImpl<SalesReturnMapper, Sales
 
     /**
      * 根据供应商查询退货列表
+     *
      * @param supplyId
      * @return
      */
     @Override
-    public List<SalesReturn> getListBySupplyId(String supplyId) {
-        return this.list(Wrappers.<SalesReturn>query().lambda().eq(SalesReturn::getSupplyId,supplyId));
+    public List<SalesReturn> getListBySupplyId(Long supplyId) {
+//        return this.list(Wrappers.<SalesReturn>query().lambda().eq(SalesReturn::getSupplyId,supplyId));
+        return baseMapper.getListBySupplyId(supplyId);
     }
 
 }

+ 3 - 1
hx-purchase/src/main/java/com/fjhx/purchase/service/subscribe/impl/SubscribeDetailServiceImpl.java

@@ -16,6 +16,7 @@ import com.fjhx.common.service.corporation.CorporationService;
 import com.fjhx.item.entity.product.vo.ProductInfoVo;
 import com.fjhx.item.service.product.ProductInfoService;
 import com.fjhx.purchase.entity.purchase.po.PurchaseDetail;
+import com.fjhx.purchase.entity.purchase.vo.PurchaseDetailVo;
 import com.fjhx.purchase.entity.subscribe.dto.SubscribeDetailDto;
 import com.fjhx.purchase.entity.subscribe.dto.SubscribeDetailSelectDto;
 import com.fjhx.purchase.entity.subscribe.po.Subscribe;
@@ -137,7 +138,8 @@ public class SubscribeDetailServiceImpl extends ServiceImpl<SubscribeDetailMappe
 
         // 赋值采购数量
         List<Long> subscribeDetailIds = list.stream().map(SubscribeDetail::getId).collect(Collectors.toList());
-        List<PurchaseDetail> purchaseDetailsList = purchaseDetailService.list(q -> q.in(PurchaseDetail::getSubscribeDetailId, subscribeDetailIds));
+        List<PurchaseDetailVo> purchaseDetailsList = purchaseDetailService.getPurchaseCountListBySubscribeDetailIds(subscribeDetailIds);
+//        List<PurchaseDetail> purchaseDetailsList = purchaseDetailService.list(q -> q.in(PurchaseDetail::getSubscribeDetailId, subscribeDetailIds));
         Map<Long, List<PurchaseDetail>> purchaseDetailsMap = purchaseDetailsList.stream().collect(Collectors.groupingBy(PurchaseDetail::getSubscribeDetailId));
         for (SubscribeDetailVo subscribeDetailVo : list) {
             List<PurchaseDetail> purchaseDetails = purchaseDetailsMap.get(subscribeDetailVo.getId());

+ 9 - 1
hx-purchase/src/main/resources/mapper/pay/PayDetailMapper.xml

@@ -29,6 +29,14 @@
             </if>
         </where>
         GROUP BY
-            purchase_id
+        purchase_id
     </select>
+
+    <select id="getPayMoneyCountByPurchaseId" resultType="com.fjhx.purchase.entity.pay.po.PayDetail">
+        select pd.money, pd.purchase_id
+        from pay p
+                 inner join pay_detail pd on p.id = pd.pay_id
+            ${ew.customSqlSegment}
+    </select>
+
 </mapper>

+ 9 - 2
hx-purchase/src/main/resources/mapper/purchase/PurchaseDetailMapper.xml

@@ -50,12 +50,19 @@
             AND t2.`purchase_status` &gt;= 30
             AND t2.purchase_status &lt; 88
             <if test="dataResourceIds neq null and dataResourceIds.size() > 0">
-                <foreach collection="dataResourceIds" item="dataResourceId" open="AND t1.data_resource_id IN (" separator="," close=")">
+                <foreach collection="dataResourceIds" item="dataResourceId" open="AND t1.data_resource_id IN ("
+                         separator="," close=")">
                     #{dataResourceId}
                 </foreach>
             </if>
         </where>
         GROUP BY
-            data_resource_id
+        data_resource_id
+    </select>
+    <select id="getPurchaseDetailList" resultType="com.fjhx.purchase.entity.purchase.vo.PurchaseDetailVo">
+        SELECT pd.*
+        FROM purchase_detail pd
+                 LEFT JOIN purchase p on pd.purchase_id = p.id
+            ${ew.customSqlSegment}
     </select>
 </mapper>

+ 20 - 21
hx-purchase/src/main/resources/mapper/purchase/PurchaseMapper.xml

@@ -7,33 +7,32 @@
         from purchase p
             ${ew.customSqlSegment}
     </select>
+
     <select id="paymentBill" resultType="com.fjhx.purchase.entity.purchase.dto.PurchaseDto">
-        SELECT
-            pu.code,
-            pu.supply_id,
-            bs.`name` supplyName,
-            pu.amount,
-            IFNULL(SUM(nd.money),0) invoiceAmount,
-            pu.pay_status  payStatus,
-            pu.currency,
-            pu.id
-        FROM
-            purchase pu
-                LEFT JOIN bytesailing_supply.supplier_info bs ON pu.supply_id = bs.id
-                LEFT JOIN  invoice_details nd on pu.id = nd.purchase_id
+        SELECT pu.code,
+               pu.supply_id,
+               bs.`name`                supplyName,
+               pu.amount,
+               IFNULL(SUM(nd.money), 0) invoiceAmount,
+               pu.pay_status            payStatus,
+               pu.currency,
+               pu.id
+        FROM purchase pu
+                 LEFT JOIN bytesailing_supply.supplier_info bs ON pu.supply_id = bs.id
+                 LEFT JOIN invoice_details nd on pu.id = nd.purchase_id
             ${ew.customSqlSegment}
     </select>
+
     <select id="arrivalAmount" resultType="com.fjhx.purchase.entity.purchase.dto.PurchaseDto">
-        SELECT
-            SUM(wd.receipt_quantity) * pd.price  amount,
-            pd.purchase_id id
-        FROM
-            bytesailing_wms.stock_wait sw
-                JOIN bytesailing_wms.stock_wait_details wd on sw.id = wd.stock_wait_id
-                join arrival_detail ad on wd.business_details_id = ad.id
-                join purchase_detail pd on ad.purchase_detail_id = pd.id
+        SELECT SUM(wd.receipt_quantity * pd.price) amount,
+               pd.purchase_id                      id
+        FROM bytesailing_wms.stock_wait sw
+                 JOIN bytesailing_wms.stock_wait_details wd on sw.id = wd.stock_wait_id
+                 JOIN arrival_detail ad on wd.business_details_id = ad.id
+                 JOIN purchase_detail pd on ad.purchase_detail_id = pd.id
             ${ew.customSqlSegment}
     </select>
+
     <select id="paidAmount" resultType="com.fjhx.purchase.entity.purchase.dto.PurchaseDto">
         SELECT
             sum(pd.money) amount,

+ 2 - 1
hx-purchase/src/main/resources/mapper/refund/RefundMapper.xml

@@ -16,7 +16,8 @@
             r.create_user,
             r.create_time,
             r.update_user,
-            r.update_time
+            r.update_time,
+            r.refund_status
         from refund r
             ${ew.customSqlSegment}
     </select>

+ 8 - 7
hx-purchase/src/main/resources/mapper/sales/SalesReturnDetailMapper.xml

@@ -2,13 +2,14 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.fjhx.purchase.mapper.sales.SalesReturnDetailMapper">
     <select id="getPage" resultType="com.fjhx.purchase.entity.sales.vo.SalesReturnDetailVo">
-        SELECT
-            t1.*,
-            t2.`code`,
-            t2.supply_id
-        FROM
-            sales_return_detail t1
-        LEFT JOIN sales_return t2 ON t1.sales_return_id = t2.id
+        SELECT t1.*,
+               t2.`code`,
+               t2.supply_id,
+               IF(r.refund_status IS NULL, 0, r.refund_status) refundStatus
+        FROM sales_return_detail t1
+                 LEFT JOIN sales_return t2 ON t1.sales_return_id = t2.id
+                 LEFT JOIN refund_detail rd ON rd.sales_return_id = t2.id
+                 LEFT JOIN refund r ON rd.refund_id = r.id
             ${ew.customSqlSegment}
     </select>
 

+ 14 - 0
hx-purchase/src/main/resources/mapper/sales/SalesReturnMapper.xml

@@ -14,5 +14,19 @@
         from sales_return sr
             ${ew.customSqlSegment}
     </select>
+    <select id="getListBySupplyId" resultType="com.fjhx.purchase.entity.sales.po.SalesReturn">
+        SELECT sr.id,
+               sr.CODE,
+               sr.supply_id,
+               srd.STATUS,
+               sr.approved_date,
+               sr.create_user,
+               sr.create_time,
+               sr.update_user,
+               sr.update_time
+        FROM sales_return sr
+                 JOIN sales_return_detail srd ON srd.sales_return_id = sr.id
+        where sr.supply_id = #{supply_id}
+    </select>
 
 </mapper>

+ 21 - 15
hx-sale/src/main/java/com/fjhx/sale/controller/contract/ContractController.java

@@ -5,11 +5,9 @@ import com.fjhx.item.entity.product.dto.ProductInfoSelectDto;
 import com.fjhx.sale.entity.contract.dto.ContractDto;
 import com.fjhx.sale.entity.contract.dto.ContractSelectDto;
 import com.fjhx.sale.entity.contract.dto.DecisionAidDto;
+import com.fjhx.sale.entity.contract.dto.PayDecisionAidDto;
 import com.fjhx.sale.entity.contract.po.Contract;
-import com.fjhx.sale.entity.contract.vo.ContractBudgetVo;
-import com.fjhx.sale.entity.contract.vo.ContractPdfInfoVo;
-import com.fjhx.sale.entity.contract.vo.ContractVo;
-import com.fjhx.sale.entity.contract.vo.DecisionAidVo;
+import com.fjhx.sale.entity.contract.vo.*;
 import com.fjhx.sale.service.contract.ContractService;
 import com.ruoyi.common.core.domain.BaseSelectDto;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -78,7 +76,7 @@ public class ContractController {
      * 根据客户ID查询未包装的订单
      */
     @GetMapping("/getNoPackContractByCustomerId")
-    public List<ContractVo> getNoPackContractByCustomerId(@RequestParam("customerId")String customerId) {
+    public List<ContractVo> getNoPackContractByCustomerId(@RequestParam("customerId") String customerId) {
         return contractService.getNoPackContractByCustomerId(customerId);
     }
 
@@ -100,10 +98,11 @@ public class ContractController {
 
     /**
      * 销售趋势(数据看板-产品分析页面)
+     *
      * @param productInfoDto
      */
     @PostMapping("/saleTrend")
-    public  List<Map<String, Object>> saleTrend(@RequestBody ProductInfoSelectDto productInfoDto) {
+    public List<Map<String, Object>> saleTrend(@RequestBody ProductInfoSelectDto productInfoDto) {
         return contractService.saleTrend(productInfoDto);
     }
 
@@ -111,7 +110,7 @@ public class ContractController {
      * 销售统计(数据看板-销售分析页面开发)
      */
     @PostMapping("/salesStatistics")
-    public  Map<String, Object>  salesStatistics(@RequestBody ContractDto dto) {
+    public Map<String, Object> salesStatistics(@RequestBody ContractDto dto) {
         return contractService.salesStatistics(dto);
     }
 
@@ -120,7 +119,7 @@ public class ContractController {
      * 国家销售统计(数据看板-销售分析页面开发)
      */
     @PostMapping("/countrySalesStatistics")
-    public  List<ContractDto>  countrySalesStatistics(@RequestBody ContractDto dto) {
+    public List<ContractDto> countrySalesStatistics(@RequestBody ContractDto dto) {
         return contractService.countrySalesStatistics(dto);
     }
 
@@ -128,7 +127,7 @@ public class ContractController {
      * 客户销售统计(数据看板-销售分析页面开发)
      */
     @PostMapping("/customSalesStatistics")
-    public  List<ContractDto>  customSalesStatistics(@RequestBody ContractDto dto) {
+    public List<ContractDto> customSalesStatistics(@RequestBody ContractDto dto) {
         return contractService.customSalesStatistics(dto);
     }
 
@@ -136,7 +135,7 @@ public class ContractController {
      * 业务员销售统计(数据看板-销售分析页面开发)
      */
     @PostMapping("/salesmanSalesStatistics")
-    public  List<ContractDto>  salesmanSalesStatistics(@RequestBody ContractDto dto) {
+    public List<ContractDto> salesmanSalesStatistics(@RequestBody ContractDto dto) {
         return contractService.salesmanSalesStatistics(dto);
     }
 
@@ -144,7 +143,7 @@ public class ContractController {
      * 产品销售额统计(数据看板-销售分析页面开发)
      */
     @PostMapping("/productSalesStatistics")
-    public  List<ContractDto>  productSalesStatistics(@RequestBody ContractDto dto) {
+    public List<ContractDto> productSalesStatistics(@RequestBody ContractDto dto) {
         return contractService.productSalesStatistics(dto);
     }
 
@@ -152,7 +151,7 @@ public class ContractController {
      * 产品销售量统计(数据看板-销售分析页面开发)
      */
     @PostMapping("/salesVolumeStatistics")
-    public  List<ContractDto>  salesVolumeStatistics(@RequestBody ContractDto dto) {
+    public List<ContractDto> salesVolumeStatistics(@RequestBody ContractDto dto) {
         return contractService.salesVolumeStatistics(dto);
     }
 
@@ -168,15 +167,15 @@ public class ContractController {
      * 合同销售统计(合同列表)
      */
     @PostMapping("/covenantStatistics")
-    public  Map<String,Object> covenantStatistics(@RequestBody ContractDto dto){
-        return  contractService.covenantStatistics(dto);
+    public Map<String, Object> covenantStatistics(@RequestBody ContractDto dto) {
+        return contractService.covenantStatistics(dto);
     }
 
     /**
      * 利润预算
      */
     @PostMapping("/getProfitBudgetPage")
-    public  Page<ContractBudgetVo> getProfitBudgetPage(@RequestBody ContractSelectDto dto){
+    public Page<ContractBudgetVo> getProfitBudgetPage(@RequestBody ContractSelectDto dto) {
         return contractService.getProfitBudgetPage(dto);
     }
 
@@ -204,5 +203,12 @@ public class ContractController {
         return contractService.decisionAid(dto);
     }
 
+    /**
+     * 采购付款决策辅助
+     */
+    @PostMapping("/payDecisionAid")
+    public PayDecisionAidVo payDecisionAid(@RequestBody PayDecisionAidDto dto) {
+        return contractService.payDecisionAid(dto);
+    }
 
 }

+ 74 - 0
hx-sale/src/main/java/com/fjhx/sale/controller/intermediate/IntermediateContractController.java

@@ -0,0 +1,74 @@
+package com.fjhx.sale.controller.intermediate;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.sale.entity.contract.vo.ContractPdfInfoVo;
+import com.fjhx.sale.entity.intermediate.dto.IntermediateContractDto;
+import com.fjhx.sale.entity.intermediate.dto.IntermediateContractSelectDto;
+import com.fjhx.sale.entity.intermediate.vo.IntermediateContractVo;
+import com.fjhx.sale.service.intermediate.IntermediateContractService;
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+
+/**
+ * <p>
+ * 中间合同 前端控制器
+ * </p>
+ *
+ * @author
+ * @since 2023-06-28
+ */
+@RestController
+@RequestMapping("/intermediateContract")
+public class IntermediateContractController {
+
+    @Autowired
+    private IntermediateContractService intermediateContractService;
+
+    /**
+     * 中间合同分页
+     */
+    @PostMapping("/page")
+    public Page<IntermediateContractVo> page(@RequestBody IntermediateContractSelectDto dto) {
+        return intermediateContractService.getPage(dto);
+    }
+
+    /**
+     * 中间合同明细
+     */
+    @PostMapping("/detail")
+    public IntermediateContractVo detail(@RequestBody BaseSelectDto dto) {
+        return intermediateContractService.detail(dto.getId());
+    }
+
+    /**
+     * 中间合同编辑
+     */
+    @PostMapping("/edit")
+    public void edit(@RequestBody IntermediateContractDto intermediateContractDto) {
+        intermediateContractService.edit(intermediateContractDto);
+    }
+
+    /**
+     * 获取合中间同历史联系方式
+     */
+    @PostMapping("/contactList")
+    public List<IntermediateContractVo> contactList(@RequestBody IntermediateContractDto dto) {
+        return intermediateContractService.contactList(dto);
+    }
+
+    /**
+     * 获取合中间同历史联系方式
+     */
+    @PostMapping("/getPrintInfo")
+    public ContractPdfInfoVo getPrintInfo(@RequestBody IntermediateContractDto dto) {
+        return intermediateContractService.getPrintInfo(dto);
+    }
+
+}

+ 6 - 1
hx-sale/src/main/java/com/fjhx/sale/entity/contract/dto/ContractSelectDto.java

@@ -7,7 +7,7 @@ import lombok.Setter;
 /**
  * 外销合同表列表查询入参实体
  *
- * @author 
+ * @author
  * @since 2023-04-17
  */
 @Getter
@@ -44,4 +44,9 @@ public class ContractSelectDto extends BaseSelectDto {
      */
     private String refundStatusNew;
 
+    /**
+     * 合同类型
+     */
+    private String contractType;
+
 }

+ 17 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/contract/dto/PayDecisionAidDto.java

@@ -0,0 +1,17 @@
+package com.fjhx.sale.entity.contract.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+@Getter
+@Setter
+public class PayDecisionAidDto {
+
+    /**
+     * 采购合同id
+     */
+    private List<Long> purchaseIdList;
+
+}

+ 23 - 6
hx-sale/src/main/java/com/fjhx/sale/entity/contract/po/ContractProduct.java

@@ -1,15 +1,15 @@
 package com.fjhx.sale.entity.contract.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 com.baomidou.mybatisplus.annotation.TableName;
-import java.math.BigDecimal;
-import java.util.List;
-
 import lombok.Getter;
 import lombok.Setter;
 
+import java.math.BigDecimal;
+import java.util.List;
+
 /**
  * <p>
  * 外销合同-产品
@@ -79,7 +79,6 @@ public class ContractProduct extends BasePo {
     @TableField(exist = false)
     private List<ObsFile> fileList;
 
-
     /**
      * 时间
      */
@@ -92,10 +91,28 @@ public class ContractProduct extends BasePo {
     @TableField(exist = false)
     private BigDecimal contractQuantity;
 
-
     /**
      * 月销售额
      */
     @TableField(exist = false)
     private BigDecimal contractAmount;
+
+    /**
+     * 产品编码
+     */
+    @TableField(exist = false)
+    private String productCode;
+
+    /**
+     * 产品中文名称
+     */
+    @TableField(exist = false)
+    private String productCnName;
+
+    /**
+     * 产品单位
+     */
+    @TableField(exist = false)
+    private String productUnit;
+
 }

+ 18 - 4
hx-sale/src/main/java/com/fjhx/sale/entity/contract/po/ContractShipment.java

@@ -1,18 +1,20 @@
 package com.fjhx.sale.entity.contract.po;
 
-import com.ruoyi.common.core.domain.BasePo;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
-import java.math.BigDecimal;
-import java.util.Date;
+import com.ruoyi.common.core.domain.BasePo;
 import lombok.Getter;
 import lombok.Setter;
 
+import java.math.BigDecimal;
+import java.util.Date;
+
 /**
  * <p>
  * 外销合同-出货计划
  * </p>
  *
- * @author 
+ * @author
  * @since 2023-04-17
  */
 @Getter
@@ -45,4 +47,16 @@ public class ContractShipment extends BasePo {
      */
     private String remark;
 
+    /**
+     * 产品编码
+     */
+    @TableField(exist = false)
+    private String productCode;
+
+    /**
+     * 产品中文名称
+     */
+    @TableField(exist = false)
+    private String productCnName;
+
 }

+ 10 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/contract/vo/ContractProductVo.java

@@ -182,4 +182,14 @@ public class ContractProductVo extends ContractProduct {
      */
     private String corporationName;
 
+    /**
+     * 业务员id
+     */
+    private Long salesmanId;
+
+    /**
+     * 流程id
+     */
+    private Long flowId;
+
 }

+ 22 - 1
hx-sale/src/main/java/com/fjhx/sale/entity/contract/vo/ContractVo.java

@@ -2,6 +2,9 @@ package com.fjhx.sale.entity.contract.vo;
 
 import com.fjhx.file.entity.FileInfoVo;
 import com.fjhx.sale.entity.contract.po.Contract;
+import com.fjhx.sale.entity.contract.po.ContractProduct;
+import com.fjhx.sale.entity.contract.po.ContractProject;
+import com.fjhx.sale.entity.contract.po.ContractShipment;
 import lombok.Getter;
 import lombok.Setter;
 
@@ -88,7 +91,6 @@ public class ContractVo extends Contract {
      */
     private BigDecimal sumClaimMoney;
 
-
     /**
      * 交接单附件信息
      */
@@ -113,5 +115,24 @@ public class ContractVo extends Contract {
      * 新到款状态
      */
     private String refundStatusNew;
+
+    private BigDecimal refundMoney;
+
+    /**
+     * 流程id
+     */
+    private Long flowId;
+
+    public BigDecimal getRefundMoney() {
+        return sumClaimMoney;
+    }
+
+
+    List<ContractProduct> contractProductList;
+
+    List<ContractProject> contractProjectList;
+
+    List<ContractShipment> contractShipmentList;
+
 }
 

+ 74 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/contract/vo/PayDecisionAidVo.java

@@ -0,0 +1,74 @@
+package com.fjhx.sale.entity.contract.vo;
+
+import com.fjhx.sale.entity.contract.po.Contract;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+@Getter
+@Setter
+public class PayDecisionAidVo {
+
+    private List<Contract> contractList;
+
+    private List<PurchaseInfo> purchaseInfoList;
+
+    @Getter
+    @Setter
+    public static class PurchaseInfo {
+
+        /**
+         * 采购合同id
+         */
+        private Long purchaseId;
+
+        /**
+         * 采购合同编号
+         */
+        private String purchaseCode;
+
+        /**
+         * 申购明细id
+         */
+        private Long purchaseDetailsId;
+
+        /**
+         * 产品id
+         */
+        private Long productId;
+
+        /**
+         * 产品名称
+         */
+        private String productName;
+
+        /**
+         * 产品编码
+         */
+        private String productCode;
+
+        /**
+         * 采购数量
+         */
+        private BigDecimal purchaseQuantity;
+
+        /**
+         * 到货数量
+         */
+        private BigDecimal invoiceQuantity;
+
+        /**
+         * 质检合格数量
+         */
+        private BigDecimal qualifiedCount;
+
+        /**
+         * 质检不合格数量
+         */
+        private BigDecimal noQualifiedCount;
+
+    }
+
+}

+ 6 - 1
hx-sale/src/main/java/com/fjhx/sale/entity/documents/vo/DocumentsVo.java

@@ -42,7 +42,7 @@ public class DocumentsVo extends Documents {
     private String code;
 
     /**
-     *承运方
+     * 承运方
      */
     private String acceptCarriage;
 
@@ -50,4 +50,9 @@ public class DocumentsVo extends Documents {
      * 货运单号
      */
     private String acceptCode;
+
+    /**
+     * 流程id
+     */
+    private Long flowId;
 }

+ 17 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/intermediate/dto/IntermediateContractDto.java

@@ -0,0 +1,17 @@
+package com.fjhx.sale.entity.intermediate.dto;
+
+import com.fjhx.sale.entity.intermediate.po.IntermediateContract;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 中间合同新增编辑入参实体
+ *
+ * @author
+ * @since 2023-06-28
+ */
+@Getter
+@Setter
+public class IntermediateContractDto extends IntermediateContract {
+
+}

+ 17 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/intermediate/dto/IntermediateContractSelectDto.java

@@ -0,0 +1,17 @@
+package com.fjhx.sale.entity.intermediate.dto;
+
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 中间合同列表查询入参实体
+ *
+ * @author
+ * @since 2023-06-28
+ */
+@Getter
+@Setter
+public class IntermediateContractSelectDto extends BaseSelectDto {
+
+}

+ 56 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/intermediate/po/IntermediateContract.java

@@ -0,0 +1,56 @@
+package com.fjhx.sale.entity.intermediate.po;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ruoyi.common.core.domain.BasePo;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 中间合同
+ * </p>
+ *
+ * @author
+ * @since 2023-06-28
+ */
+@Getter
+@Setter
+@TableName("intermediate_contract")
+public class IntermediateContract extends BasePo {
+
+    /**
+     * 单证id
+     */
+    private Long documentsId;
+
+    /**
+     * 卖方公司ID
+     */
+    private Long sellCorporationId;
+
+    /**
+     * 卖方联系人名称
+     */
+    private String sellContactName;
+
+    /**
+     * 卖方联系人电话
+     */
+    private String sellContactNumber;
+
+    /**
+     * 买方公司ID
+     */
+    private Long buyCorporationId;
+
+    /**
+     * 买方联系人名称
+     */
+    private String buyContactName;
+
+    /**
+     * 买方联系人电话
+     */
+    private String buyContactNumber;
+
+}

+ 59 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/intermediate/vo/IntermediateContractVo.java

@@ -0,0 +1,59 @@
+package com.fjhx.sale.entity.intermediate.vo;
+
+import com.fjhx.sale.entity.intermediate.po.IntermediateContract;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+
+/**
+ * 中间合同列表查询返回值实体
+ *
+ * @author
+ * @since 2023-06-28
+ */
+@Getter
+@Setter
+public class IntermediateContractVo extends IntermediateContract {
+    /**
+     * 合同编号
+     */
+    private String code;
+    /**
+     * 合同金额
+     */
+    private BigDecimal amount;
+    /**
+     * 币种
+     */
+    private String currency;
+    /**
+     * 原合同卖方id 多公司
+     */
+    private Long oldSellCorporationId;
+    /**
+     * 原合同买方id 客户
+     */
+    private Long oldBuyCorporationId;
+
+    /**
+     * 原合同卖方名称 多公司
+     */
+    private String oldSellCorporationName;
+    /**
+     * 原合同买方名称 客户
+     */
+    private String oldBuyCorporationName;
+
+    /**
+     * 中间合同卖方名称 多公司
+     */
+    private String sellCorporationName;
+    /**
+     * 中间合同买方名称 多公司
+     */
+    private String buyCorporationName;
+
+    private String opUserName;
+
+}

+ 4 - 4
hx-sale/src/main/java/com/fjhx/sale/entity/pack/po/PackDetailProduct.java

@@ -1,12 +1,12 @@
 package com.fjhx.sale.entity.pack.po;
 
-import com.ruoyi.common.core.domain.BasePo;
 import com.baomidou.mybatisplus.annotation.TableName;
-import java.math.BigDecimal;
-
+import com.ruoyi.common.core.domain.BasePo;
 import lombok.Getter;
 import lombok.Setter;
 
+import java.math.BigDecimal;
+
 /**
  * <p>
  * 装箱出货产品明细表
@@ -33,7 +33,7 @@ public class PackDetailProduct extends BasePo {
     /**
      * 合同产品ID
      */
-    private String contractProductId;
+    private Long contractProductId;
 
     /**
      * 装箱数量

+ 4 - 2
hx-sale/src/main/java/com/fjhx/sale/entity/sale/vo/SaleQuotationVo.java

@@ -90,8 +90,10 @@ public class SaleQuotationVo extends SaleQuotation {
      */
     private Integer contractCount;
 
-
-
+    /**
+     * 流程id
+     */
+    private Long flowId;
 
 
 }

+ 39 - 15
hx-sale/src/main/java/com/fjhx/sale/flow/PurchaseFlow.java

@@ -10,6 +10,8 @@ import com.fjhx.common.constant.SourceConstant;
 import com.fjhx.common.enums.CodingRuleEnum;
 import com.fjhx.common.service.coding.CodingRuleService;
 import com.fjhx.flow.core.FlowDelegate;
+import com.fjhx.flow.core.FlowThreadLocalUtil;
+import com.fjhx.flow.enums.HandleTypeEnum;
 import com.fjhx.purchase.entity.purchase.enums.PurchaseDataResourceEnum;
 import com.fjhx.purchase.entity.purchase.enums.PurchaseDetailStatusEnum;
 import com.fjhx.purchase.entity.purchase.enums.PurchaseStatusEnum;
@@ -27,7 +29,9 @@ import com.fjhx.sale.entity.contract.po.ContractProduct;
 import com.fjhx.sale.entity.sample.po.SampleProduct;
 import com.fjhx.sale.service.contract.ContractProductService;
 import com.fjhx.sale.service.sample.SampleProductService;
+import com.ruoyi.common.core.domain.BasePo;
 import com.ruoyi.common.exception.ServiceException;
+import com.ruoyi.common.utils.SecurityUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
@@ -59,6 +63,7 @@ public class PurchaseFlow extends FlowDelegate {
 
     @Autowired
     private CodingRuleService codingRuleService;
+
     @Autowired
     private PurchaseOtherFeeService purchaseOtherFeeService;
     @Autowired
@@ -93,21 +98,25 @@ public class PurchaseFlow extends FlowDelegate {
             purchaseDetailService.saveBatch(purchaseDetailList);
             //修改申购明细的采购状态
             for (PurchaseDetail purchaseDetail : purchaseDetailList) {
-                //计算已经采购的数量
-                List<PurchaseDetail> purchaseDetails = purchaseDetailService.list(q -> q
-                        .eq(PurchaseDetail::getSubscribeDetailId, purchaseDetail.getSubscribeDetailId())
-                );
-                BigDecimal pdCount = purchaseDetails.stream().map(PurchaseDetail::getCount).reduce(BigDecimal.ZERO, BigDecimal::add);
-                SubscribeDetail subscribeDetail = subscribeDetailService.getById(purchaseDetail.getSubscribeDetailId());
-                if (pdCount.compareTo(subscribeDetail.getCount()) >= 0) {
-                    //修改为已采购
-                    subscribeDetail.setStatus(SubscribeDetailStatusEnum.PURCHASED.getKey());
-                } else {
-                    //修改为部分采购
-                    subscribeDetail.setStatus(SubscribeDetailStatusEnum.LITT_PAID_AMOUNT.getKey());
+                //如果来源是申购
+                if (ObjectUtils.isEmpty(purchaseDetail.getDataResource())) {
+                    //计算已经采购的数量
+                    List<PurchaseDetail> purchaseDetails = purchaseDetailService.list(q -> q
+                            .eq(PurchaseDetail::getSubscribeDetailId, purchaseDetail.getSubscribeDetailId())
+                    );
+                    BigDecimal pdCount = purchaseDetails.stream().map(PurchaseDetail::getCount).reduce(BigDecimal.ZERO, BigDecimal::add);
+                    SubscribeDetail subscribeDetail = subscribeDetailService.getById(purchaseDetail.getSubscribeDetailId());
+                    if (pdCount.compareTo(subscribeDetail.getCount()) >= 0) {
+                        //修改为已采购
+                        subscribeDetail.setStatus(SubscribeDetailStatusEnum.PURCHASED.getKey());
+                    } else {
+                        //修改为部分采购
+                        subscribeDetail.setStatus(SubscribeDetailStatusEnum.LITT_PAID_AMOUNT.getKey());
+                    }
+                    subscribeDetailService.updateById(subscribeDetail);
                 }
-                subscribeDetailService.updateById(subscribeDetail);
             }
+
         }
         //保存其他费用信息
         List<PurchaseOtherFee> otherFeeList = purchase.getOtherFeeList();
@@ -143,8 +152,9 @@ public class PurchaseFlow extends FlowDelegate {
                     p.getDataResource() == PurchaseDataResourceEnum.DATA_RESOURCE_1.getKey()) {//如果采购的是外销合同
                 ContractProduct contractProduct = contractProductService.getById(p.getDataResourceId());
                 BigDecimal expendQuantity = contractProduct.getExpendQuantity().subtract(p.getCount());
-                if (expendQuantity.compareTo(BigDecimal.ZERO) < 1) {//小于0不让继续执行
-                    throw new ServiceException("采购数量不得大于合同剩余采购数量");
+                if (expendQuantity.compareTo(BigDecimal.ZERO) < 0) {
+                    //外销合同-交接单采购 如果采购数量大于大于合同数量 将待处理数量改为0
+                    expendQuantity = BigDecimal.ZERO;
                 }
                 contractProduct.setExpendQuantity(expendQuantity);
                 upContractProduct.add(contractProduct);
@@ -177,4 +187,18 @@ public class PurchaseFlow extends FlowDelegate {
                 .lambda().eq(PurchaseDetail::getPurchaseId, purchase.getId()));
     }
 
+    /**
+     * 驳回方法
+     */
+    public void reject() {
+        if (HandleTypeEnum.REJECT.equals(FlowThreadLocalUtil.getHandleTypeEnum())) {
+            purchaseService.update(q -> q
+                    .eq(Purchase::getId, FlowThreadLocalUtil.getBusinessId())
+                    .set(Purchase::getPurchaseStatus, 20)
+                    .set(Purchase::getUpdateTime, new Date())
+                    .set(BasePo::getUpdateUser, SecurityUtils.getUserId())
+            );
+        }
+    }
+
 }

+ 3 - 3
hx-sale/src/main/java/com/fjhx/sale/mapper/contract/ContractMapper.java

@@ -1,12 +1,11 @@
 package com.fjhx.sale.mapper.contract;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fjhx.customer.entity.customer.dto.CustomerDto;
 import com.fjhx.sale.entity.contract.dto.ContractDto;
 import com.fjhx.sale.entity.contract.po.Contract;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.fjhx.sale.entity.contract.po.ContractBudget;
 import com.fjhx.sale.entity.contract.vo.ContractBudgetVo;
 import com.fjhx.sale.entity.contract.vo.ContractVo;
 import com.fjhx.sale.entity.sale.vo.SaleQuotationVo;
@@ -90,4 +89,5 @@ public interface ContractMapper extends BaseMapper<Contract> {
     List<ContractDto> productSalesStatistics(@Param("ew") QueryWrapper<Object> query);
 
     List<ContractDto> salesVolumeStatistics(@Param("ew") QueryWrapper<Object> query);
+
 }

+ 33 - 0
hx-sale/src/main/java/com/fjhx/sale/mapper/intermediate/IntermediateContractMapper.java

@@ -0,0 +1,33 @@
+package com.fjhx.sale.mapper.intermediate;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.sale.entity.intermediate.po.IntermediateContract;
+import com.fjhx.sale.entity.intermediate.vo.IntermediateContractVo;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+
+/**
+ * <p>
+ * 中间合同 Mapper 接口
+ * </p>
+ *
+ * @author
+ * @since 2023-06-28
+ */
+public interface IntermediateContractMapper extends BaseMapper<IntermediateContract> {
+
+    /**
+     * 中间合同分页
+     */
+    Page<IntermediateContractVo> getPage(@Param("page") Page<Object> page, @Param("ew") IWrapper<IntermediateContract> wrapper);
+
+    /**
+     * 获取中间合同历史联系方式
+     */
+    List<IntermediateContractVo> contactList(@Param("ew") IWrapper<IntermediateContract> wrapper);
+
+}

+ 22 - 0
hx-sale/src/main/java/com/fjhx/sale/service/MySaleServiceImpl.java

@@ -0,0 +1,22 @@
+package com.fjhx.sale.service;
+
+import cn.hutool.core.bean.BeanUtil;
+import com.fjhx.sale.entity.contract.po.Contract;
+import com.fjhx.sale.service.contract.ContractService;
+import com.fjhx.wms.entity.contract.po.ContractPo;
+import com.fjhx.wms.service.MySaleService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+public class MySaleServiceImpl implements MySaleService {
+
+    @Autowired
+    private ContractService contractService;
+
+    @Override
+    public ContractPo getContractInfo(Long id) {
+        Contract contract = contractService.getById(id);
+        return BeanUtil.copyProperties(contract, ContractPo.class);
+    }
+}

+ 8 - 8
hx-sale/src/main/java/com/fjhx/sale/service/claim/impl/ClaimServiceImpl.java

@@ -117,17 +117,17 @@ public class ClaimServiceImpl extends ServiceImpl<ClaimMapper, Claim> implements
     @DSTransactional
     public void delete(Long id) {
         //通过流水ID查找出到账认领的数据
-        List<Claim> claimList = this.list(Wrappers.<Claim>query().lambda().eq(Claim::getBusinessId,id));
-        if(CollectionUtils.isNotEmpty(claimList)){
+        List<Claim> claimList = this.list(Wrappers.<Claim>query().lambda().eq(Claim::getBusinessId, id));
+        if (CollectionUtils.isNotEmpty(claimList)) {
             List<Long> claimIds = claimList.stream().map(Claim::getId).collect(Collectors.toList());
-            //更新流水数据为认领状态
-            AccountRunningWater water = new AccountRunningWater();
-            water.setId(id);
-            water.setIsClaim(0);//未认领状态
-            accountRunningWaterService.updateById(water);
             this.removeBatchByIds(claimIds);
-            claimContractService.remove(Wrappers.<ClaimContract>query().lambda().in(ClaimContract::getClaimId,claimIds));
+            claimContractService.remove(Wrappers.<ClaimContract>query().lambda().in(ClaimContract::getClaimId, claimIds));
         }
+        //更新流水数据为认领状态
+        AccountRunningWater water = new AccountRunningWater();
+        water.setId(id);
+        water.setIsClaim(0);//未认领状态
+        accountRunningWaterService.updateById(water);
     }
 
     /**

+ 7 - 4
hx-sale/src/main/java/com/fjhx/sale/service/contract/ContractService.java

@@ -7,11 +7,9 @@ import com.fjhx.item.entity.product.dto.ProductInfoSelectDto;
 import com.fjhx.sale.entity.contract.dto.ContractDto;
 import com.fjhx.sale.entity.contract.dto.ContractSelectDto;
 import com.fjhx.sale.entity.contract.dto.DecisionAidDto;
+import com.fjhx.sale.entity.contract.dto.PayDecisionAidDto;
 import com.fjhx.sale.entity.contract.po.Contract;
-import com.fjhx.sale.entity.contract.vo.ContractBudgetVo;
-import com.fjhx.sale.entity.contract.vo.ContractPdfInfoVo;
-import com.fjhx.sale.entity.contract.vo.ContractVo;
-import com.fjhx.sale.entity.contract.vo.DecisionAidVo;
+import com.fjhx.sale.entity.contract.vo.*;
 import com.fjhx.sale.entity.sale.vo.SaleQuotationVo;
 import com.ruoyi.common.core.service.BaseService;
 
@@ -157,4 +155,9 @@ public interface ContractService extends BaseService<Contract> {
      */
     DecisionAidVo decisionAid(DecisionAidDto dto);
 
+    /**
+     * 采购付款决策辅助
+     */
+    PayDecisionAidVo payDecisionAid(PayDecisionAidDto dto);
+
 }

+ 12 - 1
hx-sale/src/main/java/com/fjhx/sale/service/contract/impl/ContractProductServiceImpl.java

@@ -8,6 +8,7 @@ import com.fjhx.common.enums.FlowStatusEnum;
 import com.fjhx.common.service.contract.ContractTemplateService;
 import com.fjhx.common.service.corporation.CorporationService;
 import com.fjhx.customer.service.customer.CustomerService;
+import com.fjhx.flow.service.flow.FlowExampleService;
 import com.fjhx.item.service.product.ProductClassifyService;
 import com.fjhx.item.service.product.ProductInfoService;
 import com.fjhx.purchase.entity.purchase.vo.PurchaseDetailVo;
@@ -23,6 +24,7 @@ import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.common.utils.wrapper.IWrapper;
 import com.ruoyi.common.utils.wrapper.SqlField;
+import com.ruoyi.system.utils.UserUtil;
 import org.apache.commons.collections4.MapUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -63,6 +65,9 @@ public class ContractProductServiceImpl extends ServiceImpl<ContractProductMappe
     @Autowired
     private ContractTemplateService contractTemplateService;
 
+    @Autowired
+    private FlowExampleService flowExampleService;
+
     /**
      * 分页
      *
@@ -74,7 +79,7 @@ public class ContractProductServiceImpl extends ServiceImpl<ContractProductMappe
         IWrapper<ContractProduct> wrapper = getWrapper();
         wrapper.orderByDesc("t1", ContractProduct::getCreateTime);
         wrapper.between("t2", Contract::getStatus, FlowStatusEnum.PASS.getKey(), FlowStatusEnum.CANCELLATION.getKey() - 1);
-        wrapper.gt("t1", ContractProduct::getExpendQuantity, BigDecimal.ZERO);
+        wrapper.ne("t1", ContractProduct::getExpendQuantity, BigDecimal.ZERO);
         if (StringUtils.isNotEmpty(dto.getKeyword())) {
             wrapper.keyword(dto.getKeyword(), new SqlField("t2.`code`"), new SqlField("t2.`user_name`"));
         }
@@ -110,6 +115,12 @@ public class ContractProductServiceImpl extends ServiceImpl<ContractProductMappe
             item.setCorporationName(corporation.getName());
         });
 
+        // 赋值业务员名称
+        UserUtil.assignmentNickName(list, ContractProductVo::getSalesmanId, ContractProductVo::setUserName);
+
+        // 赋值流程id
+        flowExampleService.setFlowId(list, ContractProductVo::getContractId, ContractProductVo::setFlowId);
+
         return page;
     }
 

+ 325 - 101
hx-sale/src/main/java/com/fjhx/sale/service/contract/impl/ContractServiceImpl.java

@@ -32,19 +32,29 @@ import com.fjhx.customer.entity.customer.po.Customer;
 import com.fjhx.customer.service.customer.CustomerService;
 import com.fjhx.file.entity.FileInfoVo;
 import com.fjhx.file.utils.ObsFileUtil;
+import com.fjhx.flow.service.flow.FlowExampleService;
 import com.fjhx.item.entity.product.dto.ProductInfoSelectDto;
 import com.fjhx.item.service.product.ProductInfoService;
+import com.fjhx.purchase.entity.arrival.po.ArrivalDetail;
+import com.fjhx.purchase.entity.purchase.po.Purchase;
+import com.fjhx.purchase.entity.purchase.po.PurchaseDetail;
 import com.fjhx.purchase.entity.purchase.vo.PurchaseDetailVo;
+import com.fjhx.purchase.entity.quality.po.QualityDetail;
+import com.fjhx.purchase.service.arrival.ArrivalDetailService;
 import com.fjhx.purchase.service.purchase.PurchaseDetailService;
+import com.fjhx.purchase.service.purchase.PurchaseService;
+import com.fjhx.purchase.service.quality.QualityDetailService;
 import com.fjhx.sale.entity.claim.po.ClaimContract;
 import com.fjhx.sale.entity.contract.bo.ContractCurrencyRate;
 import com.fjhx.sale.entity.contract.bo.ContractDocumentaryBo;
 import com.fjhx.sale.entity.contract.dto.ContractDto;
 import com.fjhx.sale.entity.contract.dto.ContractSelectDto;
 import com.fjhx.sale.entity.contract.dto.DecisionAidDto;
+import com.fjhx.sale.entity.contract.dto.PayDecisionAidDto;
 import com.fjhx.sale.entity.contract.po.Contract;
 import com.fjhx.sale.entity.contract.po.ContractProduct;
 import com.fjhx.sale.entity.contract.po.ContractProject;
+import com.fjhx.sale.entity.contract.po.ContractShipment;
 import com.fjhx.sale.entity.contract.vo.*;
 import com.fjhx.sale.entity.purchase.vo.EhsdPurchaseProductVo;
 import com.fjhx.sale.entity.sale.vo.SaleQuotationVo;
@@ -53,6 +63,7 @@ import com.fjhx.sale.service.claim.ClaimContractService;
 import com.fjhx.sale.service.contract.ContractProductService;
 import com.fjhx.sale.service.contract.ContractProjectService;
 import com.fjhx.sale.service.contract.ContractService;
+import com.fjhx.sale.service.contract.ContractShipmentService;
 import com.fjhx.sale.service.purchase.EhsdPurchaseProductService;
 import com.ruoyi.common.core.domain.BaseIdPo;
 import com.ruoyi.common.core.domain.BasePo;
@@ -131,6 +142,24 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
     @Autowired
     private ContractProjectService contractProjectService;
 
+    @Autowired
+    private ContractService contractService;
+
+    @Autowired
+    private PurchaseService purchaseService;
+
+    @Autowired
+    private ArrivalDetailService arrivalDetailService;
+
+    @Autowired
+    private QualityDetailService qualityDetailService;
+
+    @Autowired
+    private FlowExampleService flowExampleService;
+
+    @Autowired
+    private ContractShipmentService contractShipmentService;
+
     /**
      * 分页
      *
@@ -164,6 +193,9 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
             wrapper.keyword(dto.getKeyword(), new SqlField("t1", Contract::getCode));
         }
 
+        //过滤合同类型
+        wrapper.eq("t1.contract_type", dto.getContractType());
+
         wrapper.in("t1", Contract::getBuyCorporationId, authIdList);
 
         Page<ContractVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
@@ -180,32 +212,38 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
             // 获取包装附件
             Map<Long, List<FileInfoVo>> packageFileMap = ObsFileUtil.getFileMap(ids, 2);
             for (ContractVo p : list) {
-                if (MapUtils.isNotEmpty(cusMap)) {//客户
+
+                // 客户
+                if (MapUtils.isNotEmpty(cusMap)) {
                     List<Customer> customers = cusMap.getOrDefault(p.getBuyCorporationId(), null);
                     p.setBuyCorporationName(customers == null ? null : customers.get(0).getName());
-                    //赋值客户标签
+                    // 赋值客户标签
                     p.setTag(customers == null ? null : customers.get(0).getTag());
                 }
 
-                //赋值交接单附件
-                if (MapUtils.isNotEmpty(fileMap)){
+                // 赋值交接单附件
+                if (MapUtils.isNotEmpty(fileMap)) {
                     List<FileInfoVo> fileInfoVos = fileMap.get(p.getId());
                     p.setFileInfoVos(fileInfoVos);
                 }
 
-                //赋值包装附件信息
-                if (MapUtils.isNotEmpty(packageFileMap)){
-                    List<FileInfoVo>  packageFileInfoVOList= packageFileMap.get(p.getId());
+                // 赋值包装附件信息
+                if (MapUtils.isNotEmpty(packageFileMap)) {
+                    List<FileInfoVo> packageFileInfoVOList = packageFileMap.get(p.getId());
                     p.setPackageFileInfoVOList(packageFileInfoVOList);
                 }
 
             }
+
+            // 赋值流程id
+            flowExampleService.setFlowId(list, ContractVo::setFlowId);
         }
         return page;
     }
 
     /**
      * 利润预算
+     *
      * @param dto
      * @return
      */
@@ -214,18 +252,18 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
         IWrapper<Contract> wrapper = getWrapper();
         wrapper.orderByDesc("t1", Contract::getCreateTime);
         wrapper.between("t1", Contract::getStatus, FlowStatusEnum.PASS.getKey(), FlowStatusEnum.CANCELLATION.getKey() - 1);
-        if(StringUtils.isNotEmpty(dto.getCustomerId())){
-            wrapper.eq("t1",Contract::getBuyCorporationId,dto.getCustomerId());
+        if (StringUtils.isNotEmpty(dto.getCustomerId())) {
+            wrapper.eq("t1", Contract::getBuyCorporationId, dto.getCustomerId());
         }
-        if(StringUtils.isNotEmpty(dto.getUserId())){
-            wrapper.eq("t1",Contract::getCreateUser,dto.getUserId());
+        if (StringUtils.isNotEmpty(dto.getUserId())) {
+            wrapper.eq("t1", Contract::getCreateUser, dto.getUserId());
         }
-        if(StringUtils.isNotEmpty(dto.getKeyword())){
-            wrapper.keyword(dto.getKeyword(),new SqlField("t1.code"));
+        if (StringUtils.isNotEmpty(dto.getKeyword())) {
+            wrapper.keyword(dto.getKeyword(), new SqlField("t1.code"));
         }
         Page<ContractBudgetVo> page = this.baseMapper.getProfitBudgetPage(dto.getPage(), wrapper);
         List<ContractBudgetVo> list = page.getRecords();
-        if(CollectionUtils.isNotEmpty(list)){
+        if (CollectionUtils.isNotEmpty(list)) {
             // 赋值客户名称
             customerService.attributeAssign(list, Contract::getBuyCorporationId, (item, customer) -> {
                 item.setCustomerName(customer.getName());
@@ -234,65 +272,65 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
             List<Long> contractIds = list.stream().map(ContractBudgetVo::getContractId).collect(Collectors.toList());
             List<EhsdPurchaseProductVo> ehsdAmountList = ehsdPurchaseProductService.getGroupSumAmount(contractIds);
             //取出采购所有金额和货币-通过合同ID分组
-            Map<Long,String> ehsdAmountMap = ehsdAmountList.stream().collect(Collectors.toMap(EhsdPurchaseProductVo::getContractId,EhsdPurchaseProductVo::getCurrencyAmount));
+            Map<Long, String> ehsdAmountMap = ehsdAmountList.stream().collect(Collectors.toMap(EhsdPurchaseProductVo::getContractId, EhsdPurchaseProductVo::getCurrencyAmount));
             List<PurchaseDetailVo> otherAmountList = purchaseDetailService.getSumCountInDataResourceIds(contractIds);
-            Map<Long,String> otherAmountMap = otherAmountList.stream().collect(Collectors.toMap(PurchaseDetailVo::getDataResourceId,PurchaseDetailVo::getSumAmountCurrency));
+            Map<Long, String> otherAmountMap = otherAmountList.stream().collect(Collectors.toMap(PurchaseDetailVo::getDataResourceId, PurchaseDetailVo::getSumAmountCurrency));
             //取出默认汇率
             List<CurrencyRate> currencyRateList = currencyRateService.getList();
-            Map<String,BigDecimal> currencyRateMap = currencyRateList.stream().collect(Collectors.toMap(CurrencyRate::getType,CurrencyRate::getRate));
-            for(ContractBudgetVo v : list){
-                if(StringUtils.isNotEmpty(v.getCurrencyRateJson())){//如果此条合同有汇率了
+            Map<String, BigDecimal> currencyRateMap = currencyRateList.stream().collect(Collectors.toMap(CurrencyRate::getType, CurrencyRate::getRate));
+            for (ContractBudgetVo v : list) {
+                if (StringUtils.isNotEmpty(v.getCurrencyRateJson())) {//如果此条合同有汇率了
                     List<ContractCurrencyRate> contractCurrencyRates = JSON.parseArray(v.getCurrencyRateJson(), ContractCurrencyRate.class);
-                    Map<String,BigDecimal> map = contractCurrencyRates.stream().collect(Collectors.toMap(ContractCurrencyRate::getType,ContractCurrencyRate::getRate));
+                    Map<String, BigDecimal> map = contractCurrencyRates.stream().collect(Collectors.toMap(ContractCurrencyRate::getType, ContractCurrencyRate::getRate));
                     v.setRefundableAmount(BigDecimal.ZERO);//暂时先设置退税金额为0
-                    if(MapUtils.isNotEmpty(ehsdAmountMap)){    //计算EHSD租户应付货款
-                        String concatAmountCurrency = ehsdAmountMap.getOrDefault(v.getContractId(),null);
-                        if(StringUtils.isNotEmpty(concatAmountCurrency)){
+                    if (MapUtils.isNotEmpty(ehsdAmountMap)) {    //计算EHSD租户应付货款
+                        String concatAmountCurrency = ehsdAmountMap.getOrDefault(v.getContractId(), null);
+                        if (StringUtils.isNotEmpty(concatAmountCurrency)) {
                             BigDecimal amount = new BigDecimal(concatAmountCurrency.split("-")[0]);
                             String currency = concatAmountCurrency.split("-")[1];
-                            BigDecimal rate = map.getOrDefault(currency,BigDecimal.ONE);
+                            BigDecimal rate = map.getOrDefault(currency, BigDecimal.ONE);
                             v.setEhsdSumAmount(amount.multiply(rate));
-                        }else{
+                        } else {
                             v.setEhsdSumAmount(BigDecimal.ZERO);
                         }
                     }
                     //计算收入总计=合同金额(转人民币)+应退税金额(转人民币)
                     v.setIncomeAmount(v.getAmount().multiply(new BigDecimal(map.getOrDefault(v.getCurrency(), BigDecimal.ONE).toString())).add(v.getRefundableAmount()));
                     //计算支出总计 除合同金额(转人民币)+应退税金额(转人民币) 其他金额相加
-                    v.setExpenditureAmount(v.getTrailerFee()==null?BigDecimal.ZERO:v.getTrailerFee().multiply(new BigDecimal(map.getOrDefault(v.getTrailerFeeCurrency(),BigDecimal.ONE).toString())).add
-                            (v.getCustomsFee()==null?BigDecimal.ZERO:v.getCustomsFee().multiply(new BigDecimal(map.getOrDefault(v.getCustomsFeeCurrency(),BigDecimal.ONE).toString()))).add
-                            (v.getAgencyFee()==null?BigDecimal.ZERO:v.getAgencyFee().multiply(new BigDecimal(map.getOrDefault(v.getAgencyFeeCurrency(),BigDecimal.ONE).toString()))).add
-                            (v.getPortMixedFee()==null?BigDecimal.ZERO:v.getPortMixedFee().multiply(new BigDecimal(map.getOrDefault(v.getPortMixedFeeCurrency(),BigDecimal.ONE).toString()))).add
-                            (v.getInspectionRedPack()==null?BigDecimal.ZERO:v.getInspectionRedPack().multiply(new BigDecimal(map.getOrDefault(v.getInspectionRedPackCurrency(),BigDecimal.ONE).toString()))).add
-                            (v.getCommission()==null?BigDecimal.ZERO:v.getCommission().multiply(new BigDecimal(map.getOrDefault(v.getCommissionCurrency(),BigDecimal.ONE).toString()))).add
-                            (v.getOther()==null?BigDecimal.ZERO:v.getOther().multiply(new BigDecimal(map.getOrDefault(v.getOtherCurrency(),BigDecimal.ONE).toString()))).add
-                            (v.getEhsdSumAmount()==null?BigDecimal.ZERO:v.getEhsdSumAmount()).add
-                            (v.getOtherSumAmount()==null?BigDecimal.ZERO:v.getOtherSumAmount()));
-                }else{//没有汇率取默认汇率
+                    v.setExpenditureAmount(v.getTrailerFee() == null ? BigDecimal.ZERO : v.getTrailerFee().multiply(new BigDecimal(map.getOrDefault(v.getTrailerFeeCurrency(), BigDecimal.ONE).toString())).add
+                            (v.getCustomsFee() == null ? BigDecimal.ZERO : v.getCustomsFee().multiply(new BigDecimal(map.getOrDefault(v.getCustomsFeeCurrency(), BigDecimal.ONE).toString()))).add
+                            (v.getAgencyFee() == null ? BigDecimal.ZERO : v.getAgencyFee().multiply(new BigDecimal(map.getOrDefault(v.getAgencyFeeCurrency(), BigDecimal.ONE).toString()))).add
+                            (v.getPortMixedFee() == null ? BigDecimal.ZERO : v.getPortMixedFee().multiply(new BigDecimal(map.getOrDefault(v.getPortMixedFeeCurrency(), BigDecimal.ONE).toString()))).add
+                            (v.getInspectionRedPack() == null ? BigDecimal.ZERO : v.getInspectionRedPack().multiply(new BigDecimal(map.getOrDefault(v.getInspectionRedPackCurrency(), BigDecimal.ONE).toString()))).add
+                            (v.getCommission() == null ? BigDecimal.ZERO : v.getCommission().multiply(new BigDecimal(map.getOrDefault(v.getCommissionCurrency(), BigDecimal.ONE).toString()))).add
+                            (v.getOther() == null ? BigDecimal.ZERO : v.getOther().multiply(new BigDecimal(map.getOrDefault(v.getOtherCurrency(), BigDecimal.ONE).toString()))).add
+                            (v.getEhsdSumAmount() == null ? BigDecimal.ZERO : v.getEhsdSumAmount()).add
+                            (v.getOtherSumAmount() == null ? BigDecimal.ZERO : v.getOtherSumAmount()));
+                } else {//没有汇率取默认汇率
                     v.setRefundableAmount(BigDecimal.ZERO);//暂时先设置退税金额为0
-                    if(MapUtils.isNotEmpty(ehsdAmountMap)){    //计算EHSD租户应付货款
-                        String concatAmountCurrency = ehsdAmountMap.getOrDefault(v.getContractId(),null);
-                        if(StringUtils.isNotEmpty(concatAmountCurrency)){
+                    if (MapUtils.isNotEmpty(ehsdAmountMap)) {    //计算EHSD租户应付货款
+                        String concatAmountCurrency = ehsdAmountMap.getOrDefault(v.getContractId(), null);
+                        if (StringUtils.isNotEmpty(concatAmountCurrency)) {
                             BigDecimal amount = new BigDecimal(concatAmountCurrency.split("-")[0]);
                             String currency = concatAmountCurrency.split("-")[1];
-                            BigDecimal rate = currencyRateMap.getOrDefault(currency,BigDecimal.ONE);
+                            BigDecimal rate = currencyRateMap.getOrDefault(currency, BigDecimal.ONE);
                             v.setEhsdSumAmount(amount.multiply(rate));
-                        }else{
+                        } else {
                             v.setEhsdSumAmount(BigDecimal.ZERO);
                         }
                     }
                     //计算收入总计=合同金额(转人民币)+应退税金额(转人民币)
-                    v.setIncomeAmount(v.getAmount().multiply(currencyRateMap.getOrDefault(v.getContractId(),new BigDecimal("1"))).add(v.getRefundableAmount()));
+                    v.setIncomeAmount(v.getAmount().multiply(currencyRateMap.getOrDefault(v.getContractId(), new BigDecimal("1"))).add(v.getRefundableAmount()));
                     //计算支出总计 除合同金额(转人民币)+应退税金额(转人民币) 其他金额相加
-                    v.setExpenditureAmount(v.getTrailerFee()==null?BigDecimal.ZERO:v.getTrailerFee().multiply(new BigDecimal(currencyRateMap.getOrDefault(v.getTrailerFeeCurrency(),BigDecimal.ONE).toString())).add
-                            (v.getCustomsFee()==null?BigDecimal.ZERO:v.getCustomsFee().multiply(new BigDecimal(currencyRateMap.getOrDefault(v.getCustomsFeeCurrency(),BigDecimal.ONE).toString()))).add
-                            (v.getAgencyFee()==null?BigDecimal.ZERO:v.getAgencyFee().multiply(new BigDecimal(currencyRateMap.getOrDefault(v.getAgencyFeeCurrency(),BigDecimal.ONE).toString()))).add
-                            (v.getPortMixedFee()==null?BigDecimal.ZERO:v.getPortMixedFee().multiply(new BigDecimal(currencyRateMap.getOrDefault(v.getPortMixedFeeCurrency(),BigDecimal.ONE).toString()))).add
-                            (v.getInspectionRedPack()==null?BigDecimal.ZERO:v.getInspectionRedPack().multiply(new BigDecimal(currencyRateMap.getOrDefault(v.getInspectionRedPackCurrency(),BigDecimal.ONE).toString()))).add
-                            (v.getCommission()==null?BigDecimal.ZERO:v.getCommission().multiply(new BigDecimal(currencyRateMap.getOrDefault(v.getCommissionCurrency(),BigDecimal.ONE).toString()))).add
-                            (v.getOther()==null?BigDecimal.ZERO:v.getOther().multiply(new BigDecimal(currencyRateMap.getOrDefault(v.getOtherCurrency(),BigDecimal.ONE).toString()))).add
-                            (v.getEhsdSumAmount()==null?BigDecimal.ZERO:v.getEhsdSumAmount()).add
-                            (v.getOtherSumAmount()==null?BigDecimal.ZERO:v.getOtherSumAmount()));
+                    v.setExpenditureAmount(v.getTrailerFee() == null ? BigDecimal.ZERO : v.getTrailerFee().multiply(new BigDecimal(currencyRateMap.getOrDefault(v.getTrailerFeeCurrency(), BigDecimal.ONE).toString())).add
+                            (v.getCustomsFee() == null ? BigDecimal.ZERO : v.getCustomsFee().multiply(new BigDecimal(currencyRateMap.getOrDefault(v.getCustomsFeeCurrency(), BigDecimal.ONE).toString()))).add
+                            (v.getAgencyFee() == null ? BigDecimal.ZERO : v.getAgencyFee().multiply(new BigDecimal(currencyRateMap.getOrDefault(v.getAgencyFeeCurrency(), BigDecimal.ONE).toString()))).add
+                            (v.getPortMixedFee() == null ? BigDecimal.ZERO : v.getPortMixedFee().multiply(new BigDecimal(currencyRateMap.getOrDefault(v.getPortMixedFeeCurrency(), BigDecimal.ONE).toString()))).add
+                            (v.getInspectionRedPack() == null ? BigDecimal.ZERO : v.getInspectionRedPack().multiply(new BigDecimal(currencyRateMap.getOrDefault(v.getInspectionRedPackCurrency(), BigDecimal.ONE).toString()))).add
+                            (v.getCommission() == null ? BigDecimal.ZERO : v.getCommission().multiply(new BigDecimal(currencyRateMap.getOrDefault(v.getCommissionCurrency(), BigDecimal.ONE).toString()))).add
+                            (v.getOther() == null ? BigDecimal.ZERO : v.getOther().multiply(new BigDecimal(currencyRateMap.getOrDefault(v.getOtherCurrency(), BigDecimal.ONE).toString()))).add
+                            (v.getEhsdSumAmount() == null ? BigDecimal.ZERO : v.getEhsdSumAmount()).add
+                            (v.getOtherSumAmount() == null ? BigDecimal.ZERO : v.getOtherSumAmount()));
                 }
                 //计算毛利 收入-支出
                 v.setGross(v.getIncomeAmount().subtract(v.getExpenditureAmount()));
@@ -305,6 +343,7 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
 
     /**
      * 利润结算表分页
+     *
      * @param dto
      * @return
      */
@@ -313,21 +352,21 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
         IWrapper<Contract> wrapper = getWrapper();
         wrapper.orderByDesc("t1", Contract::getCreateTime);
         wrapper.between("t1", Contract::getStatus, FlowStatusEnum.PASS.getKey(), FlowStatusEnum.CANCELLATION.getKey() - 1);
-        if(StringUtils.isNotEmpty(dto.getCustomerId())){
-            wrapper.eq("t1",Contract::getBuyCorporationId,dto.getCustomerId());
+        if (StringUtils.isNotEmpty(dto.getCustomerId())) {
+            wrapper.eq("t1", Contract::getBuyCorporationId, dto.getCustomerId());
         }
-        if(StringUtils.isNotEmpty(dto.getUserId())){
-            wrapper.eq("t1",Contract::getCreateUser,dto.getUserId());
+        if (StringUtils.isNotEmpty(dto.getUserId())) {
+            wrapper.eq("t1", Contract::getCreateUser, dto.getUserId());
         }
-        if(StringUtils.isNotEmpty(dto.getKeyword())){
-            wrapper.keyword(dto.getKeyword(),new SqlField("t1.code"));
+        if (StringUtils.isNotEmpty(dto.getKeyword())) {
+            wrapper.keyword(dto.getKeyword(), new SqlField("t1.code"));
         }
         Page<ContractBudgetVo> page = this.baseMapper.getProfitClearingPage(dto.getPage(), wrapper);
         List<ContractBudgetVo> list = page.getRecords();
         //取出默认汇率
         List<CurrencyRate> defaultCurrencyRateList = currencyRateService.getList();
-        Map<String,BigDecimal> defaultCurrencyRateMap = defaultCurrencyRateList.stream().collect(Collectors.toMap(CurrencyRate::getType,CurrencyRate::getRate));
-        for(ContractBudgetVo v : list){
+        Map<String, BigDecimal> defaultCurrencyRateMap = defaultCurrencyRateList.stream().collect(Collectors.toMap(CurrencyRate::getType, CurrencyRate::getRate));
+        for (ContractBudgetVo v : list) {
             v.setRefundableAmount(BigDecimal.ZERO);//暂时先设置退税金额为0
             v.setOtherIncomeAmount(BigDecimal.ZERO);//暂时先设置其他收入为0
             v.setAccountPaid(BigDecimal.ZERO);//暂时先设置已付货款为0
@@ -335,28 +374,28 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
             customerService.attributeAssign(list, Contract::getBuyCorporationId, (item, customer) -> {
                 item.setCustomerName(customer.getName());
             });
-            if(StringUtils.isNotEmpty(v.getCurrencyRateJson())) {//如果此条合同有汇率了
+            if (StringUtils.isNotEmpty(v.getCurrencyRateJson())) {//如果此条合同有汇率了
                 //取出汇率
                 List<CurrencyRate> assignCurrencyRatesList = JSON.parseArray(v.getCurrencyRateJson(), CurrencyRate.class);
-                Map<String,BigDecimal> assignCurrencyRatesMap = assignCurrencyRatesList.stream().collect(Collectors.toMap(CurrencyRate::getType,CurrencyRate::getRate));
-                v.setRmbContractAmount(v.getAmount().multiply(assignCurrencyRatesMap.getOrDefault(v.getCurrency(),BigDecimal.ONE)));//计算汇算人民币
+                Map<String, BigDecimal> assignCurrencyRatesMap = assignCurrencyRatesList.stream().collect(Collectors.toMap(CurrencyRate::getType, CurrencyRate::getRate));
+                v.setRmbContractAmount(v.getAmount().multiply(assignCurrencyRatesMap.getOrDefault(v.getCurrency(), BigDecimal.ONE)));//计算汇算人民币
                 //到账金额
-                v.setSumClaimMoney(this.getSumClaimMoney(v,assignCurrencyRatesMap));
+                v.setSumClaimMoney(this.getSumClaimMoney(v, assignCurrencyRatesMap));
                 //采购合同总金额
-                v.setSumPurchaseContractMoney(this.getSumPurchaseContractMoney(v,assignCurrencyRatesMap));
+                v.setSumPurchaseContractMoney(this.getSumPurchaseContractMoney(v, assignCurrencyRatesMap));
                 //支出费用
-                this.getGroupTypeMoney(v,assignCurrencyRatesMap);
-            }else{//没有取默认的汇率
-                v.setRmbContractAmount(v.getAmount().multiply(defaultCurrencyRateMap.getOrDefault(v.getCurrency(),BigDecimal.ONE)));//计算汇算人民币
+                this.getGroupTypeMoney(v, assignCurrencyRatesMap);
+            } else {//没有取默认的汇率
+                v.setRmbContractAmount(v.getAmount().multiply(defaultCurrencyRateMap.getOrDefault(v.getCurrency(), BigDecimal.ONE)));//计算汇算人民币
                 //到账金额
-                v.setSumClaimMoney(this.getSumClaimMoney(v,defaultCurrencyRateMap));
+                v.setSumClaimMoney(this.getSumClaimMoney(v, defaultCurrencyRateMap));
                 //采购合同总金额
-                v.setSumPurchaseContractMoney(this.getSumPurchaseContractMoney(v,defaultCurrencyRateMap));
+                v.setSumPurchaseContractMoney(this.getSumPurchaseContractMoney(v, defaultCurrencyRateMap));
                 //支出费用
-                this.getGroupTypeMoney(v,defaultCurrencyRateMap);
+                this.getGroupTypeMoney(v, defaultCurrencyRateMap);
             }
             //计算收入总计=合同金额(转人民币)+应退税金额(转人民币)+其他收入(转人民币)
-            v.setIncomeAmount(v.getRmbContractAmount()==null?BigDecimal.ZERO:v.getRmbContractAmount().add(v.getRefundableAmount()).add(v.getOtherIncomeAmount()));
+            v.setIncomeAmount(v.getRmbContractAmount() == null ? BigDecimal.ZERO : v.getRmbContractAmount().add(v.getRefundableAmount()).add(v.getOtherIncomeAmount()));
             //计算支出总计 除合同金额(转人民币)+应退税金额(转人民币)+其他收入(转人民币) 其他金额相加
             v.setExpenditureAmount(v.getTrailerFee().add
                     (v.getCustomsFee()).add
@@ -383,6 +422,25 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
     public ContractVo detail(Long id) {
         Contract Contract = this.getById(id);
         ContractVo result = BeanUtil.toBean(Contract, ContractVo.class);
+
+        List<ContractProduct> contractProductList = contractProductService.list(q -> q.eq(ContractProduct::getContractId, id));
+        productInfoService.attributeAssign(contractProductList, ContractProduct::getProductId, (item, product) -> {
+            item.setProductCnName(product.getName());
+            item.setProductCode(product.getCode());
+            item.setProductUnit(product.getUnit());
+        });
+        result.setContractProductList(contractProductList);
+
+        List<ContractProject> contractProjectList = contractProjectService.list(q -> q.eq(ContractProject::getContractId, id));
+        result.setContractProjectList(contractProjectList);
+
+        List<ContractShipment> contractShipmentList = contractShipmentService.list(q -> q.eq(ContractShipment::getContractId, id));
+        productInfoService.attributeAssign(contractShipmentList, ContractShipment::getProductId, (item, product) -> {
+            item.setProductCnName(product.getName());
+            item.setProductCode(product.getCode());
+        });
+        result.setContractShipmentList(contractShipmentList);
+
         return result;
     }
 
@@ -661,8 +719,8 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
      */
     @Override
     public void contractHandover(ContractDto dto) {
-        ObsFileUtil.editFile(dto.getFileList(),dto.getId(),1);
-        ObsFileUtil.editFile(dto.getPackageFileList(),dto.getId(),2);
+        ObsFileUtil.editFile(dto.getFileList(), dto.getId(), 1);
+        ObsFileUtil.editFile(dto.getPackageFileList(), dto.getId(), 2);
     }
 
     /**
@@ -675,15 +733,15 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
         QueryWrapper<Contract> query = Wrappers.query();
         query.select("count(*) count,ifnull(sum(amount),0) amount,sell_corporation_id sellCorporationId");
         query.groupBy("sell_corporation_id");
-        query.eq("status",30);
+        query.eq("status", 30);
         List<Contract> contractList = baseMapper.selectList(query);
 
         //计算合计数量
         Integer countAmount = contractList.stream().map(Contract::getCount).reduce(Integer::sum).orElse(0);
         //计算合计金额
         BigDecimal amount = contractList.stream().map(Contract::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
-        map.put("countAmount",countAmount);
-        map.put("amount",amount);
+        map.put("countAmount", countAmount);
+        map.put("amount", amount);
 
         //赋值归属公司名称
         DynamicDataSourceContextHolder.push(SourceConstant.COMMON);
@@ -777,6 +835,168 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
         return decisionAidVo;
     }
 
+    @Override
+    public PayDecisionAidVo payDecisionAid(PayDecisionAidDto dto) {
+
+        PayDecisionAidVo vo = new PayDecisionAidVo();
+
+        // 采购合同id
+        List<Long> purchaseIdList = dto.getPurchaseIdList();
+
+        if (purchaseIdList.size() == 0) {
+            return vo;
+        }
+
+        // 采购合同
+        List<Purchase> purchaseList = purchaseService.listByIds(purchaseIdList);
+        List<PurchaseDetail> purchaseDetailList = purchaseDetailService.list(q -> q.in(PurchaseDetail::getPurchaseId, purchaseIdList));
+
+        // 赋值关联销售合同
+        setContractInfo(vo, purchaseDetailList);
+
+        // 赋值采购合同数据
+        setPurchaseInfo(vo, purchaseList, purchaseDetailList);
+
+        // 赋值到货数据
+        List<ArrivalDetail> arrivalDetails = setInvoiceQuantity(vo);
+
+        // 赋值合格率
+        setPassRate(vo, arrivalDetails);
+
+        // TODO 赋值退货数量 无法关联
+
+
+        return vo;
+    }
+
+    /**
+     * 赋值合格率
+     */
+    private void setPassRate(PayDecisionAidVo vo, List<ArrivalDetail> arrivalDetails) {
+        List<PayDecisionAidVo.PurchaseInfo> purchaseInfoList = vo.getPurchaseInfoList();
+
+        if (arrivalDetails.size() == 0) {
+            return;
+        }
+
+        // 到货明细通过采购明细id分组
+        Map<Long, List<ArrivalDetail>> arrivalDetailMap = arrivalDetails.stream().collect(Collectors.groupingBy(
+                ArrivalDetail::getPurchaseDetailId
+        ));
+
+        // 通过到货明细查询质检记录
+        List<Long> arrivalDetailsIdList = arrivalDetails.stream().map(BaseIdPo::getId).collect(Collectors.toList());
+        List<QualityDetail> list = qualityDetailService.list(q -> q.in(QualityDetail::getArrivalDetailId, arrivalDetailsIdList));
+
+
+        for (PayDecisionAidVo.PurchaseInfo purchaseInfo : purchaseInfoList) {
+
+            List<ArrivalDetail> arrivalDetailsList = arrivalDetailMap.get(purchaseInfo.getPurchaseDetailsId());
+
+            purchaseInfo.setQualifiedCount(BigDecimal.ZERO);
+            purchaseInfo.setNoQualifiedCount(BigDecimal.ZERO);
+
+            List<Long> itemArrivalDetailsIdList = arrivalDetailsList.stream().map(BaseIdPo::getId).collect(Collectors.toList());
+            for (QualityDetail qualityDetail : list) {
+                if (!itemArrivalDetailsIdList.contains(qualityDetail.getArrivalDetailId())) {
+                    continue;
+                }
+                purchaseInfo.setQualifiedCount(purchaseInfo.getQualifiedCount().add(qualityDetail.getQualifiedCount()));
+                purchaseInfo.setNoQualifiedCount(purchaseInfo.getNoQualifiedCount().add(qualityDetail.getNoQualifiedCount()));
+            }
+        }
+
+    }
+
+
+    /**
+     * 赋值到货数据
+     */
+    private List<ArrivalDetail> setInvoiceQuantity(PayDecisionAidVo vo) {
+        List<PayDecisionAidVo.PurchaseInfo> purchaseInfoList = vo.getPurchaseInfoList();
+
+        // 采购明细id列表
+        List<Long> purchaseDetailsIdList = purchaseInfoList.stream()
+                .map(PayDecisionAidVo.PurchaseInfo::getPurchaseDetailsId).collect(Collectors.toList());
+
+        if (purchaseDetailsIdList.size() == 0) {
+            return Collections.emptyList();
+        }
+
+        List<ArrivalDetail> list = arrivalDetailService.list(q -> q.eq(ArrivalDetail::getPurchaseDetailId, purchaseDetailsIdList));
+
+        Map<Long, BigDecimal> collect = list.stream().collect(Collectors.toMap(
+                ArrivalDetail::getPurchaseDetailId,
+                ArrivalDetail::getCount,
+                BigDecimal::add
+        ));
+
+        for (PayDecisionAidVo.PurchaseInfo purchaseInfo : purchaseInfoList) {
+            BigDecimal invoiceQuantity = collect.getOrDefault(purchaseInfo.getPurchaseDetailsId(), BigDecimal.ZERO);
+            purchaseInfo.setInvoiceQuantity(invoiceQuantity);
+        }
+
+        return list;
+    }
+
+    /**
+     * 赋值采购合同数据
+     */
+    private void setPurchaseInfo(PayDecisionAidVo vo, List<Purchase> purchaseList, List<PurchaseDetail> purchaseDetailList) {
+
+        Map<Long, List<PurchaseDetail>> purchaseDetailMap = purchaseDetailList.stream()
+                .collect(Collectors.groupingBy(PurchaseDetail::getPurchaseId));
+
+        List<PayDecisionAidVo.PurchaseInfo> list = new ArrayList<>();
+
+        for (Purchase purchase : purchaseList) {
+            List<PurchaseDetail> itemList = purchaseDetailMap.get(purchase.getId());
+
+            if (itemList.size() == 0) {
+                continue;
+            }
+
+            for (PurchaseDetail purchaseDetail : itemList) {
+                PayDecisionAidVo.PurchaseInfo purchaseInfo = new PayDecisionAidVo.PurchaseInfo();
+                purchaseInfo.setPurchaseId(purchase.getId());
+                purchaseInfo.setPurchaseCode(purchase.getCode());
+                purchaseInfo.setPurchaseDetailsId(purchaseDetail.getId());
+                purchaseInfo.setProductId(purchaseDetail.getBussinessId());
+                purchaseInfo.setPurchaseQuantity(purchaseDetail.getCount());
+                list.add(purchaseInfo);
+            }
+        }
+
+        // 赋值产品id
+        productInfoService.attributeAssign(list, PayDecisionAidVo.PurchaseInfo::getProductId, (item, product) -> {
+            item.setProductName(product.getName());
+            item.setProductCode(product.getCode());
+        });
+
+        vo.setPurchaseInfoList(list);
+    }
+
+    /**
+     * 赋值销售合同数据
+     */
+    private void setContractInfo(PayDecisionAidVo vo, List<PurchaseDetail> purchaseDetailList) {
+
+        List<Long> contractIdList = purchaseDetailList.stream()
+                .filter(item -> Objects.equals(item.getDataResource(), 1))
+                .map(PurchaseDetail::getDataResourceId)
+                .filter(Objects::nonNull)
+                .distinct()
+                .collect(Collectors.toList());
+
+        if (contractIdList.size() == 0) {
+            vo.setContractList(Collections.emptyList());
+            return;
+        }
+
+        List<Contract> customerList = contractService.list(q -> q.in(BaseIdPo::getId, contractIdList));
+        vo.setContractList(customerList);
+    }
+
 
     /**
      * 赋值外销合同信息
@@ -1069,49 +1289,52 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
 
     /**
      * 统计到账认领总金额
+     *
      * @param v
      * @param currencyRatesMap 汇率JSON
      * @return
      */
-    private BigDecimal getSumClaimMoney(ContractBudgetVo v,Map<String,BigDecimal> currencyRatesMap){
-        List<ClaimContract> claimContractList = claimContractService.list(Wrappers.<ClaimContract>query().lambda().eq(ClaimContract::getContractId,v.getContractId()));
+    private BigDecimal getSumClaimMoney(ContractBudgetVo v, Map<String, BigDecimal> currencyRatesMap) {
+        List<ClaimContract> claimContractList = claimContractService.list(Wrappers.<ClaimContract>query().lambda().eq(ClaimContract::getContractId, v.getContractId()));
         BigDecimal sumClaimMOney = BigDecimal.ZERO;
-        if(CollectionUtils.isNotEmpty(claimContractList)){
-            for(ClaimContract c:claimContractList){
-                sumClaimMOney = sumClaimMOney.add(c.getMoney().multiply(currencyRatesMap.getOrDefault(c.getCurrency(),BigDecimal.ONE)));
+        if (CollectionUtils.isNotEmpty(claimContractList)) {
+            for (ClaimContract c : claimContractList) {
+                sumClaimMOney = sumClaimMOney.add(c.getMoney().multiply(currencyRatesMap.getOrDefault(c.getCurrency(), BigDecimal.ONE)));
             }
             return sumClaimMOney;
-        }else{
+        } else {
             return BigDecimal.ZERO;
         }
     }
 
     /**
      * 统采购合同总金额
+     *
      * @param v
      * @param currencyRatesMap 汇率JSON
      * @return
      */
-    private BigDecimal getSumPurchaseContractMoney(ContractBudgetVo v,Map<String,BigDecimal> currencyRatesMap){
+    private BigDecimal getSumPurchaseContractMoney(ContractBudgetVo v, Map<String, BigDecimal> currencyRatesMap) {
         List<EhsdPurchaseProductVo> list = ehsdPurchaseProductService.getListByContractId(v.getContractId());
         BigDecimal sumPurchaseContractMoney = BigDecimal.ZERO;
-        if(CollectionUtils.isNotEmpty(list)){
-            for(EhsdPurchaseProductVo c:list){
-                sumPurchaseContractMoney = sumPurchaseContractMoney.add(c.getAmount().multiply(currencyRatesMap.getOrDefault(c.getCurrency(),BigDecimal.ONE)));
+        if (CollectionUtils.isNotEmpty(list)) {
+            for (EhsdPurchaseProductVo c : list) {
+                sumPurchaseContractMoney = sumPurchaseContractMoney.add(c.getAmount().multiply(currencyRatesMap.getOrDefault(c.getCurrency(), BigDecimal.ONE)));
             }
             return sumPurchaseContractMoney;
-        }else{
+        } else {
             return BigDecimal.ZERO;
         }
     }
 
     /**
      * 统计支出各种费用
+     *
      * @param v
      * @param currencyRatesMap 汇率JSON
      * @return
      */
-    private void getGroupTypeMoney(ContractBudgetVo v,Map<String,BigDecimal> currencyRatesMap){
+    private void getGroupTypeMoney(ContractBudgetVo v, Map<String, BigDecimal> currencyRatesMap) {
         List<AccountRequestFundsDetailVo> list = accountRequestFundsDetailService.getListByContractId(v.getContractId());
         /**
          * 拖车费
@@ -1161,40 +1384,40 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
         /**
          * 其他费用
          */
-        BigDecimal other  = BigDecimal.ZERO;
+        BigDecimal other = BigDecimal.ZERO;
 
-        if(CollectionUtils.isNotEmpty(list)){
-            for(AccountRequestFundsDetailVo c:list){
-                switch (c.getCostType()){
+        if (CollectionUtils.isNotEmpty(list)) {
+            for (AccountRequestFundsDetailVo c : list) {
+                switch (c.getCostType()) {
                     case "1"://拖车费
-                        trailerFee = trailerFee.add(c.getAmount().multiply(currencyRatesMap.getOrDefault(c.getCurrency(),BigDecimal.ONE)));
+                        trailerFee = trailerFee.add(c.getAmount().multiply(currencyRatesMap.getOrDefault(c.getCurrency(), BigDecimal.ONE)));
                         break;
                     case "2"://报关费
-                        customsFee = customsFee.add(c.getAmount().multiply(currencyRatesMap.getOrDefault(c.getCurrency(),BigDecimal.ONE)));
+                        customsFee = customsFee.add(c.getAmount().multiply(currencyRatesMap.getOrDefault(c.getCurrency(), BigDecimal.ONE)));
                         break;
                     case "3"://港杂费
-                        portMixedFee = portMixedFee.add(c.getAmount().multiply(currencyRatesMap.getOrDefault(c.getCurrency(),BigDecimal.ONE)));
+                        portMixedFee = portMixedFee.add(c.getAmount().multiply(currencyRatesMap.getOrDefault(c.getCurrency(), BigDecimal.ONE)));
                         break;
                     case "4"://验收红包
-                        inspectionRedPack = inspectionRedPack.add(c.getAmount().multiply(currencyRatesMap.getOrDefault(c.getCurrency(),BigDecimal.ONE)));
+                        inspectionRedPack = inspectionRedPack.add(c.getAmount().multiply(currencyRatesMap.getOrDefault(c.getCurrency(), BigDecimal.ONE)));
                         break;
                     case "5"://佣金
-                        commission = commission.add(c.getAmount().multiply(currencyRatesMap.getOrDefault(c.getCurrency(),BigDecimal.ONE)));
+                        commission = commission.add(c.getAmount().multiply(currencyRatesMap.getOrDefault(c.getCurrency(), BigDecimal.ONE)));
                         break;
                     case "6"://检测费
-                        checkout = checkout.add(c.getAmount().multiply(currencyRatesMap.getOrDefault(c.getCurrency(),BigDecimal.ONE)));
+                        checkout = checkout.add(c.getAmount().multiply(currencyRatesMap.getOrDefault(c.getCurrency(), BigDecimal.ONE)));
                         break;
                     case "7"://验货费
-                        inspectionCharge = inspectionCharge.add(c.getAmount().multiply(currencyRatesMap.getOrDefault(c.getCurrency(),BigDecimal.ONE)));
+                        inspectionCharge = inspectionCharge.add(c.getAmount().multiply(currencyRatesMap.getOrDefault(c.getCurrency(), BigDecimal.ONE)));
                         break;
                     case "8"://运费
-                        freight = freight.add(c.getAmount().multiply(currencyRatesMap.getOrDefault(c.getCurrency(),BigDecimal.ONE)));
+                        freight = freight.add(c.getAmount().multiply(currencyRatesMap.getOrDefault(c.getCurrency(), BigDecimal.ONE)));
                         break;
                     case "9"://产地证费
-                        certificateOfOrigin = certificateOfOrigin.add(c.getAmount().multiply(currencyRatesMap.getOrDefault(c.getCurrency(),BigDecimal.ONE)));
+                        certificateOfOrigin = certificateOfOrigin.add(c.getAmount().multiply(currencyRatesMap.getOrDefault(c.getCurrency(), BigDecimal.ONE)));
                         break;
                     default:
-                        other = other.add(c.getAmount().multiply(currencyRatesMap.getOrDefault(c.getCurrency(),BigDecimal.ONE)));
+                        other = other.add(c.getAmount().multiply(currencyRatesMap.getOrDefault(c.getCurrency(), BigDecimal.ONE)));
                         break;
                 }
             }
@@ -1210,4 +1433,5 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
         v.setCertificateOfOrigin(certificateOfOrigin);
         v.setOther(other);
     }
+
 }

+ 42 - 33
hx-sale/src/main/java/com/fjhx/sale/service/documents/impl/DocumentsServiceImpl.java

@@ -15,6 +15,7 @@ import com.fjhx.common.entity.corporation.po.Corporation;
 import com.fjhx.common.service.corporation.CorporationService;
 import com.fjhx.customer.entity.customer.po.Customer;
 import com.fjhx.customer.service.customer.CustomerService;
+import com.fjhx.flow.service.flow.FlowExampleService;
 import com.fjhx.item.service.product.ProductInfoService;
 import com.fjhx.sale.entity.contract.po.Contract;
 import com.fjhx.sale.entity.contract.po.ContractProject;
@@ -93,6 +94,9 @@ public class DocumentsServiceImpl extends ServiceImpl<DocumentsMapper, Documents
     @Autowired
     private ContractProjectService contractProjectService;
 
+    @Autowired
+    private FlowExampleService flowExampleService;
+
     private static final SimpleDateFormat sdf = new SimpleDateFormat("dd/MMM/yyyy", Locale.ENGLISH);
 
     /**
@@ -110,13 +114,13 @@ public class DocumentsServiceImpl extends ServiceImpl<DocumentsMapper, Documents
         DynamicDataSourceContextHolder.poll();
 
         List<DocumentsVo> records = page.getRecords();
-        if (ObjectUtil.isEmpty(records)){
+        if (ObjectUtil.isEmpty(records)) {
             return page;
         }
         for (DocumentsVo record : records) {
             //赋值归属公司名称
             List<Corporation> corporationList2 = corporationMap.get(record.getSellCorporationId());
-            if (ObjectUtil.isNotEmpty(corporationList2)){
+            if (ObjectUtil.isNotEmpty(corporationList2)) {
                 record.setSellCorporationName(corporationList2.get(0).getName());
             }
 
@@ -125,6 +129,8 @@ public class DocumentsServiceImpl extends ServiceImpl<DocumentsMapper, Documents
         customerService.attributeAssign(records, DocumentsVo::getBuyCorporationId, (item, customer) -> {
             item.setBuyCorporationName(customer.getName());
         });
+        //  赋值流程id
+        flowExampleService.setFlowId(records, DocumentsVo::getContractId, DocumentsVo::setFlowId);
         return page;
     }
 
@@ -162,41 +168,42 @@ public class DocumentsServiceImpl extends ServiceImpl<DocumentsMapper, Documents
         //删除单证表的数据
         this.removeById(id);
         //删除单证-产品表的数据
-        documentsProductService.remove(Wrappers.<DocumentsProduct>lambdaQuery().eq(DocumentsProduct::getDocumentsId,id));
+        documentsProductService.remove(Wrappers.<DocumentsProduct>lambdaQuery().eq(DocumentsProduct::getDocumentsId, id));
 
         //删除单证-货运表的数据
-        documentsTransportService.remove(Wrappers.<DocumentsTransport>lambdaQuery().eq(DocumentsTransport::getDocumentsId,id));
+        documentsTransportService.remove(Wrappers.<DocumentsTransport>lambdaQuery().eq(DocumentsTransport::getDocumentsId, id));
     }
 
     /**
      * 生成PDF---商业发票、装箱单
+     *
      * @return
      */
     @Override
     public Map<String, Object> generateInvoiceAPackPdf(Long id) {
-        Map<String,Object> map = new HashMap<>();
+        Map<String, Object> map = new HashMap<>();
         //查询单证
         Documents documents = this.getById(id);
-        if(ObjectUtil.isEmpty(documents)){
+        if (ObjectUtil.isEmpty(documents)) {
             throw new ServiceException("单证不存在");
         }
         setDocumentArea(documents);
         //查询合同
         Contract contract = contractService.getById(documents.getContractId());
-        if(ObjectUtil.isEmpty(contract)){
+        if (ObjectUtil.isEmpty(contract)) {
             throw new ServiceException("该单证合同不存在");
         }
         //查询合同
         ContractVo contractVo = BeanUtil.toBean(contract, ContractVo.class);
         setContractArea(contractVo);
         //查询收费项目
-        List<ContractProject> contractProjectList = contractProjectService.list(Wrappers.<ContractProject>query().lambda().eq(ContractProject::getContractId,contractVo.getId()));
+        List<ContractProject> contractProjectList = contractProjectService.list(Wrappers.<ContractProject>query().lambda().eq(ContractProject::getContractId, contractVo.getId()));
         //查询买方
         Customer customer = customerService.getById(contractVo.getBuyCorporationId());
         //查询卖方
         Corporation corporation = corporationService.getById(contractVo.getSellCorporationId());
         //查询单证货物
-        List<DocumentsProduct> documentsProducts = documentsProductService.list(Wrappers.<DocumentsProduct>query().lambda().eq(DocumentsProduct::getDocumentsId,documents.getId()));
+        List<DocumentsProduct> documentsProducts = documentsProductService.list(Wrappers.<DocumentsProduct>query().lambda().eq(DocumentsProduct::getDocumentsId, documents.getId()));
         // 赋值产品属性
         productInfoService.attributeAssign(documentsProducts, DocumentsProduct::getBusinessId, (item, product) -> {
             item.setProductCode(product.getCode());
@@ -218,31 +225,31 @@ public class DocumentsServiceImpl extends ServiceImpl<DocumentsMapper, Documents
         BigDecimal sumPackQuantity = BigDecimal.ZERO;
         //装箱商品明细
         List<PackDetailGoods> packDetailGoodsList = new ArrayList<>();
-        if(ObjectUtil.isNotEmpty(packShipment)){//查询装箱单
+        if (ObjectUtil.isNotEmpty(packShipment)) {//查询装箱单
             packDetailList = packDetailService.list(Wrappers.<PackDetail>query().lambda().in(PackDetail::getId, Arrays.asList(packShipment.getPackDetailIds())));
             List<Long> packDetailIds = packDetailList.stream().map(PackDetail::getId).collect(Collectors.toList());
-            packDetailGoodsList = packDetailGoodsService.list(Wrappers.<PackDetailGoods>query().lambda().in(PackDetailGoods::getPackDetailId,packDetailIds));
-            Map<Long,List<PackDetailGoods>> packGoodMap = packDetailGoodsList.stream().collect(Collectors.groupingBy(PackDetailGoods::getPackDetailId));
-            for(PackDetail p:packDetailList){
-                p.setPackDetailGoodsList(packGoodMap.getOrDefault(p.getId(),null));
+            packDetailGoodsList = packDetailGoodsService.list(Wrappers.<PackDetailGoods>query().lambda().in(PackDetailGoods::getPackDetailId, packDetailIds));
+            Map<Long, List<PackDetailGoods>> packGoodMap = packDetailGoodsList.stream().collect(Collectors.groupingBy(PackDetailGoods::getPackDetailId));
+            for (PackDetail p : packDetailList) {
+                p.setPackDetailGoodsList(packGoodMap.getOrDefault(p.getId(), null));
             }
-            sumPackQuantity = packDetailList.stream().map(PackDetail::getPackQuantity).reduce(BigDecimal.ZERO,BigDecimal::add);
-            sumRoughWeight = packDetailList.stream().map(PackDetail::getRoughWeight).reduce(BigDecimal.ZERO,BigDecimal::add);
-            sumNetWeight = packDetailList.stream().map(PackDetail::getNetWeight).reduce(BigDecimal.ZERO,BigDecimal::add);
-            sumBomVolume = packDetailList.stream().map(PackDetail::getBomVolume).reduce(BigDecimal.ZERO,BigDecimal::add);
+            sumPackQuantity = packDetailList.stream().map(PackDetail::getPackQuantity).reduce(BigDecimal.ZERO, BigDecimal::add);
+            sumRoughWeight = packDetailList.stream().map(PackDetail::getRoughWeight).reduce(BigDecimal.ZERO, BigDecimal::add);
+            sumNetWeight = packDetailList.stream().map(PackDetail::getNetWeight).reduce(BigDecimal.ZERO, BigDecimal::add);
+            sumBomVolume = packDetailList.stream().map(PackDetail::getBomVolume).reduce(BigDecimal.ZERO, BigDecimal::add);
         }
-        map.put("contract",contractVo);//合同信息
-        map.put("date",sdf.format(contractVo.getCreateTime()));//日期
-        map.put("documents",documents);//单证信息
-        map.put("documentsProducts",documentsProducts);//单证信息货物
-        map.put("packDetailList",packDetailList);//单证信息货物
-        map.put("sumRoughWeight",sumRoughWeight);//总毛重
-        map.put("sumNetWeight",sumNetWeight);//总净重
-        map.put("sumBomVolume",sumBomVolume);//总体积
-        map.put("sumPackQuantity",sumPackQuantity);//总箱数
-        map.put("customer",customer);//买方信息
-        map.put("corporation",corporation);//卖方信息
-        map.put("contractProjectList",contractProjectList);//卖方信息
+        map.put("contract", contractVo);//合同信息
+        map.put("date", sdf.format(contractVo.getCreateTime()));//日期
+        map.put("documents", documents);//单证信息
+        map.put("documentsProducts", documentsProducts);//单证信息货物
+        map.put("packDetailList", packDetailList);//单证信息货物
+        map.put("sumRoughWeight", sumRoughWeight);//总毛重
+        map.put("sumNetWeight", sumNetWeight);//总净重
+        map.put("sumBomVolume", sumBomVolume);//总体积
+        map.put("sumPackQuantity", sumPackQuantity);//总箱数
+        map.put("customer", customer);//买方信息
+        map.put("corporation", corporation);//卖方信息
+        map.put("contractProjectList", contractProjectList);//卖方信息
 
 //        map.put("packDetailGoodsList",packDetailGoodsList);//装箱商品明细
         return map;
@@ -250,6 +257,7 @@ public class DocumentsServiceImpl extends ServiceImpl<DocumentsMapper, Documents
 
     /**
      * 生成pdf----报关单
+     *
      * @param id
      * @return
      */
@@ -257,7 +265,7 @@ public class DocumentsServiceImpl extends ServiceImpl<DocumentsMapper, Documents
     public DocumentsPdf generateClearanceePdf(Long id) {
         //获取单证PDF数据
         DocumentsPdf pdfData = documentsPdfService.getOne(Wrappers.<DocumentsPdf>query().lambda()
-                .eq(DocumentsPdf::getDocumentId,id).eq(DocumentsPdf::getDataType,0));
+                .eq(DocumentsPdf::getDocumentId, id).eq(DocumentsPdf::getDataType, 0));
         if (ObjectUtil.isEmpty(pdfData)) {
             JSONObject data = new JSONObject();
             List<JSONObject> productData = new ArrayList<>();
@@ -284,7 +292,7 @@ public class DocumentsServiceImpl extends ServiceImpl<DocumentsMapper, Documents
             //发件公司清关负责人
             data.put("contacts", contract.getSellContactName());
             //发件公司清关负责人联系电话/手机
-            data.put("contactsMobile",contract.getSellContactNumber());
+            data.put("contactsMobile", contract.getSellContactNumber());
             //联系人邮箱
             data.put("contactsEmail", "");
             //境内发货人名称(填写发货公司中文名称)
@@ -393,7 +401,7 @@ public class DocumentsServiceImpl extends ServiceImpl<DocumentsMapper, Documents
             pdfData.setDocumentId(documents.getId());
             pdfData.setContractCode(contract.getCode());
             pdfData.setDataType(0);//报关单
-            pdfData.setContent(JSONObject.toJSONString(data,JSONWriter.Feature.WriteLongAsString));
+            pdfData.setContent(JSONObject.toJSONString(data, JSONWriter.Feature.WriteLongAsString));
         }
         return pdfData;
     }
@@ -419,6 +427,7 @@ public class DocumentsServiceImpl extends ServiceImpl<DocumentsMapper, Documents
         contractVo.setSellProvinceName(areaMap.get(contractVo.getSellProvinceId()));
         contractVo.setSellCityName(areaMap.get(contractVo.getSellCityId()));
     }
+
     /**
      * 赋值单证目的国家名称
      */

+ 50 - 0
hx-sale/src/main/java/com/fjhx/sale/service/intermediate/IntermediateContractService.java

@@ -0,0 +1,50 @@
+package com.fjhx.sale.service.intermediate;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.sale.entity.contract.vo.ContractPdfInfoVo;
+import com.fjhx.sale.entity.intermediate.dto.IntermediateContractDto;
+import com.fjhx.sale.entity.intermediate.dto.IntermediateContractSelectDto;
+import com.fjhx.sale.entity.intermediate.po.IntermediateContract;
+import com.fjhx.sale.entity.intermediate.vo.IntermediateContractVo;
+import com.ruoyi.common.core.service.BaseService;
+
+import java.util.List;
+
+
+/**
+ * <p>
+ * 中间合同 服务类
+ * </p>
+ *
+ * @author
+ * @since 2023-06-28
+ */
+public interface IntermediateContractService extends BaseService<IntermediateContract> {
+
+    /**
+     * 中间合同分页
+     */
+    Page<IntermediateContractVo> getPage(IntermediateContractSelectDto dto);
+
+    /**
+     * 中间合同明细
+     */
+    IntermediateContractVo detail(Long id);
+
+    /**
+     * 中间合同编辑
+     */
+    void edit(IntermediateContractDto intermediateContractDto);
+
+    /**
+     * 获取中间合同历史联系方式
+     */
+    List<IntermediateContractVo> contactList(IntermediateContractDto dto);
+
+    /**
+     * 获取打印信息
+     *
+     * @return
+     */
+    ContractPdfInfoVo getPrintInfo(IntermediateContractDto dto);
+}

+ 168 - 0
hx-sale/src/main/java/com/fjhx/sale/service/intermediate/impl/IntermediateContractServiceImpl.java

@@ -0,0 +1,168 @@
+package com.fjhx.sale.service.intermediate.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fjhx.common.entity.corporation.po.Corporation;
+import com.fjhx.common.service.corporation.CorporationService;
+import com.fjhx.common.utils.Assert;
+import com.fjhx.customer.service.customer.CustomerService;
+import com.fjhx.sale.entity.contract.vo.ContractPdfInfoVo;
+import com.fjhx.sale.entity.documents.po.Documents;
+import com.fjhx.sale.entity.intermediate.dto.IntermediateContractDto;
+import com.fjhx.sale.entity.intermediate.dto.IntermediateContractSelectDto;
+import com.fjhx.sale.entity.intermediate.po.IntermediateContract;
+import com.fjhx.sale.entity.intermediate.vo.IntermediateContractVo;
+import com.fjhx.sale.mapper.intermediate.IntermediateContractMapper;
+import com.fjhx.sale.service.contract.ContractService;
+import com.fjhx.sale.service.documents.DocumentsService;
+import com.fjhx.sale.service.intermediate.IntermediateContractService;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import com.ruoyi.system.utils.UserUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
+
+/**
+ * <p>
+ * 中间合同 服务实现类
+ * </p>
+ *
+ * @author
+ * @since 2023-06-28
+ */
+@Service
+public class IntermediateContractServiceImpl extends ServiceImpl<IntermediateContractMapper, IntermediateContract> implements IntermediateContractService {
+
+    @Autowired
+    private DocumentsService documentsService;
+    @Autowired
+    private ContractService contractService;
+    @Autowired
+    private CustomerService customerService;
+    @Autowired
+    private CorporationService corporationService;
+
+    @Override
+    public Page<IntermediateContractVo> getPage(IntermediateContractSelectDto dto) {
+        IWrapper<IntermediateContract> wrapper = getWrapper();
+        wrapper.orderByDesc("ic", IntermediateContract::getId);
+        Page<IntermediateContractVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
+        List<IntermediateContractVo> records = page.getRecords();
+        //赋值原买方公司名称 客户
+        customerService.attributeAssign(records, IntermediateContractVo::getOldBuyCorporationId, (item, customer) -> {
+            item.setOldBuyCorporationName(customer.getName());
+        });
+        //赋值原卖方公司名称 多公司
+        corporationService.attributeAssign(records, IntermediateContractVo::getOldSellCorporationId, (item, corporation) -> {
+            item.setOldSellCorporationName(corporation.getName());
+        });
+        //赋值中间合同重新赋值过后的买方名称
+        corporationService.attributeAssign(records, IntermediateContractVo::getBuyCorporationId, (item, corporation) -> {
+            item.setBuyCorporationName(corporation.getName());
+        });
+        //赋值中间合同重新赋值过后的卖方名称
+        corporationService.attributeAssign(records, IntermediateContractVo::getSellCorporationId, (item, corporation) -> {
+            item.setSellCorporationName(corporation.getName());
+        });
+        //赋值最近操作用户
+        UserUtil.assignmentNickName(records, IntermediateContractVo::getUpdateUser, IntermediateContractVo::setOpUserName);
+        return page;
+    }
+
+    @Override
+    public IntermediateContractVo detail(Long id) {
+        IntermediateContract IntermediateContract = this.getById(id);
+        IntermediateContractVo result = BeanUtil.toBean(IntermediateContract, IntermediateContractVo.class);
+        return result;
+    }
+
+    @Override
+    public void edit(IntermediateContractDto intermediateContractDto) {
+        intermediateContractDto.setId(null);
+        Assert.notEmpty(intermediateContractDto.getDocumentsId(), "单证id不能为空");
+        IntermediateContract intermediateContract = this.getOne(q -> q.eq(IntermediateContract::getDocumentsId, intermediateContractDto.getId()));
+        if (ObjectUtil.isNotEmpty(intermediateContract)) {
+            //编辑 赋值id
+            intermediateContractDto.setId(intermediateContract.getId());
+        }
+        this.saveOrUpdate(intermediateContractDto);
+    }
+
+    /**
+     * 获取中间合同历史联系方式
+     */
+    @Override
+    public List<IntermediateContractVo> contactList(IntermediateContractDto dto) {
+        IWrapper<IntermediateContract> wrapper = IWrapper.getWrapper();
+        //根据卖方联系人名称/联系方式过滤
+        wrapper.or().like(IntermediateContract::getSellContactName, dto.getSellContactName());
+        wrapper.or().like(IntermediateContract::getSellContactNumber, dto.getSellContactNumber());
+        //根据买方联系人名称/联系方式过滤
+        wrapper.or().like(IntermediateContract::getBuyContactName, dto.getBuyContactName());
+        wrapper.or().like(IntermediateContract::getBuyContactNumber, dto.getBuyContactNumber());
+        List<IntermediateContractVo> list = baseMapper.contactList(wrapper);
+        //赋值买方名称
+        corporationService.attributeAssign(list, IntermediateContractVo::getBuyCorporationId, (item, corporation) -> {
+            item.setBuyCorporationName(corporation.getName());
+        });
+        //赋值卖方名称
+        corporationService.attributeAssign(list, IntermediateContractVo::getSellCorporationId, (item, corporation) -> {
+            item.setSellCorporationName(corporation.getName());
+        });
+        return list;
+    }
+
+    /**
+     * 获取打印信息
+     *
+     * @return
+     */
+    @Override
+    public ContractPdfInfoVo getPrintInfo(IntermediateContractDto dto) {
+        Assert.notEmpty(dto.getDocumentsId(), "单证id不能为空");
+        Documents documents = documentsService.getById(dto.getDocumentsId());
+        Assert.notEmpty(documents, "查询不到单证信息");
+        ContractPdfInfoVo contractPdfInfo = contractService.getContractPdfInfo(documents.getContractId());
+        //重新赋值买卖方信息为中间合同信息
+        //获得多公司信息
+        IntermediateContract intermediateContract = getOne(q -> q.eq(IntermediateContract::getDocumentsId, documents.getId()));
+        if (ObjectUtil.isNotEmpty(intermediateContract)) {
+            List<Long> corporationIds = Arrays.asList(intermediateContract.getBuyCorporationId(), intermediateContract.getSellCorporationId());
+            Map<Long, Corporation> corporationMap = corporationService.mapKEntity(Corporation::getId, q -> q.in(Corporation::getId, corporationIds));
+
+            Corporation buyCorporation = corporationMap.get(intermediateContract.getBuyCorporationId());
+            //赋值买方信息
+            contractPdfInfo.setBuyContactNumber(intermediateContract.getBuyContactName());
+            contractPdfInfo.setBuyCorporationName(intermediateContract.getBuyContactNumber());
+            if (ObjectUtil.isNotEmpty(buyCorporation)) {
+                contractPdfInfo.setBuyContactName(buyCorporation.getNameEn());
+                //赋值买方国家省市详细地址信息
+                contractPdfInfo.setBuyCountryName(buyCorporation.getCountryEnStr());
+                contractPdfInfo.setBuyProvinceName(buyCorporation.getProvinceEnStr());
+                contractPdfInfo.setBuyCityName(buyCorporation.getCityEnStr());
+                contractPdfInfo.setBuyDetailedAddress(buyCorporation.getAddressEn());
+            }
+
+            Corporation sellCorporation = corporationMap.get(intermediateContract.getSellCorporationId());
+            //赋值卖方信息
+            contractPdfInfo.setSellContactNumber(intermediateContract.getSellContactName());
+            contractPdfInfo.setSellCorporationNameEn(intermediateContract.getSellContactNumber());
+            if (ObjectUtil.isNotEmpty(sellCorporation)) {
+                contractPdfInfo.setSellContactName(sellCorporation.getNameEn());
+                //赋值卖方国家省市详细地址信息
+                contractPdfInfo.setSellCountryName(sellCorporation.getCountryEnStr());
+                contractPdfInfo.setSellProvinceName(sellCorporation.getProvinceEnStr());
+                contractPdfInfo.setSellCityName(sellCorporation.getCityEnStr());
+                contractPdfInfo.setSellDetailedAddress(sellCorporation.getAddressEn());
+            }
+        }
+        return contractPdfInfo;
+    }
+
+}

+ 26 - 14
hx-sale/src/main/java/com/fjhx/sale/service/pack/impl/PackDetailServiceImpl.java

@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fjhx.common.utils.Assert;
 import com.fjhx.sale.entity.pack.dto.PackDetailDto;
 import com.fjhx.sale.entity.pack.dto.PackDetailSelectDto;
 import com.fjhx.sale.entity.pack.enums.PackShipmentStatusEnum;
@@ -25,6 +26,7 @@ import org.springframework.transaction.annotation.Transactional;
 
 import java.util.Date;
 import java.util.List;
+import java.util.stream.Collectors;
 
 
 /**
@@ -32,7 +34,7 @@ import java.util.List;
  * 装箱出货明细表	 服务实现类
  * </p>
  *
- * @author 
+ * @author
  * @since 2023-04-18
  */
 @Service
@@ -40,22 +42,24 @@ public class PackDetailServiceImpl extends ServiceImpl<PackDetailMapper, PackDet
 
     @Autowired
     private PackShipmentService packShipmentService;
+
     /**
      * 分页
+     *
      * @param dto
      * @return
      */
     @Override
     public Page<PackDetailVo> getPage(PackDetailSelectDto dto) {
         IWrapper<PackDetail> wrapper = getWrapper();
-        wrapper.groupBy("t1.pack_id");
-        wrapper.orderByDesc("t1.create_time");
-        if(ObjectUtil.isNotEmpty(dto.getShipmentStatus())){
-            wrapper.eq("t1",PackDetailVo::getShipmentStatus,dto.getShipmentStatus());
+        if (ObjectUtil.isNotEmpty(dto.getShipmentStatus())) {
+            wrapper.eq("t1", PackDetailVo::getShipmentStatus, dto.getShipmentStatus());
         }
-        if(StringUtils.isNotEmpty(dto.getKeyword())){
-            wrapper.keyword(dto.getKeyword(),new SqlField("t3.`code`"),new SqlField("t2.`product_name`"));
+        if (StringUtils.isNotEmpty(dto.getKeyword())) {
+            wrapper.keyword(dto.getKeyword(), new SqlField("t3.`code`"), new SqlField("t2.`product_name`"));
         }
+        wrapper.groupBy("t1.pack_id");
+        wrapper.orderByDesc("t1.create_time");
         Page<PackDetailVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
         return page;
     }
@@ -84,24 +88,32 @@ public class PackDetailServiceImpl extends ServiceImpl<PackDetailMapper, PackDet
 
     /**
      * 出货
+     *
      * @param ids
      */
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public void shipment(List<Long> ids,Long contractId) {
-        if(CollectionUtils.isEmpty(ids)){
+    public void shipment(List<Long> ids, Long contractId) {
+        if (CollectionUtils.isEmpty(ids)) {
             throw new ServiceException("最少选中一条记录");
         }
-        if(ObjectUtil.isEmpty(contractId)){
+        if (ObjectUtil.isEmpty(contractId)) {
             throw new ServiceException("必须选择一条主合同");
         }
+        //查询id对应的装箱id 把装箱id下的记录都出货
+        List<PackDetail> packDetails = this.listByIds(ids);
+        Assert.notEmpty(packDetails, "查询不到装箱明细信息");
+        if (packDetails.size() != ids.size()) {
+            throw new ServiceException("存在未知装箱明细");
+        }
+        List<Long> packIds = packDetails.stream().map(PackDetail::getPackId).collect(Collectors.toList());
         this.update(Wrappers.<PackDetail>update().lambda()
-                .set(PackDetail::getShipmentStatus,PackShipmentStatusEnum.STATUS_1.getKey())
-                .set(PackDetail::getShipmentTime,new Date())
-                .in(PackDetail::getId,ids));
+                .set(PackDetail::getShipmentStatus, PackShipmentStatusEnum.STATUS_1.getKey())
+                .set(PackDetail::getShipmentTime, new Date())
+                .in(PackDetail::getPackId, packIds));
         //添加一条绑定主合同记录
         PackShipment packShipment = new PackShipment();
-        packShipment.setPackDetailIds(StringUtils.join(ids,","));
+        packShipment.setPackDetailIds(StringUtils.join(ids, ","));
         packShipment.setContractId(contractId);
         packShipmentService.save(packShipment);
     }

+ 8 - 0
hx-sale/src/main/java/com/fjhx/sale/service/sale/impl/SaleQuotationServiceImpl.java

@@ -17,6 +17,7 @@ import com.fjhx.customer.entity.customer.dto.CustomerSelectDto;
 import com.fjhx.customer.entity.customer.po.Customer;
 import com.fjhx.customer.entity.customer.vo.CustomerVo;
 import com.fjhx.customer.service.customer.CustomerService;
+import com.fjhx.flow.service.flow.FlowExampleService;
 import com.fjhx.sale.entity.contract.vo.ContractVo;
 import com.fjhx.sale.entity.quotation.po.QuotationPay;
 import com.fjhx.sale.entity.quotation.po.QuotationProduct;
@@ -69,6 +70,9 @@ public class SaleQuotationServiceImpl extends ServiceImpl<SaleQuotationMapper, S
     @Autowired
     private DictTenantDataService dictTenantDataService;
 
+    @Autowired
+    private FlowExampleService flowExampleService;
+
 
     /**
      * 报价表分页
@@ -94,6 +98,10 @@ public class SaleQuotationServiceImpl extends ServiceImpl<SaleQuotationMapper, S
 
         // 赋值用户名称
         UserUtil.assignmentNickName(saleQuotationVoList, BasePo::getCreateUser, SaleQuotationVo::setUserName);
+
+        //  赋值流程id
+        flowExampleService.setFlowId(saleQuotationVoList, SaleQuotationVo::setFlowId);
+
         return page;
     }
 

+ 6 - 10
hx-sale/src/main/resources/mapper/contract/ContractMapper.xml

@@ -60,10 +60,9 @@
                 buy_corporation_id = #{customerId}
             </if>
         </where>
-            ) t1
+        ) t1
         WHERE t1.sumPackQuantity &lt; t1.cpQuantity
-        AND t1.`status` &gt;=30
-        AND t1.`status` &lt;99
+        AND t1.`status`=30
         GROUP BY t1.id
     </select>
 
@@ -146,14 +145,11 @@
     </select>
     <select id="salesVolumeStatistics" resultType="com.fjhx.sale.entity.contract.dto.ContractDto">
 
-        SELECT
-            SUM(cp.quantity) quantity,
-            pi.name productName
-        FROM
-            contract_product cp
-                LEFT JOIN bytesailing_item.product_info pi ON cp.product_id = pi.id
+        SELECT SUM(cp.quantity) quantity,
+               pi.name          productName
+        FROM contract_product cp
+                 LEFT JOIN bytesailing_item.product_info pi ON cp.product_id = pi.id
             ${ew.customSqlSegment}
     </select>
 
-
 </mapper>

+ 20 - 18
hx-sale/src/main/resources/mapper/contract/ContractProductMapper.xml

@@ -6,18 +6,21 @@
         SELECT t1.id,
                t1.contract_id,
                t1.product_id,
-               t2.`code`               AS contractCode,
-               t2.user_name            AS userName,
-               t2.version              AS contractVersion,
-               t1.expend_quantity      AS expendQuantity,
+               t2.`code`          AS contractCode,
+               t2.user_name       AS userName,
+               t2.create_user     AS salesmanId,
+               t2.version         AS contractVersion,
+               t1.expend_quantity AS expendQuantity,
                (SELECT create_time
                 FROM claim_contract
                 WHERE contract_id = t2.id
                 ORDER BY create_time DESC
-                LIMIT 1)               AS claimTime,
-               t2.contract_template_id AS contractTemplateId
+                                     LIMIT 1)               AS claimTime,
+               t2.contract_template_id AS contractTemplateId,
+               t1.quantity
         FROM contract_product t1
-                 LEFT JOIN contract t2 ON t1.contract_id = t2.id
+            LEFT JOIN contract t2
+        ON t1.contract_id = t2.id
             ${ew.customSqlSegment}
     </select>
 
@@ -136,17 +139,16 @@
     </select>
 
     <select id="getListByIds" resultType="com.fjhx.sale.entity.contract.vo.ContractProductVo">
-        SELECT
-            t1.id,
-            t1.contract_id,
-            t1.product_id,
-            t2.`code` AS contractCode,
-            t2.user_name AS userName,
-            t2.version AS contractVersion,
-            t1.expend_quantity expendQuantity
-        FROM
-            contract_product t1
-        LEFT JOIN contract t2 ON t1.contract_id = t2.id
+        SELECT t1.id,
+               t1.contract_id,
+               t1.product_id,
+               t2.`code`    AS    contractCode,
+               t2.user_name AS    userName,
+               t2.version   AS    contractVersion,
+               t1.expend_quantity expendQuantity,
+               t1.quantity
+        FROM contract_product t1
+                 LEFT JOIN contract t2 ON t1.contract_id = t2.id
             ${ew.customSqlSegment}
     </select>
 

+ 37 - 0
hx-sale/src/main/resources/mapper/intermediate/IntermediateContractMapper.xml

@@ -0,0 +1,37 @@
+<?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.sale.mapper.intermediate.IntermediateContractMapper">
+    <select id="getPage" resultType="com.fjhx.sale.entity.intermediate.vo.IntermediateContractVo">
+        SELECT c.CODE,
+               c.amount,
+               c.currency,
+               c.sell_corporation_id oldSellCorporationId,
+               c.buy_corporation_id  oldBuyCorporationId,
+               d.id                  documentsId,
+               ic.sell_corporation_id,
+               ic.sell_contact_name,
+               ic.sell_contact_number,
+               ic.buy_corporation_id,
+               ic.buy_contact_name,
+               ic.buy_contact_number,
+               ic.create_user,
+               ic.create_time,
+               ic.update_user,
+               ic.update_time
+        FROM documents d
+                 LEFT JOIN contract c ON d.contract_id = c.id
+                 LEFT JOIN documents_transport dp ON d.id = dp.documents_id
+                 LEFT JOIN intermediate_contract ic ON ic.documents_id = d.id
+            ${ew.customSqlSegment}
+    </select>
+
+    <select id="contactList" resultType="com.fjhx.sale.entity.intermediate.vo.IntermediateContractVo">
+        SELECT ic.sell_contact_name,
+               ic.sell_contact_number,
+               ic.buy_contact_name,
+               ic.buy_contact_number
+        FROM intermediate_contract ic
+            ${ew.customSqlSegment}
+    </select>
+
+</mapper>

+ 15 - 7
hx-sale/src/main/resources/mapper/pack/PackDetailMapper.xml

@@ -2,13 +2,21 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.fjhx.sale.mapper.pack.PackDetailMapper">
     <select id="getPage" resultType="com.fjhx.sale.entity.pack.vo.PackDetailVo">
-        SELECT
-            t1.*,
-            GROUP_CONCAT(CONCAT(t3.`code`,"_",t2.product_name )) AS codeAPName
-        FROM
-            pack_detail t1
-                LEFT JOIN pack_detail_product t2 ON t1.id = t2.pack_detail_id
-                LEFT JOIN contract t3 ON t2.contract_id = t3.id
+        SELECT (SELECT GROUP_CONCAT(CONCAT(t3.`code`, "_", t2.product_name)) AS codeAPName
+                FROM pack_detail_product t2
+                         LEFT JOIN contract t3 ON t2.contract_id = t3.id
+                where t2.pack_detail_id in (GROUP_CONCAT(t1.id))) AS codeAPName,
+               sum(t1.pack_quantity)                                 packQuantity,
+               sum(t1.net_weight)                                    netWeight,
+               sum(t1.rough_weight)                                  roughWeight,
+               t1.box_long,
+               t1.box_wide,
+               t1.box_high,
+               sum(t1.bom_volume)                                    bomVolume,
+               t1.shipment_status,
+               t1.shipment_time,
+               t1.contract_ids
+        FROM pack_detail t1
             ${ew.customSqlSegment}
     </select>
 

+ 48 - 22
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/service/jd/impl/JdOrderServiceImpl.java

@@ -33,6 +33,7 @@ import com.fjhx.victoriatourist.service.logistics.LogisticsInfosService;
 import com.fjhx.victoriatourist.service.stock.StockTransferDetailsService;
 import com.fjhx.victoriatourist.service.stock.StockTransferService;
 import com.fjhx.victoriatourist.utils.CodeEnum;
+import com.fjhx.wms.entity.stock.dto.StockJournalDetailsDto;
 import com.fjhx.wms.entity.stock.emums.JournalType;
 import com.fjhx.wms.entity.stock.emums.StockWaitType;
 import com.fjhx.wms.entity.stock.po.*;
@@ -187,7 +188,6 @@ public class JdOrderServiceImpl extends ServiceImpl<JdOrderMapper, JdOrder> impl
         CustomizeAreaUtil.setAreaId(jdOrderDto);
 
 
-
     }
 
     @DSTransactional
@@ -304,6 +304,17 @@ public class JdOrderServiceImpl extends ServiceImpl<JdOrderMapper, JdOrder> impl
         List<StockTransferDetails> stockTransferDetailsList = new ArrayList<>();
         List<JdOrderDetails> jdOrderDetailsList = jdOrderDto.getJdOrderDetailsList();
         List<Stock> stockList = new ArrayList<>();
+
+        //创建出库记录
+        StockJournal stockJournal1 = new StockJournal();
+        stockJournal1.setOpType(2);
+        stockJournal1.setType(JournalType.ADJUSTING_OUT.getDetailType());
+        stockJournal1.setCode(stockTransfer.getCode());
+        stockJournal1.setWarehouseId(stockTransfer.getOutWarehouseId());
+        stockJournal1.setBusinessId(stockTransfer.getId());
+        //保存出库记录
+        stockJournalService.save(stockJournal1);
+        List<StockJournalDetails> stockJournalDetailsList1 = new ArrayList<>();
         for (JdOrderDetails jdOrderDetails : jdOrderDetailsList) {
             StockTransferDetails stockTransferDetails = new StockTransferDetails();
             stockTransferDetails.setBusinessDetailsId(jdOrderDetails.getId());
@@ -317,21 +328,22 @@ public class JdOrderServiceImpl extends ServiceImpl<JdOrderMapper, JdOrder> impl
             stock.setProductId(jdOrderDetails.getProductId());
             stock.setQuantity(jdOrderDetails.getQuantity());
             stockList.add(stock);
+
+            //创建出入库明细
+            StockJournalDetails stockJournalDetails = new StockJournalDetailsDto();
+            stockJournalDetails.setStockJournalId(stockJournal1.getId());
+            stockJournalDetails.setProductId(stock.getProductId());
+            stockJournalDetails.setQuantity(stock.getQuantity());
+            stockJournalDetails.setBusinessDetailsId(jdOrderDetails.getId());
+            stockJournalDetailsList1.add(stockJournalDetails);
+
         }
         stockTransferDetailsService.saveBatch(stockTransferDetailsList);
 
-        //创建出库记录
-        StockJournal stockJournal1 = new StockJournal();
-        stockJournal1.setOpType(2);
-        stockJournal1.setType(JournalType.ADJUSTING_OUT.getDetailType());
-        stockJournal1.setCode(stockTransfer.getCode());
-        stockJournal1.setWarehouseId(stockTransfer.getOutWarehouseId());
-        stockJournal1.setBusinessId(stockTransfer.getId());
-        //保存出库记录
-        stockJournalService.save(stockJournal1);
+
         if (ObjectUtil.isNotEmpty(stockList)) {
             //出库
-            List<StockJournalDetails> stockJournalDetailsList1 = stockService.ModifyInventory(stockJournal1.getId(), 2, stockList, stockTransfer.getOutWarehouseId());
+            stockService.ModifyInventory(2, stockList, stockTransfer.getOutWarehouseId());
             //保存出库记录明细
             stockJournalDetailsService.saveBatch(stockJournalDetailsList1);
         }
@@ -350,7 +362,7 @@ public class JdOrderServiceImpl extends ServiceImpl<JdOrderMapper, JdOrder> impl
 
         List<LogisticsDetails> logisticsDetailsList = new ArrayList<>();
         for (JdOrderDetails jdOrderDetails : jdOrderDetailsList) {
-            LogisticsDetails logisticsDetails =new LogisticsDetails();
+            LogisticsDetails logisticsDetails = new LogisticsDetails();
             logisticsDetails.setLogisticsInfoId(logisticsInfos.getId());
             logisticsDetails.setLogisticsInfoCode(logisticsInfos.getCode());
             logisticsDetails.setBusinessDetailsId(jdOrderDetails.getId());
@@ -391,15 +403,29 @@ public class JdOrderServiceImpl extends ServiceImpl<JdOrderMapper, JdOrder> impl
         stockTransfer.setInUserId(SecurityUtils.getUserId());//赋值接收人
         stockTransfer.setInTime(new Date());//赋值接收时间
 
+
+        //创建入库记录
+        StockJournal stockJournal = new StockJournal();
+        stockJournal.setOpType(1);
+        stockJournal.setType(JournalType.ADJUSTING_IN.getDetailType());
+        stockJournal.setCode(stockTransfer.getCode());
+        stockJournal.setWarehouseId(stockTransfer.getInWarehouseId());
+        stockJournal.setBusinessId(stockTransfer.getId());
+        //保存人库记录
+        stockJournalService.save(stockJournal);
+        List<StockJournalDetails> stockJournalDetailsList = new ArrayList<>();
+
         //明细
         List<Stock> stockList = new ArrayList<>();
         List<StockTransferDetails> stockTransferDetailsList = stockTransferDto.getStockTransferDetailsList();
+
         if (ObjectUtil.isNotEmpty(stockTransferDetailsList)) {
             //获取数据库中的数据
             List<Long> ids = stockTransferDetailsList.stream().map(StockTransferDetails::getId).collect(Collectors.toList());
             List<StockTransferDetails> oldstockTransferDetailsList = stockTransferDetailsService.listByIds(ids);
             Map<Long, StockTransferDetails> oldstockTransferDetailsMap = oldstockTransferDetailsList.stream().collect(Collectors.toMap(StockTransferDetails::getId, Function.identity()));
 
+
             Integer abnormalFlag = 0;
             for (StockTransferDetails stockTransferDetails : stockTransferDetailsList) {
                 Stock stock = new Stock();
@@ -407,6 +433,14 @@ public class JdOrderServiceImpl extends ServiceImpl<JdOrderMapper, JdOrder> impl
                 stock.setQuantity(stockTransferDetails.getInQuantity());
                 stockList.add(stock);
 
+                //创建出入库明细
+                StockJournalDetails stockJournalDetails = new StockJournalDetailsDto();
+                stockJournalDetails.setStockJournalId(stockJournal.getId());
+                stockJournalDetails.setProductId(stock.getProductId());
+                stockJournalDetails.setQuantity(stock.getQuantity());
+                stockJournalDetails.setBusinessDetailsId(stockTransferDetails.getId());
+                stockJournalDetailsList.add(stockJournalDetails);
+
                 //调仓接收数量与发出数量不一致
                 StockTransferDetails oldstockTransferDetails = oldstockTransferDetailsMap.get(stockTransferDetails.getId());
                 //计算接收总数 接收数+已经接收数
@@ -438,18 +472,10 @@ public class JdOrderServiceImpl extends ServiceImpl<JdOrderMapper, JdOrder> impl
 
         stockTransferService.updateById(stockTransfer);
         stockTransferDetailsService.updateBatchById(stockTransferDetailsList);
-        //创建入库记录
-        StockJournal stockJournal = new StockJournal();
-        stockJournal.setOpType(1);
-        stockJournal.setType(JournalType.ADJUSTING_IN.getDetailType());
-        stockJournal.setCode(stockTransfer.getCode());
-        stockJournal.setWarehouseId(stockTransfer.getInWarehouseId());
-        stockJournal.setBusinessId(stockTransfer.getId());
-        //保存人库记录
-        stockJournalService.save(stockJournal);
+
         if (ObjectUtil.isNotEmpty(stockList)) {
             //入库
-            List<StockJournalDetails> stockJournalDetailsList = stockService.ModifyInventory(stockJournal.getId(), 1, stockList, stockTransfer.getInWarehouseId());
+            stockService.ModifyInventory(1, stockList, stockTransfer.getInWarehouseId());
             //保存入库记录明细
             stockJournalDetailsService.saveBatch(stockJournalDetailsList);
         }

+ 26 - 59
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/service/purchase/impl/PurchaseBackServiceImpl.java

@@ -24,6 +24,7 @@ import com.fjhx.victoriatourist.service.logistics.LogisticsDetailsService;
 import com.fjhx.victoriatourist.service.logistics.LogisticsInfosService;
 import com.fjhx.victoriatourist.service.purchase.PurchaseBackDetailsService;
 import com.fjhx.victoriatourist.service.purchase.PurchaseBackService;
+import com.fjhx.wms.entity.stock.dto.StockJournalDetailsDto;
 import com.fjhx.wms.entity.stock.dto.StockWaitDetailsDto;
 import com.fjhx.wms.entity.stock.dto.StockWaitDto;
 import com.fjhx.wms.entity.stock.emums.JournalType;
@@ -131,51 +132,6 @@ public class PurchaseBackServiceImpl extends ServiceImpl<PurchaseBackMapper, Pur
     @Override
     @DSTransactional
     public void backOut(StockWaitDetailsDto stockWaitDetailsDto) {
-//        //修改待出入库状态
-//        stockWaitDetailsService.changeStockWaitStatus(stockWaitDetailsDto);
-//        StockWaitDetails stockWaitDetails = stockWaitDetailsService.getById(stockWaitDetailsDto.getId());
-//        StockWait byId = stockWaitService.getById(stockWaitDetails.getStockWaitId());
-//        //创建出入库记录
-//        StockJournal stockJournal = new StockJournal();
-//        stockJournal.setOpType(byId.getType());
-//        //退货出库
-//        stockJournal.setType(JournalType.BACK_OUT.getDetailType());
-//
-//        DynamicDataSourceContextHolder.push(SourceConstant.WMS);
-//        stockJournal.setCode(CodeEnum.SOUT_CODE.getCode());
-//        DynamicDataSourceContextHolder.poll();
-//
-//        stockJournal.setWarehouseId(stockWaitDetailsDto.getWarehouseId());
-//        stockJournal.setBusinessId(byId.getId());
-//        //保存出入库记录
-//        stockJournalService.save(stockJournal);
-//        //操作库存
-//        Stock stock = new Stock();
-//        stock.setQuantity(stockWaitDetailsDto.getQuantity());
-//        stock.setProductId(stockWaitDetails.getProductId());
-//        //退货出库出次品库存
-//        List<StockJournalDetails> stockJournalDetailsList = stockService.ModifyInventory(stockJournal.getId(), 4, Arrays.asList(stock), stockWaitDetailsDto.getWarehouseId());
-//        //保存出入库明细
-//        stockJournalDetailsService.saveBatch(stockJournalDetailsList);
-//
-//        //创建物流数据
-//        LogisticsInfos logisticsInfos = new LogisticsInfos();
-//        logisticsInfos.setBusinessId(byId.getId());
-//        logisticsInfos.setBusinessCode(byId.getBusinessCode());
-//        logisticsInfos.setBusinessType(5);//采购退货
-//        logisticsInfos.setLogisticsCompanyCode(stockWaitDetailsDto.getLogisticsCompanyCode());
-//        logisticsInfos.setCode(stockWaitDetailsDto.getLogisticsCode());
-//        logisticsInfos.setWarehouseId(stockWaitDetailsDto.getWarehouseId());
-//        logisticsInfos.setIsKd100(0);
-//        logisticsInfosService.save(logisticsInfos);
-//
-//        LogisticsDetails logisticsDetails = new LogisticsDetails();
-//        logisticsDetails.setLogisticsInfoId(logisticsInfos.getId());
-//        logisticsDetails.setLogisticsInfoCode(logisticsInfos.getCode());
-//        logisticsDetails.setBusinessDetailsId(stockWaitDetailsDto.getId());
-//        logisticsDetails.setReceiptQuantity(stockWaitDetailsDto.getQuantity());
-//        logisticsDetailsService.save(logisticsDetails);
-
         //优化
         StockWaitDetails stockWaitDetails = stockWaitDetailsService.getById(stockWaitDetailsDto.getId());
         Assert.notEmpty(stockWaitDetails, "查询不到待出库明细信息");
@@ -213,6 +169,22 @@ public class PurchaseBackServiceImpl extends ServiceImpl<PurchaseBackMapper, Pur
 
         stockWaitDetailsService.changeStockWaitStatus(stockWaitDto);
 
+        //创建出入库记录
+        StockJournal stockJournal = new StockJournal();
+        stockJournal.setOpType(byId.getType());
+        //退货出库
+        stockJournal.setType(JournalType.BACK_OUT.getDetailType());
+
+        DynamicDataSourceContextHolder.push(SourceConstant.WMS);
+        stockJournal.setCode(CodeEnum.SOUT_CODE.getCode());
+        DynamicDataSourceContextHolder.poll();
+
+        stockJournal.setWarehouseId(stockWaitDto.getWarehouseId());
+        stockJournal.setBusinessId(byId.getId());
+        //保存出入库记录
+        stockJournalService.save(stockJournal);
+
+        List<StockJournalDetails> stockJournalDetailsList = new ArrayList<>();
 
         for (StockWaitDetails stockWaitDetails0 : stockWaitDetailsList) {
             //修改待出入库状态
@@ -226,6 +198,14 @@ public class PurchaseBackServiceImpl extends ServiceImpl<PurchaseBackMapper, Pur
             stock.setProductId(stockWaitDetails.getProductId());
             stockList.add(stock);
 
+            //创建出入库明细
+            StockJournalDetails stockJournalDetails = new StockJournalDetailsDto();
+            stockJournalDetails.setStockJournalId(stockJournal.getId());
+            stockJournalDetails.setProductId(stock.getProductId());
+            stockJournalDetails.setQuantity(stock.getQuantity());
+            stockJournalDetails.setBusinessDetailsId(stockWaitDetails0.getId());
+            stockJournalDetailsList.add(stockJournalDetails);
+
 
             LogisticsDetails logisticsDetails = new LogisticsDetails();
             logisticsDetails.setLogisticsInfoId(logisticsInfos.getId());
@@ -235,23 +215,10 @@ public class PurchaseBackServiceImpl extends ServiceImpl<PurchaseBackMapper, Pur
             logisticsDetailsService.save(logisticsDetails);
         }
 
-        //创建出入库记录
-        StockJournal stockJournal = new StockJournal();
-        stockJournal.setOpType(byId.getType());
-        //退货出库
-        stockJournal.setType(JournalType.BACK_OUT.getDetailType());
 
-        DynamicDataSourceContextHolder.push(SourceConstant.WMS);
-        stockJournal.setCode(CodeEnum.SOUT_CODE.getCode());
-        DynamicDataSourceContextHolder.poll();
-
-        stockJournal.setWarehouseId(stockWaitDto.getWarehouseId());
-        stockJournal.setBusinessId(byId.getId());
-        //保存出入库记录
-        stockJournalService.save(stockJournal);
 
         //退货出库出次品库存
-        List<StockJournalDetails> stockJournalDetailsList = stockService.ModifyInventory(stockJournal.getId(), 4, stockList, stockWaitDto.getWarehouseId());
+        stockService.ModifyInventory(4, stockList, stockWaitDto.getWarehouseId());
         //保存出入库明细
         stockJournalDetailsService.saveBatch(stockJournalDetailsList);
     }

+ 1 - 0
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/service/quality/impl/QualityInfoServiceImpl.java

@@ -266,6 +266,7 @@ public class QualityInfoServiceImpl extends ServiceImpl<QualityInfoMapper, Quali
             stockJournalDetails.setStockJournalId(stockJournal.getId());
             stockJournalDetails.setProductId(qualityDetails.getProductInfoId());
             stockJournalDetails.setQuantity(qualityDetails.getQualifiedQuantity().add(qualityDetails.getDisqualificationQuantity()));
+            stockJournalDetails.setBusinessDetailsId(qualityDetails.getId());
             stockJournalDetailsList.add(stockJournalDetails);
         }
         stockService.saveOrUpdateBatch(stockList);

+ 60 - 24
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/service/stock/impl/StockTransferServiceImpl.java

@@ -6,6 +6,7 @@ import com.baomidou.dynamic.datasource.annotation.DSTransactional;
 import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fjhx.common.utils.Assert;
 import com.fjhx.item.service.product.ProductInfoService;
 import com.fjhx.victoriatourist.entity.abnormal.po.AbnormalInfo;
 import com.fjhx.victoriatourist.entity.stock.dto.StockTransferDto;
@@ -18,8 +19,8 @@ import com.fjhx.victoriatourist.mapper.stock.StockTransferMapper;
 import com.fjhx.victoriatourist.service.abnormal.AbnormalInfoService;
 import com.fjhx.victoriatourist.service.stock.StockTransferDetailsService;
 import com.fjhx.victoriatourist.service.stock.StockTransferService;
-import com.fjhx.common.utils.Assert;
 import com.fjhx.victoriatourist.utils.CodeEnum;
+import com.fjhx.wms.entity.stock.dto.StockJournalDetailsDto;
 import com.fjhx.wms.entity.stock.emums.JournalType;
 import com.fjhx.wms.entity.stock.po.Stock;
 import com.fjhx.wms.entity.stock.po.StockJournal;
@@ -125,15 +126,6 @@ public class StockTransferServiceImpl extends ServiceImpl<StockTransferMapper, S
         this.save(stockTransferDto);
         List<StockTransferDetails> stockTransferDetailsList = stockTransferDto.getStockTransferDetailsList();
         List<Stock> stockList = new ArrayList<>();
-        for (StockTransferDetails stockTransferDetails : stockTransferDetailsList) {
-            Stock stock = new Stock();
-            stock.setProductId(stockTransferDetails.getProductId());
-            stock.setQuantity(stockTransferDetails.getOutQuantity());
-            stockList.add(stock);
-
-            stockTransferDetails.setStockTransferId(stockTransferDto.getId());
-        }
-        stockTransferDetailsService.saveBatch(stockTransferDetailsList);
 
         //创建出库记录
         StockJournal stockJournal1 = new StockJournal();
@@ -144,9 +136,30 @@ public class StockTransferServiceImpl extends ServiceImpl<StockTransferMapper, S
         stockJournal1.setBusinessId(stockTransferDto.getId());
         //保存出库记录
         stockJournalService.save(stockJournal1);
+
+        List<StockJournalDetails> stockJournalDetailsList1 = new ArrayList<>();
+        for (StockTransferDetails stockTransferDetails : stockTransferDetailsList) {
+            Stock stock = new Stock();
+            stock.setProductId(stockTransferDetails.getProductId());
+            stock.setQuantity(stockTransferDetails.getOutQuantity());
+            stockList.add(stock);
+
+            //创建出入库明细
+            StockJournalDetails stockJournalDetails = new StockJournalDetailsDto();
+            stockJournalDetails.setStockJournalId(stockJournal1.getId());
+            stockJournalDetails.setProductId(stock.getProductId());
+            stockJournalDetails.setQuantity(stock.getQuantity());
+            stockJournalDetails.setBusinessDetailsId(stockTransferDetails.getId());
+            stockJournalDetailsList1.add(stockJournalDetails);
+
+            stockTransferDetails.setStockTransferId(stockTransferDto.getId());
+        }
+        stockTransferDetailsService.saveBatch(stockTransferDetailsList);
+
+
         if (ObjectUtil.isNotEmpty(stockList)) {
             //出库
-            List<StockJournalDetails> stockJournalDetailsList1 = stockService.ModifyInventory(stockJournal1.getId(), 2, stockList, stockTransferDto.getOutWarehouseId());
+            stockService.ModifyInventory(2, stockList, stockTransferDto.getOutWarehouseId());
             //保存出库记录明细
             stockJournalDetailsService.saveBatch(stockJournalDetailsList1);
         }
@@ -170,6 +183,8 @@ public class StockTransferServiceImpl extends ServiceImpl<StockTransferMapper, S
         stockTransfer.setInUserId(SecurityUtils.getUserId());//赋值接收人
         stockTransfer.setInTime(new Date());//赋值接收时间
 
+        List<StockJournalDetails> stockJournalDetailsList = new ArrayList<>();
+
         //明细
         List<Stock> stockList = new ArrayList<>();
         List<StockTransferDetails> stockTransferDetailsList = stockTransferDto.getStockTransferDetailsList();
@@ -179,6 +194,16 @@ public class StockTransferServiceImpl extends ServiceImpl<StockTransferMapper, S
             List<StockTransferDetails> oldstockTransferDetailsList = stockTransferDetailsService.listByIds(ids);
             Map<Long, StockTransferDetails> oldstockTransferDetailsMap = oldstockTransferDetailsList.stream().collect(Collectors.toMap(StockTransferDetails::getId, Function.identity()));
 
+            //创建入库记录
+            StockJournal stockJournal = new StockJournal();
+            stockJournal.setOpType(1);
+            stockJournal.setType(JournalType.ADJUSTING_IN.getDetailType());
+            stockJournal.setCode(stockTransfer.getCode());
+            stockJournal.setWarehouseId(stockTransfer.getInWarehouseId());
+            stockJournal.setBusinessId(stockTransfer.getId());
+            //保存人库记录
+            stockJournalService.save(stockJournal);
+
             Integer abnormalFlag = 0;
             for (StockTransferDetails stockTransferDetails : stockTransferDetailsList) {
                 Stock stock = new Stock();
@@ -186,12 +211,21 @@ public class StockTransferServiceImpl extends ServiceImpl<StockTransferMapper, S
                 stock.setQuantity(stockTransferDetails.getInQuantity());
                 stockList.add(stock);
 
+                //创建出入库明细
+                StockJournalDetails stockJournalDetails = new StockJournalDetailsDto();
+                stockJournalDetails.setStockJournalId(stockJournal.getId());
+                stockJournalDetails.setProductId(stock.getProductId());
+                stockJournalDetails.setQuantity(stock.getQuantity());
+                stockJournalDetails.setBusinessDetailsId(stockTransferDetails.getId());
+                stockJournalDetailsList.add(stockJournalDetails);
+
                 //调仓接收数量与发出数量不一致
                 StockTransferDetails oldstockTransferDetails = oldstockTransferDetailsMap.get(stockTransferDetails.getId());
                 if (stockTransferDetails.getInQuantity().compareTo(oldstockTransferDetails.getOutQuantity()) != 0) {
                     abnormalFlag = 1;
                 }
 
+
                 //计算已入库数量
                 BigDecimal inCount = oldstockTransferDetails.getInQuantity().add(stockTransferDetails.getInQuantity());
                 if (inCount.compareTo(oldstockTransferDetails.getOutQuantity()) != 0) {
@@ -214,19 +248,11 @@ public class StockTransferServiceImpl extends ServiceImpl<StockTransferMapper, S
             stockTransferDetailsService.updateBatchById(stockTransferDetailsList);
         }
         updateById(stockTransfer);
-        //创建入库记录
-        StockJournal stockJournal = new StockJournal();
-        stockJournal.setOpType(1);
-        stockJournal.setType(JournalType.ADJUSTING_IN.getDetailType());
-        stockJournal.setCode(stockTransfer.getCode());
-        stockJournal.setWarehouseId(stockTransfer.getInWarehouseId());
-        stockJournal.setBusinessId(stockTransfer.getId());
-        //保存人库记录
-        stockJournalService.save(stockJournal);
+
 
         if (ObjectUtil.isNotEmpty(stockList)) {
             //入库
-            List<StockJournalDetails> stockJournalDetailsList = stockService.ModifyInventory(stockJournal.getId(), 1, stockList, stockTransfer.getInWarehouseId());
+            stockService.ModifyInventory(1, stockList, stockTransfer.getInWarehouseId());
             //保存入库记录明细
             stockJournalDetailsService.saveBatch(stockJournalDetailsList);
         }
@@ -268,8 +294,18 @@ public class StockTransferServiceImpl extends ServiceImpl<StockTransferMapper, S
         //        stockJournal.setToWarehouseId(stockDto.getToWarehouseId());
         //保存出入库记录
         stockJournalService.save(stockJournal);
+        List<StockJournalDetails> stockJournalDetailsList = new ArrayList<>();
+        for (StockTransferDetails stockTransferDetails : stockTransferDetailsList) {
+            //创建出入库明细
+            StockJournalDetails stockJournalDetails = new StockJournalDetailsDto();
+            stockJournalDetails.setStockJournalId(stockJournal.getId());
+            stockJournalDetails.setProductId(stockTransferDetails.getProductId());
+            stockJournalDetails.setQuantity(stockTransferDetails.getOutQuantity());
+            stockJournalDetails.setBusinessDetailsId(stockTransferDetails.getId());
+            stockJournalDetailsList.add(stockJournalDetails);
+        }
         //操作库存
-        List<StockJournalDetails> stockJournalDetailsList = stockService.ModifyInventory(stockJournal.getId(), 2, stockList, stockTransferDto.getOutWarehouseId());
+        stockService.ModifyInventory(2, stockList, stockTransferDto.getOutWarehouseId());
         //保存出入库明细
         stockJournalDetailsService.saveBatch(stockJournalDetailsList);
 
@@ -285,9 +321,9 @@ public class StockTransferServiceImpl extends ServiceImpl<StockTransferMapper, S
         stockJournalService.save(stockJournal1);
 
         //入库操作
-        List<StockJournalDetails> stockJournalDetailsList1 = stockService.ModifyInventory(stockJournal1.getId(), 1, stockList, stockTransferDto.getInWarehouseId());
+        stockService.ModifyInventory(1, stockList, stockTransferDto.getInWarehouseId());
         //保存出入库明细
-        stockJournalDetailsService.saveBatch(stockJournalDetailsList1);
+        stockJournalDetailsService.saveBatch(stockJournalDetailsList);
     }
 
 }

+ 4 - 0
hx-wms/pom.xml

@@ -25,6 +25,10 @@
             <groupId>com.fjhx</groupId>
             <artifactId>hx-item</artifactId>
         </dependency>
+        <dependency>
+            <groupId>com.fjhx</groupId>
+            <artifactId>hx-supply</artifactId>
+        </dependency>
     </dependencies>
 
 

+ 58 - 0
hx-wms/src/main/java/com/fjhx/wms/entity/arrival/po/ArrivalDetailPo.java

@@ -0,0 +1,58 @@
+package com.fjhx.wms.entity.arrival.po;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ruoyi.common.core.domain.BasePo;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+
+/**
+ * <p>
+ * 到货明细单
+ * </p>
+ *
+ * @author
+ * @since 2023-04-07
+ */
+@Getter
+@Setter
+@TableName("arrival_detail")
+public class ArrivalDetailPo extends BasePo {
+
+    /**
+     * 关联ID  产品ID/货品ID
+     */
+    private Long bussinessId;
+
+    /**
+     * 到货主表ID
+     */
+    private Long arrivalId;
+
+    /**
+     * 采购明细ID
+     */
+    private Long purchaseDetailId;
+
+    /**
+     * 到货数量
+     */
+    private BigDecimal count;
+
+    /**
+     * 质检状态 0未质检 10部分质检 20全部质检
+     */
+    private Integer status;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    /**
+     * 发货明细id
+     */
+    private Long deliverGoodsDetailsId;
+
+}

+ 326 - 0
hx-wms/src/main/java/com/fjhx/wms/entity/contract/po/ContractPo.java

@@ -0,0 +1,326 @@
+package com.fjhx.wms.entity.contract.po;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.Version;
+import com.fjhx.file.entity.ObsFile;
+import com.ruoyi.common.core.domain.BasePo;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * <p>
+ * 外销合同表
+ * </p>
+ *
+ * @author
+ * @since 2023-04-17
+ */
+@Getter
+@Setter
+@TableName("contract")
+public class ContractPo extends BasePo {
+
+    /**
+     * 合同类型(1外销 2内销)
+     */
+    private Integer contractType;
+
+    /**
+     * 编码
+     */
+    private String code;
+
+    /**
+     * 合同模版ID
+     */
+    private Long contractTemplateId;
+
+    /**
+     * 卖方公司ID
+     *
+     * <p>
+     * {@link com.fjhx.common.entity.contract.po.ContractTemplate}
+     */
+    private Long sellCorporationId;
+
+    /**
+     * 卖方联系人名称
+     */
+    private String sellContactName;
+
+    /**
+     * 卖方联系人电话
+     */
+    private String sellContactNumber;
+
+    /**
+     * 合同审批状态 0草稿 10、审批中;20、驳回  30、审批通过   99终止
+     */
+    private Integer status;
+
+    /**
+     * 到款状态 0未到款  10部分到款  20已到款
+     */
+    private Integer refundStatus;
+
+    /**
+     * 合同状态
+     */
+    private Integer contractStatus;
+
+    /**
+     * 卖方国家表id
+     */
+    private Long sellCountryId;
+
+    /**
+     * 卖方省份id
+     */
+    private Long sellProvinceId;
+
+    /**
+     * 卖方城市id
+     */
+    private Long sellCityId;
+
+    /**
+     * 卖方国家表名称
+     */
+    private String sellCountryName;
+
+    /**
+     * 卖方省份名称
+     */
+    private String sellProvinceName;
+
+    /**
+     * 卖方城市名称
+     */
+    private String sellCityName;
+
+    /**
+     * 卖方详细地址
+     */
+    private String sellAddress;
+
+    /**
+     * 卖方邮编
+     */
+    private String sellPostalCode;
+
+
+    /**
+     * 买方公司ID
+     *
+     * <p>
+     * {@link com.fjhx.customer.entity.customer.po.Customer}
+     */
+    private Long buyCorporationId;
+
+    /**
+     * 买方联系人名称
+     */
+    private String buyContactName;
+
+    /**
+     * 买方联系人电话
+     */
+    private String buyContactNumber;
+
+    /**
+     * 买方国家表id
+     */
+    private Long buyCountryId;
+
+    /**
+     * 买方省份id
+     */
+    private Long buyProvinceId;
+
+    /**
+     * 买方城市id
+     */
+    private Long buyCityId;
+
+    /**
+     * 买方详细地址
+     */
+    private String buyAddress;
+
+    /**
+     * 买方邮编
+     */
+    private String buyPostalCode;
+
+    /**
+     * 币种(字典account_currency)
+     */
+    private String currency;
+
+    /**
+     * 合同金额
+     */
+    private BigDecimal amount;
+
+    /**
+     * 付款方式(字典funds_payment_method
+     */
+    private String paymentMethod;
+
+    /**
+     * 贸易方式(字典trade_methods)
+     */
+    private String tradeMethods;
+
+    /**
+     * 预付比例
+     */
+    private String advanceRatio;
+
+    /**
+     * 运输方式(字典  shipping_method)
+     */
+    private String transportMethod;
+
+    /**
+     * 运输备注
+     */
+    private String transportRemark;
+
+    /**
+     * 收款账号ID
+     *
+     * <p>
+     */
+    private Long shroffAccountId;
+
+    /**
+     * 审批通过时间
+     */
+    private Date approvedDate;
+
+    /**
+     * 质保期
+     */
+    private Integer warranty;
+
+    /**
+     * 付款条件
+     */
+    private String remark;
+
+    /**
+     * 创建人名称
+     */
+    private String userName;
+
+    /**
+     * 结算状态 0未结算 1已结算
+     */
+    private Integer settlementStatus;
+
+    /**
+     * 交期
+     */
+    private String deliveryTime;
+
+    /**
+     * 汇率json
+     * List<ContractCurrencyRate> 转 json
+     */
+    private String currencyRateJson;
+
+    /**
+     * 尔弘时代JSON扩展字段
+     */
+    private String ehsdJson;
+
+    /**
+     * beneficiaryName
+     */
+    private String beneficiaryName;
+
+    /**
+     * beneficiaryBank
+     */
+    private String beneficiaryBank;
+
+    /**
+     * beneficiaryBankAddress
+     */
+    private String beneficiaryBankAddress;
+
+    /**
+     * beneficiaryAddress
+     */
+    private String beneficiaryAddress;
+
+    /**
+     * beneficiaryName
+     */
+    private String swiftCode;
+
+    /**
+     * beneficiaryAccountNumber
+     */
+    private String beneficiaryAccountNumber;
+
+    /**
+     * 利润预算表备注
+     */
+    private String budgetRemark;
+
+    /**
+     * 利润结算表代理费
+     */
+    private BigDecimal profitAgencyFee;
+
+    /**
+     * 利润结算表备注
+     */
+    private String profitClearingRemark;
+
+    /**
+     * 原合同id
+     */
+    private Long oldContractId;
+
+    /**
+     * 版本号
+     */
+    @TableField(fill = FieldFill.INSERT)
+    @Version
+    private Integer version;
+
+    /**
+     * 交接单附件列表
+     */
+    @TableField(exist = false)
+    private List<ObsFile> fileList;
+
+    /**
+     * 包装附件列表
+     */
+    @TableField(exist = false)
+    private List<ObsFile> packageFileList;
+
+
+    /**
+     * 合同数量
+     */
+    @TableField(exist = false)
+    private Integer count;
+
+    /**
+     * 归属公司名称
+     */
+    @TableField(exist = false)
+    private String sellCorporationName;
+
+}

+ 124 - 0
hx-wms/src/main/java/com/fjhx/wms/entity/purchase/po/PurchaseDetailPo.java

@@ -0,0 +1,124 @@
+package com.fjhx.wms.entity.purchase.po;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ruoyi.common.core.domain.BasePo;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+
+/**
+ * <p>
+ * 申购单
+ * </p>
+ *
+ * @author
+ * @since 2023-04-06
+ */
+@Getter
+@Setter
+@TableName("purchase_detail")
+public class PurchaseDetailPo extends BasePo {
+
+    /**
+     * 业务来源 0自建  1外销合同采购
+     */
+    private Integer dataResource;
+
+    /**
+     * 业务来源ID
+     */
+    private Long dataResourceId;
+
+    /**
+     * 关联ID  产品ID/货品ID
+     */
+    private Long bussinessId;
+
+    /**
+     * 申购明细ID
+     */
+    private Long subscribeDetailId;
+
+    /**
+     * 采购单ID
+     */
+    private Long purchaseId;
+
+    /**
+     * 采购数量
+     */
+    private BigDecimal count;
+
+    /**
+     * 单价
+     */
+    private BigDecimal price;
+
+    /**
+     * 总价
+     */
+    private BigDecimal amount;
+
+    /**
+     * 采购事由
+     */
+    private String content;
+
+    /**
+     * 状态 10、审批中 15:待采购 20、已采购  30、部分采购  40、已采购  99 作废
+     */
+    private Integer status;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    /**
+     * 货品类型
+     */
+    @TableField(exist = false)
+    private String productType;
+
+    /**
+     * 所属分类
+     */
+    @TableField(exist = false)
+    private String productCategory;
+
+    /**
+     * 货品编码
+     */
+    @TableField(exist = false)
+    private String productCode;
+
+    /**
+     * 货品名称
+     */
+    @TableField(exist = false)
+    private String productName;
+
+    /**
+     * 单位
+     */
+    @TableField(exist = false)
+    private String productUnit;
+
+    /**
+     * 货品规格型号
+     */
+    @TableField(exist = false)
+    private String productSpec;
+
+    /**
+     * 到货总量
+     */
+    @TableField(exist = false)
+    private BigDecimal sumArrivalCount;
+
+    @TableField(exist = false)
+    private String productCustomCode;
+
+}

Some files were not shown because too many files changed in this diff