diff --git a/bonus-common/bonus-common-entity/src/main/java/com/bonus/common/entity/bracelet/vo/PersonControlVo.java b/bonus-common/bonus-common-entity/src/main/java/com/bonus/common/entity/bracelet/vo/PersonControlVo.java new file mode 100644 index 0000000..ccb4078 --- /dev/null +++ b/bonus-common/bonus-common-entity/src/main/java/com/bonus/common/entity/bracelet/vo/PersonControlVo.java @@ -0,0 +1,67 @@ +package com.bonus.common.entity.bracelet.vo; + +import lombok.Data; + +/** + * @className:PersonControlVo + * @author:cwchen + * @date:2024-08-23-10:48 + * @version:1.0 + * @description:人员管控 + */ +@Data +public class PersonControlVo { + + /**杆塔信息*/ + @Data + public static class TowerInfo { + /**杆塔ID*/ + private Long id; + /**杆塔名称*/ + private String powerName; + /**经度*/ + private String lon; + /**纬度*/ + private String lat; + /**施工半径*/ + private Double distance = 0D; + } + + /**施工人员*/ + @Data + public static class WorkPersonInfo { + /**人员id*/ + private Long id; + /**姓名*/ + private String name; + /**手机号*/ + private String phone; + /**手环id*/ + private Long devId; + /**0 班组人员 1 临时人员*/ + private Integer type; + /**经度*/ + private String lon; + /**纬度*/ + private String lat; + /**是否告警 0 未告警 1.告警*/ + private Integer isWarn = 0; + } + + /**手环信息*/ + @Data + public static class BraceletInfo { + /**手环属性ID*/ + private Long id; + /**设备属性名称*/ + private String dataName; + /**设备采集值*/ + private String dataVal; + /**设备值单位*/ + private String dataUnit; + /**级联编码*/ + private String dataCode; + /**数据采集时间*/ + private String dataTime; + } +} diff --git a/bonus-common/bonus-common-entity/src/main/java/com/bonus/common/entity/bracelet/vo/PersonTreeVo.java b/bonus-common/bonus-common-entity/src/main/java/com/bonus/common/entity/bracelet/vo/PersonTreeVo.java index c3e94b5..94d422e 100644 --- a/bonus-common/bonus-common-entity/src/main/java/com/bonus/common/entity/bracelet/vo/PersonTreeVo.java +++ b/bonus-common/bonus-common-entity/src/main/java/com/bonus/common/entity/bracelet/vo/PersonTreeVo.java @@ -31,6 +31,10 @@ public class PersonTreeVo { private Integer type; /**父ID*/ private String parentId; + /**手环设备ID*/ + private Long devId; + /**杆塔ID*/ + private Long gtId; private List children = new ArrayList<>(); } 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 e23837e..17f907b 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 @@ -85,11 +85,11 @@ public interface ConsControlMapper { /** * 获取杆塔坐标 * - * @return Map + * @return PersonControlVo.TowerInfo * @author cwchen * @date 2024/8/9 15:13 */ - Map getTowerInfo(BraceletParamsDto dto); + PersonControlVo.TowerInfo getTowerInfo(BraceletParamsDto dto); /** * 获取施工距离 @@ -104,23 +104,21 @@ public interface ConsControlMapper { * 获取绑定手环的施工班组人员、临时人员信息 * * @param dto - * @return List> + * @return List * @author cwchen * @date 2024/8/9 15:23 */ - @MapKey("id") - List> getWorkPersonInfo(BraceletParamsDto dto); + List getWorkPersonInfo(BraceletParamsDto dto); /** * 获取已绑手环的定位信息 * - * @param map - * @return Map + * @param devId + * @return List * @author cwchen * @date 2024/8/9 16:30 */ - @MapKey("id") - List> getShDeviceInfo(Map map); + List getShDeviceInfo(Long devId); /** * 根据杆塔获取班组人员-已绑定手环 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 6a37170..fa7d9ba 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 @@ -87,10 +87,10 @@ public class ConsControlServiceImpl implements IConsControlService { // 设备类型设置为球机 dto.setDevType(BusinessConstants.BALL); List warnInfoVoList = mapper.getBallWarnLists(dto); - if(CollectionUtils.isNotEmpty(warnInfoVoList)){ + if (CollectionUtils.isNotEmpty(warnInfoVoList)) { for (int i = 0; i < warnInfoVoList.size(); i++) { WarnInfoVo warnInfoVo = warnInfoVoList.get(i); - if(StringUtils.isEmpty(warnInfoVo.getBase64Url())){ + if (StringUtils.isEmpty(warnInfoVo.getBase64Url())) { warnInfoVo.setBase64Url("66c68c712350293fa1d6b197"); } // 前三张违章照片加载图片,其余调用加载 @@ -119,8 +119,9 @@ public class ConsControlServiceImpl implements IConsControlService { /** * 切割数组 + * * @param list - * @return List> + * @return List> * @author cwchen * @date 2024/8/22 13:31 */ @@ -183,6 +184,9 @@ public class ConsControlServiceImpl implements IConsControlService { if (StringUtils.isNotEmpty(valArr[1])) { vo.setLabel(valArr[0] + "-" + Sm4Utils.decode(valArr[1])); } + // 判断施工人员是否预警 + Integer isWarn = beyondTheScopeOfConstruction(dto, vo.getDevId(), vo.getGtId()); + vo.setIsWarn(isWarn); } //构建人员树 resultTree = BuildTreeUtil.listInfoToTree(JSONArray.parseArray(JSON.toJSONString(list)), "id", "parentId", "children"); @@ -207,7 +211,7 @@ public class ConsControlServiceImpl implements IConsControlService { } } mapData.put("workTeamNum", workTeamList.get(0)); - mapData.put("workUserNum", workTeamList.get(1) + workTeamList.get(2)); + mapData.put("workPersonNum", workTeamList.get(1)); mapData.put("safetyHatList", safetyHatLists); } catch (Exception e) { log.error(e.toString(), e); @@ -215,33 +219,55 @@ public class ConsControlServiceImpl implements IConsControlService { return AjaxResult.success(mapData); } + /** + * 班组人员是否超过施工范围 + * + * @param devId + * @param gtId + * @return Integer + * @author cwchen + * @date 2024/8/23 13:42 + */ + public Integer beyondTheScopeOfConstruction(BraceletParamsDto dto, Long devId, Long gtId) { + // 获取杆塔信息、施工距离、绑定手环的班组施工人员/临时人员 位置信息 + dto.setId(gtId); + PersonControlVo.TowerInfo towerInfo = mapper.getTowerInfo(dto); + String distance = mapper.getDistance(); + if (StringUtils.isNotBlank(distance)) { + towerInfo.setDistance(Double.parseDouble(distance)); + } + PersonControlVo.WorkPersonInfo workPersonInfo = new PersonControlVo.WorkPersonInfo(); + List braceletInfoList = mapper.getShDeviceInfo(devId); + workPersonInfo = getLatAndLon(braceletInfoList, workPersonInfo); + Integer isAbnormal = isAbnormal(workPersonInfo, towerInfo); + return isAbnormal; + } + @Override public AjaxResult getPersonsInfo(BraceletParamsDto dto) { Map mapData = new HashMap<>(); try { // 获取杆塔信息、施工距离、绑定手环的班组施工人员/临时人员 位置信息 - Map towerMap = mapper.getTowerInfo(dto); + PersonControlVo.TowerInfo towerInfo = mapper.getTowerInfo(dto); String distance = mapper.getDistance(); - Double distanceValue = 0D; if (StringUtils.isNotBlank(distance)) { - distanceValue = Double.parseDouble(distance); + towerInfo.setDistance(Double.parseDouble(distance)); } - List> personList = mapper.getWorkPersonInfo(dto); + 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")))); + for (PersonControlVo.WorkPersonInfo workPersonInfo : personList) { + if (StringUtils.isNotBlank(workPersonInfo.getPhone())) { + workPersonInfo.setPhone(Sm4Utils.decode(workPersonInfo.getPhone())); } // 获取已绑手环的定位信息 - List> shMapDataList = mapper.getShDeviceInfo(map); - map = getLatAndLon(shMapDataList, map); + List braceletInfoList = mapper.getShDeviceInfo(workPersonInfo.getDevId()); + workPersonInfo = getLatAndLon(braceletInfoList, workPersonInfo); // 验证施工人员是否超出施工范围 - Integer isAbnormal = isAbnormal(distanceValue, map, towerMap); - map.put("isWarn", isAbnormal); + Integer isAbnormal = isAbnormal(workPersonInfo, towerInfo); + workPersonInfo.setIsWarn(isAbnormal); } } - mapData.put("towerInfo", towerMap); - mapData.put("distance", distanceValue); + mapData.put("towerInfo", towerInfo); mapData.put("personList", personList); } catch (Exception e) { log.error(e.toString(), e); @@ -368,22 +394,21 @@ public class ConsControlServiceImpl implements IConsControlService { vo.setHasSafetyHat(true); vo.setSafetyHat(safetyHat); } + // 获取施工杆塔信息 + dto.setId(vo.getTowerId()); + PersonControlVo.TowerInfo towerInfo = mapper.getTowerInfo(dto); + PersonControlVo.WorkPersonInfo workPersonInfo = new PersonControlVo.WorkPersonInfo(); // 获取已绑手环的信息 String distance = mapper.getDistance(); - Double distanceValue = 0D; if (StringUtils.isNotBlank(distance)) { - distanceValue = Double.parseDouble(distance); + towerInfo.setDistance(Double.parseDouble(distance)); } - Map map = new HashMap<>(2); - map.put("devId", vo.getBraceletId()); - List> shMapDataList = mapper.getShDeviceInfo(map); - dto.setId(vo.getTowerId()); - Map towerMap = mapper.getTowerInfo(dto); - map = getLatAndLon(shMapDataList, map); + List braceletInfoList = mapper.getShDeviceInfo(vo.getBraceletId()); + workPersonInfo = getLatAndLon(braceletInfoList, workPersonInfo); // 设置绑定手环基本信息 - vo = setBraceletInfo(vo, shMapDataList); + vo = setBraceletInfo(vo, braceletInfoList); // 验证施工人员是否超出施工范围/人脸是否验证 - Integer isAbnormal = isAbnormal(distanceValue, map, towerMap); + Integer isAbnormal = isAbnormal(workPersonInfo, towerInfo); if (!Objects.equals(isAbnormal, BusinessConstants.NO_WARN) || !Objects.equals(vo.getFaceStatus(), BusinessConstants.PASS)) { vo.setWarnType("danger"); } @@ -456,23 +481,27 @@ public class ConsControlServiceImpl implements IConsControlService { /** * 班组人员/临时人员 是否超出正常施工范围 * - * @param distance - * @param map + * @param workPersonInfo + * @param towerInfo * @return Integer * @author cwchen * @date 2024/8/9 15:56 */ - public Integer isAbnormal(Double distance, Map map, Map towerMap) { + public Integer isAbnormal(PersonControlVo.WorkPersonInfo workPersonInfo, PersonControlVo.TowerInfo towerInfo) { Integer isWarn = 0; - if (map.get("lon") == null || map.get("lat") == null) { + if (StringUtils.isEmpty(towerInfo.getLon()) + || StringUtils.isEmpty(towerInfo.getLat()) + || StringUtils.isEmpty(workPersonInfo.getLon()) + || StringUtils.isEmpty(workPersonInfo.getLat()) + ) { 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 lat = Double.parseDouble(towerInfo.getLon()); + Double lon = Double.parseDouble(towerInfo.getLat()); + Double sgLat = Double.parseDouble(workPersonInfo.getLon()); + Double sgLon = Double.parseDouble(workPersonInfo.getLat()); double len = HaversineUtil.vincentyDistance(sgLat, sgLon, lat, lon); - if (len > distance) { + if (len > towerInfo.getDistance()) { isWarn = 1; } return isWarn; @@ -586,43 +615,52 @@ public class ConsControlServiceImpl implements IConsControlService { /** * 赋值手环设备的经纬度 * - * @param shMapDataList - * @param map - * @return Map + * @param braceletInfoList + * @param workPersonInfo + * @return PersonControlVo.WorkPersonInfo * @author cwchen * @date 2024/8/9 16:56 */ - public Map getLatAndLon(List> shMapDataList, Map map) { - if (CollectionUtils.isEmpty(shMapDataList)) { - return map; + public PersonControlVo.WorkPersonInfo getLatAndLon(List braceletInfoList, PersonControlVo.WorkPersonInfo workPersonInfo) { + if (CollectionUtils.isEmpty(braceletInfoList)) { + return workPersonInfo; } - for (Map mapData : shMapDataList) { - if (Objects.equals(String.valueOf(mapData.get("dataCode")), BusinessConstants.LAT)) { - map.put("lat", mapData.get("dataVal")); - } else if (Objects.equals(String.valueOf(mapData.get("dataCode")), BusinessConstants.LON)) { - map.put("lon", mapData.get("dataVal")); + for (PersonControlVo.BraceletInfo braceletInfo : braceletInfoList) { + if (Objects.equals(braceletInfo.getDataCode(), BusinessConstants.LON)) { + workPersonInfo.setLon(braceletInfo.getDataVal()); + } else if (Objects.equals(braceletInfo.getDataCode(), BusinessConstants.LAT)) { + workPersonInfo.setLat(braceletInfo.getDataVal()); } } - return map; + return workPersonInfo; } - public PersonDetailVo setBraceletInfo(PersonDetailVo vo, List> shMapDataList) { - if (CollectionUtils.isEmpty(shMapDataList)) { + /** + * 赋值手环信息 + * + * @param vo + * @param braceletInfoList + * @return PersonDetailVo + * @author cwchen + * @date 2024/8/23 13:14 + */ + public PersonDetailVo setBraceletInfo(PersonDetailVo vo, List braceletInfoList) { + if (CollectionUtils.isEmpty(braceletInfoList)) { return vo; } PersonDetailVo.Bracelet bracelet = new PersonDetailVo.Bracelet(); bracelet.setDevId(vo.getBraceletId()); bracelet.setName(vo.getShCode()); - for (Map mapData : shMapDataList) { - if (Objects.equals(String.valueOf(mapData.get("dataCode")), BusinessConstants.DL_CODE)) { - Double value = handleElecValue(mapData); + for (PersonControlVo.BraceletInfo braceletInfo : braceletInfoList) { + if (Objects.equals(braceletInfo.getDataCode(), BusinessConstants.DL_CODE)) { + Double value = handleElecValue(braceletInfo); bracelet.setElec(value); - } else if (Objects.equals(String.valueOf(mapData.get("dataCode")), BusinessConstants.XL_CODE)) { - bracelet.setHeartRate(handleValue(mapData)); - } else if (Objects.equals(String.valueOf(mapData.get("dataCode")), BusinessConstants.XY_CODE)) { - bracelet.setBloodPressure(handleValue(mapData)); - } else if (Objects.equals(String.valueOf(mapData.get("dataCode")), BusinessConstants.WD_CODE)) { - bracelet.setTemp(handleValue(mapData)); + } else if (Objects.equals(braceletInfo.getDataCode(), BusinessConstants.XL_CODE)) { + bracelet.setHeartRate(handleValue(braceletInfo)); + } else if (Objects.equals(braceletInfo.getDataCode(), BusinessConstants.XY_CODE)) { + bracelet.setBloodPressure(handleValue(braceletInfo)); + } else if (Objects.equals(braceletInfo.getDataCode(), BusinessConstants.WD_CODE)) { + bracelet.setTemp(handleValue(braceletInfo)); } } vo.setBracelet(bracelet); @@ -632,20 +670,20 @@ public class ConsControlServiceImpl implements IConsControlService { /** * 血压、心率、温度赋值 * - * @param map + * @param braceletInfo * @return String * @author cwchen * @date 2024/8/15 18:12 */ - public String handleValue(Map map) { - Object dataVal = map.get("dataVal"); - Object dataUnit = map.get("dataUnit"); - if (dataVal != null && dataUnit == null) { - return String.valueOf(dataVal); - } else if (dataVal == null && dataUnit != null) { - return "--" + String.valueOf(dataUnit); - } else if (dataVal != null && dataUnit != null) { - return String.valueOf(dataVal) + String.valueOf(dataUnit); + public String handleValue(PersonControlVo.BraceletInfo braceletInfo) { + String dataVal = braceletInfo.getDataVal(); + String dataUnit = braceletInfo.getDataUnit(); + if (StringUtils.isNotBlank(dataVal) && dataUnit == null) { + return dataVal; + } else if (StringUtils.isBlank(dataVal) && StringUtils.isNotBlank(dataUnit)) { + return "--" + dataUnit; + } else if (StringUtils.isNotBlank(dataVal) && StringUtils.isNotBlank(dataUnit)) { + return dataVal + dataUnit; } return "--"; } @@ -653,14 +691,14 @@ public class ConsControlServiceImpl implements IConsControlService { /** * 电量赋值 * - * @param map + * @param braceletInfo * @return String * @author cwchen * @date 2024/8/15 18:12 */ - public Double handleElecValue(Map map) { - Object dataVal = map.get("dataVal"); - if (dataVal == null || !isNumeric(String.valueOf(dataVal))) { + public Double handleElecValue(PersonControlVo.BraceletInfo braceletInfo) { + String dataVal = braceletInfo.getDataVal(); + if (StringUtils.isEmpty(dataVal) || !isNumeric(String.valueOf(dataVal))) { return 0D; } else { return Double.parseDouble(String.valueOf(dataVal)); 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 394eb4a..e98550c 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 @@ -138,7 +138,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 1 AS level, 0 AS isTeamLeader, 0 AS isWarn, - 0 AS type + 0 AS type, + 0 AS devId, + 0 AS gtId FROM tb_project tp WHERE tp.del_flag = 0 UNION ALL @@ -149,7 +151,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 2 AS level, 0 AS isTeamLeader, 0 AS isWarn, - 0 AS type + 0 AS type, + 0 AS devId, + 0 AS gtId FROM tb_project_power tpp LEFT JOIN tb_project tp ON tpp.pro_id = tp.id AND tp.del_flag = 0 WHERE tpp.del_flag = 0 @@ -157,16 +161,17 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" SELECT CONCAT('team','-',twt.team_id) AS id, twt.team_name AS label, tp.depart_id AS departId, - CONCAT('tower','-',tdu.gt_id) AS parentId, + CONCAT('tower','-',tsb.gt_id) AS parentId, 3 AS level, 0 AS isTeamLeader, 0 AS isWarn, - 0 AS type - FROM tb_dev_use tdu - LEFT JOIN tb_dev_use_bid tdub ON tdu.id = tdub.id - LEFT JOIN t_work_team twt ON tdu.team_id = twt.team_id AND twt.del_flag = 0 + 0 AS type, + 0 AS devId, + 0 AS gtId + FROM tb_sh_box tsb + LEFT JOIN t_work_team twt ON tsb.team_id = twt.team_id AND twt.del_flag = 0 LEFT JOIN tb_project tp ON twt.pro_id = tp.id AND tp.del_flag = 0 - WHERE tdub.dev_type = 'shx' AND tdub.gh_time IS NULL + WHERE tsb.del_flag = 0 AND tsb.team_id IS NOT NULL UNION ALL SELECT tpe.id, CONCAT(tpe.name,'-',tpe.phone) AS label, @@ -175,13 +180,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 4 AS level, IF(twt.team_leader_id = tpe.id,1,0) AS isTeamLeader, 0 AS isWarn, - 0 AS type - FROM tb_dev_use tdu - LEFT JOIN tb_dev_use_bid tdub ON tdu.id = tdub.id - LEFT JOIN t_work_team twt ON tdu.team_id = twt.team_id AND twt.del_flag = 0 - LEFT JOIN tb_people tpe ON twt.team_id = tpe.team_id AND tpe.del_flag = 0 + 0 AS type, + tb.id AS devId, + tsb.gt_id AS gtId + FROM tb_bracelet tb + LEFT JOIN tb_sh_box tsb ON tb.box_id = tsb.id AND tsb.del_flag = 0 + LEFT JOIN tb_people tpe ON tb.bid_id = tpe.id AND tpe.del_flag = 0 + LEFT JOIN t_work_team twt ON tpe.team_id = twt.team_id AND twt.del_flag = 0 LEFT JOIN tb_project tp ON twt.pro_id = tp.id AND tp.del_flag = 0 - WHERE tdub.dev_type = 'shx' AND tdub.gh_time IS NULL + WHERE tb.peopel_type = 0 AND tb.del_flag = 0 AND tb.bid_id IS NOT NULL UNION ALL SELECT tlu.id, CONCAT(tlu.name,'-',tlu.phone) AS label, @@ -190,13 +197,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 4 AS level, 0 AS isTeamLeader, 0 AS isWarn, - 1 AS type - FROM tb_dev_use tdu - LEFT JOIN tb_dev_use_bid tdub ON tdu.id = tdub.id - LEFT JOIN t_work_team twt ON tdu.team_id = twt.team_id AND twt.del_flag = 0 - LEFT JOIN tb_ls_user tlu ON twt.team_id = tlu.team_id - LEFT JOIN tb_project tp ON twt.pro_id = tp.id AND tp.del_flag = 0 - WHERE tdub.dev_type = 'shx' AND tdub.gh_time IS NULL + 1 AS type, + tb.id AS devId, + tsb.gt_id AS gtId + FROM tb_bracelet tb + LEFT JOIN tb_sh_box tsb ON tb.box_id = tsb.id AND tsb.del_flag = 0 + LEFT JOIN tb_ls_user tlu ON tb.bid_id = tlu.id + LEFT JOIN t_work_team twt ON tlu.team_id = twt.team_id AND twt.del_flag = 0 + LEFT JOIN tb_project tp ON twt.pro_id = tp.id AND tp.del_flag = 0 + WHERE tb.peopel_type = 1 AND tb.del_flag = 0 AND tb.bid_id IS NOT NULL ) a @@ -208,12 +217,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" AND a.departId IS NOT NULL - + - SELECT id, power_name AS powerName, lon, @@ -289,21 +284,19 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" LIMIT 1 - SELECT tpe.id,tpe.name,tpe.phone,tb.id AS devId,0 AS type - FROM t_work_team twt - LEFT JOIN tb_people tpe ON twt.team_id = tpe.team_id AND tpe.del_flag = 0 - INNER JOIN tb_bracelet tb ON tpe.id = tb.bid_id AND tb.del_flag = 0 AND tb.peopel_type = 0 - WHERE twt.team_id = #{teamId} + FROM tb_bracelet tb + LEFT JOIN tb_people tpe ON tb.bid_id = tpe.id AND tpe.del_flag = 0 + WHERE tb.peopel_type = 0 AND tpe.team_id = #{teamId} UNION ALL SELECT tls.id,tls.name,tls.phone,tb.id AS devId,1 AS type - FROM t_work_team twt - LEFT JOIN tb_ls_user tls ON twt.team_id = tls.team_id - INNER JOIN tb_bracelet tb ON tls.id = tb.bid_id AND tb.del_flag = 0 AND tb.peopel_type = 1 - WHERE twt.team_id = #{teamId} + FROM tb_bracelet tb + LEFT JOIN tb_ls_user tls ON tb.bid_id = tls.id + WHERE tb.peopel_type = 1 AND tls.team_id = #{teamId} - SELECT id , data_name AS dataName, data_val AS dataVal,