|
|
@@ -1,38 +1,38 @@
|
|
|
package com.sckw.transport.service;
|
|
|
|
|
|
|
|
|
+import com.alibaba.fastjson.JSON;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
import com.sckw.core.common.enums.enums.ErrorCodeEnum;
|
|
|
import com.sckw.core.exception.BusinessPlatfromException;
|
|
|
import com.sckw.core.model.constant.Global;
|
|
|
import com.sckw.core.model.enums.ParkingChangeStrategyEnum;
|
|
|
+import com.sckw.core.utils.CollectionUtils;
|
|
|
import com.sckw.core.web.context.LoginUserHolder;
|
|
|
-import com.sckw.transport.model.KwtParkingChargeStrategy;
|
|
|
-import com.sckw.transport.model.KwtParkingChargeStrategyUnit;
|
|
|
-import com.sckw.transport.model.KwtParkingWalletFee;
|
|
|
-import com.sckw.transport.model.KwtParkingWalletFeeBalance;
|
|
|
-import com.sckw.transport.model.param.ParkingWalletFeeEstimateQueryParam;
|
|
|
-import com.sckw.transport.model.param.ParkingWalletFeeEstimateResp;
|
|
|
+import com.sckw.core.web.response.result.PageDataResult;
|
|
|
+import com.sckw.system.api.RemoteSystemService;
|
|
|
+import com.sckw.system.api.model.dto.res.EntCacheResDto;
|
|
|
import com.sckw.transport.api.model.param.ParkingWalletFeeFreezeParam;
|
|
|
import com.sckw.transport.api.model.vo.ParkingWalletFeeFreezeResult;
|
|
|
+import com.sckw.transport.model.*;
|
|
|
+import com.sckw.transport.model.enuma.WalletTypEnum;
|
|
|
+import com.sckw.transport.model.param.*;
|
|
|
import com.sckw.transport.repository.KwtParkingChangeStrategyRepository;
|
|
|
import com.sckw.transport.repository.KwtParkingChangeStrategyUnitRepository;
|
|
|
-import com.sckw.system.api.RemoteSystemService;
|
|
|
import com.sckw.transport.repository.KwtParkingWalletFeeBalanceRepository;
|
|
|
import com.sckw.transport.repository.KwtParkingWalletFeeRepository;
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
-import org.apache.commons.collections4.CollectionUtils;
|
|
|
import org.apache.dubbo.config.annotation.DubboReference;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
|
import java.math.RoundingMode;
|
|
|
-import java.util.Comparator;
|
|
|
-import java.util.Date;
|
|
|
-import java.util.List;
|
|
|
-import java.util.Objects;
|
|
|
+import java.util.*;
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
|
* Author: donglang
|
|
|
@@ -741,5 +741,242 @@ public class ParkingWalletFeeService {
|
|
|
return walletFee.getServiceFeeBalance();
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 查询汇总服务费
|
|
|
+ * @param param
|
|
|
+ */
|
|
|
+ public ParkingWalletFeeResp queryTotalServerFee(ParkingWalletFeeTotalQueryParam param) {
|
|
|
+ log.info("查询汇总服务费:{}", JSON.toJSONString(param));
|
|
|
+ //构建查询条件
|
|
|
+ LambdaQueryWrapper<KwtParkingWalletFee> wrapper = buildAndExecuteQuery(param);
|
|
|
+
|
|
|
+ // 初始化
|
|
|
+ ParkingWalletFeeResp resp = new ParkingWalletFeeResp();
|
|
|
+ resp.setServiceFeeBalance(BigDecimal.ZERO);
|
|
|
+ resp.setTradingAmount(BigDecimal.ZERO);
|
|
|
+
|
|
|
+ List<KwtParkingWalletFee> records = parkingWalletFeeRepository.list(wrapper);
|
|
|
+ if (CollectionUtils.isEmpty(records)) {
|
|
|
+ log.info("汇总服务费信息为空");
|
|
|
+ return resp;
|
|
|
+ }
|
|
|
+ // 查询采购商汇总服务费
|
|
|
+ if (param.getProEntId() != null) {
|
|
|
+ return getProWalletFee(records.get(0));
|
|
|
+ }
|
|
|
+ // 查询平台汇总服务费
|
|
|
+ if (param.getSupEntId() != null) {
|
|
|
+ return getSupWalletFee(records);
|
|
|
+ }
|
|
|
+ return resp;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取采购商汇总服务费
|
|
|
+ * @param fee
|
|
|
+ */
|
|
|
+ private ParkingWalletFeeResp getProWalletFee(KwtParkingWalletFee fee) {
|
|
|
+ log.info("开始汇总采购商服务费,param:{}", JSON.toJSONString(fee));
|
|
|
+
|
|
|
+ ParkingWalletFeeResp resp = new ParkingWalletFeeResp();
|
|
|
+ resp.setServiceFeeBalance(fee.getServiceFeeBalance() != null ? fee.getServiceFeeBalance() : BigDecimal.ZERO);
|
|
|
+ resp.setTradingAmount(fee.getTradingAmount() != null ? fee.getTradingAmount() : BigDecimal.ZERO);
|
|
|
+ log.info("汇总采购商服务费结束,总余额:{}, 总履约中金额:{}", fee.getServiceFeeBalance(), fee.getTradingAmount());
|
|
|
+ return resp;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取平台汇总服务费
|
|
|
+ * @param feeList
|
|
|
+ */
|
|
|
+ private ParkingWalletFeeResp getSupWalletFee(List<KwtParkingWalletFee> feeList) {
|
|
|
+ log.info("开始汇总平台服务费, size:{}", CollectionUtils.isEmpty(feeList) ? 0 : feeList.size());
|
|
|
+ // 汇总余额
|
|
|
+ BigDecimal totalServiceFee = feeList.stream()
|
|
|
+ .map(fee -> fee.getServiceFeeBalance() != null ? fee.getServiceFeeBalance() : BigDecimal.ZERO)
|
|
|
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ // 汇总冻结金额
|
|
|
+ BigDecimal totalTradingAmount = feeList.stream()
|
|
|
+ .map(fee -> fee.getTradingAmount() != null ? fee.getTradingAmount() : BigDecimal.ZERO)
|
|
|
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ ParkingWalletFeeResp resp = new ParkingWalletFeeResp();
|
|
|
+ resp.setServiceFeeBalance(totalServiceFee);
|
|
|
+ resp.setTradingAmount(totalTradingAmount);
|
|
|
+ log.info("汇总平台服务费结束,总余额:{}, 总履约中金额:{}", totalServiceFee, totalTradingAmount);
|
|
|
+ return resp;
|
|
|
+ }
|
|
|
+ /**
|
|
|
+ * 构建查询条件并执行分页查询
|
|
|
+ */
|
|
|
+ private LambdaQueryWrapper<KwtParkingWalletFee> buildAndExecuteQuery(ParkingWalletFeeTotalQueryParam param) {
|
|
|
+ return Wrappers.<KwtParkingWalletFee>lambdaQuery()
|
|
|
+ .eq(param.getProEntId() != null, KwtParkingWalletFee::getProEntId, param.getProEntId())
|
|
|
+ .eq(param.getSupEntId() != null, KwtParkingWalletFee::getSupEntId, param.getSupEntId())
|
|
|
+ .orderByDesc(KwtParkingWalletFee::getUpdateTime);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 分页查询服务费
|
|
|
+ * @param param
|
|
|
+ */
|
|
|
+ public PageDataResult<ParkingWalletFeeResp> pageQueryServerFee(ParkingWalletFeeQueryParam param) {
|
|
|
+ log.info("分页查询服务费:{}", JSON.toJSONString(param));
|
|
|
+
|
|
|
+ //构建查询条件
|
|
|
+ LambdaQueryWrapper<KwtParkingWalletFee> wrapper = buildAndExecuteQuery(param);
|
|
|
+
|
|
|
+ Page<KwtParkingWalletFee> pageByStatus = parkingWalletFeeRepository.page(new Page<>(param.getPageNum(), param.getPageSize()), wrapper);
|
|
|
+ List<KwtParkingWalletFee> records = pageByStatus.getRecords();
|
|
|
+ if (CollectionUtils.isEmpty(records)) {
|
|
|
+ log.info("服务费信息为空");
|
|
|
+ return PageDataResult.empty(param.getPageNum(), param.getPageSize());
|
|
|
+ }
|
|
|
+ List<ParkingWalletFeeResp> changeStrategyRespList = getWalletFeePageResult(records);
|
|
|
+ return PageDataResult.success(param.getPageNum(), param.getPageSize(), pageByStatus.getTotal(), changeStrategyRespList);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取收费策略
|
|
|
+ * @param records
|
|
|
+ */
|
|
|
+ private List<ParkingWalletFeeResp> getWalletFeePageResult(List<KwtParkingWalletFee> records) {
|
|
|
+ log.info("组装服务费,param:{}", JSON.toJSONString(records));
|
|
|
+ if (CollectionUtils.isEmpty(records)) {
|
|
|
+ return Collections.emptyList();
|
|
|
+ }
|
|
|
+ List<ParkingWalletFeeResp> walletFeeList = records.stream()
|
|
|
+ .map(fee -> {
|
|
|
+ ParkingWalletFeeResp resp = new ParkingWalletFeeResp();
|
|
|
+ resp.setId(fee.getId());
|
|
|
+ resp.setProEntId(fee.getProEntId());
|
|
|
+ resp.setProEntName(null);
|
|
|
+ resp.setSupEntId(fee.getSupEntId());
|
|
|
+ resp.setSupEntName(null);
|
|
|
+ resp.setServiceFeeBalance(fee.getServiceFeeBalance());
|
|
|
+ resp.setTradingAmount(fee.getTradingAmount());
|
|
|
+ resp.setUpdateTime(fee.getUpdateTime());
|
|
|
+ return resp;
|
|
|
+ }).collect(Collectors.toList());
|
|
|
+
|
|
|
+ log.info("组装服务费结束,size:{}", JSON.toJSONString(walletFeeList.size()));
|
|
|
+ return walletFeeList;
|
|
|
+ }
|
|
|
+ /**
|
|
|
+ * 构建查询条件并执行分页查询
|
|
|
+ */
|
|
|
+ private LambdaQueryWrapper<KwtParkingWalletFee> buildAndExecuteQuery(ParkingWalletFeeQueryParam param) {
|
|
|
+ return Wrappers.<KwtParkingWalletFee>lambdaQuery()
|
|
|
+ .eq(param.getSupEntId() != null, KwtParkingWalletFee::getSupEntId, param.getSupEntId())
|
|
|
+ .eq(param.getProEntId() != null, KwtParkingWalletFee::getProEntId, param.getProEntId())
|
|
|
+ .orderByDesc(KwtParkingWalletFee::getUpdateTime);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 保存服务费
|
|
|
+ * @param param
|
|
|
+ */
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public void saveServerFee(ParkingWalletFeeSaveParam param) {
|
|
|
+ log.info("保存服务费,param:{}", JSON.toJSONString(param));
|
|
|
+ KwtParkingWalletFee walletFee = parkingWalletFeeRepository.getById(param.getId());
|
|
|
+ if (walletFee == null) {
|
|
|
+ throw new BusinessPlatfromException(ErrorCodeEnum.DRIVER_NOT_FOUND, "服务费信息不存在");
|
|
|
+ }
|
|
|
+ // 1. 先修改服务余额
|
|
|
+ walletFee.setServiceFeeBalance(walletFee.getServiceFeeBalance().add(param.getServiceFee()));
|
|
|
+ parkingWalletFeeRepository.updateById(walletFee);
|
|
|
+
|
|
|
+ // 2.新增明细
|
|
|
+ KwtParkingWalletFeeBalance feeBalance = new KwtParkingWalletFeeBalance();
|
|
|
+ feeBalance.setProEntId(param.getEntId());
|
|
|
+ feeBalance.setTradeType(9);
|
|
|
+ feeBalance.setTradeAmount(param.getServiceFee());
|
|
|
+ feeBalance.setServiceFeeBalance(walletFee.getServiceFeeBalance());
|
|
|
+ feeBalance.setTradingAmount(walletFee.getTradingAmount());
|
|
|
+ feeBalance.setVoucherUrl(param.getVoucherUrl());
|
|
|
+ feeBalance.setRemark(param.getRemark());
|
|
|
+ parkingWalletFeeBalanceRepository.save(feeBalance);
|
|
|
+ }
|
|
|
+ /**
|
|
|
+ * 分页查询服务费明细
|
|
|
+ * @param param
|
|
|
+ */
|
|
|
+ public PageDataResult<ParkingWalletFeeBalanceResp> pageQueryServerFeeDetails(ParkingWalletFeeBalanceQueryParam param) {
|
|
|
+ log.info("分页查询服务费明细:{}", JSON.toJSONString(param));
|
|
|
+
|
|
|
+ //构建查询条件
|
|
|
+ LambdaQueryWrapper<KwtParkingWalletFeeBalance> wrapper = buildAndExecuteQuery(param);
|
|
|
|
|
|
+ Page<KwtParkingWalletFeeBalance> pageByStatus = parkingWalletFeeBalanceRepository.page(new Page<>(param.getPageNum(), param.getPageSize()), wrapper);
|
|
|
+ List<KwtParkingWalletFeeBalance> records = pageByStatus.getRecords();
|
|
|
+ if (CollectionUtils.isEmpty(records)) {
|
|
|
+ log.info("分页查询服务费明细为空");
|
|
|
+ return PageDataResult.empty(param.getPageNum(), param.getPageSize());
|
|
|
+ }
|
|
|
+ List<ParkingWalletFeeBalanceResp> changeStrategyRespList = getWalletFeeBalancePageResult(records);
|
|
|
+ return PageDataResult.success(param.getPageNum(), param.getPageSize(), pageByStatus.getTotal(), changeStrategyRespList);
|
|
|
+ }
|
|
|
+ /**
|
|
|
+ * 构建查询条件并执行分页查询
|
|
|
+ */
|
|
|
+ private LambdaQueryWrapper<KwtParkingWalletFeeBalance> buildAndExecuteQuery(ParkingWalletFeeBalanceQueryParam param) {
|
|
|
+ return Wrappers.<KwtParkingWalletFeeBalance>lambdaQuery()
|
|
|
+ .eq(param.getSupEntId() != null, KwtParkingWalletFeeBalance::getSupEntId, param.getSupEntId())
|
|
|
+ .eq(param.getProEntId() != null, KwtParkingWalletFeeBalance::getProEntId, param.getProEntId())
|
|
|
+ .eq(KwtParkingWalletFeeBalance::getOrderNo, param.getOrderNo())
|
|
|
+ .eq(KwtParkingWalletFeeBalance::getTradeType, param.getTradeType())
|
|
|
+ .ge(KwtParkingWalletFeeBalance::getTradeAmount, param.getMinFee())
|
|
|
+ .le(KwtParkingWalletFeeBalance::getTradeAmount, param.getMaxFee())
|
|
|
+ .ge(KwtParkingWalletFeeBalance::getCreateTime, param.getStartCreateTime())
|
|
|
+ .le(KwtParkingWalletFeeBalance::getCreateTime, param.getEndCreateTime())
|
|
|
+ .orderByDesc(KwtParkingWalletFeeBalance::getServiceFeeBalance);
|
|
|
+ }
|
|
|
+ /**
|
|
|
+ * 获取服务费明细
|
|
|
+ * @param records
|
|
|
+ */
|
|
|
+ private List<ParkingWalletFeeBalanceResp> getWalletFeeBalancePageResult(List<KwtParkingWalletFeeBalance> records) {
|
|
|
+ log.info("组装服务费明细,param:{}", JSON.toJSONString(records));
|
|
|
+ if (CollectionUtils.isEmpty(records)) {
|
|
|
+ return Collections.emptyList();
|
|
|
+ }
|
|
|
+ List<ParkingWalletFeeBalanceResp> walletFeeList = records.stream()
|
|
|
+ .map(feeBalance -> {
|
|
|
+ ParkingWalletFeeBalanceResp resp = new ParkingWalletFeeBalanceResp();
|
|
|
+ resp.setId(feeBalance.getId());
|
|
|
+ resp.setOrderNo(feeBalance.getOrderNo());
|
|
|
+ resp.setProEntId(feeBalance.getProEntId());
|
|
|
+ resp.setProEntName(getEntName(feeBalance.getProEntId()));
|
|
|
+ resp.setSupEntId(feeBalance.getSupEntId());
|
|
|
+ resp.setSupEntName(getEntName(feeBalance.getSupEntId()));
|
|
|
+ resp.setTradeType(feeBalance.getTradeType());
|
|
|
+ resp.setTradeTypeDesc(WalletTypEnum.getDescByCode(feeBalance.getTradeType()));
|
|
|
+ resp.setTradeAmount(feeBalance.getTradeAmount());
|
|
|
+ resp.setServiceFeeBalance(feeBalance.getServiceFeeBalance());
|
|
|
+ resp.setTradingAmount(feeBalance.getTradingAmount());
|
|
|
+ resp.setVoucherUrl(feeBalance.getVoucherUrl());
|
|
|
+ resp.setRemark(feeBalance.getRemark());
|
|
|
+ resp.setCreateTime(feeBalance.getCreateTime());
|
|
|
+ return resp;
|
|
|
+ }).collect(Collectors.toList());
|
|
|
+
|
|
|
+ log.info("组装服务费明细结束,size:{}", JSON.toJSONString(walletFeeList.size()));
|
|
|
+ return walletFeeList;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 通过企业id查询企业名称
|
|
|
+ * @param entId
|
|
|
+ */
|
|
|
+ private String getEntName(Long entId) {
|
|
|
+ // 查询企业名称
|
|
|
+ EntCacheResDto entCacheResDto = remoteSystemService.queryEntDetails(entId);
|
|
|
+ if (entCacheResDto == null) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ return entCacheResDto.getFirmName();
|
|
|
+ }
|
|
|
}
|