Commit 70df6393ed9a85922030e8875c1ca97f8b1e8546

Authored by xp.Huang
2 parents f5209ec0 5bd298dc

Merge branch 'ljl' into 'master'

refactor: 迁移代码

See merge request huang/thingsboard3.3.2!1
Showing 59 changed files with 2887 additions and 59 deletions
  1 +package org.thingsboard.server.controller.yunteng;
  2 +
  3 +import io.swagger.annotations.Api;
  4 +import io.swagger.annotations.ApiOperation;
  5 +import lombok.RequiredArgsConstructor;
  6 +import org.springframework.http.HttpStatus;
  7 +import org.springframework.http.ResponseEntity;
  8 +import org.springframework.validation.annotation.Validated;
  9 +import org.springframework.web.bind.annotation.*;
  10 +import org.springframework.web.servlet.support.ServletUriComponentsBuilder;
  11 +import org.thingsboard.server.common.data.exception.ThingsboardException;
  12 +import org.thingsboard.server.common.data.yunteng.common.AddGroup;
  13 +import org.thingsboard.server.common.data.yunteng.core.exception.DataValidationException;
  14 +import org.thingsboard.server.common.data.yunteng.dto.AlarmContactDTO;
  15 +import org.thingsboard.server.common.data.yunteng.utils.tools.PageData;
  16 +import org.thingsboard.server.controller.BaseController;
  17 +import org.thingsboard.server.dao.yunteng.service.YtAlarmContactService;
  18 +
  19 +import java.net.URI;
  20 +import java.util.HashMap;
  21 +import java.util.List;
  22 +import java.util.Map;
  23 +import java.util.Optional;
  24 +
  25 +import static org.thingsboard.server.common.data.yunteng.constant.FastIotConstants.DefaultOrder.CREATE_TIME;
  26 +import static org.thingsboard.server.common.data.yunteng.constant.QueryConstant.PAGE;
  27 +import static org.thingsboard.server.common.data.yunteng.constant.QueryConstant.PAGE_SIZE;
  28 +
  29 +/** @Description 告警联系人 @Author cxy @Date 2021/11/2 14:54 */
  30 +@RestController
  31 +@RequestMapping("/api/yt/alarmContact")
  32 +@RequiredArgsConstructor
  33 +@Api(value = "告警联系人")
  34 +public class YtAlarmContactController extends BaseController {
  35 + private final YtAlarmContactService alarmService;
  36 +
  37 + @ApiOperation(value = "新增告警联系人")
  38 + @PostMapping
  39 + public ResponseEntity<AlarmContactDTO> saveAlarmContact(
  40 + @Validated(AddGroup.class) @RequestBody AlarmContactDTO alarmContactDTO) throws ThingsboardException {
  41 + AlarmContactDTO newAlarmContactDTO = alarmService.saveAlarmContact(getCurrentUser().getCurrentTenantId(), alarmContactDTO);
  42 + return Optional.ofNullable(newAlarmContactDTO)
  43 + .map(
  44 + dto -> {
  45 + URI location =
  46 + ServletUriComponentsBuilder.fromCurrentRequest()
  47 + .path("/{id}")
  48 + .buildAndExpand(newAlarmContactDTO.getId())
  49 + .toUri();
  50 + return ResponseEntity.created(location).body(newAlarmContactDTO);
  51 + })
  52 + .orElse(ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build());
  53 + }
  54 +
  55 + @ApiOperation(value = "查询全部告警联系人名单")
  56 + @PostMapping("/all")
  57 + public ResponseEntity<List<AlarmContactDTO>> findall(@RequestBody Map<String,Object> params) throws ThingsboardException {
  58 +
  59 + List<AlarmContactDTO> all = alarmService.findAll(getCurrentUser().getCurrentTenantId(), params);
  60 + return ResponseEntity.ok(all);
  61 + }
  62 +
  63 + @ApiOperation(value = "分页查询")
  64 + @GetMapping(params = {PAGE_SIZE, PAGE})
  65 + public PageData<AlarmContactDTO> pageAlarm(
  66 + @RequestParam(PAGE_SIZE) int pageSize,
  67 + @RequestParam(PAGE) int page,
  68 + @RequestParam(value = "username", required = false) String username,
  69 + @RequestParam(value = "organizationId", required = false) String organizationId,
  70 + @RequestParam(value = CREATE_TIME, required = false) String createtime) {
  71 + HashMap<String, Object> queryMap = new HashMap<>();
  72 + queryMap.put(PAGE_SIZE, pageSize);
  73 + queryMap.put(PAGE, page);
  74 + queryMap.put("username",username);
  75 + queryMap.put("organizationId",organizationId);
  76 + queryMap.put(CREATE_TIME, createtime);
  77 +
  78 + return alarmService.page(queryMap);
  79 + }
  80 +
  81 + @ApiOperation(value = "通过id来删除联系人")
  82 + @DeleteMapping
  83 + public void deleteById(@RequestBody String[] ids) {
  84 + if (ids.length == 0) {
  85 + throw new DataValidationException("please provide alarm ids to delete");
  86 + }
  87 + alarmService.delete(ids);
  88 + }
  89 +
  90 + @ApiOperation(value = "修改告警联系人信息")
  91 + @PostMapping("/update")
  92 + public void update( @RequestBody AlarmContactDTO alarmContactDTO) {
  93 +
  94 + alarmService.update(alarmContactDTO);
  95 + }
  96 +
  97 +}
  1 +package org.thingsboard.server.controller.yunteng;
  2 +
  3 +import io.swagger.annotations.Api;
  4 +import io.swagger.annotations.ApiOperation;
  5 +import lombok.RequiredArgsConstructor;
  6 +import org.springframework.web.bind.annotation.GetMapping;
  7 +import org.springframework.web.bind.annotation.RequestMapping;
  8 +import org.springframework.web.bind.annotation.RequestParam;
  9 +import org.springframework.web.bind.annotation.RestController;
  10 +import org.thingsboard.server.common.data.yunteng.dto.AlarmInfoDTO;
  11 +import org.thingsboard.server.common.data.yunteng.utils.tools.PageData;
  12 +import org.thingsboard.server.dao.yunteng.service.YtAlarmInfoService;
  13 +
  14 +import java.util.HashMap;
  15 +
  16 +import static org.thingsboard.server.common.data.yunteng.constant.QueryConstant.PAGE;
  17 +import static org.thingsboard.server.common.data.yunteng.constant.QueryConstant.PAGE_SIZE;
  18 +
  19 +/**
  20 + * @Description 告警中心
  21 + * @Author cxy
  22 + * @Date 2021/11/11 9:23
  23 + */
  24 +@RestController
  25 +@RequestMapping("/api/yt/alarmInfo")
  26 +@RequiredArgsConstructor
  27 +@Api(value = "告警中心")
  28 +public class YtAlarmInfoController {
  29 +
  30 + private final YtAlarmInfoService alarmInfoService;
  31 +
  32 + /*@ApiOperation(value = "增加或修改告警中心")
  33 + @PostMapping
  34 + @PreAuthorize("hasRole('ROLE_TENANT_ADMIN')")
  35 + public ResponseEntity<AlarmInfoDTO> saveAlarmInfo(@RequestBody AlarmInfoDTO alarmInfoDto){
  36 +
  37 + AlarmInfoDTO newalarmInfoDto = alarmInfoService.insertOrUpdate(alarmInfoDto);
  38 + return Optional.ofNullable(newalarmInfoDto)
  39 + .map(
  40 + dto -> {
  41 + URI location =
  42 + ServletUriComponentsBuilder.fromCurrentRequest()
  43 + .path("/{id}")
  44 + .buildAndExpand(newalarmInfoDto.getId())
  45 + .toUri();
  46 + return ResponseEntity.created(location).body(newalarmInfoDto);
  47 + })
  48 + .orElse(ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build());
  49 + }
  50 +
  51 +*/
  52 + //分页测试通过
  53 + @ApiOperation(value="分页查询告警中心数据")
  54 + @GetMapping(params = {PAGE_SIZE, PAGE})
  55 + public PageData<AlarmInfoDTO> pageAlarmInfo(
  56 + @RequestParam(PAGE_SIZE) int pageSize,
  57 + @RequestParam(PAGE) int page,
  58 + @RequestParam(value = "sortProperty", required = false) String sortProperty,
  59 + @RequestParam(value = "status", required = false) String status,
  60 + @RequestParam(value = "sortOrder", required = false) String sortOrder,
  61 + @RequestParam(value = "searchStatus", required = false) String searchStatus,
  62 + @RequestParam(value = "textSearch", required = false) String textSearch,
  63 + @RequestParam(value = "startTime", required = false) String startTime,
  64 + @RequestParam(value = "fetchOriginator", required = false) String fetchOriginator,
  65 + @RequestParam(value = "endTime", required = false) String endTime){
  66 + HashMap<String, Object> queryMap = new HashMap<>();
  67 + queryMap.put(PAGE_SIZE, pageSize);
  68 + queryMap.put(PAGE, page);
  69 + queryMap.put("sortProperty", sortProperty);
  70 + queryMap.put("sortOrder", sortOrder);
  71 + queryMap.put("searchStatus", searchStatus);
  72 + queryMap.put("status", status);
  73 + queryMap.put("textSearch", textSearch);
  74 + queryMap.put("startTime", startTime);
  75 + queryMap.put("endTime", endTime);
  76 + queryMap.put("fetchOriginator", fetchOriginator);
  77 + return alarmInfoService.page(queryMap);
  78 + }
  79 + /*@ApiOperation(value = "删除告警中心数据")
  80 + @DeleteMapping
  81 + public void deleteAlarmInfo(@Validated({DeleteGroup.class}) @RequestBody DeleteDTO deleteDTO){
  82 +
  83 + alarmInfoService.deleteAlarm(deleteDTO.getIds());
  84 + }*/
  85 +
  86 +
  87 +}
  1 +package org.thingsboard.server.controller.yunteng;
  2 +
  3 +import lombok.RequiredArgsConstructor;
  4 +import org.springframework.http.ResponseEntity;
  5 +import org.springframework.web.bind.annotation.*;
  6 +import org.thingsboard.server.common.data.exception.ThingsboardException;
  7 +import org.thingsboard.server.common.data.yunteng.dto.AlarmProfileDTO;
  8 +import org.thingsboard.server.common.data.yunteng.dto.DeleteDTO;
  9 +import org.thingsboard.server.controller.BaseController;
  10 +import org.thingsboard.server.dao.yunteng.service.YtAlarmProfileService;
  11 +
  12 +@RestController
  13 +@RequestMapping("/api/yt/alarmProfile")
  14 +@RequiredArgsConstructor
  15 +public class YtAlarmProfileController extends BaseController {
  16 + private final YtAlarmProfileService alarmProfileService;
  17 +
  18 + @PostMapping
  19 + public ResponseEntity<AlarmProfileDTO> saveAlarmProfile(
  20 + @RequestBody AlarmProfileDTO alarmProfileDTO) throws ThingsboardException {
  21 + return ResponseEntity.ok(alarmProfileService.saveOrUpdateAlarmProfile(getCurrentUser().getCurrentTenantId(), alarmProfileDTO));
  22 + }
  23 +
  24 + @DeleteMapping
  25 + public ResponseEntity<Boolean> deleteAlarmProfile(
  26 + @RequestBody DeleteDTO deleteDTO) {
  27 + return ResponseEntity.ok(alarmProfileService.deleteAlarmProfile(deleteDTO.getIds()));
  28 + }
  29 +}
  1 +package org.thingsboard.server.controller.yunteng;
  2 +
  3 +import io.swagger.annotations.ApiOperation;
  4 +import lombok.RequiredArgsConstructor;
  5 +import org.springframework.http.ResponseEntity;
  6 +import org.springframework.web.bind.annotation.GetMapping;
  7 +import org.springframework.web.bind.annotation.RequestMapping;
  8 +import org.springframework.web.bind.annotation.RestController;
  9 +import org.thingsboard.server.common.data.exception.ThingsboardException;
  10 +import org.thingsboard.server.common.data.yunteng.common.YtCommonService;
  11 +import org.thingsboard.server.controller.BaseController;
  12 +
  13 +@RequiredArgsConstructor
  14 +@RequestMapping("/api/yt/common")
  15 +@RestController
  16 +public class YtCommonController extends BaseController {
  17 + private final YtCommonService commonService;
  18 +
  19 + @GetMapping
  20 + @ApiOperation(value = "生成随机设备Token")
  21 + public ResponseEntity<String> generateDeviceToken() throws ThingsboardException {
  22 + return ResponseEntity.ok(commonService.generateDeviceToken(getCurrentUser().getCurrentTenantId()));
  23 + }
  24 +}
  1 +package org.thingsboard.server.controller.yunteng;
  2 +
  3 +import lombok.RequiredArgsConstructor;
  4 +import org.apache.commons.lang3.StringUtils;
  5 +import org.springframework.http.HttpStatus;
  6 +import org.springframework.http.ResponseEntity;
  7 +import org.springframework.validation.annotation.Validated;
  8 +import org.springframework.web.bind.annotation.*;
  9 +import org.springframework.web.servlet.support.ServletUriComponentsBuilder;
  10 +import org.thingsboard.server.common.data.exception.ThingsboardException;
  11 +import org.thingsboard.server.common.data.yunteng.common.AddGroup;
  12 +import org.thingsboard.server.common.data.yunteng.common.DeleteGroup;
  13 +import org.thingsboard.server.common.data.yunteng.core.exception.FastIotException;
  14 +import org.thingsboard.server.common.data.yunteng.dto.DeleteDTO;
  15 +import org.thingsboard.server.common.data.yunteng.dto.DeviceDTO;
  16 +import org.thingsboard.server.common.data.yunteng.enums.DeviceState;
  17 +import org.thingsboard.server.common.data.yunteng.enums.DeviceTypeEnum;
  18 +import org.thingsboard.server.common.data.yunteng.enums.OrderTypeEnum;
  19 +import org.thingsboard.server.common.data.yunteng.utils.tools.PageData;
  20 +import org.thingsboard.server.controller.BaseController;
  21 +import org.thingsboard.server.dao.yunteng.service.YtDeviceService;
  22 +
  23 +import java.net.URI;
  24 +import java.util.HashMap;
  25 +import java.util.Optional;
  26 +
  27 +import static org.thingsboard.server.common.data.yunteng.constant.QueryConstant.*;
  28 +
  29 +@RestController
  30 +@RequiredArgsConstructor
  31 +@RequestMapping("api/yt/device")
  32 +public class YtDeviceController extends BaseController {
  33 + private final YtDeviceService deviceService;
  34 +
  35 + @PostMapping
  36 + public ResponseEntity<DeviceDTO> saveDevice(@Validated(AddGroup.class)@RequestBody DeviceDTO deviceDTO)
  37 + throws FastIotException, ThingsboardException {
  38 + DeviceDTO newDeviceDTO = deviceService.insertOrUpdate(getCurrentUser().getCurrentTenantId(), deviceDTO);
  39 + return Optional.ofNullable(newDeviceDTO)
  40 + .map(
  41 + dto -> {
  42 + URI location =
  43 + ServletUriComponentsBuilder.fromCurrentRequest()
  44 + .path("/{id}")
  45 + .buildAndExpand(newDeviceDTO.getId())
  46 + .toUri();
  47 + return ResponseEntity.created(location).body(newDeviceDTO);
  48 + })
  49 + .orElse(ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build());
  50 + }
  51 +
  52 + @GetMapping("{id}")
  53 + public ResponseEntity<DeviceDTO> getDevice(@PathVariable("id") String id) throws ThingsboardException {
  54 + return ResponseEntity.of(deviceService.getDevice(getCurrentUser().getCurrentTenantId(), id));
  55 + }
  56 +
  57 + @GetMapping(params = {PAGE_SIZE, PAGE})
  58 + public PageData<DeviceDTO> pageDevice(
  59 + @RequestParam(PAGE_SIZE) int pageSize,
  60 + @RequestParam(PAGE) int page,
  61 + @RequestParam(value = "name", required = false) String name,
  62 + @RequestParam(value = "deviceState", required = false) DeviceState deviceState,
  63 + @RequestParam(value = "deviceType", required = false) DeviceTypeEnum deviceType,
  64 + @RequestParam(value = "organizationId",required = false) String organizationId,
  65 + @RequestParam(value = ORDER_FILED, required = false) String orderBy,
  66 + @RequestParam(value = ORDER_TYPE, required = false) OrderTypeEnum orderType) throws ThingsboardException {
  67 + HashMap<String, Object> queryMap = new HashMap<>();
  68 + queryMap.put(PAGE_SIZE, pageSize);
  69 + queryMap.put(PAGE, page);
  70 + queryMap.put(ORDER_FILED, orderBy);
  71 + queryMap.put("name", name);
  72 + if (deviceState != null) {
  73 + queryMap.put("deviceState", deviceState.name());
  74 + }
  75 + if (deviceType != null) {
  76 + queryMap.put("deviceType", deviceType.name());
  77 + }
  78 + if(!StringUtils.isEmpty(organizationId)){
  79 + queryMap.put("organizationId", organizationId);
  80 + }
  81 + if (orderType != null) {
  82 + queryMap.put(ORDER_TYPE, orderType.name());
  83 + }
  84 + return deviceService.page(getCurrentUser().getCurrentTenantId(), queryMap);
  85 + }
  86 +
  87 + @DeleteMapping
  88 + public void deleteDevices(@Validated({DeleteGroup.class}) @RequestBody DeleteDTO deleteDTO) throws ThingsboardException {
  89 + deviceService.deleteDevices(getCurrentUser().getCurrentTenantId(), deleteDTO.getIds());
  90 + }
  91 +}
  1 +package org.thingsboard.server.controller.yunteng;
  2 +
  3 +import lombok.RequiredArgsConstructor;
  4 +import org.springframework.http.HttpStatus;
  5 +import org.springframework.http.ResponseEntity;
  6 +import org.springframework.security.access.prepost.PreAuthorize;
  7 +import org.springframework.validation.annotation.Validated;
  8 +import org.springframework.web.bind.annotation.*;
  9 +import org.springframework.web.servlet.support.ServletUriComponentsBuilder;
  10 +import org.thingsboard.server.common.data.exception.ThingsboardException;
  11 +import org.thingsboard.server.common.data.yunteng.common.DeleteGroup;
  12 +import org.thingsboard.server.common.data.yunteng.core.exception.FastIotException;
  13 +import org.thingsboard.server.common.data.yunteng.dto.DeleteDTO;
  14 +import org.thingsboard.server.common.data.yunteng.dto.DeviceProfileDTO;
  15 +import org.thingsboard.server.common.data.yunteng.enums.OrderTypeEnum;
  16 +import org.thingsboard.server.common.data.yunteng.utils.tools.PageData;
  17 +import org.thingsboard.server.controller.BaseController;
  18 +import org.thingsboard.server.dao.yunteng.service.YtDeviceProfileService;
  19 +
  20 +import java.net.URI;
  21 +import java.util.HashMap;
  22 +import java.util.List;
  23 +import java.util.Optional;
  24 +
  25 +import static org.thingsboard.server.common.data.yunteng.constant.QueryConstant.*;
  26 +
  27 +@RestController
  28 +@RequiredArgsConstructor
  29 +@RequestMapping("api/yt/deviceProfile")
  30 +public class YtDeviceProfileController extends BaseController {
  31 + private final YtDeviceProfileService deviceProfileService;
  32 +
  33 + @PostMapping
  34 + @PreAuthorize("hasRole('ROLE_TENANT_ADMIN')")
  35 + public ResponseEntity<DeviceProfileDTO> saveDeviceProfile(
  36 + @RequestBody DeviceProfileDTO deviceProfileDTO) throws FastIotException, ThingsboardException {
  37 + DeviceProfileDTO newDeviceProfileDTO = deviceProfileService.insertOrUpdate(getCurrentUser().getCurrentTenantId(), deviceProfileDTO);
  38 + return Optional.ofNullable(newDeviceProfileDTO)
  39 + .map(
  40 + dto -> {
  41 + URI location =
  42 + ServletUriComponentsBuilder.fromCurrentRequest()
  43 + .path("/{id}")
  44 + .buildAndExpand(newDeviceProfileDTO.getId())
  45 + .toUri();
  46 + return ResponseEntity.created(location).body(newDeviceProfileDTO);
  47 + })
  48 + .orElse(ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build());
  49 + }
  50 +
  51 + @GetMapping("{id}")
  52 + public ResponseEntity<DeviceProfileDTO> getDevice(@PathVariable("id") String id) throws ThingsboardException {
  53 + return ResponseEntity.of(deviceProfileService.getDeviceProfile(getCurrentUser().getCurrentTenantId(), id));
  54 + }
  55 +
  56 + @GetMapping(params = {PAGE_SIZE, PAGE})
  57 + public PageData<DeviceProfileDTO> pageDevice(
  58 + @RequestParam(PAGE_SIZE) int pageSize,
  59 + @RequestParam(PAGE) int page,
  60 + @RequestParam(value = "name", required = false) String name,
  61 + @RequestParam(value = "transportType", required = false) String transportType,
  62 + @RequestParam(value = ORDER_FILED, required = false) String orderBy,
  63 + @RequestParam(value = ORDER_TYPE, required = false) OrderTypeEnum orderType) throws ThingsboardException {
  64 + HashMap<String, Object> queryMap = new HashMap<>();
  65 + queryMap.put(PAGE_SIZE, pageSize);
  66 + queryMap.put(PAGE, page);
  67 + queryMap.put(ORDER_FILED, orderBy);
  68 + queryMap.put("transportType", transportType);
  69 + queryMap.put("name", name);
  70 + if (orderType != null) {
  71 + queryMap.put(ORDER_TYPE, orderType.name());
  72 + }
  73 + return deviceProfileService.page(getCurrentUser().getCurrentTenantId(), queryMap);
  74 + }
  75 +
  76 + @DeleteMapping
  77 + public void deleteDevices(@Validated({DeleteGroup.class}) @RequestBody DeleteDTO deleteDTO) throws ThingsboardException {
  78 + deviceProfileService.deleteDeviceProfiles(getCurrentUser().getCurrentTenantId(), deleteDTO.getIds());
  79 + }
  80 +
  81 + @GetMapping("/me")
  82 + public ResponseEntity<List<DeviceProfileDTO>> findCurrentTenantDeviceProfiles() throws ThingsboardException {
  83 + DeviceProfileDTO deviceProfileDTO = new DeviceProfileDTO();
  84 + deviceProfileDTO.setTenantId(getCurrentUser().getCurrentTenantId());
  85 + return ResponseEntity.ok(deviceProfileService.findDeviceProfile(getCurrentUser().getCurrentTenantId(), deviceProfileDTO));
  86 + }
  87 +}
  1 +package org.thingsboard.server.controller.yunteng;
  2 +
  3 +import io.swagger.annotations.Api;
  4 +import io.swagger.annotations.ApiOperation;
  5 +import io.swagger.annotations.ApiParam;
  6 +import lombok.RequiredArgsConstructor;
  7 +import org.springframework.http.ResponseEntity;
  8 +import org.springframework.validation.annotation.Validated;
  9 +import org.springframework.web.bind.annotation.*;
  10 +import org.thingsboard.server.common.data.exception.ThingsboardException;
  11 +import org.thingsboard.server.common.data.yunteng.common.AddGroup;
  12 +import org.thingsboard.server.common.data.yunteng.common.DeleteGroup;
  13 +import org.thingsboard.server.common.data.yunteng.common.UpdateGroup;
  14 +import org.thingsboard.server.common.data.yunteng.dto.DeleteDTO;
  15 +import org.thingsboard.server.common.data.yunteng.dto.DeviceTypeDTO;
  16 +import org.thingsboard.server.common.data.yunteng.utils.tools.ResponseResult;
  17 +import org.thingsboard.server.controller.BaseController;
  18 +import org.thingsboard.server.dao.yunteng.service.YtDeviceTypeService;
  19 +
  20 +import java.util.List;
  21 +
  22 +@RestController
  23 +@RequestMapping("api/yt/device_type")
  24 +@RequiredArgsConstructor
  25 +@Api(value = "设备类型")
  26 +public class YtDeviceTypeController extends BaseController {
  27 + private final YtDeviceTypeService deviceTypeService;
  28 +
  29 + @GetMapping
  30 + @ApiOperation(value = "获取当前用户的设备类型树形")
  31 + @ApiParam(name = "tenantCode",value = "租户Code")
  32 + public ResponseEntity<List<DeviceTypeDTO>> getDeviceTypeTree(String tenantCode){
  33 + return ResponseEntity.ok(deviceTypeService.getDeviceTypeTree(tenantCode));
  34 + }
  35 +
  36 + @PostMapping
  37 + @ApiOperation(value = "保存设备类型")
  38 + public ResponseEntity<DeviceTypeDTO> saveDeviceType(
  39 + @Validated({AddGroup.class}) @RequestBody DeviceTypeDTO deviceTypeDTO) throws ThingsboardException {
  40 + return ResponseEntity.ok(deviceTypeService.saveDeviceTye(getCurrentUser().getCurrentTenantId(), deviceTypeDTO));
  41 + }
  42 +
  43 + @PutMapping
  44 + @ApiOperation(value = "修改设备类型")
  45 + public ResponseEntity<DeviceTypeDTO> updateDeviceType(
  46 + @Validated({UpdateGroup.class}) @RequestBody DeviceTypeDTO deviceTypeDTO) {
  47 + return ResponseEntity.ok(deviceTypeService.updateDeviceType(deviceTypeDTO));
  48 + }
  49 +
  50 + @DeleteMapping
  51 + @ApiOperation(value = "删除设备类型")
  52 + public ResponseResult<Boolean> deleteDeviceType(
  53 + @Validated({DeleteGroup.class}) @RequestBody DeleteDTO deleteDTO) {
  54 + return ResponseResult.success(deviceTypeService.deleteDeviceType(deleteDTO));
  55 + }
  56 +}
  1 +package org.thingsboard.server.controller.yunteng;
  2 +
  3 +import lombok.RequiredArgsConstructor;
  4 +import org.springframework.web.bind.annotation.*;
  5 +import org.thingsboard.server.common.data.exception.ThingsboardException;
  6 +import org.thingsboard.server.common.data.yunteng.constant.FastIotConstants;
  7 +import org.thingsboard.server.common.data.yunteng.dto.DeleteDTO;
  8 +import org.thingsboard.server.common.data.yunteng.dto.MailLogDTO;
  9 +import org.thingsboard.server.common.data.yunteng.enums.OrderTypeEnum;
  10 +import org.thingsboard.server.common.data.yunteng.utils.tools.PageData;
  11 +import org.thingsboard.server.common.data.yunteng.utils.tools.ResponseResult;
  12 +import org.thingsboard.server.controller.BaseController;
  13 +import org.thingsboard.server.dao.yunteng.service.YtMailLogService;
  14 +
  15 +import java.util.HashMap;
  16 +
  17 +import static org.thingsboard.server.common.data.yunteng.constant.QueryConstant.*;
  18 +
  19 +@RestController
  20 +@RequestMapping("api/yt/mailLog")
  21 +@RequiredArgsConstructor
  22 +public class YtMailLogController extends BaseController {
  23 +
  24 + private final YtMailLogService mailLogService;
  25 +
  26 + @GetMapping(params = {PAGE_SIZE, PAGE})
  27 + public PageData<MailLogDTO> pageMessageConfig(
  28 + @RequestParam(PAGE_SIZE) int pageSize,
  29 + @RequestParam(PAGE) int page,
  30 + @RequestParam(value = "emailSubject", required = false) String emailSubject,
  31 + @RequestParam(value = "startTime", required = false) String startTime,
  32 + @RequestParam(value = "endTime", required = false) String endTime,
  33 + @RequestParam(value = ORDER_FILED, required = false) String orderBy,
  34 + @RequestParam(value = ORDER_TYPE, required = false) OrderTypeEnum orderType) throws ThingsboardException {
  35 +
  36 + HashMap<String, Object> queryMap = new HashMap<>();
  37 + queryMap.put(PAGE_SIZE, pageSize);
  38 + queryMap.put(PAGE, page);
  39 + queryMap.put(ORDER_FILED, orderBy);
  40 + queryMap.put("emailSubject", emailSubject);
  41 + queryMap.put("startTime", startTime);
  42 + queryMap.put("endTime", endTime);
  43 + if (orderType != null) {
  44 + queryMap.put(ORDER_TYPE, orderType.name());
  45 + }
  46 + return mailLogService.page(getCurrentUser().getCurrentTenantId(), queryMap);
  47 + }
  48 +
  49 + @DeleteMapping
  50 + public ResponseResult<String> deleteMailLog(@RequestBody DeleteDTO deleteDTO) {
  51 + return mailLogService.deleteMailLog(deleteDTO.getIds())
  52 + ? ResponseResult.success(FastIotConstants.StateValue.DELETE_SUCCESS)
  53 + : ResponseResult.failed(FastIotConstants.StateValue.DELETE_FAILED);
  54 + }
  55 +}
  1 +package org.thingsboard.server.controller.yunteng;
  2 +
  3 +import lombok.RequiredArgsConstructor;
  4 +import org.springframework.http.ResponseEntity;
  5 +import org.springframework.validation.annotation.Validated;
  6 +import org.springframework.web.bind.annotation.*;
  7 +import org.thingsboard.server.common.data.exception.ThingsboardException;
  8 +import org.thingsboard.server.common.data.yunteng.common.AddGroup;
  9 +import org.thingsboard.server.common.data.yunteng.common.DeleteGroup;
  10 +import org.thingsboard.server.common.data.yunteng.common.UpdateGroup;
  11 +import org.thingsboard.server.common.data.yunteng.constant.FastIotConstants;
  12 +import org.thingsboard.server.common.data.yunteng.dto.DeleteDTO;
  13 +import org.thingsboard.server.common.data.yunteng.dto.MessageConfigDTO;
  14 +import org.thingsboard.server.common.data.yunteng.enums.OrderTypeEnum;
  15 +import org.thingsboard.server.common.data.yunteng.utils.tools.PageData;
  16 +import org.thingsboard.server.common.data.yunteng.utils.tools.ResponseResult;
  17 +import org.thingsboard.server.controller.BaseController;
  18 +import org.thingsboard.server.dao.yunteng.service.YtMessageConfigService;
  19 +
  20 +import java.util.HashMap;
  21 +import java.util.List;
  22 +
  23 +import static org.thingsboard.server.common.data.yunteng.constant.QueryConstant.*;
  24 +
  25 +@RestController
  26 +@RequestMapping("api/yt/message")
  27 +@RequiredArgsConstructor
  28 +public class YtMessageConfigController extends BaseController {
  29 +
  30 + private final YtMessageConfigService messageConfigService;
  31 +
  32 + @GetMapping(params = {PAGE_SIZE, PAGE})
  33 + public PageData<MessageConfigDTO> pageMessageConfig(
  34 + @RequestParam(PAGE_SIZE) int pageSize,
  35 + @RequestParam(PAGE) int page,
  36 + @RequestParam(value = "platformType", required = false) String platformType,
  37 + @RequestParam(value = "messageType", required = false) String messageType,
  38 + @RequestParam(value = "status", required = false) Integer status,
  39 + @RequestParam(value = ORDER_FILED, required = false) String orderBy,
  40 + @RequestParam(value = ORDER_TYPE, required = false) OrderTypeEnum orderType) throws ThingsboardException {
  41 +
  42 + HashMap<String, Object> queryMap = new HashMap<>();
  43 + queryMap.put(PAGE_SIZE, pageSize);
  44 + queryMap.put(PAGE, page);
  45 + queryMap.put(ORDER_FILED, orderBy);
  46 + queryMap.put("platformType", platformType);
  47 + queryMap.put("messageType", messageType);
  48 + queryMap.put("status",status);
  49 + if (orderType != null) {
  50 + queryMap.put(ORDER_TYPE, orderType.name());
  51 + }
  52 + return messageConfigService.page(getCurrentUser().getCurrentTenantId(),queryMap);
  53 + }
  54 +
  55 + @PostMapping
  56 + public ResponseResult<MessageConfigDTO> saveMessageConfig(
  57 + @Validated({AddGroup.class})@RequestBody MessageConfigDTO configDTO) throws ThingsboardException {
  58 + MessageConfigDTO newDTO = messageConfigService.saveMessageConfig(getCurrentUser().getCurrentTenantId(),configDTO);
  59 + return ResponseResult.success(newDTO);
  60 + }
  61 +
  62 + @GetMapping("/{id}")
  63 + public ResponseResult<MessageConfigDTO> findMessageConfigById(@PathVariable String id){
  64 + return ResponseResult.success(messageConfigService.findMessageConfigById(id));
  65 + }
  66 + @DeleteMapping
  67 + public ResponseResult<String> deleteMessageConfig(@Validated({DeleteGroup.class})@RequestBody DeleteDTO deleteDTO) {
  68 + return messageConfigService.deleteMessageConfig(deleteDTO.getIds())
  69 + ? ResponseResult.success(FastIotConstants.StateValue.DELETE_SUCCESS)
  70 + : ResponseResult.failed(FastIotConstants.StateValue.DELETE_FAILED);
  71 + }
  72 +
  73 + @PutMapping
  74 + public MessageConfigDTO updateMessageConfig(@Validated({UpdateGroup.class})@RequestBody MessageConfigDTO configDTO) throws ThingsboardException {
  75 + return messageConfigService.updateMessageConfig(getCurrentUser().getCurrentTenantId(), configDTO);
  76 + }
  77 +
  78 + @PostMapping("/find")
  79 + public ResponseEntity<List<MessageConfigDTO>> findMessageInfo(@RequestBody MessageConfigDTO configDTO){
  80 + return ResponseEntity.ok(messageConfigService.findMessageInfo(configDTO));
  81 + }
  82 +}
  1 +package org.thingsboard.server.controller.yunteng;
  2 +
  3 +import lombok.RequiredArgsConstructor;
  4 +import org.springframework.util.Assert;
  5 +import org.springframework.validation.annotation.Validated;
  6 +import org.springframework.web.bind.annotation.*;
  7 +import org.thingsboard.server.common.data.yunteng.common.AddGroup;
  8 +import org.thingsboard.server.common.data.yunteng.common.DeleteGroup;
  9 +import org.thingsboard.server.common.data.yunteng.common.UpdateGroup;
  10 +import org.thingsboard.server.common.data.yunteng.constant.FastIotConstants;
  11 +import org.thingsboard.server.common.data.yunteng.dto.DeleteDTO;
  12 +import org.thingsboard.server.common.data.yunteng.dto.MessageTemplateDTO;
  13 +import org.thingsboard.server.common.data.yunteng.dto.request.EmailReqDTO;
  14 +import org.thingsboard.server.common.data.yunteng.dto.request.SmsReqDTO;
  15 +import org.thingsboard.server.common.data.yunteng.enums.OrderTypeEnum;
  16 +import org.thingsboard.server.common.data.yunteng.enums.ResponseCodeEnum;
  17 +import org.thingsboard.server.common.data.yunteng.utils.tools.PageData;
  18 +import org.thingsboard.server.common.data.yunteng.utils.tools.ResponseResult;
  19 +import org.thingsboard.server.dao.yunteng.service.YtMailService;
  20 +import org.thingsboard.server.dao.yunteng.service.YtMessageTemplateService;
  21 +import org.thingsboard.server.dao.yunteng.service.YtSmsService;
  22 +
  23 +import java.util.HashMap;
  24 +
  25 +import static org.thingsboard.server.common.data.yunteng.constant.QueryConstant.*;
  26 +
  27 +@RestController
  28 +@RequestMapping("api/yt/template")
  29 +@RequiredArgsConstructor
  30 +public class YtMessageTemplateController {
  31 +
  32 + private final YtMessageTemplateService messageTemplateService;
  33 +
  34 + private final YtSmsService smsService;
  35 +
  36 + private final YtMailService mailService;
  37 +
  38 + @GetMapping(params = {PAGE_SIZE, PAGE})
  39 + public PageData<MessageTemplateDTO> pageMessageTemplate(
  40 + @RequestParam(PAGE_SIZE) int pageSize,
  41 + @RequestParam(PAGE) int page,
  42 + @RequestParam(value = "templateCode", required = false) String templateCode,
  43 + @RequestParam(value = "templateName", required = false) String templateName,
  44 + @RequestParam(value = ORDER_FILED, required = false) String orderBy,
  45 + @RequestParam(value = ORDER_TYPE, required = false) OrderTypeEnum orderType) {
  46 +
  47 + HashMap<String, Object> queryMap = new HashMap<>();
  48 + queryMap.put(PAGE_SIZE, pageSize);
  49 + queryMap.put(PAGE, page);
  50 + queryMap.put(ORDER_FILED, orderBy);
  51 + queryMap.put("templateCode", templateCode);
  52 + queryMap.put("templateName", templateName);
  53 + if (orderType != null) {
  54 + queryMap.put(ORDER_TYPE, orderType.name());
  55 + }
  56 + return messageTemplateService.page(queryMap);
  57 + }
  58 +
  59 + @PostMapping
  60 + public ResponseResult<MessageTemplateDTO> saveMessageTemplate(
  61 + @Validated({AddGroup.class}) @RequestBody MessageTemplateDTO templateDTO) {
  62 + MessageTemplateDTO newDTO = messageTemplateService.saveMessageTemplate(templateDTO);
  63 + return ResponseResult.success(newDTO);
  64 + }
  65 +
  66 + @DeleteMapping
  67 + public ResponseResult<String> deleteMessageTemplate(
  68 + @Validated({DeleteGroup.class}) @RequestBody DeleteDTO deleteDTO) {
  69 + return messageTemplateService.deleteMessageTemplate(deleteDTO.getIds())
  70 + ? ResponseResult.success(FastIotConstants.StateValue.DELETE_SUCCESS)
  71 + : ResponseResult.failed(FastIotConstants.StateValue.DELETE_FAILED);
  72 + }
  73 +
  74 + @PutMapping
  75 + public MessageTemplateDTO updateMessageTemplate(
  76 + @Validated({UpdateGroup.class}) @RequestBody MessageTemplateDTO templateDTO) {
  77 + Assert.notNull(templateDTO.getId(), "messageTemplate id cannot be null");
  78 + return messageTemplateService.updateMessageTemplate(templateDTO);
  79 + }
  80 +
  81 + @PostMapping("/sendSms")
  82 + public ResponseResult<String> sendSms(
  83 + @Validated({AddGroup.class}) @RequestBody SmsReqDTO smsReqDTO) {
  84 + boolean result = smsService.sendSms(smsReqDTO);
  85 + String message = result ? ResponseCodeEnum.SUCCESS.name() : ResponseCodeEnum.FAILED.name();
  86 + return ResponseResult.success(message);
  87 + }
  88 +
  89 + @PostMapping("/sendEmail")
  90 + public ResponseResult<String> sendEmail(
  91 + @Validated({AddGroup.class}) @RequestBody EmailReqDTO emailReqDTO) {
  92 + boolean result = mailService.sendEmail(emailReqDTO);
  93 + String message = result ? ResponseCodeEnum.SUCCESS.name() : ResponseCodeEnum.FAILED.name();
  94 + return ResponseResult.success(message);
  95 + }
  96 +}
  1 +package org.thingsboard.server.controller.yunteng;
  2 +
  3 +import lombok.RequiredArgsConstructor;
  4 +import org.springframework.util.Assert;
  5 +import org.springframework.web.bind.annotation.PathVariable;
  6 +import org.springframework.web.bind.annotation.PostMapping;
  7 +import org.springframework.web.bind.annotation.RequestMapping;
  8 +import org.springframework.web.bind.annotation.RestController;
  9 +import org.thingsboard.server.dao.yunteng.service.YtSmsService;
  10 +
  11 +import static org.thingsboard.server.common.data.yunteng.constant.FastIotConstants.CHINA_MOBILE_PATTERN;
  12 +
  13 +@RestController
  14 +@RequestMapping("api/yt/noauth")
  15 +@RequiredArgsConstructor
  16 +public class YtNoAuthController {
  17 +
  18 + private final YtSmsService smsService;
  19 +
  20 + @PostMapping("/sendLoginSmsCode/{phoneNumber}")
  21 + public boolean sendVerificationCode(@PathVariable("phoneNumber") String phoneNumber) {
  22 + Assert.isTrue(
  23 + CHINA_MOBILE_PATTERN.matcher(phoneNumber).matches(), "please input correct phone number");
  24 + return smsService.sendLoginSmsCode(phoneNumber);
  25 + }
  26 +}
  1 +package org.thingsboard.server.controller.yunteng;
  2 +
  3 +import io.jsonwebtoken.*;
  4 +import lombok.RequiredArgsConstructor;
  5 +import lombok.extern.slf4j.Slf4j;
  6 +import org.springframework.security.authentication.BadCredentialsException;
  7 +import org.springframework.util.Assert;
  8 +import org.springframework.web.bind.annotation.*;
  9 +import org.thingsboard.server.common.data.yunteng.dto.AlarmInfoDTO;
  10 +import org.thingsboard.server.dao.yunteng.service.YtNoticeService;
  11 +import org.thingsboard.server.service.security.exception.JwtExpiredTokenException;
  12 +
  13 +import java.net.InetAddress;
  14 +
  15 +/**
  16 + * @version V1.0
  17 + * @Description :
  18 + * 1.其它地方抛出异常,交由控制层统一处理
  19 + * 2.服务层注意持久化的事务管理
  20 + * @Dependency: 依赖包
  21 + * @Author: junlianglee
  22 + * @Date Created in 2021/11/23$
  23 + * @Copyright 2016-2018 - Powered By 云腾五洲
  24 + */
  25 +@RestController
  26 +@RequestMapping("/api/yt/notice")
  27 +@RequiredArgsConstructor
  28 +@Slf4j
  29 +public class YtNoticeController {
  30 +
  31 + private final YtNoticeService service;
  32 +
  33 + @PostMapping("/alert")
  34 + public void alermNotice(@RequestParam(value = "token", required = true) String token,
  35 + @RequestBody AlarmInfoDTO alarmInfo){
  36 + Assert.notNull(token, "token cannot be null");
  37 + Assert.notNull(alarmInfo, "alarm info cannot be null");
  38 + if(parseTokenClaims(token,alarmInfo)){
  39 + service.alert(token,alarmInfo);
  40 + }
  41 + }
  42 +
  43 +
  44 +
  45 + private boolean parseTokenClaims(String token,AlarmInfoDTO alarmInfo) {
  46 + try {
  47 + Claims claims = Jwts.parser()
  48 + .setSigningKey(alarmInfo.getSeverity())
  49 + .parseClaimsJws(token)
  50 + .getBody();
  51 + if(claims.get("deviceId").equals(alarmInfo.getDeviceId())
  52 + &&claims.get("tenantId").equals(alarmInfo.getTenantId())
  53 + &&claims.get("ip").equals(InetAddress.getLocalHost().getHostAddress())){
  54 + return true;
  55 + }
  56 + return false;
  57 + } catch (UnsupportedJwtException | MalformedJwtException | IllegalArgumentException | SignatureException ex) {
  58 + log.debug("Invalid JWT Token", ex);
  59 + throw new BadCredentialsException("Invalid JWT token: ", ex);
  60 + } catch (ExpiredJwtException expiredEx) {
  61 + log.debug("JWT Token is expired", expiredEx);
  62 + throw new JwtExpiredTokenException(expiredEx.getMessage());
  63 + } catch (Exception e) {
  64 + log.error("not allowed send notice",e);
  65 + }
  66 + return false;
  67 + }
  68 +}
