Commit 371b783f18e3126b3c8a999534e0698c4b8b5662
1 parent
694c5493
feat: add query alarm contact api by organizationId
Showing
3 changed files
with
203 additions
and
145 deletions
... | ... | @@ -32,7 +32,9 @@ import static org.thingsboard.server.common.data.yunteng.constant.FastIotConstan |
32 | 32 | import static org.thingsboard.server.common.data.yunteng.constant.QueryConstant.PAGE; |
33 | 33 | import static org.thingsboard.server.common.data.yunteng.constant.QueryConstant.PAGE_SIZE; |
34 | 34 | |
35 | -/** @Description 告警联系人 @Author cxy @Date 2021/11/2 14:54 */ | |
35 | +/** | |
36 | + * @Description 告警联系人 @Author cxy @Date 2021/11/2 14:54 | |
37 | + */ | |
36 | 38 | @RestController |
37 | 39 | @RequestMapping("/api/yt/alarmContact") |
38 | 40 | @RequiredArgsConstructor |
... | ... | @@ -43,7 +45,8 @@ public class YtAlarmContactController extends BaseController { |
43 | 45 | |
44 | 46 | @ApiOperation(value = "新增联系人|编辑") |
45 | 47 | @PostMapping |
46 | - @PreAuthorize("@check.checkPermissions({'TENANT_ADMIN','CUSTOMER_USER'},{'api:yt:alarmContact:post','api:yt:alarmContact:update'})") | |
48 | + @PreAuthorize( | |
49 | + "@check.checkPermissions({'TENANT_ADMIN','CUSTOMER_USER'},{'api:yt:alarmContact:post','api:yt:alarmContact:update'})") | |
47 | 50 | public ResponseEntity<AlarmContactDTO> saveAlarmContact( |
48 | 51 | @Validated(AddGroup.class) @RequestBody AlarmContactDTO alarmContactDTO) |
49 | 52 | throws ThingsboardException { |
... | ... | @@ -71,6 +74,15 @@ public class YtAlarmContactController extends BaseController { |
71 | 74 | return ResponseEntity.ok(all); |
72 | 75 | } |
73 | 76 | |
77 | + @ApiOperation(value = "获取组织下的告警联系人") | |
78 | + @GetMapping("/{organizationId}") | |
79 | + public ResponseEntity<List<AlarmContactDTO>> findallByOrganizationId( | |
80 | + @PathVariable("organizationId") String organizationId) throws ThingsboardException { | |
81 | + | |
82 | + List<AlarmContactDTO> all = | |
83 | + alarmService.findAllByOrganizationId(getCurrentUser().getCurrentTenantId(), organizationId); | |
84 | + return ResponseEntity.ok(all); | |
85 | + } | |
74 | 86 | |
75 | 87 | @ApiOperation(value = "分页查询") |
76 | 88 | @PreAuthorize("@check.checkPermissions({'TENANT_ADMIN','CUSTOMER_USER'},{})") |
... | ... | @@ -99,7 +111,8 @@ public class YtAlarmContactController extends BaseController { |
99 | 111 | |
100 | 112 | @ApiOperation(value = "删除") |
101 | 113 | @DeleteMapping |
102 | - @PreAuthorize("@check.checkPermissions({'TENANT_ADMIN','CUSTOMER_USER'},{'api:yt:alarmContact:delete'})") | |
114 | + @PreAuthorize( | |
115 | + "@check.checkPermissions({'TENANT_ADMIN','CUSTOMER_USER'},{'api:yt:alarmContact:delete'})") | |
103 | 116 | public void deleteById(@RequestBody String[] ids) throws ThingsboardException { |
104 | 117 | if (ids.length == 0) { |
105 | 118 | throw new YtDataValidationException("please provide alarm ids to delete"); |
... | ... | @@ -110,9 +123,11 @@ public class YtAlarmContactController extends BaseController { |
110 | 123 | alarmProfileService.findAlarmProfilesByContactId( |
111 | 124 | id, getCurrentUser().getCurrentTenantId()); |
112 | 125 | if (null != list && list.size() > FastIotConstants.MagicNumber.ZERO) { |
113 | - StringBuilder configName =new StringBuilder(); | |
114 | - list.forEach( i -> configName.append(","+i.getName())); | |
115 | - throw new YtDataValidationException(String.format(ErrorMessage.CONTACT_ALREADY_ASSOCIATED.getMessage(),configName.substring(1))); | |
126 | + StringBuilder configName = new StringBuilder(); | |
127 | + list.forEach(i -> configName.append("," + i.getName())); | |
128 | + throw new YtDataValidationException( | |
129 | + String.format( | |
130 | + ErrorMessage.CONTACT_ALREADY_ASSOCIATED.getMessage(), configName.substring(1))); | |
116 | 131 | } |
117 | 132 | } |
118 | 133 | alarmService.delete(ids); |
... | ... | @@ -120,7 +135,8 @@ public class YtAlarmContactController extends BaseController { |
120 | 135 | |
121 | 136 | @ApiOperation(value = "修改告警联系人信息") |
122 | 137 | @PostMapping("/update") |
123 | - @PreAuthorize("@check.checkPermissions({'TENANT_ADMIN','CUSTOMER_USER'},{'api:yt:alarmContact:update:update'})") | |
138 | + @PreAuthorize( | |
139 | + "@check.checkPermissions({'TENANT_ADMIN','CUSTOMER_USER'},{'api:yt:alarmContact:update:update'})") | |
124 | 140 | public void update(@RequestBody AlarmContactDTO alarmContactDTO) { |
125 | 141 | |
126 | 142 | alarmService.update(alarmContactDTO); | ... | ... |
... | ... | @@ -11,6 +11,7 @@ import org.thingsboard.server.common.data.yunteng.constant.FastIotConstants; |
11 | 11 | import org.thingsboard.server.common.data.yunteng.core.exception.YtDataValidationException; |
12 | 12 | import org.thingsboard.server.common.data.yunteng.core.message.ErrorMessage; |
13 | 13 | import org.thingsboard.server.common.data.yunteng.dto.AlarmContactDTO; |
14 | +import org.thingsboard.server.common.data.yunteng.dto.BaseDTO; | |
14 | 15 | import org.thingsboard.server.common.data.yunteng.dto.OrganizationDTO; |
15 | 16 | import org.thingsboard.server.common.data.yunteng.utils.ReflectUtils; |
16 | 17 | import org.thingsboard.server.common.data.yunteng.utils.tools.YtPageData; |
... | ... | @@ -30,156 +31,189 @@ import java.util.stream.Collectors; |
30 | 31 | @Service |
31 | 32 | @RequiredArgsConstructor |
32 | 33 | public class YtAlarmContactServiceImpl extends AbstractBaseService<AlarmContactMapper, AlarmContact> |
33 | - implements YtAlarmContactService { | |
34 | - /** | |
35 | - * mapper注入 自带方法加入,继承的baseMapper | |
36 | - */ | |
37 | - private final AlarmContactMapper alarmContactMapper; | |
34 | + implements YtAlarmContactService { | |
35 | + /** mapper注入 自带方法加入,继承的baseMapper */ | |
36 | + private final AlarmContactMapper alarmContactMapper; | |
38 | 37 | |
39 | - private final OrganizationMapper ytOrganizationMapper; | |
38 | + private final OrganizationMapper ytOrganizationMapper; | |
40 | 39 | |
41 | - private final UserOrganizationMappingService userOrganizationMappingService; | |
40 | + private final UserOrganizationMappingService userOrganizationMappingService; | |
42 | 41 | |
43 | - /** | |
44 | - * 查询全部的告警联系人 | |
45 | - * | |
46 | - * @param params 传参 | |
47 | - * @return List | |
48 | - */ | |
49 | - @Override | |
50 | - public List<AlarmContactDTO> findAll(String tenantId, Map<String, Object> params) { | |
51 | - // 查询当前租户 | |
52 | - List<AlarmContact> list = | |
53 | - alarmContactMapper.selectList( | |
54 | - new QueryWrapper<AlarmContact>() | |
55 | - .lambda() | |
56 | - .eq(AlarmContact::getTenantId, tenantId) | |
57 | - .like( | |
58 | - params.containsKey("username"), | |
59 | - AlarmContact::getUsername, | |
60 | - String.valueOf(params.get("username"))) | |
61 | - .or() | |
62 | - .like( | |
63 | - params.containsKey("department"), | |
64 | - AlarmContact::getOrganizationId, | |
65 | - String.valueOf(params.get("organizationId")))); | |
66 | - System.out.println(list); | |
67 | - return ReflectUtils.sourceToTarget(list, AlarmContactDTO.class); | |
68 | - } | |
42 | + /** | |
43 | + * 查询全部的告警联系人 | |
44 | + * | |
45 | + * @param params 传参 | |
46 | + * @return List | |
47 | + */ | |
48 | + @Override | |
49 | + public List<AlarmContactDTO> findAll(String tenantId, Map<String, Object> params) { | |
50 | + // 查询当前租户 | |
51 | + List<AlarmContact> list = | |
52 | + alarmContactMapper.selectList( | |
53 | + new QueryWrapper<AlarmContact>() | |
54 | + .lambda() | |
55 | + .eq(AlarmContact::getTenantId, tenantId) | |
56 | + .like( | |
57 | + params.containsKey("username"), | |
58 | + AlarmContact::getUsername, | |
59 | + String.valueOf(params.get("username"))) | |
60 | + .or() | |
61 | + .like( | |
62 | + params.containsKey("department"), | |
63 | + AlarmContact::getOrganizationId, | |
64 | + String.valueOf(params.get("organizationId")))); | |
65 | + return ReflectUtils.sourceToTarget(list, AlarmContactDTO.class); | |
66 | + } | |
69 | 67 | |
70 | - /** | |
71 | - * 新增租户 | |
72 | - * | |
73 | - * @param tenantId 租户编码 | |
74 | - * @return alarmContactDTO | |
75 | - */ | |
76 | - private LambdaQueryWrapper<AlarmContact> tenantWapper(String tenantId) { | |
77 | - return new QueryWrapper<AlarmContact>().lambda().eq(AlarmContact::getTenantId, tenantId); | |
68 | + @Override | |
69 | + public List<AlarmContactDTO> findAllByOrganizationId(String tenantId, String organizationId) { | |
70 | + Set<String> ids = new HashSet<>(); | |
71 | + ids.add(organizationId); | |
72 | + // 查询该组织的所有子类 | |
73 | + List<OrganizationDTO> organizationDTOS = | |
74 | + ytOrganizationMapper.findOrganizationTreeList(tenantId, ids); | |
75 | + if (null == organizationDTOS || organizationDTOS.size() == 0) { | |
76 | + throw new YtDataValidationException(ErrorMessage.INVALID_PARAMETER.getMessage()); | |
78 | 77 | } |
79 | - | |
80 | - @Override | |
81 | - @Transactional | |
82 | - public AlarmContactDTO saveAlarmContact(String tenantId, AlarmContactDTO alarmContactDTO) { | |
83 | - LambdaQueryWrapper<AlarmContact> Wrapper = | |
84 | - tenantWapper(tenantId).eq(AlarmContact::getUsername, alarmContactDTO.getUsername()); | |
85 | - int Count = baseMapper.selectCount(Wrapper); | |
86 | - if (Count > 0) { | |
87 | - throw new YtDataValidationException(String.format(ErrorMessage.NAME_EXISTED.getMessage(),alarmContactDTO.getUsername())); | |
88 | - } | |
89 | - if (checkPhoneEmail(tenantId,alarmContactDTO.getPhone(), alarmContactDTO.getEmail()).size() > 0) { | |
90 | - throw new YtDataValidationException(ErrorMessage.PHONE_OR_EMAIL_HAS_REGISTER.getMessage()); | |
91 | - } | |
92 | - alarmContactDTO.setTenantId(tenantId); | |
93 | - AlarmContact alarmContact = alarmContactDTO.getEntity(AlarmContact.class); | |
94 | - int insertCount = baseMapper.insert(alarmContact); | |
95 | - if (insertCount > 0) { | |
96 | - alarmContact.copyToDTO(alarmContactDTO); | |
97 | - return alarmContactDTO; | |
98 | - } | |
99 | - return null; | |
78 | + List<String> organizationIds = | |
79 | + organizationDTOS.stream().map(BaseDTO::getId).collect(Collectors.toList()); | |
80 | + List<AlarmContact> list = | |
81 | + alarmContactMapper.selectList( | |
82 | + new QueryWrapper<AlarmContact>() | |
83 | + .lambda() | |
84 | + .eq(AlarmContact::getTenantId, tenantId) | |
85 | + .in(AlarmContact::getOrganizationId, organizationIds)); | |
86 | + if (null != list && list.size() > 0) { | |
87 | + return list.stream() | |
88 | + .map(obj -> obj.getDTO(AlarmContactDTO.class)) | |
89 | + .collect(Collectors.toList()); | |
100 | 90 | } |
91 | + return null; | |
92 | + } | |
101 | 93 | |
102 | - /** | |
103 | - * 删除告警联系人,byId | |
104 | - * | |
105 | - * @param alarmIds 通过列表id | |
106 | - * @return Integer | |
107 | - */ | |
108 | - @Override | |
109 | - @Transactional | |
110 | - public boolean delete(String[] alarmIds) { | |
111 | - Set<String> ids = Set.of(alarmIds); | |
112 | - baseMapper.deleteBatchIds(ids); | |
113 | - return true; | |
114 | - } | |
94 | + /** | |
95 | + * 新增租户 | |
96 | + * | |
97 | + * @param tenantId 租户编码 | |
98 | + * @return alarmContactDTO | |
99 | + */ | |
100 | + private LambdaQueryWrapper<AlarmContact> tenantWapper(String tenantId) { | |
101 | + return new QueryWrapper<AlarmContact>().lambda().eq(AlarmContact::getTenantId, tenantId); | |
102 | + } | |
115 | 103 | |
116 | - /** | |
117 | - * 修改告警联系人数据 | |
118 | - * | |
119 | - * @param alarmContactDTO 对象 | |
120 | - * @return Integer | |
121 | - */ | |
122 | - @Override | |
123 | - @Transactional | |
124 | - public boolean update(AlarmContactDTO alarmContactDTO) { | |
125 | - | |
126 | - // 得到对象 | |
127 | - AlarmContact alarmContact = baseMapper.selectById(alarmContactDTO.getId()); | |
128 | - if (alarmContact == null) { | |
129 | - throw new YtDataValidationException("此数据不存在"); | |
130 | - } | |
131 | - if (checkPhoneEmail(alarmContact.getTenantId(),alarmContactDTO.getPhone(), alarmContactDTO.getEmail()).size() > 1) { | |
132 | - throw new YtDataValidationException(ErrorMessage.PHONE_OR_EMAIL_HAS_REGISTER.getMessage()); | |
133 | - } | |
134 | - AlarmContact entity = alarmContactDTO.getEntity(AlarmContact.class); | |
135 | - System.out.println(alarmContact); | |
136 | - baseMapper.updateById(entity); | |
137 | - alarmContact.copyToDTO(alarmContactDTO); | |
138 | - return true; | |
104 | + @Override | |
105 | + @Transactional | |
106 | + public AlarmContactDTO saveAlarmContact(String tenantId, AlarmContactDTO alarmContactDTO) { | |
107 | + LambdaQueryWrapper<AlarmContact> Wrapper = | |
108 | + tenantWapper(tenantId).eq(AlarmContact::getUsername, alarmContactDTO.getUsername()); | |
109 | + int Count = baseMapper.selectCount(Wrapper); | |
110 | + if (Count > 0) { | |
111 | + throw new YtDataValidationException( | |
112 | + String.format(ErrorMessage.NAME_EXISTED.getMessage(), alarmContactDTO.getUsername())); | |
113 | + } | |
114 | + if (checkPhoneEmail(tenantId, alarmContactDTO.getPhone(), alarmContactDTO.getEmail()).size() | |
115 | + > 0) { | |
116 | + throw new YtDataValidationException(ErrorMessage.PHONE_OR_EMAIL_HAS_REGISTER.getMessage()); | |
139 | 117 | } |
118 | + alarmContactDTO.setTenantId(tenantId); | |
119 | + AlarmContact alarmContact = alarmContactDTO.getEntity(AlarmContact.class); | |
120 | + int insertCount = baseMapper.insert(alarmContact); | |
121 | + if (insertCount > 0) { | |
122 | + alarmContact.copyToDTO(alarmContactDTO); | |
123 | + return alarmContactDTO; | |
124 | + } | |
125 | + return null; | |
126 | + } | |
127 | + | |
128 | + /** | |
129 | + * 删除告警联系人,byId | |
130 | + * | |
131 | + * @param alarmIds 通过列表id | |
132 | + * @return Integer | |
133 | + */ | |
134 | + @Override | |
135 | + @Transactional | |
136 | + public boolean delete(String[] alarmIds) { | |
137 | + Set<String> ids = Set.of(alarmIds); | |
138 | + baseMapper.deleteBatchIds(ids); | |
139 | + return true; | |
140 | + } | |
140 | 141 | |
142 | + /** | |
143 | + * 修改告警联系人数据 | |
144 | + * | |
145 | + * @param alarmContactDTO 对象 | |
146 | + * @return Integer | |
147 | + */ | |
148 | + @Override | |
149 | + @Transactional | |
150 | + public boolean update(AlarmContactDTO alarmContactDTO) { | |
141 | 151 | |
142 | - private List<String> checkPhoneEmail(String tenantId,String phone, String email) { | |
143 | - return baseMapper.selectList(new QueryWrapper<AlarmContact>() | |
144 | - .lambda() | |
145 | - .eq(AlarmContact::getTenantId,tenantId) | |
146 | - .and(second -> second.eq(email!=null,AlarmContact::getEmail, email) | |
147 | - .or(f -> f.eq(phone !=null,AlarmContact::getPhone, phone))) | |
148 | - ) | |
149 | - .stream().map(i -> i.getId()).collect(Collectors.toList()); | |
152 | + // 得到对象 | |
153 | + AlarmContact alarmContact = baseMapper.selectById(alarmContactDTO.getId()); | |
154 | + if (alarmContact == null) { | |
155 | + throw new YtDataValidationException("此数据不存在"); | |
150 | 156 | } |
157 | + if (checkPhoneEmail( | |
158 | + alarmContact.getTenantId(), alarmContactDTO.getPhone(), alarmContactDTO.getEmail()) | |
159 | + .size() | |
160 | + > 1) { | |
161 | + throw new YtDataValidationException(ErrorMessage.PHONE_OR_EMAIL_HAS_REGISTER.getMessage()); | |
162 | + } | |
163 | + AlarmContact entity = alarmContactDTO.getEntity(AlarmContact.class); | |
164 | + System.out.println(alarmContact); | |
165 | + baseMapper.updateById(entity); | |
166 | + alarmContact.copyToDTO(alarmContactDTO); | |
167 | + return true; | |
168 | + } | |
169 | + | |
170 | + private List<String> checkPhoneEmail(String tenantId, String phone, String email) { | |
171 | + return baseMapper | |
172 | + .selectList( | |
173 | + new QueryWrapper<AlarmContact>() | |
174 | + .lambda() | |
175 | + .eq(AlarmContact::getTenantId, tenantId) | |
176 | + .and( | |
177 | + second -> | |
178 | + second | |
179 | + .eq(email != null, AlarmContact::getEmail, email) | |
180 | + .or(f -> f.eq(phone != null, AlarmContact::getPhone, phone)))) | |
181 | + .stream() | |
182 | + .map(i -> i.getId()) | |
183 | + .collect(Collectors.toList()); | |
184 | + } | |
151 | 185 | |
152 | - /** | |
153 | - * @param queryMap 查询集合 | |
154 | - * @return PageData | |
155 | - */ | |
156 | - @Override | |
157 | - public YtPageData<AlarmContactDTO> page( | |
158 | - String tenantId, | |
159 | - boolean isPtTenantAdmin, | |
160 | - String currentUserId, | |
161 | - Map<String, Object> queryMap) { | |
162 | - // 查询分页,加入条模糊条件查询 | |
163 | - String organizationId = (String) queryMap.get("organizationId"); | |
164 | - queryMap.put("tenantId", tenantId); | |
165 | - if (StringUtils.isNotEmpty(organizationId)) { | |
166 | - Set<String> ids = new HashSet<>(); | |
167 | - ids.add(organizationId); | |
168 | - // 查询该组织的所有子类 | |
169 | - List<OrganizationDTO> organizationDTOS = | |
170 | - ytOrganizationMapper.findOrganizationTreeList(tenantId, ids); | |
171 | - List<String> queryOrganizationIds = new ArrayList<>(); | |
172 | - organizationDTOS.forEach(item -> queryOrganizationIds.add(item.getId())); | |
173 | - queryMap.put("organizationIds", queryOrganizationIds); | |
174 | - } else { | |
175 | - if (!isPtTenantAdmin) { | |
176 | - List<String> queryOrganizationIds = | |
177 | - userOrganizationMappingService.getOrganizationIdsByUserId(currentUserId); | |
178 | - queryMap.put("organizationIds", queryOrganizationIds); | |
179 | - } | |
180 | - } | |
181 | - IPage<AlarmContact> page = getPage(queryMap, FastIotConstants.DefaultOrder.CREATE_TIME, false); | |
182 | - IPage<AlarmContactDTO> pageDto = baseMapper.getAlarmPage(page, queryMap); | |
183 | - return getPageData(pageDto, AlarmContactDTO.class); | |
186 | + /** | |
187 | + * @param queryMap 查询集合 | |
188 | + * @return PageData | |
189 | + */ | |
190 | + @Override | |
191 | + public YtPageData<AlarmContactDTO> page( | |
192 | + String tenantId, | |
193 | + boolean isPtTenantAdmin, | |
194 | + String currentUserId, | |
195 | + Map<String, Object> queryMap) { | |
196 | + // 查询分页,加入条模糊条件查询 | |
197 | + String organizationId = (String) queryMap.get("organizationId"); | |
198 | + queryMap.put("tenantId", tenantId); | |
199 | + if (StringUtils.isNotEmpty(organizationId)) { | |
200 | + Set<String> ids = new HashSet<>(); | |
201 | + ids.add(organizationId); | |
202 | + // 查询该组织的所有子类 | |
203 | + List<OrganizationDTO> organizationDTOS = | |
204 | + ytOrganizationMapper.findOrganizationTreeList(tenantId, ids); | |
205 | + List<String> queryOrganizationIds = new ArrayList<>(); | |
206 | + organizationDTOS.forEach(item -> queryOrganizationIds.add(item.getId())); | |
207 | + queryMap.put("organizationIds", queryOrganizationIds); | |
208 | + } else { | |
209 | + if (!isPtTenantAdmin) { | |
210 | + List<String> queryOrganizationIds = | |
211 | + userOrganizationMappingService.getOrganizationIdsByUserId(currentUserId); | |
212 | + queryMap.put("organizationIds", queryOrganizationIds); | |
213 | + } | |
184 | 214 | } |
215 | + IPage<AlarmContact> page = getPage(queryMap, FastIotConstants.DefaultOrder.CREATE_TIME, false); | |
216 | + IPage<AlarmContactDTO> pageDto = baseMapper.getAlarmPage(page, queryMap); | |
217 | + return getPageData(pageDto, AlarmContactDTO.class); | |
218 | + } | |
185 | 219 | } | ... | ... |
... | ... | @@ -18,6 +18,14 @@ public interface YtAlarmContactService extends BaseService<AlarmContact> { |
18 | 18 | List<AlarmContactDTO> findAll(String tenantId, Map<String, Object> params); |
19 | 19 | |
20 | 20 | /** |
21 | + * 查询该组织下的所有告警联系人 | |
22 | + * @param tenantId 租户ID | |
23 | + * @param organizationId 组织ID | |
24 | + * @return 告警人列表 | |
25 | + */ | |
26 | + List<AlarmContactDTO> findAllByOrganizationId(String tenantId, String organizationId); | |
27 | + | |
28 | + /** | |
21 | 29 | * 添加告警联系人 |
22 | 30 | * |
23 | 31 | * @param alarmContactDTO 对象 | ... | ... |