Procházet zdrojové kódy

Merge branch 'master' into dev

caozj před 1 rokem
rodič
revize
faf7d04eef
42 změnil soubory, kde provedl 906 přidání a 243 odebrání
  1. 8 2
      hx-account/src/main/java/com/fjhx/account/entity/account/dto/AccountPaymentDto.java
  2. 5 0
      hx-account/src/main/java/com/fjhx/account/entity/account/vo/AccountRunningWaterVo.java
  3. 7 0
      hx-account/src/main/java/com/fjhx/account/mapper/account/AccountRequestFundsDetailMapper.java
  4. 7 0
      hx-account/src/main/java/com/fjhx/account/service/account/AccountRequestFundsDetailService.java
  5. 23 0
      hx-account/src/main/java/com/fjhx/account/service/account/impl/AccountPaymentServiceImpl.java
  6. 10 0
      hx-account/src/main/java/com/fjhx/account/service/account/impl/AccountRequestFundsDetailServiceImpl.java
  7. 9 0
      hx-account/src/main/java/com/fjhx/account/service/account/impl/AccountRunningWaterServiceImpl.java
  8. 19 0
      hx-account/src/main/resources/mapper/account/AccountRequestFundsDetailMapper.xml
  9. 4 2
      hx-account/src/main/resources/mapper/account/AccountRunningWaterMapper.xml
  10. 6 7
      hx-purchase/src/main/java/com/fjhx/purchase/controller/purchase/PurchaseController.java
  11. 6 0
      hx-purchase/src/main/java/com/fjhx/purchase/entity/pay/po/Pay.java
  12. 8 0
      hx-purchase/src/main/java/com/fjhx/purchase/mapper/pay/PayDetailMapper.java
  13. 8 0
      hx-purchase/src/main/java/com/fjhx/purchase/service/pay/PayDetailService.java
  14. 10 0
      hx-purchase/src/main/java/com/fjhx/purchase/service/pay/impl/PayDetailServiceImpl.java
  15. 22 0
      hx-purchase/src/main/resources/mapper/pay/PayDetailMapper.xml
  16. 2 2
      hx-sale/src/main/java/com/fjhx/sale/controller/contract/ContractController.java
  17. 9 1
      hx-sale/src/main/java/com/fjhx/sale/controller/intermediate/IntermediateContractController.java
  18. 9 0
      hx-sale/src/main/java/com/fjhx/sale/controller/statement/SaleStatementController.java
  19. 5 0
      hx-sale/src/main/java/com/fjhx/sale/entity/claim/po/Claim.java
  20. 0 1
      hx-sale/src/main/java/com/fjhx/sale/entity/claim/po/ClaimContract.java
  21. 5 0
      hx-sale/src/main/java/com/fjhx/sale/entity/commission/po/Commission.java
  22. 11 0
      hx-sale/src/main/java/com/fjhx/sale/entity/contract/po/Contract.java
  23. 10 0
      hx-sale/src/main/java/com/fjhx/sale/entity/contract/vo/ContractVo.java
  24. 5 0
      hx-sale/src/main/java/com/fjhx/sale/entity/intermediate/dto/IntermediateContractSelectDto.java
  25. 1 1
      hx-sale/src/main/java/com/fjhx/sale/entity/intermediate/po/IntermediateContract.java
  26. 79 0
      hx-sale/src/main/java/com/fjhx/sale/entity/intermediate/vo/IntermediateContractVo.java
  27. 5 0
      hx-sale/src/main/java/com/fjhx/sale/flow/ContractFlow.java
  28. 67 46
      hx-sale/src/main/java/com/fjhx/sale/flow/ContractUpdateFlow.java
  29. 8 1
      hx-sale/src/main/java/com/fjhx/sale/mapper/contract/ContractMapper.java
  30. 7 1
      hx-sale/src/main/java/com/fjhx/sale/mapper/intermediate/IntermediateContractMapper.java
  31. 1 0
      hx-sale/src/main/java/com/fjhx/sale/service/claim/impl/ClaimServiceImpl.java
  32. 5 5
      hx-sale/src/main/java/com/fjhx/sale/service/commission/impl/CommissionServiceImpl.java
  33. 17 2
      hx-sale/src/main/java/com/fjhx/sale/service/contract/ContractService.java
  34. 1 1
      hx-sale/src/main/java/com/fjhx/sale/service/contract/impl/ContractProductServiceImpl.java
  35. 109 11
      hx-sale/src/main/java/com/fjhx/sale/service/contract/impl/ContractServiceImpl.java
  36. 8 9
      hx-sale/src/main/java/com/fjhx/sale/service/documents/impl/DocumentsPdfServiceImpl.java
  37. 8 1
      hx-sale/src/main/java/com/fjhx/sale/service/intermediate/IntermediateContractService.java
  38. 98 56
      hx-sale/src/main/java/com/fjhx/sale/service/intermediate/impl/IntermediateContractServiceImpl.java
  39. 11 0
      hx-sale/src/main/java/com/fjhx/sale/service/statement/SaleStatementService.java
  40. 188 74
      hx-sale/src/main/java/com/fjhx/sale/service/statement/impl/SaleStatementServiceImpl.java
  41. 30 0
      hx-sale/src/main/resources/mapper/contract/ContractMapper.xml
  42. 55 20
      hx-sale/src/main/resources/mapper/intermediate/IntermediateContractMapper.xml

+ 8 - 2
hx-account/src/main/java/com/fjhx/account/entity/account/dto/AccountPaymentDto.java

@@ -38,8 +38,14 @@ public class AccountPaymentDto extends AccountPayment {
      */
     private String accountOpening;
 
+    /**
+     * 是否往来 1是 0不是
+     */
+    private Integer isTransaction;
 
-
-
+    /**
+     * 往来单位id
+     */
+    private Long transactionDeptId;
 
 }

+ 5 - 0
hx-account/src/main/java/com/fjhx/account/entity/account/vo/AccountRunningWaterVo.java

@@ -102,4 +102,9 @@ public class AccountRunningWaterVo extends AccountRunningWater {
      * 销售合同id集合
      */
     private String contractIds;
+
+    /**
+     * 往来部门名称
+     */
+    private String transactionDeptName;
 }

+ 7 - 0
hx-account/src/main/java/com/fjhx/account/mapper/account/AccountRequestFundsDetailMapper.java

@@ -34,6 +34,13 @@ public interface AccountRequestFundsDetailMapper extends BaseMapper<AccountReque
     List<AccountRequestFundsDetailVo> getListByContractId(Long contractId);
 
     /**
+     * 获取列表根据合同ID
+     * @param contractIds
+     * @return
+     */
+    List<AccountRequestFundsDetailVo> getListByContractIds(@Param("contractIds") List<Long> contractIds);
+
+    /**
      * 根据请款id获取请款明细列表
      */
     List<AccountRequestFundsDetailVo> listByAccountRequestFundsId(@Param("accountRequestFundsId") Long accountRequestFundsId);

+ 7 - 0
hx-account/src/main/java/com/fjhx/account/service/account/AccountRequestFundsDetailService.java

@@ -54,6 +54,13 @@ public interface AccountRequestFundsDetailService extends BaseService<AccountReq
     List<AccountRequestFundsDetailVo> getListByContractId(Long contractId);
 
     /**
+     * 根据合同IDS获取列表
+     * @param contractId
+     * @return
+     */
+    List<AccountRequestFundsDetailVo> getListByContractIds(List<Long> contractId);
+
+    /**
      * 根据请款id获取请款明细列表
      */
     List<AccountRequestFundsDetailVo> listByAccountRequestFundsId(Long accountRequestFundsId);

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

@@ -16,11 +16,13 @@ import com.fjhx.account.entity.account.po.AccountPayment;
 import com.fjhx.account.entity.account.po.AccountRemainder;
 import com.fjhx.account.entity.account.po.AccountRunningWater;
 import com.fjhx.account.entity.account.vo.AccountPaymentVo;
+import com.fjhx.account.entity.transaction.po.Transaction;
 import com.fjhx.account.mapper.account.AccountPaymentMapper;
 import com.fjhx.account.service.account.AccountManagementService;
 import com.fjhx.account.service.account.AccountPaymentService;
 import com.fjhx.account.service.account.AccountRemainderService;
 import com.fjhx.account.service.account.AccountRunningWaterService;
+import com.fjhx.account.service.transaction.TransactionService;
 import com.fjhx.common.constant.SourceConstant;
 import com.fjhx.common.service.corporation.CorporationService;
 import com.fjhx.file.utils.ObsFileUtil;
@@ -62,6 +64,9 @@ public class AccountPaymentServiceImpl extends ServiceImpl<AccountPaymentMapper,
     @Autowired
     private AccountManagementService accountManagementService;
 
+    @Autowired
+    private TransactionService transactionService;
+
     @Override
     public Page<AccountPaymentVo> getPage(AccountRequestFundsSelectDto dto) {
 
@@ -224,8 +229,26 @@ public class AccountPaymentServiceImpl extends ServiceImpl<AccountPaymentMapper,
         accountRunningWater.setBusinessId(accountPaymentDto.getId());
         //添加流水类型
         accountRunningWater.setType("10");
+        //赋值是否往来
+        accountRunningWater.setIsTransaction(accountPaymentDto.getIsTransaction());
+        accountRunningWater.setTransactionDeptId(accountPaymentDto.getTransactionDeptId());
         accountRunningWaterService.save(accountRunningWater);
 
+        //如果是往来
+        if (ObjectUtil.isNotEmpty(accountRunningWater.getIsTransaction()) && 1 == accountRunningWater.getIsTransaction()) {
+            //创建往来数据
+            Transaction transaction = new Transaction();
+            transaction.setDepartmentId(accountRunningWater.getTransactionDeptId());
+            transaction.setType("10".equals(accountRunningWater.getStatus()) ? 0 : 1);
+            transaction.setCurrency(accountRunningWater.getCurrency());
+            transaction.setAmount(accountRunningWater.getAmount());
+            transaction.setIsFlowingWater(1);
+            transaction.setAccountId(accountRunningWater.getAccountManagementId());
+            transaction.setRemark(accountRunningWater.getRemarks());
+            transaction.setAccountRunningWaterId(accountRunningWater.getId());
+            transactionService.save(transaction);
+        }
+
     }
 
 

+ 10 - 0
hx-account/src/main/java/com/fjhx/account/service/account/impl/AccountRequestFundsDetailServiceImpl.java

