Commit ebef653dd5916fa7ab1e94b88bbb8d1e5ef1c98a

Authored by 黄 x
1 parent 829c5559

feat: 合并yunTeng的IOT代码

Showing 65 changed files with 2565 additions and 97 deletions
@@ -29,7 +29,7 @@ import static org.thingsboard.server.common.data.yunteng.constant.QueryConstant. @@ -29,7 +29,7 @@ import static org.thingsboard.server.common.data.yunteng.constant.QueryConstant.
29 @RestController 29 @RestController
30 @RequestMapping("api/yt/admin") 30 @RequestMapping("api/yt/admin")
31 @RequiredArgsConstructor 31 @RequiredArgsConstructor
32 -@PreAuthorize("hasAnyRole('SYS_ADMIN','PLATFORM_ADMIN')") 32 +//@PreAuthorize("hasAnyRole('SYS_ADMIN','PLATFORM_ADMIN')")
33 public class YtAdminController extends BaseController { 33 public class YtAdminController extends BaseController {
34 34
35 private final YtTenantService ytTenantService; 35 private final YtTenantService ytTenantService;
  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 YtAlarmNoticeController {
  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 +}
  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.ResponseEntity;
  7 +import org.springframework.web.bind.annotation.*;
  8 +import org.thingsboard.server.common.data.exception.ThingsboardException;
  9 +import org.thingsboard.server.common.data.yunteng.dto.SysAppDesignDTO;
  10 +import org.thingsboard.server.controller.BaseController;
  11 +import org.thingsboard.server.dao.yunteng.service.SysAppDesignService;
  12 +
  13 +/**
  14 + * @author: 徐浩然
  15 + * @desc: APP定制
  16 + * @date: 2021/12/3-18:45
  17 + */
  18 +@Api(tags = "APP定制")
  19 +@RestController
  20 +@RequestMapping("api/v1/appDesign")
  21 +@RequiredArgsConstructor
  22 +public class YtAppDesignController extends BaseController {
  23 +
  24 + private final SysAppDesignService sysAppDesignService;
  25 +
  26 + @GetMapping("get")
  27 + @ApiOperation("查询详情")
  28 + public ResponseEntity<SysAppDesignDTO> get() throws ThingsboardException {
  29 + return ResponseEntity.ok(sysAppDesignService.get(getCurrentUser().getCurrentTenantId()));
  30 + }
  31 +
  32 + @PutMapping("update")
  33 + @ApiOperation("更新")
  34 + public ResponseEntity update(@RequestBody SysAppDesignDTO sysAppDesignDTO)
  35 + throws ThingsboardException {
  36 + sysAppDesignDTO.setId(null);
  37 + return sysAppDesignService.update(sysAppDesignDTO, getCurrentUser().getCurrentTenantId())
  38 + ? ResponseEntity.ok().build()
  39 + : ResponseEntity.badRequest().build();
  40 + }
  41 +}
  1 +package org.thingsboard.server.controller.yunteng;
  2 +
  3 +import lombok.RequiredArgsConstructor;
  4 +import org.springframework.validation.annotation.Validated;
  5 +import org.springframework.web.bind.annotation.*;
  6 +import org.thingsboard.server.common.data.exception.ThingsboardException;
  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.SysDictDTO;
  13 +import org.thingsboard.server.common.data.yunteng.enums.OrderTypeEnum;
  14 +import org.thingsboard.server.common.data.yunteng.utils.tools.PageData;
  15 +import org.thingsboard.server.common.data.yunteng.utils.tools.ResponseResult;
  16 +import org.thingsboard.server.controller.BaseController;
  17 +import org.thingsboard.server.dao.yunteng.service.SysDictService;
  18 +
  19 +import java.util.HashMap;
  20 +
  21 +import static org.thingsboard.server.common.data.yunteng.constant.QueryConstant.*;
  22 +
  23 +@RestController
  24 +@RequestMapping("api/v1/dict")
  25 +@RequiredArgsConstructor
  26 +public class YtDictController extends BaseController {
  27 + private final SysDictService sysDictService;
  28 +
  29 + @GetMapping(params = {PAGE_SIZE, PAGE})
  30 + public PageData<SysDictDTO> pageSysDict(
  31 + @RequestParam(PAGE_SIZE) int pageSize,
  32 + @RequestParam(PAGE) int page,
  33 + @RequestParam(value = "dictName", required = false) String dictName,
  34 + @RequestParam(value = "dictCode", required = false) String dictCode,
  35 + @RequestParam(value = ORDER_FILED, required = false) String orderBy,
  36 + @RequestParam(value = ORDER_TYPE, required = false) OrderTypeEnum orderType) {
  37 +
  38 + HashMap<String, Object> queryMap = new HashMap<>();
  39 + queryMap.put(PAGE_SIZE, pageSize);
  40 + queryMap.put(PAGE, page);
  41 + queryMap.put(ORDER_FILED, orderBy);
  42 + queryMap.put("dictName", dictName);
  43 + queryMap.put("dictCode", dictCode);
  44 + if (orderType != null) {
  45 + queryMap.put(ORDER_TYPE, orderType.name());
  46 + }
  47 + return sysDictService.page(queryMap);
  48 + }
  49 +
  50 + @PostMapping
  51 + public ResponseResult<SysDictDTO> saveSysDict(
  52 + @Validated({AddGroup.class}) @RequestBody SysDictDTO sysDictDTO) throws ThingsboardException {
  53 + SysDictDTO newDTO =
  54 + sysDictService.saveSysDict(sysDictDTO, getCurrentUser().getCurrentTenantId());
  55 + return ResponseResult.success(newDTO);
  56 + }
  57 +
  58 + @DeleteMapping
  59 + public ResponseResult<String> deleteSysDict(
  60 + @Validated({DeleteGroup.class}) @RequestBody DeleteDTO deleteDTO) {
  61 + return sysDictService.deleteSysDict(deleteDTO.getIds())
  62 + ? ResponseResult.success(FastIotConstants.StateValue.DELETE_SUCCESS)
  63 + : ResponseResult.failed(FastIotConstants.StateValue.DELETE_FAILED);
  64 + }
  65 +
  66 + @PutMapping
  67 + public ResponseResult<SysDictDTO> updateSysDict(
  68 + @Validated({UpdateGroup.class}) @RequestBody SysDictDTO SysDictDTO)
  69 + throws ThingsboardException {
  70 + return ResponseResult.success(
  71 + sysDictService.updateSysDict(SysDictDTO, getCurrentUser().getCurrentTenantId()));
  72 + }
  73 +}
  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.SysDictItemDTO;
  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.SysDictItemService;
  19 +
  20 +import java.util.HashMap;
  21 +import java.util.List;
  22 +import java.util.Map;
  23 +
  24 +import static org.thingsboard.server.common.data.yunteng.constant.QueryConstant.*;
  25 +
  26 +@RestController
  27 +@RequestMapping("api/v1/dictItem")
  28 +@RequiredArgsConstructor
  29 +public class YtDictItemController extends BaseController {
  30 + private final SysDictItemService sysDictItemService;
  31 +
  32 + @GetMapping(params = {PAGE_SIZE, PAGE})
  33 + public PageData<SysDictItemDTO> pageSysDictItem(
  34 + @RequestParam(PAGE_SIZE) int pageSize,
  35 + @RequestParam(PAGE) int page,
  36 + @RequestParam(value = "dictId", required = false) String dictId,
  37 + @RequestParam(value = "itemText", required = false) String itemText,
  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) {
  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("itemText", itemText);
  47 + queryMap.put("status", status);
  48 + queryMap.put("dictId", dictId);
  49 + if (orderType != null) {
  50 + queryMap.put(ORDER_TYPE, orderType.name());
  51 + }
  52 + return sysDictItemService.page(queryMap);
  53 + }
  54 +
  55 + @PostMapping
  56 + public ResponseResult<SysDictItemDTO> saveSysDictItem(
  57 + @Validated({AddGroup.class}) @RequestBody SysDictItemDTO sysDictItemDTO)
  58 + throws ThingsboardException {
  59 + SysDictItemDTO newDTO =
  60 + sysDictItemService.saveSysDictItem(sysDictItemDTO, getCurrentUser().getCurrentTenantId());
  61 + return ResponseResult.success(newDTO);
  62 + }
  63 +
  64 + @DeleteMapping
  65 + public ResponseResult<String> deleteSysDictItem(
  66 + @Validated({DeleteGroup.class}) @RequestBody DeleteDTO deleteDTO) {
  67 + return sysDictItemService.deleteSysDictItem(deleteDTO.getIds())
  68 + ? ResponseResult.success(FastIotConstants.StateValue.DELETE_SUCCESS)
  69 + : ResponseResult.failed(FastIotConstants.StateValue.DELETE_FAILED);
  70 + }
  71 +
  72 + @PutMapping
  73 + public ResponseResult<SysDictItemDTO> updateSysDictItem(
  74 + @Validated({UpdateGroup.class}) @RequestBody SysDictItemDTO SysDictItemDTO)
  75 + throws ThingsboardException {
  76 + return ResponseResult.success(
  77 + sysDictItemService.updateSysDictItem(
  78 + SysDictItemDTO, getCurrentUser().getCurrentTenantId()));
  79 + }
  80 +
  81 + @PostMapping("/find")
  82 + public ResponseEntity<List<SysDictItemDTO>> findDictItemByDictCode(
  83 + @RequestBody Map<String, String> dictCode) {
  84 + return ResponseEntity.ok(sysDictItemService.findDictItemByDictCode(dictCode.get("dictCode")));
  85 + }
  86 +}
  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.ResponseEntity;
  7 +import org.springframework.web.bind.annotation.*;
  8 +import org.thingsboard.server.common.data.exception.ThingsboardException;
  9 +import org.thingsboard.server.common.data.yunteng.dto.SysEnterpriseDTO;
  10 +import org.thingsboard.server.controller.BaseController;
  11 +import org.thingsboard.server.dao.yunteng.service.SysEnterpriseService;
  12 +
  13 +/**
  14 + * @author: 徐浩然
  15 + * @desc: 企业信息
  16 + * @date: 2021/12/3-18:45
  17 + */
  18 +@Api(tags = "企业信息")
  19 +@RestController
  20 +@RequestMapping("api/v1/enterprise")
  21 +@RequiredArgsConstructor
  22 +public class YtEnterpriseController extends BaseController {
  23 +
  24 + private final SysEnterpriseService sysEnterpriseService;
  25 +
  26 + @GetMapping("get")
  27 + @ApiOperation("查询详情")
  28 + public ResponseEntity<SysEnterpriseDTO> get() throws ThingsboardException {
  29 + return ResponseEntity.ok(sysEnterpriseService.get(getCurrentUser().getCurrentTenantId()));
  30 + }
  31 +
  32 + @PutMapping("update")
  33 + @ApiOperation("更新")
  34 + public ResponseEntity update(@RequestBody SysEnterpriseDTO sysEnterpriseDTO)
  35 + throws ThingsboardException {
  36 + return sysEnterpriseService.update(sysEnterpriseDTO, getCurrentUser().getCurrentTenantId())
  37 + ? ResponseEntity.ok().build()
  38 + : ResponseEntity.badRequest().build();
  39 + }
  40 +}
1 package org.thingsboard.server.controller.yunteng; 1 package org.thingsboard.server.controller.yunteng;
2 2
3 -import io.jsonwebtoken.*; 3 +import io.swagger.annotations.Api;
  4 +import io.swagger.annotations.ApiOperation;
4 import lombok.RequiredArgsConstructor; 5 import lombok.RequiredArgsConstructor;
5 -import lombok.extern.slf4j.Slf4j;  
6 -import org.springframework.security.authentication.BadCredentialsException;  
7 -import org.springframework.util.Assert; 6 +import org.springframework.http.ResponseEntity;
8 import org.springframework.web.bind.annotation.*; 7 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; 8 +import org.thingsboard.server.common.data.exception.ThingsboardException;
  9 +import org.thingsboard.server.common.data.yunteng.dto.SysNoticeDTO;
  10 +import org.thingsboard.server.common.data.yunteng.enums.OrderTypeEnum;
  11 +import org.thingsboard.server.common.data.yunteng.enums.SysNoticeTypeEnum;
  12 +import org.thingsboard.server.common.data.yunteng.utils.tools.PageData;
  13 +import org.thingsboard.server.controller.BaseController;
  14 +import org.thingsboard.server.dao.yunteng.entities.SysNotice;
  15 +import org.thingsboard.server.dao.yunteng.service.SysNoticeService;
12 16
13 -import java.net.InetAddress; 17 +import java.util.HashMap;
  18 +import java.util.List;
  19 +import java.util.Map;
  20 +
  21 +import static org.thingsboard.server.common.data.yunteng.constant.QueryConstant.*;
14 22
15 /** 23 /**
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 + * @author: 徐浩然
  25 + * @desc: 通知管理
  26 + * @date: 2021/12/2-11:05
24 */ 27 */
  28 +@Api(tags = "通知管理")
25 @RestController 29 @RestController
26 -@RequestMapping("/api/yt/notice") 30 +@RequestMapping("api/v1/notice")
27 @RequiredArgsConstructor 31 @RequiredArgsConstructor
28 -@Slf4j  
29 -public class YtNoticeController { 32 +public class YtNoticeController extends BaseController {
30 33
31 - private final YtNoticeService service; 34 + private final SysNoticeService sysNoticeService;
32 35
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 - } 36 + @GetMapping(
  37 + path = "page",
  38 + params = {PAGE_SIZE, PAGE})
  39 + @ApiOperation("分页")
  40 + public PageData<SysNoticeDTO> page(
  41 + @RequestParam(value = "type", required = false) SysNoticeTypeEnum type,
  42 + @RequestParam(PAGE_SIZE) int pageSize,
  43 + @RequestParam(PAGE) int page,
  44 + @RequestParam(value = ORDER_FILED, required = false) String orderBy,
  45 + @RequestParam(value = ORDER_TYPE, required = false) OrderTypeEnum orderType)
  46 + throws ThingsboardException {
  47 + Map<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("tenantCode", getCurrentUser().getCurrentTenantId());
  52 + if (orderType != null) {
  53 + queryMap.put(ORDER_TYPE, orderType.name());
  54 + }
  55 + // 通知类型
  56 + if (type != null) {
  57 + queryMap.put("type", type.name());
41 } 58 }
  59 + return sysNoticeService.page(queryMap);
  60 + }
42 61
  62 + @GetMapping("{id}")
  63 + @ApiOperation("详情")
  64 + public ResponseEntity<SysNoticeDTO> get(@PathVariable("id") String id)
  65 + throws ThingsboardException {
  66 + return ResponseEntity.ok(sysNoticeService.get(id, getCurrentUser().getCurrentTenantId()));
  67 + }
43 68
  69 + @DeleteMapping("delete")
  70 + @ApiOperation("批量删除")
  71 + public ResponseEntity delete(@RequestParam List<String> ids) throws ThingsboardException {
  72 + boolean flag = sysNoticeService.delete(ids, getCurrentUser().getCurrentTenantId());
  73 + return flag ? ResponseEntity.ok().build() : ResponseEntity.badRequest().build();
  74 + }
44 75
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 - } 76 + @PostMapping("save")
  77 + @ApiOperation("保存草稿")
  78 + public ResponseEntity save(@RequestBody SysNoticeDTO sysNoticeDTO) throws ThingsboardException {
  79 + SysNotice sysNotice =
  80 + sysNoticeService.save(sysNoticeDTO, getCurrentUser().getCurrentTenantId());
  81 + return sysNotice == null ? ResponseEntity.badRequest().build() : ResponseEntity.ok().build();
  82 + }
  83 +
  84 + @PostMapping("send")
  85 + @ApiOperation("发布通知")
  86 + public ResponseEntity send(@RequestBody SysNoticeDTO sysNoticeDTO) throws ThingsboardException {
  87 + SysNotice sysNotice =
  88 + sysNoticeService.send(
  89 + sysNoticeDTO,
  90 + getCurrentUser().getCurrentTenantId(),
  91 + getCurrentUser().getCurrentUserId(),
  92 + "");
  93 + return sysNotice == null ? ResponseEntity.badRequest().build() : ResponseEntity.ok().build();
  94 + }
68 } 95 }
  1 +package org.thingsboard.server.controller.yunteng;
  2 +import io.swagger.annotations.Api;
  3 +import io.swagger.annotations.ApiOperation;
  4 +import lombok.RequiredArgsConstructor;
  5 +import org.jetbrains.annotations.NotNull;
  6 +import org.springframework.http.ResponseEntity;
  7 +import org.springframework.web.bind.annotation.*;
  8 +import org.thingsboard.server.common.data.exception.ThingsboardException;
  9 +import org.thingsboard.server.common.data.yunteng.dto.SysNoticeUserDTO;
  10 +import org.thingsboard.server.common.data.yunteng.enums.OrderTypeEnum;
  11 +import org.thingsboard.server.common.data.yunteng.enums.SysNoticeTypeEnum;
  12 +import org.thingsboard.server.common.data.yunteng.utils.tools.PageData;
  13 +import org.thingsboard.server.controller.BaseController;
  14 +import org.thingsboard.server.dao.yunteng.service.SysNoticeUserService;
  15 +
  16 +import java.util.HashMap;
  17 +import java.util.Map;
  18 +import static org.thingsboard.server.common.data.yunteng.constant.QueryConstant.*;
  19 +
  20 +/**
  21 + * @author: 徐浩然
  22 + * @desc: 我的通知
  23 + * @date: 2021/12/2-22:19
  24 + */
  25 +@Api(tags = "我的通知")
  26 +@RestController
  27 +@RequestMapping("api/v1/noticeUser")
  28 +@RequiredArgsConstructor
  29 +public class YtNoticeUserController extends BaseController {
  30 +
  31 + private final SysNoticeUserService sysNoticeUserService;
  32 +
  33 + @GetMapping(
  34 + path = "read",
  35 + params = {PAGE_SIZE, PAGE})
  36 + @ApiOperation("查看人员阅读情况分页")
  37 + public PageData<SysNoticeUserDTO> read(
  38 + @RequestParam(PAGE_SIZE) int pageSize,
  39 + @RequestParam(PAGE) int page,
  40 + @RequestParam(value = ORDER_FILED, required = false) String orderBy,
  41 + @RequestParam(value = ORDER_TYPE, required = false) OrderTypeEnum orderType) throws ThingsboardException {
  42 + Map<String, Object> queryMap = getMap(pageSize, page, orderBy, orderType);
  43 + return sysNoticeUserService.read(queryMap, getCurrentUser().getCurrentUserId());
  44 + }
  45 +
  46 + @GetMapping(
  47 + path = "page",
  48 + params = {PAGE_SIZE, PAGE})
  49 + @ApiOperation("我的通知分页")
  50 + public PageData<SysNoticeUserDTO> page(
  51 + @RequestParam(value = "type", required = false) SysNoticeTypeEnum type,
  52 + @RequestParam(PAGE_SIZE) int pageSize,
  53 + @RequestParam(PAGE) int page,
  54 + @RequestParam(value = ORDER_FILED, required = false) String orderBy,
  55 + @RequestParam(value = ORDER_TYPE, required = false) OrderTypeEnum orderType) throws ThingsboardException {
  56 + Map<String, Object> queryMap = getMap(pageSize, page, orderBy, orderType);
  57 + // 通知类型
  58 + if (type != null) {
  59 + queryMap.put("type", type.name());
  60 + }
  61 + return sysNoticeUserService.page(queryMap);
  62 + }
  63 +
  64 + @GetMapping("{id}")
  65 + @ApiOperation("详情")
  66 + public ResponseEntity<SysNoticeUserDTO> get(@PathVariable("id") String id) throws ThingsboardException {
  67 + return ResponseEntity.ok(sysNoticeUserService.get(id, getCurrentUser().getCurrentTenantId()));
  68 + }
  69 +
  70 + @NotNull
  71 + private Map<String, Object> getMap(
  72 + @RequestParam(PAGE_SIZE) int pageSize,
  73 + @RequestParam(PAGE) int page,
  74 + @RequestParam(value = ORDER_FILED, required = false) String orderBy,
  75 + @RequestParam(value = ORDER_TYPE, required = false) OrderTypeEnum orderType) throws ThingsboardException {
  76 + Map<String, Object> queryMap = new HashMap<>();
  77 + queryMap.put(PAGE_SIZE, pageSize);
  78 + queryMap.put(PAGE, page);
  79 + queryMap.put(ORDER_FILED, orderBy);
  80 + queryMap.put("tenantCode", getCurrentUser().getCurrentUserId());
  81 + if (orderType != null) {
  82 + queryMap.put(ORDER_TYPE, orderType.name());
  83 + }
  84 + return queryMap;
  85 + }
  86 +}
  1 +package org.thingsboard.server.controller.yunteng;
  2 +import lombok.RequiredArgsConstructor;
  3 +import org.springframework.http.HttpStatus;
  4 +import org.springframework.http.ResponseEntity;
  5 +import org.springframework.validation.annotation.Validated;
  6 +import org.springframework.web.bind.annotation.*;
  7 +import org.springframework.web.servlet.support.ServletUriComponentsBuilder;
  8 +import org.thingsboard.server.common.data.exception.ThingsboardException;
  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.core.exception.FastIotException;
  12 +import org.thingsboard.server.common.data.yunteng.dto.DeleteDTO;
  13 +import org.thingsboard.server.common.data.yunteng.dto.OrganizationDTO;
  14 +import org.thingsboard.server.controller.BaseController;
  15 +import org.thingsboard.server.dao.yunteng.service.OrganizationService;
  16 +
  17 +import java.net.URI;
  18 +import java.util.List;
  19 +import java.util.Optional;
  20 +
  21 +@RestController
  22 +@RequestMapping("api/v1/organization")
  23 +@RequiredArgsConstructor
  24 +public class YtOrganizationController extends BaseController {
  25 +
  26 + private final OrganizationService organizationService;
  27 +
  28 + @PostMapping
  29 + public ResponseEntity<OrganizationDTO> saveGroup(@RequestBody OrganizationDTO groupDTO)
  30 + throws FastIotException, ThingsboardException {
  31 + OrganizationDTO newGroupDTO =
  32 + organizationService.saveOrganization(groupDTO, getCurrentUser().getCurrentTenantId());
  33 + return Optional.ofNullable(newGroupDTO)
  34 + .map(
  35 + dto -> {
  36 + URI location =
  37 + ServletUriComponentsBuilder.fromCurrentRequest()
  38 + .path("/{id}")
  39 + .buildAndExpand(newGroupDTO.getId())
  40 + .toUri();
  41 + return ResponseEntity.created(location).body(newGroupDTO);
  42 + })
  43 + .orElse(ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build());
  44 + }
  45 +
  46 + @DeleteMapping
  47 + public ResponseEntity<Boolean> deleteOrganizations(
  48 + @Validated(DeleteGroup.class) @RequestBody DeleteDTO deleteDTO) throws ThingsboardException {
  49 + return ResponseEntity.ok(
  50 + organizationService.deleteOrganizations(deleteDTO, getCurrentUser().getCurrentTenantId()));
  51 + }
  52 +
  53 + @GetMapping("/me/organizations")
  54 + public List<OrganizationDTO> getMyOrganizations() {
  55 + return organizationService.getMyOrganizations();
  56 + }
  57 +
  58 + @PutMapping
  59 + public OrganizationDTO updateOrganization(@Validated(UpdateGroup.class) @RequestBody OrganizationDTO groupDTO) {
  60 + return organizationService.updateOrganization(groupDTO);
  61 + }
  62 +
  63 + @PutMapping("saveOrUpdateUserOrganizationMapping/{userId}")
  64 + public void bindUserToOrganization(
  65 + @RequestBody String[] organizationIds, @PathVariable("userId") String userId) {
  66 + organizationService.bindUserToOrganization(userId, organizationIds);
  67 + }
  68 +}
  1 +package org.thingsboard.server.controller.yunteng;
  2 +
  3 +import org.springframework.http.ResponseEntity;
  4 +import org.springframework.web.bind.annotation.*;
  5 +import org.springframework.web.multipart.MultipartFile;
  6 +import org.thingsboard.server.common.data.yunteng.core.utils.FileStorageService;
  7 +import org.thingsboard.server.common.data.yunteng.dto.FileUploadResponse;
  8 +
  9 +import javax.servlet.http.HttpServletRequest;
  10 +import javax.servlet.http.HttpServletResponse;
  11 +
  12 +@RestController
  13 +@RequestMapping("api/v1/oss")
  14 +public class YtOssFileController {
  15 +
  16 + private final FileStorageService fileStorageService;
  17 +
  18 + public YtOssFileController(FileStorageService fileStorageService) {
  19 + this.fileStorageService = fileStorageService;
  20 + }
  21 +
  22 + @PostMapping("upload")
  23 + public FileUploadResponse uploadFile(@RequestParam("file") MultipartFile file) {
  24 + return fileStorageService.upload(file);
  25 + }
  26 +
  27 + @GetMapping("/downloadFile/{fileName:.+}")
  28 + public ResponseEntity<?> downloadFile(
  29 + @PathVariable String fileName, HttpServletRequest request, HttpServletResponse response) {
  30 + return fileStorageService.download(fileName, request, response);
  31 + }
  32 +}
  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.ResponseEntity;
  7 +import org.springframework.web.bind.annotation.*;
  8 +import org.thingsboard.server.common.data.exception.ThingsboardException;
  9 +import org.thingsboard.server.common.data.yunteng.dto.SysPlatformDesignDTO;
  10 +import org.thingsboard.server.controller.BaseController;
  11 +import org.thingsboard.server.dao.yunteng.service.SysPlatformDesignService;
  12 +
  13 +/**
  14 + * @author: 徐浩然
  15 + * @desc: 平台定制
  16 + * @date: 2021/12/3-18:44
  17 + */
  18 +@Api(tags = "平台定制")
  19 +@RestController
  20 +@RequestMapping("api/v1/platform")
  21 +@RequiredArgsConstructor
  22 +public class YtPlatformDesignController extends BaseController {
  23 +
  24 + private final SysPlatformDesignService sysPlatformDesignService;
  25 +
  26 + @GetMapping("get")
  27 + @ApiOperation("查询详情")
  28 + public ResponseEntity<SysPlatformDesignDTO> get() throws ThingsboardException {
  29 + return ResponseEntity.ok(sysPlatformDesignService.get(getCurrentUser().getCurrentTenantId()));
  30 + }
  31 +
  32 + @PutMapping("update")
  33 + @ApiOperation("更新")
  34 + public ResponseEntity update(@RequestBody SysPlatformDesignDTO sysPlatformDesignDTO)
  35 + throws ThingsboardException {
  36 + return sysPlatformDesignService.update(
  37 + sysPlatformDesignDTO, getCurrentUser().getCurrentTenantId())
  38 + ? ResponseEntity.ok().build()
  39 + : ResponseEntity.badRequest().build();
  40 + }
  41 +}
