优化支付订单逻辑

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

@@ -1,5 +1,6 @@
package com.jsowell.pile.dto;
import com.jsowell.pile.domain.PileAuthCard;
import com.jsowell.pile.vo.uniapp.PileConnectorDetailVO;
import com.jsowell.pile.vo.web.BillingTemplateVO;
import lombok.Data;
@@ -59,4 +60,9 @@ public class GenerateOrderDTO extends BasicPileDTO{
* 预约时间
*/
private String appointmentTime;
/**
* 使用刷卡创建订单时有值
*/
private PileAuthCard pileAuthCardInfo;
}

View File

@@ -4,6 +4,7 @@ import com.jsowell.common.core.domain.ykc.RealTimeMonitorData;
import com.jsowell.common.core.domain.ykc.TransactionRecordsData;
import com.jsowell.pile.domain.OrderBasicInfo;
import com.jsowell.pile.domain.OrderDetail;
import com.jsowell.pile.dto.GenerateOrderDTO;
import com.jsowell.pile.dto.IndexQueryDTO;
import com.jsowell.pile.dto.QueryOrderDTO;
import com.jsowell.pile.dto.QueryPersonPileDTO;
@@ -17,6 +18,7 @@ import com.jsowell.wxpay.dto.WeChatRefundDTO;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;
/**
* 订单Service接口
@@ -211,4 +213,6 @@ public interface IOrderBasicInfoService {
void updateOrderStatusAsAbnormal(String pileSn);
List<OrderBasicInfo> getAppointmentOrder(LocalDateTime dateTime);
Map<String, Object> generateOrderByCard(GenerateOrderDTO dto);
}

View File

@@ -241,6 +241,12 @@ public class MemberBasicInfoServiceImpl implements IMemberBasicInfoService {
}
// 加缓存
MemberVO vo = memberBasicInfoMapper.queryMemberInfoByMemberId(memberId);
if (vo == null) {
return null;
}
vo.setTotalAccountAmount(vo.getPrincipalBalance().add(vo.getGiftBalance()));
// 查询用户车牌号
MemberPlateNumberRelation memberPlateNumberRelation = new MemberPlateNumberRelation();
memberPlateNumberRelation.setMemberId(memberId);
List<MemberPlateNumberRelation> list = memberPlateNumberRelationMapper.selectMemberPlateNumberRelationList(memberPlateNumberRelation);

View File

@@ -15,6 +15,7 @@ import com.jsowell.common.enums.MemberWalletEnum;
import com.jsowell.common.enums.ykc.OrderPayModeEnum;
import com.jsowell.common.enums.ykc.OrderPayStatusEnum;
import com.jsowell.common.enums.ykc.OrderStatusEnum;
import com.jsowell.common.enums.ykc.PayModeEnum;
import com.jsowell.common.enums.ykc.PileConnectorDataBaseStatusEnum;
import com.jsowell.common.enums.ykc.ReturnCodeEnum;
import com.jsowell.common.enums.ykc.StartModeEnum;
@@ -30,8 +31,11 @@ import com.jsowell.pile.domain.OrderAbnormalRecord;
import com.jsowell.pile.domain.OrderBasicInfo;
import com.jsowell.pile.domain.OrderDetail;
import com.jsowell.pile.domain.OrderPayRecord;
import com.jsowell.pile.domain.PileAuthCard;
import com.jsowell.pile.domain.PileBasicInfo;
import com.jsowell.pile.domain.WxpayCallbackRecord;
import com.jsowell.pile.domain.WxpayRefundCallback;
import com.jsowell.pile.dto.GenerateOrderDTO;
import com.jsowell.pile.dto.IndexQueryDTO;
import com.jsowell.pile.dto.QueryOrderDTO;
import com.jsowell.pile.dto.QueryPersonPileDTO;
@@ -41,6 +45,7 @@ import com.jsowell.pile.service.IMemberBasicInfoService;
import com.jsowell.pile.service.IOrderAbnormalRecordService;
import com.jsowell.pile.service.IOrderBasicInfoService;
import com.jsowell.pile.service.IOrderPayRecordService;
import com.jsowell.pile.service.IPileAuthCardService;
import com.jsowell.pile.service.IPileBasicInfoService;
import com.jsowell.pile.service.IPileBillingTemplateService;
import com.jsowell.pile.service.IPileConnectorInfoService;
@@ -54,6 +59,7 @@ import com.jsowell.pile.vo.uniapp.MemberVO;
import com.jsowell.pile.vo.uniapp.OrderVO;
import com.jsowell.pile.vo.uniapp.PersonPileConnectorSumInfoVO;
import com.jsowell.pile.vo.uniapp.SendMessageVO;
import com.jsowell.pile.vo.web.BillingTemplateVO;
import com.jsowell.pile.vo.web.IndexOrderInfoVO;
import com.jsowell.pile.vo.web.OrderListVO;
import com.jsowell.pile.vo.web.OrderTotalDataVO;
@@ -136,6 +142,9 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
@Autowired
private IPileBillingTemplateService pileBillingTemplateService;
@Autowired
private IPileAuthCardService pileAuthCardService;
/**
* 查询订单
*
@@ -1189,4 +1198,88 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
public List<OrderBasicInfo> getAppointmentOrder(LocalDateTime dateTime) {
return orderBasicInfoMapper.getAppointmentOrder(dateTime);
}
/**
* 生成订单 返回交易流水号
* @param dto
* @return
*/
@Override
public Map<String, Object> generateOrderByCard(GenerateOrderDTO dto) {
String pileSn = dto.getPileSn();
String connectorCode = dto.getConnectorCode();
PileAuthCard pileAuthCardInfo = dto.getPileAuthCardInfo();
// 通过memberId获取账户余额
MemberVO memberVO = memberBasicInfoService.queryMemberInfoByMemberId(pileAuthCardInfo.getMemberId());
if (memberVO == null) {
throw new BusinessException(ReturnCodeEnum.CODE_GET_MEMBER_ACCOUNT_AMOUNT_ERROR);
}
BigDecimal totalAccountAmount = memberVO.getTotalAccountAmount();
if (totalAccountAmount.compareTo(BigDecimal.ZERO) <= 0) {
throw new BusinessException(ReturnCodeEnum.CODE_BALANCE_IS_INSUFFICIENT);
}
String transactionCode = IdUtils.generateTransactionCode(pileSn, connectorCode);
// 通过桩号查询所属站点
PileBasicInfo pileBasicInfo = pileBasicInfoService.selectPileBasicInfoBySN(pileSn);
Long stationId = pileBasicInfo.getStationId();
// 自动余额全部支付订单 个人桩站点不计费
// 将此订单信息存入订单表
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(pileAuthCardInfo.getLogicCard())
.startMode(StartModeEnum.CARD.getValue())
.payStatus(Constants.ONE)
.payAmount(totalAccountAmount)
.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(pileAuthCardInfo.getLogicCard())
.status("2")
.build();
pileAuthCardService.updatePileAuthCard(pileAuthCard);
// 组装结果集
Map<String, Object> resultMap = Maps.newHashMap();
resultMap.put("orderCode", orderBasicInfo.getOrderCode());
resultMap.put("transactionCode", orderBasicInfo.getTransactionCode());
resultMap.put("accountBalance", totalAccountAmount);
return resultMap;
}
}