|
|
@@ -19,7 +19,7 @@ import java.util.concurrent.TimeUnit;
|
|
|
|
|
|
/**
|
|
|
* 设备开关门记录服务实现类
|
|
|
- *
|
|
|
+ *
|
|
|
* @author haha
|
|
|
*/
|
|
|
@Slf4j
|
|
|
@@ -33,11 +33,11 @@ public class DoorRecordServiceImpl extends ServiceImpl<DoorRecordMapper, DoorRec
|
|
|
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
- public DoorRecord saveDoorOpenRecord(String deviceId, Long userId, String activityId,
|
|
|
+ public DoorRecord saveDoorOpenRecord(String deviceId, Long userId, String activityId,
|
|
|
String doorIndex, String openType, String source) {
|
|
|
try {
|
|
|
LocalDateTime now = LocalDateTime.now();
|
|
|
-
|
|
|
+
|
|
|
// 1. 保存到数据库
|
|
|
DoorRecord record = new DoorRecord();
|
|
|
record.setActivityId(activityId);
|
|
|
@@ -49,10 +49,10 @@ public class DoorRecordServiceImpl extends ServiceImpl<DoorRecordMapper, DoorRec
|
|
|
record.setNobuy(0); // 默认假设有消费,后续 AI 识别会更新
|
|
|
record.setOpenTime(now);
|
|
|
record.setSource(source);
|
|
|
-
|
|
|
+
|
|
|
boolean saved = this.save(record);
|
|
|
if (saved) {
|
|
|
- log.info("保存开门记录到数据库 - activityId: {}, deviceId: {}, userId: {}",
|
|
|
+ log.info("保存开门记录到数据库 - activityId: {}, deviceId: {}, userId: {}",
|
|
|
activityId, deviceId, userId);
|
|
|
} else {
|
|
|
log.error("保存开门记录到数据库失败 - activityId: {}", activityId);
|
|
|
@@ -62,7 +62,7 @@ public class DoorRecordServiceImpl extends ServiceImpl<DoorRecordMapper, DoorRec
|
|
|
saveToRedis(activityId, deviceId, userId, doorIndex, openType, now, source);
|
|
|
|
|
|
return record;
|
|
|
-
|
|
|
+
|
|
|
} catch (Exception e) {
|
|
|
log.error("保存开门记录失败 - activityId: {}", activityId, e);
|
|
|
throw new RuntimeException("保存开门记录失败", e);
|
|
|
@@ -87,11 +87,10 @@ public class DoorRecordServiceImpl extends ServiceImpl<DoorRecordMapper, DoorRec
|
|
|
|
|
|
LocalDateTime closeTime = LocalDateTime.now();
|
|
|
int result = baseMapper.updateDoorStatus(activityId, "CLOSED", closeTime);
|
|
|
-
|
|
|
+
|
|
|
if (result > 0) {
|
|
|
- log.info("更新门状态为已关门 - activityId: {}, 持续时长:{}秒",
|
|
|
- activityId, record.getDuration());
|
|
|
-
|
|
|
+ log.info("更新门状态为已关门 - activityId: {}, 持续时长:{}秒", activityId, record.getDuration());
|
|
|
+
|
|
|
// 同时更新 Redis
|
|
|
updateRedisDoorStatus(activityId, "CLOSED", closeTime);
|
|
|
return true;
|
|
|
@@ -112,7 +111,7 @@ public class DoorRecordServiceImpl extends ServiceImpl<DoorRecordMapper, DoorRec
|
|
|
int result = baseMapper.markNoConsume(activityId);
|
|
|
if (result > 0) {
|
|
|
log.info("标记无消费记录 - activityId: {}", activityId);
|
|
|
-
|
|
|
+
|
|
|
// 同时更新 Redis
|
|
|
updateRedisNobuy(activityId, 1);
|
|
|
return true;
|
|
|
@@ -133,7 +132,7 @@ public class DoorRecordServiceImpl extends ServiceImpl<DoorRecordMapper, DoorRec
|
|
|
int result = baseMapper.linkOrderId(activityId, orderId);
|
|
|
if (result > 0) {
|
|
|
log.info("关联订单 ID - activityId: {}, orderId: {}", activityId, orderId);
|
|
|
-
|
|
|
+
|
|
|
// 同时更新 Redis
|
|
|
updateRedisOrderId(activityId, orderId);
|
|
|
return true;
|
|
|
@@ -170,13 +169,13 @@ public class DoorRecordServiceImpl extends ServiceImpl<DoorRecordMapper, DoorRec
|
|
|
LambdaQueryWrapper<DoorRecord> wrapper = new LambdaQueryWrapper<>();
|
|
|
wrapper.eq(DoorRecord::getDeviceId, deviceId)
|
|
|
.orderByDesc(DoorRecord::getOpenTime);
|
|
|
-
|
|
|
+
|
|
|
return this.page(new com.baomidou.mybatisplus.extension.plugins.pagination.Page<>(page, pageSize), wrapper);
|
|
|
}
|
|
|
|
|
|
// ==================== Redis 操作方法 ====================
|
|
|
|
|
|
- private void saveToRedis(String activityId, String deviceId, Long userId,
|
|
|
+ private void saveToRedis(String activityId, String deviceId, Long userId,
|
|
|
String doorIndex, String openType, LocalDateTime openTime, String source) {
|
|
|
try {
|
|
|
String key = DOOR_RECORD_REDIS_KEY + activityId;
|
|
|
@@ -189,10 +188,10 @@ public class DoorRecordServiceImpl extends ServiceImpl<DoorRecordMapper, DoorRec
|
|
|
record.put("openTime", String.valueOf(openTime.toEpochSecond(java.time.ZoneOffset.UTC)));
|
|
|
record.put("source", source != null ? source : "");
|
|
|
record.put("status", "OPENED");
|
|
|
-
|
|
|
+
|
|
|
stringRedisTemplate.opsForHash().putAll(key, record);
|
|
|
stringRedisTemplate.expire(key, REDIS_EXPIRE_MINUTES, TimeUnit.MINUTES);
|
|
|
-
|
|
|
+
|
|
|
log.debug("保存开门记录到 Redis: activityId={}", activityId);
|
|
|
} catch (Exception e) {
|
|
|
log.error("保存开门记录到 Redis 失败 - activityId: {}", activityId, e);
|
|
|
@@ -204,7 +203,7 @@ public class DoorRecordServiceImpl extends ServiceImpl<DoorRecordMapper, DoorRec
|
|
|
try {
|
|
|
String key = DOOR_RECORD_REDIS_KEY + activityId;
|
|
|
stringRedisTemplate.opsForHash().put(key, "doorStatus", doorStatus);
|
|
|
- stringRedisTemplate.opsForHash().put(key, "closeTime",
|
|
|
+ stringRedisTemplate.opsForHash().put(key, "closeTime",
|
|
|
String.valueOf(closeTime.toEpochSecond(java.time.ZoneOffset.UTC)));
|
|
|
log.debug("更新 Redis 门状态 - activityId: {}, status: {}", activityId, doorStatus);
|
|
|
} catch (Exception e) {
|