add 联联平台 请求启动充电 接口

This commit is contained in:
Lemon
2023-04-29 10:33:16 +08:00
parent b5f1d93359
commit 6c5c72034c
7 changed files with 192 additions and 17 deletions

View File

@@ -3,16 +3,14 @@ package com.jsowell.lianlian;
import com.alibaba.fastjson2.JSONObject;
import com.jsowell.common.annotation.Anonymous;
import com.jsowell.common.core.controller.BaseController;
import com.jsowell.common.exception.BusinessException;
import com.jsowell.common.response.RestApiResponse;
import com.jsowell.pile.dto.QueryEquipmentDTO;
import com.jsowell.pile.dto.QueryStartChargeDTO;
import com.jsowell.pile.dto.QueryStationInfoDTO;
import com.jsowell.thirdparty.domain.StationStatsInfo;
import com.jsowell.thirdparty.service.LianLianService;
import com.jsowell.thirdparty.vo.EquipmentAuthVO;
import com.jsowell.thirdparty.vo.LianLianPageResponse;
import com.jsowell.thirdparty.vo.QueryChargingStatusVO;
import com.jsowell.thirdparty.vo.QueryStopChargeVO;
import com.jsowell.thirdparty.vo.*;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@@ -118,6 +116,28 @@ public class LianLianController extends BaseController {
return response;
}
/**
* 请求启动充电
* @param dto
* @return
*/
@PostMapping("/query_start_charge")
public RestApiResponse<?> query_start_charge(@RequestBody QueryStartChargeDTO dto) {
logger.info("联联平台请求启动充电 params :{}", JSONObject.toJSONString(dto));
RestApiResponse<?> response;
try {
QueryStartChargeVO queryStartChargeVO = lianLianService.query_start_charge(dto);
response = new RestApiResponse<>(queryStartChargeVO);
}catch (BusinessException e) {
logger.error("联联平台请求启动充电 error",e);
response = new RestApiResponse<>(e.getCode(), e.getMessage());
} catch (Exception e) {
logger.error("联联平台请求启动充电 error", e);
response = new RestApiResponse<>(e);
}
logger.info("联联平台请求启动充电 result :{}", response);
return response;
}
/**
* 查询充电状态

View File

@@ -8,6 +8,7 @@ public enum StartModeEnum {
APP("1","用户app启动"),
CARD("2", "卡启动"),
OFFLINE_CARD("3", "离线卡启动"),
LIAN_LIAN("4", "联联平台启动"),
;
private String value;

View File

@@ -222,4 +222,11 @@ public interface IOrderBasicInfoService {
* @return
*/
List<AccumulativeInfoVO> getAccumulativeInfoForLianLian(QueryStationInfoDTO dto);
/**
* 联联平台生成订单
* @param dto
* @return
*/
Map<String, Object> generateOrderForLianLian(QueryStartChargeDTO dto);
}

View File

@@ -1401,4 +1401,76 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
public List<AccumulativeInfoVO> getAccumulativeInfoForLianLian(QueryStationInfoDTO dto) {
return orderBasicInfoMapper.getAccumulativeInfoForLianLian(dto);
}
/**
* 联联平台生成订单
* @param dto
* @return
*/
@Override
public Map<String, Object> generateOrderForLianLian(QueryStartChargeDTO dto) {
// 联联平台生成订单
String orderCode = dto.getStartChargeSeq();
String pileConnectorCode = dto.getConnectorID();
String pileSn = StringUtils.substring(pileConnectorCode, 0, 14);
String connectorCode = StringUtils.substring(pileConnectorCode, 14, 16);
String transactionCode = IdUtils.generateTransactionCode(pileSn, connectorCode);
// 通过桩号查询所属站点
PileBasicInfo pileBasicInfo = pileBasicInfoService.selectPileBasicInfoBySN(pileSn);
Long stationId = pileBasicInfo.getStationId();
// 将此订单信息存入订单表
// 订单基本信息
OrderBasicInfo orderBasicInfo = OrderBasicInfo.builder()
.orderCode(orderCode)
.transactionCode(transactionCode)
.orderStatus(OrderStatusEnum.NOT_START.getValue())
// .memberId(memberVO.getMemberId()) // 会员memberId
.stationId(String.valueOf(stationId))
.pileSn(pileSn)
.connectorCode(connectorCode)
.pileConnectorCode(pileConnectorCode)
// .logicCard(pileAuthCardInfo.getLogicCard()) // 卡号
.startMode(StartModeEnum.LIAN_LIAN.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);
// 组装结果集
Map<String, Object> resultMap = Maps.newHashMap();
resultMap.put("orderCode", orderBasicInfo.getOrderCode());
resultMap.put("transactionCode", orderBasicInfo.getTransactionCode());
resultMap.put("orderBasicInfo", orderBasicInfo);
resultMap.put("orderDetail", orderDetail);
// resultMap.put("accountBalance", totalAccountAmount);
return resultMap;
}
}

View File

