فهرست منبع

利润结算表优化

caozj 1 سال پیش
والد
کامیت
a967a0a1f7

+ 15 - 1
hx-account/src/main/java/com/fjhx/account/entity/tax/po/TaxRefundDetails.java

@@ -1,10 +1,13 @@
 package com.fjhx.account.entity.tax.po;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.ruoyi.common.core.domain.BasePo;
 import lombok.Getter;
 import lombok.Setter;
 
+import java.math.BigDecimal;
+
 /**
  * <p>
  * 退税明细表
@@ -31,6 +34,17 @@ public class TaxRefundDetails extends BasePo {
     /**
      * 合同退税关联金额
      */
-    private Long amount;
+    private BigDecimal amount;
+
+    /**
+     * 汇率
+     */
+    @TableField(exist = false)
+    private BigDecimal rate;
 
+    /**
+     * 币种
+     */
+    @TableField(exist = false)
+    private String currency;
 }

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

@@ -7,6 +7,8 @@ import com.fjhx.account.entity.tax.vo.TaxRefundDetailsVo;
 import com.ruoyi.common.utils.wrapper.IWrapper;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.List;
+
 
 /**
  * <p>
@@ -23,4 +25,9 @@ public interface TaxRefundDetailsMapper extends BaseMapper<TaxRefundDetails> {
      */
     Page<TaxRefundDetailsVo> getPage(@Param("page") Page<Object> page, @Param("ew") IWrapper<TaxRefundDetails> wrapper);
 
+    /**
+     * 获取总退税金额
+     * @return
+     */
+    List<TaxRefundDetails> getSumMoneyByContractIds(@Param("ew") IWrapper<TaxRefundDetails> wrapper);
 }

+ 8 - 0
hx-account/src/main/java/com/fjhx/account/service/tax/TaxRefundDetailsService.java

@@ -6,6 +6,8 @@ import com.fjhx.account.entity.tax.po.TaxRefundDetails;
 import com.fjhx.account.entity.tax.vo.TaxRefundDetailsVo;
 import com.ruoyi.common.core.service.BaseService;
 
+import java.util.List;
+
 
 /**
  * <p>
@@ -22,4 +24,10 @@ public interface TaxRefundDetailsService extends BaseService<TaxRefundDetails> {
      */
     Page<TaxRefundDetailsVo> getPage(TaxRefundDetailsSelectDto dto);
 
+    /**
+     * 获取总退税金额
+     * @param contractIds
+     * @return
+     */
+    List<TaxRefundDetails> getSumMoneyByContractIds(List<Long> contractIds);
 }

+ 14 - 0
hx-account/src/main/java/com/fjhx/account/service/tax/impl/TaxRefundDetailsServiceImpl.java

@@ -10,6 +10,8 @@ import com.fjhx.account.service.tax.TaxRefundDetailsService;
 import com.ruoyi.common.utils.wrapper.IWrapper;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 
 /**
  * <p>
@@ -30,4 +32,16 @@ public class TaxRefundDetailsServiceImpl extends ServiceImpl<TaxRefundDetailsMap
         return page;
     }
 
+    /**
+     * 获取总退税金额
+     * @param contractIds
+     * @return
+     */
+    @Override
+    public List<TaxRefundDetails> getSumMoneyByContractIds(List<Long> contractIds) {
+        IWrapper<TaxRefundDetails> wrapper = getWrapper();
+        wrapper.in("t1",TaxRefundDetails::getContractId,contractIds);
+        return baseMapper.getSumMoneyByContractIds(wrapper);
+    }
+
 }

+ 10 - 0
hx-account/src/main/resources/mapper/tax/TaxRefundDetailsMapper.xml

@@ -14,4 +14,14 @@
             ${ew.customSqlSegment}
     </select>
 
+    <select id="getSumMoneyByContractIds" resultType="com.fjhx.account.entity.tax.po.TaxRefundDetails">
+        SELECT
+            t1.contract_id,
+            t1.amount,
+            t2.rate AS rate
+        FROM
+            tax_refund_details t1
+        LEFT JOIN account_running_water t2 ON t1.account_running_water_id = t2.id
+            ${ew.customSqlSegment}
+    </select>
 </mapper>

