1. 联调

This commit is contained in:
邱贞招 2024-06-04 10:36:58 +08:00
parent 6383feb843
commit 59c3ff74c8
5 changed files with 86 additions and 9 deletions

View File

@ -144,6 +144,10 @@ public class AppVerifyController extends BaseController
if(order.getRuleId()==null){
return error("=============================================ruleId未传=============================================");
}
//设备是否在线
if(!asDeviceService.isOnline(order.getSn())){
return error("设备不在线");
}
//实名判断
if(!asUserService.checkIsAuthentication(order.getUserId())){
return error("您还未实名,请先实名");
@ -291,6 +295,10 @@ public class AppVerifyController extends BaseController
public AjaxResult deviceAppointment(EtOrderVo appointmentVo)
{
logger.info("【车辆预约信息】:{}", JSON.toJSON(appointmentVo));
//设备是否在线
if(!asDeviceService.isOnline(appointmentVo.getSn())){
return error("设备不在线");
}
//运营时间判断
if(!asDeviceService.isOperatingTime(appointmentVo.getSn())){
return error("不在营业时间内,不得骑行");

View File

@ -0,0 +1,21 @@
package com.ruoyi.common.utils.onenet;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
@Data
public class ResponseVo {
@JsonProperty("data")
private Object data;
@JsonProperty("request_id")
private String requestId;
@JsonProperty("msg")
private String msg;
@JsonProperty("code")
private int code;
}

View File

@ -1,9 +1,9 @@
package com.ruoyi.system.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.common.utils.onenet.ResponseVo;
import com.ruoyi.system.domain.AsDevice;
import com.ruoyi.system.domain.EtOperatingArea;
import com.ruoyi.system.domain.EtOrder;
import com.ruoyi.system.domain.response.OrderResponse;
import com.ruoyi.system.domain.vo.DeviceNumVo;
import com.ruoyi.system.domain.vo.EtOrderVo;
@ -127,6 +127,11 @@ public interface IAsDeviceService extends IService<AsDevice>
*/
public void sendCommand(String mac, String token,String command,String type);
/**
* 发送命令(带响应)
*/
public ResponseVo sendCommandWithResp(String mac, String token, String command, String type);
/**
* 响铃寻车
*/
@ -236,6 +241,11 @@ public interface IAsDeviceService extends IService<AsDevice>
int updateLocation(AsDevice device);
/**
* 判断是否在线
*/
boolean isOnline(String sn);
// /**
// * 是否靠近运营区边界
// */

View File

@ -17,6 +17,7 @@ import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.http.HttpUtils;
import com.ruoyi.common.utils.map.GeoUtils;
import com.ruoyi.common.utils.onenet.IotUtil;
import com.ruoyi.common.utils.onenet.ResponseVo;
import com.ruoyi.common.utils.onenet.Token;
import com.ruoyi.common.utils.uuid.IdUtils;
import com.ruoyi.system.domain.*;
@ -633,6 +634,16 @@ public class AsDeviceServiceImpl extends ServiceImpl<AsDeviceMapper, AsDevice> i
}
}
@Override
/** 发送命令*/
public ResponseVo sendCommandWithResp(String mac, String token,String command,String type) {
String param = "device_name=" + mac + "&product_id=" + productId +"&timeout=" + timeout;
String sendUrl = iotUrl+ IotConstants.ADDS_COMMAND + "?"+param;
String result = HttpUtils.sendPostWithToken(sendUrl, command, token);
log.info(""+type+"】===>IOT请求调用结果:【{}】",result);
return JSON.parseObject(result,ResponseVo.class);
}
/**
* 响铃寻车
* @param sn
@ -798,7 +809,14 @@ public class AsDeviceServiceImpl extends ServiceImpl<AsDeviceMapper, AsDevice> i
//定时取消预约
scheduledExecutorService.schedule(() -> {
log.error("【车辆超时预约】系统自动取消");
//订单更新最后预约时间并结束订单做超出预约时间标记
EtOrder order1 = etOrderService.selectEtOrderByOrderNo(order.getOrderNo());
log.info("【定时取消预约】重新获取订单信息:{}",JSON.toJSON(order1));
if(order1.getPaid().equals(ServiceConstants.ORDER_PAY_STATUS_PAID)){//已支付订单跳过
log.error("【车辆超时预约】订单已支付,跳过");
return;
}
log.error("【车辆超时预约】订单未支付,系统自动处理");
//未支付 订单更新最后预约时间并结束订单做超出预约时间标记
order.setStatus(ServiceConstants.ORDER_STATUS_CANCEL_APPOINTMENT);
order.setAppointmentEndTime(new Date());
order.setAppointmentTimeout("1");
@ -1333,6 +1351,19 @@ public class AsDeviceServiceImpl extends ServiceImpl<AsDeviceMapper, AsDevice> i
return asDeviceMapper.update(null,wrapper);
}
/**
* 判断是否在线
*/
@SneakyThrows
@Override
public boolean isOnline(String sn) {
ResponseVo responseVo = sendCommandWithResp(asDeviceMapper.selectAsDeviceBySn(sn).getMac(), Token.getToken(), "111", "是否在线");
if(responseVo.getCode() == 0){
return true;
}
return false;
}
/**
* 判断是否靠近边界

View File

@ -6,7 +6,6 @@ import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.ruoyi.common.constant.CacheConstants;
import com.ruoyi.common.constant.Constants;
import com.ruoyi.common.constant.IotConstants;
import com.ruoyi.common.constant.ServiceConstants;
import com.ruoyi.common.core.domain.entity.AsUser;
import com.ruoyi.common.core.domain.entity.SysUser;
@ -16,7 +15,7 @@ import com.ruoyi.common.pay.wx.domain.NotifyEventType;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.http.HttpUtils;
import com.ruoyi.common.utils.onenet.Token;
import com.ruoyi.common.utils.spring.SpringUtils;
import com.ruoyi.system.domain.*;
import com.ruoyi.system.domain.vo.AttachVo;
import com.ruoyi.system.mapper.AsDeviceMapper;
@ -40,14 +39,12 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.support.TransactionTemplate;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.math.BigDecimal;
import java.util.*;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
/**
@ -165,7 +162,7 @@ public class CallbackServiceImpl implements CallbackService {
if(autoRefundDeposit!=null && autoRefundDeposit>0){
//创建一个定时器计算出退还时间后执行退款操作
// 往后推autoRefundDeposit小时执行
scheduledExecutorService.schedule(() -> {
// scheduledExecutorService.schedule(() -> {
logger.info("【微信支付回调】退还押金定时任务开始");
// 退款
Long userId = order.getUserId();
@ -182,12 +179,13 @@ public class CallbackServiceImpl implements CallbackService {
.max(Comparator.comparing(EtOrder::getPayTime));
if (latestOrder.isPresent()) {
EtOrder newestOrder = latestOrder.get();
logger.info("【微信支付回调】最后一次押金充值记录 : " + JSON.toJSONString(newestOrder));
// 处理找到的最新支付时间的订单
String deposit = area.getDeposit();
if(newestOrder.getTotalFee().compareTo(new BigDecimal(deposit))!=0){
throw new ServiceException("押金充值记录与当前运营区的押金不同");
}
Refund refund = wxPayService.refund(newestOrder,autoRefundDeposit+"个小时后自动退", newestOrder.getTotalFee());
Refund refund = wxPayService.refund(newestOrder,autoRefundDeposit+"个小时后自动退押金", newestOrder.getTotalFee());
EtRefund refund1= orderService.createRefund(etOrder, newestOrder.getTotalFee(), null, null, null, null, refund,ServiceConstants.REFUND_TYPE_DEPOSIT);
int i = etRefundService.insertEtRefund(refund1);
if(i>0){
@ -195,10 +193,19 @@ public class CallbackServiceImpl implements CallbackService {
}
// 新增资金流水记录
capitalFlowRecords(newestOrder,ServiceConstants.FLOW_TYPE_DISBURSE,ServiceConstants.ORDER_TYPE_DEPOSIT_REFUND);
// 更新用户信息清除缓存
asUser.setBalance(asUser.getBalance().subtract(newestOrder.getTotalFee()));
int updateUser = userService.updateUser(asUser);
Collection<String> keys = SpringUtils.getBean(RedisCache.class).keys(CacheConstants.LOGIN_TOKEN_KEY + "*");
redisCache.deleteObject(keys);
if(updateUser>0){
logger.info("【微信支付回调】退还押金,更新用户余额成功!");
}
} else {
throw new ServiceException("没有找到押金充值记录");
}
}, autoRefundDeposit, TimeUnit.HOURS);
// }, autoRefundDeposit, TimeUnit.HOURS);
}
logger.info("=================【微信支付回调】开始请求分账==================");
logger.info("区域对象====="+JSON.toJSONString(area));