Forráskód Böngészése

利润结算表统计头部

caozj 1 éve
szülő
commit
6e21cd01a5
17 módosított fájl, 389 hozzáadás és 74 törlés
  1. 7 0
      hx-account/src/main/java/com/fjhx/account/mapper/account/AccountRequestFundsDetailMapper.java
  2. 7 0
      hx-account/src/main/java/com/fjhx/account/service/account/AccountRequestFundsDetailService.java
  3. 10 0
      hx-account/src/main/java/com/fjhx/account/service/account/impl/AccountRequestFundsDetailServiceImpl.java
  4. 19 0
      hx-account/src/main/resources/mapper/account/AccountRequestFundsDetailMapper.xml
  5. 6 0
      hx-purchase/src/main/java/com/fjhx/purchase/entity/pay/po/Pay.java
  6. 8 0
      hx-purchase/src/main/java/com/fjhx/purchase/mapper/pay/PayDetailMapper.java
  7. 8 0
      hx-purchase/src/main/java/com/fjhx/purchase/service/pay/PayDetailService.java
  8. 10 0
      hx-purchase/src/main/java/com/fjhx/purchase/service/pay/impl/PayDetailServiceImpl.java
  9. 22 0
      hx-purchase/src/main/resources/mapper/pay/PayDetailMapper.xml
  10. 9 0
      hx-sale/src/main/java/com/fjhx/sale/controller/statement/SaleStatementController.java
  11. 10 0
      hx-sale/src/main/java/com/fjhx/sale/entity/contract/vo/ContractVo.java
  12. 5 0
      hx-sale/src/main/java/com/fjhx/sale/mapper/contract/ContractMapper.java
  13. 5 0
      hx-sale/src/main/java/com/fjhx/sale/service/contract/ContractService.java
  14. 55 0
      hx-sale/src/main/java/com/fjhx/sale/service/contract/impl/ContractServiceImpl.java
  15. 4 0
      hx-sale/src/main/java/com/fjhx/sale/service/statement/SaleStatementService.java
  16. 176 74
      hx-sale/src/main/java/com/fjhx/sale/service/statement/impl/SaleStatementServiceImpl.java
  17. 28 0
      hx-sale/src/main/resources/mapper/contract/ContractMapper.xml

+ 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);
     List<AccountRequestFundsDetailVo> getListByContractId(Long contractId);
 
 
     /**
     /**
+     * 获取列表根据合同ID
+     * @param contractIds
+     * @return
+     */
+    List<AccountRequestFundsDetailVo> getListByContractIds(@Param("contractIds") List<Long> contractIds);
+
+    /**
      * 根据请款id获取请款明细列表
      * 根据请款id获取请款明细列表
      */
      */
     List<AccountRequestFundsDetailVo> listByAccountRequestFundsId(@Param("accountRequestFundsId") Long accountRequestFundsId);
     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);
     List<AccountRequestFundsDetailVo> getListByContractId(Long contractId);
 
 
     /**
     /**
+     * 根据合同IDS获取列表
+     * @param contractId
+     * @return
+     */
+    List<AccountRequestFundsDetailVo> getListByContractIds(List<Long> contractId);
+
+    /**
      * 根据请款id获取请款明细列表
      * 根据请款id获取请款明细列表
      */
      */
     List<AccountRequestFundsDetailVo> listByAccountRequestFundsId(Long accountRequestFundsId);
     List<AccountRequestFundsDetailVo> listByAccountRequestFundsId(Long accountRequestFundsId);

+ 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
      * @param eq
      * @return
      * @return

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

@@ -31,6 +31,25 @@
           AND t3.`status` = 10
           AND t3.`status` = 10
     </select>
     </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 id="listByAccountRequestFundsId" resultType="com.fjhx.account.entity.account.vo.AccountRequestFundsDetailVo">
         SELECT
         SELECT
             arfd.*,
             arfd.*,

+ 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)
     @TableField(exist = false)
     private Integer count;
     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<PayDetail> getPayMoneyCountByPurchaseId(@Param("ew") QueryWrapper<Object> queryWrapper);
 
 
     List<Pay> getPayDetailList(@Param("purchaseIds") List<Long> purchaseIds);
     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);
     Map<Long, BigDecimal> getPayMoneyCountByPurchaseId(List<Long> purchaseIdList);
 
 
     List<Pay> getSumMoney(List<Long> purchaseIds);
     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);
         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>
         </where>
     </select>
     </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>
 </mapper>

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

