瀏覽代碼

装箱列表BUG修复

caozj 1 年之前
父節點
當前提交
dedcdad564

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

@@ -1,5 +1,6 @@
 package com.fjhx.sale.entity.claim.po;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.ruoyi.common.core.domain.BasePo;
 import com.baomidou.mybatisplus.annotation.TableName;
 import java.math.BigDecimal;
@@ -44,4 +45,9 @@ public class ClaimContract extends BasePo {
      */
     private String currency;
 
+    /**
+     * 业务ID
+     */
+    @TableField(exist = false)
+    private Long businessId;
 }

+ 2 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/claim/vo/ClaimContractVo.java

@@ -24,4 +24,6 @@ public class ClaimContractVo extends ClaimContract {
      * 认领人名称
      */
     private  String claimUserName;
+
+
 }

+ 8 - 0
hx-sale/src/main/java/com/fjhx/sale/mapper/claim/ClaimContractMapper.java

@@ -7,6 +7,8 @@ import com.fjhx.sale.entity.claim.vo.ClaimContractVo;
 import com.ruoyi.common.utils.wrapper.IWrapper;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.List;
+
 
 /**
  * <p>
@@ -23,4 +25,10 @@ public interface ClaimContractMapper extends BaseMapper<ClaimContract> {
      */
     Page<ClaimContractVo> getPage(@Param("page") Page<Object> page, @Param("ew") IWrapper<ClaimContract> wrapper);
 
+    /**
+     * 通过合同ID集合查询列表
+     * @param wrapper
+     * @return
+     */
+    List<ClaimContract> getListByContractIds(@Param("ew") IWrapper<ClaimContract> wrapper);
 }

+ 10 - 0
hx-sale/src/main/java/com/fjhx/sale/service/claim/ClaimContractService.java

@@ -6,6 +6,10 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fjhx.sale.entity.claim.vo.ClaimContractVo;
 import com.fjhx.sale.entity.claim.dto.ClaimContractSelectDto;
 import com.fjhx.sale.entity.claim.dto.ClaimContractDto;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 
 /**
@@ -43,4 +47,10 @@ public interface ClaimContractService extends BaseService<ClaimContract> {
      */
     void delete(Long id);
 
+    /**
+     * 通过合同ID集合查询列表
+     * @param contractIds
+     * @return
+     */
+    List<ClaimContract> getListByContractIds(List<Long> contractIds);
 }

+ 14 - 0
hx-sale/src/main/java/com/fjhx/sale/service/claim/impl/ClaimContractServiceImpl.java

@@ -12,6 +12,8 @@ import com.ruoyi.common.utils.wrapper.IWrapper;
 import com.fjhx.sale.entity.claim.dto.ClaimContractDto;
 import cn.hutool.core.bean.BeanUtil;
 
+import java.util.List;
+
 
 /**
  * <p>
@@ -54,4 +56,16 @@ public class ClaimContractServiceImpl extends ServiceImpl<ClaimContractMapper, C
         this.removeById(id);
     }
 
+    /**
+     * 通过合同ID集合查询列表
+     * @param contractIds
+     * @return
+     */
+    @Override
+    public List<ClaimContract> getListByContractIds(List<Long> contractIds) {
+        IWrapper<ClaimContract> wrapper = getWrapper();
+        wrapper.eq("t1.contract_id", contractIds);
+        return baseMapper.getListByContractIds(wrapper);
+    }
+
 }

+ 117 - 68
hx-sale/src/main/java/com/fjhx/sale/service/statement/impl/SaleStatementServiceImpl.java

@@ -3,7 +3,10 @@ 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.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.account.entity.account.po.AccountRunningWater;
+import com.fjhx.account.service.account.AccountRunningWaterService;
 import com.fjhx.common.entity.currency.po.CurrencyRate;
 import com.fjhx.common.service.currency.CurrencyRateService;
 import com.fjhx.customer.service.customer.CustomerService;
@@ -21,6 +24,7 @@ import com.fjhx.sale.service.claim.ClaimContractService;
 import com.fjhx.sale.service.claim.ClaimService;
 import com.fjhx.sale.service.contract.ContractService;
 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.springframework.beans.factory.annotation.Autowired;
