优化支付订单逻辑

This commit is contained in:
2023-03-30 15:35:14 +08:00
parent 433b72591e
commit b4c1c8e4eb
7 changed files with 263 additions and 184 deletions

View File

@@ -5,36 +5,26 @@ import com.google.common.primitives.Bytes;
import com.jsowell.common.constant.Constants;
import com.jsowell.common.core.domain.ykc.YKCDataProtocol;
import com.jsowell.common.core.domain.ykc.YKCFrameTypeCode;
import com.jsowell.common.enums.ykc.OrderStatusEnum;
import com.jsowell.common.enums.ykc.PayModeEnum;
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.OrderBasicInfo;
import com.jsowell.pile.domain.OrderDetail;
import com.jsowell.pile.domain.PileAuthCard;
import com.jsowell.pile.domain.PileBasicInfo;
import com.jsowell.pile.dto.GenerateOrderDTO;
import com.jsowell.pile.service.IOrderBasicInfoService;
import com.jsowell.pile.service.IPileAuthCardService;
import com.jsowell.pile.service.IPileBasicInfoService;
import com.jsowell.pile.service.IPileBillingTemplateService;
import com.jsowell.pile.service.impl.MemberBasicInfoServiceImpl;
import com.jsowell.pile.transaction.dto.OrderTransactionDTO;
import com.jsowell.pile.transaction.service.TransactionService;
import com.jsowell.pile.vo.uniapp.CurrentTimePriceDetails;
import com.jsowell.pile.vo.uniapp.MemberVO;
import com.jsowell.pile.vo.web.BillingTemplateVO;
import io.netty.channel.Channel;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.math.BigDecimal;
import java.util.Date;
import java.util.Map;
/**
* 充电桩主动申请启动充电 0x31
@@ -63,6 +53,9 @@ public class ConfirmStartChargingRequestHandler extends AbstractHandler{
@Autowired
private IPileBillingTemplateService pileBillingTemplateService;
@Autowired
private IOrderBasicInfoService orderBasicInfoService;
@Override
public void afterPropertiesSet() throws Exception {
YKCOperateFactory.register(type, this);
@@ -126,8 +119,7 @@ public class ConfirmStartChargingRequestHandler extends AbstractHandler{
String transactionCode = "";
try {
if (StringUtils.equals("01", startMode)) {
// 刷卡启动充电
// 根据传过来的物理卡号查询数据库中此卡信息
// 查询卡信息 根据传过来的物理卡号查询数据库中此卡信息
PileAuthCard pileAuthCardInfo = pileAuthCardService.selectCardInfoByLogicCard(physicsCard);
if (pileAuthCardInfo == null) {
// 未查到此卡信息
@@ -137,74 +129,23 @@ public class ConfirmStartChargingRequestHandler extends AbstractHandler{
// 卡未绑定用户
throw new BusinessException(ReturnCodeEnum.CODE_THIS_CARD_NOT_BIND_USER);
}
// 卡状态
String cardStatus = pileAuthCardInfo.getStatus();
// 逻辑卡号
logicCard = pileAuthCardInfo.getLogicCard();
// 通过memberId获取账户余额
MemberVO memberVO = memberBasicInfoService.queryMemberInfoByMemberId(pileAuthCardInfo.getMemberId());
BigDecimal principalBalance = memberVO.getPrincipalBalance(); // 本金金额
double accountBalance = principalBalance.add(memberVO.getGiftBalance()).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
accountBalanceByteArr = YKCUtils.getPriceByte(String.valueOf(accountBalance), 2);
if (!StringUtils.equals("1", cardStatus)) {
// 判断卡状态
if (!StringUtils.equals("1", pileAuthCardInfo.getStatus())) {
return null;
}
// 鉴权成功标识 0x00 失败 0x01 成功
authenticationFlagByteArr = Constants.oneByteArray;
transactionCode = IdUtils.generateTransactionCode(pileSn, connectorCode);
// 通过桩号查询所属站点
PileBasicInfo pileBasicInfo = pileBasicInfoService.selectPileBasicInfoBySN(pileSn);
Long stationId = pileBasicInfo.getStationId();
// TODO 个人桩站点不计费
// 将此订单信息存入订单表
String orderCode = IdUtils.getOrderCode();
// 订单基本信息
OrderBasicInfo orderBasicInfo = OrderBasicInfo.builder()
.orderCode(orderCode)
.transactionCode(transactionCode)
.orderStatus(OrderStatusEnum.NOT_START.getValue())
.memberId(memberVO.getMemberId())
.stationId(String.valueOf(stationId))
.pileSn(pileSn)
.connectorCode(connectorCode)
.pileConnectorCode(pileSn + connectorCode)
.logicCard(logicCard)
.startMode(StartModeEnum.CARD.getValue())
.payStatus(Constants.ZERO)
.payAmount(new BigDecimal(String.valueOf(accountBalance)))
.payTime(new Date())
.payMode(PayModeEnum.PAYMENT_OF_BALANCE.getValue())
.orderAmount(BigDecimal.ZERO)
.build();
// 根据桩编码查询当前计费模板
BillingTemplateVO billingTemplateVO = pileBillingTemplateService.selectBillingTemplateDetailByPileSn(pileSn);
// 订单详情
OrderDetail orderDetail = OrderDetail.builder()
.orderCode(orderCode)
.sharpElectricityPrice(billingTemplateVO.getSharpElectricityPrice())
.sharpServicePrice(billingTemplateVO.getSharpServicePrice())
.peakElectricityPrice(billingTemplateVO.getPeakElectricityPrice())
.peakServicePrice(billingTemplateVO.getPeakServicePrice())
.flatElectricityPrice(billingTemplateVO.getFlatElectricityPrice())
.flatServicePrice(billingTemplateVO.getFlatServicePrice())
.valleyElectricityPrice(billingTemplateVO.getValleyElectricityPrice())
.valleyServicePrice(billingTemplateVO.getValleyServicePrice())
.build();
OrderTransactionDTO createOrderTransactionDTO = OrderTransactionDTO.builder()
.orderBasicInfo(orderBasicInfo)
.orderDetail(orderDetail)
.build();
pileTransactionService.doCreateOrder(createOrderTransactionDTO);
// 将卡状态改为启动锁定
PileAuthCard pileAuthCard = PileAuthCard.builder()
.id(pileAuthCardInfo.getId())
.logicCard(physicsCard)
.status("2")
.build();
pileAuthCardService.updatePileAuthCard(pileAuthCard);
// 刷卡生成订单 刷卡启动充电
GenerateOrderDTO dto = new GenerateOrderDTO();
dto.setPileAuthCardInfo(pileAuthCardInfo);
dto.setPileSn(pileSn);
dto.setConnectorCode(connectorCode);
Map<String, Object> map = orderBasicInfoService.generateOrderByCard(dto);
if (map != null) {
transactionCode = (String) map.get("transactionCode");
accountBalanceByteArr = YKCUtils.getPriceByte(String.valueOf(map.get("accountBalance")), 2);
// 鉴权成功标识 0x00 失败 0x01 成功
authenticationFlagByteArr = Constants.oneByteArray;
}
}
} catch (BusinessException e){
log.error("刷卡启动充电鉴权 error:{}, {}", e.getCode(), e.getMessage());