Commit 9f17a7a1 authored by tianbo's avatar tianbo

隐患工作流调试

parent 16d3d4a8
package com.yeejoin.amos.latentdanger.dao.entity; package com.yeejoin.amos.latentdanger.dao.entity;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
...@@ -25,7 +27,7 @@ import java.util.Date; ...@@ -25,7 +27,7 @@ import java.util.Date;
@Data @Data
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
@Accessors(chain = true) @Accessors(chain = true)
@TableName("cb_latent_danger") @TableName(value = "cb_latent_danger", autoResultMap = true)
@ApiModel(value="LatentDanger", description="隐患信息") @ApiModel(value="LatentDanger", description="隐患信息")
public class LatentDanger extends BasicEntity { public class LatentDanger extends BasicEntity {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
...@@ -33,172 +35,140 @@ public class LatentDanger extends BasicEntity { ...@@ -33,172 +35,140 @@ public class LatentDanger extends BasicEntity {
/** /**
* 业务唯一标识 * 业务唯一标识
*/ */
@Column(name = "business_key")
private String businessKey; private String businessKey;
/** /**
* 公司组织机构 * 公司组织机构
*/ */
@Column(name = "org_code")
private String orgCode; private String orgCode;
/** /**
* 隐患名称 * 隐患名称
*/ */
@Column(name = "danger_name")
private String dangerName; private String dangerName;
@Column(name = "instance_id")
private String instanceId; private String instanceId;
@Column(name = "current_flow_record_id")
private Long currentFlowRecordId; private Long currentFlowRecordId;
/** /**
* 隐患等级(1:一般隐患;2:重大隐患;0:安全问题) * 隐患等级(1:一般隐患;2:重大隐患;0:安全问题)
*/ */
@Column(name = "danger_level")
private String dangerLevel; private String dangerLevel;
/** /**
* 隐患等级名称 * 隐患等级名称
*/ */
@Column(name = "danger_level_name")
private String dangerLevelName; private String dangerLevelName;
/** /**
* 隐患地点 * 隐患地点
*/ */
@Column(name = "danger_position")
private String dangerPosition; private String dangerPosition;
/** /**
* 隐患类型(1:普通隐患;2:巡检隐患) * 隐患类型(1:普通隐患;2:巡检隐患)
*/ */
@Column(name = "danger_type")
private String dangerType; private String dangerType;
/** /**
* 隐患类型名称 * 隐患类型名称
*/ */
@Column(name = "danger_type_name")
private String dangerTypeName; private String dangerTypeName;
/** /**
* 备注 * 备注
*/ */
@Column(name = "remark")
private String remark; private String remark;
/** /**
* 整改类型(1:常规整改;2:安措计划;3:延期整改) * 整改类型(1:常规整改;2:安措计划;3:延期整改)
*/ */
@Column(name = "reform_type")
private String reformType; private String reformType;
/** /**
* 整改类型名称 * 整改类型名称
*/ */
@Column(name = "reform_type_name")
private String reformTypeName; private String reformTypeName;
/** /**
* 限制时间 * 限制时间
*/ */
@Column(name = "reform_limit_date")
private Date reformLimitDate; private Date reformLimitDate;
@Column(name = "overtime_state")
private Integer overtimeState; private Integer overtimeState;
@Column(name = "reform_json")
private String reformJson; private String reformJson;
/** /**
* 隐患状态(1:待评审;2:待治理;3:安措计划中;4:逾期未治理;5:待验证;6:治理完毕;7:已撤销) * 隐患状态(1:待评审;2:待治理;3:安措计划中;4:逾期未治理;5:待验证;6:治理完毕;7:已撤销)
*/ */
@Column(name = "danger_state")
private String dangerState; private String dangerState;
/** /**
* 隐患状态名称 * 隐患状态名称
*/ */
@Column(name = "danger_state_name")
private String dangerStateName; private String dangerStateName;
/** /**
* 发现人 * 发现人
*/ */
@Column(name = "discoverer_user_id")
private String discovererUserId; private String discovererUserId;
@Column(name = "discoverer_department_id")
private String discovererDepartmentId; private String discovererDepartmentId;
@Column(name = "photo_urls")
private String photoUrls; private String photoUrls;
/** /**
* 是否删除(0:否;1:是) * 是否删除(0:否;1:是)
*/ */
@Column(name = "deleted")
private Boolean deleted; private Boolean deleted;
/** /**
* 记录修改时间 * 记录修改时间
*/ */
@Column(name = "update_date")
private Date updateDate; private Date updateDate;
/** /**
* 延期治理时间 * 延期治理时间
*/ */
@Column(name = "delay_limit_date")
private Date delayLimitDate; private Date delayLimitDate;
/** /**
* 问题描述 * 问题描述
*/ */
@Column(name = "problem_description")
private String problemDescription; private String problemDescription;
/** /**
* 原因分析 * 原因分析
*/ */
@Column(name = "reason_analysis")
private String reasonAnalysis; private String reasonAnalysis;
/** /**
* 举一反三 * 举一反三
*/ */
@Column(name = "infer_other_things")
private String inferOtherThings; private String inferOtherThings;
/** /**
* 检查记录创建的隐患检查项对应id * 检查记录创建的隐患检查项对应id
*/ */
@Column(name = "biz_id")
private Long bizId; private Long bizId;
/** /**
* 建筑id * 建筑id
*/ */
@Column(name = "structure_id")
private Long structureId; private Long structureId;
/** /**
* 建筑名称 * 建筑名称
*/ */
@Column(name = "structure_name")
private String structureName; private String structureName;
@Column(name = "instance_key")
private String instanceKey; private String instanceKey;
/** /**
* 业务类型(不同业务创建的隐患以此区分:巡检隐患、防火监督隐患、其他隐患。。。) * 业务类型(不同业务创建的隐患以此区分:巡检隐患、防火监督隐患、其他隐患。。。)
*/ */
@Column(name = "biz_type")
private String bizType; private String bizType;
/** /**
...@@ -214,6 +184,19 @@ public class LatentDanger extends BasicEntity { ...@@ -214,6 +184,19 @@ public class LatentDanger extends BasicEntity {
/** /**
* 业务信息 * 业务信息
*/ */
@Column(name = "biz_info") @TableField(typeHandler = JacksonTypeHandler.class)
private String bizInfo; private JSONObject bizInfo;
/**
* 是否审核状态
*/
@TableField(exist = false)
private Boolean unReviewed;
public Boolean getUnReviewed() {
if ("dangerSubmit".equals(this.getDangerState())) {
return true;
}
return false;
}
} }
...@@ -146,6 +146,9 @@ public class LatentDangerController extends BaseController { ...@@ -146,6 +146,9 @@ public class LatentDangerController extends BaseController {
String userId = user.getUserId(); String userId = user.getUserId();
DangerExecuteSubmitDto executeSubmitDto = iLatentDangerService.execute(latentDangerExecuteParam, userId, DangerExecuteSubmitDto executeSubmitDto = iLatentDangerService.execute(latentDangerExecuteParam, userId,
userRealName, deptId, departmentName, reginParams); userRealName, deptId, departmentName, reginParams);
if (!executeSubmitDto.getIsOk()) {
throw new Exception(executeSubmitDto.getMsg());
}
// iLatentDangerService.freshRiskJudgmentLangerCount(latentDangerExecuteParam);//更新统计 // iLatentDangerService.freshRiskJudgmentLangerCount(latentDangerExecuteParam);//更新统计
// 执行通过,发送执行结果消息 // 执行通过,发送执行结果消息
// if (executeSubmitDto.getIsOk()) { // if (executeSubmitDto.getIsOk()) {
...@@ -317,4 +320,15 @@ public class LatentDangerController extends BaseController { ...@@ -317,4 +320,15 @@ public class LatentDangerController extends BaseController {
return ResponseHelper.buildResponse(iLatentDangerService.dangerAudit(latentDangerDto, executeType, userId, return ResponseHelper.buildResponse(iLatentDangerService.dangerAudit(latentDangerDto, executeType, userId,
userRealName, deptId, departmentName, reginParams)); userRealName, deptId, departmentName, reginParams));
} }
/**
* 隐患审核分页列表
*/
@ApiOperation(value = "隐患审核分页列表", notes = "隐患审核分页列表")
@PostMapping(value = "/supervision/page/reviewList")
@TycloudOperation(ApiLevel = UserType.AGENCY)
public ResponseModel reviewListDanger(@ApiParam(value = "查询条件", required = true) @RequestBody PageParam pageParam) throws Exception {
IPage<LatentDanger> result = iLatentDangerService.reviewListDanger(pageParam);
return ResponseHelper.buildResponse(result);
}
} }
...@@ -6,6 +6,7 @@ import lombok.Data; ...@@ -6,6 +6,7 @@ import lombok.Data;
import javax.persistence.Column; import javax.persistence.Column;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* @author tb * @author tb
...@@ -134,4 +135,10 @@ public class LatentDangerDto { ...@@ -134,4 +135,10 @@ public class LatentDangerDto {
* 业务信息 * 业务信息
*/ */
private JSONObject bizInfo; private JSONObject bizInfo;
/**
* 是否审核状态
*/
private Boolean unReviewed;
} }
...@@ -1139,17 +1139,15 @@ public class LatentDangerServiceImpl extends BaseService<LatentDangerBo, LatentD ...@@ -1139,17 +1139,15 @@ public class LatentDangerServiceImpl extends BaseService<LatentDangerBo, LatentD
String departmentName, String departmentName,
DangerExecuteSubmitDto executeSubmitDto, DangerExecuteSubmitDto executeSubmitDto,
ReginParams reginParams) throws Exception { ReginParams reginParams) throws Exception {
// TODO 查询隐患的巡查信息 // 隐患的巡查信息
JSONObject bizInfo = JSONObject.parseObject(latentDanger.getBizInfo()); JSONObject bizInfo = latentDanger.getBizInfo();
if (ValidationUtil.isEmpty(bizInfo)) { if (ValidationUtil.isEmpty(bizInfo) || ValidationUtil.isEmpty(bizInfo.get("planType")) || ValidationUtil.isEmpty(bizInfo.get("accompanyingUserId"))) {
executeSubmitDto.setIsOk(false); executeSubmitDto.setIsOk(false);
executeSubmitDto.setMsg("业务信息错误"); executeSubmitDto.setMsg("业务信息错误");
return executeSubmitDto; return executeSubmitDto;
} }
String planType = ValidationUtil.isEmpty(bizInfo.get("planType")) ? "special" : String planType = bizInfo.get("planType").toString();
bizInfo.get("planType").toString(); String taskUserId = bizInfo.get("accompanyingUserId").toString();
String taskUserId = ValidationUtil.isEmpty(bizInfo.get("taskUserId")) ? userId :
bizInfo.get("taskUserId").toString();
String processInstanceId = latentDanger.getInstanceId(); String processInstanceId = latentDanger.getInstanceId();
String currentDangerState = latentDanger.getDangerState(); String currentDangerState = latentDanger.getDangerState();
...@@ -1191,6 +1189,7 @@ public class LatentDangerServiceImpl extends BaseService<LatentDangerBo, LatentD ...@@ -1191,6 +1189,7 @@ public class LatentDangerServiceImpl extends BaseService<LatentDangerBo, LatentD
return executeSubmitDto; return executeSubmitDto;
} }
// 工作流条件执行
if (LatentDangerState.SupervisionDangerStateEnum.现场确认.getCode().equals(latentDanger.getDangerState())) { if (LatentDangerState.SupervisionDangerStateEnum.现场确认.getCode().equals(latentDanger.getDangerState())) {
condition = planType; condition = planType;
} else { } else {
...@@ -1198,40 +1197,40 @@ public class LatentDangerServiceImpl extends BaseService<LatentDangerBo, LatentD ...@@ -1198,40 +1197,40 @@ public class LatentDangerServiceImpl extends BaseService<LatentDangerBo, LatentD
} }
// 执行任务(带权限校验) // 执行任务(带权限校验)
Boolean executeResult = workflowExecuteService.CompleteTask(processInstanceId, condition, reginParams); boolean executeResult = workflowExecuteService.CompleteTask(processInstanceId, condition, reginParams);
// 校验权限
// Boolean executeResult = workflowExecuteService.excuteTask(processInstanceId, condition);
if (!executeResult) { if (!executeResult) {
executeSubmitDto.setIsOk(false); executeSubmitDto.setIsOk(false);
executeResultMsg = "任务执行失败"; executeResultMsg = "任务执行失败";
} }
String nextState = ""; String nextState = "";
String nextStateName = ""; String nextStateName = "";
if (ExecuteTypeEnum.通过.getCode().equals(param.getExecuteType())) { if (ExecuteTypeEnum.通过.getCode().equals(param.getExecuteType())) {
// 执行成功更新隐患状态 // 执行成功更新隐患状态
LatentDangerState.SupervisionDangerStateEnum nextStateEnum = LatentDangerState.SupervisionDangerStateEnum nextStateEnum =
LatentDangerState.SupervisionDangerStateEnum.getEnumByCode(currentStateEnum.getNext()); LatentDangerState.SupervisionDangerStateEnum.getEnumByCode(currentStateEnum.getNext());
nextState = nextStateEnum.getCode(); // 单位检查提交整改资料的下一节点需特殊处理
nextStateName = nextStateEnum.getName(); if ("supervised".equals(planType)) {
// 当隐患状态是现场确认时,在执行完节点后需要将检查组长id设置为下个节点执行人 if (LatentDangerState.SupervisionDangerStateEnum.提交整改资料.getCode().equals(currentDangerState)) {
if (LatentDangerState.SupervisionDangerStateEnum.现场确认.getCode().equals(currentDangerState)) { nextStateEnum = LatentDangerState.SupervisionDangerStateEnum.整改检查组长确认;
Object result = workflowExecuteService.setTaskAssign(processInstanceId, taskUserId); }
if (!(Boolean) result) { if (LatentDangerState.SupervisionDangerStateEnum.整改检查组长确认.getCode().equals(currentDangerState)) {
executeSubmitDto.setIsOk(false); nextStateEnum = LatentDangerState.SupervisionDangerStateEnum.整改检查负责人确认;
executeResultMsg = "设置节点执行人失败"; }
if (LatentDangerState.SupervisionDangerStateEnum.整改检查负责人确认.getCode().equals(currentDangerState)) {
nextStateEnum = LatentDangerState.SupervisionDangerStateEnum.整改检查分管领导确认;
} }
} }
nextState = nextStateEnum.getCode();
nextStateName = nextStateEnum.getName();
if (("supervised".equals(planType) && if (("supervised".equals(planType) &&
LatentDangerState.SupervisionDangerStateEnum.整改检查分管领导确认.getCode().equals(currentDangerState)) LatentDangerState.SupervisionDangerStateEnum.整改检查分管领导确认.getCode().equals(currentDangerState))
|| LatentDangerState.SupervisionDangerStateEnum.整改二次审核确认.getCode().equals(currentDangerState)) { || LatentDangerState.SupervisionDangerStateEnum.整改二次审核确认.getCode().equals(currentDangerState)) {
latentDanger.setDangerState(LatentDangerState.SupervisionDangerStateEnum.整改完毕.getCode()); latentDanger.setDangerState(LatentDangerState.SupervisionDangerStateEnum.整改完毕.getCode());
latentDanger.setDangerStateName(LatentDangerState.SupervisionDangerStateEnum.整改完毕.getName()); latentDanger.setDangerStateName(LatentDangerState.SupervisionDangerStateEnum.整改完毕.getName());
executeResultMsg = latentDanger.getDangerStateName() + ExecuteTypeEnum.通过.getName();
} }
executeResultMsg = latentDanger.getDangerStateName() + ExecuteTypeEnum.通过.getName();
} else { } else {
LatentDangerState.SupervisionDangerStateEnum nextStateEnum = LatentDangerState.SupervisionDangerStateEnum nextStateEnum =
LatentDangerState.SupervisionDangerStateEnum.getEnumByCode(currentStateEnum.getRejectNext()); LatentDangerState.SupervisionDangerStateEnum.getEnumByCode(currentStateEnum.getRejectNext());
...@@ -1242,6 +1241,15 @@ public class LatentDangerServiceImpl extends BaseService<LatentDangerBo, LatentD ...@@ -1242,6 +1241,15 @@ public class LatentDangerServiceImpl extends BaseService<LatentDangerBo, LatentD
latentDanger.setDangerState(nextState); latentDanger.setDangerState(nextState);
latentDanger.setDangerStateName(nextStateName); latentDanger.setDangerStateName(nextStateName);
// 当隐患状态是现场确认时,在执行完节点后需要将检查组长id设置为下个节点执行人
if (LatentDangerState.SupervisionDangerStateEnum.现场确认.getCode().equals(currentDangerState)) {
Object result = workflowExecuteService.setTaskAssign(processInstanceId, taskUserId);
if (!(Boolean) result) {
executeSubmitDto.setIsOk(false);
executeResultMsg = "设置节点执行人失败";
}
}
// 整改分配责任人 // 整改分配责任人
if (LatentDangerState.SupervisionDangerStateEnum.整改任务分配.getCode().equals(currentDangerState)) { if (LatentDangerState.SupervisionDangerStateEnum.整改任务分配.getCode().equals(currentDangerState)) {
taskUserId = param.getReformUserId(); taskUserId = param.getReformUserId();
...@@ -1664,10 +1672,19 @@ public class LatentDangerServiceImpl extends BaseService<LatentDangerBo, LatentD ...@@ -1664,10 +1672,19 @@ public class LatentDangerServiceImpl extends BaseService<LatentDangerBo, LatentD
if (StringUtil.isNotEmpty(idsStr)) { if (StringUtil.isNotEmpty(idsStr)) {
// 查询指定隐患 // 查询指定隐患
dangerIdList = Lists.newArrayList(idsStr.split(",")); dangerIdList = Lists.newArrayList(idsStr.split(","));
} else { } else if ("0".equals(pageParam.get("my"))) {
// 不指定隐患id-我的任务 // 不指定隐患id-我的任务
JSONObject allTaskResult = workflowFeignService.getCurrentUserAllTaskList(workflowProcessDefinitionKey); JSONObject allTaskResult = workflowFeignService.getCurrentUserAllTaskList(workflowProcessDefinitionKey);
allTaskList = (List) allTaskResult.get("data"); allTaskList = (List) allTaskResult.get("data");
List<String> instanceIdList = Lists.newArrayList();
List<LatentDanger> dangers;
if (!ValidationUtil.isEmpty(allTaskList)) {
allTaskList.forEach(m -> instanceIdList.add(((Map)m).get("processInstanceId").toString()));
dangers =
this.baseMapper.selectList(new LambdaQueryWrapper<LatentDanger>().in(LatentDanger::getInstanceId, instanceIdList));
List<String> finalDangerIdList = dangerIdList;
dangers.forEach(d -> finalDangerIdList.add(d.getId().toString()));
}
// 没设置隐患状态,说明查询 我的任务 或 所有是 提交隐患 状态的任务 // 没设置隐患状态,说明查询 我的任务 或 所有是 提交隐患 状态的任务
if (ValidationUtil.isEmpty(pageParam.get("dangerState"))) { if (ValidationUtil.isEmpty(pageParam.get("dangerState"))) {
...@@ -1690,19 +1707,19 @@ public class LatentDangerServiceImpl extends BaseService<LatentDangerBo, LatentD ...@@ -1690,19 +1707,19 @@ public class LatentDangerServiceImpl extends BaseService<LatentDangerBo, LatentD
} }
} }
if (ValidationUtil.isEmpty(pageParam.get(DESC))) { if (!ValidationUtil.isEmpty(pageParam.get("order"))) {
order = DESC; order = pageParam.get("order").toString();
} }
LambdaQueryWrapper<LatentDanger> queryWrapper = new LambdaQueryWrapper(); LambdaQueryWrapper<LatentDanger> queryWrapper = new LambdaQueryWrapper();
queryWrapper.like(!ValidationUtil.isEmpty(pageParam.get("name")), queryWrapper.like(!ValidationUtil.isEmpty(pageParam.get("name")),
LatentDanger::getDangerName, pageParam.get("name")) LatentDanger::getDangerName, pageParam.get("name"))
.eq(!ValidationUtil.isEmpty(pageParam.get("dangerLevel")), LatentDanger::getDangerLevel, .eq(!ValidationUtil.isEmpty(pageParam.get("dangerLevel")), LatentDanger::getDangerLevel,
pageParam.get("dangerLevel")). pageParam.get("dangerLevel"))
eq(!ValidationUtil.isEmpty(pageParam.get("dangerState")), LatentDanger::getDangerState, .eq(!ValidationUtil.isEmpty(pageParam.get("dangerState")), LatentDanger::getDangerState,
pageParam.get("dangerState")) pageParam.get("dangerState"))
.eq(LatentDanger::getDeleted, false) .eq(LatentDanger::getDeleted, false)
.in(!ValidationUtil.isEmpty(pageParam.get("dangerIds")), LatentDanger::getId, dangerIdList) .in(!ValidationUtil.isEmpty(dangerIdList), LatentDanger::getId, dangerIdList)
.in(!ValidationUtil.isEmpty(structureIdList), LatentDanger::getStructureId, structureIdList) .in(!ValidationUtil.isEmpty(structureIdList), LatentDanger::getStructureId, structureIdList)
.orderByDesc(DESC == order, LatentDanger::getUpdateDate); .orderByDesc(DESC == order, LatentDanger::getUpdateDate);
return latentDangerMapper.selectPage(page, queryWrapper); return latentDangerMapper.selectPage(page, queryWrapper);
...@@ -1835,7 +1852,9 @@ public class LatentDangerServiceImpl extends BaseService<LatentDangerBo, LatentD ...@@ -1835,7 +1852,9 @@ public class LatentDangerServiceImpl extends BaseService<LatentDangerBo, LatentD
if (!ValidationUtil.isEmpty(searchParam.getDangerIds())) { if (!ValidationUtil.isEmpty(searchParam.getDangerIds())) {
lambdaQueryWrapper.in(LatentDanger::getId, Lists.newArrayList(searchParam.getDangerIds().split(","))); lambdaQueryWrapper.in(LatentDanger::getId, Lists.newArrayList(searchParam.getDangerIds().split(",")));
} }
return this.baseMapper.selectList(lambdaQueryWrapper); List<LatentDanger> latentDangers = this.baseMapper.selectList(lambdaQueryWrapper);
return latentDangers;
} }
@Override @Override
...@@ -1900,4 +1919,15 @@ public class LatentDangerServiceImpl extends BaseService<LatentDangerBo, LatentD ...@@ -1900,4 +1919,15 @@ public class LatentDangerServiceImpl extends BaseService<LatentDangerBo, LatentD
} }
return true; return true;
} }
@Override
public IPage<LatentDanger> reviewListDanger(PageParam pageParam) throws Exception {
String type = pageParam.get("type").toString();
if ("audit".equals(type)) {
pageParam.put("dangerState", LatentDangerState.SupervisionDangerStateEnum.现场确认.getCode());
} else if ("review".equals(type)) {
pageParam.put("dangerState", LatentDangerState.SupervisionDangerStateEnum.提交整改资料.getCode());
}
return listDanger(pageParam);
}
} }
...@@ -138,4 +138,12 @@ public interface ILatentDangerService { ...@@ -138,4 +138,12 @@ public interface ILatentDangerService {
*/ */
Object dangerAudit(LatentDangerDto latentDangerDto, Integer executeType, String userId, String userName, Object dangerAudit(LatentDangerDto latentDangerDto, Integer executeType, String userId, String userName,
String deptId, String deptName, ReginParams reginParams) throws Exception; String deptId, String deptName, ReginParams reginParams) throws Exception;
/**
* 隐患审核分页查询
*
* @param pageParam
* @return
*/
IPage<LatentDanger> reviewListDanger(PageParam pageParam) throws Exception;
} }
...@@ -80,4 +80,6 @@ public class LatentDangerDetailVo { ...@@ -80,4 +80,6 @@ public class LatentDangerDetailVo {
private String inferOtherThings; private String inferOtherThings;
private String taskId; private String taskId;
private JSONObject bizInfo;
} }
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