Commit f5a9b5e7 authored by 刘林's avatar 刘林

fix(jg):暂存功能问题处理

parent ad0f5d43
...@@ -71,6 +71,8 @@ public class DictParamsConverter implements Converter<String> { ...@@ -71,6 +71,8 @@ public class DictParamsConverter implements Converter<String> {
dictMap.put("GCD", "6004"); dictMap.put("GCD", "6004");
dictMap.put("GD1", "6006"); dictMap.put("GD1", "6006");
dictMap.put("GD2", "6007"); dictMap.put("GD2", "6007");
dictMap.put("GB1", "8890");
dictMap.put("GB2", "8891");
dictMap.put("压缩天然气", "COMPRESSED_NATURAL_GAS"); dictMap.put("压缩天然气", "COMPRESSED_NATURAL_GAS");
dictMap.put("液化天然气", "LIQUEFIED_NATURAL_GAS"); dictMap.put("液化天然气", "LIQUEFIED_NATURAL_GAS");
dictMap.put("液化石油气", "LIQUEFIED_PETROLEUM_GAS"); dictMap.put("液化石油气", "LIQUEFIED_PETROLEUM_GAS");
......
...@@ -825,8 +825,8 @@ public class EquipInfoExcelDto extends BaseDto { ...@@ -825,8 +825,8 @@ public class EquipInfoExcelDto extends BaseDto {
@ApiModelProperty(value = "最高允许工作压力(壳程)") @ApiModelProperty(value = "最高允许工作压力(壳程)")
private String maxPressureShell; private String maxPressureShell;
@ExcelProperty(value = "主体结构型式", converter = DictParamsConverter.class) @ExcelProperty(value = "主体结构", converter = DictParamsConverter.class)
@ApiModelProperty(value = "主体结构型式") @ApiModelProperty(value = "主体结构")
private String mainStructureType; private String mainStructureType;
@ExcelProperty(value = "无损检测方法", converter = DictParamsConverter.class) @ExcelProperty(value = "无损检测方法", converter = DictParamsConverter.class)
......
...@@ -26,11 +26,6 @@ public class RegistrationReformStrategyHandler implements ToBeSubmitDetailStrate ...@@ -26,11 +26,6 @@ public class RegistrationReformStrategyHandler implements ToBeSubmitDetailStrate
basic.put("businessScenarios", "0"); basic.put("businessScenarios", "0");
basic.put("code", notice.get("EQU_LIST_CODE")); basic.put("code", notice.get("EQU_LIST_CODE"));
basic.put("equCategory", notice.get("EQU_CATEGORY_CODE")); basic.put("equCategory", notice.get("EQU_CATEGORY_CODE"));
Map<String, Object> responseDetail = (Map<String, Object>) notice.get("responseDetail");
if (responseDetail != null) {
responseDetail.put("techInfo", notice.get("techInfo"));
}
notice.put("responseDetail", responseDetail);
Map<String, Map<String, Object>> result = new HashMap<>(); Map<String, Map<String, Object>> result = new HashMap<>();
result.put("notice", notice); result.put("notice", notice);
result.put("basic", basic); result.put("basic", basic);
......
package com.yeejoin.amos.boot.module.jg.biz.handler.toBeSubmit; package com.yeejoin.amos.boot.module.jg.biz.handler.toBeSubmit;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.yeejoin.amos.boot.biz.common.bo.ReginParams; import com.yeejoin.amos.boot.biz.common.bo.ReginParams;
import com.yeejoin.amos.boot.module.jg.api.enums.BusinessTypeEnum; import com.yeejoin.amos.boot.module.jg.api.enums.BusinessTypeEnum;
import com.yeejoin.amos.boot.module.jg.biz.handler.strategy.ToBeSubmitDetailStrategy; import com.yeejoin.amos.boot.module.jg.biz.handler.strategy.ToBeSubmitDetailStrategy;
import com.yeejoin.amos.boot.module.jg.biz.service.impl.JgChangeRegistrationTransferServiceImpl; import com.yeejoin.amos.boot.module.jg.biz.service.impl.JgChangeRegistrationTransferServiceImpl;
import com.yeejoin.amos.boot.module.ymt.api.entity.IdxBizJgRegisterInfo;
import com.yeejoin.amos.boot.module.ymt.api.enums.ApplicationFormTypeEnum; import com.yeejoin.amos.boot.module.ymt.api.enums.ApplicationFormTypeEnum;
import com.yeejoin.amos.boot.module.ymt.api.mapper.IdxBizJgRegisterInfoMapper;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.Objects;
@Component @Component
public class RegistrationTransferStrategyHandler implements ToBeSubmitDetailStrategy { public class RegistrationTransferStrategyHandler implements ToBeSubmitDetailStrategy {
@Autowired @Autowired
private JgChangeRegistrationTransferServiceImpl registrationTransferService; private JgChangeRegistrationTransferServiceImpl registrationTransferService;
@Autowired
private IdxBizJgRegisterInfoMapper idxBizJgRegisterInfoMapper;
@Override @Override
public Map<String, Map<String, Object>> getDetails(Long sequenceNbr, ReginParams reginParams) { public Map<String, Map<String, Object>> getDetails(Long sequenceNbr, ReginParams reginParams) {
Map<String, Map<String, Object>> notice = registrationTransferService.getTransferDetail(String.valueOf(sequenceNbr), reginParams.getCompany()); // 获取转移详情
Map<String, Map<String, Object>> notice = registrationTransferService.getTransferDetail(
String.valueOf(sequenceNbr), reginParams.getCompany());
Map<String, Object> changeTransfer = notice.get("changeRegistrationTransfer");
if (changeTransfer == null) {
throw new IllegalStateException("changeRegistrationTransfer 数据不存在");
}
Map<String, Object> basic = new HashMap<>(); Map<String, Object> basic = new HashMap<>();
basic.put("type", ApplicationFormTypeEnum.YZBG.getBusinessCode()); basic.put("type", ApplicationFormTypeEnum.YZBG.getBusinessCode());
basic.put("code", notice.get("equList"));
basic.put("equCategory", notice.get("EQU_CATEGORY_CODE")); String useOrgCode = Objects.toString(changeTransfer.get("useRegistrationCode"), null);
basic.put("receiveOrgCreditCode1", notice.get("changeRegistrationTransfer").get("receiveCompanyCode")); if (useOrgCode != null) {
LambdaQueryWrapper<IdxBizJgRegisterInfo> wrapper = new LambdaQueryWrapper<>();
wrapper.select(IdxBizJgRegisterInfo::getEquList, IdxBizJgRegisterInfo::getEquCategory)
.eq(IdxBizJgRegisterInfo::getUseOrgCode, useOrgCode);
IdxBizJgRegisterInfo jgRegisterInfo = idxBizJgRegisterInfoMapper.selectOne(wrapper);
if (jgRegisterInfo != null) {
basic.put("code", jgRegisterInfo.getEquList());
basic.put("equCategory", jgRegisterInfo.getEquCategory());
}
}
basic.put("receiveOrgCreditCode1", changeTransfer.get("receiveCompanyCode"));
Map<String, Map<String, Object>> result = new HashMap<>(); Map<String, Map<String, Object>> result = new HashMap<>();
result.put("notice", notice.get("changeRegistrationTransfer")); result.put("notice", changeTransfer);
result.put("basic", basic); result.put("basic", basic);
return result; return result;
} }
......
...@@ -831,9 +831,6 @@ public class DataDockServiceImpl { ...@@ -831,9 +831,6 @@ public class DataDockServiceImpl {
// } // }
equCodeList.add(data.getEquCode()); equCodeList.add(data.getEquCode());
useOrgCodeList.add(data.getUseOrgCode()); useOrgCodeList.add(data.getUseOrgCode());
if (data.getFactoryNum() != null && data.getProduceUnitCreditCode() != null){
factoryNumList.add(data.getProduceUnitCreditCode() + "_" +data.getFactoryNum());
}
dataList.add(data); dataList.add(data);
} }
......
...@@ -547,7 +547,8 @@ public class IdxBizJgRegisterInfoServiceImpl extends BaseService<IdxBizJgRegiste ...@@ -547,7 +547,8 @@ public class IdxBizJgRegisterInfoServiceImpl extends BaseService<IdxBizJgRegiste
IdxBizJgProjectContraption projectContraption = JSON.parseObject(toJSONString(equipmentInfoForm), IdxBizJgProjectContraption.class); IdxBizJgProjectContraption projectContraption = JSON.parseObject(toJSONString(equipmentInfoForm), IdxBizJgProjectContraption.class);
projectContraption.setSequenceNbr(sequenceNbr); projectContraption.setSequenceNbr(sequenceNbr);
projectContraption.setDataSource(dataSource); projectContraption.setDataSource(dataSource);
projectContraption.setIsIntoManagement(false); List<String> managedCategories = Arrays.asList("8200", "8100");
projectContraption.setIsIntoManagement(dataSource.contains("jg_his_black") && managedCategories.contains(equipmentInfoForm.get("EQU_CATEGORY")));
projectContraption.setProvinceName("陕西省"); projectContraption.setProvinceName("陕西省");
projectContraption.setCityName(getRegionName(CITY, CITY, equipmentInfoForm)); projectContraption.setCityName(getRegionName(CITY, CITY, equipmentInfoForm));
projectContraption.setCountyName(getRegionName(REGION, COUNTY, equipmentInfoForm)); projectContraption.setCountyName(getRegionName(REGION, COUNTY, equipmentInfoForm));
...@@ -642,7 +643,7 @@ public class IdxBizJgRegisterInfoServiceImpl extends BaseService<IdxBizJgRegiste ...@@ -642,7 +643,7 @@ public class IdxBizJgRegisterInfoServiceImpl extends BaseService<IdxBizJgRegiste
useInfo.setRecDate(date); useInfo.setRecDate(date);
useInfo.setCreateDate(date); useInfo.setCreateDate(date);
useInfo.setDataSource(dataSource); useInfo.setDataSource(dataSource);
useInfo.setIsIntoManagement(Boolean.FALSE); useInfo.setIsIntoManagement(dataSource.contains("jg_his_black") && managedCategories.contains(equipmentInfoForm.get("EQU_CATEGORY")));
if (companyTypeStr.contains(CompanyTypeEnum.USE.getCode()) || companyTypeStr.contains(CompanyTypeEnum.INDIVIDUAL.getCode())) { if (companyTypeStr.contains(CompanyTypeEnum.USE.getCode()) || companyTypeStr.contains(CompanyTypeEnum.INDIVIDUAL.getCode())) {
useInfo.setUseUnitCreditCode(companyInfoMap.get("creditCode").toString()); useInfo.setUseUnitCreditCode(companyInfoMap.get("creditCode").toString());
useInfo.setUseUnitName(companyInfoMap.get("companyName").toString()); useInfo.setUseUnitName(companyInfoMap.get("companyName").toString());
...@@ -746,7 +747,7 @@ public class IdxBizJgRegisterInfoServiceImpl extends BaseService<IdxBizJgRegiste ...@@ -746,7 +747,7 @@ public class IdxBizJgRegisterInfoServiceImpl extends BaseService<IdxBizJgRegiste
} }
esEquipmentDto.setREC_DATE(System.currentTimeMillis()); esEquipmentDto.setREC_DATE(System.currentTimeMillis());
esEquipmentDto.setSEQUENCE_NBR(record); esEquipmentDto.setSEQUENCE_NBR(record);
esEquipmentDto.setIS_INTO_MANAGEMENT(false); esEquipmentDto.setIS_INTO_MANAGEMENT(dataSource.contains("jg_his_black") && managedCategories.contains(equipmentInfoForm.get("EQU_CATEGORY")));
esEquipmentDto.setEQU_CATEGORY_CODE(registerInfo.getEquCategory()); esEquipmentDto.setEQU_CATEGORY_CODE(registerInfo.getEquCategory());
esEquipmentDto.setEQU_CATEGORY(equCategoryName); esEquipmentDto.setEQU_CATEGORY(equCategoryName);
esEquipmentDto.setEQU_LIST_CODE(registerInfo.getEquList()); esEquipmentDto.setEQU_LIST_CODE(registerInfo.getEquList());
...@@ -2968,6 +2969,7 @@ public class IdxBizJgRegisterInfoServiceImpl extends BaseService<IdxBizJgRegiste ...@@ -2968,6 +2969,7 @@ public class IdxBizJgRegisterInfoServiceImpl extends BaseService<IdxBizJgRegiste
// 是否发生后续业务,前端控制是否可编辑 // 是否发生后续业务,前端控制是否可编辑
item.put(BaseUseRegisterResultData.HAPPEN_AFTER_BIZ, afterBizMap.getOrDefault(item.getString(SEQUENCE_NBR), false)); item.put(BaseUseRegisterResultData.HAPPEN_AFTER_BIZ, afterBizMap.getOrDefault(item.getString(SEQUENCE_NBR), false));
item.put("DATA_QUALITY_SCORE", commonServiceImpl.castDataQualityScore2Name(item.getString(DATA_QUALITY_SCORE), item.getBoolean(IS_INTO_MANAGEMENT))); item.put("DATA_QUALITY_SCORE", commonServiceImpl.castDataQualityScore2Name(item.getString(DATA_QUALITY_SCORE), item.getBoolean(IS_INTO_MANAGEMENT)));
item.replaceAll((key, value) -> "null".equals(value) ? null : value);
} }
} }
totle = response.getInternalResponse().hits().getTotalHits().value; totle = response.getInternalResponse().hits().getTotalHits().value;
...@@ -3992,7 +3994,7 @@ public class IdxBizJgRegisterInfoServiceImpl extends BaseService<IdxBizJgRegiste ...@@ -3992,7 +3994,7 @@ public class IdxBizJgRegisterInfoServiceImpl extends BaseService<IdxBizJgRegiste
aircraftList.add(fireExperts); aircraftList.add(fireExperts);
useInnerCodeList.add(data.getUseInnerCode()); useInnerCodeList.add(data.getUseInnerCode());
equCodeList.add(data.getEquCode()); equCodeList.add(data.getEquCode());
factoryNumList.add("0".equals(data.getWhetherVehicleCylinder()) ? data.getFactoryNum() : null); factoryNumList.add("0".equals(data.getWhetherVehicleCylinder()) ? data.getProduceUnitCreditCode() + "_" +data.getFactoryNum() : null);
} }
// 全部读取完成就调用该方法 // 全部读取完成就调用该方法
...@@ -4056,16 +4058,8 @@ public class IdxBizJgRegisterInfoServiceImpl extends BaseService<IdxBizJgRegiste ...@@ -4056,16 +4058,8 @@ public class IdxBizJgRegisterInfoServiceImpl extends BaseService<IdxBizJgRegiste
Long changeRecordId = sequence.nextId(); Long changeRecordId = sequence.nextId();
List<EquipInfoCylinderExcelDto> equipInfoCylinderExcelDtoList = JSON.parseArray(JSON.toJSONString(attachmentUpload.get(EQU_LISTS)), EquipInfoCylinderExcelDto.class); List<EquipInfoCylinderExcelDto> equipInfoCylinderExcelDtoList = JSON.parseArray(JSON.toJSONString(attachmentUpload.get(EQU_LISTS)), EquipInfoCylinderExcelDto.class);
// 属地监管部门 // 属地监管部门
String orgBranchCode; String orgBranchCode = equipInfoDto.getOrgBranchCode();
String orgBranchName; String orgBranchName = equipInfoDto.getOrgBranchName();
if(equipInfoDto.getOrgBranchCode() != null){
String[] splitOrgBranchCode = equipInfoDto.getOrgBranchCode().split("_");
orgBranchCode = splitOrgBranchCode.length > 1 ? splitOrgBranchCode[0] : "";
orgBranchName = splitOrgBranchCode.length > 1 ? splitOrgBranchCode[1] : "";
} else {
orgBranchName = "";
orgBranchCode = "";
}
Set<String> recordSet = new HashSet<>(); Set<String> recordSet = new HashSet<>();
equipInfoCylinderExcelDtoList.forEach(data -> { equipInfoCylinderExcelDtoList.forEach(data -> {
JgUseRegistrationEq jgRelationEquip = new JgUseRegistrationEq(); JgUseRegistrationEq jgRelationEquip = new JgUseRegistrationEq();
...@@ -4168,6 +4162,7 @@ public class IdxBizJgRegisterInfoServiceImpl extends BaseService<IdxBizJgRegiste ...@@ -4168,6 +4162,7 @@ public class IdxBizJgRegisterInfoServiceImpl extends BaseService<IdxBizJgRegiste
registerInfo.setOtherAccessoriesReg(otherAccessoriesReg); registerInfo.setOtherAccessoriesReg(otherAccessoriesReg);
registerInfo.setUseOrgCode(equipInfoDto.getUseOrgCode()); registerInfo.setUseOrgCode(equipInfoDto.getUseOrgCode());
registerInfo.setCylinderCategory(data.getCylinderCategory()); registerInfo.setCylinderCategory(data.getCylinderCategory());
registerInfo.setInInspectionPeriod("1");
if ("his".equals(equipInfoDto.getDataSource())) { if ("his".equals(equipInfoDto.getDataSource())) {
registerInfo.setStatus("在用"); registerInfo.setStatus("在用");
registerInfo.setEquCode(this.getEquCode(registerInfo, factoryInfo, equipInfoDto.getReceiveOrgCode())); registerInfo.setEquCode(this.getEquCode(registerInfo, factoryInfo, equipInfoDto.getReceiveOrgCode()));
...@@ -4462,6 +4457,9 @@ public class IdxBizJgRegisterInfoServiceImpl extends BaseService<IdxBizJgRegiste ...@@ -4462,6 +4457,9 @@ public class IdxBizJgRegisterInfoServiceImpl extends BaseService<IdxBizJgRegiste
// 使用登记证编号判断是否使用未来系统生成编号 // 使用登记证编号判断是否使用未来系统生成编号
String key = useRegistrationCode.length() >= 5 ? useRegistrationCode.substring(0, 5) : useRegistrationCode; String key = useRegistrationCode.length() >= 5 ? useRegistrationCode.substring(0, 5) : useRegistrationCode;
List<String> prefixes = Collections.unmodifiableList(Arrays.asList("容", "锅", "管", "瓶", "梯", "起", "索", "游", "车")); List<String> prefixes = Collections.unmodifiableList(Arrays.asList("容", "锅", "管", "瓶", "梯", "起", "索", "游", "车"));
if (useRegistrationCode.length() < 3) {
throw new IllegalArgumentException("请输入正确的使用登记证编号: " + useRegistrationCode);
}
String prefix = useRegistrationCode.substring(0, 3); String prefix = useRegistrationCode.substring(0, 3);
if (useRegistrationCode.length() == 14 && prefixes.stream().anyMatch(key::startsWith) && !"容3T".equals(prefix)) { if (useRegistrationCode.length() == 14 && prefixes.stream().anyMatch(key::startsWith) && !"容3T".equals(prefix)) {
// 如果 prefix 不等于 "瓶31" 或 "瓶32" 则继续执行逻辑 // 如果 prefix 不等于 "瓶31" 或 "瓶32" 则继续执行逻辑
...@@ -4707,6 +4705,9 @@ public class IdxBizJgRegisterInfoServiceImpl extends BaseService<IdxBizJgRegiste ...@@ -4707,6 +4705,9 @@ public class IdxBizJgRegisterInfoServiceImpl extends BaseService<IdxBizJgRegiste
// checkNotBlank(data.getCylinderCategory(), "气瓶分类不能为空;", result); // checkNotBlank(data.getCylinderCategory(), "气瓶分类不能为空;", result);
if (!StringUtils.isEmpty(data.getFactoryNum()) && !StringUtils.isEmpty(data.getProduceUnitCreditCode())){ if (!StringUtils.isEmpty(data.getFactoryNum()) && !StringUtils.isEmpty(data.getProduceUnitCreditCode())){
checkFactoryNumUnique(data.getFactoryNum(), data.getProduceUnitCreditCode(), data.getProduceUnitName(), result); checkFactoryNumUnique(data.getFactoryNum(), data.getProduceUnitCreditCode(), data.getProduceUnitName(), result);
if (factoryNumList.contains(data.getProduceUnitCreditCode() + "_" +data.getFactoryNum())){
result.append("同一制造单位下,出厂编码不能重复!;");
}
} }
} else { } else {
if (!StringUtils.isEmpty(data.getFactoryNum())){ if (!StringUtils.isEmpty(data.getFactoryNum())){
......
...@@ -202,6 +202,7 @@ public class JgTransferNoticeServiceImpl extends BaseService<JgTransferNoticeDto ...@@ -202,6 +202,7 @@ public class JgTransferNoticeServiceImpl extends BaseService<JgTransferNoticeDto
} else { } else {
// 显示最新的设备信息 // 显示最新的设备信息
Map<String, Object> detail = getEquipInfoNew(companyBo, transferNotice, equipListMaps); Map<String, Object> detail = getEquipInfoNew(companyBo, transferNotice, equipListMaps);
detail.replaceAll((key, value) -> "null".equals(value) ? null : value);
new FillingEditPermForCurrentUser(new JSONObject(detail), companyBo, BusinessTypeEnum.JG_ADVICE_REMOVAL).getData(); new FillingEditPermForCurrentUser(new JSONObject(detail), companyBo, BusinessTypeEnum.JG_ADVICE_REMOVAL).getData();
return new HashMap<String, Map<String, Object>>() {{ return new HashMap<String, Map<String, Object>>() {{
this.put("transferNoticeInfo", detail); this.put("transferNoticeInfo", detail);
...@@ -214,7 +215,7 @@ public class JgTransferNoticeServiceImpl extends BaseService<JgTransferNoticeDto ...@@ -214,7 +215,7 @@ public class JgTransferNoticeServiceImpl extends BaseService<JgTransferNoticeDto
List<Map<String, Object>> arrayList = new ArrayList<>(); List<Map<String, Object>> arrayList = new ArrayList<>();
equips.forEach(equip -> { equips.forEach(equip -> {
Map<String, Object> objectHashMap = new HashMap<>(); Map<String, Object> objectHashMap = new HashMap<>();
BeanUtil.beanToMap(equip, objectHashMap, false, false); BeanUtil.beanToMap(equip, objectHashMap, false, true);
objectHashMap.put("record", equip.getSEQUENCE_NBR()); objectHashMap.put("record", equip.getSEQUENCE_NBR());
objectHashMap.put("ADDRESS", concatDetailAddress(equip)); objectHashMap.put("ADDRESS", concatDetailAddress(equip));
arrayList.add(objectHashMap); arrayList.add(objectHashMap);
...@@ -384,6 +385,7 @@ public class JgTransferNoticeServiceImpl extends BaseService<JgTransferNoticeDto ...@@ -384,6 +385,7 @@ public class JgTransferNoticeServiceImpl extends BaseService<JgTransferNoticeDto
notice.setNoticeStatus(String.valueOf(FlowStatusEnum.TO_BE_PROCESSED.getCode())); notice.setNoticeStatus(String.valueOf(FlowStatusEnum.TO_BE_PROCESSED.getCode()));
notice.setNextTaskId(workflowResultDto.getNextTaskId()); notice.setNextTaskId(workflowResultDto.getNextTaskId());
notice.setInstanceId(workflowResultDto.getInstanceId()); notice.setInstanceId(workflowResultDto.getInstanceId());
notice = ObjectCleanerUtils.removeStringNullFields(notice, JgTransferNotice.class);
jgTransferNoticeMapper.updateById(notice); jgTransferNoticeMapper.updateById(notice);
// 如果为保存并提交,则创建代办 // 如果为保存并提交,则创建代办
buildTask(Collections.singletonList(notice), Collections.singletonList(workflowResultDto), Boolean.TRUE); buildTask(Collections.singletonList(notice), Collections.singletonList(workflowResultDto), Boolean.TRUE);
...@@ -449,6 +451,7 @@ public class JgTransferNoticeServiceImpl extends BaseService<JgTransferNoticeDto ...@@ -449,6 +451,7 @@ public class JgTransferNoticeServiceImpl extends BaseService<JgTransferNoticeDto
} else { } else {
JgTransferNotice bean = new JgTransferNotice(); JgTransferNotice bean = new JgTransferNotice();
BeanUtils.copyProperties(noticeDto, bean); BeanUtils.copyProperties(noticeDto, bean);
bean = ObjectCleanerUtils.removeStringNullFields(bean, JgTransferNotice.class);
jgTransferNoticeMapper.updateById(bean); jgTransferNoticeMapper.updateById(bean);
} }
......
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