@@ -68,6 +68,16 @@ public class AccountRequestFundsDetailServiceImpl extends ServiceImpl<AccountReq
     }
 
     /**
+     * 获取列表根据合同ID集合
+     * @param contractIds
+     * @return
+     */
+    @Override
+    public List<AccountRequestFundsDetailVo> getListByContractIds(List<Long> contractIds) {
+        return baseMapper.getListByContractIds(contractIds);
+    }
+
+    /**
      * 获取到请款明细信息
      * @param eq
      * @return

+ 9 - 0
hx-account/src/main/java/com/fjhx/account/service/account/impl/AccountRunningWaterServiceImpl.java

@@ -18,11 +18,13 @@ import com.fjhx.account.entity.account.po.AccountRunningWater;
 import com.fjhx.account.entity.account.vo.AccountRunningWaterVo;
 import com.fjhx.account.entity.tax.po.TaxRefundDetails;
 import com.fjhx.account.entity.transaction.po.Transaction;
+import com.fjhx.account.entity.transaction.po.TransactionDepartment;
 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.account.service.tax.TaxRefundDetailsService;
+import com.fjhx.account.service.transaction.TransactionDepartmentService;
 import com.fjhx.account.service.transaction.TransactionService;
 import com.fjhx.common.constant.SourceConstant;
 import com.fjhx.common.entity.corporation.po.Corporation;
@@ -75,6 +77,8 @@ public class AccountRunningWaterServiceImpl extends ServiceImpl<AccountRunningWa
     private TaxRefundDetailsService taxRefundDetailsService;
     @Autowired
     private TransactionService transactionService;
+    @Autowired
+    private TransactionDepartmentService transactionDepartmentService;
 
     @Override
     public Page<AccountRunningWaterVo> getPage(AccountRunningWaterSelectDto dto) {
@@ -183,6 +187,11 @@ public class AccountRunningWaterServiceImpl extends ServiceImpl<AccountRunningWa
         if (ObjectUtil.isNotEmpty(corporation)) {
             result.setCorporationName(corporation.getName());
         }
+        //赋值往来单位名称
+        TransactionDepartment transactionDepartment = transactionDepartmentService.getById(result.getTransactionDeptId());
+        if (ObjectUtil.isNotEmpty(transactionDepartment)) {
+            result.setTransactionDeptName(transactionDepartment.getName());
+        }
         return result;
     }
 

+ 19 - 0
hx-account/src/main/resources/mapper/account/AccountRequestFundsDetailMapper.xml

@@ -31,6 +31,25 @@
           AND t3.`status` = 10
     </select>
 
+    <select id="getListByContractIds" resultType="com.fjhx.account.entity.account.vo.AccountRequestFundsDetailVo">
+        SELECT
+            t2.rate,
+            t2.currency,
+            t1.*
+        FROM
+            account_request_funds_detail t1
+                LEFT JOIN account_request_funds t2 ON t1.account_request_funds_id = t2.id
+                LEFT JOIN account_payment t3 ON t2.id = t3.business_id
+        <where>
+            t3.`status` = 10
+            <if test="contractIds neq null and contractIds.size() > 0">
+                <foreach collection="contractIds" item="contractId" open="AND t1.contract_id IN (" separator="," close=")">
+                    #{contractId}
+                </foreach>
+            </if>
+        </where>
+    </select>
+
     <select id="listByAccountRequestFundsId" resultType="com.fjhx.account.entity.account.vo.AccountRequestFundsDetailVo">
         SELECT
             arfd.*,

+ 4 - 2
hx-account/src/main/resources/mapper/account/AccountRunningWaterMapper.xml

@@ -102,8 +102,10 @@
             arw.create_time,
             arw.update_user,
             arw.update_time,
-            am.name accountManagementName,
-            am.corporation_id
+            am.name                       accountManagementName,
+            am.corporation_id,
+            ifnull(arw.is_transaction, 0) isTransaction,
+            arw.transaction_dept_id
         from account_running_water arw
                  left join account_management am on arw.account_management_id = am.id
         where arw.id = #{id}

+ 6 - 7
hx-purchase/src/main/java/com/fjhx/purchase/controller/purchase/PurchaseController.java

@@ -1,17 +1,16 @@
 package com.fjhx.purchase.controller.purchase;
 
 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.purchase.dto.PurchasePayRecordDto;
+import com.fjhx.purchase.entity.purchase.dto.PurchaseDto;
+import com.fjhx.purchase.entity.purchase.dto.PurchaseSelectDto;
 import com.fjhx.purchase.entity.purchase.po.Purchase;
-import org.springframework.web.bind.annotation.*;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fjhx.purchase.entity.purchase.vo.PurchaseVo;
-import com.fjhx.purchase.entity.purchase.dto.PurchaseSelectDto;
-import com.fjhx.purchase.entity.purchase.dto.PurchaseDto;
-import com.ruoyi.common.core.domain.BaseSelectDto;
 import com.fjhx.purchase.service.purchase.PurchaseService;
+import com.ruoyi.common.core.domain.BaseSelectDto;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
 import java.util.Map;
@@ -91,7 +90,7 @@ public class PurchaseController {
     /**
      * 采购编辑
      */
-    @PostMapping("/edit")
+//    @PostMapping("/edit")
     public void edit(@RequestBody PurchaseDto purchaseDto) {
         purchaseService.edit(purchaseDto);
     }

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

@@ -156,4 +156,10 @@ public class Pay extends BasePo {
     @TableField(exist = false)
     private Integer count;
 
+    /**
+     * 合同ID
+     */
+    @TableField(exist = false)
+    private Long contractId;
+
 }

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

@@ -38,4 +38,12 @@ public interface PayDetailMapper extends BaseMapper<PayDetail> {
     List<PayDetail> getPayMoneyCountByPurchaseId(@Param("ew") QueryWrapper<Object> queryWrapper);
 
     List<Pay> getPayDetailList(@Param("purchaseIds") List<Long> purchaseIds);
+
+    /**
+     * 根据合同ID查询采购付款
+     * @param contractIds
+     * @return
+     */
+    List<Pay> getPayDetailListByContractIds(@Param("contractIds") List<Long> contractIds);
+
 }

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

@@ -59,4 +59,12 @@ public interface PayDetailService extends BaseService<PayDetail> {
     Map<Long, BigDecimal> getPayMoneyCountByPurchaseId(List<Long> purchaseIdList);
 
     List<Pay> getSumMoney(List<Long> purchaseIds);
+
+    /**
+     * 根据合同ID集合查询采购付款
+     * @param purchaseIds
+     * @return
+     */
+    List<Pay> getPayDetailListByContractIds(List<Long> purchaseIds);
+
 }

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

@@ -99,4 +99,14 @@ public class PayDetailServiceImpl extends ServiceImpl<PayDetailMapper, PayDetail
         return baseMapper.getPayDetailList(purchaseIds);
     }
 
+    /**
+     * getPayDetailListByContractIds
+     * @param contractIds
+     * @return
+     */
+    @Override
+    public List<Pay> getPayDetailListByContractIds(List<Long> contractIds) {
+        return baseMapper.getPayDetailListByContractIds(contractIds);
+    }
+
 }

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

@@ -60,4 +60,26 @@
         </where>
     </select>
 
+    <select id="getPayDetailListByContractIds" resultType="com.fjhx.purchase.entity.pay.po.Pay">
+        SELECT
+            t1.*,
+            IFNULL( t1.money, 0 ) AS amount,
+            IFNULL( t2.rate, 1 ) AS rate,
+            IFNULL( t2.currency, "CNY" ) AS currency,
+            t4.data_resource_id AS contractId
+        FROM
+            pay_detail t1
+        LEFT JOIN pay t2 ON t1.pay_id = t2.id
+        LEFT JOIN bytesailing_account.account_payment t3 ON t2.id = t3.business_id
+        LEFT JOIN purchase t4 ON t1.purchase_id = t4.id
+        <where>
+            t2.`type` != 3
+            AND t3 .`status` = 10
+            <if test="contractIds neq null and contractIds.size() > 0">
+                <foreach collection="contractIds" item="contractId" open="AND t4.data_resource_id IN (" separator="," close=")">
+                    #{contractId}
+                </foreach>
+            </if>
+        </where>
+    </select>
 </mapper>

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