+ 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 Long contractCount;
 
 
     /**
     /**
+     * 合同总金额
+     */
+    private BigDecimal contractSumAmount;
+
+    /**
+     * 合同ID集合
+     */
+    private String contractIds;
+
+    /**
      * 总到账认领金额
      * 总到账认领金额
      */
      */
     private BigDecimal sumClaimMoney;
     private BigDecimal sumClaimMoney;

+ 5 - 0
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);
     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);
     Page<ContractBudgetVo> getProfitBudgetPage(@Param("page") Page<Object> page, @Param("ew") IWrapper<Contract> wrapper);

+ 5 - 0
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);
     Page<ContractVo> getProfitSettlement(ProfitSettlementDto dto);
 
 
     /**
     /**
+     * 利润结算表分页统计头部
+     */
+    List<ContractVo> getProfitSettlementHead(ProfitSettlementDto dto);
+
+    /**
      * 外销合同表分页 不过滤权限
      * 外销合同表分页 不过滤权限
      */
      */
     Page<ContractVo> getPage1(ContractSelectDto dto);
     Page<ContractVo> getPage1(ContractSelectDto dto);

+ 55 - 0
hx-sale/src/main/java/com/fjhx/sale/service/contract/impl/ContractServiceImpl.java

@@ -13,10 +13,13 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fjhx.account.controller.utils.DateUtils;
 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.AccountRequestFundsDetailVo;
 import com.fjhx.account.entity.account.vo.AccountRunningWaterVo;
 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.AccountManagementService;
 import com.fjhx.account.service.account.AccountRequestFundsDetailService;
 import com.fjhx.account.service.account.AccountRequestFundsDetailService;
+import com.fjhx.account.service.tax.TaxRefundDetailsService;
 import com.fjhx.area.service.SetCustomizeAreaId;
 import com.fjhx.area.service.SetCustomizeAreaId;
 import com.fjhx.area.utils.CustomizeAreaUtil;
 import com.fjhx.area.utils.CustomizeAreaUtil;
 import com.fjhx.common.constant.SourceConstant;
 import com.fjhx.common.constant.SourceConstant;
@@ -39,11 +42,14 @@ import com.fjhx.flow.service.flow.FlowExampleService;
 import com.fjhx.item.entity.product.dto.ProductInfoSelectDto;
 import com.fjhx.item.entity.product.dto.ProductInfoSelectDto;
 import com.fjhx.item.service.product.ProductInfoService;
 import com.fjhx.item.service.product.ProductInfoService;
 import com.fjhx.purchase.entity.arrival.po.ArrivalDetail;
 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.Purchase;
 import com.fjhx.purchase.entity.purchase.po.PurchaseDetail;
 import com.fjhx.purchase.entity.purchase.po.PurchaseDetail;
 import com.fjhx.purchase.entity.purchase.vo.PurchaseDetailVo;
 import com.fjhx.purchase.entity.purchase.vo.PurchaseDetailVo;
 import com.fjhx.purchase.entity.quality.po.QualityDetail;
 import com.fjhx.purchase.entity.quality.po.QualityDetail;
 import com.fjhx.purchase.service.arrival.ArrivalDetailService;
 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.PurchaseDetailService;
 import com.fjhx.purchase.service.purchase.PurchaseService;
 import com.fjhx.purchase.service.purchase.PurchaseService;
 import com.fjhx.purchase.service.quality.QualityDetailService;
 import com.fjhx.purchase.service.quality.QualityDetailService;
@@ -62,6 +68,7 @@ import com.fjhx.sale.entity.contract.vo.*;
 import com.fjhx.sale.entity.purchase.vo.EhsdPurchaseProductVo;
 import com.fjhx.sale.entity.purchase.vo.EhsdPurchaseProductVo;
 import com.fjhx.sale.entity.sale.vo.SaleQuotationVo;
 import com.fjhx.sale.entity.sale.vo.SaleQuotationVo;
 import com.fjhx.sale.entity.statement.dto.ProfitSettlementDto;
 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.mapper.contract.ContractMapper;
 import com.fjhx.sale.service.claim.ClaimContractService;
 import com.fjhx.sale.service.claim.ClaimContractService;
 import com.fjhx.sale.service.contract.ContractProductService;
 import com.fjhx.sale.service.contract.ContractProductService;
