gps接口

This commit is contained in:
2025-09-04 11:23:50 +08:00
parent 17d4041ef3
commit dc8a89f05e
10 changed files with 194 additions and 24 deletions

View File

@ -7,6 +7,7 @@ import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import lombok.extern.slf4j.Slf4j;
import org.dromara.gps.domain.vo.GpsUserVo;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
@ -60,6 +61,15 @@ public class GpsEquipmentController extends BaseController {
return gpsEquipmentService.queryPageList(bo, pageQuery);
}
/**
* 查询GPS设备用户列表
*/
@SaCheckPermission("gps:equipment:list")
@GetMapping("/getUserList")
public R<List<GpsUserVo>> getUserList(GpsEquipmentBo bo) {
return R.ok(gpsEquipmentService.getUserList(bo));
}
/**
* 导出GPS设备详细列表
*/
@ -105,6 +115,27 @@ public class GpsEquipmentController extends BaseController {
return toAjax(gpsEquipmentService.updateByBo(bo));
}
/**
* GPS人机关联绑定
*/
@SaCheckPermission("gps:equipment:bindManmachine")
@Log(title = "GPS设备详细", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PostMapping("/bindManmachine")
public R<Void> bindManmachine(@RequestBody GpsEquipmentBo bo) {
return toAjax(gpsEquipmentService.bindManmachine(bo));
}
/**
* GPS人机关联解绑
*/
@SaCheckPermission("gps:equipment:unbindManmachine")
@Log(title = "GPS设备详细", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PostMapping("/unbindManmachine")
public R<Void> unbindManmachine(@RequestBody GpsEquipmentBo bo) {
return toAjax(gpsEquipmentService.unbindManmachine(bo));
}
/**
* 删除GPS设备详细
*

View File

@ -35,6 +35,7 @@ public class GpsEquipment extends BaseEntity {
/**
* 用户id
*/
@TableField("user_id")
private Long userId;
/**

View File

@ -6,6 +6,7 @@ import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serial;
import java.math.BigDecimal;
/**
* GPS设备定位信息对象 gps_equipment_son
@ -75,12 +76,12 @@ public class GpsEquipmentSon extends BaseEntity {
/**
* 纬度精确到6位小数
*/
private Long locLatitude;
private BigDecimal locLatitude;
/**
* 经度精确到6位小数
*/
private Long locLongitude;
private BigDecimal locLongitude;
/**
* 海拔高度单位未明确默认0

View File

@ -6,6 +6,7 @@ import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serial;
import java.io.Serializable;
/**
* GPS人机关联对象 gps_manmachine
@ -14,9 +15,9 @@ import java.io.Serial;
* @date 2025-08-28
*/
@Data
@EqualsAndHashCode(callSuper = true)
//@EqualsAndHashCode(callSuper = true)
@TableName("gps_manmachine")
public class GpsManmachine extends BaseEntity {
public class GpsManmachine implements Serializable {
@Serial
private static final long serialVersionUID = 1L;

View File

@ -9,6 +9,8 @@ import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
import java.math.BigDecimal;
/**
* GPS设备定位信息业务对象 gps_equipment_son
*
@ -74,12 +76,12 @@ public class GpsEquipmentSonBo extends BaseEntity {
/**
* 纬度精确到6位小数
*/
private Long locLatitude;
private BigDecimal locLatitude;
/**
* 经度精确到6位小数
*/
private Long locLongitude;
private BigDecimal locLongitude;
/**
* 海拔高度单位未明确默认0

View File

@ -10,6 +10,7 @@ import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
@ -96,14 +97,14 @@ public class GpsEquipmentSonVo implements Serializable {
*/
@ExcelProperty(value = "纬度", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "精=确到6位小数")
private Long locLatitude;
private BigDecimal locLatitude;
/**
* 经度精确到6位小数
*/
@ExcelProperty(value = "经度", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "精=确到6位小数")
private Long locLongitude;
private BigDecimal locLongitude;
/**
* 海拔高度单位未明确默认0

View File

@ -0,0 +1,44 @@
package org.dromara.gps.domain.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import org.dromara.gps.domain.GpsManmachine;
import java.io.Serial;
import java.io.Serializable;
/**
* GPS人机关联视图对象 gps_manmachine
*
* @author Lion Li
* @date 2025-08-28
*/
@Data
//@ExcelIgnoreUnannotated
//@AutoMapper(target = GpsManmachine.class)
public class GpsUserVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
*类型1、历史0、当前
*/
// @ExcelProperty(value = "")
private Integer type;
/**
*
*/
// @ExcelProperty(value = "")
private Long userId;
/**
* 用户名
*/
private String userName;
}

View File

@ -1,8 +1,15 @@
package org.dromara.gps.mapper;
import jakarta.validation.constraints.NotNull;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import org.dromara.gps.domain.GpsEquipment;
import org.dromara.gps.domain.vo.GpsEquipmentVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.gps.domain.vo.GpsUserVo;
import java.util.List;
/**
* GPS设备详细Mapper接口
@ -12,4 +19,14 @@ import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
*/
public interface GpsEquipmentMapper extends BaseMapperPlus<GpsEquipment, GpsEquipmentVo> {
@Select("SELECT\n" +
" gm.user_id AS userId,\n" +
" su.user_name AS userName \n" +
"FROM\n" +
" gps_equipment_son gm\n" +
" LEFT JOIN sys_user su ON gm.user_id = su.user_id \n" +
"WHERE\n" +
" gm.client_id = #{clientId}" +
" GROUP BY gm.user_id")
List<GpsUserVo> getUserList(@Param("clientId") String clientId);
}

View File

@ -1,5 +1,6 @@
package org.dromara.gps.service;
import org.dromara.common.core.domain.R;
import org.dromara.gps.domain.vo.GpsEquipmentVo;
import org.dromara.gps.domain.bo.GpsEquipmentBo;
import org.dromara.gps.domain.GpsEquipment;
@ -7,6 +8,8 @@ import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.service.IService;
import org.dromara.gps.domain.vo.GpsUserVo;
import java.util.Collection;
import java.util.List;
@ -73,4 +76,20 @@ public interface IGpsEquipmentService extends IService<GpsEquipment>{
* @param jsonData
*/
void dataAcceptance(String jsonData);
/**
* GPS人机关联绑定
* @param bo
* @return
*/
Boolean bindManmachine(GpsEquipmentBo bo);
/**
* GPS人机关联解绑
* @param bo
* @return
*/
Boolean unbindManmachine(GpsEquipmentBo bo);
List<GpsUserVo> getUserList(GpsEquipmentBo bo);
}

View File

@ -2,7 +2,9 @@ package org.dromara.gps.service.impl;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
@ -14,6 +16,7 @@ import lombok.RequiredArgsConstructor;
import org.dromara.gps.domain.GpsEquipmentSon;
import org.dromara.gps.domain.GpsManmachine;
import org.dromara.gps.domain.bo.GpsEquipmentSonBo;
import org.dromara.gps.domain.vo.GpsUserVo;
import org.dromara.gps.mapper.GpsManmachineMapper;
import org.dromara.gps.service.IGpsEquipmentSonService;
import org.dromara.gps.service.IGpsManmachineService;
@ -26,9 +29,8 @@ import org.dromara.gps.domain.GpsEquipment;
import org.dromara.gps.mapper.GpsEquipmentMapper;
import org.dromara.gps.service.IGpsEquipmentService;
import java.util.List;
import java.util.Map;
import java.util.Collection;
import java.math.BigDecimal;
import java.util.*;
/**
* GPS设备详细Service业务层处理
@ -160,22 +162,73 @@ public class GpsEquipmentServiceImpl extends ServiceImpl<GpsEquipmentMapper, Gps
GpsEquipmentSonBo gpsEquipmentSon = JSONUtil.toBean(device, GpsEquipmentSonBo.class);
JSONObject location = device.getJSONObject("location");
gpsEquipmentSon.setLocAltitude(location.getLong("altitude"));
gpsEquipmentSon.setLocLatitude(location.getLong("latitude"));
gpsEquipmentSon.setLocLongitude(location.getLong("longitude"));
gpsEquipmentSon.setLocSpeed(location.getLong("speed"));
gpsEquipmentSon.setLocDirection(location.getLong("direction"));
gpsEquipmentSon.setLocSpeedKph(location.getLong("speedKph"));
gpsEquipmentSon.setLocStatusBit(location.getLong("statusBit"));
gpsEquipmentSon.setLocWarnBit(location.getLong("warnBit"));
gpsEquipmentSon.setLocDeviceTime(location.getLong("deviceTime"));
gpsEquipmentSon.setLocLatitude(location.getBigDecimal("latitude"));
gpsEquipmentSon.setLocLongitude(location.getBigDecimal("longitude"));
if (!(gpsEquipmentSon.getLocLatitude().compareTo(BigDecimal.ZERO) == 0) || !(gpsEquipmentSon.getLocLongitude().compareTo(BigDecimal.ZERO) == 0)) {
gpsEquipmentSon.setLocAltitude(location.getLong("altitude"));
gpsEquipmentSon.setLocSpeed(location.getLong("speed"));
gpsEquipmentSon.setLocDirection(location.getLong("direction"));
gpsEquipmentSon.setLocSpeedKph(location.getLong("speedKph"));
gpsEquipmentSon.setLocStatusBit(location.getLong("statusBit"));
gpsEquipmentSon.setLocWarnBit(location.getLong("warnBit"));
gpsEquipmentSon.setLocDeviceTime(location.getLong("deviceTime"));
gpsEquipmentSon.setClientId(gpsEquipment.getClientId());
if (equipment != null && equipment.getUserId() != null) {
gpsEquipmentSon.setUserId(equipment.getUserId());
gpsEquipmentSon.setClientId(gpsEquipment.getClientId());
if (equipment != null && equipment.getUserId() != null) {
gpsEquipmentSon.setUserId(equipment.getUserId());
}
gpsEquipmentSonService.insertByBo(gpsEquipmentSon);
}
}
gpsEquipmentSonService.insertByBo(gpsEquipmentSon);
@Override
public Boolean bindManmachine(GpsEquipmentBo bo) {
baseMapper.update(new LambdaUpdateWrapper<GpsEquipment>()
.set(GpsEquipment::getUserId,bo.getUserId())
.eq(GpsEquipment::getId,bo.getId()));
GpsManmachine gpsManmachine = new GpsManmachine();
gpsManmachine.setClientId(bo.getClientId());
gpsManmachine.setUserId(bo.getUserId());
return gpsManmachineMapper.insert(gpsManmachine) > 0;
}
@Override
public Boolean unbindManmachine(GpsEquipmentBo bo) {
baseMapper.update(new LambdaUpdateWrapper<GpsEquipment>()
.set(GpsEquipment::getUserId,null)
.eq(GpsEquipment::getId,bo.getId()));
GpsManmachine gpsManmachine = new GpsManmachine();
gpsManmachine.setClientId(bo.getClientId());
gpsManmachine.setUserId(bo.getUserId());
return gpsManmachineMapper.delete(new LambdaQueryWrapper<GpsManmachine>()
.eq(GpsManmachine::getClientId, gpsManmachine.getClientId())
.eq(GpsManmachine::getUserId,gpsManmachine.getUserId()))> 0;
}
/**
* 获取设备绑定用户列表
* @param bo
* @return
*/
@Override
public List<GpsUserVo> getUserList(GpsEquipmentBo bo) {
List<GpsUserVo> gpsUserVos = baseMapper.getUserList(bo.getClientId());
if (gpsUserVos == null || gpsUserVos.isEmpty()) {
return null;
}
List<GpsUserVo> list = gpsUserVos.stream().filter(Objects::nonNull).toList();
// GpsEquipment gpsEquipment = baseMapper.selectOne(new LambdaQueryWrapper<GpsEquipment>().eq(GpsEquipment::getClientId, bo.getClientId()));
GpsManmachine gpsManmachine = gpsManmachineMapper.selectOne(new LambdaQueryWrapper<GpsManmachine>().eq(GpsManmachine::getClientId, bo.getClientId()));
for (GpsUserVo item : list) {
if (gpsManmachine != null && gpsManmachine.getUserId().equals(item.getUserId())) {
item.setType(0);
}else {
item.setType(1);
}
}
return list;
}
}