@@ -72,7 +72,7 @@ public class ContractController {
     /**
      * 外销合同表编辑
      */
-    @PostMapping("/edit")
+//    @PostMapping("/edit")
     public void edit(@RequestBody ContractDto contractDto) {
         contractService.edit(contractDto);
     }
@@ -259,7 +259,7 @@ public class ContractController {
      * 头部统计客户金额
      */
     @PostMapping("/getHeadCustomerStatistics")
-    public Map<String,Object> getHeadCustomerStatistics(@RequestBody ContractSelectDto dto) {
+    public Map<String, Object> getHeadCustomerStatistics(@RequestBody ContractSelectDto dto) {
         return contractService.getHeadCustomerStatistics(dto);
     }
 

+ 9 - 1
hx-sale/src/main/java/com/fjhx/sale/controller/intermediate/IntermediateContractController.java

@@ -4,6 +4,7 @@ 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.fjhx.sale.service.intermediate.IntermediateContractService;
 import com.ruoyi.common.core.domain.BaseSelectDto;
@@ -46,6 +47,13 @@ public class IntermediateContractController {
     public IntermediateContractVo detail(@RequestBody BaseSelectDto dto) {
         return intermediateContractService.detail(dto.getId());
     }
+    /**
+     * 中间合同删除
+     */
+    @PostMapping("/del")
+    public void del(@RequestBody BaseSelectDto dto) {
+        intermediateContractService.del(dto.getId());
+    }
 
     /**
      * 中间合同编辑
@@ -67,7 +75,7 @@ public class IntermediateContractController {
      * 获取合中间同历史联系方式
      */
     @PostMapping("/getPrintInfo")
-    public ContractPdfInfoVo getPrintInfo(@RequestBody IntermediateContractDto dto) {
+    public IntermediateContract getPrintInfo(@RequestBody IntermediateContractDto dto) {
         return intermediateContractService.getPrintInfo(dto);
     }
 

+ 9 - 0
hx-sale/src/main/java/com/fjhx/sale/controller/statement/SaleStatementController.java

@@ -14,6 +14,8 @@ import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.Map;
+
 @RestController
 @RequestMapping("/saleStatement")
 public class SaleStatementController {
@@ -34,6 +36,13 @@ public class SaleStatementController {
     public Page<ProfitSettlementVo> getProfitSettlement(@RequestBody ProfitSettlementDto dto) {
         return saleStatementService.getProfitSettlement(dto);
     }
+    /**
+     * 利润结算表头部统计
+     */
+    @PostMapping("/getProfitSettlementHead")
+    public Map<String,Object> getProfitSettlementHead(@RequestBody ProfitSettlementDto dto) {
+        return saleStatementService.getProfitSettlementHead(dto);
+    }
 
     /**
      * 编辑

+ 5 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/claim/po/Claim.java

@@ -65,6 +65,11 @@ public class Claim extends BasePo {
     private Date claimTime;
 
     /**
+     * 汇率
+     */
+    private BigDecimal rate;
+
+    /**
      * 到账认领合同列表
      */
     @TableField(exist = false)

+ 0 - 1
hx-sale/src/main/java/com/fjhx/sale/entity/claim/po/ClaimContract.java

@@ -54,7 +54,6 @@ public class ClaimContract extends BasePo {
     /**
      * 汇率
      */
-    @TableField(exist = false)
     private BigDecimal rate;
 
     /**

+ 5 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/commission/po/Commission.java

@@ -140,4 +140,9 @@ public class Commission extends BasePo {
      * 采购合同币种
      */
     private String purchaseCurrency;
+
+    /**
+     * 退税金额
+     */
+    private BigDecimal taxReturnAmount;
 }

+ 11 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/contract/po/Contract.java

@@ -365,4 +365,15 @@ public class Contract extends BasePo {
      */
     @TableField(exist = false)
     private String sellCorporationName;
+
+    /**
+     * 流程id
+     */
+    private Long flowId;
+
+    /**
+     * 创建时间英文
+     */
+    @TableField(exist = false)
+    private String createTimeEn;
 }

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

@@ -93,6 +93,16 @@ public class ContractVo extends Contract {
     private Long contractCount;
 
     /**
+     * 合同总金额
+     */
+    private BigDecimal contractSumAmount;
+
+    /**
+     * 合同ID集合
+     */
+    private String contractIds;
+
+    /**
      * 总到账认领金额
      */
     private BigDecimal sumClaimMoney;

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

@@ -24,4 +24,9 @@ public class IntermediateContractSelectDto extends BaseSelectDto {
      */
     private Long buyCorporationId;
 
+    /**
+     * 是否创建
+     */
+    private Integer isSet;
+
 }

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

@@ -21,7 +21,7 @@ public class IntermediateContract extends BasePo {
     /**
      * 单证id
      */
-    private Long documentsId;
+    private String documentsIds;
 
     /**
      * 卖方公司ID

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

@@ -5,6 +5,7 @@ import lombok.Getter;
 import lombok.Setter;
 
 import java.math.BigDecimal;
+import java.util.Map;
 
 /**
  * 中间合同列表查询返回值实体
@@ -49,6 +50,50 @@ public class IntermediateContractVo extends IntermediateContract {
      * 中间合同卖方名称 多公司
      */
     private String sellCorporationName;
+
+    /**
+     * 卖方公司英文名称
+     */
+    private String sellCorporationNameEn;
+
+    /**
+     * 卖方公司国家
+     */
+    private String sellCountryName;
+
+    /**
+     * 卖方公司省
+     */
+    private String sellProvinceName;
+
+    /**
+     * 卖方公司市
+     */
+    private String sellCityName;
+
+    /**
+     * 卖方公司详细地址
+     */
+    private String sellDetailedAddress;
+
+    /**
+     * 卖方公司国家
+     */
+    private String sellCountryNameEn;
+
+    /**
+     * 卖方公司省
+     */
+    private String sellProvinceNameEn;
+
+    /**
+     * 卖方公司市
+     */
+    private String sellCityNameEn;
+    /**
+     * 卖方公司详细地址
+     */
+    private String sellDetailedAddressEn;
     /**
      * 中间合同买方名称 多公司
      */
@@ -56,4 +101,38 @@ public class IntermediateContractVo extends IntermediateContract {
 
     private String opUserName;
 
+    private String userName;
+
+    /**
+     * 买方公司国家
+     */
+    private String buyCountryName;
+
+    /**
+     * 买方公司省
+     */
+    private String buyProvinceName;
+
+    /**
+     * 买方公司市
+     */
+    private String buyCityName;
+
+    /**
+     * 卖方公司详细地址
+     */
+    private String buyDetailedAddress;
+
+    private Map<String,Object> contractMap;
+
+    /**
+     * 流程ID
+     */
+    private Long flowId;
+
+    /**
+     * 合同ID
+     */
+    private Long cId;
+
 }

+ 5 - 0
hx-sale/src/main/java/com/fjhx/sale/flow/ContractFlow.java

@@ -76,6 +76,11 @@ public class ContractFlow extends FlowDelegate {
     @Override
     public Long start(Long flowId, JSONObject submitData) {
         ContractDto contract = submitData.toJavaObject(ContractDto.class);
+
+        contract.setIssue("1");//默认直接下发到交接单
+
+        contract.setFlowId(flowId);
+
         if (StringUtils.isEmpty(contract.getCurrency())) {
             throw new ServiceException("币种不能为空");
         }

+ 67 - 46
hx-sale/src/main/java/com/fjhx/sale/flow/ContractUpdateFlow.java

@@ -91,6 +91,10 @@ public class ContractUpdateFlow extends FlowDelegate {
     public Long start(Long flowId, JSONObject submitData) {
         ContractDto contract = submitData.toJavaObject(ContractDto.class);
 
+        contract.setIssue("1");//默认直接下发到交接单
+
+        contract.setFlowId(flowId);
+
         // 原合同id不能为空
         Long oldContractId = contract.getOldContractId();
         if (oldContractId == null) {
@@ -133,7 +137,7 @@ public class ContractUpdateFlow extends FlowDelegate {
             newCp.setExpendQuantity(newCp.getQuantity());
             if (ObjectUtil.isNotEmpty(newCp.getId())) {//如果新合同产品ID不为空
                 //取出旧合同
-                ContractProduct oldContractProduct = oldContractProductMap.getOrDefault(newCp.getId(),null).get(0);
+                ContractProduct oldContractProduct = oldContractProductMap.getOrDefault(newCp.getId(), null).get(0);
 //                //取出旧合同包装方式
 //                JSONObject oldJson = JSONObject.parseObject(oldContractProduct.getEhsdJson());
 //                String oldPackMethod = oldJson.getOrDefault("packMethod",null)==null?null:oldJson.getOrDefault("packMethod",null).toString();
@@ -143,10 +147,10 @@ public class ContractUpdateFlow extends FlowDelegate {
                 /**
                  * 商品英文名、尺寸、包装方式、数量 没有变更---取原本的剩余数量
                  */
-                if(oldContractProduct.getQuantity().compareTo(newCp.getQuantity())==0){//如果数量没有变动
+                if (oldContractProduct.getQuantity().compareTo(newCp.getQuantity()) == 0) {//如果数量没有变动
                     //取出旧的剩余数量
                     newCp.setExpendQuantity(oldContractProduct.getExpendQuantity());
-                }else{//变动了
+                } else {//变动了
                     BigDecimal quantity = newCp.getQuantity().subtract(oldContractProduct.getQuantity()).subtract(oldContractProduct.getExpendQuantity());//剩余数量
                     newCp.setExpendQuantity(quantity);
                 }
@@ -227,7 +231,7 @@ public class ContractUpdateFlow extends FlowDelegate {
         if (ObjectUtils.isEmpty(newContract)) {
             throw new ServiceException("合同不存在");
         }
-        long  oldContractId = newContract.getOldContractId();//取出旧的合同ID
+        long oldContractId = newContract.getOldContractId();//取出旧的合同ID
         Contract oldContract = contractService.getById(oldContractId);
         if (oldContract == null) {
             throw new ServiceException("原合同不存在");
@@ -247,15 +251,15 @@ public class ContractUpdateFlow extends FlowDelegate {
 
 
         //查询新数据产品、收费、出货
-        List<Long> newContractProductIds = contractProductService.list(Wrappers.<ContractProduct>query().lambda().select(ContractProduct::getId).eq(ContractProduct::getContractId,businessId)).stream().map(ContractProduct::getId).collect(Collectors.toList());
-        List<Long> newContractProjectIds = contractProjectService.list(Wrappers.<ContractProject>query().lambda().select(ContractProject::getId).eq(ContractProject::getContractId,businessId)).stream().map(ContractProject::getId).collect(Collectors.toList());
-        List<Long> newContractShipmentIds = contractShipmentService.list(Wrappers.<ContractShipment>query().lambda().select(ContractShipment::getId).eq(ContractShipment::getContractId,businessId)).stream().map(ContractShipment::getId).collect(Collectors.toList());
+        List<Long> newContractProductIds = contractProductService.list(Wrappers.<ContractProduct>query().lambda().select(ContractProduct::getId).eq(ContractProduct::getContractId, businessId)).stream().map(ContractProduct::getId).collect(Collectors.toList());
+        List<Long> newContractProjectIds = contractProjectService.list(Wrappers.<ContractProject>query().lambda().select(ContractProject::getId).eq(ContractProject::getContractId, businessId)).stream().map(ContractProject::getId).collect(Collectors.toList());
+        List<Long> newContractShipmentIds = contractShipmentService.list(Wrappers.<ContractShipment>query().lambda().select(ContractShipment::getId).eq(ContractShipment::getContractId, businessId)).stream().map(ContractShipment::getId).collect(Collectors.toList());
 
 
         //查询旧数据产品、收费、出货
-        List<Long> oldContractProductIds = contractProductService.list(Wrappers.<ContractProduct>query().lambda().select(ContractProduct::getId).eq(ContractProduct::getContractId,oldContractId)).stream().map(ContractProduct::getId).collect(Collectors.toList());
-        List<Long> oldContractProjectIds = contractProjectService.list(Wrappers.<ContractProject>query().lambda().select(ContractProject::getId).eq(ContractProject::getContractId,oldContractId)).stream().map(ContractProject::getId).collect(Collectors.toList());
-        List<Long> oldContractShipmentIds = contractShipmentService.list(Wrappers.<ContractShipment>query().lambda().select(ContractShipment::getId).eq(ContractShipment::getContractId,oldContractId)).stream().map(ContractShipment::getId).collect(Collectors.toList());
+        List<Long> oldContractProductIds = contractProductService.list(Wrappers.<ContractProduct>query().lambda().select(ContractProduct::getId).eq(ContractProduct::getContractId, oldContractId)).stream().map(ContractProduct::getId).collect(Collectors.toList());
+        List<Long> oldContractProjectIds = contractProjectService.list(Wrappers.<ContractProject>query().lambda().select(ContractProject::getId).eq(ContractProject::getContractId, oldContractId)).stream().map(ContractProject::getId).collect(Collectors.toList());
+        List<Long> oldContractShipmentIds = contractShipmentService.list(Wrappers.<ContractShipment>query().lambda().select(ContractShipment::getId).eq(ContractShipment::getContractId, oldContractId)).stream().map(ContractShipment::getId).collect(Collectors.toList());
 
 
         /**
@@ -269,16 +273,16 @@ public class ContractUpdateFlow extends FlowDelegate {
         newContract.setIsShow(0);//显示新合同
         contractService.updateContract(newContract);
         //修改合同产品相关数据
-        if(CollectionUtils.isNotEmpty(newContractProductIds)){
-            contractProductService.update(Wrappers.<ContractProduct>update().lambda().set(ContractProduct::getContractId,oldContractId).in(ContractProduct::getId,newContractProductIds));
+        if (CollectionUtils.isNotEmpty(newContractProductIds)) {
+            contractProductService.update(Wrappers.<ContractProduct>update().lambda().set(ContractProduct::getContractId, oldContractId).in(ContractProduct::getId, newContractProductIds));
         }
         //修改合同收费相关数据
-        if(CollectionUtils.isNotEmpty(newContractProjectIds)){
-            contractProjectService.update(Wrappers.<ContractProject>update().lambda().set(ContractProject::getContractId,oldContractId).in(ContractProject::getId,newContractProjectIds));
+        if (CollectionUtils.isNotEmpty(newContractProjectIds)) {
+            contractProjectService.update(Wrappers.<ContractProject>update().lambda().set(ContractProject::getContractId, oldContractId).in(ContractProject::getId, newContractProjectIds));
         }
         //修改合同出货相关数据
-        if(CollectionUtils.isNotEmpty(newContractShipmentIds)){
-            contractShipmentService.update(Wrappers.<ContractShipment>update().lambda().set(ContractShipment::getContractId,oldContractId).in(ContractShipment::getId,newContractShipmentIds));
+        if (CollectionUtils.isNotEmpty(newContractShipmentIds)) {
+            contractShipmentService.update(Wrappers.<ContractShipment>update().lambda().set(ContractShipment::getContractId, oldContractId).in(ContractShipment::getId, newContractShipmentIds));
         }
 
         /**
@@ -290,50 +294,51 @@ public class ContractUpdateFlow extends FlowDelegate {
         contractService.updateById(oldContract);
 
 
-        List<ClaimContract> claimContractList = claimContractService.list(Wrappers.<ClaimContract>query().lambda().eq(ClaimContract::getContractId,oldContractId));
-        List<Long> claimIds = claimContractList.stream().map(ClaimContract::getClaimId).collect(Collectors.toList());
-        List<Long> claimContractIds = claimContractList.stream().map(ClaimContract::getId).collect(Collectors.toList());
-        //取出到账认领数据
-        List<Claim> claims = claimService.list(q -> q.in(Claim::getId, CollectionUtils.isEmpty(claimIds)? Arrays.asList("0000"):claimIds));
-        for(Claim c : claims){
-            //查询流水数据
-            AccountRunningWater accountRunningWater = accountRunningWaterService.getById(c.getBusinessId());
-            BigDecimal sumClaimMoney = accountRunningWater.getClaimAmount().subtract(c.getAmount());
-            //更新流水数据为认领状态---已认领金额还原
-            AccountRunningWater water = new AccountRunningWater();
-            if(sumClaimMoney.compareTo(BigDecimal.ZERO)>0){
-                water.setIsClaim(2);//部分认领
-            }else{
-                water.setIsClaim(0);//未认领
+        List<ClaimContract> claimContractList = claimContractService.list(Wrappers.<ClaimContract>query().lambda().eq(ClaimContract::getContractId, oldContractId));
+        if (ObjectUtil.isNotEmpty(claimContractList)) {
+            List<Long> claimIds = claimContractList.stream().map(ClaimContract::getClaimId).collect(Collectors.toList());
+            List<Long> claimContractIds = claimContractList.stream().map(ClaimContract::getId).collect(Collectors.toList());
+            //取出到账认领数据
+            List<Claim> claims = claimService.list(q -> q.in(Claim::getId, CollectionUtils.isEmpty(claimIds) ? Arrays.asList("0000") : claimIds));
+            for (Claim c : claims) {
+                //查询流水数据
+                AccountRunningWater accountRunningWater = accountRunningWaterService.getById(c.getBusinessId());
+                BigDecimal sumClaimMoney = accountRunningWater.getClaimAmount().subtract(c.getAmount());
+                //更新流水数据为认领状态---已认领金额还原
+                AccountRunningWater water = new AccountRunningWater();
+                if (sumClaimMoney.compareTo(BigDecimal.ZERO) > 0) {
+                    water.setIsClaim(2);//部分认领
+                } else {
+                    water.setIsClaim(0);//未认领
+                }
+                water.setId(c.getBusinessId());
+                water.setClaimAmount(sumClaimMoney);
+                accountRunningWaterService.updateById(water);
             }
-            water.setId(c.getBusinessId());
-            water.setClaimAmount(sumClaimMoney);
-            accountRunningWaterService.updateById(water);
+            //删除到账认领数据
+            claimContractService.remove(q -> q.in(ClaimContract::getId, claimContractIds));
+            //删除到账认领数据
+            claimService.remove(q -> q.in(Claim::getId, claimIds));
         }
-        //删除到账认领数据
-        claimContractService.remove(q -> q.in(ClaimContract::getId, claimContractIds));
-        //删除到账认领数据
-        claimService.remove(q -> q.in(Claim::getId, claimIds));
-
 
         oldContract.setUpId(temOldId);
         oldContract.setIsShow(1);//隐藏旧合同
         contractService.updateContract(oldContract);
         //修改合同产品相关数据
-        if(CollectionUtils.isNotEmpty(oldContractProductIds)){
-            contractProductService.update(Wrappers.<ContractProduct>update().lambda().set(ContractProduct::getContractId,businessId).in(ContractProduct::getId,oldContractProductIds));
+        if (CollectionUtils.isNotEmpty(oldContractProductIds)) {
+            contractProductService.update(Wrappers.<ContractProduct>update().lambda().set(ContractProduct::getContractId, businessId).in(ContractProduct::getId, oldContractProductIds));
         }
         //修改合同出货相关数据
-        if(CollectionUtils.isNotEmpty(oldContractProjectIds)){
+        if (CollectionUtils.isNotEmpty(oldContractProjectIds)) {
             //修改合同收费相关数据
-            contractProjectService.update(Wrappers.<ContractProject>update().lambda().set(ContractProject::getContractId,businessId).in(ContractProject::getId,oldContractProjectIds));
+            contractProjectService.update(Wrappers.<ContractProject>update().lambda().set(ContractProject::getContractId, businessId).in(ContractProject::getId, oldContractProjectIds));
         }
         //修改合同出货相关数据
-        if(CollectionUtils.isNotEmpty(oldContractShipmentIds)){
+        if (CollectionUtils.isNotEmpty(oldContractShipmentIds)) {
             //修改合同出货相关数据
-            contractShipmentService.update(Wrappers.<ContractShipment>update().lambda().set(ContractShipment::getContractId,businessId).in(ContractShipment::getId,oldContractShipmentIds));
+            contractShipmentService.update(Wrappers.<ContractShipment>update().lambda().set(ContractShipment::getContractId, businessId).in(ContractShipment::getId, oldContractShipmentIds));
         }
-        ObsFileUtil.exchangeBusinessId(oldContractId,businessId);
+        ObsFileUtil.exchangeBusinessId(oldContractId, businessId);
     }
 
     /**
@@ -353,6 +358,7 @@ public class ContractUpdateFlow extends FlowDelegate {
 
     /**
      * 驳回
+     *
      * @param flowId
      * @param businessId
      * @param flowStatus
@@ -363,6 +369,13 @@ public class ContractUpdateFlow extends FlowDelegate {
         reject(businessId);
     }
 
+    /**
+     * 作废
+     *
+     * @param flowId     流程id
+     * @param businessId 业务id
+     * @param flowStatus 流程状态枚举
+     */
     @Override
     public void cancellation(Long flowId, Long businessId, FlowStatusEnum flowStatus) {
         super.cancellation(flowId, businessId, flowStatus);
@@ -372,6 +385,14 @@ public class ContractUpdateFlow extends FlowDelegate {
                 .set(BasePo::getUpdateTime, new Date())
                 .set(BasePo::getUpdateUser, SecurityUtils.getUserId())
         );
+        //合同变更作废需要还原旧合同状态 为审批通过
+        Contract contract = contractService.getById(businessId);
+        contractService.update(q -> q
+                .eq(Contract::getId, contract.getOldContractId())
+                .set(Contract::getStatus, FlowStatusEnum1.PASS.getKey())
+                .set(BasePo::getUpdateTime, new Date())
+                .set(BasePo::getUpdateUser, SecurityUtils.getUserId())
+        );
     }
 
     /**

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

@@ -38,6 +38,11 @@ public interface ContractMapper extends BaseMapper<Contract> {
     Page<ContractVo> getProfitSettlement(@Param("page") Page<Object> page, @Param("ew") IWrapper<Contract> wrapper);
 
     /**
+     * 利润结算表头部统计
+     */
+    List<ContractVo>  getProfitSettlementHead(@Param("ew") IWrapper<Contract> wrapper);
+
+    /**
      * 利润预算表
      */
     Page<ContractBudgetVo> getProfitBudgetPage(@Param("page") Page<Object> page, @Param("ew") IWrapper<Contract> wrapper);
@@ -103,5 +108,7 @@ public interface ContractMapper extends BaseMapper<Contract> {
 
     void updateContract(Contract contract);
 
-    List<ContractVo> getCustomerMoney( @Param("ew") IWrapper<Contract> wrapper);
+    List<ContractVo> getCustomerMoney(@Param("ew") IWrapper<Contract> wrapper);
+
+
 }

+ 7 - 1
hx-sale/src/main/java/com/fjhx/sale/mapper/intermediate/IntermediateContractMapper.java

@@ -21,13 +21,19 @@ import java.util.List;
 public interface IntermediateContractMapper extends BaseMapper<IntermediateContract> {
 
     /**
-     * 中间合同分页
+     * 中间合同分页--未创建
      */
     Page<IntermediateContractVo> getPage(@Param("page") Page<Object> page, @Param("ew") IWrapper<IntermediateContract> wrapper);
 
     /**
+     * 中间合同分页--已创建
+     */
+    Page<IntermediateContractVo> getPage2(@Param("page") Page<Object> page, @Param("ew") IWrapper<IntermediateContract> wrapper);
+
+    /**
      * 获取中间合同历史联系方式
      */
     List<IntermediateContractVo> contactList(@Param("ew") IWrapper<IntermediateContract> wrapper);
 
+    String getAllIds();
 }

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

@@ -89,6 +89,7 @@ public class ClaimServiceImpl extends ServiceImpl<ClaimMapper, Claim> implements
         List<ClaimContract> claimContractList = claim.getClaimContractList();
         if(CollectionUtils.isNotEmpty(claim.getClaimContractList())){
             for(ClaimContract c:claimContractList){
+                c.setRate(claim.getRate());
                 c.setClaimId(claim.getId());
             }
             claimContractService.saveBatch(claimContractList);

+ 5 - 5
hx-sale/src/main/java/com/fjhx/sale/service/commission/impl/CommissionServiceImpl.java

@@ -44,6 +44,7 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
         QueryWrapper<Object> query = Wrappers.query();
         query.eq(ObjectUtil.isNotEmpty(dto.getUserId()), "c.user_id", dto.getUserId());
         query.eq(ObjectUtil.isNotEmpty(dto.getTime()), "DATE_FORMAT(c.create_time,'%Y')", dto.getTime());
+        query.like(ObjectUtil.isNotEmpty(dto.getKeyword()),"c.contract_code",dto.getKeyword());
         query.orderByDesc("c.create_time");
         Page<CommissionVo> page = this.baseMapper.getPage(dto.getPage(), query);
         return page;
@@ -124,11 +125,10 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
 
         //计算净收入(总收入 - 总支出 - 售后 - 公共 - 总办)
         BigDecimal netIncome = commissionDto.getTotalIncome()
-                .subtract(commissionDto.getTotalExpenses()
-                        .subtract(commissionDto.getAfterSalesAmount())
-                        .subtract(commissionDto.getPublicAmount())
-                        .subtract(commissionDto.getHaveOverallAmount())
-                ) ;
+                .subtract(commissionDto.getTotalExpenses())
+                .subtract(commissionDto.getAfterSalesAmount())
+                .subtract(commissionDto.getPublicAmount())
+                .subtract(commissionDto.getHaveOverallAmount());
         //计算部门提成金额:(总收入 - 总支出 - 售后 - 公共 - 总办) * 部门占比
         commissionDto.setDepartmentalCommission(netIncome.
                 multiply(commissionRule.getDepartmentalRatio())

+ 17 - 2
hx-sale/src/main/java/com/fjhx/sale/service/contract/ContractService.java

@@ -41,6 +41,11 @@ public interface ContractService extends BaseService<Contract> {
     Page<ContractVo> getProfitSettlement(ProfitSettlementDto dto);
 
     /**
+     * 利润结算表分页统计头部
+     */
+    List<ContractVo> getProfitSettlementHead(ProfitSettlementDto dto);
+
+    /**
      * 外销合同表分页 不过滤权限
      */
     Page<ContractVo> getPage1(ContractSelectDto dto);
@@ -188,11 +193,21 @@ public interface ContractService extends BaseService<Contract> {
      */
     List<AccountRunningWaterVo> getAccountRunningWaterByContractId(Long contractId);
 
+    void updateContract(Contract contract);
+
     /**
      * 统计头部客户金额
+     *
      * @return
      */
-    Map<String,Object> getHeadCustomerStatistics(ContractSelectDto dto);
+    Map<String, Object> getHeadCustomerStatistics(ContractSelectDto dto);
+
+    /**
+     * 中间合同打印PDF获取合同相关数据
+     * @param newContractId 最新一条单证合同ID
+     * @param contractIds 所有单证合同ID集合
+     * @return
+     */
+    Map<String,Object> getDocumentaryPdf(Long newContractId,List<Long> contractIds);
 
-    void updateContract(Contract contract);
 }

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

@@ -94,7 +94,7 @@ public class ContractProductServiceImpl extends ServiceImpl<ContractProductMappe
             }
         }
         //下发交接单过滤
-        wrapper.eq("t2", Contract::getIssue, 1);
+//        wrapper.eq("t2", Contract::getIssue, 1);
         return commPage(wrapper, dto);
     }
 

+ 109 - 11
hx-sale/src/main/java/com/fjhx/sale/service/contract/impl/ContractServiceImpl.java

@@ -13,17 +13,19 @@ 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.controller.utils.DateUtils;
+import com.fjhx.account.entity.account.po.AccountRunningWater;
 import com.fjhx.account.entity.account.vo.AccountRequestFundsDetailVo;
 import com.fjhx.account.entity.account.vo.AccountRunningWaterVo;
+import com.fjhx.account.entity.tax.po.TaxRefundDetails;
 import com.fjhx.account.service.account.AccountManagementService;
 import com.fjhx.account.service.account.AccountRequestFundsDetailService;
+import com.fjhx.account.service.tax.TaxRefundDetailsService;
 import com.fjhx.area.service.SetCustomizeAreaId;
 import com.fjhx.area.utils.CustomizeAreaUtil;
 import com.fjhx.common.constant.SourceConstant;
 import com.fjhx.common.entity.corporation.po.Corporation;
 import com.fjhx.common.entity.currency.po.CurrencyRate;
 import com.fjhx.common.entity.documentary.bo.DocumentaryData;
-import com.fjhx.common.enums.CodingRuleEnum;
 import com.fjhx.common.enums.FlowStatusEnum1;
 import com.fjhx.common.service.coding.CodingRuleService;
 import com.fjhx.common.service.corporation.CorporationService;
@@ -40,11 +42,14 @@ 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.pay.po.Pay;
+import com.fjhx.purchase.entity.purchase.enums.PurchaseStatusEnum;
 import com.fjhx.purchase.entity.purchase.po.Purchase;
 import com.fjhx.purchase.entity.purchase.po.PurchaseDetail;
 import com.fjhx.purchase.entity.purchase.vo.PurchaseDetailVo;
 import com.fjhx.purchase.entity.quality.po.QualityDetail;
 import com.fjhx.purchase.service.arrival.ArrivalDetailService;
+import com.fjhx.purchase.service.pay.PayDetailService;
 import com.fjhx.purchase.service.purchase.PurchaseDetailService;
 import com.fjhx.purchase.service.purchase.PurchaseService;
 import com.fjhx.purchase.service.quality.QualityDetailService;
@@ -63,6 +68,7 @@ import com.fjhx.sale.entity.contract.vo.*;
 import com.fjhx.sale.entity.purchase.vo.EhsdPurchaseProductVo;
 import com.fjhx.sale.entity.sale.vo.SaleQuotationVo;
 import com.fjhx.sale.entity.statement.dto.ProfitSettlementDto;
+import com.fjhx.sale.entity.statement.vo.ProfitSettlementVo;
 import com.fjhx.sale.mapper.contract.ContractMapper;
 import com.fjhx.sale.service.claim.ClaimContractService;
 import com.fjhx.sale.service.contract.ContractProductService;
@@ -70,6 +76,8 @@ 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.fjhx.sale.service.purchase.EhsdPurchaseService;
+import com.fjhx.sale.service.statement.SaleStatementService;
 import com.fjhx.tenant.entity.dict.dto.DictTenantDataSelectDto;
 import com.fjhx.tenant.entity.dict.vo.DictTenantDataVo;
 import com.fjhx.tenant.service.dict.DictTenantDataService;
@@ -137,6 +145,9 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
     private AccountManagementService accountManagementService;
 
     @Autowired
+    private EhsdPurchaseService ehsdPurchaseService;
+
+    @Autowired
     private EhsdPurchaseProductService ehsdPurchaseProductService;
 
     @Autowired
@@ -149,6 +160,9 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
     private ClaimContractService claimContractService;
 
     @Autowired
+    private TaxRefundDetailsService taxRefundDetailsService;
+
+    @Autowired
     private AccountRequestFundsDetailService accountRequestFundsDetailService;
 
     @Autowired
@@ -161,6 +175,9 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
     private PurchaseService purchaseService;
 
     @Autowired
+    private PayDetailService payDetailService;
+
+    @Autowired
     private ArrivalDetailService arrivalDetailService;
 
     @Autowired
@@ -177,6 +194,9 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
 
     @Autowired
     private CodingRuleService codingRuleService;
+
+    @Autowired
+    private SaleStatementService saleStatementService;
     /**
      * 分页
      *
@@ -232,10 +252,47 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
             }
         }
         Page<ContractVo> page = baseMapper.getProfitSettlement(dto.getPage(),wrapper);
+
         return page;
     }
 
     /**
+     * 利润结算表分页
+     * @param dto
+     * @return
+     */
+    @Override
+    public List<ContractVo> getProfitSettlementHead(ProfitSettlementDto dto) {
+        IWrapper<Contract> wrapper = getWrapper();
+        wrapper.orderByDesc("t1", Contract::getCreateTime);
+        wrapper.eq("t1", Contract::getIsChange, "0");//列表只展示未变更得数据
+        wrapper.between("t1", Contract::getStatus, FlowStatusEnum1.DRAFT.getKey(), FlowStatusEnum1.CANCELLATION.getKey() - 1);
+        if(ObjectUtil.isNotEmpty(dto.getSettlementStatus())){
+            wrapper.eq( "t1",Contract::getSettlementStatus, dto.getSettlementStatus());
+        }
+        if(ObjectUtil.isNotEmpty(dto.getUserId())){
+            wrapper.eq( "t1",Contract::getCreateUser, dto.getUserId());
+        }
+        if (StringUtils.isNotEmpty(dto.getKeyword())) {
+            wrapper.keyword(dto.getKeyword(), new SqlField("t1", Contract::getCode));
+        }
+        if(StringUtils.isNotEmpty(dto.getIsArrival())){
+            if(StringUtils.equals(dto.getIsArrival(),"1")){//已到账----//预付比例等于0||到账认领金额 >= 合同金额 * 预付比例%
+                wrapper.and(c -> {
+                    c.eq(Contract::getAdvanceRatio, "0").or();
+                    c.eq("t1.refundStatusNew", 20);
+                });
+            }else{
+                wrapper.ne("t1",Contract::getAdvanceRatio,"0");
+                wrapper.ne("t1.refundStatusNew",20);
+            }
+        }
+        List<ContractVo> list = baseMapper.getProfitSettlementHead(wrapper);
+        return list;
+    }
+
+
+    /**
      * 不过滤权限的分页接口
      */
     @Override
@@ -255,15 +312,21 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
         if (StringUtils.isNotEmpty(dto.getStatus())) {
             wrapper.eq("t1", Contract::getStatus, dto.getStatus());
         }
-
+        if (StringUtils.isNotEmpty(dto.getKeyword())) {
+            //归属公司
+            List<Long> corporationIds = corporationService.listObject(Corporation::getId, q -> q.like(Corporation::getName, dto.getKeyword()));
+            List<Long> customerIds = customerService.listObject(Customer::getId, q -> q.like(Customer::getName, dto.getKeyword()));
+            wrapper.and(q -> q
+                    .like("t1", Contract::getCode, dto.getKeyword())
+                    .or().in("t1", Contract::getSellCorporationId, corporationIds)
+                    .or().in("t1", Contract::getBuyCorporationId, customerIds)
+            );
+        }
         if (StringUtils.isNotEmpty(dto.getSellCorporationId())) {
             wrapper.eq("t1", Contract::getSellCorporationId, dto.getSellCorporationId());
         }
         if (StringUtils.isNotEmpty(dto.getRefundStatusNew())) {
-            wrapper.in("t1.refundStatusNew", Arrays.asList(dto.getRefundStatusNew().split(",")));
-        }
-        if (StringUtils.isNotEmpty(dto.getKeyword())) {
-            wrapper.keyword(dto.getKeyword(), new SqlField("t1", Contract::getCode));
+            wrapper.in("t1.refund_status", Arrays.asList(dto.getRefundStatusNew().split(",")));
         }
         if (StringUtils.isNotEmpty(dto.getUserId())) {
             wrapper.eq("t1", Contract::getCreateUser, dto.getUserId());
@@ -323,7 +386,8 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
             }
 
             // 赋值流程id
-            flowExampleService.setFlowId(list, ContractVo::setFlowId);
+            List<ContractVo> collect = list.stream().filter(item -> Objects.isNull(item.getFlowId())).collect(Collectors.toList());
+            flowExampleService.setFlowId(collect, ContractVo::setFlowId);
             //赋值原卖方公司名称 多公司
             corporationService.attributeAssign(list, ContractVo::getSellCorporationId, (item, corporation) -> {
                 item.setSellCorporationName(corporation.getName());
@@ -1637,7 +1701,8 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
         }
         List<ContractVo> contractVos = BeanUtil.copyToList(contractList, ContractVo.class);
         // 赋值流程id
-        flowExampleService.setFlowId(contractVos, ContractVo::setFlowId);
+        List<ContractVo> collect = contractVos.stream().filter(item -> Objects.isNull(item.getFlowId())).collect(Collectors.toList());
+        flowExampleService.setFlowId(collect, ContractVo::setFlowId);
         return contractVos;
     }
 
@@ -1699,15 +1764,24 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
             wrapper.in("t1.refundStatusNew", Arrays.asList(dto.getRefundStatusNew().split(",")));
         }
         if (StringUtils.isNotEmpty(dto.getKeyword())) {
-            wrapper.keyword(dto.getKeyword(), new SqlField("t1", Contract::getCode));
+            //归属公司
+            List<Long> corporationIds = corporationService.listObject(Corporation::getId, q -> q.like(Corporation::getName, dto.getKeyword()));
+            List<Long> customerIds = customerService.listObject(Customer::getId, q -> q.like(Customer::getName, dto.getKeyword()));
+            wrapper.and(q -> q
+                    .like("t1", Contract::getCode, dto.getKeyword())
+                    .or().in("t1", Contract::getSellCorporationId, corporationIds)
+                    .or().in("t1", Contract::getBuyCorporationId, customerIds)
+            );
+        }
+        if (StringUtils.isNotEmpty(dto.getUserId())) {
+            wrapper.eq("t1", Contract::getCreateUser, dto.getUserId());
         }
         //根据客户id关联
         wrapper.eq(ContractVo::getBuyCorporationId, dto.getCustomerId());
         //过滤合同类型
         wrapper.eq("t1.contract_type", dto.getContractType());
         wrapper.groupBy("t1.sell_corporation_id");
-        List<ContractVo> list;
-        list = baseMapper.getCustomerMoney(wrapper);
+        List<ContractVo> list = baseMapper.getCustomerMoney(wrapper);
 
         if(CollectionUtils.isNotEmpty(list)){
             BigDecimal sumAmount = list.stream().map(ContractVo::getSumAmount).reduce(BigDecimal.ZERO,BigDecimal::add);
@@ -1724,4 +1798,28 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
         }
         return map;
     }
+
+    @Override
+    public Map<String, Object> getDocumentaryPdf(Long newContractId, List<Long> contractIds) {
+        Map<String,Object> map = new HashMap<>();
+        if (ObjectUtil.isEmpty(newContractId)) {
+            throw new ServiceException("销售合同id不能为空");
+        }
+        Contract contract = getById(newContractId);
+        if (ObjectUtil.isEmpty(contract)) {
+            throw new ServiceException("没有找到销售合同");
+        }
+        contract.setCreateTimeEn(sdf.format(contract.getCreateTime()));
+        map.put("contract",contract);
+        QueryWrapper<Contract> queryWrapper = new QueryWrapper<>();
+        queryWrapper.select("IFNULL(SUM( amount ),0) AS amount").in("id",contractIds);
+        contract.setAmount(contractService.getOne(queryWrapper).getAmount());
+        //查询合同产品
+        List<ContractProduct> contractProductList = contractProductService.list(Wrappers.<ContractProduct>query().lambda().in(ContractProduct::getContractId,contractIds));
+        //查询合同产品
+        List<ContractProject> contractProjectList = contractProjectService.list(Wrappers.<ContractProject>query().lambda().in(ContractProject::getContractId,contractIds));
+        map.put("contractProductList",contractProductList);
+        map.put("contractProjectList",contractProjectList);
+        return map;
+    }
 }

+ 8 - 9
hx-sale/src/main/java/com/fjhx/sale/service/documents/impl/DocumentsPdfServiceImpl.java

@@ -1,27 +1,26 @@
 package com.fjhx.sale.service.documents.impl;
 
+import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.fastjson2.JSON;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.fjhx.sale.entity.documents.po.Documents;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fjhx.sale.entity.documents.dto.DocumentsPdfDto;
+import com.fjhx.sale.entity.documents.dto.DocumentsPdfSelectDto;
 import com.fjhx.sale.entity.documents.po.DocumentsPdf;
 import com.fjhx.sale.entity.documents.po.DocumentsProduct;
+import com.fjhx.sale.entity.documents.vo.DocumentsPdfVo;
 import com.fjhx.sale.mapper.documents.DocumentsPdfMapper;
 import com.fjhx.sale.service.documents.DocumentsPdfService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fjhx.sale.service.documents.DocumentsProductService;
 import com.fjhx.sale.service.documents.DocumentsService;
 import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.wrapper.IWrapper;
 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.sale.entity.documents.vo.DocumentsPdfVo;
-import com.fjhx.sale.entity.documents.dto.DocumentsPdfSelectDto;
-import com.ruoyi.common.utils.wrapper.IWrapper;
-import com.fjhx.sale.entity.documents.dto.DocumentsPdfDto;
-import cn.hutool.core.bean.BeanUtil;
 
 import java.util.Map;
 
@@ -96,7 +95,7 @@ public class DocumentsPdfServiceImpl extends ServiceImpl<DocumentsPdfMapper, Doc
     public void add(DocumentsPdfDto documentsPdfDto) {
         DocumentsPdf documentsPdf = this.getOne(Wrappers.<DocumentsPdf>query().lambda().eq(DocumentsPdf::getDocumentId,documentsPdfDto.getDocumentId()));
         if(ObjectUtil.isEmpty(documentsPdf)){
-            this.save(documentsPdf);
+            this.save(documentsPdfDto);
         }else{
             this.update(documentsPdfDto,Wrappers.<DocumentsPdf>query().lambda().eq(DocumentsPdf::getDocumentId,documentsPdfDto.getDocumentId()));
         }

+ 8 - 1
hx-sale/src/main/java/com/fjhx/sale/service/intermediate/IntermediateContractService.java

@@ -32,6 +32,11 @@ public interface IntermediateContractService extends BaseService<IntermediateCon
     IntermediateContractVo detail(Long id);
 
     /**
+     * 中间合同删除
+     */
+    void del(Long id);
+
+    /**
      * 中间合同编辑
      */
     void edit(IntermediateContractDto intermediateContractDto);
@@ -46,5 +51,7 @@ public interface IntermediateContractService extends BaseService<IntermediateCon
      *
      * @return
      */
-    ContractPdfInfoVo getPrintInfo(IntermediateContractDto dto);
+    IntermediateContract getPrintInfo(IntermediateContractDto dto);
+
+    String getAllIds();
 }

+ 98 - 56
hx-sale/src/main/java/com/fjhx/sale/service/intermediate/impl/IntermediateContractServiceImpl.java

@@ -2,13 +2,16 @@ package com.fjhx.sale.service.intermediate.impl;
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.ObjectUtil;
+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.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.flow.service.flow.FlowExampleService;
 import com.fjhx.sale.entity.contract.vo.ContractPdfInfoVo;
+import com.fjhx.sale.entity.contract.vo.ContractVo;
 import com.fjhx.sale.entity.documents.po.Documents;
 import com.fjhx.sale.entity.intermediate.dto.IntermediateContractDto;
 import com.fjhx.sale.entity.intermediate.dto.IntermediateContractSelectDto;
@@ -18,14 +21,21 @@ 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.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.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
 import org.springframework.stereotype.Service;
 
 import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
+import java.util.stream.Collectors;
 
 
 /**
@@ -47,36 +57,46 @@ public class IntermediateContractServiceImpl extends ServiceImpl<IntermediateCon
     private CustomerService customerService;
     @Autowired
     private CorporationService corporationService;
+    @Autowired
+    private FlowExampleService flowExampleService;
 
     @Override
     public Page<IntermediateContractVo> getPage(IntermediateContractSelectDto dto) {
+        if(ObjectUtil.isEmpty(dto.getIsSet())){
+            throw new ServiceException("参数异常");
+        }
         IWrapper<IntermediateContract> wrapper = getWrapper();
         //买方公司过滤
-        wrapper.eq(IntermediateContract::getBuyCorporationId, dto.getBuyCorporationId());
-        //卖方公司过滤
-        wrapper.eq(IntermediateContract::getSellCorporationId, dto.getSellCorporationId());
+        wrapper.orderByDesc("d.create_time");
+        wrapper.like(StringUtils.isNotEmpty(dto.getKeyword()),"c.code", dto.getKeyword());
+        wrapper.eq(ObjectUtil.isNotEmpty(dto.getBuyCorporationId()),"c.buy_corporation_id", dto.getBuyCorporationId());
+        wrapper.eq(ObjectUtil.isNotEmpty(dto.getSellCorporationId()),"c.sell_corporation_id", dto.getSellCorporationId());
+        Page<IntermediateContractVo> page;
+        if(dto.getIsSet()==1){//未创建
+            String ids = this.getAllIds();
+            if(StringUtils.isNotEmpty(ids)){
+                wrapper.notIn("d.id",Arrays.asList(ids.split(",")));
+            }
+            //卖方公司过滤
+            page = this.baseMapper.getPage(dto.getPage(), wrapper);
+        }else{//已创建
+            wrapper.groupBy("t1.id");
+            page = this.baseMapper.getPage2(dto.getPage(), wrapper);
+        }
 
-        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());
+        customerService.attributeAssign(records, IntermediateContractVo::getBuyCorporationId, (item, customer) -> {
+            item.setBuyCorporationName(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);
+        // 赋值流程id
+        List<IntermediateContractVo> collect = records.stream().filter(item -> Objects.isNull(item.getFlowId())).collect(Collectors.toList());
+        flowExampleService.setFlowId(collect, 2,IntermediateContractVo::setFlowId);
+        UserUtil.assignmentNickName(records, IntermediateContractVo::getCreateUser, IntermediateContractVo::setUserName);
         return page;
     }
 
@@ -87,11 +107,20 @@ public class IntermediateContractServiceImpl extends ServiceImpl<IntermediateCon
         return result;
     }
 
+    /**
+     * 删除
+     * @param id
+     */
+    @Override
+    public void del(Long id) {
+        this.removeById(id);
+    }
+
     @Override
     public void edit(IntermediateContractDto intermediateContractDto) {
         intermediateContractDto.setId(null);
-        Assert.notEmpty(intermediateContractDto.getDocumentsId(), "单证id不能为空");
-        IntermediateContract intermediateContract = this.getOne(q -> q.eq(IntermediateContract::getDocumentsId, intermediateContractDto.getDocumentsId()));
+        Assert.notEmpty(intermediateContractDto.getDocumentsIds(), "单证id不能为空");
+        IntermediateContract intermediateContract = this.getOne(q -> q.eq(IntermediateContract::getDocumentsIds, intermediateContractDto.getDocumentsIds()));
         if (ObjectUtil.isNotEmpty(intermediateContract)) {
             //编辑 赋值id
             intermediateContractDto.setId(intermediateContract.getId());
@@ -141,45 +170,58 @@ public class IntermediateContractServiceImpl extends ServiceImpl<IntermediateCon
      * @return
      */
     @Override
-    public ContractPdfInfoVo getPrintInfo(IntermediateContractDto dto) {
-        Assert.notEmpty(dto.getDocumentsId(), "单证id不能为空");
-        Documents documents = documentsService.getById(dto.getDocumentsId());
+    public IntermediateContract getPrintInfo(IntermediateContractDto dto) {
+        Assert.notEmpty(dto.getId(), "参数异常");
+        IntermediateContract in = this.getById(dto.getId());
+        if(ObjectUtil.isEmpty(in)){
+            throw new ServiceException("合同不存在");
+        }
+        IntermediateContractVo vo = new IntermediateContractVo();
+        BeanUtils.copyProperties(in,vo);
+        //赋值买方卖方公司名称
+        List<Long> corporationIds = Arrays.asList(in.getBuyCorporationId(), in.getSellCorporationId());
+        Map<Long, Corporation> corporationMap = corporationService.mapKEntity(Corporation::getId, q -> q.in(Corporation::getId, corporationIds));
+        Corporation buyCorporation = corporationMap.get(in.getBuyCorporationId());
+        //赋值买方信息
+        vo.setBuyContactNumber(in.getBuyContactNumber());
+        vo.setBuyContactName(in.getBuyContactName());
+        if (ObjectUtil.isNotEmpty(buyCorporation)) {
+            vo.setBuyCorporationName(buyCorporation.getNameEn());
+            //赋值买方国家省市详细地址信息
+            vo.setBuyCountryName(buyCorporation.getCountryEnStr());
+            vo.setBuyProvinceName(buyCorporation.getProvinceEnStr());
+            vo.setBuyCityName(buyCorporation.getCityEnStr());
+            vo.setBuyDetailedAddress(buyCorporation.getAddressEn());
+        }
+        Corporation sellCorporation = corporationMap.get(in.getSellCorporationId());
+        //赋值卖方信息
+        vo.setSellContactNumber(in.getSellContactNumber());
+        vo.setSellContactName(in.getSellContactName());
+        if (ObjectUtil.isNotEmpty(sellCorporation)) {
+            vo.setSellCorporationNameEn(sellCorporation.getNameEn());
+            //赋值卖方国家省市详细地址信息
+            vo.setSellCountryName(sellCorporation.getCountryEnStr());
+            vo.setSellProvinceName(sellCorporation.getProvinceEnStr());
+            vo.setSellCityName(sellCorporation.getCityEnStr());
+            vo.setSellDetailedAddress(sellCorporation.getAddressEn());
+        }
+        //查询最新的一条单证信息
+        Documents documents = documentsService.getOne(Wrappers.<Documents>query().lambda().in(Documents::getId,Arrays.asList(in.getDocumentsIds().split(","))).orderByDesc(Documents::getCreateTime).last("limit 1"));
         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.getBuyContactNumber());
-            contractPdfInfo.setBuyCorporationName(buyCorporation.getNameEn());
-            if (ObjectUtil.isNotEmpty(buyCorporation)) {
-                contractPdfInfo.setBuyContactName(intermediateContract.getBuyContactName());
-                //赋值买方国家省市详细地址信息
-                contractPdfInfo.setBuyCountryName(buyCorporation.getCountryEnStr());
-                contractPdfInfo.setBuyProvinceName(buyCorporation.getProvinceEnStr());
-                contractPdfInfo.setBuyCityName(buyCorporation.getCityEnStr());
-                contractPdfInfo.setBuyDetailedAddress(buyCorporation.getAddressEn());
-            }
+        List<Documents> documentsList = documentsService.list(Wrappers.<Documents>query().lambda().in(Documents::getId,Arrays.asList(in.getDocumentsIds().split(","))));
+        //查询合同
+        Map<String,Object> contractMap = contractService.getDocumentaryPdf(documents.getContractId(),documentsList.stream().map(Documents::getContractId).collect(Collectors.toList()));
+        vo.setContractMap(contractMap);
+        return vo;
+    }
 
-            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;
+    /**
+     * 获取所有单证ID
+     * @return
+     */
+    @Override
+    public String getAllIds() {
+        return baseMapper.getAllIds();
     }
 
 }

+ 11 - 0
hx-sale/src/main/java/com/fjhx/sale/service/statement/SaleStatementService.java

@@ -1,11 +1,22 @@
 package com.fjhx.sale.service.statement;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.sale.entity.contract.dto.ContractSelectDto;
+import com.fjhx.sale.entity.contract.vo.ContractBudgetVo;
 import com.fjhx.sale.entity.statement.dto.ProfitSettlementDto;
 import com.fjhx.sale.entity.statement.vo.ProfitSettlementVo;
 
+import java.util.Map;
+
 public interface SaleStatementService {
 
     Page<ProfitSettlementVo> getProfitSettlement(ProfitSettlementDto dto);
 
+    Map<String,Object> getProfitSettlementHead(ProfitSettlementDto dto);
+
+    /**
+     * 利润结算头部统计
+     */
+    Page<ContractBudgetVo> getProfitClearingPageHeadStatistics(ContractSelectDto dto);
+
 }

+ 188 - 74
hx-sale/src/main/java/com/fjhx/sale/service/statement/impl/SaleStatementServiceImpl.java

@@ -20,6 +20,7 @@ import com.fjhx.common.entity.currency.po.CurrencyRate;
 import com.fjhx.common.enums.FlowStatusEnum1;
 import com.fjhx.common.service.currency.CurrencyRateService;
 import com.fjhx.customer.service.customer.CustomerService;
+import com.fjhx.flow.enums.FlowStatusEnum;
 import com.fjhx.purchase.entity.pay.po.Pay;
 import com.fjhx.purchase.entity.purchase.enums.PurchaseStatusEnum;
 import com.fjhx.purchase.entity.purchase.po.Purchase;
@@ -28,7 +29,9 @@ import com.fjhx.purchase.service.purchase.PurchaseDetailService;
 import com.fjhx.purchase.service.purchase.PurchaseService;
 import com.fjhx.sale.entity.claim.po.ClaimContract;
 import com.fjhx.sale.entity.contract.bo.ContractCurrencyRate;
+import com.fjhx.sale.entity.contract.dto.ContractSelectDto;
 import com.fjhx.sale.entity.contract.po.Contract;
+import com.fjhx.sale.entity.contract.vo.ContractBudgetVo;
 import com.fjhx.sale.entity.contract.vo.ContractVo;
 import com.fjhx.sale.entity.purchase.po.EhsdPurchase;
 import com.fjhx.sale.entity.statement.dto.ProfitSettlementDto;
@@ -98,10 +101,8 @@ public class SaleStatementServiceImpl implements SaleStatementService {
         customerService.attributeAssign(list, ProfitSettlementVo::getCustomerId, (item, customer) -> {
             item.setCustomerName(customer.getName());
         });
-        // 获取默认税率
-        Map<String, BigDecimal> defaultRateMap = new HashMap<>();
         //赋值合同到账金额、退税金额、采购金额
-        setContractArrivalAndRefundMoney(list);
+        setContractArrivalAndRefundMoney(list,1);
         // 计算
         calculation(list);
         // 转page
@@ -109,6 +110,27 @@ public class SaleStatementServiceImpl implements SaleStatementService {
     }
 
     /**
+     * 利润结算表头部统计
+     * @param dto
+     * @return
+     */
+    @Override
+    public Map<String, Object> getProfitSettlementHead(ProfitSettlementDto dto) {
+        List<ContractVo> records = contractService.getProfitSettlementHead(dto);
+        if (records.size() == 0) {
+            return new HashMap<>();
+        }
+        // 转换为vo
+        List<ProfitSettlementVo> list = createResultList(records);
+        //赋值合同到账金额、退税金额、采购金额
+        setContractArrivalAndRefundMoney(list,2);
+        // 计算
+        calculation(list);
+
+        return sumData(list);
+    }
+
+    /**
      * 获取单条合同汇率
      */
     private Map<Long, Map<String, BigDecimal>> getDetailsRateMap(
@@ -198,8 +220,9 @@ public class SaleStatementServiceImpl implements SaleStatementService {
 
     /**
      * 赋值合同到账金额、退税金额、采购金额
+     * type:1 列表 2头部
      */
-    private void setContractArrivalAndRefundMoney(List<ProfitSettlementVo> list) {
+    private void setContractArrivalAndRefundMoney(List<ProfitSettlementVo> list,int type) {
         List<CurrencyRate> currencyRateList = currencyRateService.list();
 
         List<String> currencyList = new ArrayList<>();
@@ -214,9 +237,17 @@ public class SaleStatementServiceImpl implements SaleStatementService {
         Map<Long, List<TaxRefundDetails>> refundDetailsMap = refundDetails.stream().collect(Collectors.groupingBy(TaxRefundDetails::getContractId));
 
         //通过合同IDS查询出采购数据
-        List<Purchase> purchaseList = purchaseService.list(q -> q.in(Purchase::getDataResourceId, contractIdList).ge(Purchase::getPurchaseStatus, PurchaseStatusEnum.PASS.getKey()).lt(Purchase::getPurchaseStatus, PurchaseStatusEnum.CENCELLATION.getKey()));
+        List<Purchase> purchaseList = purchaseService.list(q -> q.in(Purchase::getDataResourceId, contractIdList).ge(Purchase::getPurchaseStatus, PurchaseStatusEnum.PASS.getKey()).lt(Purchase::getPurchaseStatus, FlowStatusEnum1.UPDATE.getKey()));
         Map<Long, List<Purchase>> purchaseMap = purchaseList.stream().collect(Collectors.groupingBy(Purchase::getDataResourceId));
 
+        //通过合同ID查询出请款数据
+        List<AccountRequestFundsDetailVo> accountRequestFundsDetailVoList = accountRequestFundsDetailService.getListByContractIds(contractIdList);
+        Map<Long, List<AccountRequestFundsDetailVo>> accountRequestFundsDetailVoMap = accountRequestFundsDetailVoList.stream().collect(Collectors.groupingBy(AccountRequestFundsDetailVo::getContractId));
+
+        //通过合同ID查询出采购数据
+        List<Pay> pays = payDetailService.getPayDetailListByContractIds(contractIdList);
+        Map<Long, List<Pay>> payMap = pays.stream().collect(Collectors.groupingBy(Pay::getContractId));
+
         for (ProfitSettlementVo p : list) {
             currencyList.add(p.getCurrency());
             if (StringUtil.isNotEmpty(p.getCurrencyRateJson())) {//取设置的汇率
@@ -236,10 +267,13 @@ public class SaleStatementServiceImpl implements SaleStatementService {
                         return rate.multiply(money);
                     }).reduce(BigDecimal.ZERO, BigDecimal::add);
                     p.setContractArrival(contractArrival);
-                    // 赋值业务员名称
-                    UserUtil.assignmentNickName(cList, ClaimContract::getCreateUser, ClaimContract::setUserName);
-                    p.setClaimList(cList);
-                    currencyList.addAll(cList.stream().map(ClaimContract::getCurrency).collect(Collectors.toList()));
+                    if(type==1){
+                        // 赋值业务员名称
+                        UserUtil.assignmentNickName(cList, ClaimContract::getCreateUser, ClaimContract::setUserName);
+                        p.setClaimList(cList);
+                        currencyList.addAll(cList.stream().map(ClaimContract::getCurrency).collect(Collectors.toList()));
+                    }
+
                 }
                 /**
                  * 处理退税金额
@@ -255,10 +289,13 @@ public class SaleStatementServiceImpl implements SaleStatementService {
                         return rate.multiply(money);
                     }).reduce(BigDecimal.ZERO, BigDecimal::add);
                     p.setTaxReturnMoney(taxReturnMoney);
-                    // 赋值业务员名称
-                    UserUtil.assignmentNickName(rList, TaxRefundDetails::getCreateUser, TaxRefundDetails::setUserName);
-                    p.setTaxReturnList(rList);
-                    currencyList.addAll(rList.stream().map(TaxRefundDetails::getCurrency).collect(Collectors.toList()));
+                    if(type==1){
+                        // 赋值业务员名称
+                        UserUtil.assignmentNickName(rList, TaxRefundDetails::getCreateUser, TaxRefundDetails::setUserName);
+                        p.setTaxReturnList(rList);
+                        currencyList.addAll(rList.stream().map(TaxRefundDetails::getCurrency).collect(Collectors.toList()));
+                    }
+
                 }
                 /**
                  * 处理采购金额
@@ -275,23 +312,26 @@ public class SaleStatementServiceImpl implements SaleStatementService {
                         return rate.multiply(money);
                     }).reduce(BigDecimal.ZERO, BigDecimal::add);
                     p.setPurchaseAmount(purchaseAmount);
-                    p.setPurchaseList(pList);
-                    currencyList.addAll(pList.stream().map(Purchase::getCurrency).collect(Collectors.toList()));
-                    /**
-                     * 处理支付款金额
-                     */
-                    List<Long> purchaseIds = pList.stream().map(Purchase::getId).collect(Collectors.toList());
-                    List<Pay> payList = payDetailService.getSumMoney(purchaseIds);
-                    if (CollectionUtils.isNotEmpty(payList)) {
-                        BigDecimal payAmount = payList.stream().map(pay -> {
-                            //获取汇率
-                            BigDecimal rate = pay.getRate()==null?BigDecimal.ONE:pay.getRate();
-                            // 获取金额
-                            BigDecimal money = pay.getAmount()==null?BigDecimal.ZERO:pay.getAmount();
-                            // 返回兑人民币后金额
-                            return rate.multiply(money);
-                        }).reduce(BigDecimal.ZERO, BigDecimal::add);
-                        p.setPayForGoods(payAmount);
+                    if(type==1){
+                        p.setPurchaseList(pList);
+                        currencyList.addAll(pList.stream().map(Purchase::getCurrency).collect(Collectors.toList()));
+                    }
+                }
+                /**
+                 * 处理支付款金额
+                 */
+                List<Pay> payList = payMap.getOrDefault(p.getContractId(), null);
+                if (CollectionUtils.isNotEmpty(payList)) {
+                    BigDecimal payAmount = payList.stream().map(pay -> {
+                        //获取汇率
+                        BigDecimal rate = pay.getRate()==null?BigDecimal.ONE:pay.getRate();
+                        // 获取金额
+                        BigDecimal money = pay.getAmount()==null?BigDecimal.ZERO:pay.getAmount();
+                        // 返回兑人民币后金额
+                        return rate.multiply(money);
+                    }).reduce(BigDecimal.ZERO, BigDecimal::add);
+                    p.setPayForGoods(payAmount);
+                    if(type==1){
                         // 赋值业务员名称
                         UserUtil.assignmentNickName(payList, Pay::getCreateUser, Pay::setUserName);
                         p.setPayList(payList);
@@ -301,7 +341,8 @@ public class SaleStatementServiceImpl implements SaleStatementService {
                 /**
                  * 其他收入金额
                  */
-                List<AccountRequestFundsDetailVo> accountRequestFundsDetailVos = accountRequestFundsDetailService.getListByContractId(p.getContractId());
+                List<AccountRequestFundsDetailVo> accountRequestFundsDetailVos = accountRequestFundsDetailVoMap.getOrDefault(p.getContractId(), null);
+//                List<AccountRequestFundsDetailVo> accountRequestFundsDetailVos = accountRequestFundsDetailService.getListByContractId(p.getContractId());
                 if (CollectionUtils.isNotEmpty(accountRequestFundsDetailVos)) {
                     BigDecimal otherExpenses = accountRequestFundsDetailVos.stream().map(acc -> {
                         //获取汇率
@@ -312,34 +353,40 @@ public class SaleStatementServiceImpl implements SaleStatementService {
                         return rate.multiply(money);
                     }).reduce(BigDecimal.ZERO, BigDecimal::add);
                     p.setOtherExpenses(otherExpenses);
-                    // 赋值业务员名称
-                    UserUtil.assignmentNickName(accountRequestFundsDetailVos, AccountRequestFundsDetailVo::getCreateUser, AccountRequestFundsDetailVo::setUserName);
-                    p.setAccountRequestFundsDetailList(accountRequestFundsDetailVos);
-                    currencyList.addAll(accountRequestFundsDetailVos.stream().map(AccountRequestFundsDetailVo::getCurrency).collect(Collectors.toList()));
+                    if(type==1){
+                        // 赋值业务员名称
+                        UserUtil.assignmentNickName(accountRequestFundsDetailVos, AccountRequestFundsDetailVo::getCreateUser, AccountRequestFundsDetailVo::setUserName);
+                        p.setAccountRequestFundsDetailList(accountRequestFundsDetailVos);
+                        currencyList.addAll(accountRequestFundsDetailVos.stream().map(AccountRequestFundsDetailVo::getCurrency).collect(Collectors.toList()));
+                    }
+
                 }
             } else {//取数据汇率
                 /**
                  * 处理到账金额
                  */
                 List<ClaimContract> cList = claimContractMap.getOrDefault(p.getContractId(), new ArrayList<>());
-                List<Long> warterIds = cList.stream().distinct().map(ClaimContract::getBusinessId).collect(Collectors.toList());
-                if (CollectionUtils.isNotEmpty(warterIds)) {
-                    //查出流水
-                    List<AccountRunningWater> accountRunningWaterList = accountRunningWaterService.list(Wrappers.<AccountRunningWater>query().lambda().in(AccountRunningWater::getId, warterIds));
-                    Map<Long, BigDecimal> waterMap = accountRunningWaterList.stream().collect(Collectors.toMap(AccountRunningWater::getId, AccountRunningWater::getRate));
+//                List<Long> warterIds = cList.stream().distinct().map(ClaimContract::getBusinessId).collect(Collectors.toList());
+                if (CollectionUtils.isNotEmpty(cList)) {
+//                    //查出流水
+//                    List<AccountRunningWater> accountRunningWaterList = accountRunningWaterService.list(Wrappers.<AccountRunningWater>query().lambda().in(AccountRunningWater::getId, warterIds));
+//                    Map<Long, BigDecimal> waterMap = accountRunningWaterList.stream().collect(Collectors.toMap(AccountRunningWater::getId, AccountRunningWater::getRate));
                     BigDecimal contractArrival = cList.stream().map(claimContract -> {
                         //获取汇率
-                        BigDecimal rate = waterMap.getOrDefault(claimContract.getBusinessId(), BigDecimal.ONE);
+                        BigDecimal rate = claimContract.getRate();
                         // 获取金额
                         BigDecimal money = claimContract.getMoney();
                         // 返回兑人民币后金额
                         return rate.multiply(money);
                     }).reduce(BigDecimal.ZERO, BigDecimal::add);
                     p.setContractArrival(contractArrival);
-                    // 赋值业务员名称
-                    UserUtil.assignmentNickName(cList, ClaimContract::getCreateUser, ClaimContract::setUserName);
-                    p.setClaimList(cList);
-                    currencyList.addAll(cList.stream().map(ClaimContract::getCurrency).collect(Collectors.toList()));
+                    if(type==1){
+                        // 赋值业务员名称
+                        UserUtil.assignmentNickName(cList, ClaimContract::getCreateUser, ClaimContract::setUserName);
+                        p.setClaimList(cList);
+                        currencyList.addAll(cList.stream().map(ClaimContract::getCurrency).collect(Collectors.toList()));
+                    }
+
                 }
                 /**
                  * 处理退税金额
@@ -355,10 +402,13 @@ public class SaleStatementServiceImpl implements SaleStatementService {
                         return rate.multiply(money);
                     }).reduce(BigDecimal.ZERO, BigDecimal::add);
                     p.setTaxReturnMoney(taxReturnMoney);
-                    // 赋值业务员名称
-                    UserUtil.assignmentNickName(rList, TaxRefundDetails::getCreateUser, TaxRefundDetails::setUserName);
-                    p.setTaxReturnList(rList);
-                    currencyList.addAll(rList.stream().map(TaxRefundDetails::getCurrency).collect(Collectors.toList()));
+                    if(type==1){
+                        // 赋值业务员名称
+                        UserUtil.assignmentNickName(rList, TaxRefundDetails::getCreateUser, TaxRefundDetails::setUserName);
+                        p.setTaxReturnList(rList);
+                        currencyList.addAll(rList.stream().map(TaxRefundDetails::getCurrency).collect(Collectors.toList()));
+                    }
+
                 }
                 /**
                  * 处理采购金额
@@ -375,23 +425,26 @@ public class SaleStatementServiceImpl implements SaleStatementService {
                         return rate.multiply(money);
                     }).reduce(BigDecimal.ZERO, BigDecimal::add);
                     p.setPurchaseAmount(purchaseAmount);
-                    p.setPurchaseList(pList);
-                    currencyList.addAll(pList.stream().map(Purchase::getCurrency).collect(Collectors.toList()));
-                    /**
-                     * 处理支付款金额
-                     */
-                    List<Long> purchaseIds = pList.stream().map(Purchase::getId).collect(Collectors.toList());
-                    List<Pay> payList = payDetailService.getSumMoney(purchaseIds);
-                    if (CollectionUtils.isNotEmpty(payList)) {
-                        BigDecimal payAmount = payList.stream().map(pay -> {
-                            //获取汇率
-                            BigDecimal rate = pay.getRate()==null?BigDecimal.ONE:pay.getRate();
-                            // 获取认领金额
-                            BigDecimal money = pay.getAmount()==null?BigDecimal.ZERO:pay.getAmount();
-                            // 返回兑人民币后金额
-                            return rate.multiply(money);
-                        }).reduce(BigDecimal.ZERO, BigDecimal::add);
-                        p.setPayForGoods(payAmount);
+                    if(type==1){
+                        p.setPurchaseList(pList);
+                        currencyList.addAll(pList.stream().map(Purchase::getCurrency).collect(Collectors.toList()));
+                    }
+                }
+                /**
+                 * 处理支付款金额
+                 */
+                List<Pay> payList = payMap.getOrDefault(p.getContractId(), null);
+                if (CollectionUtils.isNotEmpty(payList)) {
+                    BigDecimal payAmount = payList.stream().map(pay -> {
+                        //获取汇率
+                        BigDecimal rate = pay.getRate()==null?BigDecimal.ONE:pay.getRate();
+                        // 获取认领金额
+                        BigDecimal money = pay.getAmount()==null?BigDecimal.ZERO:pay.getAmount();
+                        // 返回兑人民币后金额
+                        return rate.multiply(money);
+                    }).reduce(BigDecimal.ZERO, BigDecimal::add);
+                    p.setPayForGoods(payAmount);
+                    if(type==1){
                         // 赋值业务员名称
                         UserUtil.assignmentNickName(payList, Pay::getCreateUser, Pay::setUserName);
                         p.setPayList(payList);
@@ -401,7 +454,7 @@ public class SaleStatementServiceImpl implements SaleStatementService {
                 /**
                  * 其他收入金额
                  */
-                List<AccountRequestFundsDetailVo> accountRequestFundsDetailVos = accountRequestFundsDetailService.getListByContractId(p.getContractId());
+                List<AccountRequestFundsDetailVo> accountRequestFundsDetailVos = accountRequestFundsDetailVoMap.getOrDefault(p.getContractId(), null);
                 if (CollectionUtils.isNotEmpty(accountRequestFundsDetailVos)) {
                     BigDecimal otherExpenses = accountRequestFundsDetailVos.stream().map(acc -> {
                         //获取汇率
@@ -412,19 +465,34 @@ public class SaleStatementServiceImpl implements SaleStatementService {
                         return rate.multiply(money);
                     }).reduce(BigDecimal.ZERO, BigDecimal::add);
                     p.setOtherExpenses(otherExpenses);
-                    // 赋值业务员名称
-                    UserUtil.assignmentNickName(accountRequestFundsDetailVos, AccountRequestFundsDetailVo::getCreateUser, AccountRequestFundsDetailVo::setUserName);
-                    p.setAccountRequestFundsDetailList(accountRequestFundsDetailVos);
-                    currencyList.addAll(accountRequestFundsDetailVos.stream().map(AccountRequestFundsDetailVo::getCurrency).collect(Collectors.toList()));
+                    if(type==1){
+                        // 赋值业务员名称
+                        UserUtil.assignmentNickName(accountRequestFundsDetailVos, AccountRequestFundsDetailVo::getCreateUser, AccountRequestFundsDetailVo::setUserName);
+                        p.setAccountRequestFundsDetailList(accountRequestFundsDetailVos);
+                        currencyList.addAll(accountRequestFundsDetailVos.stream().map(AccountRequestFundsDetailVo::getCurrency).collect(Collectors.toList()));
+                    }
+
                 }
             }
-            p.setCurrencyList(currencyRateList.stream()
-                    .filter((CurrencyRate c) ->currencyList.contains(c.getType()))
-                    .collect(Collectors.toList()));
+            if(type==1){
+                p.setCurrencyList(currencyRateList.stream()
+                        .filter((CurrencyRate c) ->currencyList.contains(c.getType()))
+                        .collect(Collectors.toList()));
+            }
         }
     }
 
     /**
+     * 利润结算表头部统计
+     * @param dto
+     * @return
+     */
+    @Override
+    public Page<ContractBudgetVo> getProfitClearingPageHeadStatistics(ContractSelectDto dto) {
+        return null;
+    }
+
+    /**
      * 赋值采购合同金额和支付货款
      */
     private void setPurchaseAmountAndPayForGoods(
@@ -518,6 +586,52 @@ public class SaleStatementServiceImpl implements SaleStatementService {
     }
 
     /**
+     * 统计数据
+     */
+    private Map<String,Object> sumData(List<ProfitSettlementVo> list) {
+        Map<String,Object> map = new HashMap<>();
+        BigDecimal contractSumAmount = BigDecimal.ZERO;
+        BigDecimal purchaseSumAmount = BigDecimal.ZERO;
+        BigDecimal contractArrivalSumAmount = BigDecimal.ZERO;
+        BigDecimal taxReturnMoneySumAmount = BigDecimal.ZERO;
+        BigDecimal otherIncomeSumAmount = BigDecimal.ZERO;
+        BigDecimal payForGoodsSumAmount = BigDecimal.ZERO;
+        BigDecimal otherExpensesSumAmount = BigDecimal.ZERO;
+        BigDecimal totalIncomeSumAmount = BigDecimal.ZERO;
+        BigDecimal totalExpensesSumAmount = BigDecimal.ZERO;
+        BigDecimal grossProfitMargin = BigDecimal.ZERO;
+        for (ProfitSettlementVo p : list) {
+            contractSumAmount = contractSumAmount.add(p.getContractAmount());//合同金额
+            contractArrivalSumAmount = contractArrivalSumAmount.add(p.getContractArrival());//合同到账
+            taxReturnMoneySumAmount = taxReturnMoneySumAmount.add(p.getTaxReturnMoney());//退税
+            otherIncomeSumAmount = otherIncomeSumAmount.add(p.getOtherIncome());//其他收入
+            payForGoodsSumAmount = payForGoodsSumAmount.add(p.getPayForGoods());//支付货款
+            otherExpensesSumAmount = otherExpensesSumAmount.add(p.getOtherExpenses());//其他支出
+            totalIncomeSumAmount = totalIncomeSumAmount.add(p.getTotalIncome());//收入
+            totalExpensesSumAmount = totalExpensesSumAmount.add(p.getTotalExpenses());//支出
+            purchaseSumAmount = purchaseSumAmount.add(p.getPurchaseAmount());
+        }
+        //计算总毛利和总毛利率
+        BigDecimal grossProfitSum = totalIncomeSumAmount.subtract(totalExpensesSumAmount);//毛利
+        if (totalIncomeSumAmount.compareTo(BigDecimal.ZERO)>0) {
+            grossProfitMargin = new BigDecimal("100").multiply(grossProfitSum).divide(totalIncomeSumAmount, 2, RoundingMode.HALF_UP);//毛利率
+        }
+        map.put("GrossProfitMargin",grossProfitMargin);
+        map.put("contractSumAmount",contractSumAmount);
+        map.put("contractCount",list.size());
+        map.put("purchaseSumAmount",purchaseSumAmount);
+        map.put("contractArrivalSumAmount",contractArrivalSumAmount);
+        map.put("taxReturnMoneySumAmount",taxReturnMoneySumAmount);
+        map.put("otherIncomeSumAmount",otherIncomeSumAmount);
+        map.put("payForGoodsSumAmount",payForGoodsSumAmount);
+        map.put("otherExpensesSumAmount",otherExpensesSumAmount);
+        map.put("totalIncomeSumAmount",totalIncomeSumAmount);
+        map.put("totalExpensesSumAmount",totalExpensesSumAmount);
+        map.put("grossProfitSum",grossProfitSum);
+        return map;
+    }
+
+    /**
      * 转page
      */
     private Page<ProfitSettlementVo> toPage(Page<ContractVo> contractPage, List<ProfitSettlementVo> list) {

+ 30 - 0
hx-sale/src/main/resources/mapper/contract/ContractMapper.xml

@@ -48,6 +48,34 @@
                 ) t1
             ${ew.customSqlSegment}
     </select>
+    <select id="getProfitSettlementHead" resultType="com.fjhx.sale.entity.contract.vo.ContractVo">
+        SELECT
+            id,
+            IFNULL(amount,0) AS amount,
+            IFNULL(rate,0) AS rate,
+            currency_rate_json
+        FROM
+            (
+                SELECT *
+                FROM
+                    (SELECT t1.*,
+                            CASE
+                                WHEN ( IFNULL( t1.amount, 0 ) * IFNULL( t1.advance_ratio / 100, 0 ) - t1.sumClaimMoney ) &lt;=  0 THEN
+                                    20
+                                WHEN t1.sumClaimMoney = 0 THEN
+                                    0
+                                ELSE 10
+                                END                                   AS refundStatusNew
+                     FROM (SELECT t1.*,
+                                  (SELECT IFNULL(SUM(IFNULL(cc.money, 0) * IFNULL(arw.rate, 1)), 0)
+                                   FROM claim_contract cc
+                                            left join claim c on cc.claim_id = c.id
+                                            LEFT JOIN bytesailing_account.account_running_water arw on c.business_id = arw.id
+                                   WHERE cc.contract_id = t1.id) AS sumClaimMoney
+                           FROM contract t1) t1) t1
+            ) t1
+            ${ew.customSqlSegment}
+    </select>
     <select id="getProfitClearingPage" resultType="com.fjhx.sale.entity.contract.vo.ContractBudgetVo">
         SELECT t1.id AS contractId,
                t1.*
@@ -298,4 +326,6 @@
         </set>
         where id = #{upId}
     </update>
+
+
 </mapper>

+ 55 - 20
hx-sale/src/main/resources/mapper/intermediate/IntermediateContractMapper.xml

@@ -2,26 +2,58 @@
 <!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
+        SELECT
+            d.id,
+            c.CODE,
+            c.amount,
+            c.currency,
+            c.sell_corporation_id,
+            c.buy_corporation_id,
+            d.create_user,
+            c.flow_id AS flowId,
+            c.id AS cId
+        FROM
+            documents d
+        LEFT JOIN contract c ON d.contract_id = c.id
+            ${ew.customSqlSegment}
+    </select>
+    <select id="getPage2" resultType="com.fjhx.sale.entity.intermediate.vo.IntermediateContractVo">
+        SELECT
+            t1.*,
+            MAX( d.create_time ),
+            d.id AS documentsId,
+            SUM( c.amount ) AS amount,
+            c.flow_id AS flowId,
+            (
+                SELECT
+                    c.`code`
+                FROM
+                    intermediate_contract i
+                        JOIN documents d ON FIND_IN_SET( d.id, i.documents_ids )
+                        LEFT JOIN contract c ON d.contract_id = c.id
+                WHERE
+                    i.id = t1.id
+                ORDER BY
+                    d.create_time DESC
+                LIMIT 1
+            ) AS `code`,
+            (
+            SELECT
+                c.id
+            FROM
+                intermediate_contract i
+                JOIN documents d ON FIND_IN_SET( d.id, i.documents_ids )
+                LEFT JOIN contract c ON d.contract_id = c.id
+            WHERE
+                i.id = t1.id
+            ORDER BY
+                d.create_time DESC
+                LIMIT 1
+            ) AS `cId`
+        FROM
+            intermediate_contract t1
+            JOIN documents d ON FIND_IN_SET( d.id, t1.documents_ids )
+            LEFT JOIN contract c ON d.contract_id = c.id
             ${ew.customSqlSegment}
     </select>
 
@@ -34,4 +66,7 @@
             ${ew.customSqlSegment}
     </select>
 
+    <select id="getAllIds" resultType="java.lang.String">
+        select GROUP_CONCAT(documents_ids)AS ids FROM intermediate_contract
+    </select>
 </mapper>