@@ -17,7 +17,6 @@ package org.thingsboard.server.dao.device; @@ -17,7 +17,6 @@ package org.thingsboard.server.dao.device;
17 17
18 import org.thingsboard.server.common.data.DeviceProfile; 18 import org.thingsboard.server.common.data.DeviceProfile;
19 import org.thingsboard.server.common.data.DeviceProfileInfo; 19 import org.thingsboard.server.common.data.DeviceProfileInfo;
20 -import org.thingsboard.server.common.data.EntityInfo;  
21 import org.thingsboard.server.common.data.id.DeviceProfileId; 20 import org.thingsboard.server.common.data.id.DeviceProfileId;
22 import org.thingsboard.server.common.data.id.TenantId; 21 import org.thingsboard.server.common.data.id.TenantId;
23 import org.thingsboard.server.common.data.page.PageData; 22 import org.thingsboard.server.common.data.page.PageData;
common/data/src/main/java/org/thingsboard/server/common/data/yunteng/common/YtCommonService.java renamed from common/data/src/main/java/org/thingsboard/server/common/data/yunteng/common/CommonService.java
@@ -2,7 +2,7 @@ package org.thingsboard.server.common.data.yunteng.common; @@ -2,7 +2,7 @@ package org.thingsboard.server.common.data.yunteng.common;
2 2
3 import org.thingsboard.server.common.data.yunteng.dto.SysDictItemDTO; 3 import org.thingsboard.server.common.data.yunteng.dto.SysDictItemDTO;
4 4
5 -public interface CommonService { 5 +public interface YtCommonService {
6 /** 6 /**
7 * 通过dict表的Code和dictItem的codeText查询字典表的值 7 * 通过dict表的Code和dictItem的codeText查询字典表的值
8 * 8 *
@@ -12,7 +12,7 @@ import org.aspectj.lang.annotation.Aspect; @@ -12,7 +12,7 @@ import org.aspectj.lang.annotation.Aspect;
12 import org.aspectj.lang.annotation.Pointcut; 12 import org.aspectj.lang.annotation.Pointcut;
13 import org.springframework.stereotype.Component; 13 import org.springframework.stereotype.Component;
14 import org.thingsboard.common.util.JacksonUtil; 14 import org.thingsboard.common.util.JacksonUtil;
15 -import org.thingsboard.server.common.data.yunteng.common.CommonService; 15 +import org.thingsboard.server.common.data.yunteng.common.YtCommonService;
16 import org.thingsboard.server.common.data.yunteng.common.aspect.annotation.AutoDict; 16 import org.thingsboard.server.common.data.yunteng.common.aspect.annotation.AutoDict;
17 import org.thingsboard.server.common.data.yunteng.dto.SysDictItemDTO; 17 import org.thingsboard.server.common.data.yunteng.dto.SysDictItemDTO;
18 import org.thingsboard.server.common.data.yunteng.utils.ReflectUtils; 18 import org.thingsboard.server.common.data.yunteng.utils.ReflectUtils;
@@ -31,7 +31,7 @@ import java.util.List; @@ -31,7 +31,7 @@ import java.util.List;
31 @RequiredArgsConstructor 31 @RequiredArgsConstructor
32 public class SysDictAspect { 32 public class SysDictAspect {
33 33
34 - private final CommonService commonService; 34 + private final YtCommonService commonService;
35 35
36 /** 表对应字段加上_dictText即可显示出文本 */ 36 /** 表对应字段加上_dictText即可显示出文本 */
37 private static final String DICT_TEXT_SUFFIX = "DictText"; 37 private static final String DICT_TEXT_SUFFIX = "DictText";
  1 +package org.thingsboard.server.common.data.yunteng.dto;
  2 +
  3 +import com.fasterxml.jackson.annotation.JsonInclude;
  4 +import io.swagger.annotations.ApiModelProperty;
  5 +import lombok.Data;
  6 +import lombok.EqualsAndHashCode;
  7 +import org.thingsboard.server.common.data.yunteng.common.AddGroup;
  8 +
  9 +import javax.validation.constraints.NotEmpty;
  10 +
  11 +/**
  12 + * @Description 告警联系人实体表返回给前端视图
  13 + * @Author cxy
  14 + * @Date 2021/11/2 13:49
  15 + */
  16 +@Data
  17 +@EqualsAndHashCode(callSuper = false)
  18 +public class AlarmContactDTO extends TenantDTO {
  19 +
  20 + @ApiModelProperty(value = "用户名", required = true)
  21 + @NotEmpty(message = "用户名不能为空或字符串", groups = AddGroup.class)
  22 + private String username;
  23 +
  24 + @ApiModelProperty(value = "组织")
  25 + private String organizationId;
  26 +
  27 + @NotEmpty(message = "电话不能为空或字符串", groups = AddGroup.class)
  28 + @ApiModelProperty(value = "电话", required = true)
  29 + private String phone;
  30 +
  31 + @ApiModelProperty(value = "电子邮件")
  32 + private String email;
  33 +
  34 + @ApiModelProperty(value = "微信")
  35 + private String wechat;
  36 +
  37 + @ApiModelProperty(value = "钉钉")
  38 + private String dingtalk;
  39 + /**
  40 + * Include.NON_NULL 属性为NULL 不序列化 ,不显示出字段
  41 + */
  42 + @ApiModelProperty(value = "备注")
  43 + @JsonInclude(JsonInclude.Include.NON_NULL)
  44 + private String remark;
  45 +
  46 + @ApiModelProperty(value = "添加人")
  47 + private String addPeople;
  48 +
  49 +
  50 +}
  1 +package org.thingsboard.server.common.data.yunteng.dto;
  2 +
  3 +import io.swagger.annotations.ApiModelProperty;
  4 +import lombok.Data;
  5 +import lombok.EqualsAndHashCode;
  6 +
  7 +import javax.validation.constraints.NotEmpty;
  8 +
  9 +/** @Description @Author cxy @Date 2021/11/16 17:49 */
  10 +@Data
  11 +@EqualsAndHashCode(callSuper = true)
  12 +public class AlarmInfoDTO extends TenantDTO {
  13 + @ApiModelProperty(value = "告警时间")
  14 + private long createTs;
  15 +
  16 + @ApiModelProperty(value = "告警类型")
  17 + private String type;
  18 +
  19 + @ApiModelProperty(value = "告警详情")
  20 + private String details;
  21 +
  22 +
  23 + @ApiModelProperty(value = "告警开始时间")
  24 + private long startTs;
  25 +
  26 + @ApiModelProperty(value = "告警结束时间")
  27 + private long endTs;
  28 +
  29 + @ApiModelProperty(value = "告警状态")
  30 + private String status;
  31 +
  32 + @ApiModelProperty(value = "告警程度")
  33 + private String severity;
  34 +
  35 +
  36 +
  37 + @ApiModelProperty(value = "告警设备名称")
  38 + private String deviceName;
  39 + @ApiModelProperty(value = "告警设备ID")
  40 + @NotEmpty(message = "设备ID不能为空")
  41 + private String deviceId;
  42 +}
  1 +package org.thingsboard.server.common.data.yunteng.dto;
  2 +
  3 +import io.swagger.annotations.ApiModelProperty;
  4 +import lombok.Data;
  5 +import lombok.EqualsAndHashCode;
  6 +import org.thingsboard.server.common.data.yunteng.common.AddGroup;
  7 +import org.thingsboard.server.common.data.yunteng.utils.tree.TreeDTO;
  8 +
  9 +import javax.validation.constraints.NotEmpty;
  10 +import java.util.ArrayList;
  11 +import java.util.List;
  12 +
  13 +@EqualsAndHashCode(callSuper = true)
  14 +@Data
  15 +public class DeviceTypeDTO extends TenantDTO implements TreeDTO<DeviceTypeDTO> {
  16 +
  17 + @NotEmpty(message = "名称不能不空或者空字符串")
  18 + @ApiModelProperty(value = "设备类型名称")
  19 + private String name;
  20 +
  21 + @ApiModelProperty(value = "父ID")
  22 + private String parentId;
  23 +
  24 + @NotEmpty(message = "图片地址不能为空或者空字符串",groups = AddGroup.class)
  25 + @ApiModelProperty(value = "图片地址")
  26 + private String path;
  27 +
  28 + @ApiModelProperty(value = "排序")
  29 + private Integer sort;
  30 +
  31 + @ApiModelProperty(value = "描述")
  32 + private String description;
  33 +
  34 + @ApiModelProperty(value = "下级列表")
  35 + private List<DeviceTypeDTO> children;
  36 +
  37 + public DeviceTypeDTO(){
  38 + this.children = new ArrayList<>();
  39 + }
  40 +
  41 + @Override
  42 + public int compareTo(DeviceTypeDTO o) {
  43 + return this.getSort()-o.getSort();
  44 + }
  45 +}
  1 +package org.thingsboard.server.common.data.yunteng.dto;
  2 +
  3 +import com.fasterxml.jackson.annotation.JsonFormat;
  4 +import com.fasterxml.jackson.databind.JsonNode;
  5 +import lombok.Data;
  6 +import org.thingsboard.server.common.data.yunteng.common.aspect.annotation.AutoDict;
  7 +
  8 +import java.time.LocalDateTime;
  9 +
  10 +@Data
  11 +public class MailLogDTO extends BaseDTO{
  12 + /** 发件人 */
  13 + private String emailFrom;
  14 +
  15 + /** 收件人 */
  16 + private JsonNode emailTo;
  17 +
  18 + /** 抄送人 */
  19 + private JsonNode emailCc;
  20 +
  21 + /** 密送人 */
  22 + private JsonNode emailBcc;
  23 +
  24 + /** 邮件主题 */
  25 + private String emailSubject;
  26 +
  27 + /** 邮件内容 */
  28 + private String emailBody;
  29 +
  30 + /** 状态:ResponseCodeEnum枚举值 */
  31 + private String status;
  32 +
  33 + /** 发送时间 */
  34 + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
  35 + private LocalDateTime sendTime;
  36 +
  37 + /** 租户Code */
  38 + private String tenantCode;
  39 +
  40 + /** 模板ID */
  41 + private String messageTemplateId;
  42 +
  43 + /**备注*/
  44 + private String remark;
  45 +
  46 + /**用途*/
  47 + @AutoDict(dictCode = "template_purpose")
  48 + private String templatePurpose;
  49 +}
@@ -14,7 +14,6 @@ import java.time.LocalDateTime; @@ -14,7 +14,6 @@ import java.time.LocalDateTime;
14 public class TenantDTO extends BaseDTO { 14 public class TenantDTO extends BaseDTO {
15 private String name; 15 private String name;
16 private String icon; 16 private String icon;
17 - private String tenantCode;  
18 private boolean enabled; 17 private boolean enabled;
19 private String description; 18 private String description;
20 private String defaultConfig; 19 private String defaultConfig;
  1 +package org.thingsboard.server.common.data.yunteng.enums;
  2 +
  3 +/**
  4 + * @version V1.0
  5 + * @Description : 资源状态,
  6 + * 例如:消息模板等。
  7 + * 1.其它地方抛出异常,交由控制层统一处理
  8 + * 2.服务层注意持久化的事务管理
  9 + * @Dependency: 依赖包
  10 + * @Author: junlianglee
  11 + * @Date Created in 2021/11/24$
  12 + * @Copyright 2016-2018 - Powered By 云腾五洲
  13 + */
  14 +public enum AssetStatusEnum {
  15 + DISABLED,
  16 + ENABLE
  17 +}
  1 +package org.thingsboard.server.common.data.yunteng.enums;
  2 +
  3 +/**
  4 + * 部门状态
  5 + */
  6 +public enum DeptStatusEnum {
  7 + ENABLE,
  8 + DISABLED
  9 +}
  1 +package org.thingsboard.server.common.data.yunteng.enums;
  2 +
  3 +public enum EmailFormatEnum {
  4 + TEXT,
  5 + HTML
  6 +}
  1 +package org.thingsboard.server.common.data.yunteng.enums;
  2 +
  3 +public enum TransportTypeEnum {
  4 + DEFAULT,
  5 + TCP,
  6 + MQTT,
  7 + COAP
  8 +}
@@ -44,7 +44,7 @@ public class MailLog extends BaseEntity { @@ -44,7 +44,7 @@ public class MailLog extends BaseEntity {
44 private LocalDateTime sendTime; 44 private LocalDateTime sendTime;
45 45
46 /** 租户Code */ 46 /** 租户Code */
47 - private String tenantCode; 47 + private String tenantId;
48 48
49 /** 模板ID */ 49 /** 模板ID */
50 private String messageTemplateId; 50 private String messageTemplateId;
@@ -13,7 +13,7 @@ public class TenantBaseEntity extends BaseEntity { @@ -13,7 +13,7 @@ public class TenantBaseEntity extends BaseEntity {
13 13
14 private static final long serialVersionUID = -4315734960161684909L; 14 private static final long serialVersionUID = -4315734960161684909L;
15 15
16 - private String tenantCode; 16 + private String tenantId;
17 17
18 @TableField(fill = FieldFill.INSERT) 18 @TableField(fill = FieldFill.INSERT)
19 private String creator; 19 private String creator;
  1 +package org.thingsboard.server.dao.yunteng.entities;
  2 +
  3 +import com.baomidou.mybatisplus.annotation.FieldStrategy;
  4 +import com.baomidou.mybatisplus.annotation.TableField;
  5 +import com.baomidou.mybatisplus.annotation.TableName;
  6 +import lombok.Data;
  7 +import lombok.EqualsAndHashCode;
  8 +import org.thingsboard.server.common.data.yunteng.constant.ModelConstants;
  9 +import org.thingsboard.server.common.data.yunteng.enums.TransportTypeEnum;
  10 +
  11 +@Data
  12 +@EqualsAndHashCode(callSuper = true)
  13 +@TableName(ModelConstants.Table.IOTFS_DEVICE_PROFILE_TABLE_NAME)
  14 +public class YtDeviceProfile extends TenantBaseEntity {
  15 + private String name;
  16 + private String description;
  17 + /** 转换脚本:TCP才会使用 */
  18 + private String convertJs;
  19 +
  20 + private TransportTypeEnum transportType;
  21 + private String tenantCode;
  22 + /** TB的设备配置文件 */
  23 + @TableField(updateStrategy = FieldStrategy.IGNORED)
  24 + private String tbProfileId;
  25 +}
@@ -38,7 +38,7 @@ public class MenuServiceImpl extends AbstractBaseService<MenuMapper, Menu> imple @@ -38,7 +38,7 @@ public class MenuServiceImpl extends AbstractBaseService<MenuMapper, Menu> imple
38 38
39 List<Menu> menus = 39 List<Menu> menus =
40 baseMapper.selectList( 40 baseMapper.selectList(
41 - new QueryWrapper<Menu>().lambda().eq(Menu::getTenantCode, tenantId)); 41 + new QueryWrapper<Menu>().lambda().eq(Menu::getTenantId, tenantId));
42 Map<String, MenuDTO> menuDTOMap = new LinkedHashMap<>(menus.size()); 42 Map<String, MenuDTO> menuDTOMap = new LinkedHashMap<>(menus.size());
43 menus.forEach(menu -> menuDTOMap.put(menu.getId(), menu.getDTO(MenuDTO.class))); 43 menus.forEach(menu -> menuDTOMap.put(menu.getId(), menu.getDTO(MenuDTO.class)));
44 return buildMenuDTOTree(menuDTOMap); 44 return buildMenuDTOTree(menuDTOMap);
@@ -144,7 +144,7 @@ public class MenuServiceImpl extends AbstractBaseService<MenuMapper, Menu> imple @@ -144,7 +144,7 @@ public class MenuServiceImpl extends AbstractBaseService<MenuMapper, Menu> imple
144 baseMapper.selectCount( 144 baseMapper.selectCount(
145 new QueryWrapper<Menu>() 145 new QueryWrapper<Menu>()
146 .lambda() 146 .lambda()
147 - .ne(Menu::getTenantCode, tenantId) 147 + .ne(Menu::getTenantId, tenantId)
148 .in(Menu::getId, ids)); 148 .in(Menu::getId, ids));
149 if (notTenantMenuCount > 0) { 149 if (notTenantMenuCount > 0) {
150 throw new AccessDeniedException("cannot delete menu that not create by you"); 150 throw new AccessDeniedException("cannot delete menu that not create by you");
@@ -7,7 +7,6 @@ import lombok.RequiredArgsConstructor; @@ -7,7 +7,6 @@ import lombok.RequiredArgsConstructor;
7 import lombok.extern.slf4j.Slf4j; 7 import lombok.extern.slf4j.Slf4j;
8 import org.apache.commons.lang3.RandomStringUtils; 8 import org.apache.commons.lang3.RandomStringUtils;
9 import org.apache.commons.lang3.StringUtils; 9 import org.apache.commons.lang3.StringUtils;
10 -import org.springframework.boot.actuate.endpoint.SecurityContext;  
11 import org.springframework.security.access.AccessDeniedException; 10 import org.springframework.security.access.AccessDeniedException;
12 import org.springframework.stereotype.Service; 11 import org.springframework.stereotype.Service;
13 import org.springframework.transaction.annotation.Transactional; 12 import org.springframework.transaction.annotation.Transactional;
@@ -63,7 +62,7 @@ public class RoleServiceImpl extends AbstractBaseService<RoleMapper, Role> imple @@ -63,7 +62,7 @@ public class RoleServiceImpl extends AbstractBaseService<RoleMapper, Role> imple
63 RoleEnum.ROLE_SYS_ADMIN) 62 RoleEnum.ROLE_SYS_ADMIN)
64 .eq( 63 .eq(
65 !isSysadmin, 64 !isSysadmin,
66 - Role::getTenantCode, 65 + Role::getTenantId,
67 tenantId) 66 tenantId)
68 .like( 67 .like(
69 queryMap.get("roleName") != null, 68 queryMap.get("roleName") != null,
@@ -80,7 +79,7 @@ public class RoleServiceImpl extends AbstractBaseService<RoleMapper, Role> imple @@ -80,7 +79,7 @@ public class RoleServiceImpl extends AbstractBaseService<RoleMapper, Role> imple
80 baseMapper.selectCount( 79 baseMapper.selectCount(
81 new QueryWrapper<Role>() 80 new QueryWrapper<Role>()
82 .lambda() 81 .lambda()
83 - .ne(Role::getTenantCode, tenantId) 82 + .ne(Role::getTenantId, tenantId)
84 .in(Role::getId, ids)); 83 .in(Role::getId, ids));
85 if (notTenantMenuCount > 0) { 84 if (notTenantMenuCount > 0) {
86 throw new AccessDeniedException("cannot delete role that not create by you"); 85 throw new AccessDeniedException("cannot delete role that not create by you");
@@ -155,7 +154,7 @@ public class RoleServiceImpl extends AbstractBaseService<RoleMapper, Role> imple @@ -155,7 +154,7 @@ public class RoleServiceImpl extends AbstractBaseService<RoleMapper, Role> imple
155 .eq(Role::getId, roleId) 154 .eq(Role::getId, roleId)
156 .eq( 155 .eq(
157 !isSysadmin, 156 !isSysadmin,
158 - Role::getTenantCode, 157 + Role::getTenantId,
159 tenantId))) 158 tenantId)))
160 .ifPresent( 159 .ifPresent(
161 role -> { 160 role -> {
@@ -188,7 +187,7 @@ public class RoleServiceImpl extends AbstractBaseService<RoleMapper, Role> imple @@ -188,7 +187,7 @@ public class RoleServiceImpl extends AbstractBaseService<RoleMapper, Role> imple
188 .eq(Role::getId, roleReqDTO.getId()) 187 .eq(Role::getId, roleReqDTO.getId())
189 .eq( 188 .eq(
190 !isSysadmin, 189 !isSysadmin,
191 - Role::getTenantCode, 190 + Role::getTenantId,
192 tenantId)); 191 tenantId));
193 if (role == null) { 192 if (role == null) {
194 return null; 193 return null;
@@ -206,7 +205,7 @@ public class RoleServiceImpl extends AbstractBaseService<RoleMapper, Role> imple @@ -206,7 +205,7 @@ public class RoleServiceImpl extends AbstractBaseService<RoleMapper, Role> imple
206 role.setRemark(roleReqDTO.getRemark()); 205 role.setRemark(roleReqDTO.getRemark());
207 role.setName(roleReqDTO.getName()); 206 role.setName(roleReqDTO.getName());
208 role.setEnabled(roleReqDTO.getStatus() == 1); 207 role.setEnabled(roleReqDTO.getStatus() == 1);
209 - role.setTenantCode(tenantId); 208 + role.setTenantId(tenantId);
210 baseMapper.insert(role); 209 baseMapper.insert(role);
211 } 210 }
212 // do update or save menu associate with this roleId 211 // do update or save menu associate with this roleId
@@ -245,8 +244,8 @@ public class RoleServiceImpl extends AbstractBaseService<RoleMapper, Role> imple @@ -245,8 +244,8 @@ public class RoleServiceImpl extends AbstractBaseService<RoleMapper, Role> imple
245 244
246 @Override 245 @Override
247 public List<RoleDTO> findRoleInfo(boolean isTenantAdmin,String tenantId,String userId,RoleDTO roleDTO) { 246 public List<RoleDTO> findRoleInfo(boolean isTenantAdmin,String tenantId,String userId,RoleDTO roleDTO) {
248 - if (StringUtils.isEmpty(roleDTO.getTenantCode())) {  
249 - roleDTO.setTenantCode(tenantId); 247 + if (StringUtils.isEmpty(roleDTO.getTenantId())) {
  248 + roleDTO.setTenantId(tenantId);
250 } 249 }
251 if (isTenantAdmin) { 250 if (isTenantAdmin) {
252 // 租户管理员既要查询自己拥有的角色,也要查询自己创建的角色 251 // 租户管理员既要查询自己拥有的角色,也要查询自己创建的角色
  1 +package org.thingsboard.server.dao.yunteng.impl;
  2 +
  3 +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  4 +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  5 +import com.baomidou.mybatisplus.core.metadata.IPage;
  6 +import lombok.RequiredArgsConstructor;
  7 +import org.apache.commons.lang3.StringUtils;
  8 +import org.springframework.stereotype.Service;
  9 +import org.springframework.transaction.annotation.Transactional;
  10 +import org.thingsboard.server.common.data.yunteng.core.exception.DataValidationException;
  11 +import org.thingsboard.server.common.data.yunteng.dto.AlarmContactDTO;
  12 +import org.thingsboard.server.common.data.yunteng.utils.ReflectUtils;
  13 +import org.thingsboard.server.common.data.yunteng.utils.tools.PageData;
  14 +import org.thingsboard.server.dao.yunteng.entities.AlarmContact;
  15 +import org.thingsboard.server.dao.yunteng.mapper.AlarmContactMapper;
  16 +import org.thingsboard.server.dao.yunteng.service.AbstractBaseService;
  17 +import org.thingsboard.server.dao.yunteng.service.YtAlarmContactService;
  18 +
  19 +import java.util.List;
  20 +import java.util.Map;
  21 +import java.util.Set;
  22 +
  23 +/** @Description 告警联系人业务实现 @Author cxy @Date 2021/11/2 14:47 */
  24 +@Service
  25 +@RequiredArgsConstructor
  26 +public class YtAlarmContactServiceImpl extends AbstractBaseService<AlarmContactMapper, AlarmContact>
  27 + implements YtAlarmContactService {
  28 + /** mapper注入 自带方法加入,继承的baseMapper */
  29 + private final AlarmContactMapper alarmContactMapper;
  30 +
  31 + /**
  32 + * 查询全部的告警联系人
  33 + *
  34 + * @param params 传参
  35 + * @return List
  36 + */
  37 + @Override
  38 + public List<AlarmContactDTO> findAll(String tenantId,Map<String, Object> params) {
  39 + // 查询当前租户
  40 + List<AlarmContact> list =
  41 + alarmContactMapper.selectList(
  42 + new QueryWrapper<AlarmContact>()
  43 + .lambda()
  44 + .eq(AlarmContact::getTenantId, tenantId)
  45 + .like(
  46 + params.containsKey("username"),
  47 + AlarmContact::getUsername,
  48 + String.valueOf(params.get("username")))
  49 + .or()
  50 + .like(
  51 + params.containsKey("department"),
  52 + AlarmContact::getOrganizationId,
  53 + String.valueOf(params.get("organizationId"))));
  54 + System.out.println(list);
  55 + return ReflectUtils.sourceToTarget(list, AlarmContactDTO.class);
  56 + }
  57 +
  58 + /**
  59 + * 新增租户
  60 + *
  61 + * @param tenantCode 租户编码
  62 + * @return alarmContactDTO
  63 + */
  64 + private LambdaQueryWrapper<AlarmContact> tenantWapper(String tenantCode) {
  65 + return new QueryWrapper<AlarmContact>().lambda().eq(AlarmContact::getTenantId, tenantCode);
  66 + }
  67 +
  68 + @Override
  69 + @Transactional
  70 + public AlarmContactDTO saveAlarmContact(String tenantId,AlarmContactDTO alarmContactDTO) {
  71 + LambdaQueryWrapper<AlarmContact> Wrapper =
  72 + tenantWapper(tenantId).eq(AlarmContact::getUsername, alarmContactDTO.getUsername());
  73 + int Count = baseMapper.selectCount(Wrapper);
  74 + if (Count > 0) {
  75 + throw new DataValidationException("department for this name is exited");
  76 + }
  77 + alarmContactDTO.setTenantId(tenantId);
  78 + AlarmContact alarmContact = alarmContactDTO.getEntity(AlarmContact.class);
  79 + int insertCount = baseMapper.insert(alarmContact);
  80 + if (insertCount > 0) {
  81 + alarmContact.copyToDTO(alarmContactDTO);
  82 + return alarmContactDTO;
  83 + }
  84 + return null;
  85 + }
  86 +
  87 + /**
  88 + * 删除告警联系人,byId
  89 + *
  90 + * @param alarmIds 通过列表id
  91 + * @return Integer
  92 + */
  93 + @Override
  94 + @Transactional
  95 + public boolean delete(String[] alarmIds) {
  96 + Set<String> ids = Set.of(alarmIds);
  97 + baseMapper.deleteBatchIds(ids);
  98 + return true;
  99 + }
  100 +
  101 + /**
  102 + * 修改告警联系人数据
  103 + *
  104 + * @param alarmContactDTO 对象
  105 + * @return Integer
  106 + */
  107 + @Override
  108 + @Transactional
  109 + public boolean update(AlarmContactDTO alarmContactDTO) {
  110 +
  111 + // 得到对象
  112 + AlarmContact alarmContact = baseMapper.selectById(alarmContactDTO.getId());
  113 + if (alarmContact == null) {
  114 + throw new DataValidationException("此数据不存在");
  115 + } else {
  116 + AlarmContact entity = alarmContactDTO.getEntity(AlarmContact.class);
  117 + System.out.println(alarmContact);
  118 + baseMapper.updateById(entity);
  119 + alarmContact.copyToDTO(alarmContactDTO);
  120 + return true;
  121 + }
  122 + }
  123 +
  124 +
  125 +
  126 + /**
  127 + * @param queryMap 查询集合
  128 + * @return PageData
  129 + */
  130 + @Override
  131 + @Transactional
  132 + public PageData<AlarmContactDTO> page(Map<String, Object> queryMap) {
  133 + // 查询分页,加入条模糊条件查询
  134 + IPage<AlarmContact> iPage =
  135 + alarmContactMapper.selectPage(
  136 + getPage(queryMap, "create_time", false),
  137 + new QueryWrapper<AlarmContact>()
  138 + .lambda()
  139 + .like(
  140 + StringUtils.isNoneBlank((String) queryMap.get("username")),
  141 + AlarmContact::getUsername,
  142 + queryMap.get("username"))
  143 + .eq(
  144 + StringUtils.isNoneBlank((String) queryMap.get("organizationId")),
  145 + AlarmContact::getOrganizationId,
  146 + queryMap.get("organizationId")));
  147 + return getPageData(iPage, AlarmContactDTO.class);
  148 + }
  149 +}
  1 +package org.thingsboard.server.dao.yunteng.impl;
  2 +
  3 +import lombok.RequiredArgsConstructor;
  4 +import lombok.extern.slf4j.Slf4j;
  5 +import org.springframework.stereotype.Service;
  6 +import org.thingsboard.server.common.data.yunteng.core.exception.FastIotException;
  7 +import org.thingsboard.server.common.data.yunteng.core.message.ErrorMessage;
  8 +import org.thingsboard.server.common.data.yunteng.dto.AlarmInfoDTO;
  9 +import org.thingsboard.server.common.data.yunteng.utils.ReflectUtils;
  10 +import org.thingsboard.server.common.data.yunteng.utils.tools.PageData;
  11 +import org.thingsboard.server.common.data.yunteng.utils.tools.TBPageData;
  12 +import org.thingsboard.server.dao.yunteng.service.YtAlarmInfoService;
  13 +
  14 +import java.util.List;
  15 +import java.util.Map;
  16 +
  17 +/** @Description 告警中心业务实现 @Author cxy @Date 2021/11/10 16:56 */
  18 +@Service
  19 +@RequiredArgsConstructor
  20 +@Slf4j
  21 +public class YtAlarmInfoServiceImpl implements YtAlarmInfoService {
  22 +// private final TBConfig tbConfig;
  23 +// private final TBConnectService tbConnectService;
  24 +//
  25 +//
  26 +//
  27 +// private LambdaQueryWrapper<YtAlarmInfo> tenantWapper(String tenantCode) {
  28 +// return new QueryWrapper<AlarmInfo>().lambda().eq(AlarmInfo::getTenantCode, tenantCode);
  29 +// }
  30 +
  31 + /**
  32 + * 封装修改
  33 + *
  34 + * @param alarmInfoDto 告警对象
  35 + * @return return alarmInfo.getDTO(AlarmInfoDto.class);
  36 + */
  37 + /* private AlarmInfoDTO update(AlarmInfoDTO alarmInfoDto) {
  38 + AlarmInfo alarmInfo = baseMapper.selectById(alarmInfoDto.getId());
  39 + if (!alarmInfo.getTenantCode().equals(SecurityContext.getCurrentUser().getTenantCode())) {
  40 + return null;
  41 + }
  42 + alarmInfoDto.copyToEntity(alarmInfo);
  43 + baseMapper.updateById(alarmInfo);
  44 + alarmInfo.copyToDTO(alarmInfoDto);
  45 + return alarmInfo.getDTO(AlarmInfoDTO.class);
  46 + }*/
  47 + /**
  48 + * 封装新增
  49 + *
  50 + * @param alarmInfoDto 告警对象
  51 + * @return alarmInfoDto
  52 + */
  53 + /*private AlarmInfoDTO insert(AlarmInfoDTO alarmInfoDto) {
  54 + String tenantCode = SecurityContext.getCurrentUser().getTenantCode();
  55 + LambdaQueryWrapper<AlarmInfo> Wrapper =
  56 + tenantWapper(tenantCode)
  57 + .eq(AlarmInfo::getStatus, alarmInfoDto.getStatus())
  58 + .eq(AlarmInfo::getSeverity, alarmInfoDto.getSeverity());
  59 + int Count = baseMapper.selectCount(Wrapper);
  60 + if (Count > 0) {
  61 + throw new DataValidationException("告警中心数据已经存在");
  62 + }
  63 + // 保存租户编码
  64 + alarmInfoDto.setTenantCode(tenantCode);
  65 + AlarmInfo alarmInfo = alarmInfoDto.getEntity(AlarmInfo.class);
  66 +
  67 + int insertCount = baseMapper.insert(alarmInfo);
  68 + if (insertCount > 0) {
  69 + alarmInfo.copyToDTO(alarmInfoDto);
  70 + return alarmInfoDto;
  71 + }
  72 +
  73 + return alarmInfoDto;
  74 + }
  75 +*/
  76 + /**
  77 + * 新增或者修改告警中心
  78 + *
  79 + * @param alarmInfoDto 告警对象
  80 + * @return alarmInfoDto
  81 + */
  82 + /*@Override
  83 + @Transactional
  84 + public AlarmInfoDTO insertOrUpdate(AlarmInfoDTO alarmInfoDto) {
  85 + // 判断为空,则新增告警信息
  86 + if (StringUtils.isBlank(alarmInfoDto.getId())) {
  87 + return insert(alarmInfoDto);
  88 + } else {
  89 + // 不为空则执行修改操作
  90 + return update(alarmInfoDto);
  91 + }
  92 + }*/
  93 +
  94 + /**
  95 + * 删除告警中心数据
  96 + *
  97 + * @param
  98 + * @return boolean
  99 + */
  100 + /* @Override
  101 + public boolean deleteAlarm(Set<String> alarmIds) {
  102 + LambdaQueryWrapper<AlarmInfo> queryWrapper =
  103 + new QueryWrapper<AlarmInfo>()
  104 + .lambda()
  105 + .eq(AlarmInfo::getTenantCode, SecurityContext.getCurrentUser().getTenantCode())
  106 + .in(AlarmInfo::getId, alarmIds);
  107 + baseMapper.delete(queryWrapper);
  108 + return true;
  109 + }*/
  110 +
  111 + /**
  112 + * 分页查询数据
  113 + *
  114 + * @param queryMap 集合
  115 + * @return PageData
  116 + */
  117 + @Override
  118 + public PageData<AlarmInfoDTO> page(Map<String, Object> queryMap) {
  119 + /* queryMap.put("tenantCode", SecurityContext.getCurrentUser().getTenantCode());
  120 + IPage<AlarmInfo> page = getPage(queryMap, FastIotConstants.DefaultOrder.CREATE_TIME,false);
  121 + IPage<AlarmInfo> alarmInfoIPage = alarmInfoBaseMapper.selectPage(page,queryMap);*/
  122 +
  123 + try {
  124 + TBPageData tbPageData = null;//tbConnectService.getAlarmInfos(queryMap).get();
  125 + System.out.println("==================tbPageData:" + tbPageData);
  126 + List<AlarmInfoDTO> alarmInfoDTOS = ReflectUtils.sourceToTarget(tbPageData.getData(), AlarmInfoDTO.class);
  127 + PageData<AlarmInfoDTO> pageData = new PageData();
  128 + pageData.setItems(alarmInfoDTOS);
  129 +
  130 + System.out.println("==================alarmInfoDTOS:" + alarmInfoDTOS);
  131 + return pageData;
  132 + } catch (Exception e) {
  133 + log.error("create TBAlarmInfo error {}", e.getMessage());
  134 + throw new FastIotException(ErrorMessage.CONNECT_TO_TB_ERROR);
  135 + }
  136 + //return getPageData(alarmInfoIPage,AlarmInfoDTO.class);
  137 + }
  138 +
  139 +
  140 +
  141 + /**
  142 + * 查询告警中心集合
  143 + *
  144 + * @param alarmInfoDto 过滤参数
  145 + * @return AlarmInfoDto
  146 + */
  147 + /*@Override
  148 + public List<AlarmInfoDTO> findAlarmInfo(AlarmInfoDTO alarmInfoDto) {
  149 + List<AlarmInfo> alarmInfoList =
  150 + baseMapper.selectList(
  151 + new QueryWrapper<AlarmInfo>()
  152 + .lambda()
  153 + .eq(AlarmInfo::getTenantCode, SecurityContext.getCurrentUser().getTenantCode())
  154 + .like(
  155 + StringUtils.isNotBlank(alarmInfoDto.getStatus()),
  156 + AlarmInfo::getStatus,
  157 + alarmInfoDto.getStatus()));
  158 + return ReflectUtils.sourceToTarget(alarmInfoList, AlarmInfoDTO.class);
  159 + }*/
  160 +
  161 + /**
  162 + * 创建调用TBAlarmInfo需要的参数
  163 + *
  164 + * @param alarmInfoDto 页面接收的参数
  165 + * @return 封装的tbAlarmInfo
  166 + */
  167 +// private TBAlarmInfo buildTbAlarmInfoFromAlarmInfoDto(AlarmInfoDTO alarmInfoDto) {
  168 +// // 新建tbAlarmInfo对象获取数据
  169 +// TBAlarmInfo tbAlarmInfo = new TBAlarmInfo();
  170 +// tbAlarmInfo.setDetails(alarmInfoDto.getDetails());
  171 +// tbAlarmInfo.setEndTs(alarmInfoDto.getEndTs());
  172 +// tbAlarmInfo.setSeverity(alarmInfoDto.getSeverity());
  173 +// tbAlarmInfo.setStatus(alarmInfoDto.getStatus());
  174 +// tbAlarmInfo.setType(alarmInfoDto.getType());
  175 +// tbAlarmInfo.setStartTs(alarmInfoDto.getStartTs());
  176 +// Id alarmInfoId = new Id();
  177 +// alarmInfoId.setEntityType(EntityType.TENANT);
  178 +// alarmInfoId.setId(alarmInfoId.getId());
  179 +// Id id = new Id();
  180 +// id.setId(alarmInfoId.getId());
  181 +// tbAlarmInfo.setTenantId(id);
  182 +// return tbAlarmInfo;
  183 +// }
  184 +
  185 + /**
  186 + * 调用TB来保存
  187 + *
  188 + * @param alarmInfoDto 告警对象
  189 + */
  190 + private void saveOrUpdateTblarmInfo(AlarmInfoDTO alarmInfoDto) throws InterruptedException {
  191 + // 启用则创建连接对象
  192 +// if (tbConfig.isEnabled()) {
  193 +// TBAlarmInfo tbAlarmInfo = buildTbAlarmInfoFromAlarmInfoDto(alarmInfoDto);
  194 +// try {
  195 +// // 得到连接对象
  196 +// TBAlarmInfo newtbAlarmInfo = tbConnectService.saveOrUpdateAlarmInfo(tbAlarmInfo).get();
  197 +// // 为空
  198 +// if (null == newtbAlarmInfo) {
  199 +// throw new FastIotException(
  200 +// ErrorMessage.CONNECT_TO_TB_ERROR.setMessage("update tb alarmInfo error"));
  201 +// }
  202 +// } catch (ExecutionException e) {
  203 +// log.error("create TBAlarmInfo error {}", e.getMessage());
  204 +// throw new FastIotException(ErrorMessage.CONNECT_TO_TB_ERROR);
  205 +// }
  206 +// }
  207 + }
  208 +}
  1 +package org.thingsboard.server.dao.yunteng.impl;
  2 +
  3 +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  4 +import lombok.RequiredArgsConstructor;
  5 +import lombok.extern.slf4j.Slf4j;
  6 +import org.apache.commons.lang3.StringUtils;
  7 +import org.springframework.stereotype.Service;
  8 +import org.springframework.transaction.annotation.Transactional;
  9 +import org.thingsboard.server.common.data.yunteng.core.exception.DataValidationException;
  10 +import org.thingsboard.server.common.data.yunteng.core.message.ErrorMessage;
  11 +import org.thingsboard.server.common.data.yunteng.dto.AlarmProfileDTO;
  12 +import org.thingsboard.server.common.data.yunteng.utils.ReflectUtils;
  13 +import org.thingsboard.server.dao.yunteng.entities.AlarmProfile;
  14 +import org.thingsboard.server.dao.yunteng.mapper.AlarmProfileMapper;
  15 +import org.thingsboard.server.dao.yunteng.service.AbstractBaseService;
  16 +import org.thingsboard.server.dao.yunteng.service.YtAlarmProfileService;
  17 +
  18 +import java.util.List;
  19 +import java.util.Optional;
  20 +import java.util.Set;
  21 +
  22 +@Service
  23 +@RequiredArgsConstructor
  24 +@Slf4j
  25 +public class YtAlarmProfileServiceImpl extends AbstractBaseService<AlarmProfileMapper, AlarmProfile>
  26 + implements YtAlarmProfileService {
  27 +
  28 + @Override
  29 + @Transactional
  30 + public AlarmProfileDTO saveOrUpdateAlarmProfile(String tenantId,AlarmProfileDTO alarmProfileDTO) {
  31 + AlarmProfile alarmProfile = new AlarmProfile();
  32 + alarmProfileDTO.copyToEntity(alarmProfile);
  33 + if (StringUtils.isEmpty(alarmProfileDTO.getId())) {
  34 + alarmProfile.setTenantId(tenantId);
  35 + baseMapper.insert(alarmProfile);
  36 + } else {
  37 + baseMapper.updateById(alarmProfile);
  38 + }
  39 + alarmProfile.copyToDTO(alarmProfileDTO);
  40 + return alarmProfileDTO;
  41 + }
  42 +
  43 + @Override
  44 + @Transactional
  45 + public boolean deleteAlarmProfile(Set<String> ids) {
  46 + return baseMapper.deleteBatchIds(ids) > 0;
  47 + }
  48 +
  49 + @Override
  50 + public AlarmProfileDTO findAlarmProfileByDeviceProfileId(String tenantId,String deviceProfileId) {
  51 + if (StringUtils.isEmpty(deviceProfileId)) {
  52 + throw new DataValidationException(ErrorMessage.INVALID_PARAMETER.getMessage());
  53 + }
  54 + List<AlarmProfile> alarmProfileList =
  55 + baseMapper.selectList(
  56 + new QueryWrapper<AlarmProfile>()
  57 + .lambda()
  58 + .eq(AlarmProfile::getDeviceProfileId, deviceProfileId)
  59 + .eq(AlarmProfile::getTenantId, tenantId));
  60 + return Optional.ofNullable(alarmProfileList)
  61 + .filter(alarmProfiles -> alarmProfiles.size() > 0)
  62 + .map(
  63 + alarmProfiles ->
  64 + ReflectUtils.sourceToTarget(alarmProfileList, AlarmProfileDTO.class).get(0))
  65 + .orElse(null);
  66 + }
  67 +}
  1 +package org.thingsboard.server.dao.yunteng.impl;
  2 +
  3 +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  4 +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  5 +import com.baomidou.mybatisplus.core.metadata.IPage;
  6 +import lombok.RequiredArgsConstructor;
  7 +import org.apache.commons.lang3.StringUtils;
  8 +import org.springframework.security.access.AccessDeniedException;
  9 +import org.springframework.stereotype.Service;
  10 +import org.springframework.transaction.annotation.Transactional;
  11 +import org.thingsboard.server.common.data.yunteng.core.exception.DataValidationException;
  12 +import org.thingsboard.server.common.data.yunteng.core.message.ErrorMessage;
  13 +import org.thingsboard.server.common.data.yunteng.dto.AlarmContactDTO;
  14 +import org.thingsboard.server.common.data.yunteng.utils.ReflectUtils;
  15 +import org.thingsboard.server.common.data.yunteng.utils.tools.PageData;
  16 +import org.thingsboard.server.dao.yunteng.entities.AlarmContact;
  17 +import org.thingsboard.server.dao.yunteng.mapper.AlarmContactMapper;
  18 +import org.thingsboard.server.dao.yunteng.service.AbstractBaseService;
  19 +import org.thingsboard.server.dao.yunteng.service.YtAlarmService;
  20 +
  21 +import java.util.List;
  22 +import java.util.Map;
  23 +import java.util.Set;
  24 +
  25 +
  26 +/**
  27 + * @Description 告警联系人业务实现
  28 + * @Author cxy
  29 + * @Date 2021/11/2 14:47
  30 + */
  31 +@Service
  32 +@RequiredArgsConstructor
  33 +public class YtAlarmServiceImpl extends AbstractBaseService<AlarmContactMapper, AlarmContact> implements YtAlarmService {
  34 + /**
  35 + * mapper注入 自带方法加入,继承的baseMapper
  36 + */
  37 +
  38 +
  39 + private final AlarmContactMapper alarmContactMapper;
  40 +
  41 + /**
  42 + * 查询全部的告警联系人
  43 + *
  44 + * @param alarmContactDTO 对象
  45 + * @return List
  46 + */
  47 + @Override
  48 + public List<AlarmContactDTO> findAll(String tenantId,AlarmContactDTO alarmContactDTO) {
  49 + //查询当前租户
  50 + List<AlarmContact> list = alarmContactMapper.selectList(
  51 +
  52 + new QueryWrapper<AlarmContact>()
  53 + .lambda().eq(AlarmContact::getTenantId,tenantId));
  54 + System.out.println(list);
  55 + return ReflectUtils.sourceToTarget(list, AlarmContactDTO.class);
  56 + }
  57 +
  58 + /**
  59 + * 新增租户
  60 + * @param tenantCode
  61 + * @return alarmContactDTO
  62 + */
  63 + private LambdaQueryWrapper<AlarmContact> tenantWapper(String tenantCode) {
  64 + return new QueryWrapper<AlarmContact>().lambda()
  65 + .eq(AlarmContact::getTenantId, tenantCode);
  66 + }
  67 + @Override
  68 + @Transactional
  69 + public AlarmContactDTO saveAlarmContact(String tenantId,AlarmContactDTO alarmContactDTO) {
  70 + LambdaQueryWrapper<AlarmContact> Wrapper = tenantWapper(tenantId)
  71 + .eq( AlarmContact::getUsername, alarmContactDTO.getUsername());
  72 + int Count = baseMapper.selectCount(Wrapper);
  73 + if (Count > 0) {
  74 + throw new DataValidationException("department for this name is exited");
  75 + }
  76 + alarmContactDTO.setTenantId(tenantId);
  77 + AlarmContact alarmContact = alarmContactDTO.getEntity(AlarmContact.class);
  78 + int insertCount = baseMapper.insert(alarmContact);
  79 + if (insertCount > 0) {
  80 + alarmContact.copyToDTO(alarmContactDTO);
  81 + return alarmContactDTO;
  82 + }
  83 + return null;
  84 + }
  85 +
  86 + /**
  87 + * 删除告警联系人,byId
  88 + *
  89 + * @param Alarmids 通过列表id
  90 + * @return Integer
  91 + */
  92 + @Override
  93 +
  94 + public boolean delete(String[] Alarmids) {
  95 +
  96 + Set<String> ids = Set.of(Alarmids);
  97 + baseMapper.deleteBatchIds(ids);
  98 +
  99 + return true;
  100 + }
  101 +
  102 + /**
  103 + * 修改告警联系人数据
  104 + *
  105 + * @param alarmContactDTO 对象
  106 + * @return Integer
  107 + */
  108 + @Override
  109 + @Transactional
  110 + public AlarmContactDTO update(boolean istenantAdmin,String tenantId,AlarmContactDTO alarmContactDTO) {
  111 + //先获取id
  112 + AlarmContact alarmContact = alarmContactMapper.selectById(alarmContactDTO.getId());
  113 + if (alarmContact == null) {
  114 + //为空则抛出无效参数的异常
  115 + throw new DataValidationException(ErrorMessage.INVALID_PARAMETER.getMessage());
  116 + } else {
  117 + if (!istenantAdmin) {
  118 + if (!tenantId.equals(alarmContactDTO.getTenantId())) {
  119 + throw new AccessDeniedException(ErrorMessage.HAVE_NO_PERMISSION.getMessage());
  120 + }
  121 + }
  122 + //复制到alarmContact
  123 + alarmContactDTO.copyToEntity(alarmContact);
  124 + baseMapper.updateById(alarmContact);
  125 + alarmContact.copyToDTO(alarmContactDTO);
  126 + }
  127 + return alarmContactDTO;
  128 + }
  129 +
  130 + /**
  131 + * @param queryMap 查询集合
  132 + * @return PageData
  133 + */
  134 + @Override
  135 + @Transactional
  136 + public PageData<AlarmContactDTO> page(Map<String, Object> queryMap) {
  137 +//查询分页,加入条模糊条件查询
  138 + IPage<AlarmContact> iPage = alarmContactMapper.selectPage(getPage(queryMap, "create_time", false),
  139 + new QueryWrapper<AlarmContact>().lambda().
  140 + like(StringUtils.isNoneBlank((CharSequence) queryMap.get("username"))
  141 + , AlarmContact::getUsername, queryMap.get("username")));
  142 +
  143 + return getPageData(iPage, AlarmContactDTO.class);
  144 + }
  145 +
  146 +
  147 +}
dao/src/main/java/org/thingsboard/server/dao/yunteng/impl/YtCommonServiceImpl.java renamed from dao/src/main/java/org/thingsboard/server/dao/yunteng/impl/CommonServiceImpl.java
@@ -4,7 +4,7 @@ import lombok.RequiredArgsConstructor; @@ -4,7 +4,7 @@ import lombok.RequiredArgsConstructor;
4 import lombok.extern.slf4j.Slf4j; 4 import lombok.extern.slf4j.Slf4j;
5 import org.apache.commons.lang3.RandomStringUtils; 5 import org.apache.commons.lang3.RandomStringUtils;
6 import org.springframework.stereotype.Service; 6 import org.springframework.stereotype.Service;
7 -import org.thingsboard.server.common.data.yunteng.common.CommonService; 7 +import org.thingsboard.server.common.data.yunteng.common.YtCommonService;
8 import org.thingsboard.server.common.data.yunteng.dto.DeviceDTO; 8 import org.thingsboard.server.common.data.yunteng.dto.DeviceDTO;
9 import org.thingsboard.server.common.data.yunteng.dto.SysDictItemDTO; 9 import org.thingsboard.server.common.data.yunteng.dto.SysDictItemDTO;
10 import org.thingsboard.server.dao.yunteng.mapper.SysDictItemMapper; 10 import org.thingsboard.server.dao.yunteng.mapper.SysDictItemMapper;
@@ -13,7 +13,7 @@ import org.thingsboard.server.dao.yunteng.service.YtDeviceService; @@ -13,7 +13,7 @@ import org.thingsboard.server.dao.yunteng.service.YtDeviceService;
13 @Slf4j 13 @Slf4j
14 @Service 14 @Service
15 @RequiredArgsConstructor 15 @RequiredArgsConstructor
16 -public class CommonServiceImpl implements CommonService { 16 +public class YtCommonServiceImpl implements YtCommonService {
17 17
18 private final SysDictItemMapper sysDictItemMapper; 18 private final SysDictItemMapper sysDictItemMapper;
19 private final YtDeviceService deviceService; 19 private final YtDeviceService deviceService;
  1 +package org.thingsboard.server.dao.yunteng.impl;
  2 +
  3 +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  4 +import com.baomidou.mybatisplus.core.metadata.IPage;
  5 +import lombok.RequiredArgsConstructor;
  6 +import lombok.extern.slf4j.Slf4j;
  7 +import org.apache.commons.lang3.StringUtils;
  8 +import org.springframework.stereotype.Service;
  9 +import org.springframework.transaction.annotation.Transactional;
  10 +import org.thingsboard.server.common.data.yunteng.core.cache.CacheUtils;
  11 +import org.thingsboard.server.common.data.yunteng.core.exception.DataValidationException;
  12 +import org.thingsboard.server.common.data.yunteng.core.message.ErrorMessage;
  13 +import org.thingsboard.server.common.data.yunteng.dto.AlarmProfileDTO;
  14 +import org.thingsboard.server.common.data.yunteng.dto.DeviceProfileDTO;
  15 +import org.thingsboard.server.common.data.yunteng.enums.TransportTypeEnum;
  16 +import org.thingsboard.server.common.data.yunteng.utils.ReflectUtils;
  17 +import org.thingsboard.server.common.data.yunteng.utils.tools.PageData;
  18 +import org.thingsboard.server.dao.yunteng.entities.YtDevice;
  19 +import org.thingsboard.server.dao.yunteng.entities.YtDeviceProfile;
  20 +import org.thingsboard.server.dao.yunteng.mapper.DeviceMapper;
  21 +import org.thingsboard.server.dao.yunteng.mapper.DeviceProfileMapper;
  22 +import org.thingsboard.server.dao.yunteng.service.AbstractBaseService;
  23 +import org.thingsboard.server.dao.yunteng.service.YtAlarmProfileService;
  24 +import org.thingsboard.server.dao.yunteng.service.YtDeviceProfileService;
  25 +
  26 +import java.util.*;
  27 +
  28 +@Service
  29 +@RequiredArgsConstructor
  30 +@Slf4j
  31 +public class YtDeviceProfileServiceImpl
  32 + extends AbstractBaseService<DeviceProfileMapper, org.thingsboard.server.dao.yunteng.entities.YtDeviceProfile>
  33 + implements YtDeviceProfileService {
  34 +
  35 + private final DeviceMapper deviceMapper;
  36 + private final YtAlarmProfileService alarmProfileService;
  37 + private final CacheUtils cacheUtils;
  38 +
  39 + @Override
  40 + @Transactional
  41 + public DeviceProfileDTO insertOrUpdate(String tenantId,DeviceProfileDTO deviceProfileDTO) {
  42 + if (StringUtils.isBlank(deviceProfileDTO.getId())) {
  43 + return insert(tenantId,deviceProfileDTO);
  44 + } else {
  45 + return update(tenantId,deviceProfileDTO);
  46 + }
  47 + }
  48 +
  49 + private DeviceProfileDTO update(String tenantId,DeviceProfileDTO deviceProfileDTO) {
  50 + YtDeviceProfile deviceProfile = baseMapper.selectById(deviceProfileDTO.getId());
  51 + if (!deviceProfile.getTenantId().equals(tenantId)) {
  52 + return null;
  53 + }
  54 + deviceProfileDTO.copyToEntity(deviceProfile);
  55 + // 如果原来不是TCP或者更新也不是TCP 那就需要check
  56 + if (!deviceProfile.getTransportType().equals(TransportTypeEnum.TCP)
  57 + || !deviceProfileDTO.getTransportType().equals(TransportTypeEnum.TCP)) {
  58 + checkDeviceProfile(deviceProfileDTO, deviceProfile);
  59 + }
  60 + baseMapper.updateById(deviceProfile);
  61 + Optional.ofNullable(deviceProfileDTO.getAlarmProfile())
  62 + .filter(alarmProfileDTO -> StringUtils.isNotBlank(alarmProfileDTO.getId()))
  63 + .map(alarmProfileDTO -> alarmProfileService.saveOrUpdateAlarmProfile(tenantId,alarmProfileDTO));
  64 + return deviceProfile.getDTO(DeviceProfileDTO.class);
  65 + }
  66 +
  67 + private DeviceProfileDTO insert(String tenantId,DeviceProfileDTO deviceProfileDTO) {
  68 + YtDeviceProfile deviceProfile = new YtDeviceProfile();
  69 + // 判断数据库是否已存在名字相同的设备配置
  70 + if (findDeviceProfile(tenantId,deviceProfileDTO).size() > 0) {
  71 + throw new DataValidationException(ErrorMessage.NAME_ALREADY_EXISTS.getMessage());
  72 + }
  73 + deviceProfileDTO.copyToEntity(deviceProfile);
  74 + deviceProfile.setTenantId(tenantId);
  75 + saveOrUpdateTBDeviceProfile(deviceProfileDTO, deviceProfile);
  76 + baseMapper.insert(deviceProfile);
  77 + Optional.ofNullable(deviceProfileDTO.getAlarmProfile())
  78 + .map(
  79 + alarmProfileDTO -> {
  80 + alarmProfileDTO.setDeviceProfileId(deviceProfile.getId());
  81 + return alarmProfileService.saveOrUpdateAlarmProfile(tenantId,alarmProfileDTO);
  82 + });
  83 + return deviceProfile.getDTO(DeviceProfileDTO.class);
  84 + }
  85 +
  86 + @Override
  87 + @Transactional
  88 + public void deleteDeviceProfiles(String tenantId,Set<String> ids) {
  89 + // check if ids bind to device
  90 + int count =
  91 + deviceMapper.selectCount(new QueryWrapper<YtDevice>().lambda().in(YtDevice::getProfileId, ids));
  92 + if (count > 0) {
  93 + throw new DataValidationException("有设备使用待删除配置,请先删除设备或者修改设备配置");
  94 + }
  95 + // TODO check if ids bind to iotfs_key_value_mapping
  96 + // 删除本地时,先删除TB的DeviceProfile
  97 + for (String id : ids) {
  98 + YtDeviceProfile deviceProfile = baseMapper.selectById(id);
  99 +// if (!tbConnectService.deleteDeviceProfile(deviceProfile.getTbProfileId()).get()) {
  100 +// log.error("delete TBProfile error {}", deviceProfile.getTbProfileId());
  101 +// throw new FastIotException(ErrorMessage.INVALID_PARAMETER);
  102 +// }
  103 + // 删除设备配置同时需要删除对应的告警配置
  104 + AlarmProfileDTO alarmProfileDTO = alarmProfileService.findAlarmProfileByDeviceProfileId(tenantId,id);
  105 + Optional.ofNullable(alarmProfileDTO)
  106 + .filter(alarm -> StringUtils.isNotBlank(alarm.getId()))
  107 + .map(
  108 + alarm -> {
  109 + Set<String> alarmList = new HashSet<>();
  110 + alarmList.add(alarm.getId());
  111 + return alarmProfileService.deleteAlarmProfile(alarmList);
  112 + });
  113 + }
  114 + baseMapper.delete(
  115 + new QueryWrapper<YtDeviceProfile>()
  116 + .lambda()
  117 + .eq(YtDeviceProfile::getTenantId, tenantId)
  118 + .in(YtDeviceProfile::getId, ids));
  119 + }
  120 +
  121 + @Override
  122 + public Optional<DeviceProfileDTO> getDeviceProfile(String tenantId,String id) {
  123 + return Optional.ofNullable(
  124 + baseMapper.selectOne(
  125 + new QueryWrapper<YtDeviceProfile>()
  126 + .lambda()
  127 + .eq(
  128 + YtDeviceProfile::getTenantId,
  129 + tenantId)
  130 + .eq(YtDeviceProfile::getId, id)))
  131 + .map(deviceProfile -> deviceProfile.getDTO(DeviceProfileDTO.class));
  132 + }
  133 +
  134 + @Override
  135 + public PageData<DeviceProfileDTO> page(String tenantId,Map<String, Object> queryMap) {
  136 + String transportType = (String) queryMap.get("transportType");
  137 + TransportTypeEnum type = null;
  138 + if (StringUtils.isNotBlank(transportType)) {
  139 + type =
  140 + Arrays.stream(TransportTypeEnum.values())
  141 + .filter(s -> s.name().equalsIgnoreCase(transportType))
  142 + .findAny()
  143 + .orElse(null);
  144 + }
  145 + IPage<YtDeviceProfile> deviceIPage =
  146 + baseMapper.selectPage(
  147 + getPage(queryMap, "create_time", false),
  148 + new QueryWrapper<YtDeviceProfile>()
  149 + .lambda()
  150 + .eq(YtDeviceProfile::getTenantId, tenantId)
  151 + .eq(type != null, YtDeviceProfile::getTransportType, type)
  152 + .like(
  153 + StringUtils.isNotBlank((String) queryMap.get("name")),
  154 + YtDeviceProfile::getName,
  155 + String.valueOf(queryMap.get("name"))));
  156 + return getPageData(deviceIPage, DeviceProfileDTO.class);
  157 + }
  158 +
  159 + @Override
  160 + public List<DeviceProfileDTO> findDeviceProfile(String tenantId,DeviceProfileDTO deviceProfileDTO) {
  161 + List<YtDeviceProfile> deviceProfileList =
  162 + baseMapper.selectList(
  163 + new QueryWrapper<YtDeviceProfile>()
  164 + .lambda()
  165 + .eq(YtDeviceProfile::getTenantId, tenantId)
  166 + .like(
  167 + StringUtils.isNotBlank(deviceProfileDTO.getName()),
  168 + YtDeviceProfile::getName,
  169 + deviceProfileDTO.getName()));
  170 + return ReflectUtils.sourceToTarget(deviceProfileList, DeviceProfileDTO.class);
  171 + }
  172 +
  173 + /**
  174 + * 构造调用TBDeviceProfile需要的参数
  175 + *
  176 + * @param deviceProfileDTO 页面接收的参数
  177 + * @return 封装好的TBDeviceProfile
  178 +
  179 + private TBDeviceProfile buildTbDeviceProfileFromDeviceProfileDTO(
  180 + DeviceProfileDTO deviceProfileDTO) {
  181 + TBDeviceProfile tbDeviceProfile = new TBDeviceProfile();
  182 + if (StringUtils.isNotBlank(deviceProfileDTO.getId())) {
  183 + List<DeviceProfileDTO> deviceProfile = baseMapper.getDeviceProfileInfo(deviceProfileDTO);
  184 + tbDeviceProfile.setId(
  185 + new Id(EntityType.DEVICE_PROFILE, deviceProfile.get(0).getTbProfileId()));
  186 + }
  187 + tbDeviceProfile.setName(deviceProfileDTO.getName());
  188 + // 传输类型默认都是Default
  189 + tbDeviceProfile.setTransportType(TransportTypeEnum.DEFAULT.name());
  190 + // 获取当前租户的默认规则链
  191 + tbDeviceProfile.setDefaultRuleChainId(
  192 + new Id(EntityType.RULE_CHAIN, getCurrentUserDefaultRuleChains()));
  193 + tbDeviceProfile.setDefaultQueueName(TbConnectConstant.RuleEngine.MAIN);
  194 + tbDeviceProfile.setProvisionType(ProvisionTypeEnum.DISABLED.name());
  195 + tbDeviceProfile.setCreatedTime(
  196 + LocalDateTime.now().toInstant(ZoneOffset.of("+8")).toEpochMilli());
  197 + TBDeviceProfile.DeviceProfileData deviceProfileData = new TBDeviceProfile.DeviceProfileData();
  198 + deviceProfileData.setConfiguration(new TBDeviceProfile.DeviceProfileConfiguration());
  199 + deviceProfileData.setProvisionConfiguration(
  200 + new TBDeviceProfile.DeviceProfileProvisionConfiguration());
  201 + deviceProfileData.setTransportConfiguration(
  202 + new TBDeviceProfile.DeviceProfileTransportConfiguration());
  203 + if (null != deviceProfileDTO.getAlarms()) {
  204 + List<TBDeviceProfile.DeviceProfileAlarm> list = new ArrayList<>();
  205 + TBDeviceProfile.DeviceProfileAlarm deviceProfileAlarm = JacksonUtil.convertValue(deviceProfileDTO.getAlarms(),TBDeviceProfile.DeviceProfileAlarm.class);
  206 + list.add(deviceProfileAlarm);
  207 + deviceProfileData.setAlarms(list);
  208 + }
  209 + tbDeviceProfile.setProfileData(deviceProfileData);
  210 + return tbDeviceProfile;
  211 + } */
  212 +
  213 + /**
  214 + * 检查设备配置然后进行相应的操作
  215 + *
  216 + * @param target 用户新选择的配置
  217 + * @param source 用户以前选择的配置
  218 + */
  219 + private void checkDeviceProfile(DeviceProfileDTO target, YtDeviceProfile source) {
  220 + // 原来是TCP => Default、MQTT或其他 需要新增TB设备配置文件
  221 + if (source.getTransportType().equals(TransportTypeEnum.TCP)
  222 + && !target.getTransportType().equals(TransportTypeEnum.TCP)) {
  223 + saveOrUpdateTBDeviceProfile(target, source);
  224 + }
  225 + if (!source.getTransportType().equals(TransportTypeEnum.TCP)) {
  226 + // 原来不是TCP => 更新值或者更换TB设备配置文件
  227 + if (!target.getTransportType().equals(TransportTypeEnum.TCP)) {
  228 + // 目标不是TCP则进行修改名称
  229 + saveOrUpdateTBDeviceProfile(target, source);
  230 + } else {
  231 + // 目标是TCP则删除原来的TBDeviceProfile
  232 +// tbConnectService.deleteDeviceProfile(source.getTbProfileId());
  233 + source.setTbProfileId(null);
  234 + }
  235 + }
  236 + }
  237 +
  238 + /**
  239 + * 调用TB保存设备配置
  240 + *
  241 + * @param target 用户新选择的配置
  242 + * @param source 用户以前选择的配置
  243 + */
  244 + private void saveOrUpdateTBDeviceProfile(DeviceProfileDTO target, YtDeviceProfile source) {
  245 +// if (tbConfig.isEnabled()) {
  246 +// try {
  247 +// TBDeviceProfile tbDeviceProfile = buildTbDeviceProfileFromDeviceProfileDTO(target);
  248 +// tbDeviceProfile = tbConnectService.saveOrUpdateDeviceProfile(tbDeviceProfile).get();
  249 +// if (null == tbDeviceProfile) {
  250 +// throw new FastIotException(ErrorMessage.INVALID_PARAMETER);
  251 +// }
  252 +// source.setTbProfileId(tbDeviceProfile.getId().getId());
  253 +// } catch (ExecutionException | InterruptedException e) {
  254 +// log.error("create TBDeviceProfile error {}", e.getMessage());
  255 +// throw new FastIotException(ErrorMessage.CONNECT_TO_TB_ERROR);
  256 +// }
  257 +// }
  258 + }
  259 +
  260 + private String getCurrentUserDefaultRuleChains() {
  261 + String defaultId;
  262 +// Optional<String> result =
  263 +// cacheUtils
  264 +// .get(
  265 +// FastIotConstants.CacheConfigKey.DEFAULT_RULE_CHAIN,
  266 +// SecurityContext.getCurrentUser().getTenantCode());
  267 +// if (null != result && result.isPresent()) {
  268 +// return result.get();
  269 +// }
  270 +// try {
  271 +// if (tbConfig.isEnabled()) {
  272 +// TBPageData tbPageData = tbConnectService.getRuleChains(10, 0).get();
  273 +// if (null == tbPageData || null == tbPageData.getData()) {
  274 +// throw new FastIotException(ErrorMessage.NONE_DEFAULT_RULE_CHAIN);
  275 +// }
  276 +// TBPageData convert = new TBPageData().getPageData(tbPageData,TBRuleChain.class);
  277 +// List<TBRuleChain> data = (List<TBRuleChain>) convert.getData();
  278 +// for (TBRuleChain tbRuleChain : data) {
  279 +// if (tbRuleChain.isRoot()) {
  280 +// defaultId = tbRuleChain.getId().getId();
  281 +// cacheUtils.put(
  282 +// FastIotConstants.CacheConfigKey.DEFAULT_RULE_CHAIN,
  283 +// SecurityContext.getCurrentUser().getTenantCode(),
  284 +// defaultId);
  285 +// return defaultId;
  286 +// }
  287 +// }
  288 +// }
  289 +// } catch (ExecutionException | InterruptedException e) {
  290 +// throw new FastIotException(ErrorMessage.CONNECT_TO_TB_ERROR);
  291 +// }
  292 + return null;
  293 + }
  294 +}
@@ -9,7 +9,6 @@ import lombok.extern.slf4j.Slf4j; @@ -9,7 +9,6 @@ import lombok.extern.slf4j.Slf4j;
9 import org.apache.commons.lang3.StringUtils; 9 import org.apache.commons.lang3.StringUtils;
10 import org.springframework.stereotype.Service; 10 import org.springframework.stereotype.Service;
11 import org.springframework.transaction.annotation.Transactional; 11 import org.springframework.transaction.annotation.Transactional;
12 -import org.thingsboard.server.common.data.DeviceProfile;  
13 import org.thingsboard.server.common.data.yunteng.constant.FastIotConstants; 12 import org.thingsboard.server.common.data.yunteng.constant.FastIotConstants;
14 import org.thingsboard.server.common.data.yunteng.constant.ModelConstants; 13 import org.thingsboard.server.common.data.yunteng.constant.ModelConstants;
15 import org.thingsboard.server.common.data.yunteng.core.exception.DataValidationException; 14 import org.thingsboard.server.common.data.yunteng.core.exception.DataValidationException;
@@ -22,6 +21,7 @@ import org.thingsboard.server.common.data.yunteng.utils.ReflectUtils; @@ -22,6 +21,7 @@ import org.thingsboard.server.common.data.yunteng.utils.ReflectUtils;
22 import org.thingsboard.server.common.data.yunteng.utils.tools.PageData; 21 import org.thingsboard.server.common.data.yunteng.utils.tools.PageData;
23 import org.thingsboard.server.dao.yunteng.entities.Organization; 22 import org.thingsboard.server.dao.yunteng.entities.Organization;
24 import org.thingsboard.server.dao.yunteng.entities.YtDevice; 23 import org.thingsboard.server.dao.yunteng.entities.YtDevice;
  24 +import org.thingsboard.server.dao.yunteng.entities.YtDeviceProfile;
25 import org.thingsboard.server.dao.yunteng.mapper.DeviceMapper; 25 import org.thingsboard.server.dao.yunteng.mapper.DeviceMapper;
26 import org.thingsboard.server.dao.yunteng.mapper.DeviceProfileMapper; 26 import org.thingsboard.server.dao.yunteng.mapper.DeviceProfileMapper;
27 import org.thingsboard.server.dao.yunteng.mapper.OrganizationMapper; 27 import org.thingsboard.server.dao.yunteng.mapper.OrganizationMapper;
@@ -56,7 +56,7 @@ public class YtDeviceServiceImpl extends AbstractBaseService<DeviceMapper, YtDev @@ -56,7 +56,7 @@ public class YtDeviceServiceImpl extends AbstractBaseService<DeviceMapper, YtDev
56 56
57 private DeviceDTO update(String tenantId,DeviceDTO deviceDTO) { 57 private DeviceDTO update(String tenantId,DeviceDTO deviceDTO) {
58 YtDevice device = baseMapper.selectById(deviceDTO.getId()); 58 YtDevice device = baseMapper.selectById(deviceDTO.getId());
59 - if (!device.getTenantCode().equals(tenantId)) { 59 + if (!device.getTenantId().equals(tenantId)) {
60 return null; 60 return null;
61 } 61 }
62 validateDeviceDTO(tenantId,deviceDTO, false); 62 validateDeviceDTO(tenantId,deviceDTO, false);
@@ -208,7 +208,7 @@ public class YtDeviceServiceImpl extends AbstractBaseService<DeviceMapper, YtDev @@ -208,7 +208,7 @@ public class YtDeviceServiceImpl extends AbstractBaseService<DeviceMapper, YtDev
208 } 208 }
209 } 209 }
210 // 验证数据profileId的正确性 210 // 验证数据profileId的正确性
211 - DeviceProfile deviceProfile = deviceProfileMapper.selectById(deviceDTO.getProfileId()); 211 + YtDeviceProfile deviceProfile = deviceProfileMapper.selectById(deviceDTO.getProfileId());
212 Organization organization = organizationMapper.selectById(deviceDTO.getOrganizationId()); 212 Organization organization = organizationMapper.selectById(deviceDTO.getOrganizationId());
213 if (null == deviceProfile || null == organization) { 213 if (null == deviceProfile || null == organization) {
214 throw new DataValidationException(ErrorMessage.INVALID_PARAMETER.getMessage()); 214 throw new DataValidationException(ErrorMessage.INVALID_PARAMETER.getMessage());
@@ -217,7 +217,7 @@ public class YtDeviceServiceImpl extends AbstractBaseService<DeviceMapper, YtDev @@ -217,7 +217,7 @@ public class YtDeviceServiceImpl extends AbstractBaseService<DeviceMapper, YtDev
217 } else if (!deviceProfile 217 } else if (!deviceProfile
218 .getTenantId() 218 .getTenantId()
219 .equals(tenantId) 219 .equals(tenantId)
220 - || !organization.getTenantCode().equals(tenantId)) { 220 + || !organization.getTenantId().equals(tenantId)) {
221 throw new DataValidationException(ErrorMessage.TENANT_MISMATCHING.getMessage()); 221 throw new DataValidationException(ErrorMessage.TENANT_MISMATCHING.getMessage());
222 } 222 }
223 } 223 }
@@ -246,7 +246,7 @@ public class YtDeviceServiceImpl extends AbstractBaseService<DeviceMapper, YtDev @@ -246,7 +246,7 @@ public class YtDeviceServiceImpl extends AbstractBaseService<DeviceMapper, YtDev
246 ModelConstants.TablePropertyMapping.CREATE_TIME, 246 ModelConstants.TablePropertyMapping.CREATE_TIME,
247 ModelConstants.TablePropertyMapping.UPDATE, 247 ModelConstants.TablePropertyMapping.UPDATE,
248 ModelConstants.TablePropertyMapping.UPDATE_TIME); 248 ModelConstants.TablePropertyMapping.UPDATE_TIME);
249 - device.setTenantCode(tenantId); 249 + device.setTenantId(tenantId);
250 // First insert into TB 250 // First insert into TB
251 // if (tbConfig.isEnabled()) { 251 // if (tbConfig.isEnabled()) {
252 // Device tbDevice = buildTbDeviceFromDeviceDTO(deviceDTO); 252 // Device tbDevice = buildTbDeviceFromDeviceDTO(deviceDTO);
@@ -316,7 +316,7 @@ public class YtDeviceServiceImpl extends AbstractBaseService<DeviceMapper, YtDev @@ -316,7 +316,7 @@ public class YtDeviceServiceImpl extends AbstractBaseService<DeviceMapper, YtDev
316 LambdaQueryWrapper<YtDevice> queryWrapper = 316 LambdaQueryWrapper<YtDevice> queryWrapper =
317 new QueryWrapper<YtDevice>() 317 new QueryWrapper<YtDevice>()
318 .lambda() 318 .lambda()
319 - .eq(YtDevice::getTenantCode, tenantId) 319 + .eq(YtDevice::getTenantId, tenantId)
320 .in(YtDevice::getId, ids); 320 .in(YtDevice::getId, ids);
321 321
322 List<String> tbDeviceIds = 322 List<String> tbDeviceIds =
@@ -336,7 +336,7 @@ public class YtDeviceServiceImpl extends AbstractBaseService<DeviceMapper, YtDev @@ -336,7 +336,7 @@ public class YtDeviceServiceImpl extends AbstractBaseService<DeviceMapper, YtDev
336 baseMapper.selectOne( 336 baseMapper.selectOne(
337 new QueryWrapper<YtDevice>() 337 new QueryWrapper<YtDevice>()
338 .lambda() 338 .lambda()
339 - .eq(YtDevice::getTenantCode, tenantId) 339 + .eq(YtDevice::getTenantId, tenantId)
340 .eq(YtDevice::getId, id))) 340 .eq(YtDevice::getId, id)))
341 .map(device -> device.getDTO(DeviceDTO.class)); 341 .map(device -> device.getDTO(DeviceDTO.class));
342 } 342 }
@@ -374,7 +374,7 @@ public class YtDeviceServiceImpl extends AbstractBaseService<DeviceMapper, YtDev @@ -374,7 +374,7 @@ public class YtDeviceServiceImpl extends AbstractBaseService<DeviceMapper, YtDev
374 StringUtils.isNotBlank(deviceDTO.getDeviceToken()), 374 StringUtils.isNotBlank(deviceDTO.getDeviceToken()),
375 YtDevice::getDeviceToken, 375 YtDevice::getDeviceToken,
376 deviceDTO.getDeviceToken()) 376 deviceDTO.getDeviceToken())
377 - .eq(true, YtDevice::getTenantCode, tenantId) 377 + .eq(true, YtDevice::getTenantId, tenantId)
378 .like( 378 .like(
379 StringUtils.isNotBlank(deviceDTO.getName()), 379 StringUtils.isNotBlank(deviceDTO.getName()),
380 YtDevice::getName, 380 YtDevice::getName,
  1 +package org.thingsboard.server.dao.yunteng.impl;
  2 +
  3 +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  4 +import org.apache.commons.lang3.StringUtils;
  5 +import org.springframework.stereotype.Service;
  6 +import org.springframework.transaction.annotation.Transactional;
  7 +import org.thingsboard.server.common.data.yunteng.core.exception.DataValidationException;
  8 +import org.thingsboard.server.common.data.yunteng.core.message.ErrorMessage;
  9 +import org.thingsboard.server.common.data.yunteng.dto.DeleteDTO;
  10 +import org.thingsboard.server.common.data.yunteng.dto.DeviceTypeDTO;
  11 +import org.thingsboard.server.common.data.yunteng.utils.ReflectUtils;
  12 +import org.thingsboard.server.common.data.yunteng.utils.tree.TreeUtils;
  13 +import org.thingsboard.server.dao.yunteng.entities.DeviceType;
  14 +import org.thingsboard.server.dao.yunteng.mapper.DeviceTypeMapper;
  15 +import org.thingsboard.server.dao.yunteng.service.AbstractBaseService;
  16 +import org.thingsboard.server.dao.yunteng.service.YtDeviceTypeService;
  17 +
  18 +import java.util.List;
  19 +
  20 +@Service
  21 +public class YtDeviceTypeServiceImpl extends AbstractBaseService<DeviceTypeMapper, DeviceType>
  22 + implements YtDeviceTypeService {
  23 + @Override
  24 + public List<DeviceTypeDTO> getDeviceTypeTree(String tenantId) {
  25 + if (StringUtils.isEmpty(tenantId)) {
  26 + if (StringUtils.isEmpty(tenantId)) {
  27 + throw new DataValidationException(ErrorMessage.INVALID_PARAMETER.getMessage());
  28 + }
  29 + }
  30 + List<DeviceType> typeList = baseMapper.selectList(
  31 + new QueryWrapper<DeviceType>()
  32 + .lambda()
  33 + .eq(StringUtils.isNoneEmpty(tenantId), DeviceType::getTenantId, tenantId));
  34 + return TreeUtils.buildTree(ReflectUtils.sourceToTarget(typeList,DeviceTypeDTO.class));
  35 + }
  36 +
  37 + @Override
  38 + @Transactional
  39 + public DeviceTypeDTO saveDeviceTye(String tenantId,DeviceTypeDTO deviceTypeDTO) {
  40 + deviceTypeDTO.setTenantId(tenantId);
  41 + DeviceType deviceType = deviceTypeDTO.getEntity(DeviceType.class);
  42 + int insertCount = baseMapper.insert(deviceType);
  43 + if (insertCount > 0) {
  44 + deviceType.copyToDTO(deviceTypeDTO);
  45 + return deviceTypeDTO;
  46 + }
  47 + return null;
  48 + }
  49 +
  50 + @Override
  51 + public DeviceTypeDTO updateDeviceType(DeviceTypeDTO deviceTypeDTO) {
  52 + DeviceType deviceType = deviceTypeDTO.getEntity(DeviceType.class);
  53 + int insertCount = baseMapper.updateById(deviceType);
  54 + if (insertCount > 0) {
  55 + deviceType.copyToDTO(deviceTypeDTO);
  56 + return deviceTypeDTO;
  57 + }
  58 + return null;
  59 + }
  60 +
  61 + @Override
  62 + public boolean deleteDeviceType(DeleteDTO deleteDTO) {
  63 + return baseMapper.deleteBatchIds(deleteDTO.getIds()) > 0;
  64 + }
  65 +}
  1 +package org.thingsboard.server.dao.yunteng.impl;
  2 +
  3 +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  4 +import com.baomidou.mybatisplus.core.metadata.IPage;
  5 +import lombok.RequiredArgsConstructor;
  6 +import lombok.extern.slf4j.Slf4j;
  7 +import org.springframework.stereotype.Service;
  8 +import org.springframework.transaction.annotation.Transactional;
  9 +import org.thingsboard.server.common.data.yunteng.dto.MailLogDTO;
  10 +import org.thingsboard.server.common.data.yunteng.utils.tools.PageData;
  11 +import org.thingsboard.server.dao.yunteng.entities.MailLog;
  12 +import org.thingsboard.server.dao.yunteng.mapper.MaiLogMapper;
  13 +import org.thingsboard.server.dao.yunteng.service.AbstractBaseService;
  14 +import org.thingsboard.server.dao.yunteng.service.YtMailLogService;
  15 +
  16 +import java.util.Map;
  17 +import java.util.Set;
  18 +
  19 +@Slf4j
  20 +@Service
  21 +@RequiredArgsConstructor
  22 +public class YtMailLogServiceImpl extends AbstractBaseService<MaiLogMapper, MailLog>
  23 + implements YtMailLogService {
  24 + @Override
  25 + public PageData<MailLogDTO> page(String tenantId,Map<String, Object> queryMap) {
  26 + IPage<MailLog> configIPage =
  27 + baseMapper.selectPage(
  28 + getPage(queryMap, "send_time", false),
  29 + new QueryWrapper<MailLog>()
  30 + .lambda()
  31 + .eq(MailLog::getTenantId, tenantId)
  32 + .like(
  33 + queryMap.get("emailSubject") != null,
  34 + MailLog::getEmailSubject,
  35 + String.valueOf(queryMap.get("emailSubject")))
  36 + .between(
  37 + queryMap.get("startTime") != null && queryMap.get("endTime") != null,
  38 + MailLog::getSendTime,
  39 + queryMap.get("startTime"),
  40 + queryMap.get("endTime")));
  41 + return getPageData(configIPage, MailLogDTO.class);
  42 + }
  43 +
  44 + @Override
  45 + @Transactional
  46 + public boolean deleteMailLog(Set<String> ids) {
  47 + return baseMapper.deleteBatchIds(ids) > 0;
  48 + }
  49 +}
  1 +package org.thingsboard.server.dao.yunteng.impl;
  2 +
  3 +import com.fasterxml.jackson.databind.JsonNode;
  4 +import jakarta.mail.*;
  5 +import jakarta.mail.internet.InternetAddress;
  6 +import jakarta.mail.internet.MimeBodyPart;
  7 +import jakarta.mail.internet.MimeMessage;
  8 +import jakarta.mail.internet.MimeMultipart;
  9 +import lombok.RequiredArgsConstructor;
  10 +import lombok.extern.slf4j.Slf4j;
  11 +import org.springframework.stereotype.Service;
  12 +import org.thingsboard.server.common.data.yunteng.config.email.EmailConfiguration;
  13 +import org.thingsboard.server.common.data.yunteng.constant.FastIotConstants;
  14 +import org.thingsboard.server.common.data.yunteng.core.exception.DataValidationException;
  15 +import org.thingsboard.server.common.data.yunteng.dto.request.EmailReqDTO;
  16 +import org.thingsboard.server.common.data.yunteng.enums.EmailFormatEnum;
  17 +import org.thingsboard.server.common.data.yunteng.enums.ResponseCodeEnum;
  18 +import org.thingsboard.server.common.data.yunteng.utils.JacksonUtil;
  19 +import org.thingsboard.server.dao.yunteng.entities.MailLog;
  20 +import org.thingsboard.server.dao.yunteng.entities.MessageConfig;
  21 +import org.thingsboard.server.dao.yunteng.entities.MessageTemplate;
  22 +import org.thingsboard.server.dao.yunteng.mapper.MaiLogMapper;
  23 +import org.thingsboard.server.dao.yunteng.mapper.MessageConfigMapper;
  24 +import org.thingsboard.server.dao.yunteng.mapper.MessageTemplateMapper;
  25 +import org.thingsboard.server.dao.yunteng.service.YtMailService;
  26 +
  27 +import java.io.File;
  28 +import java.io.IOException;
  29 +import java.time.LocalDateTime;
  30 +import java.util.Date;
  31 +import java.util.Properties;
  32 +
  33 +@Slf4j
  34 +@Service
  35 +@RequiredArgsConstructor
  36 +public class YtMailServiceImpl implements YtMailService {
  37 +
  38 + private final MessageTemplateMapper messageTemplateMapper;
  39 +
  40 + private final MessageConfigMapper messageConfigMapper;
  41 +
  42 + private final MaiLogMapper maiLogMapper;
  43 +
  44 + @Override
  45 + public boolean sendEmail(EmailReqDTO emailReqDTO) {
  46 + boolean result =false;
  47 + //查询模板信息
  48 + MessageTemplate messageTemplate = messageTemplateMapper.selectById(emailReqDTO.getId());
  49 + if(null == messageTemplate){
  50 + throw new DataValidationException("invalid parameters");
  51 + }
  52 + MessageConfig messageConfig =messageConfigMapper.selectById(messageTemplate.getMessageConfigId());
  53 + if (messageConfig.getStatus() != FastIotConstants.StateValue.ENABLE) {
  54 + throw new DataValidationException("messageConfig is disable");
  55 + }
  56 + JsonNode configNode = messageConfig.getConfig();
  57 + EmailConfiguration emailConfiguration = JacksonUtil.convertValue(configNode, EmailConfiguration.class);
  58 + if(emailConfiguration !=null){
  59 + Properties props = new Properties();
  60 + // 要连接的SMTP服务器
  61 + props.put("mail.smtp.host", emailConfiguration.getHost());
  62 + // 如果 connect()方法未明确指定一个,则要连接的SMTP服务器端口。默认为25
  63 + props.put("mail.smtp.port", emailConfiguration.getPort());
  64 + props.put("mail.smtp.user", emailConfiguration.getUsername());
  65 + props.put("mail.smtp.pass", emailConfiguration.getPassword());
  66 + props.put("mail.smtp.ssl.enable", "true");
  67 + // 如果为true,请尝试使用AUTH命令对用户进行身份验证。默认为false。
  68 + props.put("mail.smtp.auth", "true");
  69 + // 使用ssl
  70 + props.put("mail.smtp.ssl.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
  71 + props.put("mail.smtp.socketFactory.port",emailConfiguration.getPort());
  72 +
  73 + try {
  74 + Session session =
  75 + Session.getInstance(
  76 + props,
  77 + new Authenticator() {
  78 + @Override
  79 + protected PasswordAuthentication getPasswordAuthentication() {
  80 + if (Boolean.parseBoolean(props.getProperty("mail.smtp.auth"))) {
  81 + // 需要认证
  82 + return new PasswordAuthentication(
  83 + props.getProperty("mail.smtp.user"),
  84 + props.getProperty("mail.smtp.pass"));
  85 + }
  86 + return super.getPasswordAuthentication();
  87 + }
  88 + });
  89 +
  90 + MimeMessage mimeMessage = new MimeMessage(session);
  91 + // 邮件发送人
  92 + mimeMessage.setFrom(new InternetAddress(emailConfiguration.getUsername()));
  93 + setRecipients(emailReqDTO,mimeMessage);
  94 + // 邮件主题
  95 + mimeMessage.setSubject(emailReqDTO.getSubject());
  96 + // 邮件内容部分
  97 + MimeBodyPart mimeBodyPart = new MimeBodyPart();
  98 + String chartSet = "text/html;charset=utf-8";
  99 + if (emailReqDTO.getEmailFormatEnum().equals(EmailFormatEnum.TEXT.name())) {
  100 + mimeBodyPart.setText(emailReqDTO.getBody());
  101 + } else {
  102 + mimeBodyPart.setContent(emailReqDTO.getBody(), chartSet);
  103 + }
  104 + Multipart multipart = new MimeMultipart();
  105 + multipart.addBodyPart(mimeBodyPart);
  106 +
  107 + //如果有附件就添加附件
  108 + if(null != emailReqDTO.getFiles() && emailReqDTO.getFiles().length>0){
  109 + addFiles(multipart,emailReqDTO.getFiles());
  110 + }
  111 + mimeMessage.setContent(multipart);
  112 + mimeMessage.setSentDate(new Date());
  113 + Transport.send(mimeMessage);
  114 + result = true;
  115 + } catch (Exception exception){
  116 + log.error("send email failed",exception);
  117 + }
  118 + MailLog mailLog = new MailLog();
  119 + mailLog.setEmailFrom(emailConfiguration.getUsername());
  120 + mailLog.setEmailTo(JacksonUtil.toJsonNode(JacksonUtil.toString(emailReqDTO.getTo())));
  121 + mailLog.setEmailCc(JacksonUtil.toJsonNode(JacksonUtil.toString(emailReqDTO.getCc())));
  122 + mailLog.setEmailBcc(JacksonUtil.toJsonNode(JacksonUtil.toString(emailReqDTO.getBcc())));
  123 + mailLog.setEmailSubject(emailReqDTO.getSubject());
  124 + mailLog.setEmailBody(emailReqDTO.getBody());
  125 + mailLog.setTenantId(messageTemplate.getTenantId());
  126 + mailLog.setSendTime(LocalDateTime.now());
  127 + mailLog.setMessageTemplateId(messageTemplate.getId());
  128 + mailLog.setStatus(result ? ResponseCodeEnum.SUCCESS.name() : ResponseCodeEnum.FAILED.name());
  129 + mailLog.setRemark(emailReqDTO.getRemark());
  130 + mailLog.setTemplatePurpose(emailReqDTO.getTemplatePurpose());
  131 + maiLogMapper.insert(mailLog);
  132 + return result;
  133 + }
  134 + return false;
  135 + }
  136 +
  137 + /**
  138 + * 添加接收人、抄送人、密送人
  139 + * @param emailReqDTO 邮件参数
  140 + * @param mimeMessage 邮件消息体
  141 + * @throws MessagingException 消息发送失败异常
  142 + */
  143 + private void setRecipients(EmailReqDTO emailReqDTO, MimeMessage mimeMessage)
  144 + throws MessagingException {
  145 + // 邮件接收人多个
  146 + InternetAddress[] toAddress = addInternetAddress(emailReqDTO.getTo());
  147 + mimeMessage.setRecipients(Message.RecipientType.TO, toAddress);
  148 +
  149 + if(null != emailReqDTO.getCc() && emailReqDTO.getCc().length>0){
  150 + // 邮件抄送人多个
  151 + InternetAddress[] ccAddress = addInternetAddress(emailReqDTO.getCc());
  152 + mimeMessage.setRecipients(Message.RecipientType.CC, ccAddress);
  153 + }
  154 + if(null != emailReqDTO.getBcc() &&emailReqDTO.getBcc().length>0){
  155 + // 邮件密送人多个
  156 + InternetAddress[] bccAddress = addInternetAddress(emailReqDTO.getBcc());
  157 + mimeMessage.setRecipients(Message.RecipientType.BCC, bccAddress);
  158 + }
  159 + }
  160 +
  161 + /**
  162 + * 添加收件人地址
  163 + * @param content 接收人、抄送人、密送人数组
  164 + * @return 添加收件人地址
  165 + * @throws MessagingException 地址异常
  166 + */
  167 + private InternetAddress[] addInternetAddress(String[] content)
  168 + throws MessagingException {
  169 + InternetAddress[] address = new InternetAddress[content.length];
  170 + for (int i = 0,j = content.length;i<j; i++) {
  171 + address[i] = new InternetAddress(content[i]);
  172 + }
  173 + return address;
  174 + }
  175 +
  176 + /**
  177 + * 添加附件
  178 + * @param multipart Multipart
  179 + * @param files 附件
  180 + * @throws MessagingException 消息发送失败异常
  181 + * @throws IOException IO流异常
  182 + */
  183 + private void addFiles(Multipart multipart,File[] files) throws MessagingException, IOException {
  184 + for (File file : files) {
  185 + MimeBodyPart attachment = new MimeBodyPart();
  186 + attachment.attachFile(file);
  187 + multipart.addBodyPart(attachment);
  188 + }
  189 + }
  190 +}
  1 +package org.thingsboard.server.dao.yunteng.impl;
  2 +
  3 +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  4 +import com.baomidou.mybatisplus.core.metadata.IPage;
  5 +import lombok.RequiredArgsConstructor;
  6 +import lombok.extern.slf4j.Slf4j;
  7 +import org.apache.commons.lang3.StringUtils;
  8 +import org.springframework.stereotype.Service;
  9 +import org.springframework.transaction.annotation.Transactional;
  10 +import org.thingsboard.server.common.data.yunteng.constant.FastIotConstants;
  11 +import org.thingsboard.server.common.data.yunteng.core.exception.DataValidationException;
  12 +import org.thingsboard.server.common.data.yunteng.dto.MessageConfigDTO;
  13 +import org.thingsboard.server.common.data.yunteng.utils.ReflectUtils;
  14 +import org.thingsboard.server.common.data.yunteng.utils.tools.PageData;
  15 +import org.thingsboard.server.dao.yunteng.entities.MessageConfig;
  16 +import org.thingsboard.server.dao.yunteng.mapper.MessageConfigMapper;
  17 +import org.thingsboard.server.dao.yunteng.service.AbstractBaseService;
  18 +import org.thingsboard.server.dao.yunteng.service.YtMessageConfigService;
  19 +
  20 +import java.util.List;
  21 +import java.util.Map;
  22 +import java.util.Set;
  23 +
  24 +@Service
  25 +@Slf4j
  26 +@RequiredArgsConstructor
  27 +public class YtMessageConfigServiceImpl
  28 + extends AbstractBaseService<MessageConfigMapper, MessageConfig>
  29 + implements YtMessageConfigService {
  30 +
  31 + @Override
  32 + public PageData<MessageConfigDTO> page(String tenantId,Map<String, Object> queryMap) {
  33 + IPage<MessageConfig> configIPage =
  34 + baseMapper.selectPage(
  35 + getPage(queryMap, "create_time", false),
  36 + new QueryWrapper<MessageConfig>()
  37 + .lambda()
  38 + .eq(
  39 + queryMap.get("platformType") != null,
  40 + MessageConfig::getPlatformType,
  41 + String.valueOf(queryMap.get("platformType")))
  42 + .eq(
  43 + queryMap.get("messageType") != null,
  44 + MessageConfig::getMessageType,
  45 + String.valueOf(queryMap.get("messageType")))
  46 + .eq(
  47 + queryMap.get("status") != null,
  48 + MessageConfig::getStatus,
  49 + String.valueOf(queryMap.get("status")))
  50 + .eq(
  51 + true,
  52 + MessageConfig::getTenantId,tenantId));
  53 + return getPageData(configIPage, MessageConfigDTO.class);
  54 + }
  55 +
  56 + @Override
  57 + @Transactional
  58 + public MessageConfigDTO saveMessageConfig(String tenantId,MessageConfigDTO configDTO) {
  59 + checkMessageConfig(configDTO, tenantId);
  60 + MessageConfig config = new MessageConfig();
  61 + configDTO.copyToEntity(config);
  62 + config.setTenantId(tenantId);
  63 + baseMapper.insert(config);
  64 + config.copyToDTO(configDTO);
  65 + return configDTO;
  66 + }
  67 +
  68 + @Override
  69 + @Transactional
  70 + public boolean deleteMessageConfig(Set<String> ids) {
  71 + return baseMapper.deleteBatchIds(ids) > 0;
  72 + }
  73 +
  74 + @Override
  75 + @Transactional
  76 + public MessageConfigDTO updateMessageConfig(String tenantId,MessageConfigDTO configDTO) {
  77 + MessageConfig config = baseMapper.selectById(configDTO.getId());
  78 + if (configDTO.getStatus() == FastIotConstants.StateValue.ENABLE) {
  79 + if (StringUtils.isEmpty(config.getId())) {
  80 + throw new DataValidationException("invalid parameters");
  81 + }
  82 + checkMessageConfig(configDTO, tenantId);
  83 + }
  84 + configDTO.copyToEntity(config);
  85 + config.setTenantId(tenantId);
  86 +
  87 + baseMapper.updateById(config);
  88 + config.copyToDTO(configDTO);
  89 + return configDTO;
  90 + }
  91 +
  92 + /**
  93 + * 通过租户Code、消息类型和平台类型获取启用的配置
  94 + *
  95 + * @param messageType 消息类型
  96 + * @param platform 平台类型
  97 + * @param tenantCode 租户Code
  98 + * @return 启用的配置信息
  99 + */
  100 + @Override
  101 + public MessageConfigDTO getEnableConfigByMessageAndPlatform(
  102 + String messageType, String platform, String tenantCode) {
  103 + return baseMapper.getEnableConfigByMessageAndPlatform(messageType, platform, tenantCode);
  104 + }
  105 +
  106 + /**
  107 + * 通过ID查询MessageConfig信息
  108 + *
  109 + * @param id 主键ID
  110 + * @return 返回类型:MessageConfigDTO
  111 + */
  112 + @Override
  113 + public MessageConfigDTO findMessageConfigById(String id) {
  114 + MessageConfigDTO messageConfigDTO = new MessageConfigDTO();
  115 + MessageConfig messageConfig = baseMapper.selectById(id);
  116 + if (null == messageConfig) {
  117 + return null;
  118 + }
  119 + messageConfig.copyToDTO(messageConfigDTO);
  120 + return messageConfigDTO;
  121 + }
  122 +
  123 + @Override
  124 + public List<MessageConfigDTO> findMessageInfo(MessageConfigDTO configDTO) {
  125 + return ReflectUtils.sourceToTarget(
  126 + baseMapper.selectList(
  127 + new QueryWrapper<MessageConfig>()
  128 + .lambda()
  129 + .eq(
  130 + configDTO.getMessageType() != null,
  131 + MessageConfig::getMessageType,
  132 + configDTO.getMessageType())),
  133 + MessageConfigDTO.class);
  134 + }
  135 +
  136 + /**
  137 + * 检查MessageConfig状态
  138 + *
  139 + * @param configDTO MessageConfig配置
  140 + * @param tenantCode 租户Code
  141 + */
  142 + private void checkMessageConfig(MessageConfigDTO configDTO, String tenantCode) {
  143 + // 查询该租户下是否有相同消息类型和平台的配置已经启用
  144 + MessageConfigDTO enableConfig =
  145 + getEnableConfigByMessageAndPlatform(
  146 + configDTO.getMessageType(), configDTO.getPlatformType(), tenantCode);
  147 + if (null != enableConfig && !enableConfig.getId().equalsIgnoreCase(configDTO.getId())) {
  148 + throw new DataValidationException("enabled config is existed");
  149 + }
  150 + }
  151 +}
dao/src/main/java/org/thingsboard/server/dao/yunteng/impl/YtMessageTemplateServiceImpl.java renamed from dao/src/main/java/org/thingsboard/server/dao/yunteng/impl/MessageTemplateServiceImpl.java
@@ -13,7 +13,7 @@ import org.thingsboard.server.common.data.yunteng.utils.tools.PageData; @@ -13,7 +13,7 @@ import org.thingsboard.server.common.data.yunteng.utils.tools.PageData;
13 import org.thingsboard.server.dao.yunteng.entities.MessageTemplate; 13 import org.thingsboard.server.dao.yunteng.entities.MessageTemplate;
14 import org.thingsboard.server.dao.yunteng.mapper.MessageTemplateMapper; 14 import org.thingsboard.server.dao.yunteng.mapper.MessageTemplateMapper;
15 import org.thingsboard.server.dao.yunteng.service.AbstractBaseService; 15 import org.thingsboard.server.dao.yunteng.service.AbstractBaseService;
16 -import org.thingsboard.server.dao.yunteng.service.MessageTemplateService; 16 +import org.thingsboard.server.dao.yunteng.service.YtMessageTemplateService;
17 17
18 import java.util.List; 18 import java.util.List;
19 import java.util.Map; 19 import java.util.Map;
@@ -22,9 +22,9 @@ import java.util.Set; @@ -22,9 +22,9 @@ import java.util.Set;
22 @Service 22 @Service
23 @Slf4j 23 @Slf4j
24 @RequiredArgsConstructor 24 @RequiredArgsConstructor
25 -public class MessageTemplateServiceImpl 25 +public class YtMessageTemplateServiceImpl
26 extends AbstractBaseService<MessageTemplateMapper, MessageTemplate> 26 extends AbstractBaseService<MessageTemplateMapper, MessageTemplate>
27 - implements MessageTemplateService { 27 + implements YtMessageTemplateService {
28 @Override 28 @Override
29 public PageData<MessageTemplateDTO> page(Map<String, Object> queryMap) { 29 public PageData<MessageTemplateDTO> page(Map<String, Object> queryMap) {
30 // queryMap.put("tenantCode",SecurityContext.getCurrentUser().getTenantCode()); 30 // queryMap.put("tenantCode",SecurityContext.getCurrentUser().getTenantCode());
  1 +package org.thingsboard.server.dao.yunteng.impl;
  2 +
  3 +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  4 +import lombok.RequiredArgsConstructor;
  5 +import org.springframework.stereotype.Service;
  6 +import org.thingsboard.server.common.data.yunteng.dto.AlarmInfoDTO;
  7 +import org.thingsboard.server.common.data.yunteng.dto.request.EmailReqDTO;
  8 +import org.thingsboard.server.common.data.yunteng.dto.request.SmsReqDTO;
  9 +import org.thingsboard.server.common.data.yunteng.enums.AssetStatusEnum;
  10 +import org.thingsboard.server.common.data.yunteng.enums.MessageTypeEnum;
  11 +import org.thingsboard.server.common.data.yunteng.enums.MsgTemplatePurposeEnum;
  12 +import org.thingsboard.server.dao.yunteng.entities.*;
  13 +import org.thingsboard.server.dao.yunteng.mapper.*;
  14 +import org.thingsboard.server.dao.yunteng.service.YtNoticeService;
  15 +import org.thingsboard.server.dao.yunteng.service.YtMailService;
  16 +import org.thingsboard.server.dao.yunteng.service.YtSmsService;
  17 +
  18 +import java.time.LocalDateTime;
  19 +import java.time.OffsetDateTime;
  20 +import java.time.format.DateTimeFormatter;
  21 +import java.util.*;
  22 +import java.util.stream.Collectors;
  23 +
  24 +/**
  25 + * @version V1.0
  26 + * @Description :
  27 + * 1.其它地方抛出异常,交由控制层统一处理
  28 + * 2.服务层注意持久化的事务管理
  29 + * @Dependency: 依赖包
  30 + * @Author: junlianglee
  31 + * @Date Created in 2021/11/23$
  32 + * @Copyright 2016-2018 - Powered By 云腾五洲
  33 + */
  34 +@Service
  35 +@RequiredArgsConstructor
  36 +public class YtNoticeServiceImpl implements YtNoticeService {
  37 +
  38 + private final DeviceMapper deviceMapper;
  39 + private final OrganizationMapper organizationMapper;
  40 + private final AlarmProfileMapper alarmProfileMapper;
  41 + private final AlarmContactMapper alarmContactMapper;
  42 + private final MessageTemplateMapper messageTemplateMapper;
  43 +
  44 + private final YtSmsService smsService;
  45 + private final YtMailService mailService;
  46 +
  47 + @Override
  48 + public void alert(String token, AlarmInfoDTO alarmInfo) {
  49 +
  50 + //TODO 查找设备和设备所属组织
  51 + QueryWrapper<YtDevice> queryWrapper=new QueryWrapper<YtDevice>();
  52 + queryWrapper.lambda()
  53 + .eq(YtDevice::getTbDeviceId, alarmInfo.getDeviceId());
  54 + YtDevice device = deviceMapper.selectOne(queryWrapper);
  55 +
  56 +
  57 + //TODO 查找告警配置 ,与设备配置一一对应。
  58 + if(device == null){
  59 + return;
  60 + }
  61 + QueryWrapper<Organization> organizationQueryWrapper=new QueryWrapper<Organization>();
  62 + organizationQueryWrapper.lambda()
  63 + .eq(Organization::getId, device.getOrganizationId());
  64 + Organization organization = organizationMapper.selectOne(organizationQueryWrapper);
  65 +
  66 + QueryWrapper<AlarmProfile> alarmProfileQueryWrapper=new QueryWrapper<AlarmProfile>();
  67 + alarmProfileQueryWrapper.lambda()
  68 + .eq(AlarmProfile::getDeviceProfileId, device.getProfileId());
  69 + AlarmProfile alarmProfile = alarmProfileMapper.selectOne(alarmProfileQueryWrapper);
  70 +
  71 +
  72 + //TODO 查找告警通知联系人
  73 + if(alarmProfile == null || alarmProfile.getAlarmContactId().isEmpty() || alarmProfile.getMessageMode().isEmpty()){
  74 + return;
  75 + }
  76 + String messageCode = alarmProfile.getMessageMode();
  77 + List<AlarmContact> alarmContactList = alarmContactMapper.selectBatchIds(Arrays.stream(alarmProfile.getAlarmContactId().split(",")).distinct().collect(Collectors.toList()));
  78 + noticeAll(messageCode, alarmContactList,alarmInfo,organization);
  79 +
  80 +
  81 + }
  82 +
  83 + /**
  84 + * 通知所有联系人
  85 + * @param messageCode 通知类型
  86 + * @param alarmContactList 通知联系人
  87 + * @param alarmInfo 通知内容
  88 + * @param organization 设备所属组织
  89 + */
  90 + private void noticeAll(String messageCode, List<AlarmContact> alarmContactList, AlarmInfoDTO alarmInfo, Organization organization) {
  91 + Optional.ofNullable(alarmContactList).ifPresent(contacts ->{
  92 + QueryWrapper<MessageTemplate> messageTemplateQueryWrapper=new QueryWrapper<MessageTemplate>();
  93 + messageTemplateQueryWrapper.lambda()
  94 +// .eq(MessageTemplate::getTenantCode, SecurityContext.getCurrentUser().getTenantCode())
  95 + .eq(MessageTemplate::getTemplatePurpose, MsgTemplatePurposeEnum.FOR_ALARM_NOTICE.name())
  96 + .eq(MessageTemplate::getStatus, AssetStatusEnum.ENABLE.ordinal());
  97 + List<MessageTemplate>templateList = messageTemplateMapper.selectList(messageTemplateQueryWrapper);
  98 + Map<String,String> templatesMap = new HashMap<>();
  99 + Optional.ofNullable(templateList).ifPresent(all ->{
  100 + for(MessageTemplate item: all){
  101 + templatesMap.put(item.getMessageType(),item.getId());
  102 + }
  103 + });
  104 + contacts.stream().parallel().forEach(item ->{
  105 + if(messageCode.contains(MessageTypeEnum.PHONE_MESSAGE.name())
  106 + &&templatesMap.containsKey(MessageTypeEnum.PHONE_MESSAGE.name())
  107 + && !item.getPhone().isEmpty()){
  108 +
  109 +
  110 +
  111 +
  112 + SmsReqDTO info = new SmsReqDTO();
  113 + info.setId(templatesMap.get(MessageTypeEnum.PHONE_MESSAGE.name()));
  114 + info.setPhoneNumbers(item.getPhone());
  115 + LinkedHashMap<String, String> params = new LinkedHashMap<>();
  116 + //name-其他;device_name-其他;level-其他;location-其他;alarm_value-其他;
  117 + params.put("type", alarmInfo.getType());
  118 + params.put("device_name", alarmInfo.getDeviceName());
  119 + params.put("severity", alarmInfo.getSeverity());
  120 + params.put("organization", organization!=null?organization.getName():"");
  121 + LocalDateTime createTime = LocalDateTime.ofEpochSecond(alarmInfo.getCreateTs()/1000,0, OffsetDateTime.now().getOffset());
  122 + params.put("createtime", createTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
  123 + info.setParams(params);
  124 + smsService.sendSms(info);
  125 + }
  126 +
  127 + if(messageCode.contains(MessageTypeEnum.EMAIL_MESSAGE.name())
  128 + &&templatesMap.containsKey(MessageTypeEnum.EMAIL_MESSAGE.name())
  129 + && !item.getEmail().isEmpty()){
  130 + EmailReqDTO info = new EmailReqDTO();
  131 + mailService.sendEmail(info);
  132 + }
  133 +
  134 +
  135 + if(messageCode.contains(MessageTypeEnum.DING_TALK_MESSAGE.name())
  136 + &&templatesMap.containsKey(MessageTypeEnum.DING_TALK_MESSAGE.name())
  137 + && !item.getDingtalk().isEmpty()){
  138 +
  139 + }
  140 +
  141 + if(messageCode.contains(MessageTypeEnum.WECHAT_MESSAGE.name())
  142 + &&templatesMap.containsKey(MessageTypeEnum.WECHAT_MESSAGE.name())
  143 + && !item.getWechat().isEmpty()){
  144 +
  145 + }
  146 + });
  147 + });
  148 + }
  149 +}
dao/src/main/java/org/thingsboard/server/dao/yunteng/impl/YtOrganizationServiceImpl.java renamed from dao/src/main/java/org/thingsboard/server/dao/yunteng/impl/OrganizationServiceImpl.java
@@ -20,15 +20,15 @@ import org.thingsboard.server.dao.yunteng.mapper.OrganizationMapper; @@ -20,15 +20,15 @@ import org.thingsboard.server.dao.yunteng.mapper.OrganizationMapper;
20 import org.thingsboard.server.dao.yunteng.mapper.UserMapper; 20 import org.thingsboard.server.dao.yunteng.mapper.UserMapper;
21 import org.thingsboard.server.dao.yunteng.mapper.UserOrganizationMappingMapper; 21 import org.thingsboard.server.dao.yunteng.mapper.UserOrganizationMappingMapper;
22 import org.thingsboard.server.dao.yunteng.service.AbstractBaseService; 22 import org.thingsboard.server.dao.yunteng.service.AbstractBaseService;
23 -import org.thingsboard.server.dao.yunteng.service.OrganizationService; 23 +import org.thingsboard.server.dao.yunteng.service.YtOrganizationService;
24 24
25 import java.util.*; 25 import java.util.*;
26 import java.util.stream.Collectors; 26 import java.util.stream.Collectors;
27 27
28 @Service 28 @Service
29 @RequiredArgsConstructor 29 @RequiredArgsConstructor
30 -public class OrganizationServiceImpl extends AbstractBaseService<OrganizationMapper, Organization>  
31 - implements OrganizationService { 30 +public class YtOrganizationServiceImpl extends AbstractBaseService<OrganizationMapper, Organization>
  31 + implements YtOrganizationService {
32 32
33 private final UserOrganizationMappingMapper userOrganizationMappingMapper; 33 private final UserOrganizationMappingMapper userOrganizationMappingMapper;
34 private final UserMapper userMapper; 34 private final UserMapper userMapper;
@@ -44,7 +44,7 @@ public class OrganizationServiceImpl extends AbstractBaseService<OrganizationMap @@ -44,7 +44,7 @@ public class OrganizationServiceImpl extends AbstractBaseService<OrganizationMap
44 throw new DataValidationException("parent organization not exist!"); 44 throw new DataValidationException("parent organization not exist!");
45 } else { 45 } else {
46 if (!organization 46 if (!organization
47 - .getTenantCode() 47 + .getTenantId()
48 .equals(null)) {//TODO getCurrentUser().getTenantCode() 48 .equals(null)) {//TODO getCurrentUser().getTenantCode()
49 throw new DataValidationException("parent organization not exist."); 49 throw new DataValidationException("parent organization not exist.");
50 } 50 }
@@ -8,7 +8,6 @@ import lombok.RequiredArgsConstructor; @@ -8,7 +8,6 @@ import lombok.RequiredArgsConstructor;
8 import lombok.extern.slf4j.Slf4j; 8 import lombok.extern.slf4j.Slf4j;
9 import org.apache.commons.lang3.RandomStringUtils; 9 import org.apache.commons.lang3.RandomStringUtils;
10 import org.apache.commons.lang3.StringUtils; 10 import org.apache.commons.lang3.StringUtils;
11 -import org.springframework.beans.factory.annotation.Autowired;  
12 import org.springframework.stereotype.Service; 11 import org.springframework.stereotype.Service;
13 import org.springframework.transaction.annotation.Transactional; 12 import org.springframework.transaction.annotation.Transactional;
14 import org.thingsboard.common.util.JacksonUtil; 13 import org.thingsboard.common.util.JacksonUtil;
@@ -98,7 +97,7 @@ public class YtSmsServiceImpl implements YtSmsService { @@ -98,7 +97,7 @@ public class YtSmsServiceImpl implements YtSmsService {
98 smsLog.setMessageTemplateId(messageTemplate.getId()); 97 smsLog.setMessageTemplateId(messageTemplate.getId());
99 smsLog.setTemplateParam(JacksonUtil.toJsonNode(JacksonUtil.toString(templateParam))); 98 smsLog.setTemplateParam(JacksonUtil.toJsonNode(JacksonUtil.toString(templateParam)));
100 smsLog.setSendTime(LocalDateTime.now()); 99 smsLog.setSendTime(LocalDateTime.now());
101 - smsLog.setTenantCode(messageTemplate.getTenantCode()); 100 + smsLog.setTenantCode(messageTemplate.getTenantId());
102 smsLog.setTemplatePurpose(smsReqDTO.getTemplatePurpose()); 101 smsLog.setTemplatePurpose(smsReqDTO.getTemplatePurpose());
103 smsLogMapper.insert(smsLog); 102 smsLogMapper.insert(smsLog);
104 return ResponseCodeEnum.SUCCESS.name().equals(result); 103 return ResponseCodeEnum.SUCCESS.name().equals(result);
@@ -46,7 +46,7 @@ public class YtTenantServiceImpl extends AbstractBaseService<TenantMapper, Tenan @@ -46,7 +46,7 @@ public class YtTenantServiceImpl extends AbstractBaseService<TenantMapper, Tenan
46 baseMapper.insert(tenant); 46 baseMapper.insert(tenant);
47 // 调用TB API 47 // 调用TB API
48 tenant.copyToDTO(tenantDTO); 48 tenant.copyToDTO(tenantDTO);
49 - saveTenantMapping(tenantDTO.getTenantCode(), tenantReqDTO.getRoleIds()); 49 + saveTenantMapping(tenantDTO.getTenantId(), tenantReqDTO.getRoleIds());
50 return tenantDTO; 50 return tenantDTO;
51 } 51 }
52 52
@@ -76,20 +76,20 @@ public class YtTenantServiceImpl extends AbstractBaseService<TenantMapper, Tenan @@ -76,20 +76,20 @@ public class YtTenantServiceImpl extends AbstractBaseService<TenantMapper, Tenan
76 } 76 }
77 77
78 private void processTenantCode(TenantDTO tenantDTO) { 78 private void processTenantCode(TenantDTO tenantDTO) {
79 - if (tenantDTO.getTenantCode() != null) {  
80 - if (tenantDTO.getTenantCode().length() > 30) { 79 + if (tenantDTO.getTenantId() != null) {
  80 + if (tenantDTO.getTenantId().length() > 30) {
81 throw new DataValidationException("tenant code too long"); 81 throw new DataValidationException("tenant code too long");
82 } 82 }
83 int count = 83 int count =
84 baseMapper.selectCount( 84 baseMapper.selectCount(
85 new QueryWrapper<Tenant>() 85 new QueryWrapper<Tenant>()
86 .lambda() 86 .lambda()
87 - .eq(Tenant::getTenantCode, tenantDTO.getTenantCode())); 87 + .eq(Tenant::getTenantCode, tenantDTO.getTenantId()));
88 if (count > 0) { 88 if (count > 0) {
89 throw new DataValidationException("tenant code already exist"); 89 throw new DataValidationException("tenant code already exist");
90 } 90 }
91 } else { 91 } else {
92 - tenantDTO.setTenantCode(RandomStringUtils.randomAlphabetic(20)); 92 + tenantDTO.setTenantId(RandomStringUtils.randomAlphabetic(20));
93 } 93 }
94 } 94 }
95 95
@@ -130,7 +130,7 @@ public class YtTenantServiceImpl extends AbstractBaseService<TenantMapper, Tenan @@ -130,7 +130,7 @@ public class YtTenantServiceImpl extends AbstractBaseService<TenantMapper, Tenan
130 menuMapper.deleteTenantMenuMappingByMenuIds(allMenuIds); 130 menuMapper.deleteTenantMenuMappingByMenuIds(allMenuIds);
131 } 131 }
132 // 4. DELETE USER 132 // 4. DELETE USER
133 - userMapper.delete(new QueryWrapper<User>().lambda().in(User::getTenantCode, tenantCodes)); 133 + userMapper.delete(new QueryWrapper<User>().lambda().in(User::getTenantId, tenantCodes));
134 // 5. TELL RULE ENGINE TO STOP TENANT 134 // 5. TELL RULE ENGINE TO STOP TENANT
135 // 6. DELETE OTHER RESOURCES IF ANY 135 // 6. DELETE OTHER RESOURCES IF ANY
136 // 7. DELETE TENANT 136 // 7. DELETE TENANT
@@ -59,8 +59,8 @@ public class YtUserServiceImpl extends AbstractBaseService<UserMapper, User> imp @@ -59,8 +59,8 @@ public class YtUserServiceImpl extends AbstractBaseService<UserMapper, User> imp
59 private final TenantRoleMapper tenantRoleMapper; 59 private final TenantRoleMapper tenantRoleMapper;
60 60
61 private final YtSmsService ytSmsService; 61 private final YtSmsService ytSmsService;
62 - private final MessageTemplateService messageTemplateService;  
63 - private final OrganizationService groupService; 62 + private final YtMessageTemplateService messageTemplateService;
  63 + private final YtOrganizationService groupService;
64 64
65 public static final String ACTIVATE_URL_PATTERN = "%s/api/noauth/activate?activateToken=%s"; 65 public static final String ACTIVATE_URL_PATTERN = "%s/api/noauth/activate?activateToken=%s";
66 private final PasswordEncoder passwordEncoder; 66 private final PasswordEncoder passwordEncoder;
@@ -98,7 +98,7 @@ public class YtUserServiceImpl extends AbstractBaseService<UserMapper, User> imp @@ -98,7 +98,7 @@ public class YtUserServiceImpl extends AbstractBaseService<UserMapper, User> imp
98 if (isAdminOperate) { 98 if (isAdminOperate) {
99 // 添加的租户管理员 99 // 添加的租户管理员
100 if (StringUtils.isNotBlank(userDTO.getTenantCode())) { 100 if (StringUtils.isNotBlank(userDTO.getTenantCode())) {
101 - user.setTenantCode(userDTO.getTenantCode()); 101 + user.setTenantId(userDTO.getTenantCode());
102 user.setPassword(passwordEncoder.encode(DEFAULT_PWD)); 102 user.setPassword(passwordEncoder.encode(DEFAULT_PWD));
103 int tenantExist = 103 int tenantExist =
104 tenantMapper.selectCount( 104 tenantMapper.selectCount(
@@ -111,24 +111,24 @@ public class YtUserServiceImpl extends AbstractBaseService<UserMapper, User> imp @@ -111,24 +111,24 @@ public class YtUserServiceImpl extends AbstractBaseService<UserMapper, User> imp
111 } else { 111 } else {
112 // 添加的平台系统其他用户 112 // 添加的平台系统其他用户
113 user.setLevel(FastIotConstants.LevelValue.IS_OTHER_ADMIN); 113 user.setLevel(FastIotConstants.LevelValue.IS_OTHER_ADMIN);
114 - user.setTenantCode(tenantId); 114 + user.setTenantId(tenantId);
115 } 115 }
116 userExist = 116 userExist =
117 baseMapper.selectCount( 117 baseMapper.selectCount(
118 new QueryWrapper<User>() 118 new QueryWrapper<User>()
119 .lambda() 119 .lambda()
120 .eq(User::getUsername, userDTO.getUsername()) 120 .eq(User::getUsername, userDTO.getUsername())
121 - .eq(User::getTenantCode, userDTO.getTenantCode())) 121 + .eq(User::getTenantId, userDTO.getTenantCode()))
122 > 0; 122 > 0;
123 } else { 123 } else {
124 user.setLevel(FastIotConstants.LevelValue.IS_NORMAL); 124 user.setLevel(FastIotConstants.LevelValue.IS_NORMAL);
125 - user.setTenantCode(tenantId); 125 + user.setTenantId(tenantId);
126 userExist = 126 userExist =
127 baseMapper.selectCount( 127 baseMapper.selectCount(
128 new QueryWrapper<User>() 128 new QueryWrapper<User>()
129 .lambda() 129 .lambda()
130 .eq(User::getUsername, userDTO.getUsername()) 130 .eq(User::getUsername, userDTO.getUsername())
131 - .eq(User::getTenantCode, tenantId)) 131 + .eq(User::getTenantId, tenantId))
132 > 0; 132 > 0;
133 } 133 }
134 if (userExist) { 134 if (userExist) {
@@ -170,7 +170,7 @@ public class YtUserServiceImpl extends AbstractBaseService<UserMapper, User> imp @@ -170,7 +170,7 @@ public class YtUserServiceImpl extends AbstractBaseService<UserMapper, User> imp
170 public String getActivationLink(String userId,boolean isSysadmin,String tenantId) { 170 public String getActivationLink(String userId,boolean isSysadmin,String tenantId) {
171 User user = baseMapper.selectById(userId); 171 User user = baseMapper.selectById(userId);
172 if (!isSysadmin 172 if (!isSysadmin
173 - && tenantId.equals(user.getTenantCode())) { 173 + && tenantId.equals(user.getTenantId())) {
174 throw new AccessDeniedException( 174 throw new AccessDeniedException(
175 "you don't have permission to get activation link for this user"); 175 "you don't have permission to get activation link for this user");
176 } 176 }
@@ -224,7 +224,7 @@ public class YtUserServiceImpl extends AbstractBaseService<UserMapper, User> imp @@ -224,7 +224,7 @@ public class YtUserServiceImpl extends AbstractBaseService<UserMapper, User> imp
224 UserDTO userDTO = new UserDTO(); 224 UserDTO userDTO = new UserDTO();
225 user.copyToDTO(userDTO, PASSWORD, ACTIVATE_TOKEN); 225 user.copyToDTO(userDTO, PASSWORD, ACTIVATE_TOKEN);
226 if (!isSysadmin 226 if (!isSysadmin
227 - && !tenantId.equals(user.getTenantCode())) { 227 + && !tenantId.equals(user.getTenantId())) {
228 return Optional.empty(); 228 return Optional.empty();
229 } 229 }
230 return Optional.of(userDTO); 230 return Optional.of(userDTO);
@@ -239,7 +239,7 @@ public class YtUserServiceImpl extends AbstractBaseService<UserMapper, User> imp @@ -239,7 +239,7 @@ public class YtUserServiceImpl extends AbstractBaseService<UserMapper, User> imp
239 Assert.notNull(userDTO.getId(), "user is must be specified"); 239 Assert.notNull(userDTO.getId(), "user is must be specified");
240 User user = baseMapper.selectById(userDTO.getId()); 240 User user = baseMapper.selectById(userDTO.getId());
241 if (!isSysadmin 241 if (!isSysadmin
242 - && !user.getTenantCode().equals(tenantId)) { 242 + && !user.getTenantId().equals(tenantId)) {
243 throw new NoneTenantAssetException("this user not belong to current tenant"); 243 throw new NoneTenantAssetException("this user not belong to current tenant");
244 } 244 }
245 if (!user.getUsername().equals(userDTO.getUsername())) { 245 if (!user.getUsername().equals(userDTO.getUsername())) {
@@ -325,7 +325,7 @@ public class YtUserServiceImpl extends AbstractBaseService<UserMapper, User> imp @@ -325,7 +325,7 @@ public class YtUserServiceImpl extends AbstractBaseService<UserMapper, User> imp
325 baseMapper.selectCount( 325 baseMapper.selectCount(
326 new QueryWrapper<User>() 326 new QueryWrapper<User>()
327 .lambda() 327 .lambda()
328 - .ne(User::getTenantCode, tenantId) 328 + .ne(User::getTenantId, tenantId)
329 .in(User::getId, userIds)); 329 .in(User::getId, userIds));
330 if (notTenantUserCount > 0) { 330 if (notTenantUserCount > 0) {
331 throw new AccessDeniedException("cannot delete user that not belong to your tenant"); 331 throw new AccessDeniedException("cannot delete user that not belong to your tenant");
@@ -388,7 +388,7 @@ public class YtUserServiceImpl extends AbstractBaseService<UserMapper, User> imp @@ -388,7 +388,7 @@ public class YtUserServiceImpl extends AbstractBaseService<UserMapper, User> imp
388 if (user == null) { 388 if (user == null) {
389 return; 389 return;
390 } 390 }
391 - if (tenantId.equals(user.getTenantCode())) { 391 + if (tenantId.equals(user.getTenantId())) {
392 baseMapper.setPassword2NullAndInsertActiveToken( 392 baseMapper.setPassword2NullAndInsertActiveToken(
393 userId, RandomStringUtils.randomAlphabetic(10)); 393 userId, RandomStringUtils.randomAlphabetic(10));
394 } 394 }
@@ -434,7 +434,7 @@ public class YtUserServiceImpl extends AbstractBaseService<UserMapper, User> imp @@ -434,7 +434,7 @@ public class YtUserServiceImpl extends AbstractBaseService<UserMapper, User> imp
434 public Optional<List<UserDTO>> getOrganizationUserByOrganizationId(String groupId,String tenantId) { 434 public Optional<List<UserDTO>> getOrganizationUserByOrganizationId(String groupId,String tenantId) {
435 Organization group = organizationMapper.selectById(groupId); 435 Organization group = organizationMapper.selectById(groupId);
436 if (group == null 436 if (group == null
437 - || !group.getTenantCode().equals(tenantId)) { 437 + || !group.getTenantId().equals(tenantId)) {
438 return Optional.empty(); 438 return Optional.empty();
439 } 439 }
440 Set<String> userIds = 440 Set<String> userIds =
@@ -3,13 +3,13 @@ package org.thingsboard.server.dao.yunteng.mapper; @@ -3,13 +3,13 @@ package org.thingsboard.server.dao.yunteng.mapper;
3 3
4 import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
5 import org.apache.ibatis.annotations.Mapper; 5 import org.apache.ibatis.annotations.Mapper;
6 -import org.thingsboard.server.common.data.DeviceProfile;  
7 import org.thingsboard.server.common.data.yunteng.dto.DeviceProfileDTO; 6 import org.thingsboard.server.common.data.yunteng.dto.DeviceProfileDTO;
  7 +import org.thingsboard.server.dao.yunteng.entities.YtDeviceProfile;
8 8
9 import java.util.List; 9 import java.util.List;
10 10
11 @Mapper 11 @Mapper
12 -public interface DeviceProfileMapper extends BaseMapper<DeviceProfile> { 12 +public interface DeviceProfileMapper extends BaseMapper<YtDeviceProfile> {
13 13
14 List<DeviceProfileDTO> getDeviceProfileInfo(DeviceProfileDTO deviceProfileDTO); 14 List<DeviceProfileDTO> getDeviceProfileInfo(DeviceProfileDTO deviceProfileDTO);
15 } 15 }
  1 +package org.thingsboard.server.dao.yunteng.service;
  2 +
  3 +import org.thingsboard.server.common.data.yunteng.dto.AlarmContactDTO;
  4 +import org.thingsboard.server.common.data.yunteng.utils.tools.PageData;
  5 +
  6 +import java.util.List;
  7 +import java.util.Map;
  8 +
  9 +
  10 +/**
  11 + * @Description 告警联系人的操作方法
  12 + * @Author cxy
  13 + * @Date 2021/11/2 14:46
  14 + */
  15 +
  16 +public interface YtAlarmContactService {
  17 + /**
  18 + * 查询全部的告警联系人
  19 + *
  20 + * @param
  21 + * @return List
  22 + */
  23 + List<AlarmContactDTO> findAll(String tenantId,Map<String,Object> params);
  24 +
  25 + /**
  26 + * 添加告警联系人
  27 + *
  28 + * @param alarmContactDTO 对象
  29 + * @return AlarmContactDTO
  30 + */
  31 + AlarmContactDTO saveAlarmContact(String tenantId,AlarmContactDTO alarmContactDTO);
  32 +
  33 + /**
  34 + * 删除告警联系人
  35 + *
  36 + * @param ids 通过列表id
  37 + * @return i
  38 + */
  39 + boolean delete(String[]ids);
  40 +
  41 +
  42 + /**
  43 + * 修改告警联系人数据
  44 + *
  45 + * @param alarmContactDTO 对象
  46 + * @return Integer
  47 + */
  48 + boolean update(AlarmContactDTO alarmContactDTO);
  49 +
  50 + /**
  51 + * 分页查询
  52 + *
  53 + * @param queryMap 查询集合
  54 + * @return PageData
  55 + */
  56 + PageData<AlarmContactDTO> page(Map<String, Object> queryMap);
  57 +
  58 +}
  1 +package org.thingsboard.server.dao.yunteng.service;
  2 +
  3 +import org.thingsboard.server.common.data.yunteng.dto.AlarmInfoDTO;
  4 +import org.thingsboard.server.common.data.yunteng.utils.tools.PageData;
  5 +
  6 +import java.util.Map;
  7 +
  8 +/** @Description 告警中心数据业务层 @Author cxy @Date 2021/11/10 16:51 */
  9 +public interface YtAlarmInfoService {
  10 +
  11 + /**
  12 + * 新增或修改告警中心数据
  13 + *
  14 + * @param alarmInfoDto 对象
  15 + * @return alarmInfoDto
  16 + */
  17 +/* AlarmInfoDTO insertOrUpdate(AlarmInfoDTO alarmInfoDto);*/
  18 +
  19 + /**
  20 + * 删除告警中心数据
  21 + *
  22 + * @param ids id
  23 + * @return true和false
  24 + */
  25 + /*boolean deleteAlarm(Set<String> ids);*/
  26 +
  27 + /**
  28 + * 分页数据
  29 + *
  30 + * @param queryMap 集合对象
  31 + * @return AlarmInfoDto
  32 + */
  33 + PageData<AlarmInfoDTO> page(Map<String, Object> queryMap);
  34 + /**
  35 + * 查询告警中心所有数据
  36 + *
  37 + * @param alarmInfoDto 过滤参数
  38 + * @return List<AlarmCenterDto>
  39 + */
  40 + /*List<AlarmInfoDTO> findAlarmInfo(AlarmInfoDTO alarmInfoDto);*/
  41 +}
  1 +package org.thingsboard.server.dao.yunteng.service;
  2 +
  3 +import org.thingsboard.server.common.data.yunteng.dto.AlarmProfileDTO;
  4 +
  5 +import java.util.Set;
  6 +
  7 +public interface YtAlarmProfileService {
  8 + /**
  9 + * 保存告警设置
  10 + * @param alarmProfileDTO 告警设置相关信息
  11 + * @return AlarmProfileDTO
  12 + */
  13 + AlarmProfileDTO saveOrUpdateAlarmProfile(String tenantId,AlarmProfileDTO alarmProfileDTO);
  14 +
  15 + /**
  16 + * 删除告警配置
  17 + * @param ids 删除的ids
  18 + * @return 删除结果:true 成功 false 失败
  19 + */
  20 + boolean deleteAlarmProfile(Set<String> ids);
  21 +
  22 + /**
  23 + * 根据设备配置ID查询告警配置信息
  24 + * @param deviceProfileId 设备配置ID
  25 + * @return 告警配置信息
  26 + */
  27 + AlarmProfileDTO findAlarmProfileByDeviceProfileId(String tenantId,String deviceProfileId);
  28 +}
  1 +package org.thingsboard.server.dao.yunteng.service;
  2 +
  3 +import org.thingsboard.server.common.data.yunteng.dto.AlarmContactDTO;
  4 +import org.thingsboard.server.common.data.yunteng.utils.tools.PageData;
  5 +
  6 +import java.util.List;
  7 +import java.util.Map;
  8 +
  9 +
  10 +/**
  11 + * @Description 告警联系人的操作方法
  12 + * @Author cxy
  13 + * @Date 2021/11/2 14:46
  14 + */
  15 +
  16 +public interface YtAlarmService {
  17 + /**
  18 + * 查询全部的告警联系人
  19 + *
  20 + * @param alarmContactDTO 对象
  21 + * @return List
  22 + */
  23 + List<AlarmContactDTO> findAll(String tenantId,AlarmContactDTO alarmContactDTO);
  24 +
  25 + /**
  26 + * 添加告警联系人
  27 + *
  28 + * @param alarmContactDTO 对象
  29 + * @return AlarmContactDTO
  30 + */
  31 + AlarmContactDTO saveAlarmContact(String tenantId,AlarmContactDTO alarmContactDTO);
  32 +
  33 + /**
  34 + * 删除告警联系人
  35 + *
  36 + * @param ids 通过列表id
  37 + * @return i
  38 + */
  39 + boolean delete(String[] ids);
  40 +
  41 +
  42 + /**
  43 + * 修改告警联系人数据
  44 + *
  45 + * @param alarmContactDTO 对象
  46 + * @return Integer
  47 + */
  48 + AlarmContactDTO update(boolean istenantAdmin,String tenantId,AlarmContactDTO alarmContactDTO);
  49 +
  50 + /**
  51 + * 分页查询
  52 + *
  53 + * @param queryMap 查询集合
  54 + * @return PageData
  55 + */
  56 + PageData<AlarmContactDTO> page(Map<String, Object> queryMap);
  57 +
  58 +}
  1 +package org.thingsboard.server.dao.yunteng.service;
  2 +
  3 +import org.thingsboard.server.common.data.yunteng.dto.DeviceProfileDTO;
  4 +import org.thingsboard.server.common.data.yunteng.utils.tools.PageData;
  5 +
  6 +import java.util.List;
  7 +import java.util.Map;
  8 +import java.util.Optional;
  9 +import java.util.Set;
  10 +
  11 +public interface YtDeviceProfileService {
  12 + DeviceProfileDTO insertOrUpdate(String tenantId,DeviceProfileDTO deviceProfileDTO);
  13 +
  14 + void deleteDeviceProfiles(String tenantId,Set<String> ids);
  15 +
  16 + Optional<DeviceProfileDTO> getDeviceProfile(String tenantId,String id);
  17 +
  18 + PageData<DeviceProfileDTO> page(String tenantId, Map<String, Object> queryMap);
  19 +
  20 + List<DeviceProfileDTO> findDeviceProfile(String tenantId,DeviceProfileDTO deviceProfileDTO);
  21 +}
  1 +package org.thingsboard.server.dao.yunteng.service;
  2 +
  3 +
  4 +import org.thingsboard.server.common.data.yunteng.dto.DeleteDTO;
  5 +import org.thingsboard.server.common.data.yunteng.dto.DeviceTypeDTO;
  6 +
  7 +import java.util.List;
  8 +
  9 +public interface YtDeviceTypeService {
  10 + /**
  11 + * 获取当前租户设备类型的树形结构
  12 + * @param tenantId 租户Code
  13 + * @return 树形结构
  14 + */
  15 + List<DeviceTypeDTO> getDeviceTypeTree(String tenantId);
  16 +
  17 + /**
  18 + * 保存设备类型
  19 + * @param deviceTypeDTO 设备类型参数
  20 + * @return 设备类型
  21 + */
  22 + DeviceTypeDTO saveDeviceTye(String tenantId,DeviceTypeDTO deviceTypeDTO);
  23 +
  24 + /**
  25 + * 修改设备类型
  26 + * @param deviceTypeDTO 设备参数类型
  27 + * @return 设备类型
  28 + */
  29 + DeviceTypeDTO updateDeviceType(DeviceTypeDTO deviceTypeDTO);
  30 +
  31 + /**
  32 + * 删除设备类型
  33 + * @param deleteDTO 删除设备IDS
  34 + * @return true or false 删除成功或失败
  35 + */
  36 + boolean deleteDeviceType(DeleteDTO deleteDTO);
  37 +}
  1 +package org.thingsboard.server.dao.yunteng.service;
  2 +
  3 +import org.thingsboard.server.common.data.yunteng.dto.MailLogDTO;
  4 +import org.thingsboard.server.common.data.yunteng.utils.tools.PageData;
  5 +
  6 +import java.util.Map;
  7 +import java.util.Set;
  8 +
  9 +public interface YtMailLogService {
  10 + PageData<MailLogDTO> page(String tenantId,Map<String, Object> queryMap);
  11 +
  12 + boolean deleteMailLog(Set<String> ids);
  13 +}
  1 +package org.thingsboard.server.dao.yunteng.service;
  2 +
  3 +import org.thingsboard.server.common.data.yunteng.dto.request.EmailReqDTO;
  4 +
  5 +public interface YtMailService {
  6 + boolean sendEmail(EmailReqDTO emailReqDTO);
  7 +}
  1 +package org.thingsboard.server.dao.yunteng.service;
  2 +
  3 +import org.thingsboard.server.common.data.yunteng.dto.MessageConfigDTO;
  4 +import org.thingsboard.server.common.data.yunteng.utils.tools.PageData;
  5 +
  6 +import java.util.List;
  7 +import java.util.Map;
  8 +import java.util.Set;
  9 +
  10 +public interface YtMessageConfigService {
  11 +
  12 + PageData<MessageConfigDTO> page(String tenantId,Map<String, Object> queryMap);
  13 +
  14 + MessageConfigDTO saveMessageConfig(String tenantId,MessageConfigDTO configDTO);
  15 +
  16 + boolean deleteMessageConfig(Set<String> ids);
  17 +
  18 + MessageConfigDTO updateMessageConfig(String tenantId,MessageConfigDTO configDTO);
  19 +
  20 + MessageConfigDTO getEnableConfigByMessageAndPlatform(
  21 + String messageType, String platform, String tenantCode);
  22 +
  23 + MessageConfigDTO findMessageConfigById(String id);
  24 +
  25 + List<MessageConfigDTO> findMessageInfo(MessageConfigDTO configDTO);
  26 +}
dao/src/main/java/org/thingsboard/server/dao/yunteng/service/YtMessageTemplateService.java renamed from dao/src/main/java/org/thingsboard/server/dao/yunteng/service/MessageTemplateService.java
@@ -9,7 +9,7 @@ import java.util.List; @@ -9,7 +9,7 @@ import java.util.List;
9 import java.util.Map; 9 import java.util.Map;
10 import java.util.Set; 10 import java.util.Set;
11 11
12 -public interface MessageTemplateService { 12 +public interface YtMessageTemplateService {
13 13
14 PageData<MessageTemplateDTO> page(Map<String, Object> queryMap); 14 PageData<MessageTemplateDTO> page(Map<String, Object> queryMap);
15 15
  1 +package org.thingsboard.server.dao.yunteng.service;
  2 +
  3 +import org.thingsboard.server.common.data.yunteng.dto.AlarmInfoDTO;
  4 +
  5 +/**
  6 + * @version V1.0
  7 + * @Description :
  8 + * 1.其它地方抛出异常,交由控制层统一处理
  9 + * 2.服务层注意持久化的事务管理
  10 + * @Dependency: 依赖包
  11 + * @Author: junlianglee
  12 + * @Date Created in 2021/11/23$
  13 + * @Copyright 2016-2018 - Powered By 云腾五洲
  14 + */
  15 +public interface YtNoticeService {
  16 +
  17 + /**
  18 + * 设备告警通知负责人
  19 + * * @param alarmInfo
  20 + * @param token 告警通知鉴权信息
  21 + * @param alarmInfo 告警数据
  22 + */
  23 + public void alert(String token, AlarmInfoDTO alarmInfo);
  24 +
  25 +}
dao/src/main/java/org/thingsboard/server/dao/yunteng/service/YtOrganizationService.java renamed from dao/src/main/java/org/thingsboard/server/dao/yunteng/service/OrganizationService.java
@@ -8,7 +8,7 @@ import org.thingsboard.server.common.data.yunteng.dto.OrganizationDTO; @@ -8,7 +8,7 @@ import org.thingsboard.server.common.data.yunteng.dto.OrganizationDTO;
8 import java.util.List; 8 import java.util.List;
9 import java.util.Set; 9 import java.util.Set;
10 10
11 -public interface OrganizationService { 11 +public interface YtOrganizationService {
12 OrganizationDTO saveOrganization(OrganizationDTO organizationDTO); 12 OrganizationDTO saveOrganization(OrganizationDTO organizationDTO);
13 13
14 boolean deleteOrganizations(DeleteDTO deleteDTO); 14 boolean deleteOrganizations(DeleteDTO deleteDTO);