Bläddra i källkod

Merge remote-tracking branch 'origin/test' into test

yzc 1 år sedan
förälder
incheckning
a96b2cc477
28 ändrade filer med 647 tillägg och 109 borttagningar
  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. 2 1
      hx-account/src/main/resources/mapper/tax/TaxRefundDetailsMapper.xml
  6. 6 0
      hx-purchase/src/main/java/com/fjhx/purchase/entity/pay/po/Pay.java
  7. 8 0
      hx-purchase/src/main/java/com/fjhx/purchase/mapper/pay/PayDetailMapper.java
  8. 8 0
      hx-purchase/src/main/java/com/fjhx/purchase/service/pay/PayDetailService.java
  9. 10 0
      hx-purchase/src/main/java/com/fjhx/purchase/service/pay/impl/PayDetailServiceImpl.java
  10. 22 0
      hx-purchase/src/main/resources/mapper/pay/PayDetailMapper.xml
  11. 7 0
      hx-sale/src/main/java/com/fjhx/sale/controller/intermediate/IntermediateContractController.java
  12. 9 0
      hx-sale/src/main/java/com/fjhx/sale/controller/statement/SaleStatementController.java
  13. 5 0
      hx-sale/src/main/java/com/fjhx/sale/entity/claim/po/Claim.java
  14. 0 1
      hx-sale/src/main/java/com/fjhx/sale/entity/claim/po/ClaimContract.java
  15. 10 0
      hx-sale/src/main/java/com/fjhx/sale/entity/contract/vo/ContractVo.java
  16. 76 0
      hx-sale/src/main/java/com/fjhx/sale/entity/intermediate/vo/IntermediateContractVo.java
  17. 5 1
      hx-sale/src/main/java/com/fjhx/sale/entity/serviceContract/dto/ServiceContractDto.java
  18. 10 0
      hx-sale/src/main/java/com/fjhx/sale/flow/ServiceContractFlow.java
  19. 5 0
      hx-sale/src/main/java/com/fjhx/sale/mapper/contract/ContractMapper.java
  20. 1 0
      hx-sale/src/main/java/com/fjhx/sale/service/claim/impl/ClaimServiceImpl.java
  21. 5 0
      hx-sale/src/main/java/com/fjhx/sale/service/contract/ContractService.java
  22. 83 7
      hx-sale/src/main/java/com/fjhx/sale/service/contract/impl/ContractServiceImpl.java
  23. 5 0
      hx-sale/src/main/java/com/fjhx/sale/service/intermediate/IntermediateContractService.java
  24. 43 17
      hx-sale/src/main/java/com/fjhx/sale/service/intermediate/impl/IntermediateContractServiceImpl.java
  25. 11 0
      hx-sale/src/main/java/com/fjhx/sale/service/statement/SaleStatementService.java
  26. 188 74
      hx-sale/src/main/java/com/fjhx/sale/service/statement/impl/SaleStatementServiceImpl.java
  27. 48 1
      hx-sale/src/main/resources/mapper/contract/ContractMapper.xml
  28. 37 7
      hx-sale/src/main/resources/mapper/intermediate/IntermediateContractMapper.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);
 
     /**
+     * 获取列表根据合同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);

+ 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

+ 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.*,

+ 2 - 1
hx-account/src/main/resources/mapper/tax/TaxRefundDetailsMapper.xml

@@ -17,7 +17,8 @@
     <select id="getSumMoneyByContractIds" resultType="com.fjhx.account.entity.tax.po.TaxRefundDetails">
         SELECT
             t1.*,
-            t2.rate AS rate
+            t2.rate AS rate,
+            t2.currency AS currency
         FROM
             tax_refund_details t1
         LEFT JOIN account_running_water t2 ON t1.account_running_water_id = t2.id

+ 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>

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

@@ -47,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());
+    }
 
     /**
      * 中间合同编辑

+ 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;
 
     /**

+ 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;

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

@@ -50,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;
     /**
      * 中间合同买方名称 多公司
      */
@@ -57,6 +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 - 1
hx-sale/src/main/java/com/fjhx/sale/entity/serviceContract/dto/ServiceContractDto.java

@@ -1,6 +1,7 @@
 package com.fjhx.sale.entity.serviceContract.dto;
 
 import com.fjhx.area.service.SetCustomizeAreaId;
+import com.fjhx.file.entity.ObsFile;
 import com.fjhx.sale.entity.serviceContract.po.ServiceContract;
 import com.fjhx.sale.entity.serviceContract.po.ServiceContractPay;
 import com.fjhx.sale.entity.serviceContract.po.ServiceContractProduct;
@@ -55,5 +56,8 @@ public class ServiceContractDto extends ServiceContract  implements SetCustomize
      */
     private Long countryId;
 
-
+    /**
+     * 文件列表
+     */
+    private List<ObsFile> fileList;
 }

+ 10 - 0
hx-sale/src/main/java/com/fjhx/sale/flow/ServiceContractFlow.java

@@ -11,6 +11,7 @@ import com.fjhx.common.enums.CodingRuleEnum;
 import com.fjhx.common.enums.FlowStatusEnum1;
 import com.fjhx.common.service.coding.CodingRuleService;
 import com.fjhx.common.utils.Assert;
