diff --git a/jsowell-admin/src/main/java/com/jsowell/service/OrderService.java b/jsowell-admin/src/main/java/com/jsowell/service/OrderService.java index 4a4f2bb60..6dcc3162f 100644 --- a/jsowell-admin/src/main/java/com/jsowell/service/OrderService.java +++ b/jsowell-admin/src/main/java/com/jsowell/service/OrderService.java @@ -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; } diff --git a/jsowell-admin/src/main/java/com/jsowell/web/controller/pile/StationSplitConfigController.java b/jsowell-admin/src/main/java/com/jsowell/web/controller/pile/StationSplitConfigController.java index 76e629d3f..84f719823 100644 --- a/jsowell-admin/src/main/java/com/jsowell/web/controller/pile/StationSplitConfigController.java +++ b/jsowell-admin/src/main/java/com/jsowell/web/controller/pile/StationSplitConfigController.java @@ -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()); diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/dto/SplitUserDetailDTO.java b/jsowell-pile/src/main/java/com/jsowell/pile/dto/SplitUserDetailDTO.java index 04080c4b9..398a834cc 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/dto/SplitUserDetailDTO.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/dto/SplitUserDetailDTO.java @@ -18,6 +18,6 @@ public class SplitUserDetailDTO { // 服务费分成比例 private BigDecimal serviceSplitRatio; - // 是否手续费承担方,N-否,Y-是,手续费承担方有且只能有一个 + // 是否手续费承担方,0-否,1-是,手续费承担方有且只能有一个 private String feeFlag; } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/AdapayMemberAccountService.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/AdapayMemberAccountService.java index fa2cbd23c..06afb06ef 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/AdapayMemberAccountService.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/AdapayMemberAccountService.java @@ -59,9 +59,26 @@ public interface AdapayMemberAccountService { */ int deleteAdapayMemberAccountByIds(List 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); diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/StationSplitConfigService.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/StationSplitConfigService.java index 1e7ff6b2f..25ae2cf29 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/StationSplitConfigService.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/StationSplitConfigService.java @@ -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 queryByStationId(String stationId); + /** + * 根据站点id查询站点分成用户信息 + * 如果没有配置分账用户,并且站点对应的运营商设置了结算账户, 返回本站对应的结算账户, 电费和服务费分成比例都为100% + * 如果没有配置分账用户, 并且站点对应的运营商没有设置结算账户, 返回默认结算账户(举视的账户) + * @param stationId + * @return + */ + List queryShareMembersByStationId(String stationId); + // 插入站点分账配置信息 - int insertSplitConfig(SplitConfigDTO splitConfigDTO); + int settingSplitConfig(SplitConfigDTO splitConfigDTO); } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/AdapayMemberAccountServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/AdapayMemberAccountServiceImpl.java index e9c49b96c..d24d045bb 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/AdapayMemberAccountServiceImpl.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/AdapayMemberAccountServiceImpl.java @@ -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 accountList = this.selectAdapayMemberAccountList(merchantId); if (CollectionUtils.isNotEmpty(accountList)) { List 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()); diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java index 24dfd79cb..649119a70 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java @@ -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 shareMemberList = Lists.newArrayList(); + List shareMemberList = stationSplitConfigService.queryShareMembersByStationId(orderBasicInfo.getStationId()); // 计算每个账户 订单分账金额 List divMemberList = splitAmount(shareMemberList, settleAmount, paymentInfos); diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileStationInfoServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileStationInfoServiceImpl.java index 5880a5c77..a1d42a0ce 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileStationInfoServiceImpl.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileStationInfoServiceImpl.java @@ -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)); diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/StationSplitConfigServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/StationSplitConfigServiceImpl.java index 5d0588845..9859c57ed 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/StationSplitConfigServiceImpl.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/StationSplitConfigServiceImpl.java @@ -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 queryByStationId(String stationId) { return stationSplitConfigMapper.queryByStationId(stationId); } @Override - public int insertSplitConfig(SplitConfigDTO splitConfigDTO) { + public List queryShareMembersByStationId(String stationId) { + List resultList = Lists.newArrayList(); + List 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 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%"); diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/vo/web/ShareMemberVO.java b/jsowell-pile/src/main/java/com/jsowell/pile/vo/web/ShareMemberVO.java index b88d42a20..2d4894a0c 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/vo/web/ShareMemberVO.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/vo/web/ShareMemberVO.java @@ -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; } diff --git a/jsowell-pile/src/main/resources/mapper/pile/StationSplitConfigMapper.xml b/jsowell-pile/src/main/resources/mapper/pile/StationSplitConfigMapper.xml index 94a4ff903..cc467688a 100644 --- a/jsowell-pile/src/main/resources/mapper/pile/StationSplitConfigMapper.xml +++ b/jsowell-pile/src/main/resources/mapper/pile/StationSplitConfigMapper.xml @@ -29,6 +29,7 @@ from station_split_config where del_flag = '0' and station_id = #{stationId} + order by fee_flag