Commit b666c0df authored by hezhuozhi's avatar hezhuozhi

Merge remote-tracking branch 'origin/developer' into developer

parents a24b3ad2 56677fe9
...@@ -73,4 +73,7 @@ public class BasicGridAcceptanceDto extends BaseDto { ...@@ -73,4 +73,7 @@ public class BasicGridAcceptanceDto extends BaseDto {
//并网登记id //并网登记id
private Long fonGridId; private Long fonGridId;
// 电站安装规模(kW)
private String scale;
} }
...@@ -158,6 +158,12 @@ public class HygfIcbcRecordDTO { ...@@ -158,6 +158,12 @@ public class HygfIcbcRecordDTO {
* */ * */
@ApiModelProperty(value = "区域公司名称") @ApiModelProperty(value = "区域公司名称")
private String regionalCompaniesName; private String regionalCompaniesName;
/*
* 商务信息-电站安装规模
* */
@ApiModelProperty(value = "电站安装规模(kW)")
private String scale;
} }
} }
\ No newline at end of file
...@@ -94,4 +94,7 @@ public class PowerStationDto extends BaseDto { ...@@ -94,4 +94,7 @@ public class PowerStationDto extends BaseDto {
@ApiModelProperty(value = "合同状态") @ApiModelProperty(value = "合同状态")
private String status; private String status;
@ApiModelProperty(value = "电站安装规模")
private String scale;
} }
...@@ -257,4 +257,7 @@ public class HouseholdContract extends BaseEntity { ...@@ -257,4 +257,7 @@ public class HouseholdContract extends BaseEntity {
//查询一个农户拥有的合同是否全是已废弃 //查询一个农户拥有的合同是否全是已废弃
@TableField(exist = false) @TableField(exist = false)
private Boolean isAllDisuse; private Boolean isAllDisuse;
@TableField(exist = false)
private String scale;
} }
...@@ -215,4 +215,10 @@ public class PeasantHousehold extends BaseEntity { ...@@ -215,4 +215,10 @@ public class PeasantHousehold extends BaseEntity {
*/ */
@TableField(exist = false) @TableField(exist = false)
private Integer isAllRevoke; private Integer isAllRevoke;
/**
* 商务信息安装规模
*/
@TableField(exist = false)
private String scale;
} }
...@@ -19,4 +19,6 @@ public interface HouseholdContractMapper extends BaseMapper<HouseholdContract> { ...@@ -19,4 +19,6 @@ public interface HouseholdContractMapper extends BaseMapper<HouseholdContract> {
@UserEmpower(field ={"hygf_household_contract.regional_companies_code"} ,dealerField={"dealer_code","hygf_household_contract.regional_companies_code","developer_user_id"} ,fieldConditions ={"eq","in","eq"} ,relationship="and") @UserEmpower(field ={"hygf_household_contract.regional_companies_code"} ,dealerField={"dealer_code","hygf_household_contract.regional_companies_code","developer_user_id"} ,fieldConditions ={"eq","in","eq"} ,relationship="and")
IPage<HouseholdContract> selectPage(@Param("dto") HouseholdContractPageDto dto); IPage<HouseholdContract> selectPage(@Param("dto") HouseholdContractPageDto dto);
String getHygfCommercialScale(String peasantHouseholdNumber);
} }
...@@ -50,4 +50,6 @@ public interface PeasantHouseholdMapper extends BaseMapper<PeasantHousehold> { ...@@ -50,4 +50,6 @@ public interface PeasantHouseholdMapper extends BaseMapper<PeasantHousehold> {
void deleteHphByNo(String peasantHouseholdNo); void deleteHphByNo(String peasantHouseholdNo);
void deleteHhcByNo(String peasantHouseholdNo); void deleteHhcByNo(String peasantHouseholdNo);
String getHygfCommercialScale(Long surveyInformationId);
} }
...@@ -53,4 +53,10 @@ ...@@ -53,4 +53,10 @@
ORDER BY hygf_household_contract.rec_date DESC, hygf_household_contract.${orderBy} ${dto.isAsc} ORDER BY hygf_household_contract.rec_date DESC, hygf_household_contract.${orderBy} ${dto.isAsc}
</if> </if>
</select> </select>
<select id="getHygfCommercialScale" resultType="String">
select scale from hygf_commercial where survey_information_id = (select survey_information_id from hygf_peasant_household where peasant_household_no = #{peasantHouseholdNumber} )
</select>
</mapper> </mapper>
...@@ -133,4 +133,8 @@ on hygf_document_station.preparation_money_id=hygf_preparation_money.sequence_nb ...@@ -133,4 +133,8 @@ on hygf_document_station.preparation_money_id=hygf_preparation_money.sequence_nb
<select id="deleteHhcByNo"> <select id="deleteHhcByNo">
DELETE FROM hygf_household_contract WHERE peasant_household_number=#{peasantHouseholdNo} DELETE FROM hygf_household_contract WHERE peasant_household_number=#{peasantHouseholdNo}
</select> </select>
<select id="getHygfCommercialScale" resultType="String">
select scale from hygf_commercial where survey_information_id=${surveyInformationId}
</select>
</mapper> </mapper>
...@@ -54,6 +54,8 @@ public class BasicGridAcceptanceServiceImpl ...@@ -54,6 +54,8 @@ public class BasicGridAcceptanceServiceImpl
@Autowired @Autowired
PeasantHouseholdMapper peasantHouseholdMapper; PeasantHouseholdMapper peasantHouseholdMapper;
@Autowired @Autowired
HouseholdContractMapper householdContractMapper;
@Autowired
private CommonServiceImpl commonService; private CommonServiceImpl commonService;
private final String OK = "0"; private final String OK = "0";
...@@ -82,6 +84,15 @@ public class BasicGridAcceptanceServiceImpl ...@@ -82,6 +84,15 @@ public class BasicGridAcceptanceServiceImpl
pageNew.setCurrent(current); pageNew.setCurrent(current);
pageNew.setTotal(page.getTotal()); pageNew.setTotal(page.getTotal());
pageNew.setSize(size); pageNew.setSize(size);
if(page.getList() != null && page.getList().size() > 0) {
page.getList().forEach(e -> {
if(e.getPeasantHouseholdNo() != null) {
e.setScale(householdContractMapper.getHygfCommercialScale(e.getPeasantHouseholdNo()));
}
});
}
pageNew.setRecords(page.getList()); pageNew.setRecords(page.getList());
return pageNew; return pageNew;
} }
......
...@@ -93,6 +93,16 @@ public class HouseholdContractServiceImpl extends BaseService<HouseholdContractD ...@@ -93,6 +93,16 @@ public class HouseholdContractServiceImpl extends BaseService<HouseholdContractD
// } // }
IPage<HouseholdContract> warningQuestionInfoIPage = householdContractMapper.selectPage(dto); IPage<HouseholdContract> warningQuestionInfoIPage = householdContractMapper.selectPage(dto);
if(warningQuestionInfoIPage.getRecords() != null && warningQuestionInfoIPage.getRecords().size() > 0) {
warningQuestionInfoIPage.getRecords().forEach(e -> {
if(e.getPeasantHouseholdNumber() != null) {
e.setScale(householdContractMapper.getHygfCommercialScale(e.getPeasantHouseholdNumber()));
}
});
}
return warningQuestionInfoIPage; return warningQuestionInfoIPage;
} }
......
...@@ -22,6 +22,8 @@ import javax.annotation.Resource; ...@@ -22,6 +22,8 @@ import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import com.yeejoin.amos.boot.module.hygf.api.mapper.HouseholdContractMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
...@@ -62,6 +64,9 @@ import lombok.extern.slf4j.Slf4j; ...@@ -62,6 +64,9 @@ import lombok.extern.slf4j.Slf4j;
@Service @Service
@Slf4j @Slf4j
public class HygfIcbcServiceImpl extends BaseService<HygfIcbcRecordDTO, HygfIcbcRecord, HygfIcbcRecordMapper> public class HygfIcbcServiceImpl extends BaseService<HygfIcbcRecordDTO, HygfIcbcRecord, HygfIcbcRecordMapper>
implements IHygfIcbcService { implements IHygfIcbcService {
private static final String trxChannel = "05"; // 05表示小程序 private static final String trxChannel = "05"; // 05表示小程序
...@@ -126,6 +131,9 @@ public class HygfIcbcServiceImpl extends BaseService<HygfIcbcRecordDTO, HygfIcbc ...@@ -126,6 +131,9 @@ public class HygfIcbcServiceImpl extends BaseService<HygfIcbcRecordDTO, HygfIcbc
@Resource(type = HygfIcbcRecordMapper.class) @Resource(type = HygfIcbcRecordMapper.class)
private HygfIcbcRecordMapper hygfIcbcRecordMapper; private HygfIcbcRecordMapper hygfIcbcRecordMapper;
@Resource(type = HouseholdContractMapper.class)
private HouseholdContractMapper householdContractMapper;
@Resource(type = HygfIcbcRequestMapper.class) @Resource(type = HygfIcbcRequestMapper.class)
private HygfIcbcRequestMapper hygfIcbcRequestMapper; private HygfIcbcRequestMapper hygfIcbcRequestMapper;
...@@ -412,6 +420,15 @@ public class HygfIcbcServiceImpl extends BaseService<HygfIcbcRecordDTO, HygfIcbc ...@@ -412,6 +420,15 @@ public class HygfIcbcServiceImpl extends BaseService<HygfIcbcRecordDTO, HygfIcbc
Map<String, List<PeasantHousehold>> peasantHouseholdMap = peasantHouseholds.stream() Map<String, List<PeasantHousehold>> peasantHouseholdMap = peasantHouseholds.stream()
.collect(Collectors.groupingBy(PeasantHousehold::getAmosUserId));// 根据农户 ID 分组 .collect(Collectors.groupingBy(PeasantHousehold::getAmosUserId));// 根据农户 ID 分组
List<PeasantHousehold> peasantHouseholdList = peasantHouseholdMap.get(amosUserId); List<PeasantHousehold> peasantHouseholdList = peasantHouseholdMap.get(amosUserId);
if(peasantHouseholdList != null && peasantHouseholdList.size() > 0) {
peasantHouseholdList.forEach(e -> {
if(e.getSurveyInformationId() != null) {
e.setScale(householdContractMapper.getHygfCommercialScale(e.getPeasantHouseholdNo()));
}
});
}
hygfIcbcRecordDTO.setPeasantHouseholds( hygfIcbcRecordDTO.setPeasantHouseholds(
Bean.toModels(peasantHouseholdList, HygfIcbcRecordDTO.IcbcPeasantHousehold.class)); Bean.toModels(peasantHouseholdList, HygfIcbcRecordDTO.IcbcPeasantHousehold.class));
return hygfIcbcRecordDTO; return hygfIcbcRecordDTO;
......
...@@ -271,6 +271,16 @@ public class PeasantHouseholdServiceImpl extends BaseService<PeasantHouseholdDto ...@@ -271,6 +271,16 @@ public class PeasantHouseholdServiceImpl extends BaseService<PeasantHouseholdDto
pagenew.setCurrent(current); pagenew.setCurrent(current);
pagenew.setTotal(objectPageInfo.getTotal()); pagenew.setTotal(objectPageInfo.getTotal());
pagenew.setSize(size); pagenew.setSize(size);
if(newRecords != null && newRecords.size() > 0) {
newRecords.forEach(e -> {
if(e.getSurveyInformationId() != null) {
e.setScale(peasantHouseholdMapper.getHygfCommercialScale(e.getSurveyInformationId()));
}
});
}
pagenew.setRecords(newRecords); pagenew.setRecords(newRecords);
return pagenew; return pagenew;
...@@ -914,6 +924,18 @@ public class PeasantHouseholdServiceImpl extends BaseService<PeasantHouseholdDto ...@@ -914,6 +924,18 @@ public class PeasantHouseholdServiceImpl extends BaseService<PeasantHouseholdDto
queryWrapper.like(StrUtil.isNotEmpty(peasantHouseholdPageDto.getRegionalCompaniesName()),"regional_companies_name", "%"+peasantHouseholdPageDto.getRegionalCompaniesName()+"%"); queryWrapper.like(StrUtil.isNotEmpty(peasantHouseholdPageDto.getRegionalCompaniesName()),"regional_companies_name", "%"+peasantHouseholdPageDto.getRegionalCompaniesName()+"%");
queryWrapper.like(StrUtil.isNotEmpty(peasantHouseholdPageDto.getDeveloperName()),"developer_name", "%"+peasantHouseholdPageDto.getDeveloperName()+"%"); queryWrapper.like(StrUtil.isNotEmpty(peasantHouseholdPageDto.getDeveloperName()),"developer_name", "%"+peasantHouseholdPageDto.getDeveloperName()+"%");
queryWrapper.orderByDesc("rec_date"); queryWrapper.orderByDesc("rec_date");
return this.baseMapper.selectPage(new Page<>(peasantHouseholdPageDto.getCurrent(),peasantHouseholdPageDto.getSize()),queryWrapper); IPage<PeasantHousehold> peasantHouseholdIPage = this.baseMapper.selectPage(new Page<>(peasantHouseholdPageDto.getCurrent(), peasantHouseholdPageDto.getSize()), queryWrapper);
if(peasantHouseholdIPage.getRecords() != null && peasantHouseholdIPage.getRecords().size() > 0) {
peasantHouseholdIPage.getRecords().forEach(e -> {
if(e.getSurveyInformationId() != null) {
e.setScale(peasantHouseholdMapper.getHygfCommercialScale(e.getSurveyInformationId()));
}
});
}
return peasantHouseholdIPage;
} }
} }
\ No newline at end of file
...@@ -94,7 +94,7 @@ public class PowerStationServiceImpl extends BaseService<PowerStationDto, PowerS ...@@ -94,7 +94,7 @@ public class PowerStationServiceImpl extends BaseService<PowerStationDto, PowerS
private RedisLockUtil redisLockUtil; private RedisLockUtil redisLockUtil;
public Page<PowerStationDto> queryForPowerStationUserRoles(Page<PowerStationDto> page, String powerStationCode, public Page<PowerStationDto> queryForPowerStationUserRoles(Page<PowerStationDto> page, String powerStationCode,
String ownersName, AgencyUserModel userInfo, String serviceAgent, String regionalCompaniesName, String processStatus) { String ownersName, AgencyUserModel userInfo, String serviceAgent, String regionalCompaniesName, String processStatus) {
// Map<Long, List<RoleModel>> orgRoles = userInfo.getOrgRoles(); // Map<Long, List<RoleModel>> orgRoles = userInfo.getOrgRoles();
// Collection<List<RoleModel>> roleModels = orgRoles.values(); // Collection<List<RoleModel>> roleModels = orgRoles.values();
// if(roleModels !=null){ // if(roleModels !=null){
...@@ -118,13 +118,26 @@ public class PowerStationServiceImpl extends BaseService<PowerStationDto, PowerS ...@@ -118,13 +118,26 @@ public class PowerStationServiceImpl extends BaseService<PowerStationDto, PowerS
// return // return
// this.queryForPowerStationPage(page,powerStationCode,ownersName,serviceAgent); // this.queryForPowerStationPage(page,powerStationCode,ownersName,serviceAgent);
return this.queryPage((int) page.getCurrent(), (int) page.getSize(), powerStationCode, ownersName,
serviceAgent,regionalCompaniesName,processStatus); Page<PowerStationDto> powerStationDtoPage = this.queryPage((int) page.getCurrent(), (int) page.getSize(), powerStationCode, ownersName,
serviceAgent, regionalCompaniesName, processStatus);
if(powerStationDtoPage.getRecords() != null && powerStationDtoPage.getRecords().size() > 0) {
powerStationDtoPage.getRecords().forEach(e -> {
if(e.getPowerStationCode() != null) {
e.setScale(householdContractMapper.getHygfCommercialScale(e.getPowerStationCode()));
}
});
}
return powerStationDtoPage;
} }
// 查询电站审核记录 // 查询电站审核记录
public Page<PowerStationDto> queryPage(int current, int size, String powerStationCode, String ownersName, public Page<PowerStationDto> queryPage(int current, int size, String powerStationCode, String ownersName,
String serviceAgent,String regionalCompaniesName,String processStatus) { String serviceAgent,String regionalCompaniesName,String processStatus) {
PageHelper.startPage(current, size); PageHelper.startPage(current, size);
List<PowerStationDto> list = powerStationMapper.queryPage(powerStationCode, ownersName, serviceAgent,regionalCompaniesName,processStatus); List<PowerStationDto> list = powerStationMapper.queryPage(powerStationCode, ownersName, serviceAgent,regionalCompaniesName,processStatus);
...@@ -241,7 +254,7 @@ public class PowerStationServiceImpl extends BaseService<PowerStationDto, PowerS ...@@ -241,7 +254,7 @@ public class PowerStationServiceImpl extends BaseService<PowerStationDto, PowerS
@Override @Override
public String powerStationExamine(long pageId, String nodeCode, String stationId, String taskId, public String powerStationExamine(long pageId, String nodeCode, String stationId, String taskId,
String planInstanceId, Map<String, Object> kv) { String planInstanceId, Map<String, Object> kv) {
String lockName = String.format("LockName:powerStationExamine:%s", stationId); String lockName = String.format("LockName:powerStationExamine:%s", stationId);
Boolean isLocked = redisLockUtil.tryLock(lockName, lockName, 10, 1); Boolean isLocked = redisLockUtil.tryLock(lockName, lockName, 10, 1);
if (BooleanUtils.isNotTrue(isLocked)) { if (BooleanUtils.isNotTrue(isLocked)) {
...@@ -266,33 +279,33 @@ public class PowerStationServiceImpl extends BaseService<PowerStationDto, PowerS ...@@ -266,33 +279,33 @@ public class PowerStationServiceImpl extends BaseService<PowerStationDto, PowerS
} }
PowerStationProcessStateEnum resultObj = PowerStationProcessStateEnum.getStateByResult(result); PowerStationProcessStateEnum resultObj = PowerStationProcessStateEnum.getStateByResult(result);
switch (nodeByCode) { switch (nodeByCode) {
case 设计审核: case 设计审核:
powerStation.setTechnologyStatus(resultObj.getName()); powerStation.setTechnologyStatus(resultObj.getName());
break; break;
case 投融审核: case 投融审核:
powerStation.setDesignStatus(resultObj.getName()); powerStation.setDesignStatus(resultObj.getName());
break; break;
case 法务审核: case 法务审核:
powerStation.setBusinessStatus(resultObj.getName()); powerStation.setBusinessStatus(resultObj.getName());
if (VERIFY_RESULT_YES.equals(result)) { if (VERIFY_RESULT_YES.equals(result)) {
LambdaUpdateWrapper<HouseholdContract> lambdaUw = new LambdaUpdateWrapper<>(); LambdaUpdateWrapper<HouseholdContract> lambdaUw = new LambdaUpdateWrapper<>();
lambdaUw.eq(HouseholdContract::getPeasantHouseholdId, powerStation.getPeasantHouseholdId()); lambdaUw.eq(HouseholdContract::getPeasantHouseholdId, powerStation.getPeasantHouseholdId());
lambdaUw.set(HouseholdContract::getSurveyStatus, HouseholdContractEnum.勘察状态_已勘察.getCode()); lambdaUw.set(HouseholdContract::getSurveyStatus, HouseholdContractEnum.勘察状态_已勘察.getCode());
householdContractServiceImpl.update(lambdaUw); householdContractServiceImpl.update(lambdaUw);
} }
break; break;
case 文件审核: case 文件审核:
if (VERIFY_RESULT_YES.equals(result)) { if (VERIFY_RESULT_YES.equals(result)) {
flag = false; flag = false;
powerStation.setProcessStatus(PowerStationProcessStateEnum.完成.getName()); powerStation.setProcessStatus(PowerStationProcessStateEnum.完成.getName());
} }
powerStation.setDrawingReview(resultObj.getName()); powerStation.setDrawingReview(resultObj.getName());
break; break;
default: default:
break; break;
} }
} }
meg = "任务明细:" + nodeByCode + (VERIFY_RESULT_YES.equals(result) ? "通过" : "不通过"); meg = "任务明细:" + nodeByCode + (VERIFY_RESULT_YES.equals(result) ? "通过" : "不通过");
...@@ -462,45 +475,45 @@ public class PowerStationServiceImpl extends BaseService<PowerStationDto, PowerS ...@@ -462,45 +475,45 @@ public class PowerStationServiceImpl extends BaseService<PowerStationDto, PowerS
public WorkDto getNodeInfoCode(String flowTaskId) { public WorkDto getNodeInfoCode(String flowTaskId) {
WorkDto workDto = null; WorkDto workDto = null;
FeignClientResult<JSONObject> jSONObject = workflowFeignClient.getNodeInfo(flowTaskId); FeignClientResult<JSONObject> jSONObject = workflowFeignClient.getNodeInfo(flowTaskId);
if (IDX_REQUEST_STATE.equals(String.valueOf(jSONObject.getStatus()))) { if (IDX_REQUEST_STATE.equals(String.valueOf(jSONObject.getStatus()))) {
JSONObject js = jSONObject.getResult(); JSONObject js = jSONObject.getResult();
if (js == null) { if (js == null) {
throw new BaseException("获取工作流节点失败!", "400", "获取工作流节点失败!"); throw new BaseException("获取工作流节点失败!", "400", "获取工作流节点失败!");
}
LinkedHashMap taskInfo = js.get("taskInfo") != null ? (LinkedHashMap) js.get("taskInfo") : null;
String nextProcessNode = taskInfo != null ? taskInfo.get("taskDefinitionKey").toString() : null;
List<LinkedHashMap> executor = js.get("executor") != null ? (List<LinkedHashMap>) js.get("executor")
: null;
String nodeRole = null;
if (!executor.isEmpty()) {
List<String> idList = executor.stream().map(e -> e.get("groupId").toString())
.collect(Collectors.toList());
nodeRole = StringUtils.join(idList, ",");
}
LinkedHashMap extensionInfo = js.get("extensionInfo") != null ? (LinkedHashMap) js.get("extensionInfo")
: null;
String nodeRouting = extensionInfo != null ? extensionInfo.get("nodeRole").toString() : null;
workDto = new WorkDto(nodeRouting, nodeRole, nextProcessNode);
} }
LinkedHashMap taskInfo = js.get("taskInfo") != null ? (LinkedHashMap) js.get("taskInfo") : null;
String nextProcessNode = taskInfo != null ? taskInfo.get("taskDefinitionKey").toString() : null;
List<LinkedHashMap> executor = js.get("executor") != null ? (List<LinkedHashMap>) js.get("executor")
: null;
String nodeRole = null;
if (!executor.isEmpty()) {
List<String> idList = executor.stream().map(e -> e.get("groupId").toString())
.collect(Collectors.toList());
nodeRole = StringUtils.join(idList, ",");
}
LinkedHashMap extensionInfo = js.get("extensionInfo") != null ? (LinkedHashMap) js.get("extensionInfo")
: null;
String nodeRouting = extensionInfo != null ? extensionInfo.get("nodeRole").toString() : null;
workDto = new WorkDto(nodeRouting, nodeRole, nextProcessNode);
}
return workDto; return workDto;
} }
public String getTaskNoAuth(String processInstanceId) { public String getTaskNoAuth(String processInstanceId) {
String flowTaskId = null; String flowTaskId = null;
JSONObject jSONObject = workflowFeignClient.getTaskNoAuth(processInstanceId); JSONObject jSONObject = workflowFeignClient.getTaskNoAuth(processInstanceId);
if (IDX_REQUEST_STATE.equals(String.valueOf(jSONObject.get("code")))) { if (IDX_REQUEST_STATE.equals(String.valueOf(jSONObject.get("code")))) {
LinkedHashMap jsd = jSONObject.get("data") != null ? (LinkedHashMap) jSONObject.get("data") : null; LinkedHashMap jsd = jSONObject.get("data") != null ? (LinkedHashMap) jSONObject.get("data") : null;
flowTaskId = jsd != null ? jsd.get("id").toString() : null; flowTaskId = jsd != null ? jsd.get("id").toString() : null;
} }
if (flowTaskId == null) { if (flowTaskId == null) {
throw new BaseException("获取工作流节点失败!", "400", "获取工作流节点失败!"); throw new BaseException("获取工作流节点失败!", "400", "获取工作流节点失败!");
} }
return flowTaskId; return flowTaskId;
} }
......
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