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 29 @RestController
30 30 @RequestMapping("api/yt/admin")
31 31 @RequiredArgsConstructor
32   -@PreAuthorize("hasAnyRole('SYS_ADMIN','PLATFORM_ADMIN')")
  32 +//@PreAuthorize("hasAnyRole('SYS_ADMIN','PLATFORM_ADMIN')")
33 33 public class YtAdminController extends BaseController {
34 34
35 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 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 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 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 29 @RestController
26   -@RequestMapping("/api/yt/notice")
  30 +@RequestMapping("api/v1/notice")
27 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 23 @RestController
24 24 @RequestMapping("api/yt/role")
25 25 @RequiredArgsConstructor
26   -public class RoleController extends BaseController {
  26 +public class YtRoleController extends BaseController {
27 27
28 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 60 String TB_CACHE_CONFIG_KEY = "TB_CONNECT_CACHE";
61 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 12 public static final String TENANT_ROLE_TABLE_NAME = "sys_tenant_role";
13 13 /** 菜单表 */
14 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 20 public static final String ROLE_TABLE_NAME = "sys_role";
17 21 /** 用户角色关系表 */
... ... @@ -48,6 +52,14 @@ public final class ModelConstants {
48 52 public static final String IOTFS_ALARM_PROFILE_TABLE_NAME = "iotfs_alarm_profile";
49 53 /** 告警联系人 */
50 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 65 public static class TableFields {
... ...
... ... @@ -28,6 +28,7 @@ public enum ErrorMessage {
28 28 NONE_DEFAULT_RULE_CHAIN(400009,"该租户不存在默认的规则链"),
29 29 TENANT_MISMATCHING(400010,"租户不匹配"),
30 30 GET_CURRENT_USER_EXCEPTION(400011,"获取当前用户信息异常"),
  31 + SEND_DESTINATION_NOT_FOUND(400012,"通知失败!找不到发送目标"),
31 32 CONNECT_TO_TB_ERROR(500001,"与TB联系错误"),
32 33 HAVE_NO_PERMISSION(500002,"没有修改权限");
33 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 36
37 37 @Override
38 38 @Transactional
39   - public OrganizationDTO saveOrganization(OrganizationDTO organizationDTO) {
  39 + public OrganizationDTO saveOrganization(OrganizationDTO organizationDTO,String tenantId) {
40 40 Assert.notNull(organizationDTO.getName(), "organization name cannot be null");
41 41 if (StringUtils.isNotBlank(organizationDTO.getParentId())) {
42 42 Organization organization = baseMapper.selectById(organizationDTO.getParentId());
... ... @@ -51,7 +51,7 @@ public class YtOrganizationServiceImpl extends AbstractBaseService<OrganizationM
51 51 }
52 52 }
53 53 Organization organization = new Organization();
54   - //organizationDTO.setTenantCode(getCurrentUser().getTenantCode());
  54 + organizationDTO.setTenantCode(tenantId);
55 55 organizationDTO.copyToEntity(organization, "id");
56 56 baseMapper.insert(organization);
57 57 organization.copyToDTO(organizationDTO);
... ... @@ -60,7 +60,7 @@ public class YtOrganizationServiceImpl extends AbstractBaseService<OrganizationM
60 60
61 61 @Override
62 62 @Transactional
63   - public boolean deleteOrganizations(DeleteDTO deleteDTO) {
  63 + public boolean deleteOrganizations(DeleteDTO deleteDTO,String tenantId) {
64 64 if(null == deleteDTO || deleteDTO.getIds().isEmpty()){
65 65 throw new DataValidationException(ErrorMessage.INVALID_PARAMETER.getMessage());
66 66 }
... ... @@ -92,7 +92,7 @@ public class YtOrganizationServiceImpl extends AbstractBaseService<OrganizationM
92 92 // if (!deviceList.isEmpty()) {
93 93 // throw new DataValidationException("待删除数据存在关联设备,不能删除!");
94 94 // }
95   -// doDeleteUserOrganizationMapping(idToDelete);
  95 + doDeleteUserOrganizationMapping(idToDelete);
96 96 return baseMapper.deleteBatchIds(idToDelete)>0;
97 97 }
98 98
... ...
... ... @@ -59,8 +59,8 @@ public class YtUserServiceImpl extends AbstractBaseService<UserMapper, User> imp
59 59 private final TenantRoleMapper tenantRoleMapper;
60 60
61 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 65 public static final String ACTIVATE_URL_PATTERN = "%s/api/noauth/activate?activateToken=%s";
66 66 private final PasswordEncoder passwordEncoder;
... ... @@ -75,8 +75,8 @@ public class YtUserServiceImpl extends AbstractBaseService<UserMapper, User> imp
75 75
76 76 @Override
77 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 80 if (StringUtils.isAllBlank(userDTO.getUsername())) {
81 81 throw new DataValidationException("username is required");
82 82 }
... ... @@ -98,7 +98,7 @@ public class YtUserServiceImpl extends AbstractBaseService<UserMapper, User> imp
98 98 if (isAdminOperate) {
99 99 // 添加的租户管理员
100 100 if (StringUtils.isNotBlank(userDTO.getTenantCode())) {
101   - user.setTenantId(userDTO.getTenantCode());
  101 + user.setTenantCode(userDTO.getTenantCode());
102 102 user.setPassword(passwordEncoder.encode(DEFAULT_PWD));
103 103 int tenantExist =
104 104 tenantMapper.selectCount(
... ... @@ -111,24 +111,24 @@ public class YtUserServiceImpl extends AbstractBaseService<UserMapper, User> imp
111 111 } else {
112 112 // 添加的平台系统其他用户
113 113 user.setLevel(FastIotConstants.LevelValue.IS_OTHER_ADMIN);
114   - user.setTenantId(tenantId);
  114 + user.setTenantCode(tenantId);
115 115 }
116 116 userExist =
117 117 baseMapper.selectCount(
118 118 new QueryWrapper<User>()
119 119 .lambda()
120 120 .eq(User::getUsername, userDTO.getUsername())
121   - .eq(User::getTenantId, userDTO.getTenantCode()))
  121 + .eq(User::getTenantCode, userDTO.getTenantCode()))
122 122 > 0;
123 123 } else {
124 124 user.setLevel(FastIotConstants.LevelValue.IS_NORMAL);
125   - user.setTenantId(tenantId);
  125 + user.setTenantCode(tenantId);
126 126 userExist =
127 127 baseMapper.selectCount(
128 128 new QueryWrapper<User>()
129 129 .lambda()
130 130 .eq(User::getUsername, userDTO.getUsername())
131   - .eq(User::getTenantId, tenantId))
  131 + .eq(User::getTenantCode, tenantId))
132 132 > 0;
133 133 }
134 134 if (userExist) {
... ... @@ -167,10 +167,10 @@ public class YtUserServiceImpl extends AbstractBaseService<UserMapper, User> imp
167 167 }
168 168
169 169 @Override
170   - public String getActivationLink(String userId,boolean isSysadmin,String tenantId) {
  170 + public String getActivationLink(String userId,boolean isPtSysadmin,String tenantId) {
171 171 User user = baseMapper.selectById(userId);
172   - if (!isSysadmin
173   - && tenantId.equals(user.getTenantId())) {
  172 + if (!isPtSysadmin
  173 + && tenantId.equals(user.getTenantCode())) {
174 174 throw new AccessDeniedException(
175 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 218 }
219 219
220 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 222 User user = baseMapper.selectById(userId);
223 223 if (user != null) {
224 224 UserDTO userDTO = new UserDTO();
225 225 user.copyToDTO(userDTO, PASSWORD, ACTIVATE_TOKEN);
226   - if (!isSysadmin
227   - && !tenantId.equals(user.getTenantId())) {
  226 + if (!isPtSysadmin
  227 + && !tenantId.equals(user.getTenantCode())) {
228 228 return Optional.empty();
229 229 }
230 230 return Optional.of(userDTO);
... ... @@ -235,11 +235,11 @@ public class YtUserServiceImpl extends AbstractBaseService<UserMapper, User> imp
235 235
236 236 @Override
237 237 @Transactional
238   - public UserDTO updateUser(UserDTO userDTO,boolean isSysadmin,String tenantId) {
  238 + public UserDTO updateUser(UserDTO userDTO,boolean isPtSysadmin,String tenantId) {
239 239 Assert.notNull(userDTO.getId(), "user is must be specified");
240 240 User user = baseMapper.selectById(userDTO.getId());
241   - if (!isSysadmin
242   - && !user.getTenantId().equals(tenantId)) {
  241 + if (!isPtSysadmin
  242 + && !user.getTenantCode().equals(tenantId)) {
243 243 throw new NoneTenantAssetException("this user not belong to current tenant");
244 244 }
245 245 if (!user.getUsername().equals(userDTO.getUsername())) {
... ... @@ -262,13 +262,13 @@ public class YtUserServiceImpl extends AbstractBaseService<UserMapper, User> imp
262 262 @Override
263 263 public PageData<UserDTO> page(
264 264 Map<String, Object> queryMap,
265   - boolean isSysadmin,
  265 + boolean isPtSysadmin,
266 266 boolean isPlatformAdmin,
267 267 boolean isTenantAdmin,
268 268 String tenantId) {
269 269 IPage<UserDTO> userPage = new Page<>();
270 270 IPage<User> userIPage = getPage(queryMap, "create_time", true);
271   - if (isSysadmin) {
  271 + if (isPtSysadmin) {
272 272 String roleType = (String) queryMap.get("roleType");
273 273 if (StringUtils.isEmpty(roleType)) {
274 274 roleType = RoleEnum.ROLE_PLATFORM_ADMIN.name();
... ... @@ -318,14 +318,14 @@ public class YtUserServiceImpl extends AbstractBaseService<UserMapper, User> imp
318 318
319 319 @Override
320 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 322 // 1. 判断是否所有的id都属于此人
323   - if (!isSysadmin) {
  323 + if (!isPtSysadmin) {
324 324 int notTenantUserCount =
325 325 baseMapper.selectCount(
326 326 new QueryWrapper<User>()
327 327 .lambda()
328   - .ne(User::getTenantId, tenantId)
  328 + .ne(User::getTenantCode, tenantId)
329 329 .in(User::getId, userIds));
330 330 if (notTenantUserCount > 0) {
331 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 346
347 347 @Override
348 348 @Transactional
349   - public UserDTO saveTenantAdmin(UserDTO userDTO,boolean isSysadmin,String tenantId) {
  349 + public UserDTO saveTenantAdmin(UserDTO userDTO,boolean isPtSysadmin,String tenantId) {
350 350 if (StringUtils.isNotBlank(userDTO.getId())) {
351   - return updateUser(userDTO,isSysadmin,tenantId);
  351 + return updateUser(userDTO,isPtSysadmin,tenantId);
352 352 }
353 353 validatePhoneNumberAndEmail(userDTO);
354 354 User user = new User();
... ... @@ -379,8 +379,8 @@ public class YtUserServiceImpl extends AbstractBaseService<UserMapper, User> imp
379 379
380 380 @Override
381 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 384 baseMapper.setPassword2NullAndInsertActiveToken(
385 385 userId, RandomStringUtils.randomAlphabetic(10));
386 386 } else {
... ... @@ -388,7 +388,7 @@ public class YtUserServiceImpl extends AbstractBaseService<UserMapper, User> imp
388 388 if (user == null) {
389 389 return;
390 390 }
391   - if (tenantId.equals(user.getTenantId())) {
  391 + if (tenantId.equals(user.getTenantCode())) {
392 392 baseMapper.setPassword2NullAndInsertActiveToken(
393 393 userId, RandomStringUtils.randomAlphabetic(10));
394 394 }
... ... @@ -434,7 +434,7 @@ public class YtUserServiceImpl extends AbstractBaseService<UserMapper, User> imp
434 434 public Optional<List<UserDTO>> getOrganizationUserByOrganizationId(String groupId,String tenantId) {
435 435 Organization group = organizationMapper.selectById(groupId);
436 436 if (group == null
437   - || !group.getTenantId().equals(tenantId)) {
  437 + || !group.getTenantCode().equals(tenantId)) {
438 438 return Optional.empty();
439 439 }
440 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 2
3 3
4 4 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  5 +import com.baomidou.mybatisplus.core.enums.SqlMethod;
5 6 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
6 7 import com.baomidou.mybatisplus.core.metadata.IPage;
7 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 11 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  12 +import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
9 13 import org.apache.commons.lang3.StringUtils;
  14 +import org.apache.ibatis.session.SqlSession;
  15 +import org.mybatis.spring.SqlSessionUtils;
10 16 import org.springframework.beans.factory.annotation.Autowired;
  17 +import org.springframework.transaction.annotation.Transactional;
11 18 import org.thingsboard.server.common.data.yunteng.constant.ModelConstants;
12 19 import org.thingsboard.server.common.data.yunteng.enums.OrderTypeEnum;
13 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 22 import org.thingsboard.server.common.data.yunteng.utils.tools.TBPageData;
16 23 import org.thingsboard.server.dao.yunteng.entities.BaseEntity;
17 24
  25 +import java.util.Collection;
18 26 import java.util.List;
19 27 import java.util.Map;
20 28
... ... @@ -71,4 +79,61 @@ public abstract class AbstractBaseService<M extends BaseMapper<T>, T extends Bas
71 79 List<D> targetList = ReflectUtils.sourceToTarget(tbPageData.getData(),target);
72 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 8 import java.util.List;
9 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 16 List<OrganizationDTO> getMyOrganizations();
17 17
... ...
... ... @@ -16,23 +16,23 @@ import java.util.Set;
16 16 public interface YtUserService {
17 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 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 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>
... ...