@@ -70,9 +77,11 @@ import com.fjhx.sale.service.contract.ContractService;
 import com.fjhx.sale.service.contract.ContractShipmentService;
 import com.fjhx.sale.service.contract.ContractShipmentService;
 import com.fjhx.sale.service.purchase.EhsdPurchaseProductService;
 import com.fjhx.sale.service.purchase.EhsdPurchaseProductService;
 import com.fjhx.sale.service.purchase.EhsdPurchaseService;
 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.dto.DictTenantDataSelectDto;
 import com.fjhx.tenant.entity.dict.vo.DictTenantDataVo;
 import com.fjhx.tenant.entity.dict.vo.DictTenantDataVo;
 import com.fjhx.tenant.service.dict.DictTenantDataService;
 import com.fjhx.tenant.service.dict.DictTenantDataService;
+import com.github.pagehelper.util.StringUtil;
 import com.ruoyi.common.core.domain.BaseIdPo;
 import com.ruoyi.common.core.domain.BaseIdPo;
 import com.ruoyi.common.core.domain.BasePo;
 import com.ruoyi.common.core.domain.BasePo;
 import com.ruoyi.common.core.domain.BaseSelectDto;
 import com.ruoyi.common.core.domain.BaseSelectDto;
@@ -151,6 +160,9 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
     private ClaimContractService claimContractService;
     private ClaimContractService claimContractService;
 
 
     @Autowired
     @Autowired
+    private TaxRefundDetailsService taxRefundDetailsService;
+
+    @Autowired
     private AccountRequestFundsDetailService accountRequestFundsDetailService;
     private AccountRequestFundsDetailService accountRequestFundsDetailService;
 
 
     @Autowired
     @Autowired
@@ -163,6 +175,9 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
     private PurchaseService purchaseService;
     private PurchaseService purchaseService;
 
 
     @Autowired
     @Autowired
+    private PayDetailService payDetailService;
+
+    @Autowired
     private ArrivalDetailService arrivalDetailService;
     private ArrivalDetailService arrivalDetailService;
 
 
     @Autowired
     @Autowired
@@ -179,6 +194,9 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
 
 
     @Autowired
     @Autowired
     private CodingRuleService codingRuleService;
     private CodingRuleService codingRuleService;
+
+    @Autowired
+    private SaleStatementService saleStatementService;
     /**
     /**
      * 分页
      * 分页
      *
      *
@@ -234,10 +252,47 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
             }
             }
         }
         }
         Page<ContractVo> page = baseMapper.getProfitSettlement(dto.getPage(),wrapper);
         Page<ContractVo> page = baseMapper.getProfitSettlement(dto.getPage(),wrapper);
+
         return page;
         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
     @Override

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

@@ -6,10 +6,14 @@ import com.fjhx.sale.entity.contract.vo.ContractBudgetVo;
 import com.fjhx.sale.entity.statement.dto.ProfitSettlementDto;
 import com.fjhx.sale.entity.statement.dto.ProfitSettlementDto;
 import com.fjhx.sale.entity.statement.vo.ProfitSettlementVo;
 import com.fjhx.sale.entity.statement.vo.ProfitSettlementVo;
 
 
+import java.util.Map;
+
 public interface SaleStatementService {
 public interface SaleStatementService {
 
 
     Page<ProfitSettlementVo> getProfitSettlement(ProfitSettlementDto dto);
     Page<ProfitSettlementVo> getProfitSettlement(ProfitSettlementDto dto);
 
 
+    Map<String,Object> getProfitSettlementHead(ProfitSettlementDto dto);
+
     /**
     /**
      * 利润结算头部统计
      * 利润结算头部统计
      */
      */

