|
@@ -1,20 +1,16 @@
|
|
|
-package cn.sagacloud.server.algorithm.common.utils;
|
|
|
+package cn.sagacloud.server.algorithm.common.utils
|
|
|
|
|
|
-import cn.sagacloud.server.algorithm.models.dataCheck.GridCheckResult;
|
|
|
-import cn.sagacloud.server.algorithm.models.entities.Grid;
|
|
|
-import cn.sagacloud.server.algorithm.models.jsonAnalyzer.Location;
|
|
|
-import cn.sagacloud.server.algorithm.models.jsonAnalyzer.Point;
|
|
|
-import cn.sagacloud.server.algorithm.models.modelFile.FloorModelView;
|
|
|
-import org.apache.commons.collections4.CollectionUtils;
|
|
|
-import org.apache.commons.collections4.MapUtils;
|
|
|
-import org.apache.commons.lang3.StringUtils;
|
|
|
-import org.springframework.beans.BeanUtils;
|
|
|
-
|
|
|
-import java.math.BigDecimal;
|
|
|
-import java.util.ArrayList;
|
|
|
-import java.util.HashMap;
|
|
|
-import java.util.List;
|
|
|
-import java.util.Map;
|
|
|
+import cn.sagacloud.server.algorithm.models.dataCheck.GridCheckResult
|
|
|
+import cn.sagacloud.server.algorithm.models.entities.Grid
|
|
|
+import cn.sagacloud.server.algorithm.models.jsonAnalyzer.Location
|
|
|
+import cn.sagacloud.server.algorithm.models.jsonAnalyzer.Point
|
|
|
+import cn.sagacloud.server.algorithm.models.modelFile.FloorModelView
|
|
|
+import org.apache.commons.collections4.CollectionUtils
|
|
|
+import org.apache.commons.collections4.MapUtils
|
|
|
+import org.apache.commons.lang3.StringUtils
|
|
|
+import org.springframework.beans.BeanUtils
|
|
|
+import java.math.BigDecimal
|
|
|
+import java.util.*
|
|
|
|
|
|
/**
|
|
|
* Grid分组工具
|
|
@@ -22,31 +18,30 @@ import java.util.Map;
|
|
|
* @author Administrator
|
|
|
* @date 2021-10-21
|
|
|
*/
|
|
|
-public class GridGroupUtil {
|
|
|
-
|
|
|
+object GridGroupUtil {
|
|
|
/**
|
|
|
* 获取分组信息
|
|
|
* @param views
|
|
|
* @param gridMap
|
|
|
* @return
|
|
|
*/
|
|
|
- public static List<GridCheckResult> checkGridUpright(List<FloorModelView> views, Map<String, List<Grid>> gridMap) {
|
|
|
- if(CollectionUtils.isEmpty(views)) {
|
|
|
- return null;
|
|
|
+ fun checkGridUpright(views: List<FloorModelView?>, gridMap: Map<String?, List<Grid>?>): List<GridCheckResult>? {
|
|
|
+ if (CollectionUtils.isEmpty(views)) {
|
|
|
+ return null
|
|
|
}
|
|
|
// 组装名称位置信息
|
|
|
- Map<String, Map<String, Location>> gridNameMap = convertGridMap(gridMap);
|
|
|
+ val gridNameMap = convertGridMap(gridMap)
|
|
|
// 获取分组
|
|
|
- Map<String, Integer> groupMap = groupGrids(gridNameMap);
|
|
|
+ val groupMap = groupGrids(gridNameMap)
|
|
|
// 转换结果
|
|
|
- List<GridCheckResult> rsList = new ArrayList<>();
|
|
|
- for(FloorModelView view:views) {
|
|
|
- GridCheckResult rs = new GridCheckResult();
|
|
|
- BeanUtils.copyProperties(view, rs);
|
|
|
- rs.setGroupId(MapUtils.getInteger(groupMap, view.getCurrentModelId()));
|
|
|
- rsList.add(rs);
|
|
|
+ val rsList: MutableList<GridCheckResult> = ArrayList()
|
|
|
+ for (view in views) {
|
|
|
+ val rs = GridCheckResult()
|
|
|
+ BeanUtils.copyProperties(view, rs)
|
|
|
+ rs.groupId = MapUtils.getInteger(groupMap, view!!.currentModelId)
|
|
|
+ rsList.add(rs)
|
|
|
}
|
|
|
- return rsList;
|
|
|
+ return rsList
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -54,30 +49,30 @@ public class GridGroupUtil {
|
|
|
* @param gridMap
|
|
|
* @return
|
|
|
*/
|
|
|
- private static Map<String, Map<String, Location>> convertGridMap(Map<String, List<Grid>> gridMap) {
|
|
|
- if(MapUtils.isEmpty(gridMap)) {
|
|
|
- return null;
|
|
|
+ private fun convertGridMap(gridMap: Map<String?, List<Grid>?>): Map<String?, Map<String?, Location>?>? {
|
|
|
+ if (MapUtils.isEmpty(gridMap)) {
|
|
|
+ return null
|
|
|
}
|
|
|
// 组装名称位置信息
|
|
|
- Map<String, Map<String, Location>> gridNameMap = new HashMap<>(16);
|
|
|
- for(String modelId:gridMap.keySet()) {
|
|
|
- List<Grid> gridList = gridMap.get(modelId);
|
|
|
- if(CollectionUtils.isEmpty(gridList)) {
|
|
|
- continue;
|
|
|
+ val gridNameMap: MutableMap<String?, Map<String?, Location>?> = HashMap(16)
|
|
|
+ for (modelId in gridMap.keys) {
|
|
|
+ val gridList: List<Grid?>? = gridMap[modelId]
|
|
|
+ if (CollectionUtils.isEmpty(gridList)) {
|
|
|
+ continue
|
|
|
}
|
|
|
- Map<String, Location> nameMap = new HashMap<>(16);
|
|
|
- gridNameMap.put(modelId, nameMap);
|
|
|
+ val nameMap: MutableMap<String?, Location> = HashMap(16)
|
|
|
+ gridNameMap[modelId] = nameMap
|
|
|
// 获取Name, Location存入Map
|
|
|
- for(Grid grid:gridList) {
|
|
|
- String name = grid.getName();
|
|
|
- Location location = grid.getLocation();
|
|
|
- if(StringUtils.isBlank(name) || location == null) {
|
|
|
- continue;
|
|
|
+ for (grid in gridList!!) {
|
|
|
+ val name = grid!!.name
|
|
|
+ val location = grid.location
|
|
|
+ if (StringUtils.isBlank(name) || location == null) {
|
|
|
+ continue
|
|
|
}
|
|
|
- nameMap.put(name, location);
|
|
|
+ nameMap[name] = location
|
|
|
}
|
|
|
}
|
|
|
- return gridNameMap;
|
|
|
+ return gridNameMap
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -86,19 +81,22 @@ public class GridGroupUtil {
|
|
|
* @param gridMap
|
|
|
* @return
|
|
|
*/
|
|
|
- private static Map<String, Integer> groupGrids(Map<String, Map<String, Location>> gridMap){
|
|
|
- if(MapUtils.isEmpty(gridMap)) {
|
|
|
- return null;
|
|
|
+ private fun groupGrids(gridMap: Map<String?, Map<String?, Location>?>?): Map<String?, Int?>? {
|
|
|
+ if (MapUtils.isEmpty(gridMap)) {
|
|
|
+ return null
|
|
|
}
|
|
|
- List<List<String>> modelIdList = groupGridToList(gridMap);
|
|
|
- Map<String, Integer> modelIdMap = new HashMap<>(16);
|
|
|
- for(int i = 0,j = modelIdList.size();i < j;i++) {
|
|
|
- List<String> idList = modelIdList.get(i);
|
|
|
- for(String modelId:idList) {
|
|
|
- modelIdMap.put(modelId, i+1);
|
|
|
+ val modelIdList = groupGridToList(gridMap)
|
|
|
+ val modelIdMap: MutableMap<String?, Int?> = HashMap(16)
|
|
|
+ var i = 0
|
|
|
+ val j = modelIdList.size
|
|
|
+ while (i < j) {
|
|
|
+ val idList: List<String?> = modelIdList[i]
|
|
|
+ for (modelId in idList) {
|
|
|
+ modelIdMap[modelId] = i + 1
|
|
|
}
|
|
|
+ i++
|
|
|
}
|
|
|
- return modelIdMap;
|
|
|
+ return modelIdMap
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -107,41 +105,44 @@ public class GridGroupUtil {
|
|
|
* @param gridMap
|
|
|
* @return List<[id1,id2,id5],[id3,id4]>
|
|
|
*/
|
|
|
- private static List<List<String>> groupGridToList(Map<String, Map<String, Location>> gridMap){
|
|
|
- List<List<String>> modelIdList = new ArrayList<>();
|
|
|
+ private fun groupGridToList(gridMap: Map<String?, Map<String?, Location>?>?): List<MutableList<String?>> {
|
|
|
+ val modelIdList: MutableList<MutableList<String?>> = ArrayList()
|
|
|
// 按ModelId循环
|
|
|
- for(String modelId : gridMap.keySet()) {
|
|
|
+ for (modelId in gridMap!!.keys) {
|
|
|
// 是否所有分组都有冲突
|
|
|
- boolean isAllConflict = true;
|
|
|
+ var isAllConflict = true
|
|
|
// 按分组循环
|
|
|
- for(int i = 0,j = modelIdList.size();i < j;i++) {
|
|
|
- List<String> idList = modelIdList.get(i);
|
|
|
+ var i = 0
|
|
|
+ val j = modelIdList.size
|
|
|
+ while (i < j) {
|
|
|
+ val idList = modelIdList[i]
|
|
|
// 当前分组内是否有冲突
|
|
|
- boolean isConflict = false;
|
|
|
- for(String toId:idList) {
|
|
|
- Map<String, Location> fromMap = gridMap.get(modelId);
|
|
|
- Map<String, Location> toMap = gridMap.get(modelIdList.get(i));
|
|
|
+ var isConflict = false
|
|
|
+ for (toId in idList) {
|
|
|
+ val fromMap: Map<String?, Location?>? = gridMap[modelId]
|
|
|
+ val toMap: Map<String?, Location?>? = gridMap[toId]
|
|
|
// 如果有冲突,则不再比较
|
|
|
if (isConflict(fromMap, toMap)) {
|
|
|
- isConflict = true;
|
|
|
- break;
|
|
|
+ isConflict = true
|
|
|
+ break
|
|
|
}
|
|
|
}
|
|
|
// 如果没有冲突,则放入此队列中
|
|
|
- if(!isConflict) {
|
|
|
- idList.add(modelId);
|
|
|
- isAllConflict = false;
|
|
|
- break;
|
|
|
+ if (!isConflict) {
|
|
|
+ idList.add(modelId)
|
|
|
+ isAllConflict = false
|
|
|
+ break
|
|
|
}
|
|
|
+ i++
|
|
|
}
|
|
|
// 如果所有分组内都有冲突,则新增分组
|
|
|
- if(isAllConflict) {
|
|
|
- List<String> idList = new ArrayList<>();
|
|
|
- idList.add(modelId);
|
|
|
- modelIdList.add(idList);
|
|
|
+ if (isAllConflict) {
|
|
|
+ val idList: MutableList<String?> = ArrayList()
|
|
|
+ idList.add(modelId)
|
|
|
+ modelIdList.add(idList)
|
|
|
}
|
|
|
}
|
|
|
- return modelIdList;
|
|
|
+ return modelIdList
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -150,27 +151,27 @@ public class GridGroupUtil {
|
|
|
* @param toMap
|
|
|
* @return
|
|
|
*/
|
|
|
- private static boolean isConflict(Map<String, Location> fromMap, Map<String, Location> toMap) {
|
|
|
- if(MapUtils.isEmpty(fromMap) || MapUtils.isEmpty(toMap)) {
|
|
|
- return false;
|
|
|
+ private fun isConflict(fromMap: Map<String?, Location?>?, toMap: Map<String?, Location?>?): Boolean {
|
|
|
+ if (MapUtils.isEmpty(fromMap) || MapUtils.isEmpty(toMap)) {
|
|
|
+ return false
|
|
|
}
|
|
|
// 按名称循环处理
|
|
|
- for(String name:fromMap.keySet()) {
|
|
|
- if(!toMap.containsKey(name)) {
|
|
|
- continue;
|
|
|
+ for (name in fromMap!!.keys) {
|
|
|
+ if (!toMap!!.containsKey(name)) {
|
|
|
+ continue
|
|
|
}
|
|
|
// 只处理名称相同的比较
|
|
|
- Location from = fromMap.get(name);
|
|
|
- Location to = toMap.get(name);
|
|
|
- if(from == null || to == null) {
|
|
|
- continue;
|
|
|
+ val from = fromMap[name]
|
|
|
+ val to = toMap[name]
|
|
|
+ if (from == null || to == null) {
|
|
|
+ continue
|
|
|
}
|
|
|
// 位置有冲突
|
|
|
- if(isConflict(from, to)) {
|
|
|
- return true;
|
|
|
+ if (isConflict(from, to)) {
|
|
|
+ return true
|
|
|
}
|
|
|
}
|
|
|
- return false;
|
|
|
+ return false
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -179,32 +180,32 @@ public class GridGroupUtil {
|
|
|
* @param to
|
|
|
* @return
|
|
|
*/
|
|
|
- public static boolean isConflict(Location from, Location to) {
|
|
|
+ fun isConflict(from: Location, to: Location): Boolean {
|
|
|
// 只有都是线的类型才判断冲突
|
|
|
- if(!(StringUtils.contains(from.getType(), "Line")
|
|
|
- && StringUtils.contains(to.getType(), from.getType()))) {
|
|
|
- return false;
|
|
|
+ if (!(StringUtils.contains(from.type, "Line")
|
|
|
+ && StringUtils.contains(to.type, from.type))) {
|
|
|
+ return false
|
|
|
}
|
|
|
// 点位应在2个以上
|
|
|
- if(CollectionUtils.size(from.getPoints()) < 2 || CollectionUtils.size(to.getPoints()) < 2) {
|
|
|
- return false;
|
|
|
+ if (CollectionUtils.size(from.points) < 2 || CollectionUtils.size(to.points) < 2) {
|
|
|
+ return false
|
|
|
}
|
|
|
// 取开始结束点位
|
|
|
- Point fromBegin = from.getPoints().get(0);
|
|
|
- Point fromEnd = from.getPoints().get(1);
|
|
|
- Point toBegin = to.getPoints().get(0);
|
|
|
- Point toEnd = to.getPoints().get(1);
|
|
|
+ val fromBegin = from.points!![0]
|
|
|
+ val fromEnd = from.points!![1]
|
|
|
+ val toBegin = to.points!![0]
|
|
|
+ val toEnd = to.points!![1]
|
|
|
// 计算相对角度和偏移量
|
|
|
- try {
|
|
|
- BigDecimal fromAngle = calAngle(fromBegin, fromEnd);
|
|
|
- BigDecimal fromOffset = calOffset(fromBegin, fromAngle);
|
|
|
- BigDecimal toAngle = calAngle(toBegin, toEnd);
|
|
|
- BigDecimal toOffset = calOffset(toBegin, toAngle);
|
|
|
+ return try {
|
|
|
+ val fromAngle = calAngle(fromBegin, fromEnd)
|
|
|
+ val fromOffset = calOffset(fromBegin, fromAngle)
|
|
|
+ val toAngle = calAngle(toBegin, toEnd)
|
|
|
+ val toOffset = calOffset(toBegin, toAngle)
|
|
|
// 都相同则冲突
|
|
|
- return fromAngle.equals(toAngle) && fromOffset.equals(toOffset);
|
|
|
- } catch (Exception e) {
|
|
|
+ fromAngle == toAngle && fromOffset == toOffset
|
|
|
+ } catch (e: Exception) {
|
|
|
// 计算异常则直接判断点位X坐标
|
|
|
- return fromEnd.getX() == toBegin.getX() && fromEnd.getX() == toEnd.getX();
|
|
|
+ fromEnd.x == toBegin.x && fromEnd.x == toEnd.x
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -214,12 +215,12 @@ public class GridGroupUtil {
|
|
|
* @param end
|
|
|
* @return
|
|
|
*/
|
|
|
- private static BigDecimal calAngle(Point begin, Point end) {
|
|
|
- BigDecimal beginX = BigDecimal.valueOf(begin.getX());
|
|
|
- BigDecimal beginY = BigDecimal.valueOf(begin.getY());
|
|
|
- BigDecimal endX = BigDecimal.valueOf(end.getX());
|
|
|
- BigDecimal endY = BigDecimal.valueOf(end.getY());
|
|
|
- return beginY.subtract(endY).divide(beginX.subtract(endX));
|
|
|
+ private fun calAngle(begin: Point, end: Point): BigDecimal {
|
|
|
+ val beginX = BigDecimal.valueOf(begin.x)
|
|
|
+ val beginY = BigDecimal.valueOf(begin.y)
|
|
|
+ val endX = BigDecimal.valueOf(end.x)
|
|
|
+ val endY = BigDecimal.valueOf(end.y)
|
|
|
+ return beginY.subtract(endY).divide(beginX.subtract(endX))
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -228,9 +229,9 @@ public class GridGroupUtil {
|
|
|
* @param angle
|
|
|
* @return
|
|
|
*/
|
|
|
- private static BigDecimal calOffset(Point begin, BigDecimal angle) {
|
|
|
- BigDecimal beginX = BigDecimal.valueOf(begin.getX());
|
|
|
- BigDecimal beginY = BigDecimal.valueOf(begin.getY());
|
|
|
- return beginY.subtract(angle.multiply(beginX));
|
|
|
+ private fun calOffset(begin: Point, angle: BigDecimal): BigDecimal {
|
|
|
+ val beginX = BigDecimal.valueOf(begin.x)
|
|
|
+ val beginY = BigDecimal.valueOf(begin.y)
|
|
|
+ return beginY.subtract(angle.multiply(beginX))
|
|
|
}
|
|
|
-}
|
|
|
+}
|