update 华为平台生成订单、结算订单方法

This commit is contained in:
Lemon
2024-03-20 10:36:36 +08:00
parent f76b436c03
commit a0e4272100
9 changed files with 172 additions and 18 deletions

View File

@@ -123,6 +123,15 @@ public class TransactionRecordsData {
private Date createTime; private Date createTime;
/**
* 以下为附加字段,不是交易记录报文中原有字段
*/
// 总电费
private String totalElectricityAmount;
// 总服务费
private String totalServiceAmount;
@Override @Override
public String toString() { public String toString() {
return new ToStringBuilder(this, ToStringStyle.JSON_STYLE) return new ToStringBuilder(this, ToStringStyle.JSON_STYLE)

View File

@@ -69,4 +69,10 @@ public class QueryStartChargeDTO {
* 司机在合作公司的唯一标识(手机号),方便维护订单信息 * 司机在合作公司的唯一标识(手机号),方便维护订单信息
*/ */
private String driverId; private String driverId;
/**
* 支付方式(1-余额支付3-白名单支付4-微信支付5-支付宝支付)
*/
private String payMode;
} }

View File

@@ -64,4 +64,9 @@ public class HWQueryStartChargeDTO {
private String operatorId; private String operatorId;
/**
* 支付方式(1-余额支付3-白名单支付4-微信支付5-支付宝支付)
*/
private String payMode;
} }

View File

@@ -2564,13 +2564,16 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService {
.payStatus(Constants.ONE) .payStatus(Constants.ONE)
.payAmount(dto.getAccountBalance()) // 支付金额 .payAmount(dto.getAccountBalance()) // 支付金额
.payTime(new Date()) .payTime(new Date())
// .payMode(PayModeEnum.PAYMENT_OF_BALANCE.getValue()) // 支付方式 // .payMode() // 支付方式
.orderAmount(BigDecimal.ZERO) .orderAmount(BigDecimal.ZERO)
.build(); .build();
if (StringUtils.isNotBlank(dto.getPlateNum())) { if (StringUtils.isNotBlank(dto.getPlateNum())) {
// 车牌号 // 车牌号
orderBasicInfo.setPlateNumber(dto.getPlateNum()); orderBasicInfo.setPlateNumber(dto.getPlateNum());
} }
if (StringUtils.isNotBlank(dto.getPayMode())) {
orderBasicInfo.setPayMode(dto.getPayMode());
}
// 根据桩编码查询当前计费模板 // 根据桩编码查询当前计费模板
BillingTemplateVO billingTemplateVO = pileBillingTemplateService.selectBillingTemplateDetailByPileSn(pileSn); BillingTemplateVO billingTemplateVO = pileBillingTemplateService.selectBillingTemplateDetailByPileSn(pileSn);
// 订单详情 // 订单详情

View File

@@ -144,6 +144,13 @@ public abstract class AbstractProgramLogic implements InitializingBean {
*/ */
public abstract void settleOrder(TransactionRecordsData data, OrderBasicInfo orderBasicInfo); public abstract void settleOrder(TransactionRecordsData data, OrderBasicInfo orderBasicInfo);
/**
* 第三方平台结算订单(目前给华为用)
* @param data
* @param orderBasicInfo
*/
public abstract void settleOrderForThirdParty(TransactionRecordsData data, OrderBasicInfo orderBasicInfo);
/** /**
* 订单退款 * 订单退款
*/ */
@@ -546,6 +553,30 @@ public abstract class AbstractProgramLogic implements InitializingBean {
return orderDetail; return orderDetail;
} }
/**
* 获取更新数据后的orderDetail对象(给第三方平台结算订单用)
* @param orderBasicInfo
* @param data
* @return
*/
protected OrderDetail returnUpdateOrderDetailForThirdParty(OrderBasicInfo orderBasicInfo, TransactionRecordsData data){
String orderCode = orderBasicInfo.getOrderCode();
BigDecimal orderAmount = orderBasicInfo.getOrderAmount();
// 更新订单详情 查询订单详情 修改订单数据
OrderDetail orderDetail = orderBasicInfoService.getOrderDetailByOrderCode(orderCode);
// 总用电量
orderDetail.setTotalUsedElectricity(new BigDecimal(data.getTotalElectricity()));
// 总电费
orderDetail.setTotalElectricityAmount(new BigDecimal(data.getTotalElectricityAmount()));
// 总服务费
orderDetail.setTotalServiceAmount(new BigDecimal(data.getTotalServiceAmount()));
// 总订单金额
orderDetail.setTotalOrderAmount(orderAmount);
return orderDetail;
}
/** /**
* 余额支付 计算需要退回的金额 * 余额支付 计算需要退回的金额
* 【公共方法】 * 【公共方法】

View File

@@ -406,6 +406,45 @@ public class DelayMerchantProgramLogic extends AbstractProgramLogic {
logger.info("结算订单end:{} OrderTransactionDTO:{}", orderBasicInfo.getOrderCode(), JSON.toJSONString(dto)); logger.info("结算订单end:{} OrderTransactionDTO:{}", orderBasicInfo.getOrderCode(), JSON.toJSONString(dto));
} }
/**
* 第三方平台结算订单(目前给华为用)
* @param data
* @param orderBasicInfo
*/
public void settleOrderForThirdParty(TransactionRecordsData data, OrderBasicInfo orderBasicInfo) {
logger.info("第三方平台结算订单start data:{}, orderBasicInfo:{}", data.toString(), JSON.toJSONString(orderBasicInfo));
// 判断订单状态
if (StringUtils.equals(orderBasicInfo.getOrderStatus(), OrderStatusEnum.ORDER_COMPLETE.getValue())) {
logger.info("结算订单:{}, 是订单完成状态", orderBasicInfo.getOrderCode());
return;
}
// 获取更新数据后的orderBasicInfo对象
returnUpdateOrderBasicInfo(orderBasicInfo, data);
// 获取更新数据后的orderDetail对象/更新订单详情 查询订单详情 修改订单数据
OrderDetail orderDetail = returnUpdateOrderDetailForThirdParty(orderBasicInfo, data);
// 计算订单折扣
// calculateOrderDiscountsV2(orderBasicInfo, orderDetail);
// 更新数据库
OrderTransactionDTO dto = new OrderTransactionDTO();
dto.setOrderBasicInfo(orderBasicInfo);
dto.setOrderDetail(orderDetail);
transactionService.doUpdateOrder(dto);
// 订单退款
refundOrder(orderBasicInfo);
// 发送停止充电订阅消息
sendMsg(orderBasicInfo);
// 从redis中取出实时记录保存到表中
realTimeMonitorDataRedis2DB(orderBasicInfo.getTransactionCode(), orderBasicInfo.getOrderCode());
logger.info("结算订单end:{} OrderTransactionDTO:{}", orderBasicInfo.getOrderCode(), JSON.toJSONString(dto));
}
// uniApp 发送停止充电订阅消息 // uniApp 发送停止充电订阅消息
private void sendMsg(OrderBasicInfo orderBasicInfo) { private void sendMsg(OrderBasicInfo orderBasicInfo) {
try { try {

View File

@@ -413,6 +413,46 @@ public class NotDelayMerchantProgramLogic extends AbstractProgramLogic {
logger.info("结算订单end:{} OrderTransactionDTO:{}", orderBasicInfo.getOrderCode(), JSON.toJSONString(dto)); logger.info("结算订单end:{} OrderTransactionDTO:{}", orderBasicInfo.getOrderCode(), JSON.toJSONString(dto));
} }
/**
* 第三方平台结算订单(目前给华为用)
* @param data
* @param orderBasicInfo
*/
@Override
public void settleOrderForThirdParty(TransactionRecordsData data, OrderBasicInfo orderBasicInfo) {
logger.info("第三方平台结算订单start data:{}, orderBasicInfo:{}", data.toString(), JSON.toJSONString(orderBasicInfo));
// 判断订单状态
if (StringUtils.equals(orderBasicInfo.getOrderStatus(), OrderStatusEnum.ORDER_COMPLETE.getValue())) {
logger.info("结算订单:{}, 是订单完成状态", orderBasicInfo.getOrderCode());
return;
}
// 获取更新数据后的orderBasicInfo对象
returnUpdateOrderBasicInfo(orderBasicInfo, data);
// 获取更新数据后的orderDetail对象/更新订单详情 查询订单详情 修改订单数据
OrderDetail orderDetail = returnUpdateOrderDetailForThirdParty(orderBasicInfo, data);
// 计算订单折扣
// calculateOrderDiscountsV2(orderBasicInfo, orderDetail);
// 更新数据库
OrderTransactionDTO dto = new OrderTransactionDTO();
dto.setOrderBasicInfo(orderBasicInfo);
dto.setOrderDetail(orderDetail);
transactionService.doUpdateOrder(dto);
// 订单退款
refundOrder(orderBasicInfo);
// 发送停止充电订阅消息
sendMsg(orderBasicInfo);
// 从redis中取出实时记录保存到表中
realTimeMonitorDataRedis2DB(orderBasicInfo.getTransactionCode(), orderBasicInfo.getOrderCode());
logger.info("结算订单end:{} OrderTransactionDTO:{}", orderBasicInfo.getOrderCode(), JSON.toJSONString(dto));
}
@Override @Override
public void refundOrder(OrderBasicInfo orderBasicInfo) { public void refundOrder(OrderBasicInfo orderBasicInfo) {
BigDecimal refundAmount = orderBasicInfo.getRefundAmount(); BigDecimal refundAmount = orderBasicInfo.getRefundAmount();

View File

@@ -507,7 +507,7 @@ public class CommonService {
* @param pileConnectorCode * @param pileConnectorCode
* @return * @return
*/ */
public String commonQueryStartCharge(String thirdPartyType, List<String> stationIds, String pileConnectorCode, BigDecimal chargeAmount) { public String commonQueryStartCharge(String thirdPartyType, List<String> stationIds, String pileConnectorCode, BigDecimal chargeAmount, String payMode) {
// 判断平台类型 // 判断平台类型
if (StringUtils.equals(ThirdPlatformTypeEnum.HUA_WEI.getCode(), thirdPartyType)) { if (StringUtils.equals(ThirdPlatformTypeEnum.HUA_WEI.getCode(), thirdPartyType)) {
// 华为平台 // 华为平台
@@ -528,6 +528,7 @@ public class CommonService {
HWQueryStartChargeDTO dto = new HWQueryStartChargeDTO(); HWQueryStartChargeDTO dto = new HWQueryStartChargeDTO();
dto.setConnectorID(pileConnectorCode); dto.setConnectorID(pileConnectorCode);
dto.setMoneyLimit(chargeAmount); dto.setMoneyLimit(chargeAmount);
dto.setPayMode(payMode);
QueryStartChargeVO startChargeVO = huaweiServiceV2.queryStartCharge(dto); QueryStartChargeVO startChargeVO = huaweiServiceV2.queryStartCharge(dto);
if (startChargeVO.getSuccStat() != Constants.zero) { if (startChargeVO.getSuccStat() != Constants.zero) {
log.error(thirdPartyType + "请求启动充电 error, {}", startChargeVO.getFailReason()); log.error(thirdPartyType + "请求启动充电 error, {}", startChargeVO.getFailReason());

View File

@@ -8,6 +8,7 @@ import com.alibaba.fastjson2.JSONObject;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import com.jsowell.common.constant.Constants; import com.jsowell.common.constant.Constants;
import com.jsowell.common.core.domain.ykc.RealTimeMonitorData; import com.jsowell.common.core.domain.ykc.RealTimeMonitorData;
import com.jsowell.common.core.domain.ykc.TransactionRecordsData;
import com.jsowell.common.core.redis.RedisCache; import com.jsowell.common.core.redis.RedisCache;
import com.jsowell.common.enums.thirdparty.ThirdPartyOperatorIdEnum; import com.jsowell.common.enums.thirdparty.ThirdPartyOperatorIdEnum;
import com.jsowell.common.enums.thirdparty.ThirdPlatformTypeEnum; import com.jsowell.common.enums.thirdparty.ThirdPlatformTypeEnum;
@@ -27,6 +28,8 @@ import com.jsowell.pile.dto.GenerateOrderDTO;
import com.jsowell.pile.dto.QueryStartChargeDTO; import com.jsowell.pile.dto.QueryStartChargeDTO;
import com.jsowell.pile.dto.huawei.*; import com.jsowell.pile.dto.huawei.*;
import com.jsowell.pile.service.*; import com.jsowell.pile.service.*;
import com.jsowell.pile.service.programlogic.AbstractProgramLogic;
import com.jsowell.pile.service.programlogic.ProgramLogicFactory;
import com.jsowell.pile.transaction.dto.OrderTransactionDTO; import com.jsowell.pile.transaction.dto.OrderTransactionDTO;
import com.jsowell.pile.transaction.service.TransactionService; import com.jsowell.pile.transaction.service.TransactionService;
import com.jsowell.pile.vo.huawei.QueryChargeStatusVO; import com.jsowell.pile.vo.huawei.QueryChargeStatusVO;
@@ -87,6 +90,9 @@ public class HuaweiServiceV2 {
@Autowired @Autowired
private PileBillingTemplateService pileBillingTemplateService; private PileBillingTemplateService pileBillingTemplateService;
@Autowired
private PileMerchantInfoService pileMerchantInfoService;
@Autowired @Autowired
private OrderBasicInfoService orderBasicInfoService; private OrderBasicInfoService orderBasicInfoService;
@@ -493,13 +499,14 @@ public class HuaweiServiceV2 {
/** /**
* 请求启动充电 * 请求启动充电
* 只需传枪口号、充电金额即可 * 只需传枪口号、充电金额、支付方式即可
* @param dto * @param dto
* @return QueryStartChargeVO * @return QueryStartChargeVO
*/ */
public QueryStartChargeVO queryStartCharge(HWQueryStartChargeDTO dto) { public QueryStartChargeVO queryStartCharge(HWQueryStartChargeDTO dto) {
String pileConnectorCode = dto.getConnectorID(); String pileConnectorCode = dto.getConnectorID();
BigDecimal chargeAmount = dto.getMoneyLimit(); BigDecimal chargeAmount = dto.getMoneyLimit();
String payMode = dto.getPayMode();
String requestName = "query_start_charge"; String requestName = "query_start_charge";
@@ -511,6 +518,7 @@ public class HuaweiServiceV2 {
startChargeDTO.setStartChargeSeq(startChargeSeq); startChargeDTO.setStartChargeSeq(startChargeSeq);
startChargeDTO.setConnectorID(pileConnectorCode); startChargeDTO.setConnectorID(pileConnectorCode);
startChargeDTO.setAccountBalance(chargeAmount); startChargeDTO.setAccountBalance(chargeAmount);
startChargeDTO.setPayMode(dto.getPayMode());
Map<String, Object> map = orderBasicInfoService.generateOrderForThirdParty(startChargeDTO); Map<String, Object> map = orderBasicInfoService.generateOrderForThirdParty(startChargeDTO);
if (map == null) { if (map == null) {
@@ -741,17 +749,30 @@ public class HuaweiServiceV2 {
// 查出订单基本信息和详情 // 查出订单基本信息和详情
OrderBasicInfo orderBasicInfo = orderBasicInfoService.getOrderInfoByOrderCode(startChargeSeq); OrderBasicInfo orderBasicInfo = orderBasicInfoService.getOrderInfoByOrderCode(startChargeSeq);
OrderDetail orderDetail = orderBasicInfoService.getOrderDetailByOrderCode(startChargeSeq); // OrderDetail orderDetail = orderBasicInfoService.getOrderDetailByOrderCode(startChargeSeq);
orderBasicInfo.setChargeStartTime(DateUtils.parseDate(dto.getStartTime())); // TODO 结算订单
orderBasicInfo.setChargeEndTime(DateUtils.parseDate(dto.getEndTime())); TransactionRecordsData data = TransactionRecordsData.builder()
orderBasicInfo.setOrderStatus(OrderStatusEnum.ORDER_COMPLETE.getValue()); // 订单状态改为订单完成 .consumptionAmount(String.valueOf(dto.getTotalMoney())) // 订单总金额
orderBasicInfo.setReason(String.valueOf(dto.getStopReason())); // TODO 新建停止原因枚举 .stopReasonMsg(String.valueOf(dto.getStopReason())) // 停止原因
.totalElectricity(String.valueOf(dto.getTotalPower())) // 总用电量
.totalElectricityAmount(String.valueOf(dto.getTotalElecMoney())) // 总电费
.totalServiceAmount(String.valueOf(dto.getTotalSeviceMoney())) // 总服务费
.build();
String mode = pileMerchantInfoService.getDelayModeByMerchantId(orderBasicInfo.getMerchantId());
AbstractProgramLogic orderLogic = ProgramLogicFactory.getProgramLogic(mode);
orderLogic.settleOrderForThirdParty(data, orderBasicInfo);
orderDetail.setTotalUsedElectricity(dto.getTotalPower());
orderDetail.setTotalElectricityAmount(dto.getTotalElecMoney()); // orderBasicInfo.setChargeStartTime(DateUtils.parseDate(dto.getStartTime()));
orderDetail.setTotalServiceAmount(dto.getTotalSeviceMoney()); // orderBasicInfo.setChargeEndTime(DateUtils.parseDate(dto.getEndTime()));
orderDetail.setTotalOrderAmount(dto.getTotalMoney()); // orderBasicInfo.setOrderStatus(OrderStatusEnum.ORDER_COMPLETE.getValue()); // 订单状态改为订单完成
// orderBasicInfo.setReason(String.valueOf(dto.getStopReason())); // TODO 新建停止原因枚举
//
// orderDetail.setTotalUsedElectricity(dto.getTotalPower());
// orderDetail.setTotalElectricityAmount(dto.getTotalElecMoney());
// orderDetail.setTotalServiceAmount(dto.getTotalSeviceMoney());
// orderDetail.setTotalOrderAmount(dto.getTotalMoney());
// if (CollectionUtils.isNotEmpty(chargeDetails)) { // if (CollectionUtils.isNotEmpty(chargeDetails)) {
// for (BillingPriceVO billingPriceVO : billingPriceVOList) { // for (BillingPriceVO billingPriceVO : billingPriceVOList) {
@@ -765,13 +786,12 @@ public class HuaweiServiceV2 {
// } // }
// } // }
// 通过事务修改订单信息 // 通过事务修改订单信息
OrderTransactionDTO transactionDTO = OrderTransactionDTO.builder() // OrderTransactionDTO transactionDTO = OrderTransactionDTO.builder()
.orderBasicInfo(orderBasicInfo) // .orderBasicInfo(orderBasicInfo)
.orderDetail(orderDetail) // .orderDetail(orderDetail)
.build(); // .build();
transactionService.doUpdateOrder(transactionDTO); // transactionService.doUpdateOrder(transactionDTO);
// TODO 订单退款
// 构建返回参数 // 构建返回参数
JSONObject jsonObject = new JSONObject(); JSONObject jsonObject = new JSONObject();