diff --git a/bonus-common/bonus-common-core/src/main/java/com/bonus/common/core/constant/BusinessConstants.java b/bonus-common/bonus-common-core/src/main/java/com/bonus/common/core/constant/BusinessConstants.java index 768a735..7eba5f7 100644 --- a/bonus-common/bonus-common-core/src/main/java/com/bonus/common/core/constant/BusinessConstants.java +++ b/bonus-common/bonus-common-core/src/main/java/com/bonus/common/core/constant/BusinessConstants.java @@ -45,6 +45,9 @@ public class BusinessConstants { /** 在施状态值*/ public final static Integer WORK_STATUS = 0; + public static final String LAT = "纬度"; + public static final String LON = "经度"; + public final static Integer CELL_1 = 1; public final static Integer CELL_2 = 2; diff --git a/bonus-modules/bonus-bracelet/src/main/java/com/bonus/bracelet/controller/ConsControlController.java b/bonus-modules/bonus-bracelet/src/main/java/com/bonus/bracelet/controller/ConsControlController.java index f82dc0f..d0bbebb 100644 --- a/bonus-modules/bonus-bracelet/src/main/java/com/bonus/bracelet/controller/ConsControlController.java +++ b/bonus-modules/bonus-bracelet/src/main/java/com/bonus/bracelet/controller/ConsControlController.java @@ -90,4 +90,16 @@ public class ConsControlController extends BaseController { public AjaxResult getWorkInfo(BraceletParamsDto dto){ return service.getWorkInfo(dto); } + + /** + * 获取整个班组人员/班组临时人员的定位/杆塔的定位以及施工范围的半径 + * @param dto + * @return AjaxResult + * @author cwchen + * @date 2024/8/9 14:36 + */ + @GetMapping("getPersonsInfo") + public AjaxResult getPersonsInfo(BraceletParamsDto dto){ + return service.getPersonsInfo(dto); + } } diff --git a/bonus-modules/bonus-bracelet/src/main/java/com/bonus/bracelet/mapper/ConsControlMapper.java b/bonus-modules/bonus-bracelet/src/main/java/com/bonus/bracelet/mapper/ConsControlMapper.java index 18fcd95..921c211 100644 --- a/bonus-modules/bonus-bracelet/src/main/java/com/bonus/bracelet/mapper/ConsControlMapper.java +++ b/bonus-modules/bonus-bracelet/src/main/java/com/bonus/bracelet/mapper/ConsControlMapper.java @@ -5,6 +5,7 @@ import com.bonus.common.entity.bracelet.vo.BallTreeVo; import com.bonus.common.entity.bracelet.vo.PersonTreeVo; import com.bonus.common.entity.bracelet.vo.WarnInfoVo; import org.apache.ibatis.annotations.MapKey; +import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Repository; import java.util.List; @@ -73,4 +74,41 @@ public interface ConsControlMapper { */ @MapKey("id") List> getSafetyHatInfo(BraceletParamsDto dto); + + /** + * 获取杆塔坐标 + * @return Map + * @author cwchen + * @date 2024/8/9 15:13 + */ + @MapKey("id") + Map getTowerInfo(BraceletParamsDto dto); + + /** + * 获取施工距离 + * @return String + * @author cwchen + * @date 2024/8/9 15:16 + */ + String getDistance(); + + /** + * 获取绑定手环的施工班组人员、临时人员信息 + * @param dto + * @return List> + * @author cwchen + * @date 2024/8/9 15:23 + */ + @MapKey("id") + List> getWorkPersonInfo(BraceletParamsDto dto); + + /** + * 获取已绑手环的定位信息 + * @param map + * @return Map + * @author cwchen + * @date 2024/8/9 16:30 + */ + @MapKey("id") + List> getShDeviceInfo(Map map); } diff --git a/bonus-modules/bonus-bracelet/src/main/java/com/bonus/bracelet/service/IConsControlService.java b/bonus-modules/bonus-bracelet/src/main/java/com/bonus/bracelet/service/IConsControlService.java index 28bc8b1..14c8c79 100644 --- a/bonus-modules/bonus-bracelet/src/main/java/com/bonus/bracelet/service/IConsControlService.java +++ b/bonus-modules/bonus-bracelet/src/main/java/com/bonus/bracelet/service/IConsControlService.java @@ -58,4 +58,13 @@ public interface IConsControlService { * @date 2024/8/9 13:14 */ AjaxResult getWorkInfo(BraceletParamsDto dto); + + /** + * 获取整个班组人员/班组临时人员的定位/杆塔的定位以及施工范围的半径 + * @param dto + * @return AjaxResult + * @author cwchen + * @date 2024/8/9 14:40 + */ + AjaxResult getPersonsInfo(BraceletParamsDto dto); } diff --git a/bonus-modules/bonus-bracelet/src/main/java/com/bonus/bracelet/service/impl/ConsControlServiceImpl.java b/bonus-modules/bonus-bracelet/src/main/java/com/bonus/bracelet/service/impl/ConsControlServiceImpl.java index a16e175..a1577ed 100644 --- a/bonus-modules/bonus-bracelet/src/main/java/com/bonus/bracelet/service/impl/ConsControlServiceImpl.java +++ b/bonus-modules/bonus-bracelet/src/main/java/com/bonus/bracelet/service/impl/ConsControlServiceImpl.java @@ -3,13 +3,15 @@ package com.bonus.bracelet.service.impl; import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONArray; import com.alibaba.fastjson2.JSONObject; +import com.bonus.app.entity.BraceletEntity; import com.bonus.bracelet.mapper.ConsControlMapper; import com.bonus.bracelet.service.IConsControlService; import com.bonus.common.core.constant.BusinessConstants; import com.bonus.common.core.constant.HttpStatus; import com.bonus.common.core.constant.SecurityConstants; import com.bonus.common.core.domain.R; -import com.bonus.common.core.utils.StringUtils; +import com.bonus.common.core.utils.HaversineUtil; +import com.bonus.common.core.utils.StringHelper; import com.bonus.common.core.utils.encryption.Sm4Utils; import com.bonus.common.core.web.domain.AjaxResult; import com.bonus.common.entity.bracelet.BraceletParamsDto; @@ -21,6 +23,7 @@ import com.bonus.system.api.RemoteFileService; import com.bonus.system.api.domain.SysFile; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -162,4 +165,85 @@ public class ConsControlServiceImpl implements IConsControlService { } return AjaxResult.success(mapData); } + + @Override + public AjaxResult getPersonsInfo(BraceletParamsDto dto) { + Map mapData = new HashMap<>(); + try { + // 获取杆塔信息、施工距离、绑定手环的班组施工人员/临时人员 位置信息 + Map towerMap = mapper.getTowerInfo(dto); + String distance = mapper.getDistance(); + Double distanceValue = 0D; + if (StringUtils.isEmpty(distance)) { + distanceValue = StringUtils.isEmpty(distance) ? 50 : Double.parseDouble(distance); + } + List> personList = mapper.getWorkPersonInfo(dto); + if (CollectionUtils.isNotEmpty(personList)) { + for (Map map : personList) { + if (map.get("phone") != null) { + map.put("phone", Sm4Utils.decode(String.valueOf(map.get("phone")))); + } + // 获取已绑手环的定位信息 + List> shMapDataList = mapper.getShDeviceInfo(map); + map = getLatAndLon(shMapDataList,map); + // 验证施工人员是否超出施工范围 + Integer isAbnormal = isAbnormal(distanceValue, map, towerMap); + map.put("isWarn", isAbnormal); + } + } + mapData.put("towerInfo", towerMap); + mapData.put("distance", distanceValue); + mapData.put("personList", personList); + } catch (Exception e) { + log.error(e.toString(), e); + } + return AjaxResult.success(mapData); + } + + /** + * 班组人员/临时人员 是否超出正常施工范围 + * + * @param distance + * @param map + * @return Integer + * @author cwchen + * @date 2024/8/9 15:56 + */ + public Integer isAbnormal(Double distance, Map map, Map towerMap) { + Integer isWarn = 0; + if(map.get("lon") == null || map.get("lat") == null){ + return isWarn; + } + Double lat = Double.parseDouble(String.valueOf(towerMap.get("lat"))); + Double lon = Double.parseDouble(String.valueOf(towerMap.get("lon"))); + Double sgLat = Double.parseDouble(String.valueOf(map.get("lat"))); + Double sgLon = Double.parseDouble(String.valueOf(map.get("lon"))); + double len = HaversineUtil.vincentyDistance(sgLat, sgLon, lat, lon); + if (len > distance) { + isWarn = 1; + } + return isWarn; + } + + /** + * 赋值手环设备的经纬度 + * @param shMapDataList + * @param map + * @return Map + * @author cwchen + * @date 2024/8/9 16:56 + */ + public Map getLatAndLon(List> shMapDataList, Map map) { + if (CollectionUtils.isEmpty(shMapDataList)) { + return map; + } + for (Map mapData : shMapDataList) { + if (Objects.equals(String.valueOf(map.get("dataCode")), BusinessConstants.LAT)) { + map.put("lat", mapData.get("dataVal")); + } else if (Objects.equals(String.valueOf(map.get("dataCode")), BusinessConstants.LON)) { + map.put("lon", mapData.get("dataVal")); + } + } + return map; + } } diff --git a/bonus-modules/bonus-bracelet/src/main/resources/mapper/bracelet/ConsControlMapper.xml b/bonus-modules/bonus-bracelet/src/main/resources/mapper/bracelet/ConsControlMapper.xml index fe01803..a279cee 100644 --- a/bonus-modules/bonus-bracelet/src/main/resources/mapper/bracelet/ConsControlMapper.xml +++ b/bonus-modules/bonus-bracelet/src/main/resources/mapper/bracelet/ConsControlMapper.xml @@ -234,4 +234,45 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" AND tp.depart_id IS NOT NULL + + + + + + + + \ No newline at end of file