Commit 371b783f18e3126b3c8a999534e0698c4b8b5662

Authored by 黄 x
1 parent 694c5493

feat: add query alarm contact api by organizationId

@@ -32,7 +32,9 @@ import static org.thingsboard.server.common.data.yunteng.constant.FastIotConstan @@ -32,7 +32,9 @@ import static org.thingsboard.server.common.data.yunteng.constant.FastIotConstan
32 import static org.thingsboard.server.common.data.yunteng.constant.QueryConstant.PAGE; 32 import static org.thingsboard.server.common.data.yunteng.constant.QueryConstant.PAGE;
33 import static org.thingsboard.server.common.data.yunteng.constant.QueryConstant.PAGE_SIZE; 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 @RestController 38 @RestController
37 @RequestMapping("/api/yt/alarmContact") 39 @RequestMapping("/api/yt/alarmContact")
38 @RequiredArgsConstructor 40 @RequiredArgsConstructor
@@ -43,7 +45,8 @@ public class YtAlarmContactController extends BaseController { @@ -43,7 +45,8 @@ public class YtAlarmContactController extends BaseController {
43 45
44 @ApiOperation(value = "新增联系人|编辑") 46 @ApiOperation(value = "新增联系人|编辑")
45 @PostMapping 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 public ResponseEntity<AlarmContactDTO> saveAlarmContact( 50 public ResponseEntity<AlarmContactDTO> saveAlarmContact(
48 @Validated(AddGroup.class) @RequestBody AlarmContactDTO alarmContactDTO) 51 @Validated(AddGroup.class) @RequestBody AlarmContactDTO alarmContactDTO)
49 throws ThingsboardException { 52 throws ThingsboardException {
@@ -71,6 +74,15 @@ public class YtAlarmContactController extends BaseController { @@ -71,6 +74,15 @@ public class YtAlarmContactController extends BaseController {
71 return ResponseEntity.ok(all); 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 @ApiOperation(value = "分页查询") 87 @ApiOperation(value = "分页查询")
76 @PreAuthorize("@check.checkPermissions({'TENANT_ADMIN','CUSTOMER_USER'},{})") 88 @PreAuthorize("@check.checkPermissions({'TENANT_ADMIN','CUSTOMER_USER'},{})")
@@ -99,7 +111,8 @@ public class YtAlarmContactController extends BaseController { @@ -99,7 +111,8 @@ public class YtAlarmContactController extends BaseController {
99 111
100 @ApiOperation(value = "删除") 112 @ApiOperation(value = "删除")
101 @DeleteMapping 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 public void deleteById(@RequestBody String[] ids) throws ThingsboardException { 116 public void deleteById(@RequestBody String[] ids) throws ThingsboardException {
104 if (ids.length == 0) { 117 if (ids.length == 0) {
105 throw new YtDataValidationException("please provide alarm ids to delete"); 118 throw new YtDataValidationException("please provide alarm ids to delete");
@@ -110,9 +123,11 @@ public class YtAlarmContactController extends BaseController { @@ -110,9 +123,11 @@ public class YtAlarmContactController extends BaseController {
110 alarmProfileService.findAlarmProfilesByContactId( 123 alarmProfileService.findAlarmProfilesByContactId(
111 id, getCurrentUser().getCurrentTenantId()); 124 id, getCurrentUser().getCurrentTenantId());
112 if (null != list && list.size() > FastIotConstants.MagicNumber.ZERO) { 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 alarmService.delete(ids); 133 alarmService.delete(ids);
@@ -120,7 +135,8 @@ public class YtAlarmContactController extends BaseController { @@ -120,7 +135,8 @@ public class YtAlarmContactController extends BaseController {
120 135
121 @ApiOperation(value = "修改告警联系人信息") 136 @ApiOperation(value = "修改告警联系人信息")
122 @PostMapping("/update") 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 public void update(@RequestBody AlarmContactDTO alarmContactDTO) { 140 public void update(@RequestBody AlarmContactDTO alarmContactDTO) {
125 141
126 alarmService.update(alarmContactDTO); 142 alarmService.update(alarmContactDTO);
@@ -11,6 +11,7 @@ import org.thingsboard.server.common.data.yunteng.constant.FastIotConstants; @@ -11,6 +11,7 @@ import org.thingsboard.server.common.data.yunteng.constant.FastIotConstants;
11 import org.thingsboard.server.common.data.yunteng.core.exception.YtDataValidationException; 11 import org.thingsboard.server.common.data.yunteng.core.exception.YtDataValidationException;
12 import org.thingsboard.server.common.data.yunteng.core.message.ErrorMessage; 12 import org.thingsboard.server.common.data.yunteng.core.message.ErrorMessage;
13 import org.thingsboard.server.common.data.yunteng.dto.AlarmContactDTO; 13 import org.thingsboard.server.common.data.yunteng.dto.AlarmContactDTO;
  14 +import org.thingsboard.server.common.data.yunteng.dto.BaseDTO;
14 import org.thingsboard.server.common.data.yunteng.dto.OrganizationDTO; 15 import org.thingsboard.server.common.data.yunteng.dto.OrganizationDTO;
15 import org.thingsboard.server.common.data.yunteng.utils.ReflectUtils; 16 import org.thingsboard.server.common.data.yunteng.utils.ReflectUtils;
16 import org.thingsboard.server.common.data.yunteng.utils.tools.YtPageData; 17 import org.thingsboard.server.common.data.yunteng.utils.tools.YtPageData;
@@ -30,156 +31,189 @@ import java.util.stream.Collectors; @@ -30,156 +31,189 @@ import java.util.stream.Collectors;
30 @Service 31 @Service
31 @RequiredArgsConstructor 32 @RequiredArgsConstructor
32 public class YtAlarmContactServiceImpl extends AbstractBaseService<AlarmContactMapper, AlarmContact> 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,6 +18,14 @@ public interface YtAlarmContactService extends BaseService<AlarmContact> {
18 List<AlarmContactDTO> findAll(String tenantId, Map<String, Object> params); 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 * @param alarmContactDTO 对象 31 * @param alarmContactDTO 对象