application/src/main/java/org/thingsboard/server/controller/yunteng/YtRoleController.java renamed from application/src/main/java/org/thingsboard/server/controller/yunteng/RoleController.java
@@ -23,7 +23,7 @@ import static org.thingsboard.server.common.data.yunteng.constant.QueryConstant. @@ -23,7 +23,7 @@ import static org.thingsboard.server.common.data.yunteng.constant.QueryConstant.
23 @RestController 23 @RestController
24 @RequestMapping("api/yt/role") 24 @RequestMapping("api/yt/role")
25 @RequiredArgsConstructor 25 @RequiredArgsConstructor
26 -public class RoleController extends BaseController { 26 +public class YtRoleController extends BaseController {
27 27
28 private final RoleService roleService; 28 private final RoleService roleService;
29 29
  1 +package org.thingsboard.server.controller.yunteng;
  2 +
  3 +import lombok.RequiredArgsConstructor;
  4 +import org.springframework.validation.annotation.Validated;
  5 +import org.springframework.web.bind.annotation.*;
  6 +import org.thingsboard.server.common.data.exception.ThingsboardException;
  7 +import org.thingsboard.server.common.data.yunteng.common.DeleteGroup;
  8 +import org.thingsboard.server.common.data.yunteng.constant.FastIotConstants;
  9 +import org.thingsboard.server.common.data.yunteng.dto.DeleteDTO;
  10 +import org.thingsboard.server.common.data.yunteng.dto.SmsLogDTO;
  11 +import org.thingsboard.server.common.data.yunteng.enums.OrderTypeEnum;
  12 +import org.thingsboard.server.common.data.yunteng.utils.tools.PageData;
  13 +import org.thingsboard.server.common.data.yunteng.utils.tools.ResponseResult;
  14 +import org.thingsboard.server.controller.BaseController;
  15 +import org.thingsboard.server.dao.yunteng.service.SmsLogService;
  16 +
  17 +import java.util.HashMap;
  18 +
  19 +import static org.thingsboard.server.common.data.yunteng.constant.QueryConstant.*;
  20 +
  21 +@RestController
  22 +@RequestMapping("api/v1/smsLog")
  23 +@RequiredArgsConstructor
  24 +public class YtSmsLogController extends BaseController {
  25 +
  26 + private final SmsLogService smsLogService;
  27 +
  28 + @GetMapping(params = {PAGE_SIZE, PAGE})
  29 + public PageData<SmsLogDTO> pageMessageConfig(
  30 + @RequestParam(PAGE_SIZE) int pageSize,
  31 + @RequestParam(PAGE) int page,
  32 + @RequestParam(value = "toPhone", required = false) String toPhone,
  33 + @RequestParam(value = "startTime", required = false) String startTime,
  34 + @RequestParam(value = "endTime", required = false) String endTime,
  35 + @RequestParam(value = ORDER_FILED, required = false) String orderBy,
  36 + @RequestParam(value = ORDER_TYPE, required = false) OrderTypeEnum orderType)
  37 + throws ThingsboardException {
  38 +
  39 + HashMap<String, Object> queryMap = new HashMap<>();
  40 + queryMap.put(PAGE_SIZE, pageSize);
  41 + queryMap.put(PAGE, page);
  42 + queryMap.put(ORDER_FILED, orderBy);
  43 + queryMap.put("toPhone", toPhone);
  44 + queryMap.put("startTime", startTime);
  45 + queryMap.put("endTime", endTime);
  46 + if (orderType != null) {
  47 + queryMap.put(ORDER_TYPE, orderType.name());
  48 + }
  49 + return smsLogService.page(queryMap, getCurrentUser().getCurrentTenantId());
  50 + }
  51 +
  52 + @DeleteMapping
  53 + public ResponseResult<String> deleteMailLog(
  54 + @Validated({DeleteGroup.class}) @RequestBody DeleteDTO deleteDTO) {
  55 + return smsLogService.deleteSmsLog(deleteDTO.getIds())
  56 + ? ResponseResult.success(FastIotConstants.StateValue.DELETE_SUCCESS)
  57 + : ResponseResult.failed(FastIotConstants.StateValue.DELETE_FAILED);
  58 + }
  59 +}
  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.dto.request.SendResetPasswordEmailMsg;
  7 +import org.thingsboard.server.controller.BaseController;
  8 +import org.thingsboard.server.dao.yunteng.service.YtUserService;
  9 +
  10 +@RestController
  11 +@RequestMapping("/api/v1/tenant")
  12 +@RequiredArgsConstructor
  13 +public class YtTenantController extends BaseController {
  14 +
  15 + private final YtUserService userService;
  16 +
  17 + @PostMapping("/resetPassword/{userId}")
  18 + public void resetPassword(@PathVariable("userId") String userId) throws ThingsboardException {
  19 + userService.resetPassword(
  20 + userId, getCurrentUser().isPtSysadmin(), getCurrentUser().getCurrentTenantId());
  21 + }
  22 +
  23 + @PostMapping("/sendRestPasswordMsg")
  24 + public void resetPassword(@RequestBody SendResetPasswordEmailMsg msg) {
  25 + userService.sendRestPasswordMsg(msg);
  26 + }
  27 +}
  1 +package org.thingsboard.server.controller.yunteng;
  2 +import io.swagger.annotations.Api;
  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.PathVariable;
  8 +import org.springframework.web.bind.annotation.RequestMapping;
  9 +import org.springframework.web.bind.annotation.RestController;
  10 +import org.thingsboard.server.dao.yunteng.entities.SysTown;
  11 +import org.thingsboard.server.dao.yunteng.service.SysTownService;
  12 +
  13 +import java.util.List;
  14 +
  15 +/**
  16 + * @author: 徐浩然
  17 + * @desc: 中国城镇区街
  18 + * @date: 2021/12/3-15:56
  19 + */
  20 +@Api(tags = "中国城镇区街")
  21 +@RestController
  22 +@RequestMapping("api/v1/town")
  23 +@RequiredArgsConstructor
  24 +public class YtTownController {
  25 + private final SysTownService sysTownService;
  26 +
  27 + @GetMapping("list")
  28 + @ApiOperation("查询所有省份")
  29 + public ResponseEntity<List<SysTown>> getCityList() {
  30 + return ResponseEntity.ok(sysTownService.getCityList());
  31 + }
  32 +
  33 + @GetMapping("childs/{variable}/{value}")
  34 + @ApiOperation("查询子集")
  35 + public ResponseEntity<List<SysTown>> childs(
  36 + @PathVariable("variable") String variable, @PathVariable("value") String value) {
  37 + return ResponseEntity.ok(sysTownService.findChilds(variable, value));
  38 + }
  39 +}
@@ -60,4 +60,20 @@ public interface FastIotConstants { @@ -60,4 +60,20 @@ public interface FastIotConstants {
60 String TB_CACHE_CONFIG_KEY = "TB_CONNECT_CACHE"; 60 String TB_CACHE_CONFIG_KEY = "TB_CONNECT_CACHE";
61 String EXISTING_TENANT = "EXISTING_TENANT"; 61 String EXISTING_TENANT = "EXISTING_TENANT";
62 } 62 }
  63 + interface ReadState {
  64 + String UNREAD = "0";
  65 + String READ = "1";
  66 + }
  67 +
  68 + interface ReceiverType {
  69 + String PERSONAL = "3";
  70 + String DEPARTMENT = "2";
  71 + String ORGANIZATION = "1";
  72 + String ALL = "0";
  73 + }
  74 +
  75 + interface DraftStatus {
  76 + String PUBLISHED = "1";
  77 + String DRAFT = "0";
  78 + }
63 } 79 }
@@ -12,6 +12,10 @@ public final class ModelConstants { @@ -12,6 +12,10 @@ public final class ModelConstants {
12 public static final String TENANT_ROLE_TABLE_NAME = "sys_tenant_role"; 12 public static final String TENANT_ROLE_TABLE_NAME = "sys_tenant_role";
13 /** 菜单表 */ 13 /** 菜单表 */
14 public static final String MENU_TABLE_NAME = "sys_menu"; 14 public static final String MENU_TABLE_NAME = "sys_menu";
  15 + /** 通知管理 */
  16 + public static final String SYS_NOTICE_TABLE_NAME = "sys_notice";
  17 + /** 我的通知 */
  18 + public static final String SYS_NOTICE_USER_TABLE_NAME = "sys_notice_user";
15 /** 角色表 */ 19 /** 角色表 */
16 public static final String ROLE_TABLE_NAME = "sys_role"; 20 public static final String ROLE_TABLE_NAME = "sys_role";
17 /** 用户角色关系表 */ 21 /** 用户角色关系表 */
@@ -48,6 +52,14 @@ public final class ModelConstants { @@ -48,6 +52,14 @@ public final class ModelConstants {
48 public static final String IOTFS_ALARM_PROFILE_TABLE_NAME = "iotfs_alarm_profile"; 52 public static final String IOTFS_ALARM_PROFILE_TABLE_NAME = "iotfs_alarm_profile";
49 /** 告警联系人 */ 53 /** 告警联系人 */
50 public static final String IOTFS_ALARM_CONTACT_TABLE_NAME = "iotfs_alarm_contact"; 54 public static final String IOTFS_ALARM_CONTACT_TABLE_NAME = "iotfs_alarm_contact";
  55 + /** 企业信息 */
  56 + public static final String SYS_ENTERPRISE_TABLE_NAME = "sys_enterprise";
  57 + /** 平台定制 */
  58 + public static final String SYS_PLATFORM_DESIGN_TABLE_NAME = "sys_platform_design";
  59 + /** APP定制 */
  60 + public static final String SYS_APP_DESIGN_TABLE_NAME = "sys_app_design";
  61 + /** 中国城镇区街 */
  62 + public static final String SYS_TOWN_TABLE_NAME = "sys_town";
51 } 63 }
52 64
53 public static class TableFields { 65 public static class TableFields {
@@ -28,6 +28,7 @@ public enum ErrorMessage { @@ -28,6 +28,7 @@ public enum ErrorMessage {
28 NONE_DEFAULT_RULE_CHAIN(400009,"该租户不存在默认的规则链"), 28 NONE_DEFAULT_RULE_CHAIN(400009,"该租户不存在默认的规则链"),
29 TENANT_MISMATCHING(400010,"租户不匹配"), 29 TENANT_MISMATCHING(400010,"租户不匹配"),
30 GET_CURRENT_USER_EXCEPTION(400011,"获取当前用户信息异常"), 30 GET_CURRENT_USER_EXCEPTION(400011,"获取当前用户信息异常"),
  31 + SEND_DESTINATION_NOT_FOUND(400012,"通知失败!找不到发送目标"),
31 CONNECT_TO_TB_ERROR(500001,"与TB联系错误"), 32 CONNECT_TO_TB_ERROR(500001,"与TB联系错误"),
32 HAVE_NO_PERMISSION(500002,"没有修改权限"); 33 HAVE_NO_PERMISSION(500002,"没有修改权限");
33 private final int code; 34 private final int code;
  1 +package org.thingsboard.server.common.data.yunteng.dto;
  2 +import com.fasterxml.jackson.annotation.JsonFormat;
  3 +import com.fasterxml.jackson.databind.JsonNode;
  4 +import lombok.Data;
  5 +import org.thingsboard.server.common.data.yunteng.common.aspect.annotation.AutoDict;
  6 +
  7 +import java.time.LocalDateTime;
  8 +
  9 +@Data
  10 +public class SmsLogDTO extends BaseDTO {
  11 +
  12 + /** 短信平台类型 */
  13 + @AutoDict(dictCode = "platform_type")
  14 + private String type;
  15 +
  16 + /** 发送状态:ResponseCodeEnum枚举值 */
  17 + private String status;
  18 +
  19 + /** 发送时间 */
  20 + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
  21 + private LocalDateTime sendTime;
  22 +
  23 + /** 发送手机号 */
  24 + private String toPhone;
  25 +
  26 + /** 发送模板参数 */
  27 + private JsonNode templateParam;
  28 +
  29 + /** 租户Code */
  30 + private String tenantCode;
  31 +
  32 + /**用途*/
  33 + @AutoDict(dictCode = "template_purpose")
  34 + private String templatePurpose;
  35 +
  36 + /**备注*/
  37 + private String remark;
  38 +}
  1 +package org.thingsboard.server.common.data.yunteng.dto;
  2 +
  3 +import io.swagger.annotations.ApiModel;
  4 +import io.swagger.annotations.ApiModelProperty;
  5 +import lombok.Data;
  6 +import lombok.RequiredArgsConstructor;
  7 +
  8 +/**
  9 + * @author: 徐浩然
  10 + * @desc: APP定制
  11 + * @date: 2021/12/3-18:23
  12 + */
  13 +@Data
  14 +@ApiModel(value = "APP定制")
  15 +@RequiredArgsConstructor
  16 +public class SysAppDesignDTO extends BaseDTO {
  17 + @ApiModelProperty(value = "平台名称")
  18 + private String name;
  19 + @ApiModelProperty(value = "logo地址")
  20 + private String logo;
  21 + @ApiModelProperty(value = "背景图片地址")
  22 + private String background;
  23 + @ApiModelProperty(value = "背景颜色")
  24 + private String backgroundColor;
  25 + @ApiModelProperty(value = "轮播图,地址\",\"分割")
  26 + private String rotation;
  27 +}
  1 +package org.thingsboard.server.common.data.yunteng.dto;
  2 +
  3 +import io.swagger.annotations.ApiModel;
  4 +import io.swagger.annotations.ApiModelProperty;
  5 +import lombok.Data;
  6 +import lombok.RequiredArgsConstructor;
  7 +
  8 +/**
  9 + * @author: 徐浩然
  10 + * @desc: 企业信息
  11 + * @date: 2021/12/3-18:11
  12 + */
  13 +@Data
  14 +@ApiModel(value = "企业信息")
  15 +@RequiredArgsConstructor
  16 +public class SysEnterpriseDTO extends BaseDTO {
  17 + @ApiModelProperty(value = "公司名称")
  18 + private String name;
  19 + @ApiModelProperty(value = "公司简称")
  20 + private String abbreviation;
  21 + @ApiModelProperty(value = "公司官网")
  22 + private String officialWebsite;
  23 + @ApiModelProperty(value = "公司邮箱")
  24 + private String email;
  25 + @ApiModelProperty(value = "公司简介")
  26 + private String synopsis;
  27 + @ApiModelProperty(value = "详细地址")
  28 + private String address;
  29 + @ApiModelProperty(value = "联系人")
  30 + private String contacts;
  31 + @ApiModelProperty(value = "区号")
  32 + private String area;
  33 + @ApiModelProperty(value = "联系电话")
  34 + private String tel;
  35 + @ApiModelProperty(value = "省")
  36 + private String nameProv;
  37 + @ApiModelProperty(value = "省code")
  38 + private String codeProv;
  39 + @ApiModelProperty(value = "市")
  40 + private String nameCity;
  41 + @ApiModelProperty(value = "市code")
  42 + private String codeCity;
  43 + @ApiModelProperty(value = "区")
  44 + private String nameCoun;
  45 + @ApiModelProperty(value = "区code")
  46 + private String codeCoun;
  47 + @ApiModelProperty(value = "县")
  48 + private String nameTown;
  49 + @ApiModelProperty(value = "县code")
  50 + private String codeTown;
  51 +}
  1 +package org.thingsboard.server.common.data.yunteng.dto;
  2 +
  3 +import io.swagger.annotations.ApiModel;
  4 +import io.swagger.annotations.ApiModelProperty;
  5 +import lombok.Data;
  6 +import lombok.EqualsAndHashCode;
  7 +import org.thingsboard.server.common.data.yunteng.enums.SysNoticeTypeEnum;
  8 +
  9 +import java.time.LocalDateTime;
  10 +import java.util.List;
  11 +
  12 +/**
  13 + * @author: 徐浩然
  14 + * @desc: 通知管理
  15 + * @date: 2021/12/2-10:32
  16 + */
  17 +@Data
  18 +@ApiModel(value = "通知管理")
  19 +@EqualsAndHashCode(callSuper = false)
  20 +public class SysNoticeDTO extends TenantDTO {
  21 +
  22 + private static final long serialVersionUID = 3466370312762440488L;
  23 + @ApiModelProperty(value = "通知类型",required = true)
  24 + private SysNoticeTypeEnum type;
  25 + @ApiModelProperty(value = "标题",required = true)
  26 + private String title;
  27 + @ApiModelProperty(value = "内容",required = true)
  28 + private String content;
  29 + @ApiModelProperty(value = "接收者(字典值receiver_type) 0:全部 1:组织 2:部门 3:个人",required = true)
  30 + private String receiverType;
  31 + @ApiModelProperty(value = "根据receiverType不同变化,,0:传空,1:组织id,2:部门id,3:用户id",required = true)
  32 + private List<String> pointId;
  33 + @ApiModelProperty(value = "接收者ID,用逗号分开")
  34 + private String receiverTypeIds;
  35 + @ApiModelProperty(value = "发送状态(字典值draft_status) 0:草稿 1:已发布")
  36 + private String status;
  37 + @ApiModelProperty(value = "发送者")
  38 + private String senderName;
  39 + @ApiModelProperty(value = "发送时间")
  40 + private LocalDateTime senderDate;
  41 +}
  1 +package org.thingsboard.server.common.data.yunteng.dto;
  2 +import io.swagger.annotations.ApiModelProperty;
  3 +import lombok.Data;
  4 +import lombok.EqualsAndHashCode;
  5 +import org.thingsboard.server.common.data.yunteng.enums.SysNoticeTypeEnum;
  6 +
  7 +import java.time.LocalDateTime;
  8 +
  9 +/**
  10 + * @author: 徐浩然
  11 + * @desc: 我的通知
  12 + * @date: 2021/12/2-10:56
  13 + */
  14 +@Data
  15 +@EqualsAndHashCode(callSuper = false)
  16 +public class SysNoticeUserDTO extends TenantDTO {
  17 +
  18 + private static final long serialVersionUID = -5421685500963791707L;
  19 + @ApiModelProperty(value = "接收者ID")
  20 + private String receiverId;
  21 + @ApiModelProperty(value = "通知ID")
  22 + private String NoticeId;
  23 + @ApiModelProperty(value = "阅读状态 0:未读 1:已读")
  24 + private String ReadStatus;
  25 + @ApiModelProperty(value = "阅读时间")
  26 + private LocalDateTime ReadDate;
  27 + @ApiModelProperty(value = "通知类型")
  28 + private SysNoticeTypeEnum type;
  29 + @ApiModelProperty(value = "发送者")
  30 + private String senderName;
  31 + @ApiModelProperty(value = "通知管理")
  32 + private SysNoticeDTO sysNotice;
  33 +}
  1 +package org.thingsboard.server.common.data.yunteng.dto;
  2 +
  3 +import io.swagger.annotations.ApiModel;
  4 +import io.swagger.annotations.ApiModelProperty;
  5 +import lombok.Data;
  6 +import lombok.RequiredArgsConstructor;
  7 +
  8 +/**
  9 + * @author: 徐浩然
  10 + * @desc: 平台定制
  11 + * @date: 2021/12/3-18:20
  12 + */
  13 +@Data
  14 +@ApiModel(value = "平台定制")
  15 +@RequiredArgsConstructor
  16 +public class SysPlatformDesignDTO extends BaseDTO {
  17 + @ApiModelProperty(value = "平台名称")
  18 + private String name;
  19 + @ApiModelProperty(value = "logo地址")
  20 + private String logo;
  21 + @ApiModelProperty(value = "icon图标地址")
  22 + private String icon;
  23 + @ApiModelProperty(value = "背景图片地址")
  24 + private String background;
  25 + @ApiModelProperty(value = "背景颜色")
  26 + private String backgroundColor;
  27 + @ApiModelProperty(value = "版权信息")
  28 + private String copyright;
  29 + @ApiModelProperty(value = "备案信息")
  30 + private String presentedOurselves;
  31 + @ApiModelProperty(value = "域名")
  32 + private String domain;
  33 +}
  1 +package org.thingsboard.server.common.data.yunteng.enums;
  2 +
  3 +/**
  4 + * @author: 徐浩然
  5 + * @desc: 通知类型
  6 + * @date: 2021/12/2-11:20
  7 + */
  8 +public enum SysNoticeTypeEnum {
  9 + /** 公告 */
  10 + NOTICE,
  11 + /** 会议 */
  12 + MEETING,
  13 + /** 其它 */
  14 + OTHER
  15 +}
  1 +package org.thingsboard.server.dao.yunteng.entities;
  2 +
  3 +import com.baomidou.mybatisplus.annotation.TableName;
  4 +import lombok.Data;
  5 +import lombok.RequiredArgsConstructor;
  6 +import org.thingsboard.server.common.data.yunteng.constant.ModelConstants;
  7 +
  8 +/**
  9 + * @author: 徐浩然
  10 + * @desc: APP定制
  11 + * @date: 2021/12/3-18:23
  12 + */
  13 +@Data
  14 +@RequiredArgsConstructor
  15 +@TableName(ModelConstants.Table.SYS_APP_DESIGN_TABLE_NAME)
  16 +public class SysAppDesign extends TenantBaseEntity {
  17 + private static final long serialVersionUID = -3412813210017919075L;
  18 + /** 平台名称 */
  19 + private String name;
  20 + /** logo地址 */
  21 + private String logo;
  22 + /** 背景图片地址 */
  23 + private String background;
  24 + /** 背景颜色 */
  25 + private String backgroundColor;
  26 + /** 轮播图,地址","分割 */
  27 + private String rotation;
  28 +}
  1 +package org.thingsboard.server.dao.yunteng.entities;
  2 +
  3 +import com.baomidou.mybatisplus.annotation.TableField;
  4 +import com.baomidou.mybatisplus.annotation.TableName;
  5 +import lombok.Data;
  6 +import lombok.RequiredArgsConstructor;
  7 +import org.thingsboard.server.common.data.yunteng.constant.ModelConstants;
  8 +
  9 +/**
  10 + * @author: 徐浩然
  11 + * @desc: 企业信息
  12 + * @date: 2021/12/3-18:11
  13 + */
  14 +@Data
  15 +@RequiredArgsConstructor
  16 +@TableName(ModelConstants.Table.SYS_ENTERPRISE_TABLE_NAME)
  17 +public class SysEnterprise extends TenantBaseEntity {
  18 + private static final long serialVersionUID = -804373668052255756L;
  19 + /** 公司名称 */
  20 + private String name;
  21 + /** 公司简称 */
  22 + private String abbreviation;
  23 + /** 公司官网 */
  24 + private String officialWebsite;
  25 + /** 公司邮箱 */
  26 + private String email;
  27 + /** 公司简介 */
  28 + private String synopsis;
  29 + /** 详细地址 */
  30 + private String address;
  31 + /** 联系人 */
  32 + private String contacts;
  33 + /** 区号 */
  34 + private String area;
  35 + /** 联系电话 */
  36 + private String tel;
  37 + /** 县code */
  38 + private String codeTown;
  39 + /** 省 */
  40 + @TableField(exist = false)
  41 + private String nameProv;
  42 + /** 省code */
  43 + @TableField(exist = false)
  44 + private String codeProv;
  45 + /** 市 */
  46 + @TableField(exist = false)
  47 + private String nameCity;
  48 + /** 市code */
  49 + @TableField(exist = false)
  50 + private String codeCity;
  51 + /** 区 */
  52 + @TableField(exist = false)
  53 + private String nameCoun;
  54 + /** 区code */
  55 + @TableField(exist = false)
  56 + private String codeCoun;
  57 + /** 县 */
  58 + @TableField(exist = false)
  59 + private String nameTown;
  60 +}
  1 +package org.thingsboard.server.dao.yunteng.entities;
  2 +
  3 +import com.baomidou.mybatisplus.annotation.TableName;
  4 +import lombok.Data;
  5 +import lombok.EqualsAndHashCode;
  6 +import org.thingsboard.server.common.data.yunteng.constant.ModelConstants;
  7 +import org.thingsboard.server.common.data.yunteng.enums.SysNoticeTypeEnum;
  8 +
  9 +import java.time.LocalDateTime;
  10 +
  11 +/**
  12 + * @author: 徐浩然
  13 + * @desc: 通知管理
  14 + * @date: 2021/12/2-10:32
  15 + */
  16 +@Data
  17 +@EqualsAndHashCode(callSuper = false)
  18 +@TableName(ModelConstants.Table.SYS_NOTICE_TABLE_NAME)
  19 +public class SysNotice extends TenantBaseEntity {
  20 +
  21 + private static final long serialVersionUID = 3466370312762440488L;
  22 + /** 通知类型 */
  23 + private SysNoticeTypeEnum type;
  24 + /** 标题 */
  25 + private String title;
  26 + /** 内容 */
  27 + private String content;
  28 + /** 接收者(字典值receiver_type) 0:全部 1:组织 2:部门 3:个人 */
  29 + private String receiverType;
  30 + /** 接收者ID,用逗号分开 */
  31 + private String receiverTypeIds;
  32 + /** 发送状态(字典值draft_status) 0:草稿 1:已发布 */
  33 + private String status;
  34 + /** 发送者 */
  35 + private String senderName;
  36 + /** 发送时间 */
  37 + private LocalDateTime senderDate;
  38 +}
  1 +package org.thingsboard.server.dao.yunteng.entities;
  2 +
  3 +import com.baomidou.mybatisplus.annotation.TableField;
  4 +import com.baomidou.mybatisplus.annotation.TableName;
  5 +import lombok.Data;
  6 +import lombok.EqualsAndHashCode;
  7 +import org.thingsboard.server.common.data.yunteng.constant.ModelConstants;
  8 +import org.thingsboard.server.common.data.yunteng.enums.SysNoticeTypeEnum;
  9 +
  10 +import java.time.LocalDateTime;
  11 +
  12 +/**
  13 + * @author: 徐浩然
  14 + * @desc: 我的通知
  15 + * @date: 2021/12/2-10:56
  16 + */
  17 +@Data
  18 +@EqualsAndHashCode(callSuper = false)
  19 +@TableName(ModelConstants.Table.SYS_NOTICE_USER_TABLE_NAME)
  20 +public class SysNoticeUser extends TenantBaseEntity {
  21 +
  22 + private static final long serialVersionUID = -5421685500963791707L;
  23 + /** 接收者ID */
  24 + private String receiverId;
  25 + /** 通知ID */
  26 + private String NoticeId;
  27 + /** 阅读状态 0:未读 1:已读 */
  28 + private String ReadStatus;
  29 + /** 阅读时间 */
  30 + private LocalDateTime ReadDate;
  31 + /** 通知类型 */
  32 + @TableField(exist = false)
  33 + private SysNoticeTypeEnum type;
  34 + /** 发送者 */
  35 + @TableField(exist = false)
  36 + private String senderName;
  37 + /** 发送时间 */
  38 + @TableField(exist = false)
  39 + private LocalDateTime senderDate;
  40 +}
  1 +package org.thingsboard.server.dao.yunteng.entities;
  2 +
  3 +import com.baomidou.mybatisplus.annotation.TableName;
  4 +import lombok.Data;
  5 +import lombok.RequiredArgsConstructor;
  6 +import org.thingsboard.server.common.data.yunteng.constant.ModelConstants;
  7 +
  8 +/**
  9 + * @author: 徐浩然
  10 + * @desc: 平台定制
  11 + * @date: 2021/12/3-18:20
  12 + */
  13 +@Data
  14 +@RequiredArgsConstructor
  15 +@TableName(ModelConstants.Table.SYS_PLATFORM_DESIGN_TABLE_NAME)
  16 +public class SysPlatformDesign extends TenantBaseEntity {
  17 + private static final long serialVersionUID = 6761478750642927740L;
  18 + /** 平台名称 */
  19 + private String name;
  20 + /** logo地址 */
  21 + private String logo;
  22 + /** icon图标地址 */
  23 + private String icon;
  24 + /** 背景图片地址 */
  25 + private String background;
  26 + /** 背景颜色 */
  27 + private String backgroundColor;
  28 + /** 版权信息 */
  29 + private String copyright;
  30 + /** 备案信息 */
  31 + private String presentedOurselves;
  32 + /** 域名 */
  33 + private String domain;
  34 +}
  1 +package org.thingsboard.server.dao.yunteng.entities;
  2 +
  3 +import com.baomidou.mybatisplus.annotation.TableName;
  4 +import io.swagger.annotations.ApiModel;
  5 +import io.swagger.annotations.ApiModelProperty;
  6 +import lombok.Data;
  7 +import org.thingsboard.server.common.data.yunteng.constant.ModelConstants;
  8 +
  9 +/**
  10 + * @author: 徐浩然
  11 + * @desc: 中国城镇区街
  12 + * @date: 2021/12/3-15:31
  13 + */
  14 +@Data
  15 +@ApiModel(value = "中国城镇区街")
  16 +@TableName(ModelConstants.Table.SYS_TOWN_TABLE_NAME)
  17 +public class SysTown {
  18 + @ApiModelProperty(value = "省")
  19 + private String nameProv;
  20 + @ApiModelProperty(value = "省code")
  21 + private String codeProv;
  22 + @ApiModelProperty(value = "市")
  23 + private String nameCity;
  24 + @ApiModelProperty(value = "市code")
  25 + private String codeCity;
  26 + @ApiModelProperty(value = "区")
  27 + private String nameCoun;
  28 + @ApiModelProperty(value = "区code")
  29 + private String codeCoun;
  30 + @ApiModelProperty(value = "县")
  31 + private String nameTown;
  32 + @ApiModelProperty(value = "县code")
  33 + private String codeTown;
  34 +}
  1 +package org.thingsboard.server.dao.yunteng.impl;
  2 +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  3 +import com.baomidou.mybatisplus.core.metadata.IPage;
  4 +import lombok.RequiredArgsConstructor;
  5 +import lombok.extern.slf4j.Slf4j;
  6 +import org.springframework.stereotype.Service;
  7 +import org.springframework.transaction.annotation.Transactional;
  8 +import org.thingsboard.server.common.data.yunteng.dto.SmsLogDTO;
  9 +import org.thingsboard.server.common.data.yunteng.utils.tools.PageData;
  10 +import org.thingsboard.server.dao.yunteng.entities.SmsLog;
  11 +import org.thingsboard.server.dao.yunteng.mapper.SmsLogMapper;
  12 +import org.thingsboard.server.dao.yunteng.service.AbstractBaseService;
  13 +import org.thingsboard.server.dao.yunteng.service.SmsLogService;
  14 +
  15 +import java.util.Map;
  16 +import java.util.Set;
  17 +
  18 +@Service
  19 +@Slf4j
  20 +@RequiredArgsConstructor
  21 +public class SmsLogServiceImpl extends AbstractBaseService<SmsLogMapper, SmsLog>
  22 + implements SmsLogService {
  23 +
  24 + @Override
  25 + public PageData<SmsLogDTO> page(Map<String, Object> queryMap,String tenantId) {
  26 + IPage<SmsLog> configIPage =
  27 + baseMapper.selectPage(
  28 + getPage(queryMap, "send_time", false),
  29 + new QueryWrapper<SmsLog>()
  30 + .lambda()
  31 + .eq(SmsLog::getTenantCode,tenantId)
  32 + .like(
  33 + queryMap.get("toPhone") != null,
  34 + SmsLog::getToPhone,
  35 + String.valueOf(queryMap.get("toPhone")))
  36 + .between(
  37 + queryMap.get("startTime") != null && queryMap.get("endTime") != null,
  38 + SmsLog::getSendTime,
  39 + queryMap.get("startTime"),
  40 + queryMap.get("endTime")));
  41 + return getPageData(configIPage, SmsLogDTO.class);
  42 + }
  43 +
  44 + @Override
  45 + @Transactional
  46 + public boolean deleteSmsLog(Set<String> ids) {
  47 + return baseMapper.deleteBatchIds(ids) > 0;
  48 + }
  49 +}
  1 +package org.thingsboard.server.dao.yunteng.impl;
  2 +
  3 +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  4 +import lombok.RequiredArgsConstructor;
  5 +import lombok.extern.slf4j.Slf4j;
  6 +import org.springframework.stereotype.Service;
  7 +import org.thingsboard.server.common.data.yunteng.dto.SysAppDesignDTO;
  8 +import org.thingsboard.server.dao.yunteng.entities.SysAppDesign;
  9 +import org.thingsboard.server.dao.yunteng.mapper.SysAppDesignMapper;
  10 +import org.thingsboard.server.dao.yunteng.service.AbstractBaseService;
  11 +import org.thingsboard.server.dao.yunteng.service.SysAppDesignService;
  12 +
  13 +/**
  14 + * @author: 徐浩然
  15 + * @desc: APP定制
  16 + * @date: 2021/12/3-18:40
  17 + */
  18 +@Slf4j
  19 +@Service
  20 +@RequiredArgsConstructor
  21 +public class SysAppDesignServiceImpl extends AbstractBaseService<SysAppDesignMapper, SysAppDesign>
  22 + implements SysAppDesignService {
  23 + @Override
  24 + public boolean save(SysAppDesignDTO sysAppDesignDTO,String tenantId) {
  25 + if (get(tenantId) != null) {
  26 + return false;
  27 + }
  28 + SysAppDesign entity = sysAppDesignDTO.getEntity(SysAppDesign.class);
  29 + entity.setTenantCode(tenantId);
  30 + return baseMapper.insert(entity) > 0;
  31 + }
  32 +
  33 + @Override
  34 + public SysAppDesignDTO get(String tenantId) {
  35 + SysAppDesign sysAppDesign = baseMapper
  36 + .selectOne(
  37 + new LambdaQueryWrapper<SysAppDesign>()
  38 + .eq(SysAppDesign::getTenantCode, tenantId));
  39 + return sysAppDesign == null ? null : sysAppDesign.getDTO(SysAppDesignDTO.class);
  40 + }
  41 +
  42 + @Override
  43 + public boolean update(SysAppDesignDTO sysAppDesignDTO,String tenantId) {
  44 + if (get(tenantId) != null) {
  45 + return baseMapper.update(
  46 + sysAppDesignDTO.getEntity(SysAppDesign.class),
  47 + new LambdaQueryWrapper<SysAppDesign>()
  48 + .eq(SysAppDesign::getTenantCode, tenantId))
  49 + > 0;
  50 + }else {
  51 + return save(sysAppDesignDTO,tenantId);
  52 + }
  53 + }
  54 +}
  1 +package org.thingsboard.server.dao.yunteng.impl;
  2 +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  3 +import com.baomidou.mybatisplus.core.metadata.IPage;
  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.SysDictItemDTO;
  12 +import org.thingsboard.server.common.data.yunteng.utils.tools.PageData;
  13 +import org.thingsboard.server.dao.yunteng.entities.SysDictItem;
  14 +import org.thingsboard.server.dao.yunteng.mapper.SysDictItemMapper;
  15 +import org.thingsboard.server.dao.yunteng.service.AbstractBaseService;
  16 +import org.thingsboard.server.dao.yunteng.service.SysDictItemService;
  17 +
  18 +import java.util.List;
  19 +import java.util.Map;
  20 +import java.util.Set;
  21 +
  22 +@Slf4j
  23 +@Service
  24 +@RequiredArgsConstructor
  25 +public class SysDictItemServiceImpl extends AbstractBaseService<SysDictItemMapper, SysDictItem>
  26 + implements SysDictItemService {
  27 +
  28 + @Override
  29 + public PageData<SysDictItemDTO> page(Map<String, Object> queryMap) {
  30 + if (StringUtils.isEmpty((CharSequence) queryMap.get("dictId"))) {
  31 + throw new DataValidationException(ErrorMessage.INVALID_PARAMETER.getMessage());
  32 + }
  33 + IPage<SysDictItem> iPage =
  34 + baseMapper.selectPage(
  35 + getPage(queryMap, "create_time", false),
  36 + new QueryWrapper<SysDictItem>()
  37 + .lambda()
  38 + .like(
  39 + queryMap.get("itemText") != null,
  40 + SysDictItem::getItemText,
  41 + String.valueOf(queryMap.get("itemText")))
  42 + .eq(
  43 + queryMap.get("dictId") != null,
  44 + SysDictItem::getDictId,
  45 + String.valueOf(queryMap.get("dictId"))));
  46 + return getPageData(iPage, SysDictItemDTO.class);
  47 + }
  48 +
  49 + @Override
  50 + @Transactional
  51 + public SysDictItemDTO saveSysDictItem(SysDictItemDTO sysDictItemDTO,String tenantId) {
  52 + SysDictItem sysDictItem = new SysDictItem();
  53 + sysDictItemDTO.copyToEntity(sysDictItem);
  54 + sysDictItem.setTenantCode(tenantId);
  55 + baseMapper.insert(sysDictItem);
  56 + sysDictItem.copyToDTO(sysDictItemDTO);
  57 + return sysDictItemDTO;
  58 + }
  59 +
  60 + @Override
  61 + @Transactional
  62 + public boolean deleteSysDictItem(Set<String> sysDictItemIds) {
  63 + return baseMapper.deleteBatchIds(sysDictItemIds) > 0;
  64 + }
  65 +
  66 + @Override
  67 + @Transactional
  68 + public SysDictItemDTO updateSysDictItem(SysDictItemDTO sysDictItemDTO,String tenantId) {
  69 + SysDictItem sysDictItem = baseMapper.selectById(sysDictItemDTO.getId());
  70 + sysDictItemDTO.copyToEntity(sysDictItem);
  71 + sysDictItem.setTenantCode(tenantId);
  72 + baseMapper.updateById(sysDictItem);
  73 + sysDictItem.copyToDTO(sysDictItemDTO);
  74 + return sysDictItemDTO;
  75 + }
  76 +
  77 + @Override
  78 + public List<SysDictItemDTO> findDictItemByDictCode(String dictCode) {
  79 + if (StringUtils.isEmpty(dictCode)) {
  80 + throw new DataValidationException(ErrorMessage.INVALID_PARAMETER.getMessage());
  81 + }
  82 + return baseMapper.getDictItemInfo(null, dictCode);
  83 + }
  84 +}
  1 +package org.thingsboard.server.dao.yunteng.impl;
  2 +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  3 +import com.baomidou.mybatisplus.core.metadata.IPage;
  4 +import lombok.RequiredArgsConstructor;
  5 +import lombok.extern.slf4j.Slf4j;
  6 +import org.springframework.stereotype.Service;
  7 +import org.springframework.transaction.annotation.Transactional;
  8 +import org.thingsboard.server.common.data.yunteng.core.exception.DataValidationException;
  9 +import org.thingsboard.server.common.data.yunteng.core.message.ErrorMessage;
  10 +import org.thingsboard.server.common.data.yunteng.dto.SysDictDTO;
  11 +import org.thingsboard.server.common.data.yunteng.dto.SysDictItemDTO;
  12 +import org.thingsboard.server.common.data.yunteng.utils.tools.PageData;
  13 +import org.thingsboard.server.dao.yunteng.entities.SysDict;
  14 +import org.thingsboard.server.dao.yunteng.mapper.SysDictItemMapper;
  15 +import org.thingsboard.server.dao.yunteng.mapper.SysDictMapper;
  16 +import org.thingsboard.server.dao.yunteng.service.AbstractBaseService;
  17 +import org.thingsboard.server.dao.yunteng.service.SysDictService;
  18 +
  19 +import java.util.List;
  20 +import java.util.Map;
  21 +import java.util.Set;
  22 +
  23 +@Slf4j
  24 +@Service
  25 +@RequiredArgsConstructor
  26 +public class SysDictServiceImpl extends AbstractBaseService<SysDictMapper, SysDict>
  27 + implements SysDictService {
  28 +
  29 + private final SysDictItemMapper sysDictItemMapper;
  30 +
  31 + @Override
  32 + public PageData<SysDictDTO> page(Map<String, Object> queryMap) {
  33 + IPage<SysDict> iPage =
  34 + baseMapper.selectPage(
  35 + getPage(queryMap, "create_time", false),
  36 + new QueryWrapper<SysDict>()
  37 + .lambda()
  38 + .like(
  39 + queryMap.get("dictName") != null,
  40 + SysDict::getDictName,
  41 + String.valueOf(queryMap.get("dictName")))
  42 + .like(
  43 + queryMap.get("dictCode") != null,
  44 + SysDict::getDictCode,
  45 + String.valueOf(queryMap.get("dictCode"))));
  46 + return getPageData(iPage, SysDictDTO.class);
  47 + }
  48 +
  49 + @Override
  50 + @Transactional
  51 + public SysDictDTO saveSysDict(SysDictDTO sysDictDTO,String tenantId) {
  52 + // 新增之前先判断该租户是否已添加
  53 + SysDictDTO querySysDict = baseMapper.getDictInfoByCode(tenantId, sysDictDTO.getDictCode());
  54 + if (querySysDict != null) {
  55 + throw new DataValidationException(ErrorMessage.INVALID_PARAMETER.getMessage());
  56 + }
  57 + SysDict sysDict = new SysDict();
  58 + sysDictDTO.copyToEntity(sysDict);
  59 + sysDict.setTenantCode(tenantId);
  60 + baseMapper.insert(sysDict);
  61 + sysDict.copyToDTO(sysDictDTO);
  62 + return sysDictDTO;
  63 + }
  64 +
  65 + @Override
  66 + @Transactional
  67 + public boolean deleteSysDict(Set<String> sysDictIds) {
  68 + for (String id : sysDictIds) {
  69 + List<SysDictItemDTO> sysDictItemDTO =
  70 + sysDictItemMapper.getDictItemInfo(id,null);
  71 + if (sysDictItemDTO != null) {
  72 + throw new DataValidationException(
  73 + "There is a relationship between superiors and subordinates");
  74 + }
  75 + }
  76 + return baseMapper.deleteBatchIds(sysDictIds) > 0;
  77 + }
  78 +
  79 + @Override
  80 + @Transactional
  81 + public SysDictDTO updateSysDict(SysDictDTO sysDictDTO,String tenantId) {
  82 + SysDict sysDict = baseMapper.selectById(sysDictDTO.getId());
  83 + sysDictDTO.copyToEntity(sysDict);
  84 + sysDict.setTenantCode(tenantId);
  85 + baseMapper.updateById(sysDict);
  86 + sysDict.copyToDTO(sysDictDTO);
  87 + return sysDictDTO;
  88 + }
  89 +}
  1 +package org.thingsboard.server.dao.yunteng.impl;
  2 +
  3 +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  4 +import lombok.RequiredArgsConstructor;
  5 +import lombok.extern.slf4j.Slf4j;
  6 +import org.springframework.stereotype.Service;
  7 +import org.thingsboard.server.common.data.yunteng.dto.SysEnterpriseDTO;
  8 +import org.thingsboard.server.dao.yunteng.entities.SysEnterprise;
  9 +import org.thingsboard.server.dao.yunteng.mapper.SysEnterpriseMapper;
  10 +import org.thingsboard.server.dao.yunteng.service.AbstractBaseService;
  11 +import org.thingsboard.server.dao.yunteng.service.SysEnterpriseService;
  12 +
  13 +/**
  14 + * @author: 徐浩然
  15 + * @desc: 企业信息
  16 + * @date: 2021/12/3-18:40
  17 + */
  18 +@Slf4j
  19 +@Service
  20 +@RequiredArgsConstructor
  21 +public class SysEnterpriseServiceImpl
  22 + extends AbstractBaseService<SysEnterpriseMapper, SysEnterprise>
  23 + implements SysEnterpriseService {
  24 + @Override
  25 + public boolean save(SysEnterpriseDTO sysAppDesignDTO,String tenantId) {
  26 + SysEnterprise entity = sysAppDesignDTO.getEntity(SysEnterprise.class);
  27 + entity.setTenantCode(tenantId);
  28 + return baseMapper.insert(entity) > 0;
  29 + }
  30 +
  31 + @Override
  32 + public SysEnterpriseDTO get(String tenantId) {
  33 + SysEnterprise sysEnterprise = baseMapper.get(tenantId).getEntity(SysEnterprise.class);
  34 + return sysEnterprise == null ? null : sysEnterprise.getDTO(SysEnterpriseDTO.class);
  35 + }
  36 +
  37 + @Override
  38 + public boolean update(SysEnterpriseDTO sysAppDesignDTO,String tenantId) {
  39 + if (get(tenantId) != null) {
  40 + return baseMapper.update(
  41 + sysAppDesignDTO.getEntity(SysEnterprise.class),
  42 + new LambdaQueryWrapper<SysEnterprise>()
  43 + .eq(SysEnterprise::getTenantCode,tenantId))
  44 + > 0;
  45 + }else {
  46 + return save(sysAppDesignDTO,tenantId);
  47 + }
  48 + }
  49 +}
  1 +package org.thingsboard.server.dao.yunteng.impl;
  2 +
  3 +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  4 +import com.baomidou.mybatisplus.core.metadata.IPage;
  5 +import lombok.RequiredArgsConstructor;
  6 +import lombok.extern.slf4j.Slf4j;
  7 +import org.apache.commons.lang3.ObjectUtils;
  8 +import org.apache.commons.lang3.StringUtils;
  9 +import org.springframework.stereotype.Service;
  10 +import org.springframework.transaction.annotation.Transactional;
  11 +import org.thingsboard.server.common.data.yunteng.constant.FastIotConstants;
  12 +import org.thingsboard.server.common.data.yunteng.core.exception.EntityCreationException;
  13 +import org.thingsboard.server.common.data.yunteng.core.message.ErrorMessage;
  14 +import org.thingsboard.server.common.data.yunteng.dto.SysNoticeDTO;
  15 +import org.thingsboard.server.common.data.yunteng.utils.tools.PageData;
  16 +import org.thingsboard.server.dao.yunteng.entities.SysNotice;
  17 +import org.thingsboard.server.dao.yunteng.entities.SysNoticeUser;
  18 +import org.thingsboard.server.dao.yunteng.entities.User;
  19 +import org.thingsboard.server.dao.yunteng.mapper.SysNoticeMapper;
  20 +import org.thingsboard.server.dao.yunteng.mapper.UserMapper;
  21 +import org.thingsboard.server.dao.yunteng.service.AbstractBaseService;
  22 +import org.thingsboard.server.dao.yunteng.service.SysNoticeService;
  23 +import org.thingsboard.server.dao.yunteng.service.UserOrganizationMappingService;
  24 +
  25 +import java.time.LocalDateTime;
  26 +import java.util.ArrayList;
  27 +import java.util.List;
  28 +import java.util.Map;
  29 +import java.util.stream.Collectors;
  30 +
  31 +/**
  32 + * @author: 徐浩然
  33 + * @desc: 通知管理
  34 + * @date: 2021/12/2-11:09
  35 + */
  36 +@Slf4j
  37 +@Service
  38 +@RequiredArgsConstructor
  39 +public class SysNoticeServiceImpl extends AbstractBaseService<SysNoticeMapper, SysNotice>
  40 + implements SysNoticeService {
  41 +
  42 + private final SysNoticeUserServiceImpl sysNoticeUserService;
  43 + private final UserOrganizationMappingService userOrganizationMappingService;
  44 + private final UserMapper userMapper;
  45 +
  46 + @Override
  47 + public PageData<SysNoticeDTO> page(Map<String, Object> queryMap) {
  48 + IPage<SysNotice> sysNoticeIPage =
  49 + getPage(queryMap, FastIotConstants.DefaultOrder.CREATE_TIME, true);
  50 + sysNoticeIPage = baseMapper.page(sysNoticeIPage, queryMap);
  51 + return getPageData(sysNoticeIPage, SysNoticeDTO.class);
  52 + }
  53 +
  54 + @Override
  55 + public SysNoticeDTO get(String id,String tenantId) {
  56 + return baseMapper
  57 + .get(id, tenantId)
  58 + .getDTO(SysNoticeDTO.class);
  59 + }
  60 +
  61 + @Override
  62 + public boolean delete(List<String> ids,String tenantId) {
  63 + return baseMapper.delete(
  64 + new LambdaQueryWrapper<SysNotice>()
  65 + .in(SysNotice::getId, ids)
  66 + .eq(SysNotice::getTenantCode, tenantId))
  67 + > 0;
  68 + }
  69 +
  70 + @Override
  71 + public SysNotice save(SysNoticeDTO sysNoticeDTO,String tenantId) {
  72 + SysNotice entity = sysNoticeDTO.getEntity(SysNotice.class);
  73 + // 设置为草稿
  74 + entity.setStatus(FastIotConstants.DraftStatus.DRAFT);
  75 + entity.setTenantCode(tenantId);
  76 + // 拼接需要发送的名单
  77 + if (sysNoticeDTO.getReceiverType() == null || sysNoticeDTO.getPointId() == null) {
  78 + throw new EntityCreationException(ErrorMessage.SEND_DESTINATION_NOT_FOUND.name());
  79 + }
  80 + LambdaQueryWrapper<User> wrapper =
  81 + new LambdaQueryWrapper<User>().eq(User::getTenantCode, entity.getTenantCode());
  82 + switch (entity.getReceiverType()) {
  83 + case FastIotConstants.ReceiverType.ALL:
  84 + // 全部
  85 + entity.setReceiverTypeIds(
  86 + userMapper.selectList(wrapper).stream()
  87 + .map(User::getId)
  88 + .collect(Collectors.joining(",")));
  89 + break;
  90 + case FastIotConstants.ReceiverType.ORGANIZATION:
  91 + // 组织内
  92 + entity.setReceiverTypeIds(
  93 + userOrganizationMappingService
  94 + .getUserIdByOrganizationIds(tenantId,sysNoticeDTO.getPointId().toArray(String[]::new))
  95 + .stream()
  96 + .collect(Collectors.joining(",")));
  97 + break;
  98 + // case FastIotConstants.ReceiverType.DEPARTMENT:
  99 + // // 部门
  100 + // entity.setReceiverTypeIds(
  101 + // userMapper.selectList(wrapper.in(User::getDeptId,
  102 + // sysNoticeDTO.getPointId())).stream()
  103 + // .map(User::getId)
  104 + // .collect(Collectors.joining(",")));
  105 + // break;
  106 + case FastIotConstants.ReceiverType.PERSONAL:
  107 + // 个人
  108 + entity.setReceiverTypeIds(
  109 + sysNoticeDTO.getPointId().stream().collect(Collectors.joining(",")));
  110 + break;
  111 + default:
  112 + throw new EntityCreationException(ErrorMessage.SEND_DESTINATION_NOT_FOUND.name());
  113 + }
  114 + if (StringUtils.isEmpty(entity.getReceiverTypeIds())) {
  115 + throw new EntityCreationException(ErrorMessage.SEND_DESTINATION_NOT_FOUND.name());
  116 + }
  117 +
  118 + if (entity.getId() == null) {
  119 + return baseMapper.insert(entity) > 0 ? entity : null;
  120 + } else {
  121 + return baseMapper.updateById(entity) > 0 ? entity : null;
  122 + }
  123 + }
  124 +
  125 + @Override
  126 + @Transactional
  127 + public SysNotice send(SysNoticeDTO sysNoticeDTO,String tenantId,String currentUserId,String currentUserName) {
  128 + SysNotice save = null;
  129 + // 没有传id则证明不存在需要新增一下
  130 + if (StringUtils.isEmpty(sysNoticeDTO.getId())) {
  131 + save = save(sysNoticeDTO,tenantId);
  132 + if (save == null) {
  133 + return null;
  134 + }
  135 + }
  136 + save.setStatus(FastIotConstants.DraftStatus.PUBLISHED);
  137 + save.setSenderName(currentUserName);
  138 + save.setCreator(currentUserId);
  139 + save.setSenderDate(LocalDateTime.now());
  140 + int update =
  141 + baseMapper.update(
  142 + save,
  143 + new LambdaQueryWrapper<SysNotice>()
  144 + .eq(SysNotice::getId, save.getId())
  145 + .eq(SysNotice::getTenantCode,tenantId));
  146 + if (update > 0) {
  147 + // 发送消息
  148 + String[] split = save.getReceiverTypeIds().split(",");
  149 + List<SysNoticeUser> list = new ArrayList<>(split.length);
  150 + for (int i = 0; i < split.length; i++) {
  151 + SysNoticeUser sysNoticeUser = new SysNoticeUser();
  152 + sysNoticeUser.setReceiverId(split[i]);
  153 + sysNoticeUser.setNoticeId(save.getId());
  154 + sysNoticeUser.setTenantCode(save.getTenantCode());
  155 + sysNoticeUser.setReadStatus(FastIotConstants.ReadState.UNREAD);
  156 + list.add(sysNoticeUser);
  157 + }
  158 + if (ObjectUtils.isEmpty(list) || !sysNoticeUserService.insertBatch(list, 100)) {
  159 + // 通知失败
  160 + throw new EntityCreationException(ErrorMessage.SEND_DESTINATION_NOT_FOUND.name());
  161 + }
  162 + }
  163 + return save;
  164 + }
  165 +}
  1 +package org.thingsboard.server.dao.yunteng.impl;
  2 +
  3 +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
  4 +import com.baomidou.mybatisplus.core.metadata.IPage;
  5 +import org.springframework.stereotype.Service;
  6 +import org.thingsboard.server.common.data.yunteng.constant.FastIotConstants;
  7 +import org.thingsboard.server.common.data.yunteng.dto.SysNoticeUserDTO;
  8 +import org.thingsboard.server.common.data.yunteng.utils.tools.PageData;
  9 +import org.thingsboard.server.dao.yunteng.entities.SysNoticeUser;
  10 +import org.thingsboard.server.dao.yunteng.mapper.SysNoticeUserMapper;
  11 +import org.thingsboard.server.dao.yunteng.service.AbstractBaseService;
  12 +import org.thingsboard.server.dao.yunteng.service.SysNoticeUserService;
  13 +
  14 +import java.time.LocalDateTime;
  15 +import java.util.Map;
  16 +
  17 +/**
  18 + * @author: 徐浩然
  19 + * @desc: 我的通知
  20 + * @date: 2021/12/2-20:43
  21 + */
  22 +@Service
  23 +public class SysNoticeUserServiceImpl
  24 + extends AbstractBaseService<SysNoticeUserMapper, SysNoticeUser>
  25 + implements SysNoticeUserService {
  26 +
  27 + @Override
  28 + public PageData<SysNoticeUserDTO> page(Map<String, Object> queryMap) {
  29 + return getPage(queryMap);
  30 + }
  31 +
  32 + @Override
  33 + public PageData<SysNoticeUserDTO> read(Map<String, Object> queryMap,String currentUserId) {
  34 + queryMap.put("creator", currentUserId);
  35 + return getPage(queryMap);
  36 + }
  37 +
  38 + @Override
  39 + public SysNoticeUserDTO get(String id,String tenantId) {
  40 + SysNoticeUser sysNoticeUser =
  41 + baseMapper.get(id, tenantId).getEntity(SysNoticeUser.class);
  42 + if (!FastIotConstants.ReadState.READ.equals(sysNoticeUser.getReadStatus()) || sysNoticeUser.getReadDate() == null) {
  43 + // 设置已读
  44 + sysNoticeUser.setReadStatus(FastIotConstants.ReadState.READ);
  45 + sysNoticeUser.setReadDate(LocalDateTime.now());
  46 + baseMapper.update(
  47 + null,
  48 + new LambdaUpdateWrapper<SysNoticeUser>()
  49 + .eq(SysNoticeUser::getId, sysNoticeUser.getId())
  50 + .set(SysNoticeUser::getReadStatus, sysNoticeUser.getReadStatus())
  51 + .set(SysNoticeUser::getReadDate, sysNoticeUser.getReadDate()));
  52 + }
  53 + return sysNoticeUser.getDTO(SysNoticeUserDTO.class);
  54 + }
  55 +
  56 + private PageData<SysNoticeUserDTO> getPage(Map<String, Object> queryMap) {
  57 + IPage<SysNoticeUser> page = getPage(queryMap, FastIotConstants.DefaultOrder.CREATE_TIME, true);
  58 + IPage<SysNoticeUserDTO> sysNoticeUserPage = baseMapper.page(page, queryMap);
  59 + return getPageData(sysNoticeUserPage, SysNoticeUserDTO.class);
  60 + }
  61 +}
  1 +package org.thingsboard.server.dao.yunteng.impl;
  2 +
  3 +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  4 +import lombok.RequiredArgsConstructor;
  5 +import lombok.extern.slf4j.Slf4j;
  6 +import org.springframework.stereotype.Service;
  7 +import org.thingsboard.server.common.data.yunteng.dto.SysPlatformDesignDTO;
  8 +import org.thingsboard.server.dao.yunteng.entities.SysPlatformDesign;
  9 +import org.thingsboard.server.dao.yunteng.mapper.SysPlatformDesignMapper;
  10 +import org.thingsboard.server.dao.yunteng.service.AbstractBaseService;
  11 +import org.thingsboard.server.dao.yunteng.service.SysPlatformDesignService;
  12 +
  13 +/**
  14 + * @author: 徐浩然
  15 + * @desc: 平台定制
  16 + * @date: 2021/12/3-18:41
  17 + */
  18 +@Slf4j
  19 +@Service
  20 +@RequiredArgsConstructor
  21 +public class SysPlatformDesignServiceImpl
  22 + extends AbstractBaseService<SysPlatformDesignMapper, SysPlatformDesign>
  23 + implements SysPlatformDesignService {
  24 + @Override
  25 + public boolean save(SysPlatformDesignDTO sysAppDesignDTO,String tenantId) {
  26 + SysPlatformDesign entity = sysAppDesignDTO.getEntity(SysPlatformDesign.class);
  27 + entity.setTenantCode(tenantId);
  28 + return baseMapper.insert(entity) > 0;
  29 + }
  30 +
  31 + @Override
  32 + public SysPlatformDesignDTO get(String tenantId) {
  33 + SysPlatformDesign sysPlatformDesign = baseMapper
  34 + .selectOne(
  35 + new LambdaQueryWrapper<SysPlatformDesign>()
  36 + .eq(SysPlatformDesign::getTenantCode, tenantId));
  37 + return sysPlatformDesign == null ? null : sysPlatformDesign.getDTO(SysPlatformDesignDTO.class);
  38 + }
  39 +
  40 + @Override
  41 + public boolean update(SysPlatformDesignDTO sysAppDesignDTO,String tenantId) {
  42 + if (get(tenantId) != null) {
  43 + return baseMapper.update(
  44 + sysAppDesignDTO.getEntity(SysPlatformDesign.class),
  45 + new LambdaQueryWrapper<SysPlatformDesign>()
  46 + .eq(SysPlatformDesign::getTenantCode, tenantId))
  47 + > 0;
  48 + }else {
  49 + return save(sysAppDesignDTO,tenantId);
  50 + }
  51 + }
  52 +}
  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.springframework.stereotype.Service;
  7 +import org.thingsboard.server.dao.yunteng.entities.SysTown;
  8 +import org.thingsboard.server.dao.yunteng.mapper.SysTownMapper;
  9 +import org.thingsboard.server.dao.yunteng.service.SysTownService;
  10 +
  11 +import java.lang.reflect.Field;
  12 +import java.util.List;
  13 +import java.util.Stack;
  14 +
  15 +/**
  16 + * @author: 徐浩然
  17 + * @desc: 中国城镇区街
  18 + * @date: 2021/12/3-15:37
  19 + */
  20 +@Slf4j
  21 +@Service
  22 +@RequiredArgsConstructor
  23 +public class SysTownServiceImpl implements SysTownService {
  24 +
  25 + private final SysTownMapper sysTownMapper;
  26 +
  27 + @Override
  28 + public List<SysTown> findChilds(String variable, String value) {
  29 + Field[] fields = SysTown.class.getDeclaredFields();
  30 + Stack<String> list = new Stack<>();
  31 + for (int i = 0; i < fields.length; i++) {
  32 + // 查询variable是第几个变量,可以决定groupby什么
  33 + list.add(fields[i].getName());
  34 + if (fields[i].getName().equals(variable)) {
  35 + if (i % 2 == 0) {
  36 + list.add(fields[++i].getName());
  37 + }
  38 + list.add(fields[++i].getName());
  39 + list.add(fields[++i].getName());
  40 + break;
  41 + }
  42 + }
  43 + String[] groupBy =
  44 + list.stream()
  45 + // 驼峰转下划线
  46 + .map(this::to_)
  47 + // 组成需要groupby的字段
  48 + .toArray(String[]::new);
  49 + return sysTownMapper.selectList(
  50 + new QueryWrapper<SysTown>()
  51 + .select(groupBy)
  52 + .eq(to_(variable), value)
  53 + .groupBy(groupBy));
  54 + }
  55 +
  56 + private String to_(String s){
  57 + return s.replaceAll("[A-Z]", "_$0").toLowerCase();
  58 + }
  59 +
  60 + @Override
  61 + public SysTown findParent(String variable, String value) {
  62 + return sysTownMapper.selectList(new QueryWrapper<SysTown>().eq(variable, value)).stream()
  63 + .findFirst()
  64 + .orElse(null);
  65 + }
  66 +
  67 + public List<SysTown> getCityList() {
  68 + return sysTownMapper.getCityList();
  69 + }
  70 +}
  1 +package org.thingsboard.server.dao.yunteng.impl;
  2 +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  3 +import lombok.RequiredArgsConstructor;
  4 +import lombok.extern.slf4j.Slf4j;
  5 +import org.apache.commons.lang3.ObjectUtils;
  6 +import org.springframework.stereotype.Service;
  7 +import org.thingsboard.server.common.data.yunteng.dto.OrganizationDTO;
  8 +import org.thingsboard.server.dao.yunteng.entities.UserOrganizationMapping;
  9 +import org.thingsboard.server.dao.yunteng.mapper.OrganizationMapper;
  10 +import org.thingsboard.server.dao.yunteng.mapper.UserOrganizationMappingMapper;
  11 +import org.thingsboard.server.dao.yunteng.service.UserOrganizationMappingService;
  12 +
  13 +import java.util.ArrayList;
  14 +import java.util.List;
  15 +import java.util.stream.Collectors;
  16 +
  17 +/**
  18 + * @author: 徐浩然
  19 + * @desc: 组织用户关联表
  20 + * @date: 2021/12/3-10:18
  21 + */
  22 +@Slf4j
  23 +@Service
  24 +@RequiredArgsConstructor
  25 +public class UserOrganizationMappingServiceImpl implements UserOrganizationMappingService {
  26 +
  27 + private final UserOrganizationMappingMapper userOrganizationMappingMapper;
  28 + private final OrganizationMapper organizationMapper;
  29 +
  30 + @Override
  31 + public List<String> getUserIdByOrganizationIds(String tenantId,String... ids) {
  32 + List<String> collect =
  33 + organizationMapper
  34 + .findOrganizationTreeList(
  35 + tenantId, List.of(ids))
  36 + .stream()
  37 + .map(OrganizationDTO::getId)
  38 + .collect(Collectors.toList());
  39 + if (ObjectUtils.isEmpty(collect)) {
  40 + return new ArrayList<>();
  41 + } else {
  42 + return userOrganizationMappingMapper
  43 + .selectList(
  44 + new LambdaQueryWrapper<UserOrganizationMapping>()
  45 + .in(UserOrganizationMapping::getOrganizationId, collect))
  46 + .stream()
  47 + .map(UserOrganizationMapping::getUserId)
  48 + .collect(Collectors.toList());
  49 + }
  50 + }
  51 +}
@@ -36,7 +36,7 @@ public class YtOrganizationServiceImpl extends AbstractBaseService<OrganizationM @@ -36,7 +36,7 @@ public class YtOrganizationServiceImpl extends AbstractBaseService<OrganizationM
36 36
37 @Override 37 @Override
38 @Transactional 38 @Transactional
39 - public OrganizationDTO saveOrganization(OrganizationDTO organizationDTO) { 39 + public OrganizationDTO saveOrganization(OrganizationDTO organizationDTO,String tenantId) {
40 Assert.notNull(organizationDTO.getName(), "organization name cannot be null"); 40 Assert.notNull(organizationDTO.getName(), "organization name cannot be null");
41 if (StringUtils.isNotBlank(organizationDTO.getParentId())) { 41 if (StringUtils.isNotBlank(organizationDTO.getParentId())) {
42 Organization organization = baseMapper.selectById(organizationDTO.getParentId()); 42 Organization organization = baseMapper.selectById(organizationDTO.getParentId());
@@ -51,7 +51,7 @@ public class YtOrganizationServiceImpl extends AbstractBaseService<OrganizationM @@ -51,7 +51,7 @@ public class YtOrganizationServiceImpl extends AbstractBaseService<OrganizationM
51 } 51 }
52 } 52 }
53 Organization organization = new Organization(); 53 Organization organization = new Organization();
54 - //organizationDTO.setTenantCode(getCurrentUser().getTenantCode()); 54 + organizationDTO.setTenantCode(tenantId);
55 organizationDTO.copyToEntity(organization, "id"); 55 organizationDTO.copyToEntity(organization, "id");
56 baseMapper.insert(organization); 56 baseMapper.insert(organization);
57 organization.copyToDTO(organizationDTO); 57 organization.copyToDTO(organizationDTO);
@@ -60,7 +60,7 @@ public class YtOrganizationServiceImpl extends AbstractBaseService<OrganizationM @@ -60,7 +60,7 @@ public class YtOrganizationServiceImpl extends AbstractBaseService<OrganizationM
60 60
61 @Override 61 @Override
62 @Transactional 62 @Transactional
63 - public boolean deleteOrganizations(DeleteDTO deleteDTO) { 63 + public boolean deleteOrganizations(DeleteDTO deleteDTO,String tenantId) {
64 if(null == deleteDTO || deleteDTO.getIds().isEmpty()){ 64 if(null == deleteDTO || deleteDTO.getIds().isEmpty()){
65 throw new DataValidationException(ErrorMessage.INVALID_PARAMETER.getMessage()); 65 throw new DataValidationException(ErrorMessage.INVALID_PARAMETER.getMessage());
66 } 66 }
@@ -92,7 +92,7 @@ public class YtOrganizationServiceImpl extends AbstractBaseService<OrganizationM @@ -92,7 +92,7 @@ public class YtOrganizationServiceImpl extends AbstractBaseService<OrganizationM
92 // if (!deviceList.isEmpty()) { 92 // if (!deviceList.isEmpty()) {
93 // throw new DataValidationException("待删除数据存在关联设备,不能删除!"); 93 // throw new DataValidationException("待删除数据存在关联设备,不能删除!");
94 // } 94 // }
95 -// doDeleteUserOrganizationMapping(idToDelete); 95 + doDeleteUserOrganizationMapping(idToDelete);
96 return baseMapper.deleteBatchIds(idToDelete)>0; 96 return baseMapper.deleteBatchIds(idToDelete)>0;
97 } 97 }
98 98
@@ -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 YtMessageTemplateService messageTemplateService;  
63 - private final YtOrganizationService groupService; 62 + private final MessageTemplateService messageTemplateService;
  63 + private final OrganizationService 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;
@@ -75,8 +75,8 @@ public class YtUserServiceImpl extends AbstractBaseService<UserMapper, User> imp @@ -75,8 +75,8 @@ public class YtUserServiceImpl extends AbstractBaseService<UserMapper, User> imp
75 75
76 @Override 76 @Override
77 @Transactional 77 @Transactional
78 - public UserDTO saveAccount(UserDTO userDTO, boolean sendEmail, boolean sendMsg,boolean isSysadmin,String tenantId) {  
79 - boolean isAdminOperate = isSysadmin; 78 + public UserDTO saveAccount(UserDTO userDTO, boolean sendEmail, boolean sendMsg,boolean isPtSysadmin,String tenantId) {
  79 + boolean isAdminOperate = isPtSysadmin;
80 if (StringUtils.isAllBlank(userDTO.getUsername())) { 80 if (StringUtils.isAllBlank(userDTO.getUsername())) {
81 throw new DataValidationException("username is required"); 81 throw new DataValidationException("username is required");
82 } 82 }
@@ -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.setTenantId(userDTO.getTenantCode()); 101 + user.setTenantCode(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.setTenantId(tenantId); 114 + user.setTenantCode(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::getTenantId, userDTO.getTenantCode())) 121 + .eq(User::getTenantCode, 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.setTenantId(tenantId); 125 + user.setTenantCode(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::getTenantId, tenantId)) 131 + .eq(User::getTenantCode, tenantId))
132 > 0; 132 > 0;
133 } 133 }
134 if (userExist) { 134 if (userExist) {
@@ -167,10 +167,10 @@ public class YtUserServiceImpl extends AbstractBaseService<UserMapper, User> imp @@ -167,10 +167,10 @@ public class YtUserServiceImpl extends AbstractBaseService<UserMapper, User> imp
167 } 167 }
168 168
169 @Override 169 @Override
170 - public String getActivationLink(String userId,boolean isSysadmin,String tenantId) { 170 + public String getActivationLink(String userId,boolean isPtSysadmin,String tenantId) {
171 User user = baseMapper.selectById(userId); 171 User user = baseMapper.selectById(userId);
172 - if (!isSysadmin  
173 - && tenantId.equals(user.getTenantId())) { 172 + if (!isPtSysadmin
  173 + && tenantId.equals(user.getTenantCode())) {
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 }
@@ -218,13 +218,13 @@ public class YtUserServiceImpl extends AbstractBaseService<UserMapper, User> imp @@ -218,13 +218,13 @@ public class YtUserServiceImpl extends AbstractBaseService<UserMapper, User> imp
218 } 218 }
219 219
220 @Override 220 @Override
221 - public Optional<UserDTO> getUser(String userId,boolean isSysadmin,String tenantId) { 221 + public Optional<UserDTO> getUser(String userId,boolean isPtSysadmin,String tenantId) {
222 User user = baseMapper.selectById(userId); 222 User user = baseMapper.selectById(userId);
223 if (user != null) { 223 if (user != null) {
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  
227 - && !tenantId.equals(user.getTenantId())) { 226 + if (!isPtSysadmin
  227 + && !tenantId.equals(user.getTenantCode())) {
228 return Optional.empty(); 228 return Optional.empty();
229 } 229 }
230 return Optional.of(userDTO); 230 return Optional.of(userDTO);
@@ -235,11 +235,11 @@ public class YtUserServiceImpl extends AbstractBaseService<UserMapper, User> imp @@ -235,11 +235,11 @@ public class YtUserServiceImpl extends AbstractBaseService<UserMapper, User> imp
235 235
236 @Override 236 @Override
237 @Transactional 237 @Transactional
238 - public UserDTO updateUser(UserDTO userDTO,boolean isSysadmin,String tenantId) { 238 + public UserDTO updateUser(UserDTO userDTO,boolean isPtSysadmin,String tenantId) {
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  
242 - && !user.getTenantId().equals(tenantId)) { 241 + if (!isPtSysadmin
  242 + && !user.getTenantCode().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())) {
@@ -262,13 +262,13 @@ public class YtUserServiceImpl extends AbstractBaseService<UserMapper, User> imp @@ -262,13 +262,13 @@ public class YtUserServiceImpl extends AbstractBaseService<UserMapper, User> imp
262 @Override 262 @Override
263 public PageData<UserDTO> page( 263 public PageData<UserDTO> page(
264 Map<String, Object> queryMap, 264 Map<String, Object> queryMap,
265 - boolean isSysadmin, 265 + boolean isPtSysadmin,
266 boolean isPlatformAdmin, 266 boolean isPlatformAdmin,
267 boolean isTenantAdmin, 267 boolean isTenantAdmin,
268 String tenantId) { 268 String tenantId) {
269 IPage<UserDTO> userPage = new Page<>(); 269 IPage<UserDTO> userPage = new Page<>();
270 IPage<User> userIPage = getPage(queryMap, "create_time", true); 270 IPage<User> userIPage = getPage(queryMap, "create_time", true);
271 - if (isSysadmin) { 271 + if (isPtSysadmin) {
272 String roleType = (String) queryMap.get("roleType"); 272 String roleType = (String) queryMap.get("roleType");
273 if (StringUtils.isEmpty(roleType)) { 273 if (StringUtils.isEmpty(roleType)) {
274 roleType = RoleEnum.ROLE_PLATFORM_ADMIN.name(); 274 roleType = RoleEnum.ROLE_PLATFORM_ADMIN.name();
@@ -318,14 +318,14 @@ public class YtUserServiceImpl extends AbstractBaseService<UserMapper, User> imp @@ -318,14 +318,14 @@ public class YtUserServiceImpl extends AbstractBaseService<UserMapper, User> imp
318 318
319 @Override 319 @Override
320 @Transactional 320 @Transactional
321 - public boolean deleteUser(Set<String> userIds,boolean isSysadmin,String tenantId) { 321 + public boolean deleteUser(Set<String> userIds,boolean isPtSysadmin,String tenantId) {
322 // 1. 判断是否所有的id都属于此人 322 // 1. 判断是否所有的id都属于此人
323 - if (!isSysadmin) { 323 + if (!isPtSysadmin) {
324 int notTenantUserCount = 324 int notTenantUserCount =
325 baseMapper.selectCount( 325 baseMapper.selectCount(
326 new QueryWrapper<User>() 326 new QueryWrapper<User>()
327 .lambda() 327 .lambda()
328 - .ne(User::getTenantId, tenantId) 328 + .ne(User::getTenantCode, 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");
@@ -346,9 +346,9 @@ public class YtUserServiceImpl extends AbstractBaseService<UserMapper, User> imp @@ -346,9 +346,9 @@ public class YtUserServiceImpl extends AbstractBaseService<UserMapper, User> imp
346 346
347 @Override 347 @Override
348 @Transactional 348 @Transactional
349 - public UserDTO saveTenantAdmin(UserDTO userDTO,boolean isSysadmin,String tenantId) { 349 + public UserDTO saveTenantAdmin(UserDTO userDTO,boolean isPtSysadmin,String tenantId) {
350 if (StringUtils.isNotBlank(userDTO.getId())) { 350 if (StringUtils.isNotBlank(userDTO.getId())) {
351 - return updateUser(userDTO,isSysadmin,tenantId); 351 + return updateUser(userDTO,isPtSysadmin,tenantId);
352 } 352 }
353 validatePhoneNumberAndEmail(userDTO); 353 validatePhoneNumberAndEmail(userDTO);
354 User user = new User(); 354 User user = new User();
@@ -379,8 +379,8 @@ public class YtUserServiceImpl extends AbstractBaseService<UserMapper, User> imp @@ -379,8 +379,8 @@ public class YtUserServiceImpl extends AbstractBaseService<UserMapper, User> imp
379 379
380 @Override 380 @Override
381 @Transactional 381 @Transactional
382 - public void resetPassword(String userId,boolean isSysadmin,String tenantId) {  
383 - if (isSysadmin) { 382 + public void resetPassword(String userId,boolean isPtSysadmin,String tenantId) {
  383 + if (isPtSysadmin) {
384 baseMapper.setPassword2NullAndInsertActiveToken( 384 baseMapper.setPassword2NullAndInsertActiveToken(
385 userId, RandomStringUtils.randomAlphabetic(10)); 385 userId, RandomStringUtils.randomAlphabetic(10));
386 } else { 386 } else {
@@ -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.getTenantId())) { 391 + if (tenantId.equals(user.getTenantCode())) {
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.getTenantId().equals(tenantId)) { 437 + || !group.getTenantCode().equals(tenantId)) {
438 return Optional.empty(); 438 return Optional.empty();
439 } 439 }
440 Set<String> userIds = 440 Set<String> userIds =
  1 +package org.thingsboard.server.dao.yunteng.mapper;
  2 +
  3 +import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  4 +import org.apache.ibatis.annotations.Mapper;
  5 +import org.thingsboard.server.dao.yunteng.entities.SysAppDesign;
  6 +
  7 +/**
  8 + * @author: 徐浩然
  9 + * @desc:
  10 + * @date: 2021/12/3-18:28
  11 + */
  12 +@Mapper
  13 +public interface SysAppDesignMapper extends BaseMapper<SysAppDesign> {}
  1 +package org.thingsboard.server.dao.yunteng.mapper;
  2 +
  3 +import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  4 +import org.apache.ibatis.annotations.Mapper;
  5 +import org.apache.ibatis.annotations.Param;
  6 +import org.thingsboard.server.common.data.yunteng.dto.SysEnterpriseDTO;
  7 +import org.thingsboard.server.dao.yunteng.entities.SysEnterprise;
  8 +
  9 +/**
  10 + * @author: 徐浩然
  11 + * @desc: 企业信息
  12 + * @date: 2021/12/3-18:27
  13 + */
  14 +@Mapper
  15 +public interface SysEnterpriseMapper extends BaseMapper<SysEnterprise> {
  16 + /**
  17 + * @param tenantCode
  18 + * @return
  19 + */
  20 + SysEnterpriseDTO get(@Param("tenantCode") String tenantCode);
  21 +}
  1 +package org.thingsboard.server.dao.yunteng.mapper;
  2 +
  3 +import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  4 +import com.baomidou.mybatisplus.core.metadata.IPage;
  5 +import org.apache.ibatis.annotations.Mapper;
  6 +import org.apache.ibatis.annotations.Param;
  7 +import org.thingsboard.server.dao.yunteng.entities.SysNotice;
  8 +
  9 +import java.util.Map;
  10 +
  11 +/**
  12 + * @author: 徐浩然
  13 + * @desc:
  14 + * @date: 2021/12/2-10:33
  15 + */
  16 +@Mapper
  17 +public interface SysNoticeMapper extends BaseMapper<SysNotice> {
  18 + /**
  19 + * @param page
  20 + * @param queryMap
  21 + * @return 系统通知分页
  22 + */
  23 + IPage<SysNotice> page(IPage<SysNotice> page, @Param("queryMap") Map<String, Object> queryMap);
  24 +
  25 + /**
  26 + * @param id
  27 + * @return 消息详情
  28 + */
  29 + SysNotice get(@Param("id") String id, @Param("tenantCode") String tenantCode);
  30 +}
  1 +package org.thingsboard.server.dao.yunteng.mapper;
  2 +
  3 +import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  4 +import com.baomidou.mybatisplus.core.metadata.IPage;
  5 +import org.apache.ibatis.annotations.Mapper;
  6 +import org.apache.ibatis.annotations.Param;
  7 +import org.thingsboard.server.common.data.yunteng.dto.SysNoticeUserDTO;
  8 +import org.thingsboard.server.dao.yunteng.entities.SysNoticeUser;
  9 +
  10 +import java.util.Map;
  11 +
  12 +/**
  13 + * @author: 徐浩然
  14 + * @desc:
  15 + * @date: 2021/12/2-11:02
  16 + */
  17 +@Mapper
  18 +public interface SysNoticeUserMapper extends BaseMapper<SysNoticeUser> {
  19 + /**
  20 + * @param page
  21 + * @param queryMap
  22 + * @return 通知阅读记录分页
  23 + */
  24 + IPage<SysNoticeUserDTO> page(IPage<SysNoticeUser> page, @Param("queryMap") Map<String, Object> queryMap);
  25 +
  26 + /**
  27 + * @param id
  28 + * @param tenantCode
  29 + * @return
  30 + */
  31 + SysNoticeUserDTO get(@Param("id") String id, @Param("tenantCode") String tenantCode);
  32 +}
  1 +package org.thingsboard.server.dao.yunteng.mapper;
  2 +
  3 +import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  4 +import org.apache.ibatis.annotations.Mapper;
  5 +import org.thingsboard.server.dao.yunteng.entities.SysPlatformDesign;
  6 +
  7 +/**
  8 + * @author: 徐浩然
  9 + * @desc:
  10 + * @date: 2021/12/3-18:28
  11 + */
  12 +@Mapper
  13 +public interface SysPlatformDesignMapper extends BaseMapper<SysPlatformDesign> {}
  1 +package org.thingsboard.server.dao.yunteng.mapper;
  2 +
  3 +import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  4 +import org.apache.ibatis.annotations.Mapper;
  5 +import org.apache.ibatis.annotations.Select;
  6 +import org.thingsboard.server.dao.yunteng.entities.SysTown;
  7 +
  8 +import java.util.List;
  9 +
  10 +/**
  11 + * @author: 徐浩然
  12 + * @desc:
  13 + * @date: 2021/12/3-15:34
  14 + */
  15 +@Mapper
  16 +public interface SysTownMapper extends BaseMapper<SysTown> {
  17 + /** @return 查询所有省份 */
  18 + @Select("select name_prov,code_prov from sys_town group by name_prov, code_prov")
  19 + List<SysTown> getCityList();
  20 +}
@@ -2,12 +2,19 @@ package org.thingsboard.server.dao.yunteng.service; @@ -2,12 +2,19 @@ package org.thingsboard.server.dao.yunteng.service;
2 2
3 3
4 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 4 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  5 +import com.baomidou.mybatisplus.core.enums.SqlMethod;
5 import com.baomidou.mybatisplus.core.mapper.BaseMapper; 6 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
6 import com.baomidou.mybatisplus.core.metadata.IPage; 7 import com.baomidou.mybatisplus.core.metadata.IPage;
7 import com.baomidou.mybatisplus.core.metadata.OrderItem; 8 import com.baomidou.mybatisplus.core.metadata.OrderItem;
  9 +import com.baomidou.mybatisplus.core.toolkit.GlobalConfigUtils;
  10 +import com.baomidou.mybatisplus.core.toolkit.ReflectionKit;
8 import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 11 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  12 +import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
9 import org.apache.commons.lang3.StringUtils; 13 import org.apache.commons.lang3.StringUtils;
  14 +import org.apache.ibatis.session.SqlSession;
  15 +import org.mybatis.spring.SqlSessionUtils;
10 import org.springframework.beans.factory.annotation.Autowired; 16 import org.springframework.beans.factory.annotation.Autowired;
  17 +import org.springframework.transaction.annotation.Transactional;
11 import org.thingsboard.server.common.data.yunteng.constant.ModelConstants; 18 import org.thingsboard.server.common.data.yunteng.constant.ModelConstants;
12 import org.thingsboard.server.common.data.yunteng.enums.OrderTypeEnum; 19 import org.thingsboard.server.common.data.yunteng.enums.OrderTypeEnum;
13 import org.thingsboard.server.common.data.yunteng.utils.ReflectUtils; 20 import org.thingsboard.server.common.data.yunteng.utils.ReflectUtils;
@@ -15,6 +22,7 @@ import org.thingsboard.server.common.data.yunteng.utils.tools.PageData; @@ -15,6 +22,7 @@ import org.thingsboard.server.common.data.yunteng.utils.tools.PageData;
15 import org.thingsboard.server.common.data.yunteng.utils.tools.TBPageData; 22 import org.thingsboard.server.common.data.yunteng.utils.tools.TBPageData;
16 import org.thingsboard.server.dao.yunteng.entities.BaseEntity; 23 import org.thingsboard.server.dao.yunteng.entities.BaseEntity;
17 24
  25 +import java.util.Collection;
18 import java.util.List; 26 import java.util.List;
19 import java.util.Map; 27 import java.util.Map;
20 28
@@ -71,4 +79,61 @@ public abstract class AbstractBaseService<M extends BaseMapper<T>, T extends Bas @@ -71,4 +79,61 @@ public abstract class AbstractBaseService<M extends BaseMapper<T>, T extends Bas
71 List<D> targetList = ReflectUtils.sourceToTarget(tbPageData.getData(),target); 79 List<D> targetList = ReflectUtils.sourceToTarget(tbPageData.getData(),target);
72 return new PageData<>(targetList, tbPageData.getTotalElements()); 80 return new PageData<>(targetList, tbPageData.getTotalElements());
73 } 81 }
  82 +
  83 +
  84 + /**
  85 + * 批量插入
  86 + *
  87 + * @param entityList
  88 + * @param batchSize
  89 + * @return
  90 + */
  91 + @Transactional(rollbackFor = Exception.class)
  92 + public boolean insertBatch(Collection<T> entityList, int batchSize) {
  93 + SqlSession batchSqlSession = sqlSessionBatch();
  94 + int i = 0;
  95 + String sqlStatement = sqlStatement(SqlMethod.INSERT_ONE);
  96 + try {
  97 + for (T anEntityList : entityList) {
  98 + batchSqlSession.insert(sqlStatement, anEntityList);
  99 + if (i >= 1 && i % batchSize == 0) {
  100 + batchSqlSession.flushStatements();
  101 + }
  102 + i++;
  103 + }
  104 + batchSqlSession.flushStatements();
  105 + } finally {
  106 + closeSqlSession(batchSqlSession);
  107 + }
  108 + return true;
  109 + }
  110 + /**
  111 + * 获取SqlStatement
  112 + *
  113 + * @param sqlMethod
  114 + * @return
  115 + */
  116 + protected String sqlStatement(SqlMethod sqlMethod) {
  117 + return SqlHelper.table(currentModelClass()).getSqlStatement(sqlMethod.getMethod());
  118 + }
  119 +
  120 + /** 批量操作 SqlSession */
  121 + protected SqlSession sqlSessionBatch() {
  122 + return SqlHelper.sqlSessionBatch(currentModelClass());
  123 + }
  124 +
  125 + /**
  126 + * 释放sqlSession
  127 + *
  128 + * @param sqlSession session
  129 + */
  130 + protected void closeSqlSession(SqlSession sqlSession) {
  131 + SqlSessionUtils.closeSqlSession(
  132 + sqlSession, GlobalConfigUtils.currentSessionFactory(currentModelClass()));
  133 + }
  134 +
  135 + protected Class<T> currentModelClass() {
  136 + return (Class<T>)
  137 + ReflectionKit.getSuperClassGenericType(getClass(), 1);
  138 + }
74 } 139 }
  1 +package org.thingsboard.server.dao.yunteng.service;
  2 +
  3 +
  4 +import org.thingsboard.server.common.data.yunteng.dto.SmsLogDTO;
  5 +import org.thingsboard.server.common.data.yunteng.utils.tools.PageData;
  6 +
  7 +import java.util.Map;
  8 +import java.util.Set;
  9 +
  10 +public interface SmsLogService {
  11 + PageData<SmsLogDTO> page(Map<String, Object> queryMap,String tenantId);
  12 +
  13 + boolean deleteSmsLog(Set<String> ids);
  14 +}
  1 +package org.thingsboard.server.dao.yunteng.service;
  2 +
  3 +
  4 +import org.thingsboard.server.common.data.yunteng.dto.SysAppDesignDTO;
  5 +
  6 +/**
  7 + * @author: 徐浩然
  8 + * @desc:
  9 + * @date: 2021/12/3-18:40
  10 + */
  11 +public interface SysAppDesignService {
  12 + boolean save(SysAppDesignDTO sysAppDesignDTO,String tenantId);
  13 +
  14 + SysAppDesignDTO get(String tenantId);
  15 +
  16 + boolean update(SysAppDesignDTO sysAppDesignDTO,String tenantId);
  17 +}
  1 +package org.thingsboard.server.dao.yunteng.service;
  2 +
  3 +
  4 +import org.thingsboard.server.common.data.yunteng.dto.SysDictItemDTO;
  5 +import org.thingsboard.server.common.data.yunteng.utils.tools.PageData;
  6 +
  7 +import java.util.List;
  8 +import java.util.Map;
  9 +import java.util.Set;
  10 +
  11 +public interface SysDictItemService {
  12 + PageData<SysDictItemDTO> page(Map<String, Object> queryMap);
  13 +
  14 + SysDictItemDTO saveSysDictItem(SysDictItemDTO sysDictItemDTO,String tenantId);
  15 +
  16 + boolean deleteSysDictItem(Set<String> sysDictItemIds);
  17 +
  18 + SysDictItemDTO updateSysDictItem(SysDictItemDTO sysDictItemDTO,String tenantId);
  19 +
  20 + /**
  21 + * 查询字典code对应的所有字典值
  22 + * @param dictCode 字典code
  23 + * @return List<SysDictItemDTO>
  24 + */
  25 + List<SysDictItemDTO> findDictItemByDictCode(String dictCode);
  26 +}
  1 +package org.thingsboard.server.dao.yunteng.service;
  2 +
  3 +import org.thingsboard.server.common.data.yunteng.dto.SysDictDTO;
  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 SysDictService {
  10 + PageData<SysDictDTO> page(Map<String, Object> queryMap);
  11 +
  12 + SysDictDTO saveSysDict(SysDictDTO sysDictDTO,String tenantId);
  13 +
  14 + boolean deleteSysDict(Set<String> sysDictIds);
  15 +
  16 + SysDictDTO updateSysDict(SysDictDTO sysDictDTO,String tenantId);
  17 +}
  1 +package org.thingsboard.server.dao.yunteng.service;
  2 +
  3 +
  4 +import org.thingsboard.server.common.data.yunteng.dto.SysEnterpriseDTO;
  5 +
  6 +/**
  7 + * @author: 徐浩然
  8 + * @desc:
  9 + * @date: 2021/12/3-18:39
  10 + */
  11 +public interface SysEnterpriseService {
  12 + boolean save(SysEnterpriseDTO sysEnterpriseDTO,String tenantId);
  13 +
  14 + SysEnterpriseDTO get(String tenantId);
  15 +
  16 + boolean update(SysEnterpriseDTO sysEnterpriseDTO,String tenantId);
  17 +}
  1 +package org.thingsboard.server.dao.yunteng.service;
  2 +
  3 +import org.thingsboard.server.common.data.yunteng.dto.SysNoticeDTO;
  4 +import org.thingsboard.server.common.data.yunteng.utils.tools.PageData;
  5 +import org.thingsboard.server.dao.yunteng.entities.SysNotice;
  6 +
  7 +import java.util.List;
  8 +import java.util.Map;
  9 +
  10 +/**
  11 + * @author: 徐浩然
  12 + * @desc: 通知管理
  13 + * @date: 2021/12/2-11:07
  14 + */
  15 +public interface SysNoticeService {
  16 +
  17 + PageData<SysNoticeDTO> page(Map<String, Object> queryMap);
  18 +
  19 + SysNoticeDTO get(String id,String tenantId);
  20 +
  21 + boolean delete(List<String> ids,String tenantId);
  22 +
  23 + SysNotice save(SysNoticeDTO sysNoticeDTO,String tenantId);
  24 +
  25 + SysNotice send(SysNoticeDTO sysNoticeDTO,String tenantId,String currentUserId,String currentUserName);
  26 +}
  1 +package org.thingsboard.server.dao.yunteng.service;
  2 +
  3 +import org.thingsboard.server.common.data.yunteng.dto.SysNoticeUserDTO;
  4 +import org.thingsboard.server.common.data.yunteng.utils.tools.PageData;
  5 +
  6 +import java.util.Map;
  7 +
  8 +/**
  9 + * @author: 徐浩然
  10 + * @desc:
  11 + * @date: 2021/12/2-20:43
  12 + */
  13 +public interface SysNoticeUserService {
  14 + PageData<SysNoticeUserDTO> page(Map<String, Object> queryMap);
  15 +
  16 + PageData<SysNoticeUserDTO> read(Map<String, Object> queryMap,String currentUserId);
  17 +
  18 + SysNoticeUserDTO get(String id,String tenantId);
  19 +}
  1 +package org.thingsboard.server.dao.yunteng.service;
  2 +import org.thingsboard.server.common.data.yunteng.dto.SysPlatformDesignDTO;
  3 +
  4 +/**
  5 + * @author: 徐浩然
  6 + * @desc:
  7 + * @date: 2021/12/3-18:39
  8 + */
  9 +public interface SysPlatformDesignService {
  10 + boolean save(SysPlatformDesignDTO sysPlatformDesignDTO,String tenantId);
  11 +
  12 + SysPlatformDesignDTO get(String tenantId);
  13 +
  14 + boolean update(SysPlatformDesignDTO sysPlatformDesignDTO,String tenantId);
  15 +}
  1 +package org.thingsboard.server.dao.yunteng.service;
  2 +
  3 +import org.thingsboard.server.dao.yunteng.entities.SysTown;
  4 +
  5 +import java.util.List;
  6 +
  7 +/**
  8 + * @author: 徐浩然
  9 + * @desc:
  10 + * @date: 2021/12/3-15:36
  11 + */
  12 +public interface SysTownService {
  13 +
  14 + List<SysTown> findChilds(String variable, String value);
  15 +
  16 + SysTown findParent(String variable, String value);
  17 +
  18 + List<SysTown> getCityList();
  19 +}
  1 +package org.thingsboard.server.dao.yunteng.service;
  2 +
  3 +import java.util.List;
  4 +
  5 +/**
  6 + * @author: 徐浩然
  7 + * @desc: 组织用户关联表
  8 + * @date: 2021/12/3-10:17
  9 + */
  10 +public interface UserOrganizationMappingService {
  11 +
  12 + List<String> getUserIdByOrganizationIds(String tenantId,String... ids);
  13 +}
@@ -8,10 +8,10 @@ import org.thingsboard.server.common.data.yunteng.dto.OrganizationDTO; @@ -8,10 +8,10 @@ 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 YtOrganizationService {  
12 - OrganizationDTO saveOrganization(OrganizationDTO organizationDTO); 11 +public interface OrganizationService {
  12 + OrganizationDTO saveOrganization(OrganizationDTO organizationDTO,String tenantId);
13 13
14 - boolean deleteOrganizations(DeleteDTO deleteDTO); 14 + boolean deleteOrganizations(DeleteDTO deleteDTO,String tenantId);
15 15
16 List<OrganizationDTO> getMyOrganizations(); 16 List<OrganizationDTO> getMyOrganizations();
17 17
@@ -16,23 +16,23 @@ import java.util.Set; @@ -16,23 +16,23 @@ import java.util.Set;
16 public interface YtUserService { 16 public interface YtUserService {
17 List<UserDetailsDTO> findUserDetailsByUsername(String username); 17 List<UserDetailsDTO> findUserDetailsByUsername(String username);
18 18
19 - UserDTO saveAccount(UserDTO userDTO, boolean sendEmail, boolean sendMsg,boolean isSysadmin,String tenantId); 19 + UserDTO saveAccount(UserDTO userDTO, boolean sendEmail, boolean sendMsg,boolean isPtSysadmin,String tenantId);
20 20
21 - String getActivationLink(String userId,boolean isSysadmin,String tenantId); 21 + String getActivationLink(String userId,boolean isPtSysadmin,String tenantId);
22 22
23 - Optional<UserDTO> getUser(String userId,boolean isSysadmin,String tenantId); 23 + Optional<UserDTO> getUser(String userId,boolean isPtSysadmin,String tenantId);
24 24
25 UserInfoDTO me(String userId,String tenantId,Set<String> currentRoles); 25 UserInfoDTO me(String userId,String tenantId,Set<String> currentRoles);
26 26
27 - PageData<UserDTO> page(Map<String, Object> queryMap,boolean isSysadmin,boolean isPlatformAdmin,boolean isTenantAdmin,String tenantId); 27 + PageData<UserDTO> page(Map<String, Object> queryMap,boolean isPtSysadmin,boolean isPlatformAdmin,boolean isTenantAdmin,String tenantId);
28 28
29 - UserDTO updateUser(UserDTO userDTO,boolean isSysadmin,String tenantId); 29 + UserDTO updateUser(UserDTO userDTO,boolean isPtSysadmin,String tenantId);
30 30
31 - boolean deleteUser(Set<String> userIds,boolean isSysadmin,String tenantId); 31 + boolean deleteUser(Set<String> userIds,boolean isPtSysadmin,String tenantId);
32 32
33 - UserDTO saveTenantAdmin(UserDTO userDTO,boolean isSysadmin,String tenantId); 33 + UserDTO saveTenantAdmin(UserDTO userDTO,boolean isPtSysadmin,String tenantId);
34 34
35 - void resetPassword(String userId,boolean isSysadmin,String tenantId); 35 + void resetPassword(String userId,boolean isPtSysadmin,String tenantId);
36 36
37 List<UserDetailsDTO> getUserByPhoneNumber(String phoneNumber); 37 List<UserDetailsDTO> getUserByPhoneNumber(String phoneNumber);
38 38
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  3 +
  4 +<mapper namespace="org.thingsboard.server.dao.yunteng.mapper.SysEnterpriseMapper">
  5 + <resultMap id="entity" type="org.thingsboard.server.common.data.yunteng.dto.SysEnterpriseDTO">
  6 + <result property="name" column="name"/>
  7 + <result property="abbreviation" column="abbreviation"/>
  8 + <result property="officialWebsite" column="official_website"/>
  9 + <result property="email" column="email"/>
  10 + <result property="synopsis" column="synopsis"/>
  11 + <result property="address" column="address"/>
  12 + <result property="contacts" column="contacts"/>
  13 + <result property="area" column="area"/>
  14 + <result property="tel" column="tel"/>
  15 + <result property="codeTown" column="code_town"/>
  16 + <result property="nameProv" column="name_prov"/>
  17 + <result property="codeProv" column="code_prov"/>
  18 + <result property="nameCity" column="name_city"/>
  19 + <result property="codeCity" column="code_city"/>
  20 + <result property="nameCoun" column="name_coun"/>
  21 + <result property="codeCoun" column="code_coun"/>
  22 + <result property="nameTown" column="name_town"/>
  23 + </resultMap>
  24 +
  25 + <select id="get" resultMap="entity">
  26 + select se.name as name,
  27 + se.abbreviation abbreviation,
  28 + se.official_website official_website,
  29 + se.email email,
  30 + se.synopsis synopsis,
  31 + se.address address,
  32 + se.contacts contacts,
  33 + se.area area,
  34 + se.tel tel,
  35 + se.code_town code_town,
  36 + st.name_prov name_prov,
  37 + st.code_prov code_prov,
  38 + st.name_city name_city,
  39 + st.code_city code_city,
  40 + st.name_coun name_coun,
  41 + st.code_coun code_coun,
  42 + st.name_town name_town
  43 + from sys_enterprise se
  44 + left join sys_town st on st.code_town = se.code_town
  45 + where se.tenant_code = #{tenantCode}
  46 + </select>
  47 +
  48 +</mapper>
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  3 +
  4 +<mapper namespace="org.thingsboard.server.dao.yunteng.mapper.SysNoticeMapper">
  5 + <resultMap type="org.thingsboard.server.common.data.yunteng.dto.SysNoticeDTO" id="sysNotice">
  6 + <result property="id" column="id"/>
  7 + <result property="type" column="type" typeHandler="org.apache.ibatis.type.EnumTypeHandler"/>
  8 + <result property="title" column="title"/>
  9 + <result property="content" column="content"/>
  10 + <result property="receiverType" column="receiver_type"/>
  11 + <result property="receiverTypeIds" column="receiver_type_ids"/>
  12 + <result property="status" column="status"/>
  13 + <result property="senderName" column="sender_name"/>
  14 + <result property="senderDate" column="sender_date"/>
  15 + <result property="creator" column="creator"/>
  16 + <result property="updater" column="updater"/>
  17 + <result property="createTime" column="create_time"/>
  18 + <result property="updateTime" column="update_time"/>
  19 + <result property="tenantCode" column="tenant_code"/>
  20 + </resultMap>
  21 +
  22 + <sql id="dict">
  23 + SELECT sdi.item_text
  24 + FROM sys_dict_item sdi
  25 + LEFT JOIN sys_dict sd ON sd.id = sdi.dict_id
  26 + WHERE sdi.status = 1
  27 + </sql>
  28 +
  29 + <sql id="columns">
  30 + SELECT
  31 + sn.id id,
  32 + sn.type AS type,
  33 + sn.title title,
  34 + sn.content AS content,
  35 + (
  36 + <include refid="dict"/>
  37 + AND sd.dict_code = 'receiver_type' AND sdi.item_value = sn.receiver_type
  38 + ) receiver_type,
  39 + sn.receiver_type_ids receiver_type_ids,
  40 + (
  41 + <include refid="dict"/>
  42 + AND sd.dict_code = 'draft_status' AND sdi.item_value = sn.status
  43 + ) status,
  44 + sn.sender_name sender_name,
  45 + sn.sender_date sender_date,
  46 + sn.creator creator,
  47 + sn.updater updater,
  48 + sn.create_time create_time,
  49 + sn.update_time update_time,
  50 + sn.tenant_code tenant_code
  51 + FROM sys_notice sn
  52 + </sql>
  53 + <select id="page" resultMap="sysNotice">
  54 + <include refid="columns"/>
  55 + WHERE
  56 + sn.tenant_code = #{queryMap.tenantCode}
  57 + <if test="queryMap.type != null">
  58 + sn.type = #{queryMap.type}
  59 + </if>
  60 + </select>
  61 + <select id="get" resultMap="sysNotice">
  62 + <include refid="columns"/>
  63 + WHERE
  64 + sn.tenant_code = #{tenantCode}
  65 + AND sn.id = #{id}
  66 + </select>
  67 +</mapper>
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  3 +
  4 +<mapper namespace="org.thingsboard.server.dao.yunteng.mapper.SysNoticeUserMapper">
  5 + <resultMap type="org.thingsboard.server.common.data.yunteng.dto.SysNoticeUserDTO" id="sysNoticeUser">
  6 + <result property="receiverId" column="receiver_id"/>
  7 + <result property="noticeId" column="notice_id"/>
  8 + <result property="readStatus" column="read_status"/>
  9 + <result property="readDate" column="read_date"/>
  10 + <result property="creator" column="creator"/>
  11 + <result property="updater" column="updater"/>
  12 + <result property="createTime" column="create_time"/>
  13 + <result property="updateTime" column="update_time"/>
  14 + <result property="tenantCode" column="tenant_code"/>
  15 + <result property="id" column="id"/>
  16 + <association property="sysNotice" javaType="org.thingsboard.server.common.data.yunteng.dto.SysNoticeDTO">
  17 + <result property="type" column="type" typeHandler="org.apache.ibatis.type.EnumTypeHandler"/>
  18 + <result property="senderName" column="sender_name"/>
  19 + <result property="senderDate" column="sender_date"/>
  20 + </association>
  21 + </resultMap>
  22 +
  23 + <sql id="dict">
  24 + SELECT sdi.item_text
  25 + FROM sys_dict_item sdi
  26 + LEFT JOIN sys_dict sd ON sd.id = sdi.dict_id
  27 + WHERE sdi.status = 1
  28 + </sql>
  29 +
  30 + <sql id="columns">
  31 + SELECT snu.receiver_id receiver_id,
  32 + snu.notice_id notice_id,
  33 + snu.read_status read_status,
  34 + snu.read_date read_date,
  35 + snu.creator creator,
  36 + snu.updater updater,
  37 + snu.create_time create_time,
  38 + snu.update_time update_time,
  39 + snu.tenant_code tenant_code,
  40 + snu.id id,
  41 + sn.type AS type,
  42 + sn.sender_name sender_name,
  43 + sn.sender_date sender_date
  44 + FROM sys_notice_user snu
  45 + LEFT JOIN sys_notice sn ON sn.id = snu.notice_id
  46 + </sql>
  47 + <select id="page" resultMap="sysNoticeUser">
  48 + <include refid="columns"/>
  49 + WHERE
  50 + snu.tenant_code = #{queryMap.tenantCode}
  51 + <if test="queryMap.type != null">
  52 + AND sn.type = #{queryMap.type}
  53 + </if>
  54 + <if test="queryMap.creator != null">
  55 + AND sn.creator = #{queryMap.creator}
  56 + </if>
  57 + </select>
  58 + <select id="get" resultMap="sysNoticeUser">
  59 + <include refid="columns"/>
  60 + WHERE
  61 + snu.tenant_code = #{tenantCode}
  62 + AND snu.id = #{id}
  63 + </select>
  64 +</mapper>