This commit is contained in:
高云鹏 2024-06-28 14:04:27 +08:00
commit 6b14550f85
11 changed files with 848 additions and 60 deletions

View File

@ -79,4 +79,15 @@ public class SysUserController {
public PageDataInfo<SysUserVo> queryUserList(@RequestBody SysUserQueryDto sysUserQueryDto, PageQuery pageQuery) {
return sysUserService.queryUserList(sysUserQueryDto, pageQuery);
}
/**
* 用户信息修改接口
* @return 结果提示信息
*/
@PostMapping("/updateById")
public R<?> updateUserById(@RequestBody SysUserDto sysUserDto) {
sysUserService.updateUserById(sysUserDto);
return R.success();
}
}

View File

@ -10,11 +10,7 @@ public class ChangePasswordDto {
@JsonSerialize(using = ToStringSerializer.class)
private Long id;
private String phone;
private String email;
private String userName;
private String oldPassword;
private String newPassword;
}

View File

@ -12,6 +12,8 @@ public interface SysUserService {
SysUserDto updateUser(SysUserDto sysUserDto);
SysUserDto updateUserById(SysUserDto sysUserDto);
void deleteUser(DeleteDto deleteDto);
PageDataInfo<SysUserVo> queryUserList(SysUserQueryDto sysUserQueryDto, PageQuery pageQuery);

View File

@ -142,14 +142,15 @@ public class LoginServiceImpl implements LoginService {
if (sysUser == null) {
throw new ServiceException("用户不存在");
}
if (!BCrypt.checkpw(changePasswordDto.getOldPassword(), sysUser.getPassword())) {
throw new ServiceException("原密码不正确");
}
String newPassword ="";
if (!StringUtils.isEmpty(changePasswordDto.getNewPassword())) {
newPassword = BCrypt.hashpw(changePasswordDto.getNewPassword(), BCrypt.gensalt());
sysUser.setPassword(newPassword);
}
sysUser.setUserName(changePasswordDto.getUserName());
sysUser.setEmail(changePasswordDto.getEmail());
sysUser.setPhone(changePasswordDto.getPhone());
sysUser.setUpdatedBy(sysUser.getAccount());
sysUser.setUpdatedTime(new Date());
return sysUserMapper.updateById(sysUser);
}

View File

@ -112,17 +112,16 @@ public class SysRoleServiceImpl implements SysRoleService {
@Override
public SysRoleDto updateRole(SysRoleDto sysRoleDto) {
SysRole sysRole = new SysRole();
if (StringUtils.isEmpty(sysRoleDto.getId())) {
throw new ServiceException("参数缺失");
}
SysRole role = sysRoleMapper.selectByCode(sysRoleDto.getRoleCode());
if (role == null) {
throw new ServiceException(String.format("角色 %s 不存在", sysRoleDto.getRoleCode()));
SysRole sysRole = sysRoleMapper.selectById(sysRoleDto.getId());
if (sysRole == null) {
throw new ServiceException(String.format("角色 %s 不存在", sysRoleDto.getId()));
}
if (StringUtils.hasText(sysRoleDto.getRoleName())) {
//若与数据库中角色名相同 则表示未对名称进行修改
if (!role.getRoleName().equals(sysRoleDto.getRoleName())) {
if (!sysRole.getRoleName().equals(sysRoleDto.getRoleName())) {
//判断角色名是否存在
long roleCount = sysRoleMapper.existRoleByName(sysRoleDto.getRoleName());
if (roleCount > 0) {

View File

@ -56,7 +56,12 @@ public class SysUserServiceImpl implements SysUserService {
SysUser sysUser = new SysUser();
BeanCopyUtils.copy(sysUserDto,sysUser);
//密码加密
String passwordEncode = BCrypt.hashpw("123456789", BCrypt.gensalt());
String passwordEncode = "";
if (StringUtils.isEmpty(sysUserDto.getPassword())) {
passwordEncode = BCrypt.hashpw("123456789", BCrypt.gensalt());
} else {
passwordEncode = BCrypt.hashpw(sysUserDto.getPassword(), BCrypt.gensalt());
}
sysUser.setId(SequenceUtils.generateId());
sysUser.setRevision(1);
sysUser.setCreatedTime(new Date());
@ -166,6 +171,23 @@ public class SysUserServiceImpl implements SysUserService {
return sysUserDto;
}
@Override
public SysUserDto updateUserById(SysUserDto sysUserDto) {
SysUser sysUser = new SysUser();
if (sysUserDto.getId() == null) {
throw new ServiceException("参数缺失");
}
SysUser oldSysUser = sysUserMapper.selectById(sysUserDto.getId());
sysUser.setId(sysUserDto.getId());
sysUser.setUpdatedTime(new Date());
sysUser.setUserName(sysUserDto.getUserName());
sysUser.setEmail(sysUserDto.getEmail());
sysUser.setPhone(sysUserDto.getPhone());
sysUser.setUpdatedBy(oldSysUser.getAccount());
sysUserMapper.updateById(sysUser);
return sysUserDto;
}
@Override
public void deleteUser(DeleteDto deleteDto) {
if (StringUtils.isEmpty(deleteDto.getId())) {

View File

@ -46,7 +46,7 @@
and parent_menu_id = #{sysMenu.parentMenuId}
</if>
<if test="sysMenu.menuName != null and sysMenu.menuName != ''">
and menu_name = #{sysMenu.menuName}
and menu_name like concat('%',#{sysMenu.menuName},'%')
</if>
</where>
order by menu_order
@ -57,7 +57,7 @@
</select>
<select id="queryChildMenus" resultMap="SysMenuChildMap">
select * from sys_menu where parent_menu_id = #{id}
select * from sys_menu where parent_menu_id = #{id} order by menu_order
</select>
<select id="createTree" resultMap="SysMenuChildMap">

View File

@ -1,3 +1,4 @@
* [首页](/)
* [API接口文档](api/api_list.md)
* [API说明](api/readme.md)
* [系统管理](api/api_list.md)
* [设备管理](api/equipment.md)

688
docs/api/equipment.md Normal file
View File

@ -0,0 +1,688 @@
# 设备相关模块
## API接口一览表
| 接口分类 | 接口描述 | API接口 | 权限 |
| ------------- | -------------------------------- | ------------------------------------- | ---------------------------- |
| 2.1设备类型 | 2.1.1获取所有设备类型信息 | /api/equipment/type/list | |
| 2.2物模型 | 2.2.1获取物模型列表 | /api/equipment/model/list | |
| | 2.2.2物模型新增 | /api/equipment/model/add | SYS_AUTHORITY_ID_ADMIN |
| | 2.2.3物模型修改 | /api/equipment/model/update | SYS_AUTHORITY_ID_ADMIN |
| | 2.2.4物模型删除 | /api/equipment/model/delete | SYS_AUTHORITY_ID_ADMIN |
| 2.2物模型属性 | 2.2.5获取物模型属性列表 | /api/equipment/model/attribute/list | |
| | 2.2.6物模型属性新增 | /api/equipment/model/attribute/add | SYS_AUTHORITY_ID_ADMIN |
| | 2.2.7物模型属性修改 | /api/equipment/model/attribute/update | SYS_AUTHORITY_ID_ADMIN |
| | 2.2.8物模型属性删除 | /api/equipment/model/attribute/delete | SYS_AUTHORITY_ID_ADMIN |
| 2.2物模型方法 | 2.2.9获取物模型方法列表 | /api/equipment/model/service/list | |
| | 2.2.10物模型方法新增 | /api/equipment/model/service/add | SYS_AUTHORITY_ID_ADMIN |
| | 2.2.11物模型方法修改 | /api/equipment/model/service/update | SYS_AUTHORITY_ID_ADMIN |
| | 2.2.12物模型方法删除 | /api/equipment/model/service/delete | SYS_AUTHORITY_ID_ADMIN |
| | 2.2.13 Excel导出物模型属性和方法 | /api/equipment/model/export | |
| | 2.2.14 Excel导入物模型属性和方法 | /api/equipment/model/import | SYS_AUTHORITY_ID_ADMIN |
| 2.3设备台账 | 2.3.1 设备不分页查询 | /api/equipment/list | SYS_AUTHORITY_ID_DEVICE_VIEW |
| | 2.3.2 设备分页查询 | /api/equipment/query | SYS_AUTHORITY_ID_DEVICE_VIEW |
| | 2.3.3 设备新增 | /api/equipment/add | SYS_AUTHORITY_ID_DEVICE_MGR |
| | 2.3.4 设备修改 | /api/equipment/update | SYS_AUTHORITY_ID_DEVICE_MGR |
| | 2.3.5 设备删除 | /api/equipment/delete | SYS_AUTHORITY_ID_DEVICE_MGR |
| | 2.3.6 Excel导出设备清单 | /api/equipment/export | SYS_AUTHORITY_ID_DEVICE_VIEW |
| | 2.3.7 Excel导入设备清单 | /api/equipment/import | SYS_AUTHORITY_ID_DEVICE_MGR |
### 2.1 设备类型相关接口
#### 2.1.1 获取所有设备类型信息
POST 请求接口
> /api/equipment/type/list
请求参数
返回报文
```json
{
"code": 200,
"msg": "操作成功",
"success": true,
"data": [
{
"equipmentTypeId": "10001",
"equipmentTypeName": "风电场"
},
{
"equipmentTypeId": "10002",
"equipmentTypeName": "机组"
}
]
}
```
### 2.2 物模型相关接口
#### 2.2.1 获取物模型列表
POST 请求接口
> /api/equipment/model/list
请求参数
```json
{
"objectType":"10002",
"iotModelName":"倍福机组",
"iotModelCode":"beckhoff"
}
```
入参描述
| 参数名 | 参数类型 | 可选 | 描述 |
| ------------ | -------- | ---- | ---------- |
| objectType | String | yes | 设备类型ID |
| iotModelName | String | yes | 物模型名称 |
| iotModelCode | String | yes | 物模型编码 |
返回报文
```json
{
"code": 200,
"msg": "操作成功",
"success": true,
"data": [
{
"id": "123",
"objectType": "10002",
"iotModelCode": "beckhoff",
"iotModelName": "倍福机组",
"revision": 1,
"createdBy": "admin",
"createdTime": "2024-06-27 15:08:23",
"updatedBy": "admin",
"updatedTime": "2024-06-27 15:08:23"
}
]
}
```
注意: 按设备类型、物模型名称进行排序
#### 2.2.2物模型新增
POST 请求接口
> /api/equipment/model/add
请求参数
```json
{
"objectType": "10002",
"iotModelCode": "beckhoff",
"iotModelName": "倍福机组",
"revision": 1,
"createdBy": "admin",
"createdTime": "2024-06-27 15:08:23"
}
```
入参描述
| 参数名 | 参数类型 | 可选 | 描述 |
| ------------ | -------- | ---- | ---------- |
| objectType | 字符串 | No | 设备类型ID |
| iotModelCode | 字符串 | No | 物模型编码 |
| iotModelName | 字符串 | No | 物模型名称 |
| revision | 数值 | No | 乐观锁 |
| createdBy | 字符串 | Yes | 创建人 |
| createdTime | 字符串 | Yes | 创建时间 |
返回报文
```json
{
"code": 200,
"msg": "操作成功",
"success": true,
"data": [
{
"id": "123",
"objectType": "10002",
"iotModelCode": "beckhoff",
"iotModelName": "倍福机组",
"revision": 1,
"createdBy": "admin",
"createdTime": "2024-06-27 15:08:23",
"updatedBy": "admin",
"updatedTime": "2024-06-27 15:08:23"
}
]
}
```
#### 2.2.3物模型修改
POST 请求接口
> /api/equipment/model/update
请求参数
```json
{
"id": "123",
"objectType": "10002",
"iotModelCode": "beckhoff",
"iotModelName": "倍福机组",
"revision": 1,
"createdBy": "admin",
"createdTime": "2024-06-27 15:08:23"
}
```
入参描述
| 参数名 | 参数类型 | 可选 | 描述 |
| ------------ | -------- | ---- | ---------- |
| id | 字符串 | No | 主键ID |
| objectType | 字符串 | No | 设备类型ID |
| iotModelCode | 字符串 | No | 物模型编码 |
| iotModelName | 字符串 | No | 物模型名称 |
| revision | 数值 | No | 乐观锁 |
| updatedBy | 字符串 | Yes | 更新人 |
| updatedTime | 字符串 | Yes | 更新时间 |
返回报文
```json
{
"code": 200,
"msg": "更新成功",
"success": true
}
```
#### 2.2.4物模型删除
POST 请求接口
> /api/equipment/model/delete
请求参数
```json
{
"id": "123"
}
```
入参描述
| 参数名 | 参数类型 | 可选 | 描述 |
| ------------ | -------- | ---- | ---------- |
| id | 字符串 | No | 主键ID |
返回报文
```json
{
"code": 200,
"msg": "删除成功",
"success": true
}
```
#### 2.2.5获取物模型属性列表
POST 请求接口
> /api/equipment/model/attribute/list
请求参数
```json
{
"iotModelId":"123"
}
```
入参描述
| 参数名 | 参数类型 | 可选 | 描述 |
| ---------- | -------- | ---- | -------- |
| iotModelId | String | No | 物模型ID |
返回报文
```json
{
"code": 200,
"msg": "操作成功",
"success": true,
"data": [
{
"id": "45678",
"iotModelId": "123",
"attributeCode": "grGenPowerForProcess",
"attributeName": "发电机功率实时值",
"attributeType":138,
"porder":1,
"revision": 1,
"createdBy": "admin",
"createdTime": "2024-06-27 15:08:23",
"updatedBy": "admin",
"updatedTime": "2024-06-27 15:08:23"
}
]
}
```
#### 2.2.6物模型属性新增
POST 请求接口
> /api/equipment/model/attribute/add
请求参数
```json
{
"iotModelId": "123",
"attributeCode": "grGenPowerForProcess",
"attributeName": "发电机功率实时值",
"attributeType":138,
"porder":1,
"revision": 1,
"createdBy": "admin",
"createdTime": "2024-06-27 15:08:23"
}
```
入参描述
| 参数名 | 参数类型 | 可选 | 描述 |
| ------------- | -------- | ---- | ------------------------------------ |
| iotModelId | 字符串 | No | 所属物模型ID |
| attributeCode | 字符串 | No | 属性编码 |
| attributeName | 字符串 | No | 属性名称 |
| attributeType | 数值 | No | 属性类型 138模拟量139累积量140离散量 |
| porder | 数值 | No | 顺序号 |
| revision | 数值 | No | 乐观锁 |
| createdBy | 字符串 | Yes | 创建人 |
| createdTime | 字符串 | Yes | 创建时间 |
返回报文
```json
{
"code": 200,
"msg": "操作成功",
"success": true,
"data": [
{
"id": "45678",
"iotModelId": "123",
"attributeCode": "grGenPowerForProcess",
"attributeName": "发电机功率实时值",
"attributeType":138,
"porder":1,
"revision": 1,
"createdBy": "admin",
"createdTime": "2024-06-27 15:08:23",
"updatedBy": "admin",
"updatedTime": "2024-06-27 15:08:23"
}
]
}
```
#### 2.2.7物模型属性修改
POST 请求接口
>/api/equipment/model/attribute/update
请求参数
```json
{
"id": "45678",
"iotModelId": "123",
"attributeCode": "grGenPowerForProcess",
"attributeName": "发电机功率实时值",
"attributeType":138,
"porder":1,
"revision": 1,
"updatedBy": "admin",
"updatedTime": "2024-06-27 15:08:23"
}
```
返回报文
```json
{
"code": 200,
"msg": "更新成功",
"success": true
}
```
#### 2.2.8物模型属性删除
POST 请求接口
> /api/equipment/model/attribute/delete
请求参数
```json
{
"id": "45678"
}
```
入参描述
| 参数名 | 参数类型 | 可选 | 描述 |
| ------ | -------- | ---- | ------ |
| id | 字符串 | No | 主键ID |
返回报文
```json
{
"code": 200,
"msg": "删除成功",
"success": true
}
```
#### 2.2.9获取物模型方法列表
POST 请求接口
>/api/equipment/model/service/list
请求参数
```json
{
"iotModelId":"123"
}
```
入参描述
| 参数名 | 参数类型 | 可选 | 描述 |
| ---------- | -------- | ---- | -------- |
| iotModelId | String | No | 物模型ID |
返回报文
```json
{
"code": 200,
"msg": "操作成功",
"success": true,
"data": [
{
"id": "78901",
"iotModelId": "123",
"serviceCode": "grActivePowerSetPointValue",
"serviceName": "功率设定值",
"serviceType":146,
"porder":1,
"revision": 1,
"createdBy": "admin",
"createdTime": "2024-06-27 15:08:23",
"updatedBy": "admin",
"updatedTime": "2024-06-27 15:08:23"
}
]
}
```
#### 2.2.10物模型方法新增
POST 请求接口
> /api/equipment/model/service/add
请求参数
```json
{
"iotModelId": "123",
"serviceCode": "grActivePowerSetPointValue",
"serviceName": "功率设定值",
"serviceType":146,
"porder":1,
"revision": 1,
"createdBy": "admin",
"createdTime": "2024-06-27 15:08:23"
}
```
入参描述
| 参数名 | 参数类型 | 可选 | 描述 |
| ----------- | -------- | ---- | -------------------------- |
| iotModelId | 字符串 | No | 所属物模型ID |
| serviceCode | 字符串 | No | 方法编码 |
| serviceName | 字符串 | No | 方法名称 |
| serviceType | 数值 | No | 属性类型 146 遥调 147 遥控 |
| porder | 数值 | No | 顺序号 |
| revision | 数值 | No | 乐观锁 |
| createdBy | 字符串 | Yes | 创建人 |
| createdTime | 字符串 | Yes | 创建时间 |
返回报文
```json
{
"code": 200,
"msg": "操作成功",
"success": true,
"data": [
{
"id": "78901",
"iotModelId": "123",
"serviceCode": "grActivePowerSetPointValue",
"serviceName": "功率设定值",
"serviceType":146,
"porder":1,
"revision": 1,
"createdBy": "admin",
"createdTime": "2024-06-27 15:08:23",
"updatedBy": "admin",
"updatedTime": "2024-06-27 15:08:23"
}
]
}
```
#### 2.2.11物模型方法修改
POST 请求接口
>/api/equipment/model/service/update
请求参数
```json
{
"id": "78901",
"iotModelId": "123",
"serviceCode": "grActivePowerSetPointValue",
"serviceName": "功率设定值",
"serviceType":146,
"porder":1,
"revision": 1,
"updatedBy": "admin",
"updatedTime": "2024-06-27 15:08:23"
}
```
返回报文
```json
{
"code": 200,
"msg": "更新成功",
"success": true
}
```
#### 2.2.12物模型方法删除
POST 请求接口
>/api/equipment/model/service/delete
请求参数
```json
{
"id": "78901"
}
```
入参描述
| 参数名 | 参数类型 | 可选 | 描述 |
| ------ | -------- | ---- | ------ |
| id | 字符串 | No | 主键ID |
返回报文
```json
{
"code": 200,
"msg": "删除成功",
"success": true
}
```
#### 2.2.13 Excel导出物模型属性和方法
POST 请求接口
> /api/equipment/model/export
请求参数
```json
{
"id": "123"
}
```
入参描述
| 参数名 | 参数类型 | 可选 | 描述 |
| ------ | -------- | ---- | -------- |
| id | 字符串 | No | 物模型ID |
返回 Excel文件分成两个Sheet页第一个sheet页是属性第二个sheet页是方法按【porder】排序显示
#### 2.2.14 Excel导入物模型属性和方法
Excel导入
### 2.3 设备台账相关接口
#### 2.3.1 设备不分页查询
POST请求接口
> /api/equipment/list
请求参数
```json
{
"orgId":"1",
"parentEquipmentId":"2",
"objectType":"10001"
}
```
参数说明
| 参数名 | 参数类型 | 可选 | 描述 |
| ----------------- | -------- | ---- | ---------- |
| orgId | 字符串 | Yes | 所属机构ID |
| parentEquipmentId | 字符串 | Yes | 上级设备ID |
| objectType | 字符串 | No | 设备类型 |
返回报文
```json
{
"code": 200,
"msg": "操作成功",
"success": true,
"data": [
{
"id": "2017011807",
"objectType": "10001",
"code": "Station01",
"name": "某某风电场",
"madeinfactory": "生产厂家",
"model": "规格型号",
"location": "徐庄软件园",
"longitude": 46.12345,
"latitude": 137.01678,
"installDate": "2024-06-27 15:08:23",
"remarks": null,
"orgId": "101",
"parentEquipmentId": null,
"iotModelId": "45678",
"revision": 1,
"createdBy": "admin",
"createdTime": "2024-06-27 15:08:23",
"updatedBy": "admin",
"updatedTime": "2024-06-27 15:08:23"
}
]
}
```
#### 2.3.2 设备分页查询
> /api/equipment/query
#### 2.3.3 设备新增
> /api/equipment/add
#### 2.3.4 设备修改
> /api/equipment/update
#### 2.3.5 设备删除
> /api/equipment/delete
#### 2.3.6 Excel导出设备清单
> /api/equipment/export
#### 2.3.7 Excel导入设备清单
> /api/equipment/import

68
docs/api/readme.md Normal file
View File

@ -0,0 +1,68 @@
# API接口概述
## 接口约定
系统中的所有接口均遵循以下约定。
1. 除了与文件上传/下载相关的接口外,都是`POST`请求,请求报文使用`JSON`格式。
2. 文件下载使用GET请求(此种类型,加解密再讨论下)。
3. 文件上传使用POST请求请求报文使用`multipart/form-data`格式。
## 加密/解密
请求报文Header中需要添加参数
| 参数名称 | 说明 | 备注 |
| -------- | -------- | --- |
| token | 令牌 | 需要鉴权的API 才需要添加此参数 |
| V | 加密向量 | 必须添加 |
加密采用AES/CBC/ZeroPadding加密方式密钥长度为16位。IV长度为16位每次请求时随机生成
## 返回报文格式定义
### 1、统一返回格式
````json
{
"code": 200,
"success": true,
"msg": "提示信息",
"data": null
}
````
### 2、分页查询数据格式
```json
{
"code": 200,
"total": 3,
"msg": "查询成功",
"rows": [{},{},{}]
}
```
# 系统常量定义
## 1、系统权限
| ID | 编码 | 名称 |
| ---- | ---------------------------- | ------------ |
| 101 | SYS_AUTHORITY_ID_ADMIN | 系统管理权限 |
| 102 | SYS_AUTHORITY_ID_DEVICE_MGR | 设备维护权限 |
| 103 | SYS_AUTHORITY_ID_DEVICE_VIEW | 设备浏览权限 |
## 2、设备类型
| ID | 编码 | 名称 |
| ----- | -------------------------- | ------ |
| 10001 | EQUIPMENT_TYPE_WIND_FARM | 风电场 |
| 10002 | EQUIPMENT_TYPE_STATION_WTG | 机组 |