| | |
| | | import java.math.RoundingMode; |
| | | import java.text.DecimalFormat; |
| | | import java.time.*; |
| | | import java.util.concurrent.TimeUnit; |
| | | |
| | | |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | |
| | | |
| | | |
| | | |
| | | /** |
| | | * 安全检测等待窗口(秒):设备在此时长内未上报有效安全检测时,前端按「未插枪」提示用户, |
| | | * 超时订单由启动超时兜底任务自动取消,避免订单永久停留在启动中状态。 |
| | | */ |
| | | private static final long STARTUP_WAIT_SECONDS = 90L; |
| | | |
| | | @ResponseBody |
| | | @GetMapping(value = "/preChargeCheck/{id}") |
| | | @ApiOperation(value = "获取安全检测数据", tags = {"小程序-扫一扫"}) |
| | |
| | | public AjaxResult<PreChargeCheck> preChargeCheck(@PathVariable Integer id) { |
| | | String key = "AQJC_" + id; |
| | | PreChargeCheck cacheObject = redisService.getCacheObject(key); |
| | | if(null != cacheObject){ |
| | | if(LocalDateTime.now().minusMinutes(1).isAfter(cacheObject.getAddTime())){ |
| | | redisService.deleteObject(key); |
| | | cacheObject = null; |
| | | if (null != cacheObject) { |
| | | LocalDateTime addTime = cacheObject.getAddTime(); |
| | | // 等待安全检测超出窗口且启动指令尚未下发时,按「未插枪」提示前端; |
| | | // 缓存必须保留:设备安全检测上报依赖该缓存推进启动,删除会导致订单永久卡在启动中 |
| | | if (Integer.valueOf(1).equals(cacheObject.getStartupSuccess()) |
| | | && !Boolean.TRUE.equals(cacheObject.getStartCommandSent()) |
| | | && null != addTime |
| | | && LocalDateTime.now().isAfter(addTime.plusSeconds(STARTUP_WAIT_SECONDS))) { |
| | | cacheObject.setStartupSuccess(3); |
| | | cacheObject.setFailureCause(5); |
| | | redisService.setCacheObject(key, cacheObject, 24L, TimeUnit.HOURS); |
| | | } |
| | | } |
| | | return AjaxResult.success(cacheObject); |
| | |
| | | }) |
| | | public AjaxResult stopCharging(@PathVariable String id) { |
| | | log.info("小程序主动发起停止充电,订单ID:{}", id); |
| | | // VIN 码充电订单路由:VD 订单存于 t_vin_charging_order,不在 t_charging_order; |
| | | // VD 表存在该 ID 订单时优先走 VIN 停充(内部按状态返回准确的“不能重复操作/还未开始充电”), |
| | | // 其余情况回落普通停充。雪花 ID 两表同源生成,撞号概率可忽略 |
| | | TVinChargingOrder vinOrder = null; |
| | | try { |
| | | vinOrder = vinChargingOrderService.getById(Long.valueOf(id)); |
| | | } catch (NumberFormatException ignored) { |
| | | // 非数字订单ID,按普通停充处理 |
| | | } |
| | | if (vinOrder != null) { |
| | | return vinChargingOrderService.stopChargingByApplet(id); |
| | | } |
| | | return chargingOrderService.stopCharging(id); |
| | | } |
| | | |