Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
Y
yifu-mvp
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
fangxinjiang
yifu-mvp
Commits
aa07d490
Commit
aa07d490
authored
Sep 24, 2024
by
hongguangwu
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/MVP1.6.10' into MVP1.6.10
parents
2875a0f9
4f783f90
Show whitespace changes
Inline
Side-by-side
Showing
23 changed files
with
113 additions
and
14 deletions
+113
-14
EmployeeInsertVO.java
...yifu/cloud/plus/v1/yifu/archives/vo/EmployeeInsertVO.java
+1
-1
EmployeeConstants.java
...ud/plus/v1/yifu/archives/constants/EmployeeConstants.java
+1
-1
TEmployeeInfoController.java
.../v1/yifu/archives/controller/TEmployeeInfoController.java
+3
-2
TEmployeeInfoService.java
...d/plus/v1/yifu/archives/service/TEmployeeInfoService.java
+1
-1
TEmployeeInfoServiceImpl.java
.../yifu/archives/service/impl/TEmployeeInfoServiceImpl.java
+39
-3
EkpFundProperties.java
...yifu/cloud/plus/v1/yifu/ekp/config/EkpFundProperties.java
+1
-1
EkpIncomeProperties.java
...fu/cloud/plus/v1/yifu/ekp/config/EkpIncomeProperties.java
+1
-1
EkpInsuranceProperties.java
...cloud/plus/v1/yifu/ekp/config/EkpInsuranceProperties.java
+1
-1
EkpOrderProperties.java
...ifu/cloud/plus/v1/yifu/ekp/config/EkpOrderProperties.java
+1
-1
EkpSalaryProperties.java
...fu/cloud/plus/v1/yifu/ekp/config/EkpSalaryProperties.java
+1
-1
EkpSocialProperties.java
...fu/cloud/plus/v1/yifu/ekp/config/EkpSocialProperties.java
+1
-1
ekpFundConfig-prd.properties
...ommon-ekp/src/main/resources/ekpFundConfig-prd.properties
+0
-0
ekpFundConfig-test.properties
...mmon-ekp/src/main/resources/ekpFundConfig-test.properties
+7
-0
ekpIncomeConfig-prd.properties
...mon-ekp/src/main/resources/ekpIncomeConfig-prd.properties
+0
-0
ekpIncomeConfig-test.properties
...on-ekp/src/main/resources/ekpIncomeConfig-test.properties
+11
-0
ekpInsuranceConfig-prd.properties
...-ekp/src/main/resources/ekpInsuranceConfig-prd.properties
+0
-0
ekpInsuranceConfig-test.properties
...ekp/src/main/resources/ekpInsuranceConfig-test.properties
+13
-0
ekpOrderConfig-prd.properties
...mmon-ekp/src/main/resources/ekpOrderConfig-prd.properties
+0
-0
ekpOrderConfig-test.properties
...mon-ekp/src/main/resources/ekpOrderConfig-test.properties
+13
-0
ekpSalaryConfig-prd.properties
...mon-ekp/src/main/resources/ekpSalaryConfig-prd.properties
+0
-0
ekpSalaryConfig-test.properties
...on-ekp/src/main/resources/ekpSalaryConfig-test.properties
+11
-0
ekpSocialConfig-prd.properties
...mon-ekp/src/main/resources/ekpSocialConfig-prd.properties
+0
-0
ekpSocialConfig-test.properties
...on-ekp/src/main/resources/ekpSocialConfig-test.properties
+7
-0
No files found.
yifu-archives/yifu-archives-api/src/main/java/com/yifu/cloud/plus/v1/yifu/archives/vo/EmployeeInsertVO.java
View file @
aa07d490
...
...
@@ -217,7 +217,7 @@ public class EmployeeInsertVO extends RowIndex implements Serializable {
/**
* 通信地址省
*/
@ExcelAttribute
(
name
=
"通信地址-省"
,
isArea
=
true
,
isNotEmpty
=
true
)
@ExcelAttribute
(
name
=
"通信地址-省"
,
isArea
=
true
)
@HeadFontStyle
(
fontHeightInPoints
=
11
)
@ExcelProperty
(
"通信地址-省"
)
private
String
contactProvince
;
...
...
yifu-archives/yifu-archives-biz/src/main/java/com/yifu/cloud/plus/v1/yifu/archives/constants/EmployeeConstants.java
View file @
aa07d490
...
...
@@ -14,7 +14,7 @@ public class EmployeeConstants {
public
static
final
String
VALIDITY_END_FORMAT
=
"身份证截止日期只能为日期格式:yyyy-MM-dd或者固定值:长期"
;
public
static
final
String
EMP_NATIONAL
=
"民族必填"
;
public
static
final
String
ID_PROVINCE
=
"户籍所在地必填"
;
public
static
final
String
FILE_PROVINCE
=
"档案所在地必填"
;
public
static
final
String
FILE_PROVINCE
=
"档案所在地
(省市县)
必填"
;
public
static
final
String
CONTACT_PROVINCE
=
"通信地址(省市县)必填"
;
public
static
final
String
EMP_REGIS_TYPE
=
"户口性质必填"
;
public
static
final
String
IS_COLLEGE
=
"是否大专及以上必填"
;
...
...
yifu-archives/yifu-archives-biz/src/main/java/com/yifu/cloud/plus/v1/yifu/archives/controller/TEmployeeInfoController.java
View file @
aa07d490
...
...
@@ -343,8 +343,9 @@ public class TEmployeeInfoController {
@SysLog
(
"批量更新人员档案"
)
@PostMapping
(
"/batchUpdateEmployee"
)
@PreAuthorize
(
"@pms.hasPermission('employee_batch_update')"
)
public
R
<
List
<
ErrorMessage
>>
batchUpdateEmployee
(
@RequestBody
MultipartFile
file
)
{
return
tEmployeeInfoService
.
batchUpdateEmployee
(
file
.
getInputStream
());
public
R
<
List
<
ErrorMessage
>>
batchUpdateEmployee
(
@RequestBody
MultipartFile
file
,
@RequestParam
(
name
=
"exportFields"
,
required
=
true
)
String
[]
exportFields
)
{
return
tEmployeeInfoService
.
batchUpdateEmployee
(
file
.
getInputStream
(),
exportFields
);
}
/**
...
...
yifu-archives/yifu-archives-biz/src/main/java/com/yifu/cloud/plus/v1/yifu/archives/service/TEmployeeInfoService.java
View file @
aa07d490
...
...
@@ -167,7 +167,7 @@ public interface TEmployeeInfoService extends IService<TEmployeeInfo> {
* @Date: 2022/6/22 20:30
* @return: com.yifu.cloud.plus.v1.yifu.common.core.util.R<java.util.List < com.pig4cloud.plugin.excel.vo.ErrorMessage>>
**/
R
<
List
<
ErrorMessage
>>
batchUpdateEmployee
(
InputStream
inputStream
);
R
<
List
<
ErrorMessage
>>
batchUpdateEmployee
(
InputStream
inputStream
,
String
[]
exportFields
);
void
updateEducationOfEmp
(
EmpEducationUpdateVO
education
);
...
...
yifu-archives/yifu-archives-biz/src/main/java/com/yifu/cloud/plus/v1/yifu/archives/service/impl/TEmployeeInfoServiceImpl.java
View file @
aa07d490
...
...
@@ -21,6 +21,7 @@ import cn.hutool.core.collection.CollUtil;
import
com.alibaba.excel.EasyExcel
;
import
com.alibaba.excel.ExcelWriter
;
import
com.alibaba.excel.context.AnalysisContext
;
import
com.alibaba.excel.read.builder.ExcelReaderSheetBuilder
;
import
com.alibaba.excel.read.listener.ReadListener
;
import
com.alibaba.excel.read.metadata.holder.ReadRowHolder
;
import
com.alibaba.excel.util.ListUtils
;
...
...
@@ -971,6 +972,10 @@ public class TEmployeeInfoServiceImpl extends ServiceImpl<TEmployeeInfoMapper, T
errorMsg
.
add
(
EmployeeConstants
.
FILE_PROVINCE
);
errorMsgMap
.
put
(
lineNum
,
new
ErrorMessage
(
EmployeeConstants
.
FILE_PROVINCE
));
}
if
(
Common
.
isEmpty
(
employeeInfo
.
getFileTown
()))
{
errorMsg
.
add
(
EmployeeConstants
.
FILE_PROVINCE
);
errorMsgMap
.
put
(
lineNum
,
new
ErrorMessage
(
EmployeeConstants
.
FILE_PROVINCE
));
}
if
(
Common
.
isEmpty
(
employeeInfo
.
getContactTown
()))
{
errorMsg
.
add
(
EmployeeConstants
.
CONTACT_PROVINCE
);
...
...
@@ -1620,7 +1625,7 @@ public class TEmployeeInfoServiceImpl extends ServiceImpl<TEmployeeInfoMapper, T
}
@Override
public
R
<
List
<
ErrorMessage
>>
batchUpdateEmployee
(
InputStream
inputStream
)
{
public
R
<
List
<
ErrorMessage
>>
batchUpdateEmployee
(
InputStream
inputStream
,
String
[]
exportFields
)
{
List
<
ErrorMessage
>
errorMessageList
=
new
ArrayList
<>();
ExcelUtil
<
EmployeeInsertVO
>
util1
=
new
ExcelUtil
<>(
EmployeeInsertVO
.
class
);
// 写法2:
...
...
@@ -1669,7 +1674,7 @@ public class TEmployeeInfoServiceImpl extends ServiceImpl<TEmployeeInfoMapper, T
private
void
saveData
()
{
log
.
info
(
"{}条数据,开始存储数据库!"
,
cachedDataList
.
size
());
if
(!
cachedDataList
.
isEmpty
())
{
batchUpdateCore
(
cachedDataList
,
errorMessageList
);
batchUpdateCore
(
cachedDataList
,
errorMessageList
,
exportFields
);
}
log
.
info
(
"存储数据库成功!"
);
}
...
...
@@ -1685,7 +1690,9 @@ public class TEmployeeInfoServiceImpl extends ServiceImpl<TEmployeeInfoMapper, T
}
}
private
R
<
List
<
ErrorMessage
>>
batchUpdateCore
(
List
<
EmployeeInsertVO
>
excelVOList
,
List
<
ErrorMessage
>
errorMessageList
)
{
private
R
<
List
<
ErrorMessage
>>
batchUpdateCore
(
List
<
EmployeeInsertVO
>
excelVOList
,
List
<
ErrorMessage
>
errorMessageList
,
String
[]
exportFields
)
{
YifuUser
user
=
SecurityUtils
.
getUser
();
Set
<
String
>
errorMsg
;
if
(
user
==
null
||
Common
.
isEmpty
(
user
.
getId
()))
{
...
...
@@ -1700,6 +1707,14 @@ public class TEmployeeInfoServiceImpl extends ServiceImpl<TEmployeeInfoMapper, T
errorMessageList
.
add
(
new
ErrorMessage
(
2L
,
errorMsg
));
return
R
.
failed
(
errorMessageList
);
}
//初试化表头用于校验省市县
HashMap
<
String
,
String
>
headMap
=
new
HashMap
<>();
if
(
Common
.
isNotNull
(
exportFields
)){
for
(
int
i
=
0
;
i
<
exportFields
.
length
;
i
++){
headMap
.
put
(
exportFields
[
i
],
exportFields
[
i
]);
}
}
// 通用校验获取失败的数据
Map
<
Long
,
ErrorMessage
>
errorMsgMap
=
new
HashMap
<>();
...
...
@@ -1991,6 +2006,27 @@ public class TEmployeeInfoServiceImpl extends ServiceImpl<TEmployeeInfoMapper, T
saveEmp
.
setContactAddress
(
excel
.
getContactAddress
());
}
}
// 档案地和通信地址 校验
if
(
Common
.
isNotNull
(
headMap
.
get
(
"档案所在省"
))
||
Common
.
isNotNull
(
headMap
.
get
(
"档案所在市"
))
||
Common
.
isNotNull
(
headMap
.
get
(
"档案所在县"
))){
if
(
Common
.
isEmpty
(
excel
.
getFileTown
()))
{
errorMsg
.
add
(
EmployeeConstants
.
FILE_PROVINCE
);
}
}
if
(
Common
.
isNotNull
(
headMap
.
get
(
"通信地址-省"
))
||
Common
.
isNotNull
(
headMap
.
get
(
"通信地址-市"
))
||
Common
.
isNotNull
(
headMap
.
get
(
"通信地址-区/县"
))){
if
(
Common
.
isEmpty
(
excel
.
getContactTown
()))
{
errorMsg
.
add
(
EmployeeConstants
.
CONTACT_PROVINCE
);
}
}
if
(
Common
.
isNotNull
(
headMap
.
get
(
"通信地址-详细地址"
))){
if
(
Common
.
isEmpty
(
excel
.
getContactAddress
()))
{
errorMsg
.
add
(
EmployeeConstants
.
CONTACT_ADDRESS
);
}
}
if
(
Common
.
isNotNull
(
excel
.
getRemark
()))
{
if
(
excel
.
getRemark
().
length
()
>
200
)
{
errorMsg
.
add
(
EmployeeConstants
.
REMARL_LENGTH
);
...
...
yifu-common/yifu-common-ekp/src/main/java/com/yifu/cloud/plus/v1/yifu/ekp/config/EkpFundProperties.java
View file @
aa07d490
...
...
@@ -14,7 +14,7 @@ import org.springframework.stereotype.Component;
**/
@Data
@Component
@PropertySource
(
"classpath:ekpFundConfig.properties"
)
@PropertySource
(
"classpath:ekpFundConfig
-${spring.profiles.active}
.properties"
)
@ConfigurationProperties
(
value
=
"ekpfund"
,
ignoreInvalidFields
=
false
)
public
class
EkpFundProperties
{
...
...
yifu-common/yifu-common-ekp/src/main/java/com/yifu/cloud/plus/v1/yifu/ekp/config/EkpIncomeProperties.java
View file @
aa07d490
...
...
@@ -14,7 +14,7 @@ import org.springframework.stereotype.Component;
**/
@Data
@Component
@PropertySource
(
"classpath:ekpIncomeConfig.properties"
)
@PropertySource
(
"classpath:ekpIncomeConfig
-${spring.profiles.active}
.properties"
)
@ConfigurationProperties
(
value
=
"income"
,
ignoreInvalidFields
=
false
)
public
class
EkpIncomeProperties
{
...
...
yifu-common/yifu-common-ekp/src/main/java/com/yifu/cloud/plus/v1/yifu/ekp/config/EkpInsuranceProperties.java
View file @
aa07d490
...
...
@@ -12,7 +12,7 @@ import org.springframework.stereotype.Component;
*/
@Data
@Component
@PropertySource
(
"classpath:ekpInsuranceConfig.properties"
)
@PropertySource
(
"classpath:ekpInsuranceConfig
-${spring.profiles.active}
.properties"
)
@ConfigurationProperties
(
value
=
"insurance"
,
ignoreInvalidFields
=
false
)
public
class
EkpInsuranceProperties
{
...
...
yifu-common/yifu-common-ekp/src/main/java/com/yifu/cloud/plus/v1/yifu/ekp/config/EkpOrderProperties.java
View file @
aa07d490
...
...
@@ -12,7 +12,7 @@ import org.springframework.stereotype.Component;
*/
@Data
@Component
@PropertySource
(
"classpath:ekpOrderConfig.properties"
)
@PropertySource
(
"classpath:ekpOrderConfig
-${spring.profiles.active}
.properties"
)
@ConfigurationProperties
(
value
=
"ekporder"
,
ignoreInvalidFields
=
false
)
public
class
EkpOrderProperties
{
...
...
yifu-common/yifu-common-ekp/src/main/java/com/yifu/cloud/plus/v1/yifu/ekp/config/EkpSalaryProperties.java
View file @
aa07d490
...
...
@@ -14,7 +14,7 @@ import org.springframework.stereotype.Component;
**/
@Data
@Component
@PropertySource
(
"classpath:ekpSalaryConfig.properties"
)
@PropertySource
(
"classpath:ekpSalaryConfig
-${spring.profiles.active}
.properties"
)
@ConfigurationProperties
(
value
=
"ekp"
,
ignoreInvalidFields
=
false
)
public
class
EkpSalaryProperties
{
...
...
yifu-common/yifu-common-ekp/src/main/java/com/yifu/cloud/plus/v1/yifu/ekp/config/EkpSocialProperties.java
View file @
aa07d490
...
...
@@ -14,7 +14,7 @@ import org.springframework.stereotype.Component;
**/
@Data
@Component
@PropertySource
(
"classpath:ekpSocialConfig.properties"
)
@PropertySource
(
"classpath:ekpSocialConfig
-${spring.profiles.active}
.properties"
)
@ConfigurationProperties
(
value
=
"ekpsocial"
,
ignoreInvalidFields
=
false
)
public
class
EkpSocialProperties
{
...
...
yifu-common/yifu-common-ekp/src/main/resources/ekpFundConfig.properties
→
yifu-common/yifu-common-ekp/src/main/resources/ekpFundConfig
-prd
.properties
View file @
aa07d490
File moved
yifu-common/yifu-common-ekp/src/main/resources/ekpFundConfig-test.properties
0 → 100644
View file @
aa07d490
#ekpfund.url=http://192.168.0.228:8080/api/sys-modeling/appModelRestService/addModel
ekpfund.url
=
http://36.7.147.29:27007/api/sys-modeling/appModelRestService/addModel
ekpfund.fdModelId
=
181d741547a691aa68b16149a40de901
ekpfund.fdFlowId
=
18290af372be55308327273487abf72a
ekpfund.docStatus
=
20
ekpfund.LoginName
=
admin
ekpfund.docSubject
=
\u
516C
\u
79EF
\u
91D1
\u
660E
\u
7EC6
\u6570\u
636E
\u
63A5
\u
53E3
yifu-common/yifu-common-ekp/src/main/resources/ekpIncomeConfig.properties
→
yifu-common/yifu-common-ekp/src/main/resources/ekpIncomeConfig
-prd
.properties
View file @
aa07d490
File moved
yifu-common/yifu-common-ekp/src/main/resources/ekpIncomeConfig-test.properties
0 → 100644
View file @
aa07d490
#income.url=http://192.168.0.228:8080/api/sys-modeling/appModelRestService/addModel
income.url
=
http://36.7.147.29:27007/api/sys-modeling/appModelRestService/addModel
income.fdModelIdManage
=
181d76db26e419a88dba97b0c406689e
income.fdFlowIdManage
=
182d3b6e522b2690119e70d4ff082136
income.fdModelIdRisk
=
181d76db26e4112e14b9bb4274d06ba1
income.fdFlowIdRisk
=
182d3bdadab3a52be024e154e99b5f8b
income.docStatus
=
20
income.loginName
=
admin
income.docSubject
=
\u6536\u5165\u
660E
\u
7EC6
\u6570\u
636E
\u
63A5
\u
53E3
yifu-common/yifu-common-ekp/src/main/resources/ekpInsuranceConfig.properties
→
yifu-common/yifu-common-ekp/src/main/resources/ekpInsuranceConfig
-prd
.properties
View file @
aa07d490
File moved
yifu-common/yifu-common-ekp/src/main/resources/ekpInsuranceConfig-test.properties
0 → 100644
View file @
aa07d490
#insurance.insuranceUrl=http://192.168.0.228:8080/api/sys-modeling/appModelRestService/addModel
insurance.insuranceUrl
=
http://36.7.147.29:27007/api/sys-modeling/appModelRestService/addModel
insurance.insuranceFdModelId
=
181d73279372e5a55438a47d7436ab7e
insurance.insuranceFdFlowId
=
18267f206233f29cbd3c5ee425c9408a
insurance.insuranceDocStatus
=
20
insurance.insuranceLoginName
=
admin
insurance.insuranceDocSubject
=
\u5546\u9669\u
63A8
\u9001
ekp
\u
63A5
\u
53E3
insurance.insuranceUpdateDocSubject
=
\u5546\u9669\u
63A8
\u9001
ekp
\u
4FEE
\u6539\u
63A5
\u
53E3
insurance.insuranceUpdateFdModelId
=
1850410ac0201ed20e5f09b46b0b109c
insurance.insuranceUpdateFdFlowId
=
185189155a87e1d4739d82b4d3c80358
yifu-common/yifu-common-ekp/src/main/resources/ekpOrderConfig.properties
→
yifu-common/yifu-common-ekp/src/main/resources/ekpOrderConfig
-prd
.properties
View file @
aa07d490
File moved
yifu-common/yifu-common-ekp/src/main/resources/ekpOrderConfig-test.properties
0 → 100644
View file @
aa07d490
#ekporder.url=http://192.168.0.228:8080/api/sys-modeling/appModelRestService/addModel
ekporder.url
=
http://36.7.147.29:27007/api/sys-modeling/appModelRestService/addModel
ekporder.orderFdModelId
=
182f1b7ffe2e96f975564e44e559847d
ekporder.orderFdFlowId
=
182f1c098ce991ca96bc927408792beb
ekporder.replyFdModelId
=
182f1bb35bb2156fb9a02904bc88dd8a
ekporder.replyFdFlowId
=
182f1c3d6f5724e335b88d544be8c993
ekporder.replyAttachKey
=
fd_3ac904c9342fe2
ekporder.docStatus
=
20
ekporder.LoginName
=
admin
ekporder.orderDocSubject
=
\u7528\u
4E8E
\u9879\u
76EE
\u
8BA2
\u5355\u
66F4
\u
65B0
\u
63A5
\u
53E3
ekporder.replyDocSubject
=
\u7528\u
4E8E
\u
8BA2
\u5355\u
56DE
\u
590D
\u
63A5
\u
53E3
yifu-common/yifu-common-ekp/src/main/resources/ekpSalaryConfig.properties
→
yifu-common/yifu-common-ekp/src/main/resources/ekpSalaryConfig
-prd
.properties
View file @
aa07d490
File moved
yifu-common/yifu-common-ekp/src/main/resources/ekpSalaryConfig-test.properties
0 → 100644
View file @
aa07d490
#ekp.url=http://192.168.0.228:8080/api/sys-modeling/appModelRestService/addModel
ekp.url
=
http://36.7.147.29:27007/api/sys-modeling/appModelRestService/addModel
ekp.fdModelId
=
181d7633ff8bc797276d0d3a54e80ad6
ekp.fdFlowId
=
182b40249c1bc940d7226b941c7a4183
ekp.docStatus
=
20
ekp.loginName
=
admin
ekp.docSubject
=
\u
85AA
\u
8D44
\u
8BA2
\u5355\u
660E
\u
7EC6
\u6570\u
636E
\u
63A5
\u
53E3
ekp.standardFdModelId
=
184326e4b122e5fa3068628470285b71
ekp.standardFdFlowId
=
1843272d8103adae6d332a54bce88255
ekp.backSalaryFdModelId
=
18433d5df69433ea9073400476c9cb8b
ekp.backSalaryFdFlowId
=
18433d7d9f83e800bd292984488ac770
\ No newline at end of file
yifu-common/yifu-common-ekp/src/main/resources/ekpSocialConfig.properties
→
yifu-common/yifu-common-ekp/src/main/resources/ekpSocialConfig
-prd
.properties
View file @
aa07d490
File moved
yifu-common/yifu-common-ekp/src/main/resources/ekpSocialConfig-test.properties
0 → 100644
View file @
aa07d490
ekpsocial.url
=
http://36.7.147.29:27007/api/sys-modeling/appModelRestService/addModel
#ekpsocial.url=http://192.168.0.228:8080/api/sys-modeling/appModelRestService/addModel
ekpsocial.fdModelId
=
181d741547a69ba9dbc12377948e98fd
ekpsocial.fdFlowId
=
18233028fe91511376b00f74b3a8f3a7
ekpsocial.docStatus
=
20
ekpsocial.LoginName
=
admin
ekpsocial.docSubject
=
\u
793E
\u
4FDD
\u
660E
\u
7EC6
\u6570\u
636E
\u
63A5
\u
53E3
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