Commit 271591d2 authored by hkl's avatar hkl

feat:1.人工检查数据导入bug

parent aac0e86f
......@@ -335,250 +335,250 @@ public class MovementRecordsMasterController extends JeecgController<MovementRec
}
@AutoLog(value = "导入")
@ApiOperation(value = "导入", notes = "导入 ")
@PostMapping(value = "/upload2")
@Transactional
public Result<String> uploadFile2(MultipartFile file, @ApiParam(name = "动静态几何尺寸主键id") String id) {
try {
//初始化数据模板
movementCourseService.lambdaUpdate()
.eq(MovementCourse::getMovementMasterId, id)
.remove();
movementCourseInfoService.lambdaUpdate()
.eq(MovementCourseInfo::getMovementMasterId, id)
.remove();
//时间校验
String pat = "\\d{4}.\\d{2}.\\d{2}";
Pattern p = Pattern.compile(pat);
//读取第一个sheet页的数据
ExcelReader reader = ExcelUtil.getReader(file.getInputStream(), 0);
//读取Excel中所有的数据,以行保存
List<List<Object>> rowRecords = reader.read();
// 获取excel的列数
int column = rowRecords.get(0).size();
//初始化列的索引
int skipColumnNum = 0;
//int seq = 1; // 第一个
//初始化起始里程
String startingAndEndingMileageStr = "";
//初始化终点里程
String endingMileageStr = "";
//初始化曲线半径
String curveRadius = "";
//初始化超高
String superHigh = "";
//初始化加宽
String widen = "";
//初始化顺坡率
String slopeRatio = "";
//初始化长度
String longExtent = "";
//初始化备注
String remark = "";
//初始化起始里程表主键
String courseId = "";
// 如果做完了一个解析就跳过
List<MovementCourse> movementCourses = new ArrayList<>();
List<MovementCourseInfo> resultList = new ArrayList<>();
//初始化里程排序
int sort = 0;
//初始化测点
int measurePoint = 0;
//初始化轨号排序
int infoSort = 0;
for (int i = 0; i < column; i++) {
skipColumnNum++;
if (ObjectUtil.isEmpty(startingAndEndingMileageStr)) {
// 1.起止里程
List<Object> startingAndEndingMileage = rowRecords.get(3);
Object mileageObject = startingAndEndingMileage.get(i);
String mileage = mileageObject.toString();
//超高、加宽、顺坡率、线路全长
List<Object> courseList = rowRecords.get(4);
Object courseObject = courseList.get(i);
String courseStr = courseObject.toString();
if (mileage.contains("起止里程")) {
//开始里程
String[] start = mileage.split("-");
String s = start[0];
String k = s.substring(s.indexOf("K") + 1, s.length()).trim();
// 按照“+”分割
startingAndEndingMileageStr = k.replace("\\s", "").replaceAll(" +", "").replace("+", "").trim();
//结束里程
String s1 = start[1];
String[] ks1 = s1.replaceAll("\\s*", "").replaceAll(" ", "").split(",");
String k1 = ks1[0];
String n1 = k1.replace("+", "").replace("K", "");
endingMileageStr = n1;
//曲线半径
String[] n2 = s1.split("半径 ");
String s3 = n2[1];
curveRadius = s3.substring(0, s3.indexOf(" m")).replace("/", "").trim();
//解析超高、加宽、顺坡率、线路全长
String[] n3 = courseStr.split("超高");
String s4 = n3[1];
superHigh = s4.substring(0, s4.indexOf("mm")).replace("/", "").trim();
//加宽
String[] n4 = courseStr.split("加宽");
String s5 = n4[1];
widen = s5.substring(0, s5.indexOf("mm")).replace("/", "").trim();
//System.out.println(skipColumnNum+"加宽="+widen+";");
//顺坡率
String[] n5 = courseStr.split("顺坡率");
String s6 = n5[1];
slopeRatio = s6.substring(0, s6.indexOf("‰")).replace("/", "").trim();
//System.out.println(skipColumnNum+"顺坡率="+slopeRatio+";");
//线路全长
String[] n6 = courseStr.split("线路全长:");
String s7 = n6[1];
longExtent = s7.substring(0, s7.indexOf("米")).replace("/", "").trim();
//System.out.println(skipColumnNum+"线路全长="+longExtent+";");
//解析备注
remark = rowRecords.get(14).get(i + 3).toString().trim();
MovementCourse movementCourse = new MovementCourse();
movementCourse.setMovementMasterId(id);
movementCourse.setCourseStartingMileage(new BigDecimal(startingAndEndingMileageStr));
movementCourse.setCourseEndMileage(new BigDecimal(endingMileageStr));
if (ObjectUtil.isNotEmpty(curveRadius)) {
movementCourse.setCurveRadius(new BigDecimal(curveRadius));
}
if (ObjectUtil.isNotEmpty(superHigh)) {
movementCourse.setSuperHigh(new BigDecimal(superHigh));
}
if (ObjectUtil.isNotEmpty(widen)) {
movementCourse.setWiden(new BigDecimal(widen));
}
if (ObjectUtil.isNotEmpty(slopeRatio)) {
movementCourse.setSlopeRatio(new BigDecimal(slopeRatio));
}
if (ObjectUtil.isNotEmpty(longExtent)) {
movementCourse.setLongExtent(new BigDecimal(longExtent));
}
sort++;
courseId = UUIDGenerator.generate();
movementCourse.setId(courseId);
movementCourse.setDelFlag("0");
movementCourse.setRemark(remark);
movementCourse.setSort(sort);
movementCourses.add(movementCourse);
}
}
//解析子集
if ((skipColumnNum - 1) % 28 == 0) {
continue;
}
if ((skipColumnNum - 2) % 28 == 0) {
continue;
}
// 保存明细
infoSort++;
measurePoint++;
MovementCourseInfo movementCourseInfo = new MovementCourseInfo();
movementCourseInfo.setId(UUIDGenerator.generate());
movementCourseInfo.setDelFlag("0");
movementCourseInfo.setMovementMasterId(id);
movementCourseInfo.setMovementCourseId(courseId);
movementCourseInfo.setInfoSort(infoSort);
movementCourseInfo.setMeasurePoint(measurePoint);
//获取轨号
List<Object> trackCodeList = rowRecords.get(6);
String trackCode = trackCodeList.get(i).toString().trim();
if (ObjectUtil.isNotEmpty(trackCode) && !("检查日期").equals(trackCode) && !("轨号").equals(trackCode)) {
movementCourseInfo.setTrackCode(trackCode);
}
//获取轨距
List<Object> trackGaugeList = rowRecords.get(7);
String trackGauge = trackGaugeList.get(i).toString().trim();
if (ObjectUtil.isNotEmpty(trackGauge) && !("轨距").equals(trackGauge) && !p.matcher(trackGauge).matches()) {
movementCourseInfo.setTrackGauge(trackGauge);
}
//获取水平
List<Object> levelList = rowRecords.get(8);
String level = levelList.get(i).toString().trim();
if (ObjectUtil.isNotEmpty(level) && !("水平").equals(level) && !p.matcher(level).matches()) {
movementCourseInfo.setLevel(level);
}
//获取三角坑
List<Object> triangularPitList = rowRecords.get(9);
String triangularPit = triangularPitList.get(i).toString().trim();
if (ObjectUtil.isNotEmpty(triangularPit) && !("三角坑").equals(triangularPit) && !p.matcher(triangularPit).matches()) {
movementCourseInfo.setTriangularPit(triangularPit);
}
//获取方向
List<Object> directionList = rowRecords.get(10);
String direction = directionList.get(i).toString().trim();
if (ObjectUtil.isNotEmpty(direction) && !("方向").equals(direction) && !p.matcher(direction).matches()) {
movementCourseInfo.setDirection(direction);
}
//获取高低
List<Object> heightList = rowRecords.get(11);
String height = heightList.get(i).toString().trim();
if (ObjectUtil.isNotEmpty(height) && !("高低").equals(height) && !p.matcher(height).matches()) {
movementCourseInfo.setHeight(height);
}
//获取结构
List<Object> structureList = rowRecords.get(12);
String structure = structureList.get(i).toString().trim();
if (ObjectUtil.isNotEmpty(structure) && !("结构").equals(structure) && !p.matcher(structure).matches()) {
movementCourseInfo.setStructure(structure);
}
//获取整改
List<Object> rectificationList = rowRecords.get(13);
String rectification = rectificationList.get(i).toString().trim();
if (ObjectUtil.isNotEmpty(rectification) && !("整改").equals(rectification) && !p.matcher(rectification).matches()) {
movementCourseInfo.setRectification(rectification);
}
resultList.add(movementCourseInfo);
if (measurePoint % 8 == 0) {
measurePoint = 0;
}
if ((skipColumnNum + 2) % 28 == 0) {
i = i + 4;
skipColumnNum = skipColumnNum + 4;
startingAndEndingMileageStr = "";
endingMileageStr = "";
curveRadius = "";
superHigh = "";
widen = "";
slopeRatio = "";
longExtent = "";
remark = "";
courseId = "";
infoSort = 0;
}
}
if (ObjectUtil.isNotEmpty(resultList)) {
movementCourseInfoService.saveBatch(resultList);
}
if (ObjectUtil.isNotEmpty(movementCourses)) {
movementCourseService.saveBatch(movementCourses);
}
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}
return Result.ok("操作成功");
}
// @AutoLog(value = "导入")
// @ApiOperation(value = "导入", notes = "导入 ")
// @PostMapping(value = "/upload2")
// @Transactional
// public Result<String> uploadFile2(MultipartFile file, @ApiParam(name = "动静态几何尺寸主键id") String id) {
// try {
// //初始化数据模板
// movementCourseService.lambdaUpdate()
// .eq(MovementCourse::getMovementMasterId, id)
// .remove();
// movementCourseInfoService.lambdaUpdate()
// .eq(MovementCourseInfo::getMovementMasterId, id)
// .remove();
//
// //时间校验
// String pat = "\\d{4}.\\d{2}.\\d{2}";
// Pattern p = Pattern.compile(pat);
// //读取第一个sheet页的数据
// ExcelReader reader = ExcelUtil.getReader(file.getInputStream(), 0);
// //读取Excel中所有的数据,以行保存
// List<List<Object>> rowRecords = reader.read();
// // 获取excel的列数
// int column = rowRecords.get(0).size();
// //初始化列的索引
// int skipColumnNum = 0;
// //int seq = 1; // 第一个
// //初始化起始里程
// String startingAndEndingMileageStr = "";
// //初始化终点里程
// String endingMileageStr = "";
// //初始化曲线半径
// String curveRadius = "";
// //初始化超高
// String superHigh = "";
// //初始化加宽
// String widen = "";
// //初始化顺坡率
// String slopeRatio = "";
// //初始化长度
// String longExtent = "";
// //初始化备注
// String remark = "";
// //初始化起始里程表主键
// String courseId = "";
// // 如果做完了一个解析就跳过
// List<MovementCourse> movementCourses = new ArrayList<>();
// List<MovementCourseInfo> resultList = new ArrayList<>();
// //初始化里程排序
// int sort = 0;
// //初始化测点
// int measurePoint = 0;
// //初始化轨号排序
// int infoSort = 0;
// for (int i = 0; i < column; i++) {
// skipColumnNum++;
// if (ObjectUtil.isEmpty(startingAndEndingMileageStr)) {
// // 1.起止里程
// List<Object> startingAndEndingMileage = rowRecords.get(3);
// Object mileageObject = startingAndEndingMileage.get(i);
// String mileage = mileageObject.toString();
//
// //超高、加宽、顺坡率、线路全长
// List<Object> courseList = rowRecords.get(4);
// Object courseObject = courseList.get(i);
// String courseStr = courseObject.toString();
// if (mileage.contains("起止里程")) {
// //开始里程
// String[] start = mileage.split("-");
// String s = start[0];
// String k = s.substring(s.indexOf("K") + 1, s.length()).trim();
//
// // 按照“+”分割
// startingAndEndingMileageStr = k.replace("\\s", "").replaceAll(" +", "").replace("+", "").trim();
//
// //结束里程
// String s1 = start[1];
// String[] ks1 = s1.replaceAll("\\s*", "").replaceAll(" ", "").split(",");
// String k1 = ks1[0];
// String n1 = k1.replace("+", "").replace("K", "");
// endingMileageStr = n1;
//
// //曲线半径
// String[] n2 = s1.split("半径 ");
// String s3 = n2[1];
// curveRadius = s3.substring(0, s3.indexOf(" m")).replace("/", "").trim();
//
// //解析超高、加宽、顺坡率、线路全长
// String[] n3 = courseStr.split("超高");
// String s4 = n3[1];
// superHigh = s4.substring(0, s4.indexOf("mm")).replace("/", "").trim();
//
// //加宽
// String[] n4 = courseStr.split("加宽");
// String s5 = n4[1];
// widen = s5.substring(0, s5.indexOf("mm")).replace("/", "").trim();
// //System.out.println(skipColumnNum+"加宽="+widen+";");
//
// //顺坡率
// String[] n5 = courseStr.split("顺坡率");
// String s6 = n5[1];
// slopeRatio = s6.substring(0, s6.indexOf("‰")).replace("/", "").trim();
// //System.out.println(skipColumnNum+"顺坡率="+slopeRatio+";");
//
// //线路全长
// String[] n6 = courseStr.split("线路全长:");
// String s7 = n6[1];
// longExtent = s7.substring(0, s7.indexOf("米")).replace("/", "").trim();
// //System.out.println(skipColumnNum+"线路全长="+longExtent+";");
//
// //解析备注
// remark = rowRecords.get(14).get(i + 3).toString().trim();
//
// MovementCourse movementCourse = new MovementCourse();
// movementCourse.setMovementMasterId(id);
// movementCourse.setCourseStartingMileage(new BigDecimal(startingAndEndingMileageStr));
// movementCourse.setCourseEndMileage(new BigDecimal(endingMileageStr));
// if (ObjectUtil.isNotEmpty(curveRadius)) {
// movementCourse.setCurveRadius(new BigDecimal(curveRadius));
// }
// if (ObjectUtil.isNotEmpty(superHigh)) {
// movementCourse.setSuperHigh(new BigDecimal(superHigh));
// }
// if (ObjectUtil.isNotEmpty(widen)) {
// movementCourse.setWiden(new BigDecimal(widen));
// }
// if (ObjectUtil.isNotEmpty(slopeRatio)) {
// movementCourse.setSlopeRatio(new BigDecimal(slopeRatio));
// }
// if (ObjectUtil.isNotEmpty(longExtent)) {
// movementCourse.setLongExtent(new BigDecimal(longExtent));
// }
// sort++;
// courseId = UUIDGenerator.generate();
// movementCourse.setId(courseId);
// movementCourse.setDelFlag("0");
// movementCourse.setRemark(remark);
// movementCourse.setSort(sort);
// movementCourses.add(movementCourse);
// }
// }
//
// //解析子集
// if ((skipColumnNum - 1) % 28 == 0) {
// continue;
// }
// if ((skipColumnNum - 2) % 28 == 0) {
// continue;
// }
//
// // 保存明细
// infoSort++;
// measurePoint++;
// MovementCourseInfo movementCourseInfo = new MovementCourseInfo();
// movementCourseInfo.setId(UUIDGenerator.generate());
// movementCourseInfo.setDelFlag("0");
// movementCourseInfo.setMovementMasterId(id);
// movementCourseInfo.setMovementCourseId(courseId);
// movementCourseInfo.setInfoSort(infoSort);
// movementCourseInfo.setMeasurePoint(measurePoint);
// //获取轨号
// List<Object> trackCodeList = rowRecords.get(6);
// String trackCode = trackCodeList.get(i).toString().trim();
// if (ObjectUtil.isNotEmpty(trackCode) && !("检查日期").equals(trackCode) && !("轨号").equals(trackCode)) {
// movementCourseInfo.setTrackCode(trackCode);
// }
// //获取轨距
// List<Object> trackGaugeList = rowRecords.get(7);
// String trackGauge = trackGaugeList.get(i).toString().trim();
// if (ObjectUtil.isNotEmpty(trackGauge) && !("轨距").equals(trackGauge) && !p.matcher(trackGauge).matches()) {
// movementCourseInfo.setTrackGauge(trackGauge);
// }
// //获取水平
// List<Object> levelList = rowRecords.get(8);
// String level = levelList.get(i).toString().trim();
// if (ObjectUtil.isNotEmpty(level) && !("水平").equals(level) && !p.matcher(level).matches()) {
// movementCourseInfo.setLevel(level);
// }
// //获取三角坑
// List<Object> triangularPitList = rowRecords.get(9);
// String triangularPit = triangularPitList.get(i).toString().trim();
//
// if (ObjectUtil.isNotEmpty(triangularPit) && !("三角坑").equals(triangularPit) && !p.matcher(triangularPit).matches()) {
// movementCourseInfo.setTriangularPit(triangularPit);
// }
// //获取方向
// List<Object> directionList = rowRecords.get(10);
// String direction = directionList.get(i).toString().trim();
//
// if (ObjectUtil.isNotEmpty(direction) && !("方向").equals(direction) && !p.matcher(direction).matches()) {
// movementCourseInfo.setDirection(direction);
// }
// //获取高低
// List<Object> heightList = rowRecords.get(11);
// String height = heightList.get(i).toString().trim();
//
// if (ObjectUtil.isNotEmpty(height) && !("高低").equals(height) && !p.matcher(height).matches()) {
// movementCourseInfo.setHeight(height);
// }
// //获取结构
// List<Object> structureList = rowRecords.get(12);
// String structure = structureList.get(i).toString().trim();
//
// if (ObjectUtil.isNotEmpty(structure) && !("结构").equals(structure) && !p.matcher(structure).matches()) {
// movementCourseInfo.setStructure(structure);
// }
// //获取整改
// List<Object> rectificationList = rowRecords.get(13);
// String rectification = rectificationList.get(i).toString().trim();
//
// if (ObjectUtil.isNotEmpty(rectification) && !("整改").equals(rectification) && !p.matcher(rectification).matches()) {
// movementCourseInfo.setRectification(rectification);
// }
// resultList.add(movementCourseInfo);
// if (measurePoint % 8 == 0) {
// measurePoint = 0;
// }
// if ((skipColumnNum + 2) % 28 == 0) {
// i = i + 4;
// skipColumnNum = skipColumnNum + 4;
// startingAndEndingMileageStr = "";
// endingMileageStr = "";
// curveRadius = "";
// superHigh = "";
// widen = "";
// slopeRatio = "";
// longExtent = "";
// remark = "";
// courseId = "";
// infoSort = 0;
// }
// }
// if (ObjectUtil.isNotEmpty(resultList)) {
// movementCourseInfoService.saveBatch(resultList);
// }
// if (ObjectUtil.isNotEmpty(movementCourses)) {
// movementCourseService.saveBatch(movementCourses);
// }
//
// } catch (Exception e) {
// e.printStackTrace();
// throw new RuntimeException(e);
// }
// return Result.ok("操作成功");
// }
@AutoLog(value = "人工静态检查数据-保存曲线半径信息")
......@@ -678,9 +678,6 @@ public class MovementRecordsMasterController extends JeecgController<MovementRec
ExcelReader reader = ExcelUtil.getReader(file.getInputStream(), 0);
//读取Excel中所有的数据,以行保存
List<List<Object>> rowRecords = reader.read();
//获取当前登录人信息
LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
String realname = user.getRealname();
//初始化测点里程
String pointMileage = "";
//初始化水平加速度
......@@ -739,10 +736,6 @@ public class MovementRecordsMasterController extends JeecgController<MovementRec
movementAdditiveInfo.setId(IdWorker.get32UUID());
movementAdditiveInfo.setDelFlag("0");
movementAdditiveInfo.setMovementMasterId(id);
movementAdditiveInfo.setCreateTime(new Date());
movementAdditiveInfo.setUpdateTime(new Date());
movementAdditiveInfo.setCreateBy(realname);
movementAdditiveInfo.setUpdateBy(realname);
movementAdditiveInfo.setInfoSort(sort);
if (ObjectUtil.isNotEmpty(pointMileage)) {
movementAdditiveInfo.setPointMileage(new BigDecimal(pointMileage));
......
......@@ -10,9 +10,11 @@ import org.jeecg.common.exception.JeecgBootException;
import org.jeecg.common.util.UUIDGenerator;
import org.jeecg.modules.checkData.entity.MovementCourse;
import org.jeecg.modules.checkData.entity.MovementCourseInfo;
import org.jeecg.modules.checkData.entity.MovementRecordsMaster;
import org.jeecg.modules.checkData.face.MovementRecordsMasterFace;
import org.jeecg.modules.checkData.service.IMovementCourseInfoService;
import org.jeecg.modules.checkData.service.IMovementCourseService;
import org.jeecg.modules.checkData.service.IMovementRecordsMasterService;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
......@@ -34,6 +36,9 @@ public class MovementRecordsMasterFaceImpl implements MovementRecordsMasterFace
@Resource
private IMovementCourseInfoService movementCourseInfoService;
@Resource
private IMovementRecordsMasterService movementRecordsMasterService;
@Override
public void saveLabourCheckItem(MovementCourse record) {
......@@ -90,6 +95,8 @@ public class MovementRecordsMasterFaceImpl implements MovementRecordsMasterFace
List<MovementCourse> movementCourseList = new ArrayList<>();
List<MovementCourseInfo> movementCourseInfoList = new ArrayList<>();
MovementRecordsMaster recordsMaster = this.movementRecordsMasterService.getById(id);
// 1.excel导入List<List<Object>> 中
CurrentRowHandler currentRowHandler = new CurrentRowHandler();
ExcelUtil.readBySax(inputStream, 0, currentRowHandler);
......@@ -99,6 +106,8 @@ public class MovementRecordsMasterFaceImpl implements MovementRecordsMasterFace
int column = currentRowHandler.rowRecords.get(0).size();
int sort = 0;
int trackCodeCount = 1;
boolean startExist = false;
boolean endExist = false;
for (int i = 0; i < column; i++) {
// 2.1 解析检查项目 获取 起止里程,曲线半径,超高,加宽,顺坡率,线路全长
......@@ -126,6 +135,25 @@ public class MovementRecordsMasterFaceImpl implements MovementRecordsMasterFace
BigDecimal startMileage = Convert.toBigDecimal(startMileageStr);
BigDecimal endMileage = Convert.toBigDecimal(endMileageStr);
if (startMileage.compareTo(endMileage) >= 0) {
throw JeecgBootException.error("开始里程不能大于等于结束里程");
}
if (startMileage.compareTo(recordsMaster.getStartingMileage()) < 0) {
throw JeecgBootException.error("开始里程小于当前批次开始里程");
} else if (startMileage.compareTo(recordsMaster.getStartingMileage()) == 0) {
startExist = true;
}
// 如果结束里程 < 外面的主表的结束里程
if (endMileage.compareTo(recordsMaster.getEndMileage()) > 0) {
throw JeecgBootException.error("结束里程大于当前批次结束里程");
} else if (endMileage.compareTo(recordsMaster.getEndMileage()) == 0) {
endExist = true;
}
// ② 获取曲线半径,可能为空,‘/’ 视为空
startIndex = startingAndRowDataStr.indexOf("曲线半径");
endIndex = startingAndRowDataStr.indexOf("m");
......@@ -276,6 +304,13 @@ public class MovementRecordsMasterFaceImpl implements MovementRecordsMasterFace
}
}
if (!startExist) {
throw JeecgBootException.error("起点里程要和批次的起点里程一致");
}
if (!endExist) {
throw JeecgBootException.error("终点里程要和批次的终点里程一致");
}
// 保存之前先删除
movementCourseService.lambdaUpdate().eq(MovementCourse::getMovementMasterId, id).remove();
movementCourseInfoService.lambdaUpdate().eq(MovementCourseInfo::getMovementMasterId, id).remove();
......
......@@ -10,14 +10,17 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.jeecg.common.exception.JeecgBootException;
import org.jeecg.common.util.UUIDGenerator;
import org.jeecg.modules.checkData.entity.MovementRecordsMaster;
import org.jeecg.modules.checkData.entity.RailInspectionEquipmentItem;
import org.jeecg.modules.checkData.entity.RailInspectionEquipmentItemDetail;
import org.jeecg.modules.checkData.mapper.MovementRecordsMasterMapper;
import org.jeecg.modules.checkData.mapper.RailInspectionEquipmentItemDetailMapper;
import org.jeecg.modules.checkData.mapper.RailInspectionEquipmentItemMapper;
import org.jeecg.modules.checkData.service.IRailInspectionEquipmentItemService;
import org.jeecg.modules.checkData.vo.RailInspectionEquipmentItemDetailVO;
import org.jeecg.modules.checkData.vo.RailInspectionEquipmentItemVO;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
......@@ -41,14 +44,21 @@ public class RailInspectionEquipmentItemServiceImpl extends ServiceImpl<RailInsp
@Resource
private RailInspectionEquipmentItemDetailMapper railInspectionEquipmentItemDetailMapper;
@Resource
private MovementRecordsMasterMapper movementRecordsMasterMapper;
@Override
public List<RailInspectionEquipmentItemVO> queryList(String masterId) {
return this.baseMapper.queryList(masterId);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void uploadFile(String masterId, MultipartFile file) {
try {
MovementRecordsMaster recordsMaster = movementRecordsMasterMapper.selectById(masterId);
//读取第一个sheet页的数据
ExcelReader reader = ExcelUtil.getReader(file.getInputStream(), 0);
//读取Excel中所有的数据,以行保存
......@@ -57,15 +67,41 @@ public class RailInspectionEquipmentItemServiceImpl extends ServiceImpl<RailInsp
List<RailInspectionEquipmentItem> items = new ArrayList<>();
List<RailInspectionEquipmentItemDetail> itemDetails = new ArrayList<>();
boolean startExist = false;
boolean endExist = false;
int sort = 1;
for (int i = 0; i < rowRecords.size(); ) {
List<Object> cols = rowRecords.get(i);
String titleHeader = Convert.toStr(cols.get(13));
// 检查起始里程
BigDecimal courseStartingMileage = Convert.toBigDecimal(cols.get(3));
// 检查终点里程
BigDecimal courseEndMileage = Convert.toBigDecimal(cols.get(6));
if ((ObjectUtil.isNotEmpty(titleHeader) && titleHeader.contains("股道")) && (ObjectUtil.isNotEmpty(courseStartingMileage) && ObjectUtil.isNotEmpty(courseEndMileage))) {
// 如果开始里程 > 外面的主表的开始程则报错
BigDecimal currentStartMileage = courseStartingMileage.multiply(new BigDecimal(1000));
BigDecimal currentEntMileage = courseEndMileage.multiply(new BigDecimal(1000));
if (currentStartMileage.compareTo(currentEntMileage) >= 0) {
throw JeecgBootException.error("开始里程不能大于等于结束里程");
}
if (currentStartMileage.compareTo(recordsMaster.getStartingMileage()) < 0) {
throw JeecgBootException.error("开始里程小于当前批次开始里程");
} else if (currentStartMileage.compareTo(recordsMaster.getStartingMileage()) == 0) {
startExist = true;
}
// 如果结束里程 < 外面的主表的结束里程
if (currentEntMileage.compareTo(recordsMaster.getEndMileage()) > 0) {
throw JeecgBootException.error("结束里程大于当前批次结束里程");
} else if (currentEntMileage.compareTo(recordsMaster.getEndMileage()) == 0) {
endExist = true;
}
// 曲线半径
BigDecimal curveRadius = null;
if (ObjectUtil.isNotEmpty(cols.get(18).toString().trim())) {
......@@ -88,24 +124,26 @@ public class RailInspectionEquipmentItemServiceImpl extends ServiceImpl<RailInsp
item.setCurveRadius(curveRadius);
item.setSuperHigh(superHigh);
item.setSlopeRatio(slopeRatio);
item.setRailInspectionEquipmentId(masterId);
item.setDelFlag("0");
item.setSort(sort);
items.add(item);
int skipRow = analysisItemDetail(i, titleHeader, item.getId(), rowRecords, itemDetails);
// 读取item详情
int skipRow = readItemDetail(i, titleHeader, item.getId(), rowRecords, itemDetails);
i = i + skipRow;
sort++;
} else {
i++;
}
}
for (int i = 0; i < items.size(); i++) {
RailInspectionEquipmentItem item = items.get(i);
item.setSort(i + 1);
item.setDelFlag("0");
item.setRailInspectionEquipmentId(masterId);
if (!startExist) {
throw JeecgBootException.error("起点里程要和批次的起点里程一致");
}
if (!endExist) {
throw JeecgBootException.error("终点里程要和批次的起点里程一致");
}
// 项目信息-先删除,再导入
this.lambdaUpdate().eq(RailInspectionEquipmentItem::getRailInspectionEquipmentId, masterId).remove();
......@@ -113,17 +151,15 @@ public class RailInspectionEquipmentItemServiceImpl extends ServiceImpl<RailInsp
queryWrapper.eq(RailInspectionEquipmentItemDetail::getRailInspectionEquipmentId, masterId);
railInspectionEquipmentItemDetailMapper.delete(queryWrapper);
railInspectionEquipmentItemDetailMapper.insertBatch(itemDetails);
this.saveBatch(items);
} catch (IOException io) {
throw new JeecgBootException(io);
}
}
private int analysisItemDetail(int rows, String titleHeader, String itemId, List<List<Object>> rowRecords, List<RailInspectionEquipmentItemDetail> itemDetails) {
private int readItemDetail(int rows, String titleHeader, String itemId, List<List<Object>> rowRecords, List<RailInspectionEquipmentItemDetail> itemDetails) {
// 解析检查项目:1行:跳过2行不解析
......@@ -183,9 +219,9 @@ public class RailInspectionEquipmentItemServiceImpl extends ServiceImpl<RailInsp
// 解析轨向、高低及其它 1行:空白不解析
// 解析临修日期及内容 1行:空白不解析
// 如果是正线解析首轮检查负责人1行
// 如果是股道解析首轮检查负责人1行
int skipRow = 14;
if (titleHeader.contains("正线")) {
if (titleHeader.contains("股道")) {
skipRow = skipRow + 1;
}
......@@ -258,17 +294,7 @@ public class RailInspectionEquipmentItemServiceImpl extends ServiceImpl<RailInsp
@Override
public void updateRecord(RailInspectionEquipmentItem record) {
this.lambdaUpdate()
.set(RailInspectionEquipmentItem::getRemark, record.getRemark())
.set(RailInspectionEquipmentItem::getCourseStartingMileage, record.getCourseStartingMileage())
.set(RailInspectionEquipmentItem::getCourseEndMileage, record.getCourseEndMileage())
.set(RailInspectionEquipmentItem::getCurveRadius, record.getCurveRadius())
.set(RailInspectionEquipmentItem::getLongExtent, record.getLongExtent())
.set(RailInspectionEquipmentItem::getSlopeRatio, record.getSlopeRatio())
.set(RailInspectionEquipmentItem::getSuperHigh, record.getSuperHigh())
.set(RailInspectionEquipmentItem::getWiden, record.getWiden())
.eq(RailInspectionEquipmentItem::getId, record.getId())
.update();
this.lambdaUpdate().set(RailInspectionEquipmentItem::getRemark, record.getRemark()).set(RailInspectionEquipmentItem::getCourseStartingMileage, record.getCourseStartingMileage()).set(RailInspectionEquipmentItem::getCourseEndMileage, record.getCourseEndMileage()).set(RailInspectionEquipmentItem::getCurveRadius, record.getCurveRadius()).set(RailInspectionEquipmentItem::getLongExtent, record.getLongExtent()).set(RailInspectionEquipmentItem::getSlopeRatio, record.getSlopeRatio()).set(RailInspectionEquipmentItem::getSuperHigh, record.getSuperHigh()).set(RailInspectionEquipmentItem::getWiden, record.getWiden()).eq(RailInspectionEquipmentItem::getId, record.getId()).update();
// this.updateById(record);
}
......
......@@ -1676,10 +1676,13 @@ public class AnalysisAlgorithm {
// 计算超限:如果为null则计算,否则和单元绑定
if (null == transfinite) {
transfinite = this.labourCheckTransfinite(analysisBatch, movementCourseInfo);
} else {
// 如果超限不为空则添加进去
if (null != transfinite) {
unitDevice.put("labourCheckTransfinite", transfinite);
}
}
}
// 计算得分
this.labourCheckScore(analysisBatch, labourCheckList, unitDevice);
......
......@@ -8,8 +8,15 @@ import cn.hutool.core.util.ObjectUtil;
import org.jeecg.common.api.dto.PageSearch;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.exception.JeecgBootException;
import org.jeecg.modules.checkData.entity.MovementRecordsMaster;
import org.jeecg.modules.checkData.entity.RecordsMasterCheck;
import org.jeecg.modules.checkData.mapper.MovementRecordsMasterMapper;
import org.jeecg.modules.checkData.service.IMovementRecordsMasterService;
import org.jeecg.modules.checkData.service.IRecordsMasterCheckService;
import org.jeecg.modules.deviceAsset.entity.*;
import org.jeecg.modules.deviceAsset.service.*;
import org.jeecg.modules.dynamicStaticAnalysis.service.IAnalysisBatchService;
import org.jeecg.modules.maintenanceWork.service.IWorkBatchService;
import org.jeecg.modules.subwayNetwork.dto.SubwaySectionEditDTO;
import org.jeecg.modules.subwayNetwork.dto.SubwaySectionQueryDTO;
import org.jeecg.modules.subwayNetwork.entity.SectionStationMap;
......@@ -56,7 +63,11 @@ public class SubwaySectionController extends JeecgController<SubwaySection, ISub
private ISignBoardManagementService signBoardManagementService;
@Resource
private ISleeperManagementService sleeperManagementService;
@Resource
private IMovementRecordsMasterService movementRecordsMasterService;
@Resource
private IRecordsMasterCheckService recordsMasterCheckService;
@AutoLog(value = "线路车站-地铁区间-分页列表查询")
@ApiOperation(value = "线路车站-地铁区间-分页列表查询", notes = "线路车站-地铁区间-分页列表查询")
......@@ -132,7 +143,12 @@ public class SubwaySectionController extends JeecgController<SubwaySection, ISub
Long signBoardCount = signBoardManagementService.lambdaQuery()
.eq(SignBoardManagement::getSectionId, id)
.count();
Long movementRecordsCount = movementRecordsMasterService.lambdaQuery()
.eq(MovementRecordsMaster::getSubwaySectionId, id)
.count();
Long recordsMasterCount = recordsMasterCheckService.lambdaQuery()
.eq(RecordsMasterCheck::getSubwaySectionId, id)
.count();
boolean isDel = false;
StringBuilder errorMsg = new StringBuilder("该区间下还有");
......@@ -168,6 +184,14 @@ public class SubwaySectionController extends JeecgController<SubwaySection, ISub
isDel = true;
errorMsg.append("轨行区标示牌:" + signBoardCount + "个");
}
if (movementRecordsCount != 0) {
isDel = true;
errorMsg.append("动静态几何数据关联:" + movementRecordsCount + "条");
}
if (recordsMasterCount != 0) {
isDel = true;
errorMsg.append("设备检查记录数据关联:" + recordsMasterCount + "条");
}
if (isDel) {
throw JeecgBootException.error(errorMsg.toString());
}
......@@ -223,6 +247,12 @@ public class SubwaySectionController extends JeecgController<SubwaySection, ISub
Long signBoardCount = signBoardManagementService.lambdaQuery()
.eq(SignBoardManagement::getSectionId, id)
.count();
Long movementRecordsCount = movementRecordsMasterService.lambdaQuery()
.eq(MovementRecordsMaster::getSubwaySectionId, id)
.count();
Long recordsMasterCount = recordsMasterCheckService.lambdaQuery()
.eq(RecordsMasterCheck::getSubwaySectionId, id)
.count();
boolean isDel = false;
if (railCount != 0) {
isDel = true;
......@@ -248,6 +278,12 @@ public class SubwaySectionController extends JeecgController<SubwaySection, ISub
if (signBoardCount != 0) {
isDel = true;
}
if (movementRecordsCount != 0) {
isDel = true;
}
if (recordsMasterCount != 0) {
isDel = true;
}
if (isDel) {
failNum++;
......
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