Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
O
operation-control-platform
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
王锦盛
operation-control-platform
Commits
b45930fd
Commit
b45930fd
authored
Mar 12, 2022
by
diaoruifeng
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/master'
parents
8e36dc6f
43a54a8b
Changes
23
Hide whitespace changes
Inline
Side-by-side
Showing
23 changed files
with
405 additions
and
125 deletions
+405
-125
src/main/java/com/pms/ocp/common/aspectj/OperLogAspect.java
src/main/java/com/pms/ocp/common/aspectj/OperLogAspect.java
+11
-12
src/main/java/com/pms/ocp/common/utils/DataStructureHandleUtils.java
...va/com/pms/ocp/common/utils/DataStructureHandleUtils.java
+79
-0
src/main/java/com/pms/ocp/common/utils/MapUtils.java
src/main/java/com/pms/ocp/common/utils/MapUtils.java
+0
-32
src/main/java/com/pms/ocp/common/utils/PageRequest.java
src/main/java/com/pms/ocp/common/utils/PageRequest.java
+1
-1
src/main/java/com/pms/ocp/common/utils/RandomStringUtils.java
...main/java/com/pms/ocp/common/utils/RandomStringUtils.java
+1
-4
src/main/java/com/pms/ocp/controller/ModelBaseController.java
...main/java/com/pms/ocp/controller/ModelBaseController.java
+44
-19
src/main/java/com/pms/ocp/mapper/ModelAuditMapper.java
src/main/java/com/pms/ocp/mapper/ModelAuditMapper.java
+2
-3
src/main/java/com/pms/ocp/mapper/ModelSubscribeMapper.java
src/main/java/com/pms/ocp/mapper/ModelSubscribeMapper.java
+2
-2
src/main/java/com/pms/ocp/model/dto/ModelSubscribeDTO.java
src/main/java/com/pms/ocp/model/dto/ModelSubscribeDTO.java
+1
-1
src/main/java/com/pms/ocp/model/entity/Model.java
src/main/java/com/pms/ocp/model/entity/Model.java
+3
-1
src/main/java/com/pms/ocp/model/entity/ModelAudit.java
src/main/java/com/pms/ocp/model/entity/ModelAudit.java
+1
-1
src/main/java/com/pms/ocp/model/entity/ModelClassify.java
src/main/java/com/pms/ocp/model/entity/ModelClassify.java
+2
-1
src/main/java/com/pms/ocp/model/entity/ModelProperty.java
src/main/java/com/pms/ocp/model/entity/ModelProperty.java
+2
-1
src/main/java/com/pms/ocp/model/entity/ModelRelation.java
src/main/java/com/pms/ocp/model/entity/ModelRelation.java
+2
-1
src/main/java/com/pms/ocp/model/entity/ModelSubscribe.java
src/main/java/com/pms/ocp/model/entity/ModelSubscribe.java
+5
-4
src/main/java/com/pms/ocp/model/vo/ModelAuditVO.java
src/main/java/com/pms/ocp/model/vo/ModelAuditVO.java
+131
-0
src/main/java/com/pms/ocp/service/ModelAuditService.java
src/main/java/com/pms/ocp/service/ModelAuditService.java
+8
-8
src/main/java/com/pms/ocp/service/ModelSubscribeService.java
src/main/java/com/pms/ocp/service/ModelSubscribeService.java
+9
-9
src/main/java/com/pms/ocp/service/impl/ModelAuditServiceImpl.java
.../java/com/pms/ocp/service/impl/ModelAuditServiceImpl.java
+13
-14
src/main/java/com/pms/ocp/service/impl/ModelClassifyServiceImpl.java
...va/com/pms/ocp/service/impl/ModelClassifyServiceImpl.java
+0
-1
src/main/java/com/pms/ocp/service/impl/ModelSubscribeServiceImpl.java
...a/com/pms/ocp/service/impl/ModelSubscribeServiceImpl.java
+84
-0
src/main/java/com/pms/ocp/service/impl/OcpApiTreeServiceImpl.java
.../java/com/pms/ocp/service/impl/OcpApiTreeServiceImpl.java
+2
-5
src/main/java/com/pms/ocp/service/impl/TenantServiceImpl.java
...main/java/com/pms/ocp/service/impl/TenantServiceImpl.java
+2
-5
No files found.
src/main/java/com/pms/ocp/common/aspectj/OperLogAspect.java
View file @
b45930fd
...
...
@@ -2,9 +2,8 @@ package com.pms.ocp.common.aspectj;
import
com.alibaba.fastjson.JSONObject
;
import
com.alibaba.fastjson.serializer.PropertyFilter
;
import
com.pms.ocp.model.entity.ModelNote
;
import
com.pms.ocp.service.ModelNoteService
;
import
com.sun.xml.internal.bind.v2.TODO
;
import
com.pms.ocp.model.entity.ModelAudit
;
import
com.pms.ocp.service.ModelAuditService
;
import
org.apache.commons.lang3.StringUtils
;
import
org.aspectj.lang.JoinPoint
;
import
org.aspectj.lang.ProceedingJoinPoint
;
...
...
@@ -39,7 +38,7 @@ import java.time.LocalDateTime;
public
class
OperLogAspect
{
@Autowired
private
Model
NoteService
modelNote
Service
;
private
Model
AuditService
modelAudit
Service
;
private
static
Logger
logger
=
LoggerFactory
.
getLogger
(
OperLogAspect
.
class
);
...
...
@@ -65,25 +64,25 @@ public class OperLogAspect {
private
void
saveSysLog
(
ProceedingJoinPoint
point
,
long
time
,
Object
obj
)
{
MethodSignature
signature
=
(
MethodSignature
)
point
.
getSignature
();
Method
method
=
signature
.
getMethod
();
Model
Note
modelNote
=
new
ModelNote
();
Model
Audit
modelAudit
=
new
ModelAudit
();
OperLog
operLog
=
method
.
getAnnotation
(
OperLog
.
class
);
if
(
operLog
!=
null
)
{
String
content
=
operLog
.
value
();
model
Note
.
setAuditType
(
operLog
.
auditType
());
model
Note
.
setAuditMessageJson
(
content
);
model
Audit
.
setAuditType
(
operLog
.
auditType
());
model
Audit
.
setAuditMessageJson
(
content
);
}
//请求的方法名
// String className = point.getTarget().getClass().getName();
String
methodName
=
signature
.
getName
();
// dto.setMethod(className + "." + methodName + "()");
//设置操作类型
if
(
model
Note
.
getAuditType
()
==
3
)
{
model
Note
.
setOperStatus
(
getOperateType
(
methodName
,
operLog
.
operStatus
()));
if
(
model
Audit
.
getAuditType
()
==
3
)
{
model
Audit
.
setOperStatus
(
getOperateType
(
methodName
,
operLog
.
operStatus
()));
}
//获取request
HttpServletRequest
request
=
getHttpServletRequest
();
//请求的参数
model
Note
.
setAuditMessageJson
(
getRequestParams
(
request
,
point
));
model
Audit
.
setAuditMessageJson
(
getRequestParams
(
request
,
point
));
// //设置ip地址
// dto.setIp(getIpAddr(request));
//获取用户登录信息
...
...
@@ -94,9 +93,9 @@ public class OperLogAspect {
// modelNote.setUsername(user.getPassWord());
// }
// modelNote.setCostTime(time);
model
Note
.
setAuditCtime
(
LocalDateTime
.
now
());
model
Audit
.
setAuditCtime
(
LocalDateTime
.
now
());
model
NoteService
.
createModelNote
(
modelNote
);
model
AuditService
.
createModelNote
(
modelAudit
);
}
private
int
getOperateType
(
String
methodName
,
int
operateType
)
{
...
...
src/main/java/com/pms/ocp/common/utils/DataStructureHandleUtils.java
0 → 100644
View file @
b45930fd
package
com.pms.ocp.common.utils
;
import
org.apache.commons.lang3.StringUtils
;
import
java.lang.reflect.Field
;
import
java.math.BigDecimal
;
import
java.sql.Date
;
import
java.text.ParseException
;
import
java.text.SimpleDateFormat
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.Map
;
/**
* @Auther: wangjian
* @Date: 2022/3/12 13:29
* @Description:数据结构处理工具类
*/
public
class
DataStructureHandleUtils
{
/**
* List<Map<String, Object>> 到 List<T> 数据转换
*/
public
static
<
T
>
List
<
T
>
setList
(
final
List
<
Map
<
String
,
Object
>>
srcList
,
Class
<
T
>
clazz
)
{
List
<
T
>
list
=
new
ArrayList
<>();
for
(
int
i
=
0
;
i
<
srcList
.
size
();
i
++)
{
try
{
T
t
=
clazz
.
newInstance
();
Field
[]
fields
=
t
.
getClass
().
getDeclaredFields
();
for
(
Field
field
:
fields
)
{
if
(!
"serialVersionUID"
.
equals
(
field
.
getName
()))
{
//设置对象的访问权限,保证对private的属性的访问
field
.
setAccessible
(
true
);
//读取配置转换字段名,并从map中取出数据
Object
v
=
srcList
.
get
(
i
).
get
(
field
.
getName
());
field
.
set
(
t
,
convert
(
v
,
field
.
getType
()));
}
}
list
.
add
(
t
);
}
catch
(
Exception
ex
)
{
ex
.
toString
();
}
}
;
return
list
;
}
/**
* 字段类型转换
*/
private
static
<
T
>
T
convert
(
Object
obj
,
Class
<
T
>
type
)
throws
ParseException
{
if
(
obj
!=
null
&&
StringUtils
.
isNotBlank
(
obj
.
toString
()))
{
if
(
type
.
equals
(
String
.
class
))
{
return
(
T
)
obj
.
toString
();
}
else
if
(
type
.
equals
(
BigDecimal
.
class
))
{
return
(
T
)
new
BigDecimal
(
obj
.
toString
());
}
else
if
(
type
.
equals
(
Double
.
class
))
{
return
(
T
)
Double
.
valueOf
(
obj
.
toString
());
}
else
if
(
type
.
equals
(
Integer
.
class
))
{
return
(
T
)
Integer
.
valueOf
(
obj
.
toString
());
}
else
if
(
type
.
equals
(
Date
.
class
))
{
if
(
obj
!=
null
)
{
String
timeStr
=
String
.
valueOf
(
obj
);
String
s
[]
=
timeStr
.
split
(
"T"
);
SimpleDateFormat
sdf
=
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm:ss"
);
return
(
T
)
sdf
.
parse
(
s
[
0
]
+
" "
+
s
[
1
]);
}
else
{
return
null
;
}
}
else
{
//其他类型转换
return
(
T
)
obj
.
toString
();
}
}
return
null
;
}
}
src/main/java/com/pms/ocp/common/utils/MapUtils.java
deleted
100644 → 0
View file @
8e36dc6f
package
com.pms.ocp.common.utils
;
import
java.util.*
;
/**
* @Author: admin
* @Description:
* @Date: 2021/12/8 9:31
* @Version: V1.0
*/
public
class
MapUtils
{
/**
* Map 排序
*
* @param map
* @return Map
*/
public
static
<
T
>
Map
<
Date
,
List
<
T
>>
treeMapDesc
(
Map
<
Date
,
List
<
T
>>
map
)
{
Map
<
Date
,
List
<
T
>>
treeMapDesc
=
new
TreeMap
<>(
new
Comparator
<
Date
>()
{
@Override
public
int
compare
(
Date
o1
,
Date
o2
)
{
return
o2
.
compareTo
(
o1
);
}
});
for
(
Map
.
Entry
<
Date
,
List
<
T
>>
e
:
map
.
entrySet
())
{
treeMapDesc
.
put
(
e
.
getKey
(),
e
.
getValue
());
}
return
treeMapDesc
;
}
}
src/main/java/com/pms/ocp/common/utils/PageRequest.java
View file @
b45930fd
...
...
@@ -10,7 +10,7 @@ import lombok.Data;
* @author admin
*/
@Data
@ApiModel
(
value
=
"分页工具类"
,
description
=
"分页工具类"
)
@ApiModel
(
value
=
"分页工具类"
,
description
=
"分页工具类"
)
public
class
PageRequest
<
T
>
{
private
static
final
long
serialVersionUID
=
8167917284229912157L
;
...
...
src/main/java/com/pms/ocp/common/utils/RandomStringUtil.java
→
src/main/java/com/pms/ocp/common/utils/RandomStringUtil
s
.java
View file @
b45930fd
package
com.pms.ocp.common.utils
;
import
org.apache.commons.lang3.RandomStringUtils
;
import
java.util.Random
;
/**
* @author zhaochengming
* 随机生成字符串
*/
public
class
RandomStringUtil
{
public
class
RandomStringUtil
s
{
/**
* length 字符串长度
...
...
src/main/java/com/pms/ocp/controller/ModelBaseController.java
View file @
b45930fd
package
com.pms.ocp.controller
;
import
com.github.pagehelper.PageHelper
;
import
com.github.pagehelper.PageInfo
;
import
com.pms.ocp.common.utils.ExcelUtils
;
import
com.pms.ocp.model.dto.ModelDTO
;
import
com.pms.ocp.model.dto.Model
Issu
eDTO
;
import
com.pms.ocp.model.dto.Model
Subscrib
eDTO
;
import
com.pms.ocp.model.dto.ModelPropertyDTO
;
import
com.pms.ocp.model.dto.ModelRelationDTO
;
import
com.pms.ocp.model.entity.Model
;
import
com.pms.ocp.model.entity.ModelNote
;
import
com.pms.ocp.model.entity.ModelSubscribe
;
import
com.pms.ocp.model.entity.ModelAudit
;
import
com.pms.ocp.model.vo.ModelAuditVO
;
import
com.pms.ocp.model.vo.ResponseVO
;
import
com.pms.ocp.service.*
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
io.swagger.annotations.ApiParam
;
import
lombok.extern.slf4j.Slf4j
;
import
org.
apache.commons.lang3.String
Utils
;
import
org.
springframework.beans.Bean
Utils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.*
;
import
org.springframework.web.multipart.MultipartFile
;
...
...
@@ -21,8 +25,7 @@ import org.springframework.web.multipart.MultipartFile;
import
javax.servlet.http.HttpServletResponse
;
import
java.io.IOException
;
import
java.util.List
;
import
static
com
.
pms
.
ocp
.
common
.
constants
.
CodeEnum
.
REQUIRED_PARAMETER_EMPTY
;
import
java.util.stream.Collectors
;
/**
* @Auther: wangjian
...
...
@@ -43,10 +46,10 @@ public class ModelBaseController {
private
ModelPropertyService
modelPropertyService
;
@Autowired
private
Model
NoteService
modelNote
Service
;
private
Model
AuditService
modelAudit
Service
;
@Autowired
private
Model
IssueService
modelIssu
eService
;
private
Model
SubscribeService
modelSubscrib
eService
;
@Autowired
private
ModelRelationService
modelRelationService
;
...
...
@@ -71,8 +74,15 @@ public class ModelBaseController {
@ApiOperation
(
"模型-查询"
)
@GetMapping
(
"/get/model"
)
public
ResponseVO
getModel
(
@ApiParam
(
value
=
"模型订阅编号"
)
@RequestParam
(
value
=
"objId"
,
required
=
false
)
String
objId
,
@ApiParam
(
value
=
"模型编码"
)
@RequestParam
(
value
=
"modelCode"
,
required
=
false
)
String
modelCode
)
{
return
ResponseVO
.
ok
(
modelService
.
getModelList
(
objId
,
modelCode
));
@ApiParam
(
value
=
"模型编码"
)
@RequestParam
(
value
=
"modelCode"
,
required
=
false
)
String
modelCode
,
@ApiParam
(
value
=
"当前页"
)
@RequestParam
(
value
=
"currentPage"
,
required
=
false
)
Integer
currentPage
,
@ApiParam
(
value
=
"每页数量"
)
@RequestParam
(
value
=
"pageSize"
,
required
=
false
)
Integer
pageSize
)
{
PageHelper
.
startPage
(
currentPage
,
pageSize
);
List
<
Model
>
modelList
=
modelService
.
getModelList
(
objId
,
modelCode
);
PageInfo
<
Model
>
pageInfo
=
new
PageInfo
<>(
modelList
);
return
ResponseVO
.
ok
(
pageInfo
);
}
/**
...
...
@@ -139,8 +149,8 @@ public class ModelBaseController {
*/
@ApiOperation
(
"模型订阅-增加"
)
@PostMapping
(
"/create/model/subscribe"
)
public
ResponseVO
createModelSubscribe
(
@RequestBody
Model
IssueDTO
modelIssu
eDTO
)
{
return
ResponseVO
.
ok
(
model
IssueService
.
createModelIssue
(
modelIssu
eDTO
));
public
ResponseVO
createModelSubscribe
(
@RequestBody
Model
SubscribeDTO
modelSubscrib
eDTO
)
{
return
ResponseVO
.
ok
(
model
SubscribeService
.
createModelIssue
(
modelSubscrib
eDTO
));
}
/**
...
...
@@ -151,7 +161,7 @@ public class ModelBaseController {
@ApiOperation
(
"模型订阅-删除/批量删除"
)
@PostMapping
(
"/delete/model/subscribe"
)
public
ResponseVO
deleteModelSubscribe
(
@ApiParam
(
value
=
"订阅编号集合"
)
@RequestBody
List
<
String
>
ids
)
{
return
ResponseVO
.
ok
(
model
Issu
eService
.
deleteBatchModelIssue
(
ids
));
return
ResponseVO
.
ok
(
model
Subscrib
eService
.
deleteBatchModelIssue
(
ids
));
}
/**
...
...
@@ -163,8 +173,15 @@ public class ModelBaseController {
@GetMapping
(
"/get/model/subscribe"
)
public
ResponseVO
getModelSubscribe
(
@ApiParam
(
value
=
"模型订阅编号"
)
@RequestParam
(
value
=
"objId"
,
required
=
false
)
String
objId
,
@ApiParam
(
value
=
"模型编码"
)
@RequestParam
(
value
=
"modelCode"
,
required
=
false
)
String
modelCode
,
@ApiParam
(
value
=
"订阅公司编码"
)
@RequestParam
(
value
=
"subsCompanyCode"
,
required
=
false
)
String
subsCompanyCode
)
{
return
ResponseVO
.
ok
(
modelIssueService
.
getModelIssueList
(
objId
,
modelCode
,
subsCompanyCode
));
@ApiParam
(
value
=
"订阅公司编码"
)
@RequestParam
(
value
=
"subsCompanyCode"
,
required
=
false
)
String
subsCompanyCode
,
@ApiParam
(
value
=
"当前页"
)
@RequestParam
(
value
=
"currentPage"
,
required
=
false
)
Integer
currentPage
,
@ApiParam
(
value
=
"每页数量"
)
@RequestParam
(
value
=
"pageSize"
,
required
=
false
)
Integer
pageSize
)
{
PageHelper
.
startPage
(
currentPage
,
pageSize
);
List
<
ModelSubscribe
>
modelSubscribeList
=
modelSubscribeService
.
getModelIssueList
(
objId
,
modelCode
,
subsCompanyCode
);
PageInfo
<
ModelSubscribe
>
pageInfo
=
new
PageInfo
<>(
modelSubscribeList
);
return
ResponseVO
.
ok
(
pageInfo
);
}
/**
...
...
@@ -176,9 +193,9 @@ public class ModelBaseController {
@GetMapping
(
"/get/model/note"
)
public
ResponseVO
getModelNote
(
@RequestParam
(
value
=
"modelCode"
)
String
modelCode
)
{
List
<
Model
Note
>
modelNoteList
=
modelNote
Service
.
getModelNoteList
(
modelCode
);
List
<
Model
Audit
>
modelAuditList
=
modelAudit
Service
.
getModelNoteList
(
modelCode
);
return
ResponseVO
.
ok
(
model
Note
List
);
return
ResponseVO
.
ok
(
model
Audit
List
);
}
/**
...
...
@@ -201,9 +218,17 @@ public class ModelBaseController {
@PostMapping
(
"export/model/note"
)
public
ResponseVO
exportModelNote
(
HttpServletResponse
response
,
@ApiParam
(
value
=
"模型编码"
)
@RequestParam
(
value
=
"modelCode"
,
required
=
false
)
String
modelCode
)
throws
IOException
{
// 查询要导出的数据
List
<
ModelNote
>
modelNoteList
=
modelNoteService
.
getModelNoteList
(
modelCode
);
ExcelUtils
.
exportExcel
(
response
,
"测试导出模型事记"
,
"测试导出模型事记"
,
"测试导出模型事记.xlsx"
,
modelNoteList
,
ModelNote
.
class
);
// 查询要导出的数据
List
<
ModelAudit
>
modelAuditList
=
modelAuditService
.
getModelNoteList
(
modelCode
);
//users集合转成export集合
List
<
ModelAuditVO
>
exportVOList
=
modelAuditList
.
stream
().
map
(
modelNote
->
{
ModelAuditVO
vo
=
new
ModelAuditVO
();
BeanUtils
.
copyProperties
(
modelNote
,
vo
);
return
vo
;
}).
collect
(
Collectors
.
toList
());
ExcelUtils
.
exportExcel
(
response
,
"测试导出模型事记"
,
"测试导出模型事记"
,
"测试导出模型事记.xlsx"
,
exportVOList
,
ModelAuditVO
.
class
);
return
ResponseVO
.
ok
();
}
...
...
src/main/java/com/pms/ocp/mapper/Model
Note
Mapper.java
→
src/main/java/com/pms/ocp/mapper/Model
Audit
Mapper.java
View file @
b45930fd
package
com.pms.ocp.mapper
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
com.pms.ocp.model.entity.Model
;
import
com.pms.ocp.model.entity.ModelNote
;
import
com.pms.ocp.model.entity.ModelAudit
;
import
org.apache.ibatis.annotations.Mapper
;
/**
...
...
@@ -12,5 +11,5 @@ import org.apache.ibatis.annotations.Mapper;
*/
@Mapper
public
interface
Model
NoteMapper
extends
BaseMapper
<
ModelNote
>
{
public
interface
Model
AuditMapper
extends
BaseMapper
<
ModelAudit
>
{
}
src/main/java/com/pms/ocp/mapper/Model
Issu
eMapper.java
→
src/main/java/com/pms/ocp/mapper/Model
Subscrib
eMapper.java
View file @
b45930fd
package
com.pms.ocp.mapper
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
com.pms.ocp.model.entity.Model
Issu
e
;
import
com.pms.ocp.model.entity.Model
Subscrib
e
;
import
org.apache.ibatis.annotations.Mapper
;
/**
...
...
@@ -11,5 +11,5 @@ import org.apache.ibatis.annotations.Mapper;
*/
@Mapper
public
interface
Model
IssueMapper
extends
BaseMapper
<
ModelIssu
e
>
{
public
interface
Model
SubscribeMapper
extends
BaseMapper
<
ModelSubscrib
e
>
{
}
src/main/java/com/pms/ocp/model/dto/Model
Issu
eDTO.java
→
src/main/java/com/pms/ocp/model/dto/Model
Subscrib
eDTO.java
View file @
b45930fd
...
...
@@ -16,7 +16,7 @@ import java.time.LocalDateTime;
@ApiModel
(
value
=
"模型订阅DTO对象"
)
@Data
public
class
Model
Issu
eDTO
{
public
class
Model
Subscrib
eDTO
{
/**
* 模型属性编号
...
...
src/main/java/com/pms/ocp/model/entity/Model.java
View file @
b45930fd
package
com.pms.ocp.model.entity
;
import
com.baomidou.mybatisplus.annotation.IdType
;
import
com.baomidou.mybatisplus.annotation.TableField
;
import
com.baomidou.mybatisplus.annotation.TableId
;
import
com.baomidou.mybatisplus.annotation.TableName
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
import
lombok.Data
;
...
...
@@ -24,7 +26,7 @@ public class Model {
* 模型关系编号
* 主键
*/
@Table
Field
(
"obj_id"
)
@Table
Id
(
value
=
"obj_id"
,
type
=
IdType
.
ASSIGN_ID
)
private
String
objId
;
/**
...
...
src/main/java/com/pms/ocp/model/entity/Model
Note
.java
→
src/main/java/com/pms/ocp/model/entity/Model
Audit
.java
View file @
b45930fd
...
...
@@ -15,7 +15,7 @@ import java.time.LocalDateTime;
@Data
@TableName
(
"ocp_model_audit"
)
public
class
Model
Note
{
public
class
Model
Audit
{
@TableId
(
value
=
"obj_id"
,
type
=
IdType
.
ASSIGN_ID
)
private
String
objId
;
...
...
src/main/java/com/pms/ocp/model/entity/ModelClassify.java
View file @
b45930fd
package
com.pms.ocp.model.entity
;
import
com.baomidou.mybatisplus.annotation.IdType
;
import
com.baomidou.mybatisplus.annotation.TableField
;
import
com.baomidou.mybatisplus.annotation.TableId
;
import
com.baomidou.mybatisplus.annotation.TableName
;
...
...
@@ -23,7 +24,7 @@ public class ModelClassify {
/**
* 模型分类编号
*/
@TableId
@TableId
(
value
=
"obj_id"
,
type
=
IdType
.
ASSIGN_ID
)
private
String
objId
;
/**
...
...
src/main/java/com/pms/ocp/model/entity/ModelProperty.java
View file @
b45930fd
package
com.pms.ocp.model.entity
;
import
com.baomidou.mybatisplus.annotation.IdType
;
import
com.baomidou.mybatisplus.annotation.TableField
;
import
com.baomidou.mybatisplus.annotation.TableId
;
import
com.baomidou.mybatisplus.annotation.TableName
;
...
...
@@ -27,7 +28,7 @@ public class ModelProperty{
/**
* 模型属性编号
*/
@TableId
@TableId
(
value
=
"obj_id"
,
type
=
IdType
.
ASSIGN_ID
)
private
String
objId
;
/**
...
...
src/main/java/com/pms/ocp/model/entity/ModelRelation.java
View file @
b45930fd
package
com.pms.ocp.model.entity
;
import
com.baomidou.mybatisplus.annotation.IdType
;
import
com.baomidou.mybatisplus.annotation.TableField
;
import
com.baomidou.mybatisplus.annotation.TableId
;
import
com.baomidou.mybatisplus.annotation.TableName
;
...
...
@@ -25,7 +26,7 @@ public class ModelRelation {
* 模型关系编号
* 主键
*/
@TableId
(
value
=
"obj_id"
)
@TableId
(
value
=
"obj_id"
,
type
=
IdType
.
ASSIGN_ID
)
private
String
objId
;
/**
...
...
src/main/java/com/pms/ocp/model/entity/Model
Issu
e.java
→
src/main/java/com/pms/ocp/model/entity/Model
Subscrib
e.java
View file @
b45930fd
package
com.pms.ocp.model.entity
;
import
com.baomidou.mybatisplus.annotation.IdType
;
import
com.baomidou.mybatisplus.annotation.TableId
;
import
com.baomidou.mybatisplus.annotation.TableName
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
...
...
@@ -19,12 +20,12 @@ import java.util.Date;
@Data
@Accessors
(
chain
=
true
)
@TableName
(
"ocp_model_subs"
)
public
class
Model
Issu
e
{
public
class
Model
Subscrib
e
{
/**
* 模型订阅编号
*/
@TableId
(
value
=
"obj_id"
)
@TableId
(
value
=
"obj_id"
,
type
=
IdType
.
ASSIGN_ID
)
private
String
objId
;
/**
...
...
@@ -56,14 +57,14 @@ public class ModelIssue {
* 订阅时间
*/
@DateTimeFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
)
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
,
timezone
=
"GMT+8"
)
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
,
timezone
=
"GMT+8"
)
private
LocalDateTime
subsCtime
;
/**
* 修改时间
*/
@DateTimeFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
)
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
,
timezone
=
"GMT+8"
)
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
,
timezone
=
"GMT+8"
)
private
LocalDateTime
subsMtime
;
}
...
...
src/main/java/com/pms/ocp/model/vo/ModelAuditVO.java
0 → 100644
View file @
b45930fd
package
com.pms.ocp.model.vo
;
import
com.baomidou.mybatisplus.annotation.IdType
;
import
com.baomidou.mybatisplus.annotation.TableId
;
import
com.baomidou.mybatisplus.annotation.TableName
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
java.time.LocalDateTime
;
/**
* @Auther: wangjian
* @Date: 2022/2/22 16:52
* @Description:模型事记记录对象VO
*/
@ApiModel
(
value
=
"模型事记VO对象"
)
@Data
public
class
ModelAuditVO
{
/**
* 模型事记编号
*/
@ApiModelProperty
(
value
=
"模型事记编号"
)
@TableId
(
value
=
"obj_id"
,
type
=
IdType
.
ASSIGN_ID
)
private
String
objId
;
/**
* 模型编码
*/
@ApiModelProperty
(
value
=
"模型事记编号"
)
private
int
modelCode
;
/**
* 属性编码
*/
@ApiModelProperty
(
value
=
"属性代码"
)
private
int
propCode
;
/**
* 事记类型 0:人工操作,1:流程管控,3:总部下发
*/
@ApiModelProperty
(
value
=
"事记类型 0:人工操作,1:流程管控,3:总部下发"
)
private
int
auditType
;
/**
* 模型异动详情
*/
@ApiModelProperty
(
value
=
"模型异动详情"
)
private
String
auditMessageJson
;
/**
* 异动类型 0:新增,1:迭代
*/
@ApiModelProperty
(
value
=
"异动类型 0:新增,1:迭代"
)
private
int
operStatus
;
/**
* 异动申请人编号
*/
@ApiModelProperty
(
value
=
"异动申请人编号"
)
private
String
applyUserId
;
/**
* 异动申请人姓名
*/
@ApiModelProperty
(
value
=
"异动申请人姓名"
)
private
String
applyUserName
;
/**
* 异动时间
*/
@ApiModelProperty
(
value
=
"异动时间"
)
private
long
applyTime
;
/**
* 版本
*/
@ApiModelProperty
(
value
=
"版本"
)
private
String
applyVersion
;
/**
* 新增时间
*/
@ApiModelProperty
(
value
=
"新增时间"
)
private
LocalDateTime
auditCtime
;
/**
* 异动公司编码
*/
@ApiModelProperty
(
value
=
"异动公司编码"
)
private
String
auditCompanyCode
;
/**
* 提交人编号
*/
@ApiModelProperty
(
value
=
"提交人编号"
)
private
String
auditUserId
;
/**
* 提交人姓名
*/
@ApiModelProperty
(
value
=
"提交人姓名"
)
private
String
auditUserName
;
/**
* 修改时间
*/
@ApiModelProperty
(
value
=
"模型事记修改时间"
)
private
LocalDateTime
auditMtime
;
}
//
// COMMENT ON COLUMN public.ocp_model_audit.obj_id IS '主键是';
// COMMENT ON COLUMN public.ocp_model_audit.model_code IS '模型代码是';
// COMMENT ON COLUMN public.ocp_model_audit.prop_code IS '属性代码';
// COMMENT ON COLUMN public.ocp_model_audit.oper_status IS '异动类型0:新增,1:迭代';
// COMMENT ON COLUMN public.ocp_model_audit.oper_target IS '操作对象0:表,1:属性';
// COMMENT ON COLUMN public.ocp_model_audit.audit_type IS '事记类型0:人工操作,1:流程管控,3:总部下发';
// COMMENT ON COLUMN public.ocp_model_audit.audit_message_json IS '模型异动详情';
// COMMENT ON COLUMN public.ocp_model_audit.apply_user_id IS '异动申请人id';
// COMMENT ON COLUMN public.ocp_model_audit.apply_user_name IS '异动申请人';
// COMMENT ON COLUMN public.ocp_model_audit.apply_time IS '异动时间';
// COMMENT ON COLUMN public.ocp_model_audit.audit_ctime IS '申请时间';
// COMMENT ON COLUMN public.ocp_model_audit.audit_mtime IS '修改时间';
// COMMENT ON COLUMN public.ocp_model_audit.apply_version IS '版本';
// COMMENT ON COLUMN public.ocp_model_audit.audit_company_code IS '异动公司code';
// COMMENT ON COLUMN public.ocp_model_audit.audit_user_id IS '提交人id';
// COMMENT ON COLUMN public.ocp_model_audit.audit_user_name IS '提交人姓名';
src/main/java/com/pms/ocp/service/Model
Note
Service.java
→
src/main/java/com/pms/ocp/service/Model
Audit
Service.java
View file @
b45930fd
package
com.pms.ocp.service
;
import
com.pms.ocp.model.entity.Model
Note
;
import
com.pms.ocp.model.entity.Model
Audit
;
import
java.util.List
;
...
...
@@ -10,15 +10,15 @@ import java.util.List;
* @Description:模型事记业务层接口
*/
public
interface
Model
Note
Service
{
public
interface
Model
Audit
Service
{
/**
* 创建模型事记
*
* @param model
Note
* @param model
Audit
* @return
*/
Integer
createModelNote
(
Model
Note
modelNote
);
Integer
createModelNote
(
Model
Audit
modelAudit
);
/**
* 删除模型事记
...
...
@@ -31,10 +31,10 @@ public interface ModelNoteService {
/**
* 更新模型事记
*
* @param model
Note
* @param model
Audit
* @return
*/
Integer
updateModelNote
(
Model
Note
modelNote
);
Integer
updateModelNote
(
Model
Audit
modelAudit
);
/**
* 获取模型事记
...
...
@@ -42,7 +42,7 @@ public interface ModelNoteService {
* @param
* @return
*/
List
<
Model
Note
>
getModelNoteList
(
String
modelCode
);
List
<
Model
Audit
>
getModelNoteList
(
String
modelCode
);
/**
* 获取模型事记列表
...
...
@@ -50,7 +50,7 @@ public interface ModelNoteService {
* @param modelId
* @return
*/
Model
Note
getModelNote
(
String
modelId
);
Model
Audit
getModelNote
(
String
modelId
);
// /**
// * 获取模型事记
...
...
src/main/java/com/pms/ocp/service/Model
Issu
eService.java
→
src/main/java/com/pms/ocp/service/Model
Subscrib
eService.java
View file @
b45930fd
package
com.pms.ocp.service
;
import
com.pms.ocp.model.dto.Model
Issu
eDTO
;
import
com.pms.ocp.model.entity.Model
Issu
e
;
import
com.pms.ocp.model.dto.Model
Subscrib
eDTO
;
import
com.pms.ocp.model.entity.Model
Subscrib
e
;
import
java.util.List
;
...
...
@@ -10,15 +10,15 @@ import java.util.List;
* @Date: 2022/2/22 16:07
* @Description:模型订阅业务层接口
*/
public
interface
Model
Issu
eService
{
public
interface
Model
Subscrib
eService
{
/**
* 创建模型订阅
*
* @param model
Issu
eDTO
* @param model
Subscrib
eDTO
* @return
*/
Integer
createModelIssue
(
Model
IssueDTO
modelIssu
eDTO
);
Integer
createModelIssue
(
Model
SubscribeDTO
modelSubscrib
eDTO
);
/**
* 删除模型订阅
...
...
@@ -39,10 +39,10 @@ public interface ModelIssueService {
/**
* 更新模型订阅
*
* @param model
Issu
e
* @param model
Subscrib
e
* @return
*/
Integer
updateModelIssue
(
Model
Issue
modelIssu
e
);
Integer
updateModelIssue
(
Model
Subscribe
modelSubscrib
e
);
/**
* 获取模型订阅
...
...
@@ -50,7 +50,7 @@ public interface ModelIssueService {
* @param
* @return
*/
List
<
Model
Issu
e
>
getModelIssueList
(
String
objId
,
String
modelCode
,
String
subsCompanyCode
);
List
<
Model
Subscrib
e
>
getModelIssueList
(
String
objId
,
String
modelCode
,
String
subsCompanyCode
);
/**
* 获取模型订阅列表
...
...
@@ -58,5 +58,5 @@ public interface ModelIssueService {
* @param modelId
* @return
*/
Model
Issu
eDTO
getModelIssue
(
String
modelId
);
Model
Subscrib
eDTO
getModelIssue
(
String
modelId
);
}
src/main/java/com/pms/ocp/service/impl/Model
Note
ServiceImpl.java
→
src/main/java/com/pms/ocp/service/impl/Model
Audit
ServiceImpl.java
View file @
b45930fd
package
com.pms.ocp.service.impl
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.pms.ocp.common.utils.ExcelUtils
;
import
com.pms.ocp.mapper.ModelNoteMapper
;
import
com.pms.ocp.model.entity.ModelNote
;
import
com.pms.ocp.service.ModelNoteService
;
import
com.pms.ocp.mapper.ModelAuditMapper
;
import
com.pms.ocp.model.entity.ModelAudit
;
import
com.pms.ocp.service.ModelAuditService
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
...
...
@@ -17,14 +16,14 @@ import java.util.List;
*/
@Service
public
class
Model
NoteServiceImpl
implements
ModelNote
Service
{
public
class
Model
AuditServiceImpl
implements
ModelAudit
Service
{
@Autowired
private
Model
NoteMapper
modelNote
Mapper
;
private
Model
AuditMapper
modelAudit
Mapper
;
@Override
public
Integer
createModelNote
(
Model
Note
modelNote
)
{
return
model
NoteMapper
.
insert
(
modelNote
);
public
Integer
createModelNote
(
Model
Audit
modelAudit
)
{
return
model
AuditMapper
.
insert
(
modelAudit
);
}
@Override
...
...
@@ -33,20 +32,20 @@ public class ModelNoteServiceImpl implements ModelNoteService {
}
@Override
public
Integer
updateModelNote
(
Model
Note
modelNote
)
{
public
Integer
updateModelNote
(
Model
Audit
modelAudit
)
{
return
null
;
}
@Override
public
List
<
Model
Note
>
getModelNoteList
(
String
modelCode
)
{
public
List
<
Model
Audit
>
getModelNoteList
(
String
modelCode
)
{
QueryWrapper
<
Model
Note
>
wrapper
=
new
QueryWrapper
<>();
wrapper
.
lambda
().
eq
(
Model
Note
:
:
getModelCode
,
modelCode
);
return
model
Note
Mapper
.
selectList
(
wrapper
);
QueryWrapper
<
Model
Audit
>
wrapper
=
new
QueryWrapper
<>();
wrapper
.
lambda
().
eq
(
Model
Audit
:
:
getModelCode
,
modelCode
);
return
model
Audit
Mapper
.
selectList
(
wrapper
);
}
@Override
public
Model
Note
getModelNote
(
String
modelId
)
{
public
Model
Audit
getModelNote
(
String
modelId
)
{
return
null
;
}
...
...
src/main/java/com/pms/ocp/service/impl/ModelClassifyServiceImpl.java
View file @
b45930fd
...
...
@@ -136,7 +136,6 @@ public class ModelClassifyServiceImpl implements ModelClassifyService {
return
childList
;
}
/**
* 构建树节点
* @author huxiuwu
...
...
src/main/java/com/pms/ocp/service/impl/Model
Issu
eServiceImpl.java
→
src/main/java/com/pms/ocp/service/impl/Model
Subscrib
eServiceImpl.java
View file @
b45930fd
package
com.pms.ocp.service.impl
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.pms.ocp.mapper.Model
Issu
eMapper
;
import
com.pms.ocp.model.dto.Model
Issu
eDTO
;
import
com.pms.ocp.model.entity.Model
Issu
e
;
import
com.pms.ocp.service.Model
Issu
eService
;
import
com.pms.ocp.mapper.Model
Subscrib
eMapper
;
import
com.pms.ocp.model.dto.Model
Subscrib
eDTO
;
import
com.pms.ocp.model.entity.Model
Subscrib
e
;
import
com.pms.ocp.service.Model
Subscrib
eService
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
...
...
@@ -20,21 +20,21 @@ import java.util.List;
*/
@Service
public
class
Model
IssueServiceImpl
implements
ModelIssu
eService
{
public
class
Model
SubscribeServiceImpl
implements
ModelSubscrib
eService
{
@Autowired
private
Model
IssueMapper
modelIssu
eMapper
;
private
Model
SubscribeMapper
modelSubscrib
eMapper
;
@Override
public
Integer
createModelIssue
(
Model
IssueDTO
modelIssu
eDTO
)
{
public
Integer
createModelIssue
(
Model
SubscribeDTO
modelSubscrib
eDTO
)
{
Model
Issue
modelIssue
=
new
ModelIssu
e
();
Model
Subscribe
modelSubscribe
=
new
ModelSubscrib
e
();
BeanUtils
.
copyProperties
(
model
IssueDTO
,
modelIssu
e
);
BeanUtils
.
copyProperties
(
model
SubscribeDTO
,
modelSubscrib
e
);
model
Issu
e
.
setSubsCtime
(
LocalDateTime
.
now
());
model
Subscrib
e
.
setSubsCtime
(
LocalDateTime
.
now
());
return
model
IssueMapper
.
insert
(
modelIssu
e
);
return
model
SubscribeMapper
.
insert
(
modelSubscrib
e
);
}
@Override
...
...
@@ -50,35 +50,35 @@ public class ModelIssueServiceImpl implements ModelIssueService {
*/
@Override
public
Integer
deleteBatchModelIssue
(
List
<
String
>
ids
)
{
return
model
Issu
eMapper
.
deleteBatchIds
(
ids
);
return
model
Subscrib
eMapper
.
deleteBatchIds
(
ids
);
}
@Override
public
Integer
updateModelIssue
(
Model
Issue
modelIssu
e
)
{
public
Integer
updateModelIssue
(
Model
Subscribe
modelSubscrib
e
)
{
return
null
;
}
@Override
public
List
<
Model
Issu
e
>
getModelIssueList
(
String
objId
,
String
modelCode
,
String
subsCompanyCode
)
{
QueryWrapper
<
Model
Issu
e
>
queryWrapper
=
new
QueryWrapper
();
public
List
<
Model
Subscrib
e
>
getModelIssueList
(
String
objId
,
String
modelCode
,
String
subsCompanyCode
)
{
QueryWrapper
<
Model
Subscrib
e
>
queryWrapper
=
new
QueryWrapper
();
if
(
StringUtils
.
isNotEmpty
(
objId
))
{
queryWrapper
.
lambda
().
eq
(
Model
Issu
e:
:
getObjId
,
objId
);
queryWrapper
.
lambda
().
eq
(
Model
Subscrib
e:
:
getObjId
,
objId
);
}
if
(
StringUtils
.
isNotEmpty
(
modelCode
))
{
queryWrapper
.
lambda
().
eq
(
Model
Issu
e:
:
getModelCode
,
modelCode
);
queryWrapper
.
lambda
().
eq
(
Model
Subscrib
e:
:
getModelCode
,
modelCode
);
}
if
(
StringUtils
.
isNotEmpty
(
subsCompanyCode
))
{
queryWrapper
.
lambda
().
eq
(
Model
Issu
e:
:
getSubsCompanyCode
,
subsCompanyCode
);
queryWrapper
.
lambda
().
eq
(
Model
Subscrib
e:
:
getSubsCompanyCode
,
subsCompanyCode
);
}
return
model
Issu
eMapper
.
selectList
(
queryWrapper
);
return
model
Subscrib
eMapper
.
selectList
(
queryWrapper
);
}
@Override
public
Model
Issu
eDTO
getModelIssue
(
String
modelId
)
{
public
Model
Subscrib
eDTO
getModelIssue
(
String
modelId
)
{
return
null
;
}
}
src/main/java/com/pms/ocp/service/impl/OcpApiTreeServiceImpl.java
View file @
b45930fd
...
...
@@ -5,11 +5,10 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
com.pms.ocp.common.utils.RandomStringUtil
;
import
com.pms.ocp.common.utils.RandomStringUtil
s
;
import
com.pms.ocp.mapper.OcpApiBaseMapper
;
import
com.pms.ocp.mapper.OcpApiTreeMapper
;
import
com.pms.ocp.model.dto.*
;
import
com.pms.ocp.model.entity.OcpApiBase
;
import
com.pms.ocp.model.entity.OcpApiGroup
;
import
com.pms.ocp.service.OcpApiTreeService
;
...
...
@@ -19,11 +18,9 @@ import org.springframework.beans.BeanUtils;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
java.sql.Date
;
import
java.sql.Timestamp
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.function.Consumer
;
@Service
...
...
@@ -162,7 +159,7 @@ public class OcpApiTreeServiceImpl extends ServiceImpl<OcpApiTreeMapper,OcpApiGr
public
boolean
insertTree
(
OcpApiGroupDtos
ocpApiGroupDtos
)
{
Timestamp
timestamp
=
new
Timestamp
(
System
.
currentTimeMillis
());
String
code
=
RandomStringUtil
.
getRandomString
(
6
);
String
code
=
RandomStringUtil
s
.
getRandomString
(
6
);
boolean
flag
=
true
;
List
<
OcpApiGroup
>
ocpApiGroups
=
mapper
.
selectList
(
null
);
for
(
OcpApiGroup
ocpApiGroup
:
ocpApiGroups
)
{
...
...
src/main/java/com/pms/ocp/service/impl/TenantServiceImpl.java
View file @
b45930fd
...
...
@@ -3,15 +3,12 @@ package com.pms.ocp.service.impl;
import
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
com.pms.ocp.common.utils.RandomStringUtil
;
import
com.pms.ocp.common.utils.RandomStringUtil
s
;
import
com.pms.ocp.mapper.TenantBasicManagementMapper
;
import
com.pms.ocp.mapper.TenantMapper
;
import
com.pms.ocp.model.dto.*
;
import
com.pms.ocp.model.entity.OcpApiGroup
;
import
com.pms.ocp.model.entity.OcpTenantAudit
;
import
com.pms.ocp.model.entity.OcpTenantBase
;
import
com.pms.ocp.model.entity.OcpTenantGroup
;
import
com.pms.ocp.service.TenantService
;
...
...
@@ -118,7 +115,7 @@ public class TenantServiceImpl extends ServiceImpl<TenantMapper, OcpTenantGroup>
break
;
}
}
String
randomString
=
RandomStringUtil
.
getRandomString
(
6
);
String
randomString
=
RandomStringUtil
s
.
getRandomString
(
6
);
Timestamp
timestamp
=
new
Timestamp
(
System
.
currentTimeMillis
());
OcpTenantGroup
ocpTenantGroup
=
new
OcpTenantGroup
();
BeanUtils
.
copyProperties
(
tenanBaseDto
,
ocpTenantGroup
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment