update 0xA1双枪并充逻辑

This commit is contained in:
Lemon
2025-08-05 16:17:46 +08:00
parent 5fddbd8e8c
commit 9adc5761bf
3 changed files with 105 additions and 33 deletions

View File

@@ -576,7 +576,7 @@ public interface OrderBasicInfoService{
* @param dto
* @return
*/
Map<String, Object> verifyMergeChargeOrder(VerifyMergeChargeOrderDTO dto) throws Exception;
Map<String, String> verifyMergeChargeOrder(VerifyMergeChargeOrderDTO dto) throws Exception;
List<OrderBasicInfo> getOrderBasicInfoByTimeInterval(List<String> stationIds, String startTime, String endTime);

View File

@@ -53,9 +53,7 @@ import com.jsowell.pile.transaction.service.TransactionService;
import com.jsowell.pile.util.UserUtils;
import com.jsowell.pile.vo.OrderInfoDetailVO;
import com.jsowell.pile.vo.SupStationStatsVO;
import com.jsowell.pile.vo.base.MerchantOrderInfoVO;
import com.jsowell.pile.vo.base.OrderAmountDetailVO;
import com.jsowell.pile.vo.base.OrderPeriodAmountVO;
import com.jsowell.pile.vo.base.*;
import com.jsowell.pile.vo.base.PileInfoVO;
import com.jsowell.pile.vo.lianlian.AccumulativeInfoVO;
import com.jsowell.pile.vo.nanrui.JiangSuOrderInfoVO;
@@ -5360,12 +5358,12 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService {
* @return
*/
@Override
public Map<String, Object> verifyMergeChargeOrder(VerifyMergeChargeOrderDTO dto) throws Exception {
Map<String, Object> map = new LinkedHashMap<>();
public Map<String, String> verifyMergeChargeOrder(VerifyMergeChargeOrderDTO dto) throws Exception {
String pileSn = dto.getPileSn();
String connectorCode = dto.getConnectorCode();
Map<String, String> map = new LinkedHashMap<>();
GenerateOrderDTO generateOrderDTO = new GenerateOrderDTO();
generateOrderDTO.setPileSn(dto.getPileSn());
generateOrderDTO.setConnectorCode(dto.getConnectorCode());
generateOrderDTO.setMergeChargeNumber(dto.getMergeChargeNumber());
// 判断是否为主枪
@@ -5373,35 +5371,91 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService {
// 主枪
generateOrderDTO.setMainConnectorCode(dto.getPileConnectorCode());
}
// 查询充电桩信息
PileBasicInfo pileBasicInfo = pileBasicInfoService.selectPileBasicInfoBySN(pileSn);
// 查询是否有权限
ConfirmStartChargingMemberVO memberWalletVO = null;
// 区分是卡还是vin充电
String startMode = dto.getStartMode();
if (StringUtils.equals(Constants.ZERO_ONE, startMode)) {
// 刷卡鉴权
// 根据卡号查询用户信息
String physicsCard = dto.getPhysicsCard();
PileAuthCard pileAuthCardInfo = pileAuthCardService.selectCardInfoByLogicCard(physicsCard);
if (pileAuthCardInfo == null) {
// 未查到此卡信息
throw new BusinessException(ReturnCodeEnum.CODE_THIS_CARD_HAS_NO_INFO);
}
generateOrderDTO.setPileAuthCardInfo(pileAuthCardInfo);
generateOrderDTO.setStartMode(StartModeEnum.AUTH_CARD.getValue());
generateOrderDTO.setMemberId(pileAuthCardInfo.getMemberId());
memberWalletVO = memberBasicInfoService.queryMemberInfoByCardCode(physicsCard, pileBasicInfo.getMerchantId() + "", pileBasicInfo.getStationId() + "");
logger.info("并充生成订单----根据卡号:{},查询会员信息:{}", physicsCard, JSON.toJSONString(memberWalletVO));
}else if (StringUtils.equals(Constants.ZERO_THREE, startMode)) {
// vin鉴权
// 根据vin查询绑定用户信息
String vinCode = dto.getVinCode();
MemberPlateNumberRelation memberInfo = memberPlateNumberRelationService.getMemberPlateInfoByVinCode(vinCode);
if (memberInfo == null) {
throw new BusinessException(ReturnCodeEnum.CODE_THIS_VIN_INFO_IS_NULL);
}
generateOrderDTO.setMemberPlateNumberRelation(memberInfo);
generateOrderDTO.setStartMode(StartModeEnum.VIN_CODE.getValue());
generateOrderDTO.setMemberId(memberInfo.getMemberId());
memberWalletVO = memberBasicInfoService.queryByVinCode(vinCode, pileBasicInfo.getMerchantId() + "", pileBasicInfo.getStationId() + "");
logger.info("并充生成订单----根据vin码:{},查询会员信息:{}", vinCode, JSON.toJSONString(memberWalletVO));
}
// 鉴权通过,生成订单启动充电
map = generateOrderByCard(generateOrderDTO);
String accountBalance = Constants.ZERO;
// 如果查询后memberWalletVO为null, 则标示无权限
if (memberWalletVO == null) {
map.put("transactionCode", Constants.ILLEGAL_TRANSACTION_CODE);
map.put("accountBalance", accountBalance);
map.put("defeatReasonCode", "01");
logger.info("并充生成订单----无此会员权限");
return map;
}
// 如果总余额小于0, 则标示余额不足
if (memberWalletVO.getTotalBalance().compareTo(BigDecimal.ZERO) < 0) {
map.put("transactionCode", Constants.ILLEGAL_TRANSACTION_CODE);
map.put("accountBalance", accountBalance);
map.put("defeatReasonCode", "03");
logger.info("并充生成订单----余额不足");
return map;
}
/*
鉴权通过, 生成订单并支付
*/
String payMode;
if (StringUtils.equals(Constants.ONE, memberWalletVO.getPlatformTesterFlag())
|| StringUtils.equals(Constants.ONE, memberWalletVO.getStationWhiteListFlag())) {
// 如果是平台测试员或者是站点白名单
accountBalance = Constants.WHITELIST_DEFAULT_AMOUNT.toString();
payMode = OrderPayModeEnum.PAYMENT_OF_WHITELIST.getValue();
} else {
BigDecimal totalBalance = memberWalletVO.getTotalBalance();
accountBalance = totalBalance.toString();
if (totalBalance.compareTo(Constants.BALANCE_PAY_MAX_AMOUNT_NEW) > 0) {
accountBalance = Constants.BALANCE_PAY_MAX_AMOUNT_NEW.toString();
}
payMode = OrderPayModeEnum.PAYMENT_OF_PRINCIPAL_BALANCE.getValue();
}
// 生成交易流水号, 传递给订单使用
String transactionCode = IdUtils.generateTransactionCode(pileSn, connectorCode);
map.put("transactionCode", transactionCode);
map.put("accountBalance", accountBalance);
// 异步创建订单
// GenerateOrderDTO dto = new GenerateOrderDTO();
generateOrderDTO.setPileSn(pileSn);
if (StringUtils.isNotBlank(memberWalletVO.getPlateNumber())) {
generateOrderDTO.setPlateNumber(memberWalletVO.getPlateNumber());
}
generateOrderDTO.setOrderType(OrderTypeEnum.MERGE_CHARGE_ORDER.getValue()); // 并充订单标识
generateOrderDTO.setConnectorCode(connectorCode);
generateOrderDTO.setTransactionCode(transactionCode);
generateOrderDTO.setChargeAmount(new BigDecimal(accountBalance));
generateOrderDTO.setPayMode(payMode);
generateOrderDTO.setStartMode(StringUtils.equals("01", startMode) ? "2" : "5");
generateOrderDTO.setMemberId(memberWalletVO.getMemberId());
generateOrderDTO.setMerchantId(pileBasicInfo.getMerchantId() + "");
CompletableFuture.runAsync(() -> {
try {
Map<String, Object> resultMap = generateOrderByCardV2(generateOrderDTO);
} catch (Exception e) {
throw new RuntimeException(e);
}
}, executor);
return map;
}