Commit 416c5759 authored by wujiang's avatar wujiang

修改装备详情

parent a8f72c8c
...@@ -11,4 +11,4 @@ redis.cache.failure.time=10800 ...@@ -11,4 +11,4 @@ redis.cache.failure.time=10800
# mybatis-plus # mybatis-plus
mybatis-plus.mapper-locations=classpath:mapper/*Mapper.xml mybatis-plus.mapper-locations=classpath:mapper/*Mapper.xml
mybatis-plus.type-aliases-super-type=org.typroject.tyboot.core.rdbms.orm.entity.BaseEntity mybatis-plus.type-aliases-super-type=org.typroject.tyboot.core.rdbms.orm.entity.BaseEntity
mybatis-plus.global-config.db-config.id-type=id_worker mybatis-plus.global-config.db-config.id-type=ID_WORKER
package com.yeejoin.amos.boot.module.tzs.api.dto; package com.yeejoin.amos.boot.module.tzs.api.dto;
import java.util.List;
import com.yeejoin.amos.boot.biz.common.dto.BaseDto; import com.yeejoin.amos.boot.biz.common.dto.BaseDto;
import com.yeejoin.amos.boot.module.tzs.api.entity.TzsJgConstructionInfo; import com.yeejoin.amos.boot.module.tzs.api.entity.TzsJgConstructionInfo;
import com.yeejoin.amos.boot.module.tzs.api.entity.TzsJgDesignInfo; import com.yeejoin.amos.boot.module.tzs.api.entity.TzsJgDesignInfo;
...@@ -83,15 +85,23 @@ public class TzsJgBasicInfoDto extends BaseDto { ...@@ -83,15 +85,23 @@ public class TzsJgBasicInfoDto extends BaseDto {
@ApiModelProperty(value = "施工信息-最新一次") @ApiModelProperty(value = "施工信息-最新一次")
private TzsJgConstructionInfoDto constructionInfo; private TzsJgConstructionInfoDto constructionInfo;
@ApiModelProperty(value = "施工信息列表")
private List<TzsJgConstructionInfoDto> constructionInfoList;
@ApiModelProperty(value = "维保信息") @ApiModelProperty(value = "维保信息")
private TzsJgMaintenanceInfoDto maintenanceInfo; private TzsJgMaintenanceInfoDto maintenanceInfo;
@ApiModelProperty(value = "维保信息列表")
private List<TzsJgMaintenanceInfoDto> maintenanceInfoList;
@ApiModelProperty(value = "技术信息") @ApiModelProperty(value = "技术信息")
private TzsJgElevatorTechInfoDto elevatorTechInfo; private TzsJgElevatorTechInfoDto elevatorTechInfo;
@ApiModelProperty(value = "检验信息") @ApiModelProperty(value = "检验信息")
private TzsJgInspectionInfoDto inspectionInfo; private TzsJgInspectionInfoDto inspectionInfo;
@ApiModelProperty(value = "检验信息列表")
private List<TzsJgInspectionInfoDto> inspectionInfoList;
@ApiModelProperty(value = "其他信息") @ApiModelProperty(value = "其他信息")
private TzsJgOtherInfoDto otherInfo; private TzsJgOtherInfoDto otherInfo;
......
...@@ -51,4 +51,5 @@ public class TzsJgFile extends BaseEntity { ...@@ -51,4 +51,5 @@ public class TzsJgFile extends BaseEntity {
@ApiModelProperty(value = "对接公司编码") @ApiModelProperty(value = "对接公司编码")
private String appId; private String appId;
private Long squNbr;
} }
...@@ -10,7 +10,7 @@ package com.yeejoin.amos.boot.module.tzs.api.enums; ...@@ -10,7 +10,7 @@ package com.yeejoin.amos.boot.module.tzs.api.enums;
public enum JgFileObjectEnum { public enum JgFileObjectEnum {
DESIGN_INFO("designInf"), DESIGN_INFO("designInfo"),
PRODUCE_INFO("produceInfo"), PRODUCE_INFO("produceInfo"),
REGISTRATION_INFO("registrationInfo"), REGISTRATION_INFO("registrationInfo"),
MAINTENANCE_INFO("maintenanceInfo"), MAINTENANCE_INFO("maintenanceInfo"),
......
package com.yeejoin.amos.boot.module.tzs.biz.service.impl; package com.yeejoin.amos.boot.module.tzs.biz.service.impl;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
...@@ -115,12 +116,12 @@ public class TzsJgServiceImpl implements ITzsJgService { ...@@ -115,12 +116,12 @@ public class TzsJgServiceImpl implements ITzsJgService {
if (designInfo != null) { if (designInfo != null) {
BeanUtils.copyProperties(designInfo, designInfoDto); BeanUtils.copyProperties(designInfo, designInfoDto);
List<TzsJgFile> designFile = iTzsJgFileService List<TzsJgFile> designFile = iTzsJgFileService
.list(new LambdaQueryWrapper<TzsJgFile>().eq(TzsJgFile::getSequenceCode, code) .list(new LambdaQueryWrapper<TzsJgFile>().eq(TzsJgFile::getSquNbr, designInfo.getSequenceNbr())
.eq(TzsJgFile::getObjectType, JgFileObjectEnum.DESIGN_INFO.getObject()) .eq(TzsJgFile::getObjectType, JgFileObjectEnum.DESIGN_INFO.getObject())
.eq(TzsJgFile::getAttributeType, JgFileAttributeEnum.DESIGN_FILE.getAttribute())); .eq(TzsJgFile::getAttributeType, JgFileAttributeEnum.DESIGN_FILE.getAttribute()));
designFile.forEach(i -> i.setFileUrl(fileServerUrl + i.getFileUrl())); designFile.forEach(i -> i.setFileUrl(fileServerUrl + i.getFileUrl()));
List<TzsJgFile> designCode = iTzsJgFileService List<TzsJgFile> designCode = iTzsJgFileService
.list(new LambdaQueryWrapper<TzsJgFile>().eq(TzsJgFile::getSequenceCode, code) .list(new LambdaQueryWrapper<TzsJgFile>().eq(TzsJgFile::getSquNbr, designInfo.getSequenceNbr())
.eq(TzsJgFile::getObjectType, JgFileObjectEnum.DESIGN_INFO.getObject()) .eq(TzsJgFile::getObjectType, JgFileObjectEnum.DESIGN_INFO.getObject())
.eq(TzsJgFile::getAttributeType, JgFileAttributeEnum.DESIGN_CODE.getAttribute())); .eq(TzsJgFile::getAttributeType, JgFileAttributeEnum.DESIGN_CODE.getAttribute()));
designCode.forEach(i -> i.setFileUrl(fileServerUrl + i.getFileUrl())); designCode.forEach(i -> i.setFileUrl(fileServerUrl + i.getFileUrl()));
...@@ -133,23 +134,23 @@ public class TzsJgServiceImpl implements ITzsJgService { ...@@ -133,23 +134,23 @@ public class TzsJgServiceImpl implements ITzsJgService {
if (produceInfo != null) { if (produceInfo != null) {
BeanUtils.copyProperties(produceInfo, produceInfoDto); BeanUtils.copyProperties(produceInfo, produceInfoDto);
List<TzsJgFile> produceStandard = iTzsJgFileService List<TzsJgFile> produceStandard = iTzsJgFileService
.list(new LambdaQueryWrapper<TzsJgFile>().eq(TzsJgFile::getSequenceCode, code) .list(new LambdaQueryWrapper<TzsJgFile>().eq(TzsJgFile::getSquNbr, produceInfo.getSequenceNbr())
.eq(TzsJgFile::getObjectType, JgFileObjectEnum.PRODUCE_INFO.getObject()) .eq(TzsJgFile::getObjectType, JgFileObjectEnum.PRODUCE_INFO.getObject())
.eq(TzsJgFile::getAttributeType, JgFileAttributeEnum.PRODUCE_STANDARD.getAttribute())); .eq(TzsJgFile::getAttributeType, JgFileAttributeEnum.PRODUCE_STANDARD.getAttribute()));
List<TzsJgFile> productCertificate = iTzsJgFileService List<TzsJgFile> productCertificate = iTzsJgFileService
.list(new LambdaQueryWrapper<TzsJgFile>().eq(TzsJgFile::getSequenceCode, code) .list(new LambdaQueryWrapper<TzsJgFile>().eq(TzsJgFile::getSquNbr, produceInfo.getSequenceNbr())
.eq(TzsJgFile::getObjectType, JgFileObjectEnum.PRODUCE_INFO.getObject()) .eq(TzsJgFile::getObjectType, JgFileObjectEnum.PRODUCE_INFO.getObject())
.eq(TzsJgFile::getAttributeType, JgFileAttributeEnum.PRODUCT_CERTIFICATE.getAttribute())); .eq(TzsJgFile::getAttributeType, JgFileAttributeEnum.PRODUCT_CERTIFICATE.getAttribute()));
List<TzsJgFile> iumInstructions = iTzsJgFileService List<TzsJgFile> iumInstructions = iTzsJgFileService
.list(new LambdaQueryWrapper<TzsJgFile>().eq(TzsJgFile::getSequenceCode, code) .list(new LambdaQueryWrapper<TzsJgFile>().eq(TzsJgFile::getSquNbr, produceInfo.getSequenceNbr())
.eq(TzsJgFile::getObjectType, JgFileObjectEnum.PRODUCE_INFO.getObject()) .eq(TzsJgFile::getObjectType, JgFileObjectEnum.PRODUCE_INFO.getObject())
.eq(TzsJgFile::getAttributeType, JgFileAttributeEnum.IUM_INSTRUCTIONS.getAttribute())); .eq(TzsJgFile::getAttributeType, JgFileAttributeEnum.IUM_INSTRUCTIONS.getAttribute()));
List<TzsJgFile> supervisionCert = iTzsJgFileService List<TzsJgFile> supervisionCert = iTzsJgFileService
.list(new LambdaQueryWrapper<TzsJgFile>().eq(TzsJgFile::getSequenceCode, code) .list(new LambdaQueryWrapper<TzsJgFile>().eq(TzsJgFile::getSquNbr, produceInfo.getSequenceNbr())
.eq(TzsJgFile::getObjectType, JgFileObjectEnum.PRODUCE_INFO.getObject()) .eq(TzsJgFile::getObjectType, JgFileObjectEnum.PRODUCE_INFO.getObject())
.eq(TzsJgFile::getAttributeType, JgFileAttributeEnum.SUPERVISION_CERT.getAttribute())); .eq(TzsJgFile::getAttributeType, JgFileAttributeEnum.SUPERVISION_CERT.getAttribute()));
List<TzsJgFile> ceCert = iTzsJgFileService List<TzsJgFile> ceCert = iTzsJgFileService
.list(new LambdaQueryWrapper<TzsJgFile>().eq(TzsJgFile::getSequenceCode, code) .list(new LambdaQueryWrapper<TzsJgFile>().eq(TzsJgFile::getSquNbr, produceInfo.getSequenceNbr())
.eq(TzsJgFile::getObjectType, JgFileObjectEnum.PRODUCE_INFO.getObject()) .eq(TzsJgFile::getObjectType, JgFileObjectEnum.PRODUCE_INFO.getObject())
.eq(TzsJgFile::getAttributeType, JgFileAttributeEnum.CE_CERT.getAttribute())); .eq(TzsJgFile::getAttributeType, JgFileAttributeEnum.CE_CERT.getAttribute()));
produceStandard.forEach(i -> i.setFileUrl(fileServerUrl + i.getFileUrl())); produceStandard.forEach(i -> i.setFileUrl(fileServerUrl + i.getFileUrl()));
...@@ -169,7 +170,7 @@ public class TzsJgServiceImpl implements ITzsJgService { ...@@ -169,7 +170,7 @@ public class TzsJgServiceImpl implements ITzsJgService {
if (registrationInfo != null) { if (registrationInfo != null) {
BeanUtils.copyProperties(registrationInfo, registrationInfoDto); BeanUtils.copyProperties(registrationInfo, registrationInfoDto);
List<TzsJgFile> useRegistCertificate = iTzsJgFileService.list(new LambdaQueryWrapper<TzsJgFile>() List<TzsJgFile> useRegistCertificate = iTzsJgFileService.list(new LambdaQueryWrapper<TzsJgFile>()
.eq(TzsJgFile::getSequenceCode, code) .eq(TzsJgFile::getSquNbr, registrationInfo.getSequenceNbr())
.eq(TzsJgFile::getObjectType, JgFileObjectEnum.REGISTRATION_INFO.getObject()) .eq(TzsJgFile::getObjectType, JgFileObjectEnum.REGISTRATION_INFO.getObject())
.eq(TzsJgFile::getAttributeType, JgFileAttributeEnum.USE_REGIST_CERTIFICATE.getAttribute())); .eq(TzsJgFile::getAttributeType, JgFileAttributeEnum.USE_REGIST_CERTIFICATE.getAttribute()));
useRegistCertificate.forEach(i -> i.setFileUrl(fileServerUrl + i.getFileUrl())); useRegistCertificate.forEach(i -> i.setFileUrl(fileServerUrl + i.getFileUrl()));
...@@ -188,6 +189,18 @@ public class TzsJgServiceImpl implements ITzsJgService { ...@@ -188,6 +189,18 @@ public class TzsJgServiceImpl implements ITzsJgService {
if (constructionInfo != null) { if (constructionInfo != null) {
BeanUtils.copyProperties(constructionInfo, constructionInfoDto); BeanUtils.copyProperties(constructionInfo, constructionInfoDto);
} }
List<TzsJgConstructionInfo> constructionInfoList = iTzsJgConstructionInfoService
.list(new LambdaQueryWrapper<TzsJgConstructionInfo>().eq(TzsJgConstructionInfo::getSequenceCode, code));
List<TzsJgConstructionInfoDto> constructionInfoDtoList = new ArrayList<>();
if (!constructionInfoList.isEmpty()) {
for (TzsJgConstructionInfo constructionInfoOne : constructionInfoList) {
TzsJgConstructionInfoDto constructionInfoDtoOne = new TzsJgConstructionInfoDto();
BeanUtils.copyProperties(constructionInfoOne, constructionInfoDtoOne);
constructionInfoDtoList.add(constructionInfoDtoOne);
}
}
TzsJgMaintenanceInfo maintenanceInfo = iTzsJgMaintenanceInfoService TzsJgMaintenanceInfo maintenanceInfo = iTzsJgMaintenanceInfoService
.getOne(new LambdaQueryWrapper<TzsJgMaintenanceInfo>().eq(TzsJgMaintenanceInfo::getSequenceCode, code) .getOne(new LambdaQueryWrapper<TzsJgMaintenanceInfo>().eq(TzsJgMaintenanceInfo::getSequenceCode, code)
.orderByDesc(TzsJgMaintenanceInfo::getRecDate).last("limit 1")); .orderByDesc(TzsJgMaintenanceInfo::getRecDate).last("limit 1"));
...@@ -195,12 +208,30 @@ public class TzsJgServiceImpl implements ITzsJgService { ...@@ -195,12 +208,30 @@ public class TzsJgServiceImpl implements ITzsJgService {
if (maintenanceInfo != null) { if (maintenanceInfo != null) {
BeanUtils.copyProperties(maintenanceInfo, maintenanceInfoDto); BeanUtils.copyProperties(maintenanceInfo, maintenanceInfoDto);
List<TzsJgFile> repairInform = iTzsJgFileService List<TzsJgFile> repairInform = iTzsJgFileService
.list(new LambdaQueryWrapper<TzsJgFile>().eq(TzsJgFile::getSequenceCode, code) .list(new LambdaQueryWrapper<TzsJgFile>().eq(TzsJgFile::getSquNbr, maintenanceInfo.getSequenceNbr())
.eq(TzsJgFile::getObjectType, JgFileObjectEnum.MAINTENANCE_INFO.getObject()) .eq(TzsJgFile::getObjectType, JgFileObjectEnum.MAINTENANCE_INFO.getObject())
.eq(TzsJgFile::getAttributeType, JgFileAttributeEnum.REPAIR_INFORM.getAttribute())); .eq(TzsJgFile::getAttributeType, JgFileAttributeEnum.REPAIR_INFORM.getAttribute()));
repairInform.forEach(i -> i.setFileUrl(fileServerUrl + i.getFileUrl())); repairInform.forEach(i -> i.setFileUrl(fileServerUrl + i.getFileUrl()));
maintenanceInfoDto.setRepairInform(repairInform); maintenanceInfoDto.setRepairInform(repairInform);
} }
List<TzsJgMaintenanceInfo> maintenanceInfoList = iTzsJgMaintenanceInfoService
.list(new LambdaQueryWrapper<TzsJgMaintenanceInfo>().eq(TzsJgMaintenanceInfo::getSequenceCode, code));
List<TzsJgMaintenanceInfoDto> maintenanceInfoDtoList = new ArrayList<>();
if (!maintenanceInfoList.isEmpty()) {
for (TzsJgMaintenanceInfo maintenanceInfoOne : maintenanceInfoList) {
TzsJgMaintenanceInfoDto maintenanceInfoDtoOne = new TzsJgMaintenanceInfoDto();
BeanUtils.copyProperties(maintenanceInfoOne, maintenanceInfoDtoOne);
List<TzsJgFile> repairInform = iTzsJgFileService.list(new LambdaQueryWrapper<TzsJgFile>()
.eq(TzsJgFile::getSquNbr, maintenanceInfoOne.getSequenceNbr())
.eq(TzsJgFile::getObjectType, JgFileObjectEnum.MAINTENANCE_INFO.getObject())
.eq(TzsJgFile::getAttributeType, JgFileAttributeEnum.REPAIR_INFORM.getAttribute()));
repairInform.forEach(e -> e.setFileUrl(fileServerUrl + e.getFileUrl()));
maintenanceInfoDtoOne.setRepairInform(repairInform);
maintenanceInfoDtoList.add(maintenanceInfoDtoOne);
}
}
TzsJgInspectionInfo inspectionInfo = iTzsJgInspectionInfoService TzsJgInspectionInfo inspectionInfo = iTzsJgInspectionInfoService
.getOne(new LambdaQueryWrapper<TzsJgInspectionInfo>().eq(TzsJgInspectionInfo::getSequenceCode, code) .getOne(new LambdaQueryWrapper<TzsJgInspectionInfo>().eq(TzsJgInspectionInfo::getSequenceCode, code)
.orderByDesc(TzsJgInspectionInfo::getRecDate).last("limit 1")); .orderByDesc(TzsJgInspectionInfo::getRecDate).last("limit 1"));
...@@ -208,12 +239,32 @@ public class TzsJgServiceImpl implements ITzsJgService { ...@@ -208,12 +239,32 @@ public class TzsJgServiceImpl implements ITzsJgService {
if (inspectionInfo != null) { if (inspectionInfo != null) {
BeanUtils.copyProperties(inspectionInfo, inspectionInfoDto); BeanUtils.copyProperties(inspectionInfo, inspectionInfoDto);
List<TzsJgFile> inspectionReport = iTzsJgFileService List<TzsJgFile> inspectionReport = iTzsJgFileService
.list(new LambdaQueryWrapper<TzsJgFile>().eq(TzsJgFile::getSequenceCode, code) .list(new LambdaQueryWrapper<TzsJgFile>().eq(TzsJgFile::getSquNbr, inspectionInfo.getSequenceNbr())
.eq(TzsJgFile::getObjectType, JgFileObjectEnum.INSPECTION_INFO.getObject()) .eq(TzsJgFile::getObjectType, JgFileObjectEnum.INSPECTION_INFO.getObject())
.eq(TzsJgFile::getAttributeType, JgFileAttributeEnum.INSPECTION_REPORT.getAttribute())); .eq(TzsJgFile::getAttributeType, JgFileAttributeEnum.INSPECTION_REPORT.getAttribute()));
inspectionReport.forEach(i -> i.setFileUrl(fileServerUrl + i.getFileUrl())); inspectionReport.forEach(i -> i.setFileUrl(fileServerUrl + i.getFileUrl()));
inspectionInfoDto.setInspectionReport(inspectionReport); inspectionInfoDto.setInspectionReport(inspectionReport);
} }
List<TzsJgInspectionInfo> inspectionInfoList = iTzsJgInspectionInfoService
.list(new LambdaQueryWrapper<TzsJgInspectionInfo>().eq(TzsJgInspectionInfo::getSequenceCode, code));
List<TzsJgInspectionInfoDto> inspectionInfoDtoList = new ArrayList<>();
if (!inspectionInfoList.isEmpty()) {
for (TzsJgInspectionInfo inspectionInfoOne : inspectionInfoList) {
TzsJgInspectionInfoDto inspectionInfoDtoOne = new TzsJgInspectionInfoDto();
BeanUtils.copyProperties(inspectionInfoOne, inspectionInfoDtoOne);
List<TzsJgFile> repairInform = iTzsJgFileService.list(new LambdaQueryWrapper<TzsJgFile>()
.eq(TzsJgFile::getSquNbr, inspectionInfoOne.getSequenceNbr())
.eq(TzsJgFile::getObjectType, JgFileObjectEnum.INSPECTION_INFO.getObject())
.eq(TzsJgFile::getAttributeType, JgFileAttributeEnum.INSPECTION_REPORT.getAttribute()));
repairInform.forEach(e -> e.setFileUrl(fileServerUrl + e.getFileUrl()));
inspectionInfoDtoOne.setInspectionReport(repairInform);
inspectionInfoDtoList.add(inspectionInfoDtoOne);
}
}
TzsJgOtherInfo otherInfo = iTzsJgOtherInfoService TzsJgOtherInfo otherInfo = iTzsJgOtherInfoService
.getOne(new LambdaQueryWrapper<TzsJgOtherInfo>().eq(TzsJgOtherInfo::getSequenceCode, code)); .getOne(new LambdaQueryWrapper<TzsJgOtherInfo>().eq(TzsJgOtherInfo::getSequenceCode, code));
TzsJgOtherInfoDto otherInfoDto = new TzsJgOtherInfoDto(); TzsJgOtherInfoDto otherInfoDto = new TzsJgOtherInfoDto();
...@@ -226,7 +277,7 @@ public class TzsJgServiceImpl implements ITzsJgService { ...@@ -226,7 +277,7 @@ public class TzsJgServiceImpl implements ITzsJgService {
if (elevatorTechInfo != null) { if (elevatorTechInfo != null) {
BeanUtils.copyProperties(elevatorTechInfo, elevatorTechInfoDto); BeanUtils.copyProperties(elevatorTechInfo, elevatorTechInfoDto);
List<TzsJgFile> governorEffiReport = iTzsJgFileService List<TzsJgFile> governorEffiReport = iTzsJgFileService
.list(new LambdaQueryWrapper<TzsJgFile>().eq(TzsJgFile::getSequenceCode, code) .list(new LambdaQueryWrapper<TzsJgFile>().eq(TzsJgFile::getSquNbr, elevatorTechInfo.getSequenceNbr())
.eq(TzsJgFile::getObjectType, JgFileObjectEnum.ELEVATOR_TECH_INFO.getObject()) .eq(TzsJgFile::getObjectType, JgFileObjectEnum.ELEVATOR_TECH_INFO.getObject())
.eq(TzsJgFile::getAttributeType, JgFileAttributeEnum.GOVERNOR_EFFI_REPORT.getAttribute())); .eq(TzsJgFile::getAttributeType, JgFileAttributeEnum.GOVERNOR_EFFI_REPORT.getAttribute()));
governorEffiReport.forEach(i -> i.setFileUrl(fileServerUrl + i.getFileUrl())); governorEffiReport.forEach(i -> i.setFileUrl(fileServerUrl + i.getFileUrl()));
...@@ -265,8 +316,11 @@ public class TzsJgServiceImpl implements ITzsJgService { ...@@ -265,8 +316,11 @@ public class TzsJgServiceImpl implements ITzsJgService {
dto.setUseInfo(useInfoDto); dto.setUseInfo(useInfoDto);
dto.setElevatorTechInfo(elevatorTechInfoDto); dto.setElevatorTechInfo(elevatorTechInfoDto);
dto.setConstructionInfo(constructionInfoDto); dto.setConstructionInfo(constructionInfoDto);
dto.setConstructionInfoList(constructionInfoDtoList);
dto.setMaintenanceInfo(maintenanceInfoDto); dto.setMaintenanceInfo(maintenanceInfoDto);
dto.setMaintenanceInfoList(maintenanceInfoDtoList);
dto.setInspectionInfo(inspectionInfoDto); dto.setInspectionInfo(inspectionInfoDto);
dto.setInspectionInfoList(inspectionInfoDtoList);
dto.setOtherInfo(otherInfoDto); dto.setOtherInfo(otherInfoDto);
return dto; return dto;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment