MAccountServiceImpl.java
6.29 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
package vion.service.impl.monitor;
import com.baomidou.mybatisplus.extension.toolkit.Db;
import com.github.yulichang.base.MPJBaseServiceImpl;
import lombok.RequiredArgsConstructor;
import org.dromara.hutool.core.bean.BeanUtil;
import org.dromara.hutool.core.collection.CollUtil;
import org.dromara.hutool.core.text.StrUtil;
import org.dromara.hutool.core.util.ObjUtil;
import org.springframework.stereotype.Service;
import vion.mapper.monitor.MAccountMapper;
import vion.model.monitor.*;
import vion.service.monitor.IMAccountService;
import vion.service.monitor.IRAccountEventService;
import vion.service.monitor.IRAgentEventService;
import vion.service.monitor.IRUserAccountService;
import vion.utils.TimeZoneUtil;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author vion
* @date 2024/10/31
*/
@Service
@RequiredArgsConstructor
public class MAccountServiceImpl extends MPJBaseServiceImpl<MAccountMapper, MAccount> implements IMAccountService {
private final IRAccountEventService accountEventService;
private final IRAgentEventService agentEventService;
private final IRUserAccountService userAccountService;
@Override
public List<RAccountEvent> getEventById(String uid) {
return accountEventService.lambdaQuery().eq(RAccountEvent::getAccountUid, uid).list();
}
@Override
public String saveEvent(String agentUid, String uid, RAccountEvent event) {
var one = accountEventService.lambdaQuery()
.eq(RAccountEvent::getAccountUid, uid)
.eq(RAccountEvent::getEventUid, event.getEventUid())
.one();
event.setAgentUid(agentUid);
event.setAccountUid(uid);
boolean save;
if (ObjUtil.isNull(one)) {
save = accountEventService.save(event);
} else {
event.setId(one.getId());
save = accountEventService.updateById(event);
}
if (save) {
if (1 == event.getControlSwitch()) {
var mallList = Db.lambdaQuery(Mall.class)
.eq(Mall::getAccountUid, uid)
.ne(Mall::getStatus, 2)
.list();
var mall2TimeZoneMap = mallList.stream().collect(Collectors.toMap(Mall::getUid,
v -> StrUtil.defaultIfBlank(v.getTimeZone(), "")));
var mallUidList = new ArrayList<>(mallList.stream().map(Mall::getUid).toList());
var eventList = agentEventService.lambdaQuery()
.eq(RAgentEvent::getAccountUid, uid)
.eq(RAgentEvent::getEventUid, event.getEventUid())
.list();
var existMallUidList = eventList.stream().map(RAgentEvent::getMallUid).toList();
if (CollUtil.isNotEmpty(mallUidList)) {
// 查询未配置指标的 mallUid
// 把 existMallUidList 从 mallUidList 中移除
mallUidList.removeAll(existMallUidList);
if (CollUtil.isNotEmpty(mallUidList)) {
var saveList = mallUidList.stream().map(mUid -> {
var rAgentEvent = BeanUtil.copyProperties(event, RAgentEvent.class);
rAgentEvent.setId(null);
rAgentEvent.setMallUid(mUid);
var timeZone = mall2TimeZoneMap.get(mUid);
rAgentEvent.setTimeZone(timeZone);
String offsetCron = rAgentEvent.getCron();
if (StrUtil.isNotBlank(timeZone)) {
int offsetMinute = TimeZoneUtil.getOffsetMinute(timeZone);
offsetCron = TimeZoneUtil.convertCronExpression(offsetCron, offsetMinute);
}
rAgentEvent.setOffsetCron(offsetCron);
return rAgentEvent;
}).toList();
var res = agentEventService.saveBatch(saveList);
if (!res) {
throw new RuntimeException();
}
}
}
if (CollUtil.isNotEmpty(existMallUidList)) {
var updateList = eventList.stream().peek(v -> {
BeanUtil.copyProperties(event, v, "id");
var timeZone = mall2TimeZoneMap.get(v.getMallUid());
v.setTimeZone(timeZone);
String offsetCron = v.getCron();
if (StrUtil.isNotBlank(timeZone)) {
int offsetMinute = TimeZoneUtil.getOffsetMinute(timeZone);
offsetCron = TimeZoneUtil.convertCronExpression(offsetCron, offsetMinute);
}
v.setOffsetCron(offsetCron);
}).toList();
var res = agentEventService.updateBatchById(updateList);
if (!res) {
throw new RuntimeException();
}
}
} else if (0 == event.getControlSwitch()) {
// 集团默认指标配置关闭,对应集团下的 mall 配置的指标也要关闭
var res = agentEventService.lambdaUpdate()
.set(RAgentEvent::getControlSwitch, 0)
.eq(RAgentEvent::getAccountUid, uid)
.update(new RAgentEvent());
if (!res) {
throw new RuntimeException();
}
}
}
return save ? "成功" : "失败";
}
@Override
public List<RUserAccount> subList(Long userId) {
return userAccountService.lambdaQuery().eq(RUserAccount::getUserId, userId).list();
}
@Override
public String sub(RUserAccount userAccount) {
return userAccountService.save(userAccount) ? "订阅成功" : "订阅失败";
}
@Override
public String unsub(RUserAccount userAccount) {
return userAccountService.lambdaUpdate()
.eq(RUserAccount::getAccountId, userAccount.getAccountId())
.eq(RUserAccount::getUserId, userAccount.getUserId()).remove() ? "取消订阅成功" : "取消订阅失败";
}
}