+ 176 - 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.enums.FlowStatusEnum1;
 import com.fjhx.common.service.currency.CurrencyRateService;
 import com.fjhx.common.service.currency.CurrencyRateService;
 import com.fjhx.customer.service.customer.CustomerService;
 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.pay.po.Pay;
 import com.fjhx.purchase.entity.purchase.enums.PurchaseStatusEnum;
 import com.fjhx.purchase.entity.purchase.enums.PurchaseStatusEnum;
 import com.fjhx.purchase.entity.purchase.po.Purchase;
 import com.fjhx.purchase.entity.purchase.po.Purchase;
@@ -100,10 +101,8 @@ public class SaleStatementServiceImpl implements SaleStatementService {
         customerService.attributeAssign(list, ProfitSettlementVo::getCustomerId, (item, customer) -> {
         customerService.attributeAssign(list, ProfitSettlementVo::getCustomerId, (item, customer) -> {
             item.setCustomerName(customer.getName());
             item.setCustomerName(customer.getName());
         });
         });
-        // 获取默认税率
-        Map<String, BigDecimal> defaultRateMap = new HashMap<>();
         //赋值合同到账金额、退税金额、采购金额
         //赋值合同到账金额、退税金额、采购金额
-        setContractArrivalAndRefundMoney(list);
+        setContractArrivalAndRefundMoney(list,1);
         // 计算
         // 计算
         calculation(list);
         calculation(list);
         // 转page
         // 转page
@@ -111,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(
     private Map<Long, Map<String, BigDecimal>> getDetailsRateMap(
@@ -200,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<CurrencyRate> currencyRateList = currencyRateService.list();
 
 
         List<String> currencyList = new ArrayList<>();
         List<String> currencyList = new ArrayList<>();
@@ -216,9 +237,17 @@ public class SaleStatementServiceImpl implements SaleStatementService {
         Map<Long, List<TaxRefundDetails>> refundDetailsMap = refundDetails.stream().collect(Collectors.groupingBy(TaxRefundDetails::getContractId));
         Map<Long, List<TaxRefundDetails>> refundDetailsMap = refundDetails.stream().collect(Collectors.groupingBy(TaxRefundDetails::getContractId));
 
 
         //通过合同IDS查询出采购数据
         //通过合同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));
         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) {
         for (ProfitSettlementVo p : list) {
             currencyList.add(p.getCurrency());
             currencyList.add(p.getCurrency());
             if (StringUtil.isNotEmpty(p.getCurrencyRateJson())) {//取设置的汇率
             if (StringUtil.isNotEmpty(p.getCurrencyRateJson())) {//取设置的汇率
@@ -238,10 +267,13 @@ public class SaleStatementServiceImpl implements SaleStatementService {
                         return rate.multiply(money);
                         return rate.multiply(money);
                     }).reduce(BigDecimal.ZERO, BigDecimal::add);
                     }).reduce(BigDecimal.ZERO, BigDecimal::add);
                     p.setContractArrival(contractArrival);
                     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()));
+                    }
+
                 }
                 }
                 /**
                 /**
                  * 处理退税金额
                  * 处理退税金额
@@ -257,10 +289,13 @@ public class SaleStatementServiceImpl implements SaleStatementService {
                         return rate.multiply(money);
                         return rate.multiply(money);
                     }).reduce(BigDecimal.ZERO, BigDecimal::add);
                     }).reduce(BigDecimal.ZERO, BigDecimal::add);
                     p.setTaxReturnMoney(taxReturnMoney);
                     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()));
+                    }
+
                 }
                 }
                 /**
                 /**
                  * 处理采购金额
                  * 处理采购金额
@@ -277,23 +312,26 @@ public class SaleStatementServiceImpl implements SaleStatementService {
                         return rate.multiply(money);
                         return rate.multiply(money);
                     }).reduce(BigDecimal.ZERO, BigDecimal::add);
                     }).reduce(BigDecimal.ZERO, BigDecimal::add);
                     p.setPurchaseAmount(purchaseAmount);
                     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);
                         UserUtil.assignmentNickName(payList, Pay::getCreateUser, Pay::setUserName);
                         p.setPayList(payList);
                         p.setPayList(payList);
@@ -303,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)) {
                 if (CollectionUtils.isNotEmpty(accountRequestFundsDetailVos)) {
                     BigDecimal otherExpenses = accountRequestFundsDetailVos.stream().map(acc -> {
                     BigDecimal otherExpenses = accountRequestFundsDetailVos.stream().map(acc -> {
                         //获取汇率
                         //获取汇率
@@ -314,34 +353,40 @@ public class SaleStatementServiceImpl implements SaleStatementService {
                         return rate.multiply(money);
                         return rate.multiply(money);
                     }).reduce(BigDecimal.ZERO, BigDecimal::add);
                     }).reduce(BigDecimal.ZERO, BigDecimal::add);
                     p.setOtherExpenses(otherExpenses);
                     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 {//取数据汇率
             } else {//取数据汇率
                 /**
                 /**
                  * 处理到账金额
                  * 处理到账金额
                  */
                  */
                 List<ClaimContract> cList = claimContractMap.getOrDefault(p.getContractId(), new ArrayList<>());
                 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 contractArrival = cList.stream().map(claimContract -> {
                         //获取汇率
                         //获取汇率
-                        BigDecimal rate = waterMap.getOrDefault(claimContract.getBusinessId(), BigDecimal.ONE);
+                        BigDecimal rate = claimContract.getRate();
                         // 获取金额
                         // 获取金额
                         BigDecimal money = claimContract.getMoney();
                         BigDecimal money = claimContract.getMoney();
                         // 返回兑人民币后金额
                         // 返回兑人民币后金额
                         return rate.multiply(money);
                         return rate.multiply(money);
                     }).reduce(BigDecimal.ZERO, BigDecimal::add);
                     }).reduce(BigDecimal.ZERO, BigDecimal::add);
                     p.setContractArrival(contractArrival);
                     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()));
