This commit is contained in:
Lemon
2024-09-28 10:17:24 +08:00
11 changed files with 168 additions and 45 deletions

View File

@@ -41,13 +41,14 @@ import com.jsowell.pile.dto.*;
import com.jsowell.pile.service.*; import com.jsowell.pile.service.*;
import com.jsowell.pile.service.programlogic.AbstractProgramLogic; import com.jsowell.pile.service.programlogic.AbstractProgramLogic;
import com.jsowell.pile.service.programlogic.ProgramLogicFactory; import com.jsowell.pile.service.programlogic.ProgramLogicFactory;
import com.jsowell.pile.util.MerchantUtils;
import com.jsowell.pile.util.UserUtils; import com.jsowell.pile.util.UserUtils;
import com.jsowell.pile.vo.OrderPayRecordVO; import com.jsowell.pile.vo.OrderPayRecordVO;
import com.jsowell.pile.vo.base.*; import com.jsowell.pile.vo.base.OrderAmountDetailVO;
import com.jsowell.pile.vo.base.OrderPeriodAmountVO;
import com.jsowell.pile.vo.base.PileInfoVO; import com.jsowell.pile.vo.base.PileInfoVO;
import com.jsowell.pile.vo.uniapp.customer.*; import com.jsowell.pile.vo.base.StationInfoVO;
import com.jsowell.pile.vo.uniapp.customer.InvoiceRecordVO; import com.jsowell.pile.vo.uniapp.customer.InvoiceRecordVO;
import com.jsowell.pile.vo.uniapp.customer.*;
import com.jsowell.pile.vo.web.*; import com.jsowell.pile.vo.web.*;
import com.jsowell.thirdparty.common.CommonService; import com.jsowell.thirdparty.common.CommonService;
import com.jsowell.wxpay.response.WechatPayNotifyParameter; import com.jsowell.wxpay.response.WechatPayNotifyParameter;
@@ -840,23 +841,22 @@ public class OrderService {
); );
} }
// 如果是希晓的会员,将余额支付添加进去 // 如果是希晓的会员,将余额支付添加进去
if (MerchantUtils.isXiXiaoMerchant(String.valueOf(memberBasicInfo.getMerchantId()))) { // 35-希晓 // if (MerchantUtils.isXiXiaoMerchant(String.valueOf(memberBasicInfo.getMerchantId()))) { // 35-希晓
// 余额支付 // // 余额支付
result.add( // result.add(
PayModeVO.builder() // PayModeVO.builder()
.payModeCode(OrderPayModeEnum.PAYMENT_OF_PRINCIPAL_BALANCE.getValue()) // .payModeCode(OrderPayModeEnum.PAYMENT_OF_PRINCIPAL_BALANCE.getValue())
.payModeName(OrderPayModeEnum.PAYMENT_OF_PRINCIPAL_BALANCE.getLabel()) // .payModeName(OrderPayModeEnum.PAYMENT_OF_PRINCIPAL_BALANCE.getLabel())
.build() // .build()
); // );
} else { // }
// 2024年9月27日09点49分 开启余额支付 // 2024年9月27日09点49分 开启余额支付
result.add( result.add(
PayModeVO.builder() PayModeVO.builder()
.payModeCode(OrderPayModeEnum.PAYMENT_OF_PRINCIPAL_BALANCE.getValue()) .payModeCode(OrderPayModeEnum.PAYMENT_OF_PRINCIPAL_BALANCE.getValue())
.payModeName(OrderPayModeEnum.PAYMENT_OF_PRINCIPAL_BALANCE.getLabel()) .payModeName(OrderPayModeEnum.PAYMENT_OF_PRINCIPAL_BALANCE.getLabel())
.build() .build()
); );
}
} }
return result; return result;
} }
@@ -1279,7 +1279,7 @@ public class OrderService {
if (StringUtils.isBlank(memberId)) { if (StringUtils.isBlank(memberId)) {
return; return;
} }
AdapayMemberAccount adapayMemberAccount = adapayMemberAccountService.selectByMemberId(memberId); AdapayMemberAccount adapayMemberAccount = adapayMemberAccountService.selectByAdapayMemberId(memberId);
if (adapayMemberAccount == null) { if (adapayMemberAccount == null) {
return; return;
} }

View File

@@ -21,11 +21,18 @@ public class StationSplitConfigController extends BaseController {
@Autowired @Autowired
private StationSplitConfigService stationSplitConfigService; private StationSplitConfigService stationSplitConfigService;
@RequestMapping("/insertSplitConfig") /**
public AjaxResult insertSplitConfig(HttpServletRequest request, @RequestBody SplitConfigDTO splitDetailDTO) { * 设置站点配置
* /station/splitconfig/settingSplitConfig
* @param request
* @param splitDetailDTO
* @return
*/
@RequestMapping("/settingSplitConfig")
public AjaxResult settingSplitConfig(HttpServletRequest request, @RequestBody SplitConfigDTO splitDetailDTO) {
AjaxResult ajaxResult; AjaxResult ajaxResult;
try { try {
int result = stationSplitConfigService.insertSplitConfig(splitDetailDTO); int result = stationSplitConfigService.settingSplitConfig(splitDetailDTO);
ajaxResult = result > 0 ? success() : error(); ajaxResult = result > 0 ? success() : error();
} catch (BusinessException e) { } catch (BusinessException e) {
ajaxResult = error(e.getMessage()); ajaxResult = error(e.getMessage());

View File

@@ -18,6 +18,6 @@ public class SplitUserDetailDTO {
// 服务费分成比例 // 服务费分成比例
private BigDecimal serviceSplitRatio; private BigDecimal serviceSplitRatio;
// 是否手续费承担方,N-否,Y-是,手续费承担方有且只能有一个 // 是否手续费承担方,0-否,1-是,手续费承担方有且只能有一个
private String feeFlag; private String feeFlag;
} }

View File

@@ -59,9 +59,26 @@ public interface AdapayMemberAccountService {
*/ */
int deleteAdapayMemberAccountByIds(List<String> ids); int deleteAdapayMemberAccountByIds(List<String> ids);
/**
* 根据运营商id查询汇付会员信息
* @param merchantId 运营商id
* @return
*/
AdapayMemberAccount selectByMerchantId(String merchantId); AdapayMemberAccount selectByMerchantId(String merchantId);
AdapayMemberAccount selectByMemberId(String memberId); /**
* 根据充电站id查询汇付会员信息
* @param stationId 站点id
* @return
*/
AdapayMemberAccount selectByStationId(String stationId);
/**
* 根据汇付会员id查询会员信息
* @param adapayMemberId 汇付会员id
* @return
*/
AdapayMemberAccount selectByAdapayMemberId(String adapayMemberId);
void updateAdapayMemberAccountByMemberId(AdapayMemberAccount adapayMemberAccount); void updateAdapayMemberAccountByMemberId(AdapayMemberAccount adapayMemberAccount);

View File

@@ -2,6 +2,7 @@ package com.jsowell.pile.service;
import com.jsowell.pile.domain.StationSplitConfig; import com.jsowell.pile.domain.StationSplitConfig;
import com.jsowell.pile.dto.SplitConfigDTO; import com.jsowell.pile.dto.SplitConfigDTO;
import com.jsowell.pile.vo.web.ShareMemberVO;
import java.util.List; import java.util.List;
@@ -13,7 +14,16 @@ public interface StationSplitConfigService{
// 根据站点id查询站点分账配置信息 // 根据站点id查询站点分账配置信息
List<StationSplitConfig> queryByStationId(String stationId); List<StationSplitConfig> queryByStationId(String stationId);
/**
* 根据站点id查询站点分成用户信息
* 如果没有配置分账用户,并且站点对应的运营商设置了结算账户, 返回本站对应的结算账户, 电费和服务费分成比例都为100%
* 如果没有配置分账用户, 并且站点对应的运营商没有设置结算账户, 返回默认结算账户(举视的账户)
* @param stationId
* @return
*/
List<ShareMemberVO> queryShareMembersByStationId(String stationId);
// 插入站点分账配置信息 // 插入站点分账配置信息
int insertSplitConfig(SplitConfigDTO splitConfigDTO); int settingSplitConfig(SplitConfigDTO splitConfigDTO);
} }

View File

@@ -4,11 +4,14 @@ import com.google.common.collect.Lists;
import com.jsowell.common.constant.CacheConstants; import com.jsowell.common.constant.CacheConstants;
import com.jsowell.common.constant.Constants; import com.jsowell.common.constant.Constants;
import com.jsowell.common.core.redis.RedisCache; import com.jsowell.common.core.redis.RedisCache;
import com.jsowell.common.enums.DelFlagEnum;
import com.jsowell.common.util.DateUtils; import com.jsowell.common.util.DateUtils;
import com.jsowell.common.util.StringUtils; import com.jsowell.common.util.StringUtils;
import com.jsowell.pile.domain.AdapayMemberAccount; import com.jsowell.pile.domain.AdapayMemberAccount;
import com.jsowell.pile.domain.PileStationInfo;
import com.jsowell.pile.mapper.AdapayMemberAccountMapper; import com.jsowell.pile.mapper.AdapayMemberAccountMapper;
import com.jsowell.pile.service.AdapayMemberAccountService; import com.jsowell.pile.service.AdapayMemberAccountService;
import com.jsowell.pile.service.PileStationInfoService;
import lombok.extern.slf4j.Slf4j; 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;
@@ -32,6 +35,9 @@ public class AdapayMemberAccountServiceImpl implements AdapayMemberAccountServic
@Autowired @Autowired
private RedisCache redisCache; private RedisCache redisCache;
@Autowired
private PileStationInfoService pileStationInfoService;
/** /**
* 查询【请填写功能名称】列表 * 查询【请填写功能名称】列表
* *
@@ -112,9 +118,24 @@ public class AdapayMemberAccountServiceImpl implements AdapayMemberAccountServic
return adapayMemberAccount; return adapayMemberAccount;
} }
/**
* 根据站点id查询汇付会员账户信息, 只查询生效的
* @param stationId 站点id
* @return
*/
@Override
public AdapayMemberAccount selectByStationId(String stationId) {
PileStationInfo pileStationInfo = pileStationInfoService.selectPileStationInfoById(Long.parseLong(stationId));
AdapayMemberAccount adapayMemberAccount = selectByMerchantId(String.valueOf(pileStationInfo.getMerchantId()));
if (adapayMemberAccount == null || !StringUtils.equals(adapayMemberAccount.getStatus(), Constants.ONE)) {
return null;
}
return adapayMemberAccount;
}
@Override @Override
public AdapayMemberAccount selectByMemberId(String memberId) { public AdapayMemberAccount selectByAdapayMemberId(String memberId) {
return adapayMemberAccountMapper.selectByMemberId(memberId); return adapayMemberAccountMapper.selectByMemberId(memberId);
} }
@@ -143,6 +164,7 @@ public class AdapayMemberAccountServiceImpl implements AdapayMemberAccountServic
List<AdapayMemberAccount> accountList = this.selectAdapayMemberAccountList(merchantId); List<AdapayMemberAccount> accountList = this.selectAdapayMemberAccountList(merchantId);
if (CollectionUtils.isNotEmpty(accountList)) { if (CollectionUtils.isNotEmpty(accountList)) {
List<String> ids = accountList.stream() List<String> ids = accountList.stream()
.filter(x -> StringUtils.equals(x.getDelFlag(), DelFlagEnum.NORMAL.getValue()))
.filter(x -> StringUtils.equals(x.getStatus(), Constants.TWO)) .filter(x -> StringUtils.equals(x.getStatus(), Constants.TWO))
.map(x -> x.getId() + "") .map(x -> x.getId() + "")
.collect(Collectors.toList()); .collect(Collectors.toList());

View File

@@ -185,7 +185,8 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService {
@Autowired @Autowired
private IThirdpartySnRelationService snRelationService; private IThirdpartySnRelationService snRelationService;
@Autowired
private StationSplitConfigService stationSplitConfigService;
@Override @Override
public int deleteByPrimaryKey(Integer id) { public int deleteByPrimaryKey(Integer id) {
@@ -1523,7 +1524,7 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService {
} }
// 根据站点id查询该站点配置的分账信息, 如果为空表示本运营商分100% // 根据站点id查询该站点配置的分账信息, 如果为空表示本运营商分100%
List<ShareMemberVO> shareMemberList = Lists.newArrayList(); List<ShareMemberVO> shareMemberList = stationSplitConfigService.queryShareMembersByStationId(orderBasicInfo.getStationId());
// 计算每个账户 订单分账金额 // 计算每个账户 订单分账金额
List<DivMember> divMemberList = splitAmount(shareMemberList, settleAmount, paymentInfos); List<DivMember> divMemberList = splitAmount(shareMemberList, settleAmount, paymentInfos);

View File

@@ -135,10 +135,10 @@ public class PileStationInfoServiceImpl implements PileStationInfoService {
CurrentTimePriceDetails currentTimePriceDetails = pileBillingTemplateService.getCurrentTimePriceDetails(stationId); CurrentTimePriceDetails currentTimePriceDetails = pileBillingTemplateService.getCurrentTimePriceDetails(stationId);
if (currentTimePriceDetails != null) { if (currentTimePriceDetails != null) {
String electricityPrice = currentTimePriceDetails.getElectricityPrice(); String electricityPrice = currentTimePriceDetails.getElectricityPrice();
electricityPrice = StringUtils.isBlank(electricityPrice) ? "0" : electricityPrice; electricityPrice = StringUtils.isBlank(electricityPrice) ? Constants.ZERO : electricityPrice;
String servicePrice = currentTimePriceDetails.getServicePrice(); String servicePrice = currentTimePriceDetails.getServicePrice();
servicePrice = StringUtils.isBlank(servicePrice) ? "0" : servicePrice; servicePrice = StringUtils.isBlank(servicePrice) ? Constants.ZERO : servicePrice;
vo.setElectricityPrice(new BigDecimal(electricityPrice)); vo.setElectricityPrice(new BigDecimal(electricityPrice));
vo.setServicePrice(new BigDecimal(servicePrice)); vo.setServicePrice(new BigDecimal(servicePrice));

View File

@@ -6,11 +6,17 @@ import com.jsowell.common.enums.DelFlagEnum;
import com.jsowell.common.exception.BusinessException; import com.jsowell.common.exception.BusinessException;
import com.jsowell.common.util.DateUtils; import com.jsowell.common.util.DateUtils;
import com.jsowell.common.util.SecurityUtils; import com.jsowell.common.util.SecurityUtils;
import com.jsowell.common.util.StringUtils;
import com.jsowell.pile.domain.AdapayMemberAccount;
import com.jsowell.pile.domain.StationSplitConfig; import com.jsowell.pile.domain.StationSplitConfig;
import com.jsowell.pile.dto.SplitConfigDTO; import com.jsowell.pile.dto.SplitConfigDTO;
import com.jsowell.pile.dto.SplitUserDetailDTO; import com.jsowell.pile.dto.SplitUserDetailDTO;
import com.jsowell.pile.mapper.StationSplitConfigMapper; import com.jsowell.pile.mapper.StationSplitConfigMapper;
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 org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
@@ -24,32 +30,91 @@ public class StationSplitConfigServiceImpl implements StationSplitConfigService{
@Resource @Resource
private StationSplitConfigMapper stationSplitConfigMapper; private StationSplitConfigMapper stationSplitConfigMapper;
@Autowired
private AdapayMemberAccountService adapayMemberAccountService;
@Override @Override
public List<StationSplitConfig> queryByStationId(String stationId) { public List<StationSplitConfig> queryByStationId(String stationId) {
return stationSplitConfigMapper.queryByStationId(stationId); return stationSplitConfigMapper.queryByStationId(stationId);
} }
@Override @Override
public int insertSplitConfig(SplitConfigDTO splitConfigDTO) { public List<ShareMemberVO> queryShareMembersByStationId(String stationId) {
List<ShareMemberVO> resultList = Lists.newArrayList();
List<StationSplitConfig> stationSplitConfigs = queryByStationId(stationId);
if (CollectionUtils.isEmpty(stationSplitConfigs)) {
// 如果为空的话,说明没有配置站点分账
AdapayMemberAccount adapayMemberAccount = adapayMemberAccountService.selectByStationId(stationId);
if (adapayMemberAccount != null) {
ShareMemberVO shareMemberVO = new ShareMemberVO();
shareMemberVO.setAdapayMemberId(adapayMemberAccount.getAdapayMemberId());
shareMemberVO.setElectricityShareRatio(BigDecimal.valueOf(100));
shareMemberVO.setServiceShareRatio(BigDecimal.valueOf(100));
shareMemberVO.setFeeFlag(Constants.Y);
resultList.add(shareMemberVO);
} else {
// 如果没有配置站点分账,则默认为举视账户
AdapayMemberAccount aDefault = adapayMemberAccountService.getDefault();
ShareMemberVO shareMemberVO = new ShareMemberVO();
shareMemberVO.setAdapayMemberId(aDefault.getAdapayMemberId());
shareMemberVO.setElectricityShareRatio(BigDecimal.valueOf(100));
shareMemberVO.setServiceShareRatio(BigDecimal.valueOf(100));
shareMemberVO.setFeeFlag(Constants.Y);
resultList.add(shareMemberVO);
}
} else {
for (StationSplitConfig stationSplitConfig : stationSplitConfigs) {
ShareMemberVO shareMemberVO = new ShareMemberVO();
shareMemberVO.setAdapayMemberId(stationSplitConfig.getAdapayMemberId());
shareMemberVO.setElectricityShareRatio(stationSplitConfig.getElectricitySplitRatio());
shareMemberVO.setServiceShareRatio(stationSplitConfig.getServiceSplitRatio());
shareMemberVO.setFeeFlag(StringUtils.equals(Constants.ONE, stationSplitConfig.getFeeFlag()) ? Constants.Y : Constants.N);
resultList.add(shareMemberVO);
}
}
return resultList;
}
@Override
public int settingSplitConfig(SplitConfigDTO splitConfigDTO) {
// 参与分成的用户不能超过7位 // 参与分成的用户不能超过7位
if (splitConfigDTO.getSplitUserDetailList().size() > 7) { if (splitConfigDTO.getSplitUserDetailList().size() > 7) {
throw new BusinessException("", "参与分成的用户不能超过7位"); throw new BusinessException("", "参与分成的用户不能超过7位");
} }
// 只能有一位手续费承担方, 超过则报错
int feeFlagCount = 0; // 根据运营商查询汇付会员信息
AdapayMemberAccount adapayMemberAccount = adapayMemberAccountService.selectByMerchantId(splitConfigDTO.getMerchantId());
if (adapayMemberAccount == null) {
throw new BusinessException("", "未查询到该运营商的汇付会员信息");
}
if (!Constants.ONE.equals(adapayMemberAccount.getStatus())) {
throw new BusinessException("", "该运营商的汇付会员信息未审核通过");
}
// 校验分成比例相加是否为100.0% // 校验分成比例相加是否为100.0%
List<SplitUserDetailDTO> splitUserDetailList = splitConfigDTO.getSplitUserDetailList(); List<SplitUserDetailDTO> splitUserDetailList = splitConfigDTO.getSplitUserDetailList();
int feeFlagCount = 0; // 手续费承担方数
BigDecimal totalElectricitySplitRatio = BigDecimal.ZERO; BigDecimal totalElectricitySplitRatio = BigDecimal.ZERO;
BigDecimal totalServiceSplitRatio = BigDecimal.ZERO; BigDecimal totalServiceSplitRatio = BigDecimal.ZERO;
boolean haveTheMerchant = false; // 有本运营商的汇付账户
for (SplitUserDetailDTO splitUserDetailDTO : splitUserDetailList) { for (SplitUserDetailDTO splitUserDetailDTO : splitUserDetailList) {
totalElectricitySplitRatio = totalElectricitySplitRatio.add(splitUserDetailDTO.getElectricitySplitRatio()); if (StringUtils.equals(splitUserDetailDTO.getAdapayMemberId(), adapayMemberAccount.getAdapayMemberId())) {
totalServiceSplitRatio = totalServiceSplitRatio.add(splitUserDetailDTO.getServiceSplitRatio()); haveTheMerchant = true;
if (Constants.Y.equals(splitUserDetailDTO.getFeeFlag())) { }
if (Constants.ONE.equals(splitUserDetailDTO.getFeeFlag())) {
feeFlagCount++; feeFlagCount++;
} }
totalElectricitySplitRatio = totalElectricitySplitRatio.add(splitUserDetailDTO.getElectricitySplitRatio());
totalServiceSplitRatio = totalServiceSplitRatio.add(splitUserDetailDTO.getServiceSplitRatio());
} }
if (feeFlagCount > 1) { if (!haveTheMerchant) {
throw new BusinessException("", "只能有一位手续费承担方"); // 没有本运营商的汇付账户, 抛出异常
throw new BusinessException("", "参与分成的用户中未包含本运营商的汇付账户");
}
if (feeFlagCount != 1) {
// 只能有一位手续费承担方, 超过则报错
throw new BusinessException("", "手续费承担方设置错误, 有且只能有1位手续费承担方");
} }
if (totalElectricitySplitRatio.compareTo(BigDecimal.valueOf(100)) != 0) { if (totalElectricitySplitRatio.compareTo(BigDecimal.valueOf(100)) != 0) {
throw new BusinessException("", "电费分成比例相加必须为100.0%"); throw new BusinessException("", "电费分成比例相加必须为100.0%");

View File

@@ -14,11 +14,6 @@ public class ShareMemberVO {
*/ */
private String adapayMemberId; private String adapayMemberId;
/**
* 手机号
*/
private String memberPhoneNumber;
/** /**
* 电费分润比例 * 电费分润比例
*/ */
@@ -28,4 +23,9 @@ public class ShareMemberVO {
* 服务费分润比例 * 服务费分润比例
*/ */
private BigDecimal serviceShareRatio; private BigDecimal serviceShareRatio;
/**
* 手续费承担方
*/
private String feeFlag;
} }

View File

@@ -29,6 +29,7 @@
from station_split_config from station_split_config
where del_flag = '0' where del_flag = '0'
and station_id = #{stationId} and station_id = #{stationId}
order by fee_flag
</select> </select>
<insert id="batchInsert" parameterType="map"> <insert id="batchInsert" parameterType="map">