mirror of
https://codeup.aliyun.com/67c68d4e484ca2f0a13ac3c1/ydc/jsowell-charger-web.git
synced 2026-04-21 11:35:12 +08:00
校验站点分润配置, 提出一个方法
This commit is contained in:
@@ -15,6 +15,13 @@ public interface StationSplitConfigService {
|
||||
// 插入站点分账配置信息
|
||||
int settingSplitConfig(SplitConfigDTO splitConfigDTO);
|
||||
|
||||
/**
|
||||
* 校验站点分账配置信息
|
||||
* @param stationSplitConfigList 站点分账配置信息
|
||||
* @return true: 通过校验, false: 未通过校验
|
||||
*/
|
||||
boolean verifySplitConfig(List<StationSplitConfig> stationSplitConfigList);
|
||||
|
||||
// 根据站点id查询站点分账配置信息
|
||||
List<StationSplitConfig> queryByStationId(String stationId);
|
||||
|
||||
|
||||
@@ -1988,27 +1988,36 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService {
|
||||
*/
|
||||
private PaymentConfirmResponse splittingMethod(AfterSettleOrderDTO afterSettleOrderDTO) {
|
||||
// 结算金额
|
||||
BigDecimal orderSettleAmount = afterSettleOrderDTO.getOrderSettleAmount() == null ? BigDecimal.ZERO : afterSettleOrderDTO.getOrderSettleAmount();
|
||||
BigDecimal orderSettleAmount = afterSettleOrderDTO.getOrderSettleAmount();
|
||||
|
||||
// 站点id
|
||||
String stationId = afterSettleOrderDTO.getStationId();
|
||||
|
||||
// 订单编号
|
||||
String orderCode = afterSettleOrderDTO.getOrderCode();
|
||||
|
||||
// 订单是否需要分账, 结算金额必须大于0
|
||||
if (orderSettleAmount.compareTo(BigDecimal.ZERO) <= 0) {
|
||||
if (orderSettleAmount == null || orderSettleAmount.compareTo(BigDecimal.ZERO) <= 0) {
|
||||
logger.info("realTimeOrderSplit-订单[{}]结算金额[{}]必须大于0", afterSettleOrderDTO.getOrderCode(), orderSettleAmount);
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
// 校验分账
|
||||
verifyOrderAllAmount(afterSettleOrderDTO);
|
||||
// 根据站点id查询分账配置(如果未配置则初始化)
|
||||
List<StationSplitConfig> stationSplitConfigList = stationSplitConfigService.queryByStationIdWithInit(afterSettleOrderDTO.getStationId());
|
||||
List<StationSplitConfig> stationSplitConfigList = stationSplitConfigService.queryByStationIdWithInit(stationId);
|
||||
// 计算每个参与分账的用户, 应分多少钱
|
||||
List<SplitData> splitDataList = calculationSplitDataList(stationSplitConfigList, afterSettleOrderDTO);
|
||||
List<DivMember> divMemberList = transformDivMemberList(splitDataList);
|
||||
// List<DivMember> divMemberList = calculationOfSplitAmount(stationSplitConfigList, afterSettleOrderDTO);
|
||||
logger.info("realTimeOrderSplit-订单:{}, 分账信息:{}", afterSettleOrderDTO.getOrderCode(), JSON.toJSONString(splitDataList));
|
||||
logger.info("realTimeOrderSplit-订单:{}, 分账信息:{}", orderCode, JSON.toJSONString(splitDataList));
|
||||
// 执行分账
|
||||
if (CollectionUtils.isEmpty(divMemberList)) {
|
||||
logger.info("realTimeOrderSplit-订单[{}]分账信息为空", afterSettleOrderDTO.getOrderCode());
|
||||
logger.info("realTimeOrderSplit-订单[{}]分账信息为空", orderCode);
|
||||
return null;
|
||||
}
|
||||
String orderCode = afterSettleOrderDTO.getOrderCode();
|
||||
|
||||
// 查询订单支付记录
|
||||
List<OrderPayRecord> orderPayRecordList = orderPayRecordService.getOrderPayRecordList(orderCode);
|
||||
// 选出需要分账的支付id
|
||||
@@ -2049,11 +2058,10 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService {
|
||||
@Override
|
||||
public List<SplitData> calculationSplitDataList(List<StationSplitConfig> stationSplitConfigList, AfterSettleOrderDTO afterSettleOrderDTO) {
|
||||
List<SplitData> resultList = Lists.newArrayList();
|
||||
BigDecimal totalElecSplitRatio = stationSplitConfigList.stream().map(StationSplitConfig::getElectricitySplitRatio).reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||
BigDecimal totalServiceSplitRatio = stationSplitConfigList.stream().map(StationSplitConfig::getServiceSplitRatio).reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||
|
||||
// totalElecSplitRatio和totalServiceSplitRatio 都等于100%, 才进行后续操作
|
||||
if (totalElecSplitRatio.compareTo(BigDecimal.valueOf(100)) != 0 || totalServiceSplitRatio.compareTo(BigDecimal.valueOf(100)) != 0) {
|
||||
logger.info("站点:{}, 分成配置中的电费分成比例相加必须为100.0%, 实际值:{}, 服务费分成比例相加必须为100.0%, 实际值:{}", stationSplitConfigList.get(0).getStationId(), totalElecSplitRatio, totalServiceSplitRatio);
|
||||
boolean verifySplitConfig = stationSplitConfigService.verifySplitConfig(stationSplitConfigList);
|
||||
if (!verifySplitConfig) {
|
||||
return resultList;
|
||||
}
|
||||
|
||||
|
||||
@@ -19,6 +19,7 @@ import com.jsowell.pile.service.AdapayMemberAccountService;
|
||||
import com.jsowell.pile.service.StationSplitConfigService;
|
||||
import com.jsowell.pile.vo.web.ShareMemberVO;
|
||||
import com.jsowell.pile.vo.web.SplitConfigVO;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
@@ -29,6 +30,7 @@ import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
@Slf4j
|
||||
@Service
|
||||
public class StationSplitConfigServiceImpl implements StationSplitConfigService{
|
||||
|
||||
@@ -265,4 +267,23 @@ public class StationSplitConfigServiceImpl implements StationSplitConfigService{
|
||||
}
|
||||
return stationSplitConfigMapper.batchInsert(splitConfigList);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean verifySplitConfig(List<StationSplitConfig> stationSplitConfigList) {
|
||||
BigDecimal totalElecSplitRatio = stationSplitConfigList.stream().map(StationSplitConfig::getElectricitySplitRatio).reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||
BigDecimal totalServiceSplitRatio = stationSplitConfigList.stream().map(StationSplitConfig::getServiceSplitRatio).reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||
|
||||
// totalElecSplitRatio和totalServiceSplitRatio 都等于100%, 才进行后续操作
|
||||
if (totalElecSplitRatio.compareTo(BigDecimal.valueOf(100)) != 0 || totalServiceSplitRatio.compareTo(BigDecimal.valueOf(100)) != 0) {
|
||||
log.info("站点:{}, 分成配置中的电费分成比例相加必须为100.0%, 实际值:{}, 服务费分成比例相加必须为100.0%, 实际值:{}", stationSplitConfigList.get(0).getStationId(), totalElecSplitRatio, totalServiceSplitRatio);
|
||||
return false;
|
||||
}
|
||||
|
||||
// 有且仅有一位手续费承担方
|
||||
if (stationSplitConfigList.stream().filter(stationSplitConfig -> Constants.ONE.equals(stationSplitConfig.getFeeFlag())).count() != 1) {
|
||||
log.info("站点:{}, 分成配置中, 手续费承担方设置错误, 有且只能有1位手续费承担方", stationSplitConfigList.get(0).getStationId());
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user