+                    }
+
                 }
                 }
                 /**
                 /**
                  * 处理退税金额
                  * 处理退税金额
@@ -357,10 +402,13 @@ public class SaleStatementServiceImpl implements SaleStatementService {
                         return rate.multiply(money);
                         return rate.multiply(money);
                     }).reduce(BigDecimal.ZERO, BigDecimal::add);
                     }).reduce(BigDecimal.ZERO, BigDecimal::add);
                     p.setTaxReturnMoney(taxReturnMoney);
                     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()));
+                    }
+
                 }
                 }
                 /**
                 /**
                  * 处理采购金额
                  * 处理采购金额
@@ -377,23 +425,26 @@ public class SaleStatementServiceImpl implements SaleStatementService {
                         return rate.multiply(money);
                         return rate.multiply(money);
                     }).reduce(BigDecimal.ZERO, BigDecimal::add);
                     }).reduce(BigDecimal.ZERO, BigDecimal::add);
                     p.setPurchaseAmount(purchaseAmount);
                     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);
                         UserUtil.assignmentNickName(payList, Pay::getCreateUser, Pay::setUserName);
                         p.setPayList(payList);
                         p.setPayList(payList);
@@ -403,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)) {
                 if (CollectionUtils.isNotEmpty(accountRequestFundsDetailVos)) {
                     BigDecimal otherExpenses = accountRequestFundsDetailVos.stream().map(acc -> {
                     BigDecimal otherExpenses = accountRequestFundsDetailVos.stream().map(acc -> {
                         //获取汇率
                         //获取汇率
@@ -414,15 +465,20 @@ public class SaleStatementServiceImpl implements SaleStatementService {
                         return rate.multiply(money);
                         return rate.multiply(money);
                     }).reduce(BigDecimal.ZERO, BigDecimal::add);
                     }).reduce(BigDecimal.ZERO, BigDecimal::add);
                     p.setOtherExpenses(otherExpenses);
                     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()));
+            }
         }
         }
     }
     }
 
 
@@ -530,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
      * 转page
      */
      */
     private Page<ProfitSettlementVo> toPage(Page<ContractVo> contractPage, List<ProfitSettlementVo> list) {
     private Page<ProfitSettlementVo> toPage(Page<ContractVo> contractPage, List<ProfitSettlementVo> list) {

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

@@ -48,6 +48,34 @@
                 ) t1
                 ) t1
             ${ew.customSqlSegment}
             ${ew.customSqlSegment}
     </select>
     </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 id="getProfitClearingPage" resultType="com.fjhx.sale.entity.contract.vo.ContractBudgetVo">
         SELECT t1.id AS contractId,
         SELECT t1.id AS contractId,
                t1.*
                t1.*