+import com.fjhx.file.utils.ObsFileUtil;
 import com.fjhx.flow.core.FlowDelegate;
 import com.fjhx.flow.enums.FlowStatusEnum;
 import com.fjhx.sale.entity.serviceContract.dto.ServiceContractDto;
@@ -162,6 +163,15 @@ public class ServiceContractFlow extends FlowDelegate {
             serviceContractPayList.forEach(contractPay -> contractPay.setServiceContractId(contract.getId()));
             serviceContractPayService.saveOrUpdateBatch(serviceContractPayList);
         }
+        if (opType == 1) {
+            //重新发起编辑
+            // 交接单附件列表
+            ObsFileUtil.editFile(contract.getFileList(), contract.getId(), 1);
+        } else {
+            //普通提交新增
+            // 交接单附件列表
+            ObsFileUtil.saveFile(contract.getFileList(), contract.getId(), 1);
+        }
 
         return contract;
     }

+ 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);
 
     /**
+     * 利润结算表头部统计
+     */
+    List<ContractVo>  getProfitSettlementHead(@Param("ew") IWrapper<Contract> wrapper);
+
+    /**
      * 利润预算表
      */
     Page<ContractBudgetVo> getProfitBudgetPage(@Param("page") Page<Object> page, @Param("ew") IWrapper<Contract> wrapper);

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

+ 83 - 7
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.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;
@@ -39,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;
@@ -62,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,9 +77,11 @@ 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;
+import com.github.pagehelper.util.StringUtil;
 import com.ruoyi.common.core.domain.BaseIdPo;
 import com.ruoyi.common.core.domain.BasePo;
 import com.ruoyi.common.core.domain.BaseSelectDto;
@@ -151,6 +160,9 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
     private ClaimContractService claimContractService;
 
     @Autowired
+    private TaxRefundDetailsService taxRefundDetailsService;
+
+    @Autowired
     private AccountRequestFundsDetailService accountRequestFundsDetailService;
 
     @Autowired
@@ -163,6 +175,9 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
     private PurchaseService purchaseService;
 
     @Autowired
+    private PayDetailService payDetailService;
+
+    @Autowired
     private ArrivalDetailService arrivalDetailService;
 
     @Autowired
@@ -179,6 +194,9 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
 
     @Autowired
     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);
+
         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
@@ -257,16 +312,22 @@ 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.refund_status", Arrays.asList(dto.getRefundStatusNew().split(",")));
         }
-        if (StringUtils.isNotEmpty(dto.getKeyword())) {
-            wrapper.keyword(dto.getKeyword(), new SqlField("t1", Contract::getCode));
-        }
         if (StringUtils.isNotEmpty(dto.getUserId())) {
             wrapper.eq("t1", Contract::getCreateUser, dto.getUserId());
         }
@@ -1703,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);
@@ -1741,6 +1811,9 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
         }
         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));
         productInfoService.attributeAssign(contractProductList, ContractProduct::getProductId, (item, product) -> {
@@ -1748,7 +1821,10 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
             item.setProductCode(product.getCode());
             item.setProductUnit(product.getUnit());
         });
+        //查询合同其他收费项目
+        List<ContractProject> contractProjectList = contractProjectService.list(Wrappers.<ContractProject>query().lambda().in(ContractProject::getContractId,contractIds));
         map.put("contractProductList",contractProductList);
+        map.put("contractProjectList",contractProjectList);
         return map;
     }
 }

+ 5 - 0
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);

+ 43 - 17
hx-sale/src/main/java/com/fjhx/sale/service/intermediate/impl/IntermediateContractServiceImpl.java

@@ -9,7 +9,9 @@ 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;
@@ -32,6 +34,7 @@ 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;
 
 
@@ -54,6 +57,8 @@ public class IntermediateContractServiceImpl extends ServiceImpl<IntermediateCon
     private CustomerService customerService;
     @Autowired
     private CorporationService corporationService;