@@ -50,6 +54,9 @@ public class SaleStatementServiceImpl implements SaleStatementService {
     private ClaimContractService claimContractService;
 
     @Autowired
+    private AccountRunningWaterService accountRunningWaterService;
+
+    @Autowired
     private ClaimService claimService;
 
     @Autowired
@@ -66,26 +73,22 @@ public class SaleStatementServiceImpl implements SaleStatementService {
         if (records.size() == 0) {
             return new Page<>();
         }
-
-        // 获取默认税率
-        Map<String, BigDecimal> defaultRateMap = getDefaultRateMap();
-
-        // 获取税率明细
-        Map<Long, Map<String, BigDecimal>> detailsRateMap = getDetailsRateMap(records, defaultRateMap);
-
         // 转换为vo
         List<ProfitSettlementVo> list = createResultList(records);
-
         // 赋值业务员名称
         UserUtil.assignmentNickName(list, ProfitSettlementVo::getUserId, ProfitSettlementVo::setUserName);
-
         // 赋值客户名称
         customerService.attributeAssign(list, ProfitSettlementVo::getCustomerId, (item, customer) -> {
             item.setCustomerName(customer.getName());
         });
+        // 获取默认税率
+        Map<String, BigDecimal> defaultRateMap = new HashMap<>();
+
+        // 获取税率明细
+        Map<Long, Map<String, BigDecimal>> detailsRateMap = getDetailsRateMap(records, defaultRateMap);
 
         // 赋值合同到账
-        setContractArrival(list, detailsRateMap);
+        setContractArrival(list);
 
         // 赋值采购合同金额和支付货款
         setPurchaseAmountAndPayForGoods(list, detailsRateMap);
@@ -120,9 +123,9 @@ public class SaleStatementServiceImpl implements SaleStatementService {
                 defaultRateMap.forEach(map::putIfAbsent);
 
             } else {
-                map = new HashMap<>(defaultRateMap);
-//                map = new HashMap<>();
-//                map.put(record.getCurrency(),record.getRate());
+//                map = new HashMap<>(defaultRateMap);
+                map = new HashMap<>();
+                map.put(record.getCurrency(),record.getRate());
             }
 
             result.put(record.getId(), map);
@@ -177,63 +180,109 @@ public class SaleStatementServiceImpl implements SaleStatementService {
     /**
      * 赋值合同到账金额
      */
-    private void setContractArrival(List<ProfitSettlementVo> list, Map<Long, Map<String, BigDecimal>> detailsRateMap) {
-
+    private void setContractArrival(List<ProfitSettlementVo> list) {
+
+//        // 合同id
+//        List<Long> contractIdList = list.stream().map(ProfitSettlementVo::getContractId).collect(Collectors.toList());
+//
+//        // 根据合同id获取到账认领明细列表
+//        List<ClaimContract> claimContractList = claimContractService.list(q ->
+//                q.in(ClaimContract::getContractId, contractIdList));
+//
+//        if (claimContractList.size() == 0) {
+//            return;
+//        }
+//
+//        // 到账认领明细id列表
+//        List<Long> claimIdList = claimContractList.stream()
+//                .map(ClaimContract::getClaimId).distinct().collect(Collectors.toList());
+//
+//        // 到账认领列表
+//        List<Claim> claimList = claimService.listByIds(claimIdList);
+//
+//        // 到账认领id 币种 map
+//        Map<Long, String> claimIdCurrencyMap = claimList.stream()
+//                .collect(Collectors.toMap(BaseIdPo::getId, Claim::getCurrency));
+//
+//        // 合同id 到账认领明细列表 map
+//        Map<Long, List<ClaimContract>> contractIdClaimContractListMap =
+//                claimContractList.stream().collect(Collectors.groupingBy(ClaimContract::getContractId));
+//
+//        for (ProfitSettlementVo profitSettlementVo : list) {
+//
+//            // 合同id
+//            Long contractId = profitSettlementVo.getContractId();
+//
+//            // 到账认领
+//            List<ClaimContract> itemClaimContractList = contractIdClaimContractListMap.getOrDefault(contractId, new ArrayList<>());
+//
+//            // 汇率币种map
+//            Map<String, BigDecimal> map = detailsRateMap.get(contractId);
+//
+//            BigDecimal contractArrival = itemClaimContractList.stream().map(claimContract -> {
+//
+//                // 根据到账认领id获取币种
+//                String currency = claimIdCurrencyMap.get(claimContract.getClaimId());
+//
+//                // 根据币种获取汇率
+//                BigDecimal rate = map.getOrDefault(currency, BigDecimal.ONE);
+//
+//                // 获取认领金额
+//                BigDecimal money = claimContract.getMoney();
+//
+//                // 返回兑人民币后金额
+//                return rate.multiply(money);
+//
+//            }).reduce(BigDecimal.ZERO, BigDecimal::add);
+//
+//            profitSettlementVo.setContractArrival(contractArrival);
+//
+//        }
         // 合同id
         List<Long> contractIdList = list.stream().map(ProfitSettlementVo::getContractId).collect(Collectors.toList());
-
-        // 根据合同id获取到账认领明细列表
-        List<ClaimContract> claimContractList = claimContractService.list(q ->
-                q.in(ClaimContract::getContractId, contractIdList));
-
-        if (claimContractList.size() == 0) {
-            return;
-        }
-
-        // 到账认领明细id列表
-        List<Long> claimIdList = claimContractList.stream()
-                .map(ClaimContract::getClaimId).distinct().collect(Collectors.toList());
-
-        // 到账认领列表
-        List<Claim> claimList = claimService.listByIds(claimIdList);
-
-        // 到账认领id 币种 map
-        Map<Long, String> claimIdCurrencyMap = claimList.stream()
-                .collect(Collectors.toMap(BaseIdPo::getId, Claim::getCurrency));
-
-        // 合同id 到账认领明细列表 map
-        Map<Long, List<ClaimContract>> contractIdClaimContractListMap =
-                claimContractList.stream().collect(Collectors.groupingBy(ClaimContract::getContractId));
-
-        for (ProfitSettlementVo profitSettlementVo : list) {
-
-            // 合同id
-            Long contractId = profitSettlementVo.getContractId();
-
-            // 到账认领
-            List<ClaimContract> itemClaimContractList = contractIdClaimContractListMap.getOrDefault(contractId, new ArrayList<>());
-
-            // 汇率币种map
-            Map<String, BigDecimal> map = detailsRateMap.get(contractId);
-
-            BigDecimal contractArrival = itemClaimContractList.stream().map(claimContract -> {
-
-                // 根据到账认领id获取币种
-                String currency = claimIdCurrencyMap.get(claimContract.getClaimId());
-
-                // 根据币种获取汇率
-                BigDecimal rate = map.getOrDefault(currency, BigDecimal.ONE);
-
-                // 获取认领金额
-                BigDecimal money = claimContract.getMoney();
-
-                // 返回兑人民币后金额
-                return rate.multiply(money);
-
-            }).reduce(BigDecimal.ZERO, BigDecimal::add);
-
-            profitSettlementVo.setContractArrival(contractArrival);
-
+        //通过合同ID查询到账认领合同的数据
+        List<ClaimContract> claimContractList = claimContractService.getListByContractIds(contractIdList);
+        Map<Long,List<ClaimContract>> claimContractMap = claimContractList.stream().collect(Collectors.groupingBy(ClaimContract::getContractId));
+        for(ProfitSettlementVo p:list){
+            if(StringUtil.isNotEmpty(p.getCurrencyRateJson())){//取设置的汇率
+                List<CurrencyRate> assignCurrencyRatesList = JSON.parseArray(p.getCurrencyRateJson(), CurrencyRate.class);
+                Map<String, BigDecimal> assignCurrencyRatesMap = assignCurrencyRatesList.stream().collect(Collectors.toMap(CurrencyRate::getType, CurrencyRate::getRate));
+                /**
+                 * 处理到账金额
+                 */
+                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);
+                    // 获取认领金额
+                    BigDecimal money = claimContract.getMoney();
+                    // 返回兑人民币后金额
+                    return rate.multiply(money);
+                }).reduce(BigDecimal.ZERO, BigDecimal::add);
+                p.setContractArrival(contractArrival);
+                /**
+                 * 处理合同金额
+                 */
+            }else{//取数据汇率
+                /**
+                 * 处理到账金额
+                 */
+                List<ClaimContract> cList = claimContractMap.getOrDefault(p.getContractId(),null);
+                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 -> {
+                    //获取汇率
+                    BigDecimal rate = waterMap.getOrDefault(claimContract.getBusinessId(),BigDecimal.ONE);
+                    // 获取认领金额
+                    BigDecimal money = claimContract.getMoney();
+                    // 返回兑人民币后金额
+                    return rate.multiply(money);
+                }).reduce(BigDecimal.ZERO, BigDecimal::add);
+                p.setContractArrival(contractArrival);
+            }
         }
 
     }

+ 9 - 0
hx-sale/src/main/resources/mapper/claim/ClaimContractMapper.xml

@@ -15,4 +15,13 @@
             ${ew.customSqlSegment}
     </select>
 
+    <select id="getListByContractIds" resultType="com.fjhx.sale.entity.claim.po.ClaimContract">
+        SELECT
+            t1.*,
+            t2.business_id
+        FROM
+            claim_contract t1
+        LEFT JOIN claim t2 ON t1.claim_id = t2.id
+            ${ew.customSqlSegment}
+    </select>
 </mapper>