mirror of
https://codeup.aliyun.com/67c68d4e484ca2f0a13ac3c1/ydc/jsowell-charger-web.git
synced 2026-07-12 01:58:00 +08:00
校验站点分润配置, 提出一个方法
This commit is contained in:
@@ -292,6 +292,38 @@ public class SpringBootTestController {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private QcyunsService qcyunsService;
|
private QcyunsService qcyunsService;
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void verifySplitConfigTest() {
|
||||||
|
List<StationSplitConfig> stationSplitConfigList = Lists.newArrayList();
|
||||||
|
|
||||||
|
stationSplitConfigList.add(StationSplitConfig.builder()
|
||||||
|
.adapayMemberId("adapayMemberId1")
|
||||||
|
.stationId("stationId1")
|
||||||
|
.merchantId("merchantId1")
|
||||||
|
.feeFlag(Constants.ONE)
|
||||||
|
.createBy(Constants.SYSTEM)
|
||||||
|
.createTime(DateUtils.getNowDate())
|
||||||
|
.delFlag(DelFlagEnum.NORMAL.getValue())
|
||||||
|
.electricitySplitRatio(new BigDecimal("50"))
|
||||||
|
.serviceSplitRatio(new BigDecimal("50"))
|
||||||
|
.build());
|
||||||
|
|
||||||
|
|
||||||
|
stationSplitConfigList.add(StationSplitConfig.builder()
|
||||||
|
.adapayMemberId("adapayMemberId2")
|
||||||
|
.stationId("stationId2")
|
||||||
|
.merchantId("merchantId2")
|
||||||
|
.feeFlag(Constants.ZERO)
|
||||||
|
.createBy(Constants.SYSTEM)
|
||||||
|
.createTime(DateUtils.getNowDate())
|
||||||
|
.delFlag(DelFlagEnum.NORMAL.getValue())
|
||||||
|
.electricitySplitRatio(new BigDecimal("50"))
|
||||||
|
.serviceSplitRatio(new BigDecimal("50"))
|
||||||
|
.build());
|
||||||
|
|
||||||
|
stationSplitConfigService.verifySplitConfig(stationSplitConfigList);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void selectAutoWithdrawalMerchantInfoListTest() {
|
public void selectAutoWithdrawalMerchantInfoListTest() {
|
||||||
List<PileMerchantInfo> pileMerchantInfos = pileMerchantInfoService.selectAutoWithdrawalMerchantInfoList();
|
List<PileMerchantInfo> pileMerchantInfos = pileMerchantInfoService.selectAutoWithdrawalMerchantInfoList();
|
||||||
|
|||||||
@@ -15,6 +15,13 @@ public interface StationSplitConfigService {
|
|||||||
// 插入站点分账配置信息
|
// 插入站点分账配置信息
|
||||||
int settingSplitConfig(SplitConfigDTO splitConfigDTO);
|
int settingSplitConfig(SplitConfigDTO splitConfigDTO);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 校验站点分账配置信息
|
||||||
|
* @param stationSplitConfigList 站点分账配置信息
|
||||||
|
* @return true: 通过校验, false: 未通过校验
|
||||||
|
*/
|
||||||
|
boolean verifySplitConfig(List<StationSplitConfig> stationSplitConfigList);
|
||||||
|
|
||||||
// 根据站点id查询站点分账配置信息
|
// 根据站点id查询站点分账配置信息
|
||||||
List<StationSplitConfig> queryByStationId(String stationId);
|
List<StationSplitConfig> queryByStationId(String stationId);
|
||||||
|
|
||||||
|
|||||||
@@ -1988,27 +1988,36 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService {
|
|||||||
*/
|
*/
|
||||||
private PaymentConfirmResponse splittingMethod(AfterSettleOrderDTO afterSettleOrderDTO) {
|
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
|
// 订单是否需要分账, 结算金额必须大于0
|
||||||
if (orderSettleAmount.compareTo(BigDecimal.ZERO) <= 0) {
|
if (orderSettleAmount == null || orderSettleAmount.compareTo(BigDecimal.ZERO) <= 0) {
|
||||||
logger.info("realTimeOrderSplit-订单[{}]结算金额[{}]必须大于0", afterSettleOrderDTO.getOrderCode(), orderSettleAmount);
|
logger.info("realTimeOrderSplit-订单[{}]结算金额[{}]必须大于0", afterSettleOrderDTO.getOrderCode(), orderSettleAmount);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// 校验分账
|
// 校验分账
|
||||||
verifyOrderAllAmount(afterSettleOrderDTO);
|
verifyOrderAllAmount(afterSettleOrderDTO);
|
||||||
// 根据站点id查询分账配置(如果未配置则初始化)
|
// 根据站点id查询分账配置(如果未配置则初始化)
|
||||||
List<StationSplitConfig> stationSplitConfigList = stationSplitConfigService.queryByStationIdWithInit(afterSettleOrderDTO.getStationId());
|
List<StationSplitConfig> stationSplitConfigList = stationSplitConfigService.queryByStationIdWithInit(stationId);
|
||||||
// 计算每个参与分账的用户, 应分多少钱
|
// 计算每个参与分账的用户, 应分多少钱
|
||||||
List<SplitData> splitDataList = calculationSplitDataList(stationSplitConfigList, afterSettleOrderDTO);
|
List<SplitData> splitDataList = calculationSplitDataList(stationSplitConfigList, afterSettleOrderDTO);
|
||||||
List<DivMember> divMemberList = transformDivMemberList(splitDataList);
|
List<DivMember> divMemberList = transformDivMemberList(splitDataList);
|
||||||
// List<DivMember> divMemberList = calculationOfSplitAmount(stationSplitConfigList, afterSettleOrderDTO);
|
// 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)) {
|
if (CollectionUtils.isEmpty(divMemberList)) {
|
||||||
logger.info("realTimeOrderSplit-订单[{}]分账信息为空", afterSettleOrderDTO.getOrderCode());
|
logger.info("realTimeOrderSplit-订单[{}]分账信息为空", orderCode);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
String orderCode = afterSettleOrderDTO.getOrderCode();
|
|
||||||
// 查询订单支付记录
|
// 查询订单支付记录
|
||||||
List<OrderPayRecord> orderPayRecordList = orderPayRecordService.getOrderPayRecordList(orderCode);
|
List<OrderPayRecord> orderPayRecordList = orderPayRecordService.getOrderPayRecordList(orderCode);
|
||||||
// 选出需要分账的支付id
|
// 选出需要分账的支付id
|
||||||
@@ -2049,11 +2058,10 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService {
|
|||||||
@Override
|
@Override
|
||||||
public List<SplitData> calculationSplitDataList(List<StationSplitConfig> stationSplitConfigList, AfterSettleOrderDTO afterSettleOrderDTO) {
|
public List<SplitData> calculationSplitDataList(List<StationSplitConfig> stationSplitConfigList, AfterSettleOrderDTO afterSettleOrderDTO) {
|
||||||
List<SplitData> resultList = Lists.newArrayList();
|
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%, 才进行后续操作
|
// totalElecSplitRatio和totalServiceSplitRatio 都等于100%, 才进行后续操作
|
||||||
if (totalElecSplitRatio.compareTo(BigDecimal.valueOf(100)) != 0 || totalServiceSplitRatio.compareTo(BigDecimal.valueOf(100)) != 0) {
|
boolean verifySplitConfig = stationSplitConfigService.verifySplitConfig(stationSplitConfigList);
|
||||||
logger.info("站点:{}, 分成配置中的电费分成比例相加必须为100.0%, 实际值:{}, 服务费分成比例相加必须为100.0%, 实际值:{}", stationSplitConfigList.get(0).getStationId(), totalElecSplitRatio, totalServiceSplitRatio);
|
if (!verifySplitConfig) {
|
||||||
return resultList;
|
return resultList;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ import com.jsowell.pile.service.AdapayMemberAccountService;
|
|||||||
import com.jsowell.pile.service.StationSplitConfigService;
|
import com.jsowell.pile.service.StationSplitConfigService;
|
||||||
import com.jsowell.pile.vo.web.ShareMemberVO;
|
import com.jsowell.pile.vo.web.ShareMemberVO;
|
||||||
import com.jsowell.pile.vo.web.SplitConfigVO;
|
import com.jsowell.pile.vo.web.SplitConfigVO;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.commons.collections4.CollectionUtils;
|
import org.apache.commons.collections4.CollectionUtils;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
@@ -29,6 +30,7 @@ import java.util.Date;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
@Slf4j
|
||||||
@Service
|
@Service
|
||||||
public class StationSplitConfigServiceImpl implements StationSplitConfigService{
|
public class StationSplitConfigServiceImpl implements StationSplitConfigService{
|
||||||
|
|
||||||
@@ -265,4 +267,23 @@ public class StationSplitConfigServiceImpl implements StationSplitConfigService{
|
|||||||
}
|
}
|
||||||
return stationSplitConfigMapper.batchInsert(splitConfigList);
|
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