Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
A
amos-boot-biz
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
项目统一框架
amos-boot-biz
Commits
fae62f79
Commit
fae62f79
authored
Jul 23, 2021
by
chenhao
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
提交维保人员excle导入的功能代码 by 陈浩
没有测试,导出功能还没写
parent
726006bb
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
147 additions
and
54 deletions
+147
-54
IMaintenanceCompanyService.java
...module/common/api/service/IMaintenanceCompanyService.java
+59
-34
MaintenanceCompanyServiceImpl.java
...ommon/biz/service/impl/MaintenanceCompanyServiceImpl.java
+53
-0
ExcelController.java
.../amos/boot/module/jcs/biz/controller/ExcelController.java
+35
-20
No files found.
amos-boot-module/amos-boot-module-api/amos-boot-module-common-api/src/main/java/com/yeejoin/amos/boot/module/common/api/service/IMaintenanceCompanyService.java
View file @
fae62f79
...
@@ -4,10 +4,9 @@ import java.util.List;
...
@@ -4,10 +4,9 @@ import java.util.List;
import
java.util.Map
;
import
java.util.Map
;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
com.yeejoin.amos.boot.module.common.api.dto.MaintenanceCompanyDto
;
import
com.yeejoin.amos.boot.module.common.api.dto.MaintenancePersonExcleDto
;
import
com.yeejoin.amos.boot.module.common.api.dto.MaintenanceDepartmentDto
;
import
com.yeejoin.amos.boot.module.common.api.entity.DynamicFormColumn
;
import
com.yeejoin.amos.boot.module.common.api.dto.MaintenancePersonDto
;
import
com.yeejoin.amos.boot.module.common.api.entity.DynamicFormInstance
;
import
com.yeejoin.amos.boot.module.common.api.dto.OrgMenuDto
;
import
com.yeejoin.amos.boot.module.common.api.entity.MaintenanceCompany
;
import
com.yeejoin.amos.boot.module.common.api.entity.MaintenanceCompany
;
import
com.yeejoin.amos.feign.privilege.model.AgencyUserModel
;
import
com.yeejoin.amos.feign.privilege.model.AgencyUserModel
;
...
@@ -56,7 +55,7 @@ public interface IMaintenanceCompanyService {
...
@@ -56,7 +55,7 @@ public interface IMaintenanceCompanyService {
* @param MaintenanceCompany
* @param MaintenanceCompany
* @return
* @return
*/
*/
public
boolean
saveDepartmentDetail
(
MaintenanceCompany
maintenanceCompany
,
long
sequenceNbr
)
;
public
boolean
saveDepartmentDetail
(
MaintenanceCompany
maintenanceCompany
,
long
sequenceNbr
);
/**
/**
* 检查当前的员工编号是否已经存在
* 检查当前的员工编号是否已经存在
...
@@ -76,7 +75,8 @@ public interface IMaintenanceCompanyService {
...
@@ -76,7 +75,8 @@ public interface IMaintenanceCompanyService {
/**
/**
* 查询分页展示的维保人员/单位/部门列表信息
* 查询分页展示的维保人员/单位/部门列表信息
* @param Map<String, Object>
*
* @param Map<String, Object>
* @param current 页码起始值
* @param current 页码起始值
* @param size 行数
* @param size 行数
* @param informationCard 是否显示维保单位人员信息卡数据项
* @param informationCard 是否显示维保单位人员信息卡数据项
...
@@ -84,53 +84,78 @@ public interface IMaintenanceCompanyService {
...
@@ -84,53 +84,78 @@ public interface IMaintenanceCompanyService {
* @param maintenanceType 类型(COMPANY单位,PERSON人员,DEPARTMENT部门)
* @param maintenanceType 类型(COMPANY单位,PERSON人员,DEPARTMENT部门)
* @return
* @return
*/
*/
IPage
<
Map
<
String
,
Object
>>
getPageMaintenanceList
(
Map
<
String
,
Object
>
paramsMap
);
IPage
<
Map
<
String
,
Object
>>
getPageMaintenanceList
(
Map
<
String
,
Object
>
paramsMap
);
/**根据主键查询对应的信息
/**
* 根据主键查询对应的信息
*
* @param sequenceNbr 主键
* @param sequenceNbr 主键
* @return
* @return
*/
*/
Map
<
String
,
Object
>
findBySequenceNbr
(
Long
sequenceNbr
,
String
maintenanceType
);
Map
<
String
,
Object
>
findBySequenceNbr
(
Long
sequenceNbr
,
String
maintenanceType
);
/**
/**
* 修改维保单位
* 修改维保单位
*
* @param MaintenanceCompany
* @param MaintenanceCompany
* @return
* @return
*/
*/
boolean
updateMaintenanceCompanyDetail
(
MaintenanceCompany
model
,
AgencyUserModel
userInfo
);
boolean
updateMaintenanceCompanyDetail
(
MaintenanceCompany
model
,
AgencyUserModel
userInfo
);
/**
/**
* 修改维保部门
* 修改维保部门
*
* @param MaintenanceCompany
* @param MaintenanceCompany
* @return
* @return
*/
*/
public
boolean
updateMaintenancDepartmentDetail
(
MaintenanceCompany
model
,
AgencyUserModel
userInfo
);
public
boolean
updateMaintenancDepartmentDetail
(
MaintenanceCompany
model
,
AgencyUserModel
userInfo
);
/**
/**
* 修改维保人员
* 修改维保人员
*
* @param MaintenanceCompany
* @param MaintenanceCompany
* @return
* @return
*/
*/
public
boolean
updateMaintenancePersonDetail
(
MaintenanceCompany
model
,
AgencyUserModel
userInfo
);
public
boolean
updateMaintenancePersonDetail
(
MaintenanceCompany
model
,
AgencyUserModel
userInfo
);
/**
* 查询所有的单位-部门树
/**
* @return
* 查询所有的单位-部门树
*/
*
* @return
*/
public
List
<
MaintenanceCompany
>
getCompanyAndDepartmentTree
();
public
List
<
MaintenanceCompany
>
getCompanyAndDepartmentTree
();
/**
* 查询制定公司的部门-人树
/**
* @param sequenceNbr
* 查询制定公司的部门-人树
* @return
*
*/
* @param sequenceNbr
* @return
*/
public
List
<
MaintenanceCompany
>
getDepartmentAndPersonTree
(
long
sequenceNbr
);
public
List
<
MaintenanceCompany
>
getDepartmentAndPersonTree
(
long
sequenceNbr
);
/**
* 查询当前单位下所有的部门基本信息--下拉列表
/**
* @param sequenceNbr
* 查询当前单位下所有的部门基本信息--下拉列表
* @return
*
*/
* @param sequenceNbr
* @return
*/
public
List
<
MaintenanceCompany
>
getDepartmentList
(
long
sequenceNbr
);
public
List
<
MaintenanceCompany
>
getDepartmentList
(
long
sequenceNbr
);
/**
* 维保单位人员EXCLE导入时entity的转换方法
*
* @param MaintenancePersonExcleDto
* @param List<DynamicFormColumn>
* @return MaintenanceCompany
*/
List
<
DynamicFormInstance
>
maintenancePersonExcleDtoToDynamicFormInstanceList
(
List
<
DynamicFormColumn
>
columns
,
MaintenancePersonExcleDto
maintenancePersonExcleDto
,
long
instanceId
,
List
<
DynamicFormInstance
>
list
);
/**
* 维保单位人员EXCLE导入时分別往动态表单和维保单位主表中插入数据
* @param companyList
* @param list
* @return
*/
public
boolean
saveMaintenanceCompanyBatch
(
List
<
MaintenanceCompany
>
companyList
,
List
<
DynamicFormInstance
>
list
);
}
}
amos-boot-module/amos-boot-module-biz/amos-boot-module-common-biz/src/main/java/com/yeejoin/amos/boot/module/common/biz/service/impl/MaintenanceCompanyServiceImpl.java
View file @
fae62f79
...
@@ -16,6 +16,7 @@ import org.springframework.beans.factory.annotation.Autowired;
...
@@ -16,6 +16,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.util.ObjectUtils
;
import
org.springframework.util.ObjectUtils
;
import
org.typroject.tyboot.core.foundation.context.RequestContext
;
import
org.typroject.tyboot.core.foundation.utils.Bean
;
import
org.typroject.tyboot.core.foundation.utils.Bean
;
import
org.typroject.tyboot.core.foundation.utils.ValidationUtil
;
import
org.typroject.tyboot.core.foundation.utils.ValidationUtil
;
import
org.typroject.tyboot.core.rdbms.service.BaseService
;
import
org.typroject.tyboot.core.rdbms.service.BaseService
;
...
@@ -26,7 +27,9 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
...
@@ -26,7 +27,9 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import
com.baomidou.mybatisplus.core.toolkit.Sequence
;
import
com.baomidou.mybatisplus.core.toolkit.Sequence
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
com.yeejoin.amos.boot.module.common.api.dto.MaintenanceCompanyDto
;
import
com.yeejoin.amos.boot.module.common.api.dto.MaintenanceCompanyDto
;
import
com.yeejoin.amos.boot.module.common.api.dto.MaintenancePersonExcleDto
;
import
com.yeejoin.amos.boot.module.common.api.dto.OrgUsrDto
;
import
com.yeejoin.amos.boot.module.common.api.dto.OrgUsrDto
;
import
com.yeejoin.amos.boot.module.common.api.entity.DynamicFormColumn
;
import
com.yeejoin.amos.boot.module.common.api.entity.DynamicFormInstance
;
import
com.yeejoin.amos.boot.module.common.api.entity.DynamicFormInstance
;
import
com.yeejoin.amos.boot.module.common.api.entity.MaintenanceCompany
;
import
com.yeejoin.amos.boot.module.common.api.entity.MaintenanceCompany
;
import
com.yeejoin.amos.boot.module.common.api.enums.OrgPersonEnum
;
import
com.yeejoin.amos.boot.module.common.api.enums.OrgPersonEnum
;
...
@@ -632,4 +635,53 @@ public class MaintenanceCompanyServiceImpl
...
@@ -632,4 +635,53 @@ public class MaintenanceCompanyServiceImpl
resultMap
.
put
(
key
,
paramsMap
.
get
(
key
)
!=
null
?
paramsMap
.
get
(
key
)
:
""
);
resultMap
.
put
(
key
,
paramsMap
.
get
(
key
)
!=
null
?
paramsMap
.
get
(
key
)
:
""
);
}
}
}
}
@Override
public
List
<
DynamicFormInstance
>
maintenancePersonExcleDtoToDynamicFormInstanceList
(
List
<
DynamicFormColumn
>
columns
,
MaintenancePersonExcleDto
maintenancePersonExcleDto
,
long
instanceId
,
List
<
DynamicFormInstance
>
list
)
{
Map
<
String
,
Object
>
maintenancePersonExcleDtoMap
=
Bean
.
BeantoMap
(
maintenancePersonExcleDto
);
// 填充动态表单的属性
for
(
Entry
<
String
,
Object
>
mapDetail
:
maintenancePersonExcleDtoMap
.
entrySet
())
{
DynamicFormInstance
dynamicFormInstance
=
new
DynamicFormInstance
();
columns
.
stream
().
forEach
(
item
->
{
if
(
mapDetail
.
getKey
().
equals
(
item
.
getFieldCode
()))
{
Bean
.
copyExistPropertis
(
item
,
dynamicFormInstance
);
dynamicFormInstance
.
setAppKey
(
RequestContext
.
getAppKey
());
dynamicFormInstance
.
setInstanceId
(
instanceId
);
dynamicFormInstance
.
setSequenceNbr
(
sequence
.
nextId
());
dynamicFormInstance
.
setFormColumnId
(
item
.
getSequenceNbr
());
dynamicFormInstance
.
setFieldValue
(
maintenancePersonExcleDtoMap
.
get
(
item
.
getFieldCode
())
!=
null
?
maintenancePersonExcleDtoMap
.
get
(
item
.
getFieldCode
()).
toString
()
:
""
);
if
(
mapDetail
.
getValue
().
toString
().
contains
(
"@"
))
{
String
[]
mapDetailArray
=
mapDetail
.
getValue
().
toString
().
split
(
"@"
);
dynamicFormInstance
.
setFieldValue
(
mapDetailArray
[
0
]);
if
(
mapDetailArray
.
length
>
1
)
{
dynamicFormInstance
.
setFieldValueLabel
(
mapDetailArray
[
1
]);
}
}
}
});
if
(
dynamicFormInstance
!=
null
&&
dynamicFormInstance
.
getSequenceNbr
().
longValue
()
>
0
)
{
list
.
add
(
dynamicFormInstance
);
}
}
return
list
;
}
public
boolean
saveDynamicFormInstanceBatch
(
List
<
DynamicFormInstance
>
list
)
{
dynamicFormInstanceService
.
saveBatch
(
list
);
return
false
;
}
@Transactional
public
boolean
saveMaintenanceCompanyBatch
(
List
<
MaintenanceCompany
>
companyList
,
List
<
DynamicFormInstance
>
list
)
{
saveDynamicFormInstanceBatch
(
list
);
this
.
saveBatch
(
companyList
);
return
false
;
}
}
}
\ No newline at end of file
amos-boot-module/amos-boot-module-biz/amos-boot-module-jcs-biz/src/main/java/com/yeejoin/amos/boot/module/jcs/biz/controller/ExcelController.java
View file @
fae62f79
...
@@ -33,6 +33,8 @@ import org.typroject.tyboot.core.foundation.utils.ValidationUtil;
...
@@ -33,6 +33,8 @@ import org.typroject.tyboot.core.foundation.utils.ValidationUtil;
import
org.typroject.tyboot.core.restful.doc.TycloudOperation
;
import
org.typroject.tyboot.core.restful.doc.TycloudOperation
;
import
com.alibaba.excel.support.ExcelTypeEnum
;
import
com.alibaba.excel.support.ExcelTypeEnum
;
import
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper
;
import
com.baomidou.mybatisplus.core.toolkit.Sequence
;
import
com.google.common.collect.Lists
;
import
com.google.common.collect.Lists
;
import
com.yeejoin.amos.boot.biz.common.controller.BaseController
;
import
com.yeejoin.amos.boot.biz.common.controller.BaseController
;
import
com.yeejoin.amos.boot.biz.common.feign.AmosFeignService
;
import
com.yeejoin.amos.boot.biz.common.feign.AmosFeignService
;
...
@@ -50,10 +52,10 @@ import com.yeejoin.amos.boot.module.common.api.dto.FireTeamDto;
...
@@ -50,10 +52,10 @@ import com.yeejoin.amos.boot.module.common.api.dto.FireTeamDto;
import
com.yeejoin.amos.boot.module.common.api.dto.FirefightersDto
;
import
com.yeejoin.amos.boot.module.common.api.dto.FirefightersDto
;
import
com.yeejoin.amos.boot.module.common.api.dto.FirefightersExcelDto
;
import
com.yeejoin.amos.boot.module.common.api.dto.FirefightersExcelDto
;
import
com.yeejoin.amos.boot.module.common.api.dto.FirefightersInfoDto
;
import
com.yeejoin.amos.boot.module.common.api.dto.FirefightersInfoDto
;
import
com.yeejoin.amos.boot.module.common.api.dto.MaintenancePersonDto
;
import
com.yeejoin.amos.boot.module.common.api.dto.MaintenancePersonExcleDto
;
import
com.yeejoin.amos.boot.module.common.api.dto.MaintenancePersonExcleDto
;
import
com.yeejoin.amos.boot.module.common.api.dto.OrgUsrDto
;
import
com.yeejoin.amos.boot.module.common.api.dto.OrgUsrDto
;
import
com.yeejoin.amos.boot.module.common.api.dto.WaterResourceDto
;
import
com.yeejoin.amos.boot.module.common.api.dto.WaterResourceDto
;
import
com.yeejoin.amos.boot.module.common.api.entity.DynamicFormColumn
;
import
com.yeejoin.amos.boot.module.common.api.entity.DynamicFormInstance
;
import
com.yeejoin.amos.boot.module.common.api.entity.DynamicFormInstance
;
import
com.yeejoin.amos.boot.module.common.api.entity.FireChemical
;
import
com.yeejoin.amos.boot.module.common.api.entity.FireChemical
;
import
com.yeejoin.amos.boot.module.common.api.entity.FireExperts
;
import
com.yeejoin.amos.boot.module.common.api.entity.FireExperts
;
...
@@ -70,6 +72,7 @@ import com.yeejoin.amos.boot.module.common.biz.service.impl.DutyCommonServiceImp
...
@@ -70,6 +72,7 @@ import com.yeejoin.amos.boot.module.common.biz.service.impl.DutyCommonServiceImp
import
com.yeejoin.amos.boot.module.common.biz.service.impl.DutyPersonServiceImpl
;
import
com.yeejoin.amos.boot.module.common.biz.service.impl.DutyPersonServiceImpl
;
import
com.yeejoin.amos.boot.module.common.biz.service.impl.DutyPersonShiftServiceImpl
;
import
com.yeejoin.amos.boot.module.common.biz.service.impl.DutyPersonShiftServiceImpl
;
import
com.yeejoin.amos.boot.module.common.biz.service.impl.DutyShiftServiceImpl
;
import
com.yeejoin.amos.boot.module.common.biz.service.impl.DutyShiftServiceImpl
;
import
com.yeejoin.amos.boot.module.common.biz.service.impl.DynamicFormColumnServiceImpl
;
import
com.yeejoin.amos.boot.module.common.biz.service.impl.FireChemicalServiceImpl
;
import
com.yeejoin.amos.boot.module.common.biz.service.impl.FireChemicalServiceImpl
;
import
com.yeejoin.amos.boot.module.common.biz.service.impl.FireExpertsServiceImpl
;
import
com.yeejoin.amos.boot.module.common.biz.service.impl.FireExpertsServiceImpl
;
import
com.yeejoin.amos.boot.module.common.biz.service.impl.FireStationServiceImpl
;
import
com.yeejoin.amos.boot.module.common.biz.service.impl.FireStationServiceImpl
;
...
@@ -135,9 +138,17 @@ public class ExcelController extends BaseController {
...
@@ -135,9 +138,17 @@ public class ExcelController extends BaseController {
@Autowired
@Autowired
IMaintenanceCompanyService
maintenanceCompanyService
;
IMaintenanceCompanyService
maintenanceCompanyService
;
@Autowired
DynamicFormColumnServiceImpl
dynamicFormColumnService
;
@Autowired
Sequence
sequence
;
private
static
final
String
NOT_DUTY
=
"休班"
;
private
static
final
String
NOT_DUTY
=
"休班"
;
private
static
final
String
PERSON
=
"PERSON"
;
private
static
final
String
PERSON
=
"PERSON"
;
private
static
final
String
MAINTENANCE_PERSON
=
"maintenancePerson"
;
@TycloudOperation
(
needAuth
=
false
,
ApiLevel
=
UserType
.
AGENCY
)
@TycloudOperation
(
needAuth
=
false
,
ApiLevel
=
UserType
.
AGENCY
)
...
@@ -254,25 +265,29 @@ public class ExcelController extends BaseController {
...
@@ -254,25 +265,29 @@ public class ExcelController extends BaseController {
private
void
excelImportMaintenancePerson
(
MultipartFile
multipartFile
,
String
wbry
)
throws
Exception
{
private
void
excelImportMaintenancePerson
(
MultipartFile
multipartFile
,
String
wbry
)
throws
Exception
{
List
<
MaintenancePersonExcleDto
>
excelDtoList
=
ExcelUtil
.
readFirstSheetExcel
(
multipartFile
,
List
<
MaintenancePersonExcleDto
>
excelDtoList
=
ExcelUtil
.
readFirstSheetExcel
(
multipartFile
,
MaintenancePersonExcleDto
.
class
,
1
);
MaintenancePersonExcleDto
.
class
,
1
);
excelDtoList
.
forEach
(
List
<
DynamicFormColumn
>
columns
=
dynamicFormColumnService
.
list
(
new
LambdaQueryWrapper
<
DynamicFormColumn
>().
eq
(
DynamicFormColumn:
:
getGroupCode
,
MAINTENANCE_PERSON
));
item
->
{
List
<
MaintenanceCompany
>
maintenanceCompanyList
=
new
ArrayList
<
MaintenanceCompany
>();
MaintenanceCompany
maintenancePersonDto
=
new
MaintenanceCompany
();
List
<
DynamicFormInstance
>
dynamicFormInstanceList
=
new
ArrayList
<
DynamicFormInstance
>();
List
<
DynamicFormInstance
>
dynamicFormValueList
=
new
ArrayList
<
DynamicFormInstance
>();
for
(
MaintenancePersonExcleDto
maintenancePersonExcleDto
:
excelDtoList
)
{
Long
instanceId
=
sequence
.
nextId
();
maintenancePersonDto
=
Bean
.
toPo
(
item
,
maintenancePersonDto
);
// 先填充主表的属性
maintenancePersonDto
.
setType
(
PERSON
);
MaintenanceCompany
maintenanceCompany
=
new
MaintenanceCompany
();
if
(
maintenancePersonDto
.
getParentId
()
!=
null
)
{
maintenanceCompany
=
Bean
.
toPo
(
maintenancePersonExcleDto
,
maintenanceCompany
);
Long
getParentId
=
Long
.
valueOf
(
item
.
getParentId
().
split
(
"@"
)[
1
]);
maintenanceCompany
.
setType
(
PERSON
);
maintenancePersonDto
.
setParentId
(
getParentId
);
if
(
maintenanceCompany
.
getParentId
()
!=
null
)
{
}
long
getParentId
=
Long
.
valueOf
(
maintenancePersonExcleDto
.
getParentId
().
split
(
"@"
)[
1
]);
if
(
maintenanceCompanyService
.
checkPersonCodeExists
(
item
.
getCode
()))
{
maintenanceCompany
.
setParentId
(
getParentId
);
maintenancePersonDto
.
setCode
(
item
.
getCode
());
}
}
else
{
if
(
maintenanceCompanyService
.
checkPersonCodeExists
(
maintenancePersonExcleDto
.
getCode
()))
{
maintenancePersonDto
.
setCode
(
null
);
maintenanceCompany
.
setCode
(
maintenancePersonExcleDto
.
getCode
());
}
}
else
{
maintenanceCompanyService
.
savePersonDetail
(
maintenancePersonDto
,
maintenancePersonDto
.
getParentId
());
maintenanceCompany
.
setCode
(
null
);
}
}
);
maintenanceCompany
.
setInstanceId
(
instanceId
);
maintenanceCompanyList
.
add
(
maintenanceCompany
);
maintenanceCompanyService
.
maintenancePersonExcleDtoToDynamicFormInstanceList
(
columns
,
maintenancePersonExcleDto
,
instanceId
,
dynamicFormInstanceList
);
}
maintenanceCompanyService
.
saveMaintenanceCompanyBatch
(
maintenanceCompanyList
,
dynamicFormInstanceList
);
}
}
private
void
excelImportDutyPerson
(
MultipartFile
multipartFile
,
String
dutyType
)
throws
Exception
{
private
void
excelImportDutyPerson
(
MultipartFile
multipartFile
,
String
dutyType
)
throws
Exception
{
...
...
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