桩回调接口

This commit is contained in:
yuyang 2021-08-15 21:09:22 +08:00
parent bcad0b0230
commit 2dfb722430
10 changed files with 331 additions and 186 deletions

View File

@ -28,4 +28,9 @@ public class ServiceNameConstants
*/
public static final String PILE_SERVICE = "xhpc-power-pile";
/**
* 订单服务
*/
public static final String XHPC_ORDER ="xhpc-order";
}

View File

@ -30,6 +30,7 @@ public class XhpcChargingStationController extends BaseController {
@Autowired
private IXhpcChargingStationService xhpcChargingStationService;
/**
* 查询电站列表
*/

View File

@ -0,0 +1,38 @@
package com.xhpc.common.api;
import com.xhpc.common.api.factory.PileOrderFallbackFactory;
import com.xhpc.common.core.constant.ServiceNameConstants;
import com.xhpc.common.core.domain.R;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
/**
* 桩订单回调
* @author yuyang
* @date 2021/8/15 16:54
*/
@FeignClient(contextId ="pileOrderService",value = ServiceNameConstants.XHPC_ORDER, fallbackFactory = PileOrderFallbackFactory.class)
public interface PileOrderService {
/**
* 桩启动回调接口
* @param orderNo 订单号
* @param status 1 成功 2失败
* @param remark 备注
* @return
*/
@GetMapping("/chargeOrder/stopUp")
R pileStartUp(@RequestParam("orderNo") String orderNo, @RequestParam("status") Integer status, @RequestParam("remark") String remark);
/**
* 桩停止回调接口
* @param orderNo 订单号
* @param status 1 成功 2失败
* @param remark 备注
* @return
*/
@GetMapping("/chargeOrder/pileStopUp")
R pileStopUp(@RequestParam("orderNo") String orderNo,@RequestParam("status") Integer status,@RequestParam("remark") String remark);
}

View File

@ -0,0 +1,38 @@
package com.xhpc.common.api.factory;
import com.xhpc.common.api.PileOrderService;
import com.xhpc.common.core.domain.R;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.cloud.openfeign.FallbackFactory;
import org.springframework.stereotype.Component;
/**
* @author yuyang
* @date 2021/8/15 16:55
*/
@Component
public class PileOrderFallbackFactory implements FallbackFactory<PileOrderService> {
private static final Logger logger = LoggerFactory.getLogger(PileOrderFallbackFactory.class);
@Override
public PileOrderService create(Throwable cause) {
logger.error("订单服务调用失败:{}//fallback",cause.getMessage());
return new PileOrderService() {
@Override
public R pileStartUp(String orderNo, Integer status, String remark) {
return R.fail("桩启动回调接口失败:" + cause.getMessage());
}
@Override
public R pileStopUp(String orderNo, Integer status, String remark) {
return R.fail("桩停止回调接口失败:" + cause.getMessage());
}
};
}
}

View File

@ -61,10 +61,10 @@
<artifactId>ruoyi-common-datasource</artifactId>
</dependency>
<!-- RuoYi Common DataScope -->
<!-- RuoYi Common Core -->
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-common-datascope</artifactId>
<artifactId>ruoyi-common-core</artifactId>
</dependency>
<dependency>

View File

@ -7,6 +7,7 @@ import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.openfeign.EnableFeignClients;
@EnableCustomConfig
@EnableRyFeignClients
@EnableFeignClients

View File

@ -1,12 +1,8 @@
package com.xhpc.order.controller;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.xhpc.common.core.web.controller.BaseController;
import com.xhpc.common.core.web.domain.AjaxResult;
import com.xhpc.common.core.web.page.TableDataInfo;
import com.xhpc.common.data.redis.CacheRealtimeData;
import com.xhpc.common.redis.service.RedisService;
import com.xhpc.order.service.IHxpcChargeOrderService;
import io.swagger.annotations.Api;
import org.springframework.beans.factory.annotation.Autowired;
@ -29,8 +25,7 @@ public class HxpcChargeOrderController extends BaseController {
@Autowired
private IHxpcChargeOrderService iHxpcChargeOrderService;
@Autowired
private RedisService redisService;
/**
* 实时订单
*/
@ -79,41 +74,6 @@ public class HxpcChargeOrderController extends BaseController {
}
/**
* 桩启动回调接口
* @param orderNo 订单号
* @param status 1 成功 2失败
* @param remark 备注
* @return
*/
@GetMapping("/pileStartUp")
public void pileStartUp(String orderNo,Integer status,String remark){
iHxpcChargeOrderService.pileStartUp(orderNo,status,remark);
}
/**
* 桩停止回调接口
* @param orderNo 订单号
* @param status 1 成功 2失败
* @param remark 备注
* @return
*/
@GetMapping("/pileStopUp")
public void pileStopUp(String orderNo,Integer status,String remark){
iHxpcChargeOrderService.pileStopUp(orderNo,status,remark);
}
/**
* 桩实时数据回调接口
* @param orderNo 订单号
* @param status 离线故障充电空闲计费错误重新计算费用电量默认为正确
* @param remark 备注
* @param rateModel 费率模型id
* @return
*/
@GetMapping("/pileRealtime")
public AjaxResult pileRealtime(String orderNo,Integer status,String remark,String rateModel){
return AjaxResult.success();
}
}

View File

@ -0,0 +1,209 @@
package com.xhpc.order.controller;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.xhpc.common.api.PileOrderService;
import com.xhpc.common.core.domain.R;
import com.xhpc.common.core.web.controller.BaseController;
import com.xhpc.common.core.web.domain.AjaxResult;
import com.xhpc.common.data.redis.CacheRealtimeData;
import com.xhpc.common.redis.service.RedisService;
import com.xhpc.common.util.ConnectionRabbitMQUtil;
import com.xhpc.order.domain.HxpcChargeOrder;
import com.xhpc.order.domain.XhpcHistoryOrder;
import com.xhpc.order.service.IHxpcChargeOrderService;
import com.xhpc.order.service.IXhpcHistoryOrderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
@RestController
public class HxpcPileOrderController extends BaseController {
@Autowired
private RedisService redisService;
@Autowired
private IHxpcChargeOrderService iHxpcChargeOrderService;
@Autowired
private IXhpcHistoryOrderService xhpcHistoryOrderService;
@Autowired
private PileOrderService pileOrderService;
/**
* 测试
*/
@GetMapping("/test/chargeOrder/pileStartUp")
private R test(@RequestParam String orderNo, @RequestParam Integer status, @RequestParam String remark){
R r = pileOrderService.pileStopUp(orderNo, status, remark);
return r;
}
/**
* 桩启动回调接口
* @param orderNo 订单号
* @param status 1 成功 2失败
* @param remark 备注
* @return
*/
@GetMapping("/chargeOrder/pileStartUp")
public R pileStartUp(String orderNo, Integer status, String remark){
//解析订单编号
String s = orderNo.split("\\.")[0];
String s1 = s.split(":")[1];
Long userId;
Integer code ;
if(status ==1){
code=200;
userId=update(0, 0,remark, s1,0);
}else{
code=500;
userId=update(-1, 1,remark, s1,0);
}
Map<String,Object> map =new HashMap<>();
map.put("code",code);
map.put("userId",userId);
map.put("message",remark);
JSONObject json = new JSONObject(map);
//消息对了内容
rabbimt(userId+"##"+json);
return R.ok();
}
/**
* 桩停止回调接口
* @param orderNo 订单号
* @param status 1 成功 2失败
* @param remark 备注
* @return
*/
@GetMapping("/chargeOrder/pileStopUp")
public R pileStopUp(String orderNo,Integer status,String remark){
//解析订单编号
String s = orderNo.split("\\.")[0];
String s1 = s.split(":")[1];
Integer code=300 ;
Long userId=update(status, 0,remark, s1,1);
Map<String,Object> map =new HashMap<>();
map.put("code",code);
map.put("userId",userId);
if(status==1){
map.put("message","停止充电成功");
}else{
map.put("message",remark);
}
JSONObject json = new JSONObject(map);
//消息对了内容
rabbimt(userId+"##"+json);
return R.ok();
}
/**
* 桩实时数据回调接口
* @param orderNo 订单号
* @param status 离线故障充电空闲计费错误重新计算费用电量默认为正确
* @param remark 备注
* @param rateModel 费率模型id
* @return
*/
@GetMapping("/pileRealtime")
public AjaxResult pileRealtime(String orderNo, Integer status, String remark, String rateModel){
return AjaxResult.success();
}
/**
* @param status 状态
* @param delFlag 是否删除
* @param remark 备注
* @param serialNumber 订单号
* @param type 结束订单状态
* @return
*/
private Long update(Integer status,Integer delFlag, String remark, String serialNumber,Integer type) {
HxpcChargeOrder hxpcChargeOrder = iHxpcChargeOrderService.getSerialNumberMessage(serialNumber);
hxpcChargeOrder.setStatus(status);
hxpcChargeOrder.setDelFlag(delFlag);
hxpcChargeOrder.setRemark(remark);
Long userId = hxpcChargeOrder.getUserId();
if(type==1){
Date date = new Date();
//获取实时订单
Map<String, Object> cacheMap = redisService.getCacheMap("order:"+serialNumber);
JSONArray st = (JSONArray)cacheMap.get("realtimeDataList");
System.out.println(st.toString());
CacheRealtimeData cacheRealtimeData = JSON.toJavaObject(st.getJSONObject(0), CacheRealtimeData.class);
//用户第几次充电
int count = iHxpcChargeOrderService.getCount(userId);
String state ="";
String discount ="";
if(count==0){
//活动折扣
Map<String, Object> promotion = iHxpcChargeOrderService.getPromotion();
if(promotion !=null){
//state 1.总金额 2.金额 3.服务费 discount 折扣率
state = promotion.get("state").toString();
discount = promotion.get("discount").toString();
}
}
//生成一条历史订单
XhpcHistoryOrder xhpcHistoryOrder =new XhpcHistoryOrder();
xhpcHistoryOrder.setChargeOrderId(hxpcChargeOrder.getChargeOrderId());
xhpcHistoryOrder.setChargingStationId(hxpcChargeOrder.getChargingStationId());
xhpcHistoryOrder.setUserId(userId);
xhpcHistoryOrder.setTerminalId(hxpcChargeOrder.getTerminalId());
xhpcHistoryOrder.setSerialNumber(hxpcChargeOrder.getSerialNumber());
xhpcHistoryOrder.setStartSoc(hxpcChargeOrder.getStartSoc());
xhpcHistoryOrder.setReconciliationStatus(0);
xhpcHistoryOrder.setSortingStatus(0);
xhpcHistoryOrder.setType(1);
xhpcHistoryOrder.setStatus(0);
xhpcHistoryOrder.setDelFlag(0);
xhpcHistoryOrder.setCreateTime(date);
//订单总价---运维服务费抽成
//结束时soc
xhpcHistoryOrderService.insert(xhpcHistoryOrder);
//充电订单 --结束soc充电时长充电度数
hxpcChargeOrder.setEndTime(date);
//实时数据存入MYsqlsoc电流电压
}
iHxpcChargeOrderService.updateXhpcChargeOrder(hxpcChargeOrder);
return userId;
}
private void rabbimt(String message) {
//发送消息队列
try{
// 1获取到连接
Connection connection = ConnectionRabbitMQUtil.getConnection();
// 2从连接中创建通道使用通道才能完成消息相关的操作
Channel channel = connection.createChannel();
// 3声明创建队列
channel.queueDeclare("webSocket", false, false, false, null);
// 4消息内容
channel.basicPublish("", "webSocket", null, message.getBytes());
channel.close();
connection.close();
}catch (Exception e){
}
}
}

View File

@ -1,6 +1,9 @@
package com.xhpc.order.service;
import com.xhpc.common.core.domain.R;
import com.xhpc.common.core.web.domain.AjaxResult;
import com.xhpc.order.domain.HxpcChargeOrder;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
@ -43,21 +46,30 @@ public interface IHxpcChargeOrderService {
/**
* 桩启动回调接口
* @param orderNo 订单号
* @param status 1 成功 2失败
* @param remark 备注
* 获取充电订单数据
* @param serialNumber 订单编号
* @return
*/
void pileStartUp(String orderNo,Integer status,String remark);
HxpcChargeOrder getSerialNumberMessage(String serialNumber);
/**
* 桩停止回调接口
* @param orderNo 订单号
* @param status 1 成功 2失败
* @param remark 备注
* 判断用户是第几次充电
* @param userId
* @return
*/
void pileStopUp(String orderNo,Integer status,String remark);
int getCount(Long userId);
/**
* 活动
* @return
*/
Map<String,Object> getPromotion();
/**
* 修改充电订单
* @param hxpcChargeOrder
* @return
*/
int updateXhpcChargeOrder(HxpcChargeOrder hxpcChargeOrder);
}

View File

@ -177,9 +177,9 @@ public class HxpcChargeOrderServiceImpl implements IHxpcChargeOrderService {
if (xhpcTerminal == null || xhpcTerminal.getTerminalId() == null || xhpcTerminal.getChargingPileId() == null || xhpcTerminal.getPileSerialNumber() == null) {
return AjaxResult.error(1104, "无效的终端编号");
}
HxpcChargeOrder serialNumberMessage = hxpcChargeOrderMapper.getSerialNumberMessage(serialNumber);
serialNumberMessage.setType(1);
hxpcChargeOrderMapper.updateXhpcChargeOrder(serialNumberMessage);
//HxpcChargeOrder serialNumberMessage = hxpcChargeOrderMapper.getSerialNumberMessage(serialNumber);
//serialNumberMessage.setType(1);
//hxpcChargeOrderMapper.updateXhpcChargeOrder(serialNumberMessage);
R oa = powerPileService.stopCharging(xhpcTerminal.getPileSerialNumber(), xhpcTerminal.getSerialNumber(), "OA");
if(oa.getCode() !=200){
return AjaxResult.error(oa.getMsg());
@ -187,143 +187,24 @@ public class HxpcChargeOrderServiceImpl implements IHxpcChargeOrderService {
return AjaxResult.success();
}
/**
* 桩启动回调接口
* @param orderNo 订单号
* @param status 1 成功 2失败
* @param remark 备注
* @return
*/
@Override
public void pileStartUp(String orderNo, Integer status, String remark) {
//解析订单编号
String s = orderNo.split("\\.")[0];
String s1 = s.split(":")[1];
Long userId;
Integer code ;
if(status ==1){
code=200;
userId=update(0, 0,remark, s1,0);
}else{
code=500;
userId=update(-1, 1,remark, s1,0);
}
Map<String,Object> map =new HashMap<>();
map.put("code",code);
map.put("userId",userId);
map.put("message",remark);
JSONObject json = new JSONObject(map);
//消息对了内容
rabbimt(userId+"##"+json);
public HxpcChargeOrder getSerialNumberMessage(String serialNumber) {
return hxpcChargeOrderMapper.getSerialNumberMessage(serialNumber);
}
/**
* 桩停止回调接口
* @param orderNo 订单号
* @param status 1 成功 2失败
* @param remark 备注
* @return
*/
@Override
public void pileStopUp(String orderNo, Integer status, String remark) {
//解析订单编号
String s = orderNo.split("\\.")[0];
String s1 = s.split(":")[1];
Integer code=300 ;
Long userId=update(status, 0,remark, s1,1);
Map<String,Object> map =new HashMap<>();
map.put("code",code);
map.put("userId",userId);
if(status==1){
map.put("message","停止充电成功");
}else{
map.put("message",remark);
}
JSONObject json = new JSONObject(map);
//消息对了内容
rabbimt(userId+"##"+json);
public int getCount(Long userId) {
return hxpcChargeOrderMapper.getCount(userId);
}
/**
* @param status 状态
* @param delFlag 是否删除
* @param remark 备注
* @param serialNumber 订单号
* @param type 结束订单状态
* @return
*/
private Long update(Integer status,Integer delFlag, String remark, String serialNumber,Integer type) {
HxpcChargeOrder hxpcChargeOrder = hxpcChargeOrderMapper.getSerialNumberMessage(serialNumber);
hxpcChargeOrder.setStatus(status);
hxpcChargeOrder.setDelFlag(delFlag);
hxpcChargeOrder.setRemark(remark);
Long userId = hxpcChargeOrder.getUserId();
if(type==1){
Date date = new Date();
//获取实时订单
Map<String, Object> cacheMap = redisService.getCacheMap("order:"+serialNumber);
JSONArray st = (JSONArray)cacheMap.get("realtimeDataList");
System.out.println(st.toString());
CacheRealtimeData cacheRealtimeData = JSON.toJavaObject(st.getJSONObject(0), CacheRealtimeData.class);
//用户第几次充电
int count = hxpcChargeOrderMapper.getCount(userId);
String state ="";
String discount ="";
if(count==0){
//活动折扣
Map<String, Object> promotion = hxpcChargeOrderMapper.getPromotion();
if(promotion !=null){
//state 1.总金额 2.金额 3.服务费 discount 折扣率
state = promotion.get("state").toString();
discount = promotion.get("discount").toString();
}
}
//生成一条历史订单
XhpcHistoryOrder xhpcHistoryOrder =new XhpcHistoryOrder();
xhpcHistoryOrder.setChargeOrderId(hxpcChargeOrder.getChargeOrderId());
xhpcHistoryOrder.setChargingStationId(hxpcChargeOrder.getChargingStationId());
xhpcHistoryOrder.setUserId(userId);
xhpcHistoryOrder.setTerminalId(hxpcChargeOrder.getTerminalId());
xhpcHistoryOrder.setSerialNumber(hxpcChargeOrder.getSerialNumber());
xhpcHistoryOrder.setStartSoc(hxpcChargeOrder.getStartSoc());
xhpcHistoryOrder.setReconciliationStatus(0);
xhpcHistoryOrder.setSortingStatus(0);
xhpcHistoryOrder.setType(1);
xhpcHistoryOrder.setStatus(0);
xhpcHistoryOrder.setDelFlag(0);
xhpcHistoryOrder.setCreateTime(date);
//订单总价---运维服务费抽成
//结束时soc
xhpcHistoryOrderService.insert(xhpcHistoryOrder);
//充电订单 --结束soc充电时长充电度数
hxpcChargeOrder.setEndTime(date);
//实时数据存入MYsqlsoc电流电压
}
hxpcChargeOrderMapper.updateXhpcChargeOrder(hxpcChargeOrder);
return userId;
@Override
public Map<String, Object> getPromotion() {
return hxpcChargeOrderMapper.getPromotion();
}
private void rabbimt(String message) {
//发送消息队列
try{
// 1获取到连接
Connection connection = ConnectionRabbitMQUtil.getConnection();
// 2从连接中创建通道使用通道才能完成消息相关的操作
Channel channel = connection.createChannel();
// 3声明创建队列
channel.queueDeclare(NAME, false, false, false, null);
// 4消息内容
channel.basicPublish("", NAME, null, message.getBytes());
channel.close();
connection.close();
}catch (Exception e){
}
@Override
public int updateXhpcChargeOrder(HxpcChargeOrder hxpcChargeOrder) {
return hxpcChargeOrderMapper.updateXhpcChargeOrder(hxpcChargeOrder);
}
}