mirror of
https://codeup.aliyun.com/67c68d4e484ca2f0a13ac3c1/ydc/jsowell-charger-web.git
synced 2026-05-09 04:20:08 +08:00
update 充电桩主动申请充电逻辑优化
This commit is contained in:
@@ -3,30 +3,32 @@ package com.jsowell.netty.handler.yunkuaichong;
|
||||
import com.alibaba.fastjson2.JSON;
|
||||
import com.google.common.primitives.Bytes;
|
||||
import com.jsowell.common.constant.Constants;
|
||||
import com.jsowell.pile.dto.ConfirmStartChargingData;
|
||||
import com.jsowell.common.core.domain.ykc.YKCDataProtocol;
|
||||
import com.jsowell.common.core.domain.ykc.YKCFrameTypeCode;
|
||||
import com.jsowell.common.enums.ykc.CardStatusEnum;
|
||||
import com.jsowell.common.enums.ykc.OrderPayModeEnum;
|
||||
import com.jsowell.common.enums.ykc.ReturnCodeEnum;
|
||||
import com.jsowell.common.enums.ykc.StartModeEnum;
|
||||
import com.jsowell.common.exception.BusinessException;
|
||||
import com.jsowell.common.util.BytesUtil;
|
||||
import com.jsowell.common.util.StringUtils;
|
||||
import com.jsowell.common.util.YKCUtils;
|
||||
import com.jsowell.common.util.id.IdUtils;
|
||||
import com.jsowell.netty.factory.YKCOperateFactory;
|
||||
import com.jsowell.pile.domain.MemberPlateNumberRelation;
|
||||
import com.jsowell.pile.domain.PileAuthCard;
|
||||
import com.jsowell.pile.domain.PileBasicInfo;
|
||||
import com.jsowell.pile.dto.ConfirmStartChargingData;
|
||||
import com.jsowell.pile.dto.GenerateOrderDTO;
|
||||
import com.jsowell.pile.service.MemberPlateNumberRelationService;
|
||||
import com.jsowell.pile.service.OrderBasicInfoService;
|
||||
import com.jsowell.pile.service.PileAuthCardService;
|
||||
import com.jsowell.pile.service.PileMsgRecordService;
|
||||
import com.jsowell.pile.service.*;
|
||||
import com.jsowell.pile.vo.base.ConfirmStartChargingMemberVO;
|
||||
import io.netty.channel.ChannelHandlerContext;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
@@ -53,6 +55,12 @@ public class ConfirmStartChargingRequestHandler extends AbstractYkcHandler {
|
||||
@Autowired
|
||||
private PileMsgRecordService pileMsgRecordService;
|
||||
|
||||
@Autowired
|
||||
private PileBasicInfoService pileBasicInfoService;
|
||||
|
||||
@Autowired
|
||||
private MemberBasicInfoService memberBasicInfoService;
|
||||
|
||||
@Override
|
||||
public void afterPropertiesSet() throws Exception {
|
||||
YKCOperateFactory.register(type, this);
|
||||
@@ -122,11 +130,13 @@ public class ConfirmStartChargingRequestHandler extends AbstractYkcHandler {
|
||||
.vinCode(vinCode)
|
||||
.build();
|
||||
|
||||
// 启动充电
|
||||
this.confirmStartCharging(confirmStartChargingData);
|
||||
|
||||
byte[] defeatReasonByteArr = Constants.zeroByteArray;
|
||||
/**
|
||||
* 刷卡启动充电
|
||||
*/
|
||||
String logicCard = "";
|
||||
byte[] authenticationFlagByteArr = Constants.zeroByteArray; // 鉴权成功标识
|
||||
byte[] accountBalanceByteArr = Constants.zeroByteArray; // 账户余额
|
||||
String transactionCode = "";
|
||||
@@ -195,10 +205,6 @@ public class ConfirmStartChargingRequestHandler extends AbstractYkcHandler {
|
||||
accountBalanceByteArr = BytesUtil.checkLengthAndBehindAppendZero(accountBalanceByteArr, 8);
|
||||
authenticationFlagByteArr = Constants.zeroByteArray;
|
||||
}
|
||||
// if (!StringUtils.equals("1", plateInfo.getVinStatus())) {
|
||||
// // 1- 正常使用
|
||||
// throw new BusinessException("", vinCode + "vin状态不正确");
|
||||
// }
|
||||
// vin码生成订单 vin启动充电
|
||||
GenerateOrderDTO dto = new GenerateOrderDTO();
|
||||
dto.setMemberPlateNumberRelation(plateInfo);
|
||||
@@ -268,71 +274,84 @@ public class ConfirmStartChargingRequestHandler extends AbstractYkcHandler {
|
||||
}
|
||||
|
||||
/**
|
||||
* 充电桩主动申请充电 逻辑
|
||||
* 充电桩主动申请充电逻辑
|
||||
* @param confirmStartChargingData
|
||||
* @return
|
||||
*/
|
||||
private byte[] confirmStartCharging(ConfirmStartChargingData confirmStartChargingData) {
|
||||
String startMode = confirmStartChargingData.getStartMode();
|
||||
private Map<String, String> confirmStartCharging(ConfirmStartChargingData confirmStartChargingData) {
|
||||
Map<String, String> resultMap = new HashMap<>();
|
||||
|
||||
String pileSn = confirmStartChargingData.getPileSn();
|
||||
String connectorCode = confirmStartChargingData.getConnectorCode();
|
||||
|
||||
GenerateOrderDTO dto = null;
|
||||
// 查询充电桩信息
|
||||
PileBasicInfo pileBasicInfo = pileBasicInfoService.selectPileBasicInfoBySN(pileSn);
|
||||
|
||||
// 查询是否有权限
|
||||
ConfirmStartChargingMemberVO memberWalletVO = null;
|
||||
String startMode = confirmStartChargingData.getStartMode();
|
||||
if (StringUtils.equals("01", startMode)) {
|
||||
String physicsCard = confirmStartChargingData.getPhysicsCard();
|
||||
memberWalletVO = memberBasicInfoService.queryMemberInfoByCardCode(physicsCard, pileBasicInfo.getMerchantId() + "", pileBasicInfo.getStationId() + "");
|
||||
} else if (StringUtils.equals("03", startMode)) {
|
||||
String vinCode = confirmStartChargingData.getVinCode();
|
||||
memberWalletVO = memberBasicInfoService.queryByVinCode(vinCode, pileBasicInfo.getMerchantId() + "", pileBasicInfo.getStationId() + "");
|
||||
}
|
||||
|
||||
String accountBalance = Constants.ZERO;
|
||||
|
||||
// 如果查询后memberWalletVO为null, 则标示无权限
|
||||
if (memberWalletVO == null) {
|
||||
resultMap.put("transactionCode", Constants.ILLEGAL_TRANSACTION_CODE);
|
||||
resultMap.put("accountBalance", accountBalance);
|
||||
resultMap.put("defeatReasonCode", "01");
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
// 如果总余额小于0, 则标示余额不足
|
||||
if (memberWalletVO.getTotalBalance().compareTo(BigDecimal.ZERO) < 0) {
|
||||
resultMap.put("transactionCode", Constants.ILLEGAL_TRANSACTION_CODE);
|
||||
resultMap.put("accountBalance", accountBalance);
|
||||
resultMap.put("defeatReasonCode", "03");
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
// 生成交易流水号, 传递给订单使用
|
||||
String transactionCode = IdUtils.generateTransactionCode(pileSn, connectorCode);
|
||||
resultMap.put("transactionCode", transactionCode);
|
||||
|
||||
String payMode;
|
||||
if (StringUtils.equals(Constants.ONE, memberWalletVO.getPlatformTesterFlag())
|
||||
|| StringUtils.equals(Constants.ONE, memberWalletVO.getStationWhiteListFlag())) {
|
||||
// 如果是平台测试员或者是站点白名单
|
||||
resultMap.put("transactionCode", Constants.ILLEGAL_TRANSACTION_CODE);
|
||||
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();
|
||||
}
|
||||
|
||||
// 异步创建订单
|
||||
GenerateOrderDTO dto = new GenerateOrderDTO();
|
||||
dto.setPileSn(pileSn);
|
||||
dto.setConnectorCode(connectorCode);
|
||||
dto.setTransactionCode(transactionCode);
|
||||
dto.setChargeAmount(new BigDecimal(accountBalance));
|
||||
dto.setPayMode(payMode);
|
||||
dto.setStartMode(StringUtils.equals("01", startMode) ? "2" : "5");
|
||||
dto.setMemberId(memberWalletVO.getMemberId());
|
||||
try {
|
||||
if (StringUtils.equals("01", startMode)) {
|
||||
String physicsCard = confirmStartChargingData.getPhysicsCard();
|
||||
// 查询卡信息 根据传过来的物理卡号查询数据库中此卡信息
|
||||
PileAuthCard pileAuthCardInfo = pileAuthCardService.selectCardInfoByLogicCard(physicsCard);
|
||||
if (pileAuthCardInfo == null) {
|
||||
// 未查到此卡信息
|
||||
throw new BusinessException(ReturnCodeEnum.CODE_THIS_CARD_HAS_NO_INFO);
|
||||
}
|
||||
if (StringUtils.isBlank(pileAuthCardInfo.getMemberId())) {
|
||||
// 卡未绑定用户
|
||||
throw new BusinessException(ReturnCodeEnum.CODE_THIS_CARD_NOT_BIND_USER);
|
||||
}
|
||||
|
||||
// 判断卡状态
|
||||
if (!StringUtils.equals(CardStatusEnum.NORMAL.getCode(), pileAuthCardInfo.getStatus())) {
|
||||
log.info("卡号:{}, 状态:{}, 非正常使用状态", physicsCard, CardStatusEnum.getCardStatus(pileAuthCardInfo.getStatus()));
|
||||
return null;
|
||||
}
|
||||
dto = new GenerateOrderDTO();
|
||||
dto.setPileAuthCardInfo(pileAuthCardInfo);
|
||||
dto.setPileSn(pileSn);
|
||||
dto.setConnectorCode(connectorCode);
|
||||
dto.setStartMode(StartModeEnum.AUTH_CARD.getValue());
|
||||
dto.setMemberId(pileAuthCardInfo.getMemberId());
|
||||
} else if (StringUtils.equals("03", startMode)) {
|
||||
String vinCode = confirmStartChargingData.getVinCode();
|
||||
// 通过vin码查询数据库绑定用户信息
|
||||
MemberPlateNumberRelation plateInfo = memberPlateNumberRelationService.getMemberPlateInfoByVinCode(vinCode);
|
||||
if (plateInfo == null) {
|
||||
throw new BusinessException("", vinCode + "未查到绑定用户信息");
|
||||
}
|
||||
dto = new GenerateOrderDTO();
|
||||
dto.setMemberPlateNumberRelation(plateInfo);
|
||||
dto.setPileSn(pileSn);
|
||||
dto.setConnectorCode(connectorCode);
|
||||
dto.setStartMode(StartModeEnum.VIN_CODE.getValue());
|
||||
dto.setMemberId(plateInfo.getMemberId());
|
||||
}
|
||||
|
||||
if (dto != null) {
|
||||
// Map<String, Object> map = orderBasicInfoService.generateOrderByCard(dto);
|
||||
}
|
||||
Map<String, Object> map = orderBasicInfoService.generateOrderByCard(dto);
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
|
||||
return null;
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
String msg = "01";
|
||||
System.out.println(StringUtils.length(msg));
|
||||
byte[] bytes = BytesUtil.str2Bcd(msg);
|
||||
byte[] a = new byte[]{0x01};
|
||||
String s = Arrays.toString(bytes);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@ package com.jsowell.pile.mapper;
|
||||
|
||||
import com.jsowell.pile.domain.MemberBasicInfo;
|
||||
import com.jsowell.pile.dto.QueryMemberInfoDTO;
|
||||
import com.jsowell.pile.vo.base.ConfirmStartChargingMemberVO;
|
||||
import com.jsowell.pile.vo.base.MerchantInfoVO;
|
||||
import com.jsowell.pile.vo.uniapp.customer.MemberVO;
|
||||
import com.jsowell.pile.vo.uniapp.customer.MerchantVipVO;
|
||||
@@ -127,4 +128,8 @@ public interface MemberBasicInfoMapper {
|
||||
* @return
|
||||
*/
|
||||
List<MemberVO> getMemberInfoByPlateNumber(@Param("plateNumber") String plateNumber);
|
||||
|
||||
ConfirmStartChargingMemberVO queryMemberInfoByCardCode(@Param("cardCode") String cardCode, @Param("merchantId") String merchantId);
|
||||
|
||||
ConfirmStartChargingMemberVO queryMemberInfoByVinCode(@Param("vinCode") String vinCode, @Param("cardCode") String merchantId);
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@ import com.jsowell.pile.dto.CreateMerchantVipDTO;
|
||||
import com.jsowell.pile.dto.PlatformTesterDTO;
|
||||
import com.jsowell.pile.dto.QueryMemberInfoDTO;
|
||||
import com.jsowell.pile.dto.UniAppQueryMemberBalanceDTO;
|
||||
import com.jsowell.pile.vo.base.ConfirmStartChargingMemberVO;
|
||||
import com.jsowell.pile.vo.uniapp.customer.*;
|
||||
import com.jsowell.pile.vo.web.MemberDetailsVO;
|
||||
import com.jsowell.pile.vo.web.PlatformTesterVO;
|
||||
@@ -169,4 +170,8 @@ public interface MemberBasicInfoService {
|
||||
* @return
|
||||
*/
|
||||
MemberDetailsVO queryMemberDetails(UniAppQueryMemberBalanceDTO dto);
|
||||
|
||||
ConfirmStartChargingMemberVO queryMemberInfoByCardCode(String physicsCard, String merchantId, String stationId);
|
||||
|
||||
ConfirmStartChargingMemberVO queryByVinCode(String vinCode, String merchantId, String stationId);
|
||||
}
|
||||
|
||||
@@ -15,21 +15,16 @@ import com.jsowell.common.util.DateUtils;
|
||||
import com.jsowell.common.util.SecurityUtils;
|
||||
import com.jsowell.common.util.StringUtils;
|
||||
import com.jsowell.common.util.id.IdUtils;
|
||||
import com.jsowell.pile.domain.MemberBasicInfo;
|
||||
import com.jsowell.pile.domain.MemberPlateNumberRelation;
|
||||
import com.jsowell.pile.domain.MemberWalletInfo;
|
||||
import com.jsowell.pile.domain.MemberWalletLog;
|
||||
import com.jsowell.pile.domain.*;
|
||||
import com.jsowell.pile.dto.CreateMerchantVipDTO;
|
||||
import com.jsowell.pile.dto.PlatformTesterDTO;
|
||||
import com.jsowell.pile.dto.QueryMemberInfoDTO;
|
||||
import com.jsowell.pile.dto.UniAppQueryMemberBalanceDTO;
|
||||
import com.jsowell.pile.mapper.MemberBasicInfoMapper;
|
||||
import com.jsowell.pile.mapper.MemberPlateNumberRelationMapper;
|
||||
import com.jsowell.pile.mapper.MemberWalletInfoMapper;
|
||||
import com.jsowell.pile.mapper.MemberWalletLogMapper;
|
||||
import com.jsowell.pile.mapper.*;
|
||||
import com.jsowell.pile.service.*;
|
||||
import com.jsowell.pile.util.MerchantUtils;
|
||||
import com.jsowell.pile.util.UserUtils;
|
||||
import com.jsowell.pile.vo.base.ConfirmStartChargingMemberVO;
|
||||
import com.jsowell.pile.vo.base.MerchantInfoVO;
|
||||
import com.jsowell.pile.vo.uniapp.customer.*;
|
||||
import com.jsowell.pile.vo.web.MemberDetailsVO;
|
||||
@@ -59,8 +54,8 @@ public class MemberBasicInfoServiceImpl implements MemberBasicInfoService {
|
||||
@Autowired
|
||||
private MemberBasicInfoMapper memberBasicInfoMapper;
|
||||
|
||||
// @Autowired
|
||||
// private MemberWalletInfoMapper memberWalletInfoMapper;
|
||||
@Autowired
|
||||
private PileStationWhitelistMapper pileStationWhitelistMapper;
|
||||
|
||||
@Autowired
|
||||
private MemberWalletInfoService memberWalletInfoService;
|
||||
@@ -773,4 +768,44 @@ public class MemberBasicInfoServiceImpl implements MemberBasicInfoService {
|
||||
.build();
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据卡号查询会员信息
|
||||
* @param cardCode
|
||||
* @param merchantId
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public ConfirmStartChargingMemberVO queryMemberInfoByCardCode(String cardCode, String merchantId, String stationId) {
|
||||
ConfirmStartChargingMemberVO memberVO = memberBasicInfoMapper.queryMemberInfoByCardCode(cardCode, merchantId);
|
||||
if (memberVO == null) {
|
||||
return null;
|
||||
}
|
||||
BigDecimal principalBalance = memberVO.getPrincipalBalance() != null ? memberVO.getPrincipalBalance() : BigDecimal.ZERO;
|
||||
BigDecimal giftBalance = memberVO.getGiftBalance() != null ? memberVO.getGiftBalance() : BigDecimal.ZERO;
|
||||
memberVO.setTotalBalance(principalBalance.add(giftBalance));
|
||||
// 是否为平台测试员
|
||||
memberVO.setPlatformTesterFlag(selectPlatformTesterStatus(memberVO.getMemberId()).getStatus());
|
||||
// 查询会员在站点是否是白名单用户
|
||||
PileStationWhitelist whitelist = pileStationWhitelistMapper.queryWhitelistByMemberId(stationId, memberVO.getMemberId());
|
||||
memberVO.setStationWhiteListFlag(whitelist != null ? Constants.ONE : Constants.ZERO);
|
||||
return memberVO;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ConfirmStartChargingMemberVO queryByVinCode(String vinCode, String merchantId, String stationId) {
|
||||
ConfirmStartChargingMemberVO memberVO = memberBasicInfoMapper.queryMemberInfoByVinCode(vinCode, merchantId);
|
||||
if (memberVO == null) {
|
||||
return null;
|
||||
}
|
||||
BigDecimal principalBalance = memberVO.getPrincipalBalance() != null ? memberVO.getPrincipalBalance() : BigDecimal.ZERO;
|
||||
BigDecimal giftBalance = memberVO.getGiftBalance() != null ? memberVO.getGiftBalance() : BigDecimal.ZERO;
|
||||
memberVO.setTotalBalance(principalBalance.add(giftBalance));
|
||||
// 是否为平台测试员
|
||||
memberVO.setPlatformTesterFlag(selectPlatformTesterStatus(memberVO.getMemberId()).getStatus());
|
||||
// 查询会员在站点是否是白名单用户
|
||||
PileStationWhitelist whitelist = pileStationWhitelistMapper.queryWhitelistByMemberId(stationId, memberVO.getMemberId());
|
||||
memberVO.setStationWhiteListFlag(whitelist != null ? Constants.ONE : Constants.ZERO);
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -302,4 +302,28 @@
|
||||
AND t1.del_flag = '0'
|
||||
AND t2.STATUS = '1'
|
||||
</select>
|
||||
</mapper>
|
||||
|
||||
<select id="queryMemberInfoByCardCode" resultType="com.jsowell.pile.vo.base.ConfirmStartChargingMemberVO">
|
||||
select
|
||||
t1.member_id,
|
||||
t2.principal_balance,
|
||||
t2.gift_balance
|
||||
from member_basic_info t1
|
||||
join member_wallet_info t2 on t1.member_id = t2.member_id and t2.del_flag = '0'
|
||||
join pile_auth_card t3 on t1.member_id = t3.member_id and t3.del_flag = '0'
|
||||
where t1.del_flag = '0'
|
||||
and t3.logic_card = #{cardCode,jdbcType=VARCHAR}
|
||||
</select>
|
||||
|
||||
<select id="queryMemberInfoByVinCode" resultType="com.jsowell.pile.vo.base.ConfirmStartChargingMemberVO">
|
||||
select
|
||||
t1.member_id,
|
||||
t2.principal_balance,
|
||||
t2.gift_balance
|
||||
from member_basic_info t1
|
||||
join member_wallet_info t2 on t1.member_id = t2.member_id and t2.del_flag = '0'
|
||||
join member_plate_number_relation t3 on t1.member_id = t3.member_id and t3.del_flag = '0'
|
||||
where t1.del_flag = '0'
|
||||
and t3.vin_code = #{vinCode,jdbcType=VARCHAR}
|
||||
</select>
|
||||
</mapper>
|
||||
|
||||
Reference in New Issue
Block a user