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

View File

@@ -21,11 +21,18 @@ public class StationSplitConfigController extends BaseController {
@Autowired
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;
try {
int result = stationSplitConfigService.insertSplitConfig(splitDetailDTO);
int result = stationSplitConfigService.settingSplitConfig(splitDetailDTO);
ajaxResult = result > 0 ? success() : error();
} catch (BusinessException e) {
ajaxResult = error(e.getMessage());

View File

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

View File

@@ -59,9 +59,26 @@ public interface AdapayMemberAccountService {
*/
int deleteAdapayMemberAccountByIds(List<String> ids);
/**
* 根据运营商id查询汇付会员信息
* @param merchantId 运营商id
* @return
*/
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);

View File

@@ -2,6 +2,7 @@ package com.jsowell.pile.service;
import com.jsowell.pile.domain.StationSplitConfig;
import com.jsowell.pile.dto.SplitConfigDTO;
import com.jsowell.pile.vo.web.ShareMemberVO;
import java.util.List;
@@ -13,7 +14,16 @@ public interface StationSplitConfigService{
// 根据站点id查询站点分账配置信息
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.Constants;
import com.jsowell.common.core.redis.RedisCache;
import com.jsowell.common.enums.DelFlagEnum;
import com.jsowell.common.util.DateUtils;
import com.jsowell.common.util.StringUtils;
import com.jsowell.pile.domain.AdapayMemberAccount;
import com.jsowell.pile.domain.PileStationInfo;
import com.jsowell.pile.mapper.AdapayMemberAccountMapper;
import com.jsowell.pile.service.AdapayMemberAccountService;
import com.jsowell.pile.service.PileStationInfoService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
@@ -32,6 +35,9 @@ public class AdapayMemberAccountServiceImpl implements AdapayMemberAccountServic
@Autowired
private RedisCache redisCache;
@Autowired
private PileStationInfoService pileStationInfoService;
/**
* 查询【请填写功能名称】列表
*
@@ -112,9 +118,24 @@ public class AdapayMemberAccountServiceImpl implements AdapayMemberAccountServic
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
public AdapayMemberAccount selectByMemberId(String memberId) {
public AdapayMemberAccount selectByAdapayMemberId(String memberId) {
return adapayMemberAccountMapper.selectByMemberId(memberId);
}
@@ -143,6 +164,7 @@ public class AdapayMemberAccountServiceImpl implements AdapayMemberAccountServic
List<AdapayMemberAccount> accountList = this.selectAdapayMemberAccountList(merchantId);
if (CollectionUtils.isNotEmpty(accountList)) {
List<String> ids = accountList.stream()
.filter(x -> StringUtils.equals(x.getDelFlag(), DelFlagEnum.NORMAL.getValue()))
.filter(x -> StringUtils.equals(x.getStatus(), Constants.TWO))
.map(x -> x.getId() + "")
.collect(Collectors.toList());

View File

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

View File

@@ -135,10 +135,10 @@ public class PileStationInfoServiceImpl implements PileStationInfoService {
CurrentTimePriceDetails currentTimePriceDetails = pileBillingTemplateService.getCurrentTimePriceDetails(stationId);
if (currentTimePriceDetails != null) {
String electricityPrice = currentTimePriceDetails.getElectricityPrice();
electricityPrice = StringUtils.isBlank(electricityPrice) ? "0" : electricityPrice;
electricityPrice = StringUtils.isBlank(electricityPrice) ? Constants.ZERO : electricityPrice;
String servicePrice = currentTimePriceDetails.getServicePrice();
servicePrice = StringUtils.isBlank(servicePrice) ? "0" : servicePrice;
servicePrice = StringUtils.isBlank(servicePrice) ? Constants.ZERO : servicePrice;
vo.setElectricityPrice(new BigDecimal(electricityPrice));
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.util.DateUtils;
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.dto.SplitConfigDTO;
import com.jsowell.pile.dto.SplitUserDetailDTO;
import com.jsowell.pile.mapper.StationSplitConfigMapper;
import com.jsowell.pile.service.AdapayMemberAccountService;
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 javax.annotation.Resource;
@@ -24,32 +30,91 @@ public class StationSplitConfigServiceImpl implements StationSplitConfigService{
@Resource
private StationSplitConfigMapper stationSplitConfigMapper;
@Autowired
private AdapayMemberAccountService adapayMemberAccountService;
@Override
public List<StationSplitConfig> queryByStationId(String stationId) {
return stationSplitConfigMapper.queryByStationId(stationId);
}
@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位
if (splitConfigDTO.getSplitUserDetailList().size() > 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%
List<SplitUserDetailDTO> splitUserDetailList = splitConfigDTO.getSplitUserDetailList();
int feeFlagCount = 0; // 手续费承担方数
BigDecimal totalElectricitySplitRatio = BigDecimal.ZERO;
BigDecimal totalServiceSplitRatio = BigDecimal.ZERO;
boolean haveTheMerchant = false; // 有本运营商的汇付账户
for (SplitUserDetailDTO splitUserDetailDTO : splitUserDetailList) {
totalElectricitySplitRatio = totalElectricitySplitRatio.add(splitUserDetailDTO.getElectricitySplitRatio());
totalServiceSplitRatio = totalServiceSplitRatio.add(splitUserDetailDTO.getServiceSplitRatio());
if (Constants.Y.equals(splitUserDetailDTO.getFeeFlag())) {
if (StringUtils.equals(splitUserDetailDTO.getAdapayMemberId(), adapayMemberAccount.getAdapayMemberId())) {
haveTheMerchant = true;
}
if (Constants.ONE.equals(splitUserDetailDTO.getFeeFlag())) {
feeFlagCount++;
}
totalElectricitySplitRatio = totalElectricitySplitRatio.add(splitUserDetailDTO.getElectricitySplitRatio());
totalServiceSplitRatio = totalServiceSplitRatio.add(splitUserDetailDTO.getServiceSplitRatio());
}
if (feeFlagCount > 1) {
throw new BusinessException("", "只能有一位手续费承担方");
if (!haveTheMerchant) {
// 没有本运营商的汇付账户, 抛出异常
throw new BusinessException("", "参与分成的用户中未包含本运营商的汇付账户");
}
if (feeFlagCount != 1) {
// 只能有一位手续费承担方, 超过则报错
throw new BusinessException("", "手续费承担方设置错误, 有且只能有1位手续费承担方");
}
if (totalElectricitySplitRatio.compareTo(BigDecimal.valueOf(100)) != 0) {
throw new BusinessException("", "电费分成比例相加必须为100.0%");

View File

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

View File

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