+    @Autowired
+    private FlowExampleService flowExampleService;
 
     @Override
     public Page<IntermediateContractVo> getPage(IntermediateContractSelectDto dto) {
@@ -63,13 +68,15 @@ public class IntermediateContractServiceImpl extends ServiceImpl<IntermediateCon
         IWrapper<IntermediateContract> wrapper = getWrapper();
         //买方公司过滤
         wrapper.orderByDesc("d.create_time");
-        wrapper.eq(StringUtils.isNotEmpty(dto.getKeyword()),"c.code", dto.getKeyword());
+        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();
-            wrapper.notIn("d.id",Arrays.asList(ids));
+            if(StringUtils.isNotEmpty(ids)){
+                wrapper.notIn("d.id",Arrays.asList(ids.split(",")));
+            }
             //卖方公司过滤
             page = this.baseMapper.getPage(dto.getPage(), wrapper);
         }else{//已创建
@@ -86,16 +93,10 @@ public class IntermediateContractServiceImpl extends ServiceImpl<IntermediateCon
         corporationService.attributeAssign(records, IntermediateContractVo::getSellCorporationId, (item, corporation) -> {
             item.setSellCorporationName(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;
     }
 
@@ -106,6 +107,15 @@ 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);
@@ -163,21 +173,37 @@ public class IntermediateContractServiceImpl extends ServiceImpl<IntermediateCon
     public IntermediateContract getPrintInfo(IntermediateContractDto dto) {
         Assert.notEmpty(dto.getId(), "参数异常");
         IntermediateContract in = this.getById(dto.getId());
-        IntermediateContractVo vo = new IntermediateContractVo();
-        BeanUtils.copyProperties(in,vo);
         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());
-        Corporation sellCorporation = corporationMap.get(in.getSellCorporationId());
+        //赋值买方信息
+        vo.setBuyContactNumber(in.getBuyContactNumber());
+        vo.setBuyContactName(in.getBuyContactName());
         if (ObjectUtil.isNotEmpty(buyCorporation)) {
-            vo.setBuyCorporationName(buyCorporation.getName());
+            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.setSellCorporationName(sellCorporation.getName());
+            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"));

+ 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(ObjectUtil.isEmpty(p.getContractAmount())?BigDecimal.ZERO:p.getContractAmount());//合同金额
+            contractArrivalSumAmount = contractArrivalSumAmount.add(ObjectUtil.isEmpty(p.getContractArrival())?BigDecimal.ZERO:p.getContractArrival());//合同到账
+            taxReturnMoneySumAmount = taxReturnMoneySumAmount.add(ObjectUtil.isEmpty(p.getTaxReturnMoney())?BigDecimal.ZERO:p.getTaxReturnMoney());//退税
+            otherIncomeSumAmount = otherIncomeSumAmount.add(ObjectUtil.isEmpty(p.getOtherIncome())?BigDecimal.ZERO:p.getOtherIncome());//其他收入
+            payForGoodsSumAmount = payForGoodsSumAmount.add(ObjectUtil.isEmpty(p.getPayForGoods())?BigDecimal.ZERO:p.getPayForGoods());//支付货款
+            otherExpensesSumAmount = otherExpensesSumAmount.add(ObjectUtil.isEmpty(p.getOtherExpenses())?BigDecimal.ZERO:p.getOtherExpenses());//其他支出
+            totalIncomeSumAmount = totalIncomeSumAmount.add(ObjectUtil.isEmpty(p.getTotalIncome())?BigDecimal.ZERO:p.getTotalIncome());//收入
+            totalExpensesSumAmount = totalExpensesSumAmount.add(ObjectUtil.isEmpty(p.getTotalExpenses())?BigDecimal.ZERO:p.getTotalExpenses());//支出
+            purchaseSumAmount = purchaseSumAmount.add(ObjectUtil.isEmpty(p.getPurchaseAmount())?BigDecimal.ZERO: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) {

+ 48 - 1
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.*
@@ -224,7 +252,7 @@
                arw.create_time,
                30                 type,
                arw.currency,
-               clc.money,
+               clc.money          amount,
                arw.remarks,
                am.`name`          accountManagementName,
                am.account_opening accountManagementOpening,
@@ -238,6 +266,25 @@
                            ON arw.account_management_id = am.id AND am.del_flag = 0
         WHERE arw.del_flag = 0
           AND c.id = #{contractId}
+        UNION ALL
+        SELECT arw.id,
+               arw.create_time,
+               40 AS              type,
+               arw.currency,
+               trd.amount,
+               arw.remarks,
+               am.`name`          accountManagementName,
+               am.account_opening accountManagementOpening,
+               arw.`name`,
+               arw.STATUS
+        FROM contract c
+                 JOIN bytesailing_account.tax_refund_details trd ON trd.contract_id = c.id
+            AND trd.del_flag = 0
+                 JOIN bytesailing_account.account_running_water arw ON trd.account_running_water_id = arw.id
+            AND arw.del_flag = 0
+                 LEFT JOIN bytesailing_account.account_management am ON arw.account_management_id = am.id
+            AND am.del_flag = 0
+        WHERE c.id = #{contractId}
     </select>
 
     <select id="getCustomerMoney" resultType="com.fjhx.sale.entity.contract.vo.ContractVo">

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

@@ -3,11 +3,15 @@
 <mapper namespace="com.fjhx.sale.mapper.intermediate.IntermediateContractMapper">
     <select id="getPage" resultType="com.fjhx.sale.entity.intermediate.vo.IntermediateContractVo">
         SELECT
+            d.id,
             c.CODE,
             c.amount,
             c.currency,
             c.sell_corporation_id,
-            c.buy_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
@@ -16,15 +20,41 @@
     <select id="getPage2" resultType="com.fjhx.sale.entity.intermediate.vo.IntermediateContractVo">
         SELECT
             t1.*,
-            MAX( d.create_time ) ,
+            MAX( d.create_time ),
             d.id AS documentsId,
-            c.`code`AS `code`,
-            c.amount AS amount
+            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}
+            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>
 
     <select id="contactList" resultType="com.fjhx.sale.entity.intermediate.vo.IntermediateContractVo">