+ 5 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/statement/vo/ProfitSettlementVo.java

@@ -55,6 +55,11 @@ public class ProfitSettlementVo {
     private BigDecimal contractArrival = BigDecimal.ZERO;
 
     /**
+     * 退税金额
+     */
+    private BigDecimal taxReturnMoney = BigDecimal.ZERO;
+
+    /**
      * 其他收入
      */
     private BigDecimal otherIncome = BigDecimal.ZERO;

+ 50 - 12
hx-sale/src/main/java/com/fjhx/sale/service/statement/impl/SaleStatementServiceImpl.java

@@ -3,10 +3,13 @@ package com.fjhx.sale.service.statement.impl;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson2.JSON;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fjhx.account.entity.account.po.AccountRunningWater;
+import com.fjhx.account.entity.tax.po.TaxRefundDetails;
 import com.fjhx.account.service.account.AccountRunningWaterService;
+import com.fjhx.account.service.tax.TaxRefundDetailsService;
 import com.fjhx.common.entity.currency.po.CurrencyRate;
 import com.fjhx.common.service.currency.CurrencyRateService;
 import com.fjhx.customer.service.customer.CustomerService;
@@ -27,6 +30,7 @@ import com.fjhx.sale.service.statement.SaleStatementService;
 import com.github.pagehelper.util.StringUtil;
 import com.ruoyi.common.core.domain.BaseIdPo;
 import com.ruoyi.system.utils.UserUtil;
+import org.apache.commons.collections4.MapUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -51,6 +55,9 @@ public class SaleStatementServiceImpl implements SaleStatementService {
     private CurrencyRateService currencyRateService;
 
     @Autowired
+    private TaxRefundDetailsService taxRefundDetailsService;
+
+    @Autowired
     private ClaimContractService claimContractService;
 
     @Autowired
@@ -88,7 +95,7 @@ public class SaleStatementServiceImpl implements SaleStatementService {
         Map<Long, Map<String, BigDecimal>> detailsRateMap = getDetailsRateMap(records, defaultRateMap);
 
         // 赋值合同到账
-        setContractArrival(list);
+        setContractArrivalAndRefundMoney(list);
 
         // 赋值采购合同金额和支付货款
         setPurchaseAmountAndPayForGoods(list, detailsRateMap);
@@ -180,7 +187,7 @@ public class SaleStatementServiceImpl implements SaleStatementService {
     /**
      * 赋值合同到账金额
      */
-    private void setContractArrival(List<ProfitSettlementVo> list) {
+    private void setContractArrivalAndRefundMoney(List<ProfitSettlementVo> list) {
 
 //        // 合同id
 //        List<Long> contractIdList = list.stream().map(ProfitSettlementVo::getContractId).collect(Collectors.toList());
@@ -243,6 +250,11 @@ public class SaleStatementServiceImpl implements SaleStatementService {
         //通过合同ID查询到账认领合同的数据
         List<ClaimContract> claimContractList = claimContractService.getListByContractIds(contractIdList);
         Map<Long,List<ClaimContract>> claimContractMap = claimContractList.stream().collect(Collectors.groupingBy(ClaimContract::getContractId));
+
+        //通过合同ID查询到退税数据
+        List<TaxRefundDetails> refundDetails = taxRefundDetailsService.getSumMoneyByContractIds(contractIdList);
+        Map<Long,List<TaxRefundDetails>> refundDetailsMap = refundDetails.stream().collect(Collectors.groupingBy(TaxRefundDetails::getContractId));
+
         for(ProfitSettlementVo p:list){
             if(StringUtil.isNotEmpty(p.getCurrencyRateJson())){//取设置的汇率
                 List<CurrencyRate> assignCurrencyRatesList = JSON.parseArray(p.getCurrencyRateJson(), CurrencyRate.class);
@@ -251,7 +263,6 @@ public class SaleStatementServiceImpl implements SaleStatementService {
                  * 处理到账金额
                  */
                 List<ClaimContract> cList = claimContractMap.getOrDefault(p.getContractId(),null);
-                List<BigDecimal> sumArrayMoney = new ArrayList<>();
                 BigDecimal contractArrival = cList.stream().map(claimContract -> {
                     //获取汇率
                     BigDecimal rate = assignCurrencyRatesMap.getOrDefault(claimContract.getCurrency(),BigDecimal.ONE);
@@ -262,26 +273,53 @@ public class SaleStatementServiceImpl implements SaleStatementService {
                 }).reduce(BigDecimal.ZERO, BigDecimal::add);
                 p.setContractArrival(contractArrival);
                 /**
-                 * 处理合同金额
+                 * 处理退税金额
                  */
+                List<TaxRefundDetails> rList = refundDetailsMap.getOrDefault(p.getContractId(),null);
+                BigDecimal taxReturnMoney = rList.stream().map(taxRefundDetails -> {
+                    //获取汇率
+                    BigDecimal rate = assignCurrencyRatesMap.getOrDefault(taxRefundDetails.getCurrency(),BigDecimal.ONE);
+                    // 获取认领金额
+                    BigDecimal money = taxRefundDetails.getAmount();
+                    // 返回兑人民币后金额
+                    return rate.multiply(money);
+                }).reduce(BigDecimal.ZERO, BigDecimal::add);
+                p.setTaxReturnMoney(taxReturnMoney);
             }else{//取数据汇率
                 /**
                  * 处理到账金额
                  */
-                List<ClaimContract> cList = claimContractMap.getOrDefault(p.getContractId(),null);
+                List<ClaimContract> cList = claimContractMap.getOrDefault(p.getContractId(),new ArrayList<>());
                 List<Long> warterIds = cList.stream().distinct().map(ClaimContract::getBusinessId).collect(Collectors.toList());
-                //查出流水
-                List<AccountRunningWater> accountRunningWaterList = accountRunningWaterService.list(Wrappers.<AccountRunningWater>query().lambda().select(AccountRunningWater::getRate,AccountRunningWater::getId).in(AccountRunningWater::getId,warterIds));
-                Map<Long,BigDecimal> waterMap = accountRunningWaterList.stream().collect(Collectors.toMap(AccountRunningWater::getId, AccountRunningWater::getRate));
-                BigDecimal contractArrival = cList.stream().map(claimContract -> {
+                if(CollectionUtils.isEmpty(warterIds)){
+                    p.setContractArrival(BigDecimal.ZERO);
+                }else{
+                    //查出流水
+                    List<AccountRunningWater> accountRunningWaterList = accountRunningWaterService.list(Wrappers.<AccountRunningWater>query().lambda().select(AccountRunningWater::getRate,AccountRunningWater::getId).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 money = claimContract.getMoney();
+                        // 返回兑人民币后金额
+                        return rate.multiply(money);
+                    }).reduce(BigDecimal.ZERO, BigDecimal::add);
+                    p.setContractArrival(contractArrival);
+                }
+                /**
+                 * 处理退税金额
+                 */
+                List<TaxRefundDetails> rList = refundDetailsMap.getOrDefault(p.getContractId(),null);
+                BigDecimal taxReturnMoney = rList.stream().map(taxRefundDetails -> {
                     //获取汇率
-                    BigDecimal rate = waterMap.getOrDefault(claimContract.getBusinessId(),BigDecimal.ONE);
+                    BigDecimal rate = taxRefundDetails.getRate();
                     // 获取认领金额
-                    BigDecimal money = claimContract.getMoney();
+                    BigDecimal money = taxRefundDetails.getAmount();
                     // 返回兑人民币后金额
                     return rate.multiply(money);
                 }).reduce(BigDecimal.ZERO, BigDecimal::add);
-                p.setContractArrival(contractArrival);
+                p.setTaxReturnMoney(taxReturnMoney);
             }
         }