@@ -4,10 +4,7 @@ import com.jsowell.pile.dto.QueryEquipmentDTO;
import com.jsowell.pile.dto.QueryStartChargeDTO;
import com.jsowell.thirdparty.domain.StationStatsInfo;
import com.jsowell.pile.dto.QueryStationInfoDTO;
import com.jsowell.thirdparty.vo.EquipmentAuthVO;
import com.jsowell.thirdparty.vo.LianLianPageResponse;
import com.jsowell.thirdparty.vo.QueryChargingStatusVO;
import com.jsowell.thirdparty.vo.QueryStopChargeVO;
import com.jsowell.thirdparty.vo.*;
import java.util.List;
@@ -51,6 +48,13 @@ public interface LianLianService {
*/
EquipmentAuthVO query_equip_auth(QueryEquipmentDTO dto);
/**
* 请求开始充电
* @param dto
* @return
*/
QueryStartChargeVO query_start_charge(QueryStartChargeDTO dto);
/**
* 查询充电状态
* @param startChargeSeq

View File

@@ -11,6 +11,7 @@ import com.jsowell.common.exception.BusinessException;
import com.jsowell.common.util.DateUtils;
import com.jsowell.common.util.PageUtils;
import com.jsowell.common.util.StringUtils;
import com.jsowell.netty.command.ykc.StartChargingCommand;
import com.jsowell.netty.command.ykc.StopChargingCommand;
import com.jsowell.netty.service.yunkuaichong.YKCPushCommandService;
import com.jsowell.pile.domain.*;
@@ -26,6 +27,7 @@ import com.jsowell.pile.service.IPileStationInfoService;
import com.jsowell.pile.vo.base.ConnectorInfoVO;
import com.jsowell.pile.vo.base.MerchantInfoVO;
import com.jsowell.pile.vo.lianlian.AccumulativeInfoVO;
import com.jsowell.pile.vo.uniapp.SendMessageVO;
import com.jsowell.pile.vo.web.PileConnectorInfoVO;
import com.jsowell.pile.vo.web.PileModelInfoVO;
import com.jsowell.thirdparty.domain.ConnectorChargeStatusInfo;
@@ -39,10 +41,7 @@ import com.jsowell.thirdparty.domain.StationInfo;
import com.jsowell.thirdparty.domain.StationStatsInfo;
import com.jsowell.thirdparty.domain.StationStatusInfo;
import com.jsowell.thirdparty.service.LianLianService;
import com.jsowell.thirdparty.vo.EquipmentAuthVO;
import com.jsowell.thirdparty.vo.LianLianPageResponse;
import com.jsowell.thirdparty.vo.QueryChargingStatusVO;
import com.jsowell.thirdparty.vo.QueryStopChargeVO;
import com.jsowell.thirdparty.vo.*;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -210,7 +209,7 @@ public class LianLianServiceImpl implements LianLianService {
StationStatusInfos.add(stationStatusInfo);
}
}
// TODO 将 StationStatusInfos 分页
// 将 StationStatusInfos 分页
int pageNum = 1;
int pageSize = 10;
List<StationStatusInfo> collect = StationStatusInfos.stream()
@@ -363,13 +362,42 @@ public class LianLianServiceImpl implements LianLianService {
* 请求启动充电
* @param dto
*/
public void query_start_charge(QueryStartChargeDTO dto) {
public QueryStartChargeVO query_start_charge(QueryStartChargeDTO dto) {
// 通过传过来的订单号和枪口号生成订单
String orderCode = dto.getStartChargeSeq();
// String orderCode = dto.getStartChargeSeq();
String pileConnectorCode = dto.getConnectorID();
OrderBasicInfo orderInfo = orderBasicInfoService.getOrderInfoByOrderCode(dto.getStartChargeSeq());
if (orderInfo != null) {
// 平台已存在订单
throw new BusinessException("", "平台已存在订单");
}
Map<String, Object> map = orderBasicInfoService.generateOrderForLianLian(dto);
String orderCode = (String) map.get("orderCode");
String transactionCode = (String) map.get("transactionCode");
OrderBasicInfo orderBasicInfo = (OrderBasicInfo) map.get("orderBasicInfo");
StartChargingCommand command = StartChargingCommand.builder()
.pileSn(orderBasicInfo.getPileSn())
.connectorCode(orderBasicInfo.getConnectorCode())
.transactionCode(transactionCode)
.chargeAmount(orderBasicInfo.getPayAmount())
.logicCardNum(null)
.physicsCardNum(null)
.build();
ykcPushCommandService.pushStartChargingCommand(command);
// 拼装对应的数据并返回
QueryStartChargeVO vo = QueryStartChargeVO.builder()
.StartChargeSeq(orderCode)
.StartChargeSeqStat(1) // 1-启动中
.ConnectorID(pileConnectorCode)
.SuccStat(0)
.FailReason(0)
.build();
return vo;
// TODO 推送启动充电结果(调用接口 notification_start_charge_result)
}
@@ -383,11 +411,11 @@ public class LianLianServiceImpl implements LianLianService {
public QueryChargingStatusVO query_equip_charge_status(String startChargeSeq) {
// 通过订单号查询订单信息
OrderBasicInfo orderInfo = orderBasicInfoService.getOrderInfoByOrderCode(startChargeSeq);
OrderDetail orderDetail = orderBasicInfoService.getOrderDetailByOrderCode(startChargeSeq);
// 通过订单号查询实时数据
if (orderInfo == null || orderDetail == null) {
if (orderInfo == null) {
throw new BusinessException("", "");
}
// OrderDetail orderDetail = orderBasicInfoService.getOrderDetailByOrderCode(orderInfo.getOrderCode());
List<RealTimeMonitorData> realTimeData = orderBasicInfoService.getChargingRealTimeData(orderInfo.getTransactionCode());
RealTimeMonitorData data = realTimeData.get(0);
String orderStatus = orderInfo.getOrderStatus();

View File

@@ -0,0 +1,43 @@
package com.jsowell.thirdparty.vo;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 请求启动充电VO
*
* @author JS-ZZA
* @date 2023/4/28 14:33
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class QueryStartChargeVO {
/**
* 充电订单号
*/
private String StartChargeSeq;
/**
* 充电订单状态
*/
private int StartChargeSeqStat;
/**
* 充电设备接口编码
*/
private String ConnectorID;
/**
* 成功状态
*/
private int SuccStat;
/**
* 失败原因
*/
private int FailReason;
}