Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
K
klck
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
位宇华
klck
Commits
163afb19
Commit
163afb19
authored
Jun 13, 2024
by
Fuzy
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
1
parent
f0c44159
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
89 additions
and
104 deletions
+89
-104
ruoyi-wages/src/main/java/com/ruoyi/system/mapper/WagesCompilationMapper.java
.../java/com/ruoyi/system/mapper/WagesCompilationMapper.java
+1
-1
ruoyi-wages/src/main/java/com/ruoyi/system/mapper/WagesVersionMapper.java
...main/java/com/ruoyi/system/mapper/WagesVersionMapper.java
+1
-1
ruoyi-wages/src/main/java/com/ruoyi/system/service/impl/WagesDetailsServiceImpl.java
...om/ruoyi/system/service/impl/WagesDetailsServiceImpl.java
+0
-43
ruoyi-wages/src/main/java/com/ruoyi/system/service/impl/WagesServiceImpl.java
.../java/com/ruoyi/system/service/impl/WagesServiceImpl.java
+22
-40
ruoyi-wages/src/main/java/com/ruoyi/system/utils/WagesUtils.java
...ages/src/main/java/com/ruoyi/system/utils/WagesUtils.java
+47
-0
ruoyi-wages/src/main/resources/mapper/system/WagesComparationMapper.xml
...c/main/resources/mapper/system/WagesComparationMapper.xml
+17
-16
ruoyi-wages/src/main/resources/mapper/system/WagesVersionMapper.xml
...s/src/main/resources/mapper/system/WagesVersionMapper.xml
+1
-3
No files found.
ruoyi-wages/src/main/java/com/ruoyi/system/mapper/WagesCompilationMapper.java
View file @
163afb19
...
@@ -19,7 +19,7 @@ public interface WagesCompilationMapper {
...
@@ -19,7 +19,7 @@ public interface WagesCompilationMapper {
List
<
WagesCompilationExcelDAO
>
list
();
List
<
WagesCompilationExcelDAO
>
list
();
WagesCompilationExcelDAO
selectByMineIdAndType
(
@Param
(
"mineId"
)
String
mineId
,
@Param
(
"type"
)
String
type
);
List
<
WagesCompilationExcelDAO
>
selectByMineIdAndType
(
@Param
(
"mineId"
)
String
mineId
,
@Param
(
"type"
)
String
type
);
WagesCompilationExcelDAO
selectByMineIdAndTypeAndVersionId
(
@Param
(
"mineId"
)
String
mineId
,
@Param
(
"type"
)
String
type
,
@Param
(
"versionId"
)
Integer
versionId
);
WagesCompilationExcelDAO
selectByMineIdAndTypeAndVersionId
(
@Param
(
"mineId"
)
String
mineId
,
@Param
(
"type"
)
String
type
,
@Param
(
"versionId"
)
Integer
versionId
);
}
}
ruoyi-wages/src/main/java/com/ruoyi/system/mapper/WagesVersionMapper.java
View file @
163afb19
...
@@ -10,5 +10,5 @@ import java.util.List;
...
@@ -10,5 +10,5 @@ import java.util.List;
*/
*/
public
interface
WagesVersionMapper
{
public
interface
WagesVersionMapper
{
WagesVersionDAO
selectByVersionId
(
Integer
versionId
);
List
<
WagesVersionDAO
>
selectByVersionId
(
);
}
}
ruoyi-wages/src/main/java/com/ruoyi/system/service/impl/WagesDetailsServiceImpl.java
deleted
100644 → 0
View file @
f0c44159
package
com.ruoyi.system.service.impl
;
import
com.ruoyi.system.mapper.WagesCompilationMapper
;
import
com.ruoyi.system.mapper.WagesDetailsMapper
;
import
com.ruoyi.system.mapper.WagesVersionMapper
;
import
com.ruoyi.system.model.wages.dao.WagesCompilationExcelDAO
;
import
com.ruoyi.system.model.wages.dao.WagesVersionDAO
;
import
com.ruoyi.system.service.WagesDetailsService
;
import
lombok.RequiredArgsConstructor
;
import
org.springframework.stereotype.Service
;
import
org.springframework.web.multipart.MultipartFile
;
/**
* @author haiwe
* @date 2024/6/5
*/
@Service
@RequiredArgsConstructor
public
class
WagesDetailsServiceImpl
implements
WagesDetailsService
{
private
final
WagesDetailsMapper
detailsMapper
;
private
final
WagesCompilationMapper
wagesCompilationMapper
;
private
final
WagesVersionMapper
wagesVersionMapper
;
@Override
public
void
deteleByMineIdAndDate
(
String
mineId
,
String
date
,
String
type
)
{
WagesCompilationExcelDAO
wagesCompilationExcelDAO
=
wagesCompilationMapper
.
selectByMineIdAndType
(
mineId
,
type
);
Integer
versionId
=
wagesCompilationExcelDAO
.
getVersionId
();
if
(
versionId
==
null
)
{
return
;
}
WagesVersionDAO
wagesVersionDAO
=
wagesVersionMapper
.
selectByVersionId
(
versionId
);
if
(
wagesVersionDAO
.
getOpenOrClose
().
equals
(
"0"
))
{
return
;
}
WagesCompilationExcelDAO
dao
=
wagesCompilationMapper
.
selectByMineIdAndTypeAndVersionId
(
mineId
,
type
,
versionId
);
if
(
dao
==
null
)
{
return
;
}
Integer
comparisonId
=
dao
.
getComparisonId
();
detailsMapper
.
deleteBatch
(
mineId
,
date
,
comparisonId
);
}
}
ruoyi-wages/src/main/java/com/ruoyi/system/service/impl/WagesServiceImpl.java
View file @
163afb19
...
@@ -7,11 +7,14 @@ import com.alibaba.fastjson.JSONObject;
...
@@ -7,11 +7,14 @@ import com.alibaba.fastjson.JSONObject;
import
com.ruoyi.system.common.ReturnResult
;
import
com.ruoyi.system.common.ReturnResult
;
import
com.ruoyi.system.constant.ApiConstant
;
import
com.ruoyi.system.constant.ApiConstant
;
import
com.ruoyi.system.listener.ExcelListener
;
import
com.ruoyi.system.listener.ExcelListener
;
import
com.ruoyi.system.mapper.*
;
import
com.ruoyi.system.mapper.WagesDetailsMapper
;
import
com.ruoyi.system.mapper.WagesMapper
;
import
com.ruoyi.system.mapper.WagesSalaryProofMapper
;
import
com.ruoyi.system.model.doc.CustomDocRequestModel
;
import
com.ruoyi.system.model.doc.CustomDocRequestModel
;
import
com.ruoyi.system.model.wages.dao.*
;
import
com.ruoyi.system.model.wages.dao.*
;
import
com.ruoyi.system.model.wages.vo.WagesOverviewOriginalDataVO
;
import
com.ruoyi.system.model.wages.vo.WagesOverviewOriginalDataVO
;
import
com.ruoyi.system.service.WagesService
;
import
com.ruoyi.system.service.WagesService
;
import
com.ruoyi.system.utils.WagesUtils
;
import
com.ruoyi.system.yyinterface.VoucherUtils
;
import
com.ruoyi.system.yyinterface.VoucherUtils
;
import
lombok.RequiredArgsConstructor
;
import
lombok.RequiredArgsConstructor
;
import
org.slf4j.Logger
;
import
org.slf4j.Logger
;
...
@@ -39,10 +42,8 @@ public class WagesServiceImpl implements WagesService {
...
@@ -39,10 +42,8 @@ public class WagesServiceImpl implements WagesService {
WagesMapper
wagesMapper
;
WagesMapper
wagesMapper
;
@Autowired
@Autowired
WagesSalaryProofMapper
wagesSalaryProofMapper
;
WagesSalaryProofMapper
wagesSalaryProofMapper
;
@Autowired
private
final
WagesDetailsMapper
wagesDetailsMapper
;
WagesDetailsMapper
wagesDetailsMapper
;
private
final
WagesDetailsMapper
detailsMapper
;
private
final
WagesCompilationMapper
wagesCompilationMapper
;
private
final
WagesVersionMapper
wagesVersionMapper
;
@Transactional
@Transactional
@Override
@Override
...
@@ -154,8 +155,8 @@ public class WagesServiceImpl implements WagesService {
...
@@ -154,8 +155,8 @@ public class WagesServiceImpl implements WagesService {
String
lbname
=
sourceOfExpenses
.
substring
(
index
+
1
);
String
lbname
=
sourceOfExpenses
.
substring
(
index
+
1
);
String
lbname2
=
"项目"
;
String
lbname2
=
"项目"
;
//用友项目接口查询
//用友项目接口查询
String
xmCode
=
getCodeByName
(
lbname
,
"010101"
);
String
xmCode
=
getCodeByName
(
lbname
,
"010101"
);
if
(
xmCode
!=
null
)
{
if
(
xmCode
!=
null
)
{
jsonObject1
.
put
(
"auxiliary_item_b"
,
lbname2
+
":"
+
xmCode
+
"/"
+
lbname
);
jsonObject1
.
put
(
"auxiliary_item_b"
,
lbname2
+
":"
+
xmCode
+
"/"
+
lbname
);
}
}
...
@@ -217,17 +218,20 @@ public class WagesServiceImpl implements WagesService {
...
@@ -217,17 +218,20 @@ public class WagesServiceImpl implements WagesService {
@Override
@Override
public
String
linXiExcelAnalysisWages
(
MultipartFile
file
,
String
date
,
String
mineId
)
{
public
String
linXiExcelAnalysisWages
(
MultipartFile
file
,
String
date
,
String
mineId
)
{
try
{
try
{
Integer
comparisonId
=
WagesUtils
.
getComparisonId
(
mineId
,
"0"
);
detailsMapper
.
deleteBatch
(
mineId
,
date
,
comparisonId
);
comparisonId
=
WagesUtils
.
getComparisonId
(
mineId
,
"1"
);
detailsMapper
.
deleteBatch
(
mineId
,
date
,
comparisonId
);
List
<
String
>
filterList
=
Arrays
.
asList
(
"小计"
,
"合计"
,
"总计"
);
List
<
String
>
filterList
=
Arrays
.
asList
(
"小计"
,
"合计"
,
"总计"
);
InputStream
inputStream
=
file
.
getInputStream
();
InputStream
inputStream
=
file
.
getInputStream
();
List
<
WagesDetailsExcelDAO
>
wagesList
=
EasyExcelFactory
.
read
(
inputStream
,
WagesDetailsExcelDAO
.
class
,
new
ExcelListener
<
WagesDetailsExcelDAO
>()).
sheet
(
0
).
headRowNumber
(
2
).
doReadSync
();
List
<
WagesDetailsExcelDAO
>
wagesList
=
EasyExcelFactory
.
read
(
inputStream
,
WagesDetailsExcelDAO
.
class
,
new
ExcelListener
<
WagesDetailsExcelDAO
>()).
sheet
(
0
).
headRowNumber
(
2
).
doReadSync
();
inputStream
.
close
();
inputStream
.
close
();
Integer
comparisonId1
=
getComparisonId
(
mineId
,
"0"
);
Integer
comparisonId1
=
WagesUtils
.
getComparisonId
(
mineId
,
"0"
);
InputStream
inputStream1
=
file
.
getInputStream
();
InputStream
inputStream1
=
file
.
getInputStream
();
List
<
WagesDetailsExcelDAO
>
financeWagesList
=
EasyExcelFactory
.
read
(
inputStream1
,
WagesDetailsExcelDAO
.
class
,
new
ExcelListener
<
WagesDetailsExcelDAO
>()).
sheet
(
1
).
headRowNumber
(
2
).
doReadSync
();
List
<
WagesDetailsExcelDAO
>
financeWagesList
=
EasyExcelFactory
.
read
(
inputStream1
,
WagesDetailsExcelDAO
.
class
,
new
ExcelListener
<
WagesDetailsExcelDAO
>()).
sheet
(
1
).
headRowNumber
(
2
).
doReadSync
();
inputStream1
.
close
();
inputStream1
.
close
();
Integer
comparisonId2
=
getComparisonId
(
mineId
,
"1"
);
Integer
comparisonId2
=
WagesUtils
.
getComparisonId
(
mineId
,
"1"
);
wagesList
=
wagesList
.
parallelStream
()
wagesList
=
wagesList
.
parallelStream
()
.
filter
(
v
->
!
filterList
.
contains
(
v
.
getA1
()))
.
filter
(
v
->
!
filterList
.
contains
(
v
.
getA1
()))
.
peek
(
v
->
v
.
setComparisonId
(
comparisonId1
)).
collect
(
Collectors
.
toList
());
.
peek
(
v
->
v
.
setComparisonId
(
comparisonId1
)).
collect
(
Collectors
.
toList
());
...
@@ -242,29 +246,6 @@ public class WagesServiceImpl implements WagesService {
...
@@ -242,29 +246,6 @@ public class WagesServiceImpl implements WagesService {
return
"完成"
;
return
"完成"
;
}
}
/**
* 根据矿id和type获取对应的对照表id
* @param mineId
* @param type
* @return
*/
private
Integer
getComparisonId
(
String
mineId
,
String
type
)
{
WagesCompilationExcelDAO
wagesCompilationExcelDAO
=
wagesCompilationMapper
.
selectByMineIdAndType
(
mineId
,
type
);
Integer
versionId
=
wagesCompilationExcelDAO
.
getVersionId
();
if
(
versionId
==
null
)
{
return
null
;
}
WagesVersionDAO
wagesVersionDAO
=
wagesVersionMapper
.
selectByVersionId
(
versionId
);
if
(
wagesVersionDAO
.
getOpenOrClose
().
equals
(
"0"
))
{
return
null
;
}
WagesCompilationExcelDAO
dao
=
wagesCompilationMapper
.
selectByMineIdAndTypeAndVersionId
(
mineId
,
type
,
versionId
);
if
(
dao
==
null
)
{
return
null
;
}
return
dao
.
getComparisonId
();
}
public
JSONArray
getCustomDoc
(
CustomDocRequestModel
customDocRequestModel
)
{
public
JSONArray
getCustomDoc
(
CustomDocRequestModel
customDocRequestModel
)
{
ReturnResult
customDocument
=
VoucherUtils
.
callVoucherQuery
(
customDocRequestModel
,
"/yonbip/digitalModel/customerdoc/list"
);
ReturnResult
customDocument
=
VoucherUtils
.
callVoucherQuery
(
customDocRequestModel
,
"/yonbip/digitalModel/customerdoc/list"
);
...
@@ -289,18 +270,19 @@ public class WagesServiceImpl implements WagesService {
...
@@ -289,18 +270,19 @@ public class WagesServiceImpl implements WagesService {
}
}
return
code
;
return
code
;
}
}
//用友接口获取项目
//用友接口获取项目
private
String
getCodeByName
(
String
name
,
String
mineId
)
{
private
String
getCodeByName
(
String
name
,
String
mineId
)
{
String
code
=
null
;
String
code
=
null
;
JSONObject
jsonObject
=
new
JSONObject
();
JSONObject
jsonObject
=
new
JSONObject
();
jsonObject
.
put
(
"pageIndex"
,
1L
);
jsonObject
.
put
(
"pageIndex"
,
1L
);
jsonObject
.
put
(
"pageSize"
,
1000L
);
jsonObject
.
put
(
"pageSize"
,
1000L
);
jsonObject
.
put
(
"name"
,
name
);
jsonObject
.
put
(
"name"
,
name
);
ReturnResult
accSubject
=
VoucherUtils
.
callVoucherQuery
(
jsonObject
,
ApiConstant
.
YFXM_URL
);
ReturnResult
accSubject
=
VoucherUtils
.
callVoucherQuery
(
jsonObject
,
ApiConstant
.
YFXM_URL
);
JSONObject
data
=
(
JSONObject
)
accSubject
.
getData
().
get
(
0
);
JSONObject
data
=
(
JSONObject
)
accSubject
.
getData
().
get
(
0
);
JSONArray
recordList
=
data
.
getJSONArray
(
"recordList"
);
JSONArray
recordList
=
data
.
getJSONArray
(
"recordList"
);
for
(
Object
o
:
recordList
)
{
for
(
Object
o
:
recordList
)
{
JSONObject
object
=
(
JSONObject
)
o
;
JSONObject
object
=
(
JSONObject
)
o
;
String
orgid_code
=
object
.
getString
(
"orgid_code"
);
String
orgid_code
=
object
.
getString
(
"orgid_code"
);
if
(
orgid_code
.
equals
(
mineId
))
{
if
(
orgid_code
.
equals
(
mineId
))
{
code
=
object
.
getString
(
"code"
);
code
=
object
.
getString
(
"code"
);
...
...
ruoyi-wages/src/main/java/com/ruoyi/system/utils/WagesUtils.java
0 → 100644
View file @
163afb19
package
com.ruoyi.system.utils
;
import
com.ruoyi.system.mapper.WagesCompilationMapper
;
import
com.ruoyi.system.mapper.WagesVersionMapper
;
import
com.ruoyi.system.model.wages.dao.WagesCompilationExcelDAO
;
import
com.ruoyi.system.model.wages.dao.WagesVersionDAO
;
import
java.util.List
;
import
java.util.Optional
;
import
java.util.stream.Collectors
;
/**
* 2024/6/13
*/
public
class
WagesUtils
{
private
static
WagesVersionMapper
wagesVersionMapper
;
private
static
WagesCompilationMapper
wagesCompilationMapper
;
public
WagesUtils
(
WagesVersionMapper
wagesVersionMapper
,
WagesCompilationMapper
wagesCompilationMapper
)
{
this
.
wagesVersionMapper
=
wagesVersionMapper
;
this
.
wagesCompilationMapper
=
wagesCompilationMapper
;
}
/**
* 根据矿id和type获取对应的对照表id
* @param mineId
* @param type
* @return
*/
public
static
Integer
getComparisonId
(
String
mineId
,
String
type
)
{
List
<
WagesCompilationExcelDAO
>
wagesCompilationExcelDAO
=
wagesCompilationMapper
.
selectByMineIdAndType
(
mineId
,
type
);
if
(
wagesCompilationExcelDAO
==
null
||
wagesCompilationExcelDAO
.
size
()
==
0
)
{
return
null
;
}
List
<
Integer
>
collect
=
wagesCompilationExcelDAO
.
stream
().
map
(
v
->
v
.
getVersionId
()).
collect
(
Collectors
.
toList
());
List
<
WagesVersionDAO
>
wagesVersionDAO
=
wagesVersionMapper
.
selectByVersionId
();
if
(
wagesVersionDAO
==
null
||
wagesVersionDAO
.
size
()
==
0
)
{
return
null
;
}
Optional
<
WagesVersionDAO
>
first
=
wagesVersionDAO
.
stream
().
filter
(
v
->
collect
.
contains
(
v
.
getVersionId
())
&&
"1"
.
equals
(
v
.
getOpenOrClose
())).
findFirst
();
if
(
first
.
isPresent
())
{
Integer
id
=
first
.
get
().
getVersionId
();
return
wagesCompilationExcelDAO
.
parallelStream
().
filter
(
v
->
id
.
equals
(
v
.
getVersionId
())).
map
(
v
->
v
.
getComparisonId
()).
findFirst
().
get
();
}
return
null
;
}
}
ruoyi-wages/src/main/resources/mapper/system/WagesComparationMapper.xml
View file @
163afb19
...
@@ -193,22 +193,23 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
...
@@ -193,22 +193,23 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</resultMap>
</resultMap>
<sql
id=
"selectWagesComparationVerticalVo"
>
<sql
id=
"selectWagesComparationVerticalVo"
>
select comparison_id, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12,
select comparison_id
a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25,
# , a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12,
a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38,
# a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25,
a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51,
# a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38,
a52, a53, a54, a55, a56, a57, a58, a59, a60, a61, a62, a63, a64,
# a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51,
a65, a66, a67, a68, a69, a70, a71, a72, a73, a74, a75, a76, a77,
# a52, a53, a54, a55, a56, a57, a58, a59, a60, a61, a62, a63, a64,
a78, a79, a80, a81, a82, a83, a84, a85, a86, a87, a88, a89, a90,
# a65, a66, a67, a68, a69, a70, a71, a72, a73, a74, a75, a76, a77,
a91, a92, a93, a94, a95, a96, a97, a98, a99, a100, a101, a102, a103,
# a78, a79, a80, a81, a82, a83, a84, a85, a86, a87, a88, a89, a90,
a104, a105, a106, a107, a108, a109, a110, a111, a112, a113, a114,
# a91, a92, a93, a94, a95, a96, a97, a98, a99, a100, a101, a102, a103,
a115, a116, a117, a118, a119, a120, a121, a122, a123, a124, a125,
# a104, a105, a106, a107, a108, a109, a110, a111, a112, a113, a114,
a126, a127, a128, a129, a130, a131, a132, a133, a134, a135, a136,
# a115, a116, a117, a118, a119, a120, a121, a122, a123, a124, a125,
a137, a138, a139, a140, a141, a142, a143, a144, a145, a146, a147,
# a126, a127, a128, a129, a130, a131, a132, a133, a134, a135, a136,
a148, a149, a150, a151, a152, a153, a154, a155, a156, a157, a158,
# a137, a138, a139, a140, a141, a142, a143, a144, a145, a146, a147,
a159, a160, a161, a162, a163, a164, a165, a166, a167, a168, a169,
# a148, a149, a150, a151, a152, a153, a154, a155, a156, a157, a158,
a170, a171, a172, a173, a174, a175, a176, a177, a178, a179, a180,
# a159, a160, a161, a162, a163, a164, a165, a166, a167, a168, a169,
mine_id, type, version_id from wages_comparation_vertical
# a170, a171, a172, a173, a174, a175, a176, a177, a178, a179, a180
,mine_id, type, version_id from wages_comparation_vertical
</sql>
</sql>
<select
id=
"list"
parameterType=
"com.ruoyi.system.model.wages.dao.WagesCompilationExcelDAO"
resultMap=
"WagesComparationVerticalResult"
>
<select
id=
"list"
parameterType=
"com.ruoyi.system.model.wages.dao.WagesCompilationExcelDAO"
resultMap=
"WagesComparationVerticalResult"
>
...
...
ruoyi-wages/src/main/resources/mapper/system/WagesVersionMapper.xml
View file @
163afb19
...
@@ -15,10 +15,8 @@
...
@@ -15,10 +15,8 @@
<sql
id=
"selectWagesVersionVo"
>
<sql
id=
"selectWagesVersionVo"
>
select version_id, version, open_or_close, begin_time, end_time, create_time from wages_version
select version_id, version, open_or_close, begin_time, end_time, create_time from wages_version
</sql>
</sql>
<select
id=
"selectByVersionId"
resultMap=
"WagesVersionResult"
<select
id=
"selectByVersionId"
resultMap=
"WagesVersionResult"
>
parameterType=
"java.lang.Integer"
>
<include
refid=
"selectWagesVersionVo"
/>
<include
refid=
"selectWagesVersionVo"
/>
where version_id = #{versionId}
</select>
</select>
...
...
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