Commit e2111b2f authored by 李博今's avatar 李博今

导入排课方法更新

parent 875dd83c
...@@ -84,7 +84,7 @@ public interface BArrangeRepository extends BaseMapper<BArrange> { ...@@ -84,7 +84,7 @@ public interface BArrangeRepository extends BaseMapper<BArrange> {
"LEFT JOIN b_teacher on b_teacher.`code` = b_schedule_dto.teacher_code " + "LEFT JOIN b_teacher on b_teacher.`code` = b_schedule_dto.teacher_code " +
"LEFT JOIN s_user on s_user.login_name = b_teacher.`code` " + "LEFT JOIN s_user on s_user.login_name = b_teacher.`code` " +
"where sub_agency_id = #{subAgencyId} " + "where sub_agency_id = #{subAgencyId} " +
"ORDER BY lesson_code,class_code,teacher_code,week " + "ORDER BY seq,lesson_code,class_code,teacher_code,week " +
//"GROUP BY lesson_code,teacher_code,class_code " + //"GROUP BY lesson_code,teacher_code,class_code " +
"</script>") "</script>")
@ResultMap(value = "scheduleDtoResultMap") @ResultMap(value = "scheduleDtoResultMap")
......
...@@ -268,7 +268,7 @@ public class BArrangeServiceImpl implements BArrangeService { ...@@ -268,7 +268,7 @@ public class BArrangeServiceImpl implements BArrangeService {
"周二", "周三", "周四", "周五", "周六","周日", "上课地点", "教室编号", "备注"}; "周二", "周三", "周四", "周五", "周六","周日", "上课地点", "教室编号", "备注"};
} }
//ArrayList<String[]> values = ExcelUtil.importExcel(hwb, headers,true,2); //获取excel数据 //ArrayList<String[]> values = ExcelUtil.importExcel(hwb, headers,true,2); //获取excel数据
ArrayList<String[]> values = ExcelUtil.importExcel(hwb, headers,true,2); //获取excel数据 ArrayList<String[]> values = ExcelUtil.importExcelv2(hwb, headers,2); //获取excel数据
if(values.get(0)[3]==null || values.get(0)[14]==null ||values.get(0)[16]==null ||values.get(0)[26]==null || if(values.get(0)[3]==null || values.get(0)[14]==null ||values.get(0)[16]==null ||values.get(0)[26]==null ||
values.get(0)[3].equals("") || values.get(0)[14].equals("") ||values.get(0)[16].equals("") ||values.get(0)[26].equals("")){ values.get(0)[3].equals("") || values.get(0)[14].equals("") ||values.get(0)[16].equals("") ||values.get(0)[26].equals("")){
throw new ServiceException(ResultServiceEnums.EXCEL_IMPORT_DATA_HAS_NULL); throw new ServiceException(ResultServiceEnums.EXCEL_IMPORT_DATA_HAS_NULL);
...@@ -281,81 +281,41 @@ public class BArrangeServiceImpl implements BArrangeService { ...@@ -281,81 +281,41 @@ public class BArrangeServiceImpl implements BArrangeService {
List<String> teacherCodes = new ArrayList<>(); List<String> teacherCodes = new ArrayList<>();
List<String> classCodes = new ArrayList<>(); List<String> classCodes = new ArrayList<>();
List<String> roomCodes = new ArrayList<>(); List<String> roomCodes = new ArrayList<>();
String[] wholeValue = new String[28];
int index = 0; int index = 0;
for (String[] value : values) { for (String[] value : values) {
ScheduleDto scheduleDto = new ScheduleDto(); ScheduleDto scheduleDto = new ScheduleDto();
//判断1:根据课程编号查询是否有此门课程; //判断1:根据课程编号查询是否有此门课程;
if(value[3].equals("")){ if(bLessonRepository.selectOne(new BLesson(value[3].trim()))==null){
value[3] = wholeValue[3]; lessonCodes.add(value[3]);
}else{ continue;
if(bLessonRepository.selectOne(new BLesson(value[3].trim()))==null){
lessonCodes.add(value[3]);
continue;
}else{
wholeValue[3] = value[3];
}
} }
//判断2:根据教师编号查询是否有此教师; //判断2:根据教师编号查询是否有此教师;
SysUser user1 =new SysUser(); SysUser user1 =new SysUser();
if(value[14].equals("")){ user1.setLoginName(value[14]);
value[14] = wholeValue[14]; user1.setDelFlag("0");
}else{ user1.setFlag("1");
user1.setLoginName(value[14]); if (sysUserMapper.selectOne(user1) == null) {
user1.setDelFlag("0"); teacherCodes.add(value[14]);
user1.setFlag("1"); continue;
if (sysUserMapper.selectOne(user1) == null) {
teacherCodes.add(value[14]);
continue;
}else{
wholeValue[14] = value[14];
}
} }
//判断3:根据班级编号查询是否有此班级; //判断3:根据班级编号查询是否有此班级;
if(value[16].equals("")){ if (bEduClassRepository.selectOne(new BEduClass(value[16].trim())) == null) {
value[16] = wholeValue[16]; classCodes.add(value[16]);
}else{ continue;
if (bEduClassRepository.selectOne(new BEduClass(value[16].trim())) == null) {
classCodes.add(value[16]);
continue;
}else{
wholeValue[16] = value[16];
}
} }
//判断4:根据教室编号查询是否有此教室; //判断4:根据教室编号查询是否有此教室;
//如果存在星期日,向后推一格 //如果存在星期日,向后推一格
if(contanSunday){ if(contanSunday){
if(value[27].equals("")){ if(bRoomsRepository.selectOne(new BRooms(value[27].trim()))==null){
value[27] = wholeValue[27]; roomCodes.add(value[27]);
}else{ continue;
if(bRoomsRepository.selectOne(new BRooms(value[27].trim()))==null){
roomCodes.add(value[27]);
continue;
}else{
wholeValue[27] = value[27];
}
} }
}else { }else {
if(value[26].equals("")){ if(bRoomsRepository.selectOne(new BRooms(value[26].trim()))==null){
value[26] = wholeValue[26]; roomCodes.add(value[26]);
}else{ continue;
if(bRoomsRepository.selectOne(new BRooms(value[26].trim()))==null){
roomCodes.add(value[26]);
continue;
}else{
wholeValue[26] = value[26];
}
} }
} }
//合法:通过了四次判断,证明可建立该排课 //合法:通过了四次判断,证明可建立该排课
scheduleDto.setLessonCode(value[3]); scheduleDto.setLessonCode(value[3]);
scheduleDto.setTeacherCode(value[14]); scheduleDto.setTeacherCode(value[14]);
...@@ -394,8 +354,6 @@ public class BArrangeServiceImpl implements BArrangeService { ...@@ -394,8 +354,6 @@ public class BArrangeServiceImpl implements BArrangeService {
bSlScheduleRepository.updateStatusBySubAgencyId(subAgencyId,"1"); bSlScheduleRepository.updateStatusBySubAgencyId(subAgencyId,"1");
} }
String result = ""; String result = "";
if (scheduleDtos.size()>0){ if (scheduleDtos.size()>0){
bArrangeRepository.avoidRepeatDto(subAgencyId); bArrangeRepository.avoidRepeatDto(subAgencyId);
...@@ -443,8 +401,7 @@ public class BArrangeServiceImpl implements BArrangeService { ...@@ -443,8 +401,7 @@ public class BArrangeServiceImpl implements BArrangeService {
"授课学时", "上机学时", "实验学时", "考试类型", "任课教师", "教师编号", "教学班组名", "教学班组编号", "周次", "周学时", "周一", "授课学时", "上机学时", "实验学时", "考试类型", "任课教师", "教师编号", "教学班组名", "教学班组编号", "周次", "周学时", "周一",
"周二", "周三", "周四", "周五", "周六","周日", "上课地点", "教室编号", "备注"}; "周二", "周三", "周四", "周五", "周六","周日", "上课地点", "教室编号", "备注"};
} }
//ArrayList<String[]> values = ExcelUtil.importExcel(hwb, headers,true,2); //获取excel数据 ArrayList<String[]> values = ExcelUtil.importExcelv2(hwb, headers,2); //获取excel数据
ArrayList<String[]> values = ExcelUtil.importExcel(hwb, headers,true,2); //获取excel数据
if(values.get(0)[3]==null || values.get(0)[14]==null ||values.get(0)[16]==null ||values.get(0)[26]==null || if(values.get(0)[3]==null || values.get(0)[14]==null ||values.get(0)[16]==null ||values.get(0)[26]==null ||
values.get(0)[3].equals("") || values.get(0)[14].equals("") ||values.get(0)[16].equals("") ||values.get(0)[26].equals("")){ values.get(0)[3].equals("") || values.get(0)[14].equals("") ||values.get(0)[16].equals("") ||values.get(0)[26].equals("")){
throw new ServiceException(ResultServiceEnums.EXCEL_IMPORT_DATA_HAS_NULL); throw new ServiceException(ResultServiceEnums.EXCEL_IMPORT_DATA_HAS_NULL);
...@@ -459,80 +416,40 @@ public class BArrangeServiceImpl implements BArrangeService { ...@@ -459,80 +416,40 @@ public class BArrangeServiceImpl implements BArrangeService {
List<String> roomCodes = new ArrayList<>(); List<String> roomCodes = new ArrayList<>();
List<String> weekErrors = new ArrayList<>(); List<String> weekErrors = new ArrayList<>();
String[] wholeValue = new String[28];
for (String[] value : values) { for (String[] value : values) {
//判断1:根据课程编号查询是否有此门课程; //判断1:根据课程编号查询是否有此门课程;
if(value[3].equals("")){ if(bLessonRepository.selectOne(new BLesson(value[3].trim()))==null){
value[3] = wholeValue[3]; lessonCodes.add(value[3]);
}else{ continue;
if(bLessonRepository.selectOne(new BLesson(value[3].trim()))==null){
lessonCodes.add(value[3]);
continue;
}else{
wholeValue[3] = value[3];
}
} }
//判断2:根据教师编号查询是否有此教师; //判断2:根据教师编号查询是否有此教师;
SysUser user1 =new SysUser(); SysUser user1 =new SysUser();
if(value[14].equals("")){ user1.setLoginName(value[14]);
value[14] = wholeValue[14]; user1.setDelFlag("0");
}else{ user1.setFlag("1");
user1.setLoginName(value[14]); if (sysUserMapper.selectOne(user1) == null) {
user1.setDelFlag("0"); teacherCodes.add(value[14]);
user1.setFlag("1"); continue;
if (sysUserMapper.selectOne(user1) == null) {
teacherCodes.add(value[14]);
continue;
}else{
wholeValue[14] = value[14];
}
} }
//判断3:根据班级编号查询是否有此班级; //判断3:根据班级编号查询是否有此班级;
if(value[16].equals("")){ if (bEduClassRepository.selectOne(new BEduClass(value[16].trim())) == null) {
value[16] = wholeValue[16]; classCodes.add(value[16]);
}else{ continue;
if (bEduClassRepository.selectOne(new BEduClass(value[16].trim())) == null) {
classCodes.add(value[16]);
continue;
}else{
wholeValue[16] = value[16];
}
} }
//判断4:根据教室编号查询是否有此教室; //判断4:根据教室编号查询是否有此教室;
//如果存在星期日,向后推一格 //如果存在星期日,向后推一格
if(contanSunday){ if(contanSunday){
if(value[27].equals("")){ if(bRoomsRepository.selectOne(new BRooms(value[27].trim()))==null){
value[27] = wholeValue[27]; roomCodes.add(value[27]);
}else{ continue;
if(bRoomsRepository.selectOne(new BRooms(value[27].trim()))==null){
roomCodes.add(value[27]);
continue;
}else{
wholeValue[27] = value[27];
}
} }
}else { }else {
if(value[26].equals("")){ if(bRoomsRepository.selectOne(new BRooms(value[26].trim()))==null){
value[26] = wholeValue[26]; roomCodes.add(value[26]);
}else{ continue;
if(bRoomsRepository.selectOne(new BRooms(value[26].trim()))==null){
roomCodes.add(value[26]);
continue;
}else{
wholeValue[26] = value[26];
}
} }
} }
String week = value[17]; String week = value[17];
if(week.contains("-")){ if(week.contains("-")){
int location = week.indexOf("-"); int location = week.indexOf("-");
......
...@@ -189,6 +189,8 @@ public enum ResultServiceEnums { ...@@ -189,6 +189,8 @@ public enum ResultServiceEnums {
DATA_HAS_USED(100,"当前数据被使用,不可删除"), DATA_HAS_USED(100,"当前数据被使用,不可删除"),
CAN_NOT_OVERLAP(101,"时间区间不可重叠"), CAN_NOT_OVERLAP(101,"时间区间不可重叠"),
ROLE_HAS_USED(102,"当前角色被使用,不可删除")
; ;
private Integer code; private Integer code;
......
...@@ -52,14 +52,14 @@ public class JwtAuthenTokenFilter extends OncePerRequestFilter { ...@@ -52,14 +52,14 @@ public class JwtAuthenTokenFilter extends OncePerRequestFilter {
/**/ /**/
String lk = rcRedisServiceImpl.get("lk"); String lk = rcRedisServiceImpl.get("lk");
if(StringUtils.isBlank(lk) || !"1".equals(lk)){ // if(StringUtils.isBlank(lk) || !"1".equals(lk)){
if(permitRes==-1) { // if(permitRes==-1) {
Result result = new Result(); // Result result = new Result();
result.setCode(202); // result.setCode(202);
ResponseUtil.responseResult(response, result); // ResponseUtil.responseResult(response, result);
return; // return;
} // }
} // }
// 取得header // 取得header
String authHeader = request.getHeader(this.tokenHeader); String authHeader = request.getHeader(this.tokenHeader);
//判断header头 //判断header头
......
...@@ -130,7 +130,8 @@ public class ExcelUtil { ...@@ -130,7 +130,8 @@ public class ExcelUtil {
return repeatMessage.toString(); return repeatMessage.toString();
} }
public static ArrayList<String[]> importExcelv2(HSSFWorkbook hwb, String[] headers, boolean allowEmpty , int headNum){ public static ArrayList<String[]> importExcelv2(HSSFWorkbook hwb, String[] headers, int headNum){
String result = "";
ArrayList<String[]> values = new ArrayList<>(); ArrayList<String[]> values = new ArrayList<>();
for (int i = 0; i < hwb.getNumberOfSheets(); i++) { for (int i = 0; i < hwb.getNumberOfSheets(); i++) {
HSSFSheet hs = hwb.getSheetAt(i); HSSFSheet hs = hwb.getSheetAt(i);
...@@ -140,7 +141,6 @@ public class ExcelUtil { ...@@ -140,7 +141,6 @@ public class ExcelUtil {
List<CellRangeAddress> cellRangeAddressList = hs.getMergedRegions(); List<CellRangeAddress> cellRangeAddressList = hs.getMergedRegions();
int firstrownum = hs.getFirstRowNum(); //第一行 int firstrownum = hs.getFirstRowNum(); //第一行
int lastrownum = hs.getLastRowNum(); //最后一行 int lastrownum = hs.getLastRowNum(); //最后一行
List<Integer> emptyColList=new ArrayList<>();
for (int j = firstrownum + headNum; j <= lastrownum; j++) { for (int j = firstrownum + headNum; j <= lastrownum; j++) {
HSSFRow hr = hs.getRow(j); HSSFRow hr = hs.getRow(j);
if(hr==null||hr.getLastCellNum()<0){ if(hr==null||hr.getLastCellNum()<0){
...@@ -149,42 +149,8 @@ public class ExcelUtil { ...@@ -149,42 +149,8 @@ public class ExcelUtil {
int firstcolumnnum = hr.getFirstCellNum(); int firstcolumnnum = hr.getFirstCellNum();
int lastcolumnnum = hr.getLastCellNum(); int lastcolumnnum = hr.getLastCellNum();
String[] value = new String[lastcolumnnum + 2]; String[] value = new String[lastcolumnnum + 2];
boolean hasEmpty = true;
//修改过!!!!!!!!!!!!
for (int k = 0; k < lastcolumnnum; k++) { for (int k = 0; k < lastcolumnnum; k++) {
HSSFCell hc = hr.getCell(k); HSSFCell hc = hr.getCell(k);
if(hc == null){
value[k] = "";
continue;
}
if (j==firstrownum + headNum) {
//判断表头那一列为空数据并记录。
if(parseDB(hc).trim().equals("")) {
emptyColList.add(-1);
}else{
emptyColList.add(k);
}
}
else {
if(allowEmpty){//允许单元格为空,但不允许整行为空时
//hc != null &&
if (hc != null && !parseDB(hc).trim().equals("")&&emptyColList.get(k)!=-1&&hasEmpty) {
//只要一行中有一个值不为空,即为正确数据
hasEmpty = false;
}
}else{//不允许单元格为空,只要一行中有一个值为空,即为错误数据
hasEmpty = false;
//hc != null &&
if (hc != null && parseDB(hc) != null && parseDB(hc).trim().equals("")&&emptyColList.get(k)!=-1) {
//在第j行第k列有空数据,且该列表头不是空的,则舍弃本行数据。
hasEmpty = true;
break;
}
}
}
//如果此单元格为空则插入"" //如果此单元格为空则插入""
if(hc == null){ if(hc == null){
value[k] = ""; value[k] = "";
...@@ -195,67 +161,70 @@ public class ExcelUtil { ...@@ -195,67 +161,70 @@ public class ExcelUtil {
if(j==firstrownum + headNum){ if(j==firstrownum + headNum){
for(int h=0;h<headers.length;h++){ for(int h=0;h<headers.length;h++){
if(!value[h].trim().equals(headers[h])){ if(!value[h].trim().equals(headers[h])){
System.out.println("导入头错误"); result += "导入头出现错误";
return null; return null;
} }
} }
}else{ }else{
if (!hasEmpty) { //判断是否是空数据并且存在空数据不是合并单元格
//判断是否是空数据并且存在空数据不是合并单元格 if(containSunday(hwb)){
if(containSunday(hwb)){ CellRangeAddress value3 = belongBigCell(cellRangeAddressList,j,3,hs);
CellRangeAddress value3 = belongBigCell(cellRangeAddressList,j,3,hs); CellRangeAddress value14 = belongBigCell(cellRangeAddressList,j,14,hs);
CellRangeAddress value14 = belongBigCell(cellRangeAddressList,j,14,hs); CellRangeAddress value16 = belongBigCell(cellRangeAddressList,j,16,hs);
CellRangeAddress value16 = belongBigCell(cellRangeAddressList,j,16,hs); CellRangeAddress value27 = belongBigCell(cellRangeAddressList,j,27,hs);
CellRangeAddress value27 = belongBigCell(cellRangeAddressList,j,27,hs); if((value[3] == null || value[3].equals("")) && value3 == null
if((value[3] == null || value[3].equals("")) && value3 == null || (value[14] == null || value[14].equals("")) && value14 == null
|| (value[14] == null || value[14].equals("")) && value14 == null || (value[16] == null || value[16].equals("")) && value16 == null
|| (value[16] == null || value[16].equals("")) && value16 == null || (value[27] == null || value[27].equals("")) && value27 == null){
|| (value[27] == null || value[27].equals("")) && value27 == null){ //如果存在,跳过插入
//如果存在,跳过插入 if(j != hs.getLastRowNum()){
continue; result += "第 "+ Integer.valueOf(j + 1) +" 行存在空数据";
}
if((value[3] == null || value[3].equals("")) && value3 != null){
value[3] = parseDB(hs.getRow(value3.getFirstRow()).getCell(value3.getFirstColumn()));
}
if((value[14] == null || value[14].equals("")) && value3 != null){
value[14] = parseDB(hs.getRow(value3.getFirstRow()).getCell(value3.getFirstColumn()));
}
if((value[16] == null || value[16].equals("")) && value3 != null){
value[16] = parseDB(hs.getRow(value3.getFirstRow()).getCell(value3.getFirstColumn()));
}
if((value[27] == null || value[27].equals("")) && value3 != null){
value[27] = parseDB(hs.getRow(value3.getFirstRow()).getCell(value3.getFirstColumn()));
}
}else{
CellRangeAddress value3 = belongBigCell(cellRangeAddressList,j,3,hs);
CellRangeAddress value14 = belongBigCell(cellRangeAddressList,j,14,hs);
CellRangeAddress value16 = belongBigCell(cellRangeAddressList,j,16,hs);
CellRangeAddress value26 = belongBigCell(cellRangeAddressList,j,26,hs);
if((value[3] == null || value[3].equals("")) && value3 == null
|| (value[14] == null || value[14].equals("")) && value14 == null
|| (value[16] == null || value[16].equals("")) && value16 == null
|| (value[26] == null || value[26].equals("")) && value26 == null){
//如果存在,跳过插入
continue;
}
//如果属于合并单元格并且为空,则插入此合并单元格数据
if((value[3] == null || value[3].equals("")) && value3 != null){
value[3] = parseDB(hs.getRow(value3.getFirstRow()).getCell(value3.getFirstColumn()));
} }
if((value[14] == null || value[14].equals("")) && value3 != null){ continue;
value[14] = parseDB(hs.getRow(value3.getFirstRow()).getCell(value3.getFirstColumn())); }
} if((value[3] == null || value[3].equals("")) && value3 != null){
if((value[16] == null || value[16].equals("")) && value3 != null){ value[3] = parseDB(hs.getRow(value3.getFirstRow()).getCell(value3.getFirstColumn()));
value[16] = parseDB(hs.getRow(value3.getFirstRow()).getCell(value3.getFirstColumn())); }
} if((value[14] == null || value[14].equals("")) && value3 != null){
if((value[26] == null || value[26].equals("")) && value3 != null){ value[14] = parseDB(hs.getRow(value14.getFirstRow()).getCell(value14.getFirstColumn()));
value[26] = parseDB(hs.getRow(value3.getFirstRow()).getCell(value3.getFirstColumn())); }
if((value[16] == null || value[16].equals("")) && value3 != null){
value[16] = parseDB(hs.getRow(value16.getFirstRow()).getCell(value16.getFirstColumn()));
}
if((value[27] == null || value[27].equals("")) && value3 != null){
value[27] = parseDB(hs.getRow(value27.getFirstRow()).getCell(value27.getFirstColumn()));
}
}else{
CellRangeAddress value3 = belongBigCell(cellRangeAddressList,j,3,hs);
CellRangeAddress value14 = belongBigCell(cellRangeAddressList,j,14,hs);
CellRangeAddress value16 = belongBigCell(cellRangeAddressList,j,16,hs);
CellRangeAddress value26 = belongBigCell(cellRangeAddressList,j,26,hs);
if((value[3] == null || value[3].equals("")) && value3 == null
|| (value[14] == null || value[14].equals("")) && value14 == null
|| (value[16] == null || value[16].equals("")) && value16 == null
|| (value[26] == null || value[26].equals("")) && value26 == null){
//如果存在,跳过插入
if(j != hs.getLastRowNum()){
result += "第 "+ Integer.valueOf(j + 1) +" 行存在空数据";
} }
continue;
}
//如果属于合并单元格并且为空,则插入此合并单元格数据
if((value[3] == null || value[3].equals("")) && value3 != null){
value[3] = parseDB(hs.getRow(value3.getFirstRow()).getCell(value3.getFirstColumn()));
}
if((value[14] == null || value[14].equals("")) && value3 != null){
value[14] = parseDB(hs.getRow(value14.getFirstRow()).getCell(value14.getFirstColumn()));
}
if((value[16] == null || value[16].equals("")) && value3 != null){
value[16] = parseDB(hs.getRow(value16.getFirstRow()).getCell(value16.getFirstColumn()));
}
if((value[26] == null || value[26].equals("")) && value3 != null){
value[26] = parseDB(hs.getRow(value26.getFirstRow()).getCell(value26.getFirstColumn()));
} }
values.add(value);
} }
values.add(value);
} }
} }
} }
......
...@@ -68,7 +68,7 @@ public class SysRoleServiceImpl implements SysRoleService { ...@@ -68,7 +68,7 @@ public class SysRoleServiceImpl implements SysRoleService {
int userCount = sysUserMapper.countUserByRole(id); int userCount = sysUserMapper.countUserByRole(id);
//如果仍然有用户(如果用户被逻辑删除,则忽略此角色,但如果用于被停用,则依然被计算)是此角色,则该角色不可删除 //如果仍然有用户(如果用户被逻辑删除,则忽略此角色,但如果用于被停用,则依然被计算)是此角色,则该角色不可删除
if(userCount > 0){ if(userCount > 0){
throw new ServiceException(ResultServiceEnums.DATA_HAS_USED); throw new ServiceException(ResultServiceEnums.ROLE_HAS_USED);
}else{ }else{
//删除该角色所有的关联信息 //删除该角色所有的关联信息
sysRoleRepository.deleteRoleMenuByRoleId(id); sysRoleRepository.deleteRoleMenuByRoleId(id);
......
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