设计权限

This commit is contained in:
2025-08-29 01:30:46 +08:00
parent 073f614a21
commit 7daf2ada66
23 changed files with 1812 additions and 2 deletions

View File

@ -125,6 +125,7 @@ security:
# todo 仅测试 # todo 仅测试
- /facility/matrix/** - /facility/matrix/**
- /**/changxie/callback/** - /**/changxie/callback/**
- /gps/equipment/dataAcceptance
# 多租户配置 # 多租户配置
tenant: tenant:
@ -194,6 +195,7 @@ api-decrypt:
- /actuator/** # 放行监控接口 - /actuator/** # 放行监控接口
- /other/ys7Device/webhook # 放行萤石云设备回调接口 - /other/ys7Device/webhook # 放行萤石云设备回调接口
- /auth/register # 放行注册接口 - /auth/register # 放行注册接口
- /gps/equipment/dataAcceptance # GPS数据接收接口
springdoc: springdoc:
api-docs: api-docs:
@ -269,6 +271,8 @@ springdoc:
packages-to-scan: org.dromara.bigscreen packages-to-scan: org.dromara.bigscreen
- group: 22.投标管理模块 - group: 22.投标管理模块
packages-to-scan: org.dromara.bidding packages-to-scan: org.dromara.bidding
- group: 23.GPS定位模块
packages-to-scan: org.dromara.gps
# - group: 20.合同模块 # - group: 20.合同模块
# packages-to-scan: org.dromara.ctr # packages-to-scan: org.dromara.ctr

View File

@ -107,6 +107,7 @@ public class DesCollectController extends BaseController {
/** /**
* 批量新增或修改 * 批量新增或修改
*/ */
@SaCheckPermission("design:collect:batch")
@RepeatSubmit() @RepeatSubmit()
@PostMapping("/batch") @PostMapping("/batch")
public R<Void> batchAddOrUpdate(@RequestBody DesCollectBatchDto dto) { public R<Void> batchAddOrUpdate(@RequestBody DesCollectBatchDto dto) {
@ -118,7 +119,7 @@ public class DesCollectController extends BaseController {
* *
* @param projectId 项目ID * @param projectId 项目ID
*/ */
@SaCheckPermission("design:collect:query") @SaCheckPermission("design:collect:byProjectId")
@GetMapping("/byProjectId/{projectId}") @GetMapping("/byProjectId/{projectId}")
public R<DesCollectVo> getInfoByProjectId(@NotNull(message = "项目ID不能为空") public R<DesCollectVo> getInfoByProjectId(@NotNull(message = "项目ID不能为空")
@PathVariable Long projectId) { @PathVariable Long projectId) {
@ -128,7 +129,7 @@ public class DesCollectController extends BaseController {
/** /**
* 清单导出 * 清单导出
*/ */
@SaCheckPermission("design:collect:export") @SaCheckPermission("design:collect:exportWord")
@Log(title = "收资清单", businessType = BusinessType.EXPORT) @Log(title = "收资清单", businessType = BusinessType.EXPORT)
@PostMapping("/exportWord") @PostMapping("/exportWord")
public void exportWordById(Long id, HttpServletResponse response){ public void exportWordById(Long id, HttpServletResponse response){

View File

@ -0,0 +1,120 @@
package org.dromara.gps.controller;
import java.util.List;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.web.core.BaseController;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.gps.domain.vo.GpsEquipmentVo;
import org.dromara.gps.domain.bo.GpsEquipmentBo;
import org.dromara.gps.service.IGpsEquipmentService;
import org.dromara.common.mybatis.core.page.TableDataInfo;
/**
* GPS设备详细
*
* @author Lion Li
* @date 2025-08-28
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/gps/equipment")
@Slf4j
public class GpsEquipmentController extends BaseController {
private final IGpsEquipmentService gpsEquipmentService;
/**
* 接收设备数据
* @param jsonData
* @return
*/
@PostMapping("/dataAcceptance")
public R<Void> dataAcceptance(@RequestBody String jsonData) {
log.info("接收设备数据:{}", jsonData);
gpsEquipmentService.dataAcceptance(jsonData);
return toAjax(true);
}
/**
* 查询GPS设备详细列表
*/
@SaCheckPermission("gps:equipment:list")
@GetMapping("/list")
public TableDataInfo<GpsEquipmentVo> list(GpsEquipmentBo bo, PageQuery pageQuery) {
return gpsEquipmentService.queryPageList(bo, pageQuery);
}
/**
* 导出GPS设备详细列表
*/
@SaCheckPermission("gps:equipment:export")
@Log(title = "GPS设备详细", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(GpsEquipmentBo bo, HttpServletResponse response) {
List<GpsEquipmentVo> list = gpsEquipmentService.queryList(bo);
ExcelUtil.exportExcel(list, "GPS设备详细", GpsEquipmentVo.class, response);
}
/**
* 获取GPS设备详细详细信息
*
* @param id 主键
*/
@SaCheckPermission("gps:equipment:query")
@GetMapping("/{id}")
public R<GpsEquipmentVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(gpsEquipmentService.queryById(id));
}
/**
* 新增GPS设备详细
*/
@SaCheckPermission("gps:equipment:add")
@Log(title = "GPS设备详细", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody GpsEquipmentBo bo) {
return toAjax(gpsEquipmentService.insertByBo(bo));
}
/**
* 修改GPS设备详细
*/
@SaCheckPermission("gps:equipment:edit")
@Log(title = "GPS设备详细", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody GpsEquipmentBo bo) {
return toAjax(gpsEquipmentService.updateByBo(bo));
}
/**
* 删除GPS设备详细
*
* @param ids 主键串
*/
@SaCheckPermission("gps:equipment:remove")
@Log(title = "GPS设备详细", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) {
return toAjax(gpsEquipmentService.deleteWithValidByIds(List.of(ids), true));
}
}

View File

@ -0,0 +1,105 @@
package org.dromara.gps.controller;
import java.util.List;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.web.core.BaseController;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.gps.domain.vo.GpsEquipmentSonVo;
import org.dromara.gps.domain.bo.GpsEquipmentSonBo;
import org.dromara.gps.service.IGpsEquipmentSonService;
import org.dromara.common.mybatis.core.page.TableDataInfo;
/**
* GPS设备定位信息
*
* @author Lion Li
* @date 2025-08-28
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/gps/equipmentSon")
public class GpsEquipmentSonController extends BaseController {
private final IGpsEquipmentSonService gpsEquipmentSonService;
/**
* 查询GPS设备定位信息列表
*/
@SaCheckPermission("gps:equipmentSon:list")
@GetMapping("/list")
public TableDataInfo<GpsEquipmentSonVo> list(GpsEquipmentSonBo bo, PageQuery pageQuery) {
return gpsEquipmentSonService.queryPageList(bo, pageQuery);
}
/**
* 导出GPS设备定位信息列表
*/
@SaCheckPermission("gps:equipmentSon:export")
@Log(title = "GPS设备定位信息", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(GpsEquipmentSonBo bo, HttpServletResponse response) {
List<GpsEquipmentSonVo> list = gpsEquipmentSonService.queryList(bo);
ExcelUtil.exportExcel(list, "GPS设备定位信息", GpsEquipmentSonVo.class, response);
}
/**
* 获取GPS设备定位信息详细信息
*
* @param id 主键
*/
@SaCheckPermission("gps:equipmentSon:query")
@GetMapping("/{id}")
public R<GpsEquipmentSonVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(gpsEquipmentSonService.queryById(id));
}
/**
* 新增GPS设备定位信息
*/
@SaCheckPermission("gps:equipmentSon:add")
@Log(title = "GPS设备定位信息", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody GpsEquipmentSonBo bo) {
return toAjax(gpsEquipmentSonService.insertByBo(bo));
}
/**
* 修改GPS设备定位信息
*/
@SaCheckPermission("gps:equipmentSon:edit")
@Log(title = "GPS设备定位信息", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody GpsEquipmentSonBo bo) {
return toAjax(gpsEquipmentSonService.updateByBo(bo));
}
/**
* 删除GPS设备定位信息
*
* @param ids 主键串
*/
@SaCheckPermission("gps:equipmentSon:remove")
@Log(title = "GPS设备定位信息", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) {
return toAjax(gpsEquipmentSonService.deleteWithValidByIds(List.of(ids), true));
}
}

View File

@ -0,0 +1,105 @@
package org.dromara.gps.controller;
import java.util.List;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.web.core.BaseController;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.gps.domain.vo.GpsManmachineVo;
import org.dromara.gps.domain.bo.GpsManmachineBo;
import org.dromara.gps.service.IGpsManmachineService;
import org.dromara.common.mybatis.core.page.TableDataInfo;
/**
* GPS人机关联
*
* @author Lion Li
* @date 2025-08-28
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/gps/manmachine")
public class GpsManmachineController extends BaseController {
private final IGpsManmachineService gpsManmachineService;
/**
* 查询GPS人机关联列表
*/
@SaCheckPermission("gps:manmachine:list")
@GetMapping("/list")
public TableDataInfo<GpsManmachineVo> list(GpsManmachineBo bo, PageQuery pageQuery) {
return gpsManmachineService.queryPageList(bo, pageQuery);
}
/**
* 导出GPS人机关联列表
*/
@SaCheckPermission("gps:manmachine:export")
@Log(title = "GPS人机关联", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(GpsManmachineBo bo, HttpServletResponse response) {
List<GpsManmachineVo> list = gpsManmachineService.queryList(bo);
ExcelUtil.exportExcel(list, "GPS人机关联", GpsManmachineVo.class, response);
}
/**
* 获取GPS人机关联详细信息
*
* @param clientId 主键
*/
@SaCheckPermission("gps:manmachine:query")
@GetMapping("/{clientId}")
public R<GpsManmachineVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable String clientId) {
return R.ok(gpsManmachineService.queryById(clientId));
}
/**
* 新增GPS人机关联
*/
@SaCheckPermission("gps:manmachine:add")
@Log(title = "GPS人机关联", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody GpsManmachineBo bo) {
return toAjax(gpsManmachineService.insertByBo(bo));
}
/**
* 修改GPS人机关联
*/
@SaCheckPermission("gps:manmachine:edit")
@Log(title = "GPS人机关联", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody GpsManmachineBo bo) {
return toAjax(gpsManmachineService.updateByBo(bo));
}
/**
* 删除GPS人机关联
*
* @param clientIds 主键串
*/
@SaCheckPermission("gps:manmachine:remove")
@Log(title = "GPS人机关联", businessType = BusinessType.DELETE)
@DeleteMapping("/{clientIds}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable String[] clientIds) {
return toAjax(gpsManmachineService.deleteWithValidByIds(List.of(clientIds), true));
}
}

View File

@ -0,0 +1,81 @@
package org.dromara.gps.domain;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serial;
/**
* GPS设备详细对象 gps_equipment
*
* @author Lion Li
* @date 2025-08-28
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("gps_equipment")
public class GpsEquipment extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@TableId(value = "id")
private Long id;
/**
* 项目ID
*/
private Long projectId;
/**
* 用户id
*/
private Long userId;
/**
* 设备标识
*/
private String clientId;
/**
* 设备名称
*/
private String deviceName;
/**
* 是否使用UDP协议0=否1=是
*/
private Long udp;
/**
* 远程连接地址IP:端口)
*/
private String remoteAddressStr;
/**
* 连接创建时间
*/
private Long creationTime;
/**
* 最后活动时间
*/
private Long lastAccessedTime;
/**
* 是否已注册0=未注册1=已注册
*/
private Long registered;
/**
* 备注
*/
private String remark;
}

View File

@ -0,0 +1,116 @@
package org.dromara.gps.domain;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serial;
/**
* GPS设备定位信息对象 gps_equipment_son
*
* @author Lion Li
* @date 2025-08-28
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("gps_equipment_son")
public class GpsEquipmentSon extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@TableId(value = "id")
private Long id;
/**
* 用户ID
*/
private Long userId;
/**
* 设备标识
*/
private String clientId;
/**
* 设备名称
*/
private String deviceName;
/**
* 设备硬件ID
*/
private String deviceId;
/**
* 设备关联手机号(可为空,无手机号设备用)
*/
private String mobileNo;
/**
* 车牌号码(车辆类设备用,可为空)
*/
private String plateNo;
/**
* 通信协议版本号
*/
private Long protocolVersion;
/**
* 定位告警标识位0=无告警
*/
private Long locWarnBit;
/**
* 定位状态标识位(协议编码值)
*/
private Long locStatusBit;
/**
* 纬度精确到6位小数
*/
private Long locLatitude;
/**
* 经度精确到6位小数
*/
private Long locLongitude;
/**
* 海拔高度单位未明确默认0
*/
private Long locAltitude;
/**
* 原始速度(单位未明确)
*/
private Long locSpeed;
/**
* 速度(千米/小时Kph
*/
private Long locSpeedKph;
/**
* 行进方向0-360度
*/
private Long locDirection;
/**
* 设备定位数据采集时间支持毫秒级ISO 8601格式转换后
*/
private Long locDeviceTime;
/**
* 备注
*/
private String remark;
}

View File

@ -0,0 +1,36 @@
package org.dromara.gps.domain;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serial;
/**
* GPS人机关联对象 gps_manmachine
*
* @author Lion Li
* @date 2025-08-28
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("gps_manmachine")
public class GpsManmachine extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
*
*/
@TableId(value = "client_id")
private String clientId;
/**
*
*/
private Long userId;
}

View File

@ -0,0 +1,80 @@
package org.dromara.gps.domain.bo;
import org.dromara.gps.domain.GpsEquipment;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
/**
* GPS设备详细业务对象 gps_equipment
*
* @author Lion Li
* @date 2025-08-28
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = GpsEquipment.class, reverseConvertGenerate = false)
public class GpsEquipmentBo extends BaseEntity {
/**
* 主键ID
*/
@NotNull(message = "主键ID不能为空", groups = { EditGroup.class })
private Long id;
/**
* 项目ID
*/
private Long projectId;
/**
* 用户id
*/
private Long userId;
/**
* 设备标识
*/
private String clientId;
/**
* 设备名称
*/
private String deviceName;
/**
* 是否使用UDP协议0=否1=是
*/
private Long udp;
/**
* 远程连接地址IP:端口)
*/
private String remoteAddressStr;
/**
* 连接创建时间
*/
private Long creationTime;
/**
* 最后活动时间
*/
private Long lastAccessedTime;
/**
* 是否已注册0=未注册1=已注册
*/
private Long registered;
/**
* 备注
*/
private String remark;
}

View File

@ -0,0 +1,115 @@
package org.dromara.gps.domain.bo;
import org.dromara.gps.domain.GpsEquipmentSon;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
/**
* GPS设备定位信息业务对象 gps_equipment_son
*
* @author Lion Li
* @date 2025-08-28
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = GpsEquipmentSon.class, reverseConvertGenerate = false)
public class GpsEquipmentSonBo extends BaseEntity {
/**
* 主键ID
*/
@NotNull(message = "主键ID不能为空", groups = { EditGroup.class })
private Long id;
/**
* 用户ID
*/
private Long userId;
/**
* 设备标识
*/
private String clientId;
/**
* 设备名称
*/
private String deviceName;
/**
* 设备硬件ID
*/
private String deviceId;
/**
* 设备关联手机号(可为空,无手机号设备用)
*/
private String mobileNo;
/**
* 车牌号码(车辆类设备用,可为空)
*/
private String plateNo;
/**
* 通信协议版本号
*/
private Long protocolVersion;
/**
* 定位告警标识位0=无告警
*/
private Long locWarnBit;
/**
* 定位状态标识位(协议编码值)
*/
private Long locStatusBit;
/**
* 纬度精确到6位小数
*/
private Long locLatitude;
/**
* 经度精确到6位小数
*/
private Long locLongitude;
/**
* 海拔高度单位未明确默认0
*/
private Long locAltitude;
/**
* 原始速度(单位未明确)
*/
private Long locSpeed;
/**
* 速度(千米/小时Kph
*/
private Long locSpeedKph;
/**
* 行进方向0-360度
*/
private Long locDirection;
/**
* 设备定位数据采集时间支持毫秒级ISO 8601格式转换后
*/
private Long locDeviceTime;
/**
* 备注
*/
private String remark;
}

View File

@ -0,0 +1,35 @@
package org.dromara.gps.domain.bo;
import org.dromara.gps.domain.GpsManmachine;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
/**
* GPS人机关联业务对象 gps_manmachine
*
* @author Lion Li
* @date 2025-08-28
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = GpsManmachine.class, reverseConvertGenerate = false)
public class GpsManmachineBo extends BaseEntity {
/**
*
*/
@NotBlank(message = "不能为空", groups = { EditGroup.class })
private String clientId;
/**
*
*/
private Long userId;
}

View File

@ -0,0 +1,150 @@
package org.dromara.gps.domain.vo;
import org.dromara.gps.domain.GpsEquipmentSon;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
/**
* GPS设备定位信息视图对象 gps_equipment_son
*
* @author Lion Li
* @date 2025-08-28
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = GpsEquipmentSon.class)
public class GpsEquipmentSonVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@ExcelProperty(value = "主键ID")
private Long id;
/**
* 用户ID
*/
@ExcelProperty(value = "用户ID")
private Long userId;
/**
* 设备标识
*/
@ExcelProperty(value = "设备标识")
private String clientId;
/**
* 设备名称
*/
@ExcelProperty(value = "设备名称")
private String deviceName;
/**
* 设备硬件ID
*/
@ExcelProperty(value = "设备硬件ID")
private String deviceId;
/**
* 设备关联手机号(可为空,无手机号设备用)
*/
@ExcelProperty(value = "设备关联手机号", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "可=为空,无手机号设备用")
private String mobileNo;
/**
* 车牌号码(车辆类设备用,可为空)
*/
@ExcelProperty(value = "车牌号码", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "车=辆类设备用,可为空")
private String plateNo;
/**
* 通信协议版本号
*/
@ExcelProperty(value = "通信协议版本号")
private Long protocolVersion;
/**
* 定位告警标识位0=无告警
*/
@ExcelProperty(value = "定位告警标识位0=无告警")
private Long locWarnBit;
/**
* 定位状态标识位(协议编码值)
*/
@ExcelProperty(value = "定位状态标识位", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "协=议编码值")
private Long locStatusBit;
/**
* 纬度精确到6位小数
*/
@ExcelProperty(value = "纬度", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "精=确到6位小数")
private Long locLatitude;
/**
* 经度精确到6位小数
*/
@ExcelProperty(value = "经度", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "精=确到6位小数")
private Long locLongitude;
/**
* 海拔高度单位未明确默认0
*/
@ExcelProperty(value = "海拔高度", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "单=位未明确默认0")
private Long locAltitude;
/**
* 原始速度(单位未明确)
*/
@ExcelProperty(value = "原始速度", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "单=位未明确")
private Long locSpeed;
/**
* 速度(千米/小时Kph
*/
@ExcelProperty(value = "速度", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "千=米/小时Kph")
private Long locSpeedKph;
/**
* 行进方向0-360度
*/
@ExcelProperty(value = "行进方向", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "0=-360度")
private Long locDirection;
/**
* 设备定位数据采集时间支持毫秒级ISO 8601格式转换后
*/
@ExcelProperty(value = "设备定位数据采集时间", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "支=持毫秒级ISO,8=601格式转换后")
private Long locDeviceTime;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
}

View File

@ -0,0 +1,99 @@
package org.dromara.gps.domain.vo;
import org.dromara.gps.domain.GpsEquipment;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
/**
* GPS设备详细视图对象 gps_equipment
*
* @author Lion Li
* @date 2025-08-28
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = GpsEquipment.class)
public class GpsEquipmentVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@ExcelProperty(value = "主键ID")
private Long id;
/**
* 项目ID
*/
@ExcelProperty(value = "项目ID")
private Long projectId;
/**
* 用户id
*/
@ExcelProperty(value = "用户id")
private Long userId;
/**
* 设备标识
*/
@ExcelProperty(value = "设备标识")
private String clientId;
/**
* 设备名称
*/
@ExcelProperty(value = "设备名称")
private String deviceName;
/**
* 是否使用UDP协议0=否1=是
*/
@ExcelProperty(value = "是否使用UDP协议0=否1=是")
private Long udp;
/**
* 远程连接地址IP:端口)
*/
@ExcelProperty(value = "远程连接地址", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "I=P:端口")
private String remoteAddressStr;
/**
* 连接创建时间
*/
@ExcelProperty(value = "连接创建时间")
private Long creationTime;
/**
* 最后活动时间
*/
@ExcelProperty(value = "最后活动时间")
private Long lastAccessedTime;
/**
* 是否已注册0=未注册1=已注册
*/
@ExcelProperty(value = "是否已注册0=未注册1=已注册")
private Long registered;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
}

View File

@ -0,0 +1,44 @@
package org.dromara.gps.domain.vo;
import org.dromara.gps.domain.GpsManmachine;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
/**
* GPS人机关联视图对象 gps_manmachine
*
* @author Lion Li
* @date 2025-08-28
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = GpsManmachine.class)
public class GpsManmachineVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
*
*/
@ExcelProperty(value = "")
private String clientId;
/**
*
*/
@ExcelProperty(value = "")
private Long userId;
}

View File

@ -0,0 +1,15 @@
package org.dromara.gps.mapper;
import org.dromara.gps.domain.GpsEquipment;
import org.dromara.gps.domain.vo.GpsEquipmentVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
* GPS设备详细Mapper接口
*
* @author Lion Li
* @date 2025-08-28
*/
public interface GpsEquipmentMapper extends BaseMapperPlus<GpsEquipment, GpsEquipmentVo> {
}

View File

@ -0,0 +1,15 @@
package org.dromara.gps.mapper;
import org.dromara.gps.domain.GpsEquipmentSon;
import org.dromara.gps.domain.vo.GpsEquipmentSonVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
* GPS设备定位信息Mapper接口
*
* @author Lion Li
* @date 2025-08-28
*/
public interface GpsEquipmentSonMapper extends BaseMapperPlus<GpsEquipmentSon, GpsEquipmentSonVo> {
}

View File

@ -0,0 +1,15 @@
package org.dromara.gps.mapper;
import org.dromara.gps.domain.GpsManmachine;
import org.dromara.gps.domain.vo.GpsManmachineVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
* GPS人机关联Mapper接口
*
* @author Lion Li
* @date 2025-08-28
*/
public interface GpsManmachineMapper extends BaseMapperPlus<GpsManmachine, GpsManmachineVo> {
}

View File

@ -0,0 +1,76 @@
package org.dromara.gps.service;
import org.dromara.gps.domain.vo.GpsEquipmentVo;
import org.dromara.gps.domain.bo.GpsEquipmentBo;
import org.dromara.gps.domain.GpsEquipment;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.Collection;
import java.util.List;
/**
* GPS设备详细Service接口
*
* @author Lion Li
* @date 2025-08-28
*/
public interface IGpsEquipmentService extends IService<GpsEquipment>{
/**
* 查询GPS设备详细
*
* @param id 主键
* @return GPS设备详细
*/
GpsEquipmentVo queryById(Long id);
/**
* 分页查询GPS设备详细列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return GPS设备详细分页列表
*/
TableDataInfo<GpsEquipmentVo> queryPageList(GpsEquipmentBo bo, PageQuery pageQuery);
/**
* 查询符合条件的GPS设备详细列表
*
* @param bo 查询条件
* @return GPS设备详细列表
*/
List<GpsEquipmentVo> queryList(GpsEquipmentBo bo);
/**
* 新增GPS设备详细
*
* @param bo GPS设备详细
* @return 是否新增成功
*/
Boolean insertByBo(GpsEquipmentBo bo);
/**
* 修改GPS设备详细
*
* @param bo GPS设备详细
* @return 是否修改成功
*/
Boolean updateByBo(GpsEquipmentBo bo);
/**
* 校验并批量删除GPS设备详细信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
/**
* 接收设备数据
* @param jsonData
*/
void dataAcceptance(String jsonData);
}

View File

@ -0,0 +1,70 @@
package org.dromara.gps.service;
import org.dromara.gps.domain.vo.GpsEquipmentSonVo;
import org.dromara.gps.domain.bo.GpsEquipmentSonBo;
import org.dromara.gps.domain.GpsEquipmentSon;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.Collection;
import java.util.List;
/**
* GPS设备定位信息Service接口
*
* @author Lion Li
* @date 2025-08-28
*/
public interface IGpsEquipmentSonService extends IService<GpsEquipmentSon>{
/**
* 查询GPS设备定位信息
*
* @param id 主键
* @return GPS设备定位信息
*/
GpsEquipmentSonVo queryById(Long id);
/**
* 分页查询GPS设备定位信息列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return GPS设备定位信息分页列表
*/
TableDataInfo<GpsEquipmentSonVo> queryPageList(GpsEquipmentSonBo bo, PageQuery pageQuery);
/**
* 查询符合条件的GPS设备定位信息列表
*
* @param bo 查询条件
* @return GPS设备定位信息列表
*/
List<GpsEquipmentSonVo> queryList(GpsEquipmentSonBo bo);
/**
* 新增GPS设备定位信息
*
* @param bo GPS设备定位信息
* @return 是否新增成功
*/
Boolean insertByBo(GpsEquipmentSonBo bo);
/**
* 修改GPS设备定位信息
*
* @param bo GPS设备定位信息
* @return 是否修改成功
*/
Boolean updateByBo(GpsEquipmentSonBo bo);
/**
* 校验并批量删除GPS设备定位信息信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
}

View File

@ -0,0 +1,70 @@
package org.dromara.gps.service;
import org.dromara.gps.domain.vo.GpsManmachineVo;
import org.dromara.gps.domain.bo.GpsManmachineBo;
import org.dromara.gps.domain.GpsManmachine;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.Collection;
import java.util.List;
/**
* GPS人机关联Service接口
*
* @author Lion Li
* @date 2025-08-28
*/
public interface IGpsManmachineService extends IService<GpsManmachine>{
/**
* 查询GPS人机关联
*
* @param clientId 主键
* @return GPS人机关联
*/
GpsManmachineVo queryById(String clientId);
/**
* 分页查询GPS人机关联列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return GPS人机关联分页列表
*/
TableDataInfo<GpsManmachineVo> queryPageList(GpsManmachineBo bo, PageQuery pageQuery);
/**
* 查询符合条件的GPS人机关联列表
*
* @param bo 查询条件
* @return GPS人机关联列表
*/
List<GpsManmachineVo> queryList(GpsManmachineBo bo);
/**
* 新增GPS人机关联
*
* @param bo GPS人机关联
* @return 是否新增成功
*/
Boolean insertByBo(GpsManmachineBo bo);
/**
* 修改GPS人机关联
*
* @param bo GPS人机关联
* @return 是否修改成功
*/
Boolean updateByBo(GpsManmachineBo bo);
/**
* 校验并批量删除GPS人机关联信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
Boolean deleteWithValidByIds(Collection<String> ids, Boolean isValid);
}

View File

@ -0,0 +1,181 @@
package org.dromara.gps.service.impl;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
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.mapper.GpsManmachineMapper;
import org.dromara.gps.service.IGpsEquipmentSonService;
import org.dromara.gps.service.IGpsManmachineService;
import org.plutext.jaxb.svg11.G;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.dromara.gps.domain.bo.GpsEquipmentBo;
import org.dromara.gps.domain.vo.GpsEquipmentVo;
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;
/**
* GPS设备详细Service业务层处理
*
* @author Lion Li
* @date 2025-08-28
*/
@RequiredArgsConstructor
@Service
public class GpsEquipmentServiceImpl extends ServiceImpl<GpsEquipmentMapper, GpsEquipment> implements IGpsEquipmentService {
private final GpsEquipmentMapper baseMapper;
@Autowired
private IGpsEquipmentSonService gpsEquipmentSonService;
@Autowired
private GpsManmachineMapper gpsManmachineMapper;
/**
* 查询GPS设备详细
*
* @param id 主键
* @return GPS设备详细
*/
@Override
public GpsEquipmentVo queryById(Long id){
return baseMapper.selectVoById(id);
}
/**
* 分页查询GPS设备详细列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return GPS设备详细分页列表
*/
@Override
public TableDataInfo<GpsEquipmentVo> queryPageList(GpsEquipmentBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<GpsEquipment> lqw = buildQueryWrapper(bo);
Page<GpsEquipmentVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
/**
* 查询符合条件的GPS设备详细列表
*
* @param bo 查询条件
* @return GPS设备详细列表
*/
@Override
public List<GpsEquipmentVo> queryList(GpsEquipmentBo bo) {
LambdaQueryWrapper<GpsEquipment> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
private LambdaQueryWrapper<GpsEquipment> buildQueryWrapper(GpsEquipmentBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<GpsEquipment> lqw = Wrappers.lambdaQuery();
lqw.orderByDesc(GpsEquipment::getId);
lqw.eq(bo.getProjectId() != null, GpsEquipment::getProjectId, bo.getProjectId());
lqw.eq(bo.getUserId() != null, GpsEquipment::getUserId, bo.getUserId());
lqw.eq(StringUtils.isNotBlank(bo.getClientId()), GpsEquipment::getClientId, bo.getClientId());
return lqw;
}
/**
* 新增GPS设备详细
*
* @param bo GPS设备详细
* @return 是否新增成功
*/
@Override
public Boolean insertByBo(GpsEquipmentBo bo) {
GpsEquipment add = MapstructUtils.convert(bo, GpsEquipment.class);
validEntityBeforeSave(add);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setId(add.getId());
}
return flag;
}
/**
* 修改GPS设备详细
*
* @param bo GPS设备详细
* @return 是否修改成功
*/
@Override
public Boolean updateByBo(GpsEquipmentBo bo) {
GpsEquipment update = MapstructUtils.convert(bo, GpsEquipment.class);
validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
}
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(GpsEquipment entity){
//TODO 做一些数据校验,如唯一约束
}
/**
* 校验并批量删除GPS设备详细信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteByIds(ids) > 0;
}
@Override
public void dataAcceptance(String jsonData) {
JSONObject jsonObject = JSONUtil.parseObj(jsonData);
GpsEquipment gpsEquipment = JSONUtil.toBean(jsonObject, GpsEquipment.class);
GpsEquipment equipment = baseMapper.selectOne(new LambdaQueryWrapper<GpsEquipment>()
.eq(GpsEquipment::getClientId, gpsEquipment.getClientId()));
if(equipment == null){
baseMapper.insert(gpsEquipment);
}
JSONObject attributes = jsonObject.getJSONObject("attributes");
JSONObject device = attributes.getJSONObject("Device");
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.setClientId(gpsEquipment.getClientId());
if (equipment != null && equipment.getUserId() != null) {
gpsEquipmentSon.setUserId(equipment.getUserId());
}
gpsEquipmentSonService.insertByBo(gpsEquipmentSon);
}
}

View File

@ -0,0 +1,146 @@
package org.dromara.gps.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.dromara.gps.domain.bo.GpsEquipmentSonBo;
import org.dromara.gps.domain.vo.GpsEquipmentSonVo;
import org.dromara.gps.domain.GpsEquipmentSon;
import org.dromara.gps.mapper.GpsEquipmentSonMapper;
import org.dromara.gps.service.IGpsEquipmentSonService;
import java.util.List;
import java.util.Map;
import java.util.Collection;
/**
* GPS设备定位信息Service业务层处理
*
* @author Lion Li
* @date 2025-08-28
*/
@RequiredArgsConstructor
@Service
public class GpsEquipmentSonServiceImpl extends ServiceImpl<GpsEquipmentSonMapper, GpsEquipmentSon> implements IGpsEquipmentSonService {
private final GpsEquipmentSonMapper baseMapper;
/**
* 查询GPS设备定位信息
*
* @param id 主键
* @return GPS设备定位信息
*/
@Override
public GpsEquipmentSonVo queryById(Long id){
return baseMapper.selectVoById(id);
}
/**
* 分页查询GPS设备定位信息列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return GPS设备定位信息分页列表
*/
@Override
public TableDataInfo<GpsEquipmentSonVo> queryPageList(GpsEquipmentSonBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<GpsEquipmentSon> lqw = buildQueryWrapper(bo);
Page<GpsEquipmentSonVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
/**
* 查询符合条件的GPS设备定位信息列表
*
* @param bo 查询条件
* @return GPS设备定位信息列表
*/
@Override
public List<GpsEquipmentSonVo> queryList(GpsEquipmentSonBo bo) {
LambdaQueryWrapper<GpsEquipmentSon> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
private LambdaQueryWrapper<GpsEquipmentSon> buildQueryWrapper(GpsEquipmentSonBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<GpsEquipmentSon> lqw = Wrappers.lambdaQuery();
lqw.orderByDesc(GpsEquipmentSon::getId);
lqw.eq(bo.getUserId() != null, GpsEquipmentSon::getUserId, bo.getUserId());
lqw.eq(StringUtils.isNotBlank(bo.getClientId()), GpsEquipmentSon::getClientId, bo.getClientId());
lqw.like(StringUtils.isNotBlank(bo.getDeviceName()), GpsEquipmentSon::getDeviceName, bo.getDeviceName());
lqw.eq(StringUtils.isNotBlank(bo.getDeviceId()), GpsEquipmentSon::getDeviceId, bo.getDeviceId());
lqw.eq(StringUtils.isNotBlank(bo.getMobileNo()), GpsEquipmentSon::getMobileNo, bo.getMobileNo());
lqw.eq(StringUtils.isNotBlank(bo.getPlateNo()), GpsEquipmentSon::getPlateNo, bo.getPlateNo());
lqw.eq(bo.getProtocolVersion() != null, GpsEquipmentSon::getProtocolVersion, bo.getProtocolVersion());
lqw.eq(bo.getLocWarnBit() != null, GpsEquipmentSon::getLocWarnBit, bo.getLocWarnBit());
lqw.eq(bo.getLocStatusBit() != null, GpsEquipmentSon::getLocStatusBit, bo.getLocStatusBit());
lqw.eq(bo.getLocLatitude() != null, GpsEquipmentSon::getLocLatitude, bo.getLocLatitude());
lqw.eq(bo.getLocLongitude() != null, GpsEquipmentSon::getLocLongitude, bo.getLocLongitude());
lqw.eq(bo.getLocAltitude() != null, GpsEquipmentSon::getLocAltitude, bo.getLocAltitude());
lqw.eq(bo.getLocSpeed() != null, GpsEquipmentSon::getLocSpeed, bo.getLocSpeed());
lqw.eq(bo.getLocSpeedKph() != null, GpsEquipmentSon::getLocSpeedKph, bo.getLocSpeedKph());
lqw.eq(bo.getLocDirection() != null, GpsEquipmentSon::getLocDirection, bo.getLocDirection());
lqw.eq(bo.getLocDeviceTime() != null, GpsEquipmentSon::getLocDeviceTime, bo.getLocDeviceTime());
return lqw;
}
/**
* 新增GPS设备定位信息
*
* @param bo GPS设备定位信息
* @return 是否新增成功
*/
@Override
public Boolean insertByBo(GpsEquipmentSonBo bo) {
GpsEquipmentSon add = MapstructUtils.convert(bo, GpsEquipmentSon.class);
validEntityBeforeSave(add);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setId(add.getId());
}
return flag;
}
/**
* 修改GPS设备定位信息
*
* @param bo GPS设备定位信息
* @return 是否修改成功
*/
@Override
public Boolean updateByBo(GpsEquipmentSonBo bo) {
GpsEquipmentSon update = MapstructUtils.convert(bo, GpsEquipmentSon.class);
validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
}
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(GpsEquipmentSon entity){
//TODO 做一些数据校验,如唯一约束
}
/**
* 校验并批量删除GPS设备定位信息信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteByIds(ids) > 0;
}
}

View File

@ -0,0 +1,131 @@
package org.dromara.gps.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.dromara.gps.domain.bo.GpsManmachineBo;
import org.dromara.gps.domain.vo.GpsManmachineVo;
import org.dromara.gps.domain.GpsManmachine;
import org.dromara.gps.mapper.GpsManmachineMapper;
import org.dromara.gps.service.IGpsManmachineService;
import java.util.List;
import java.util.Map;
import java.util.Collection;
/**
* GPS人机关联Service业务层处理
*
* @author Lion Li
* @date 2025-08-28
*/
@RequiredArgsConstructor
@Service
public class GpsManmachineServiceImpl extends ServiceImpl<GpsManmachineMapper, GpsManmachine> implements IGpsManmachineService {
private final GpsManmachineMapper baseMapper;
/**
* 查询GPS人机关联
*
* @param clientId 主键
* @return GPS人机关联
*/
@Override
public GpsManmachineVo queryById(String clientId){
return baseMapper.selectVoById(clientId);
}
/**
* 分页查询GPS人机关联列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return GPS人机关联分页列表
*/
@Override
public TableDataInfo<GpsManmachineVo> queryPageList(GpsManmachineBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<GpsManmachine> lqw = buildQueryWrapper(bo);
Page<GpsManmachineVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
/**
* 查询符合条件的GPS人机关联列表
*
* @param bo 查询条件
* @return GPS人机关联列表
*/
@Override
public List<GpsManmachineVo> queryList(GpsManmachineBo bo) {
LambdaQueryWrapper<GpsManmachine> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
private LambdaQueryWrapper<GpsManmachine> buildQueryWrapper(GpsManmachineBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<GpsManmachine> lqw = Wrappers.lambdaQuery();
lqw.orderByDesc(GpsManmachine::getClientId);
lqw.eq(bo.getUserId() != null, GpsManmachine::getUserId, bo.getUserId());
return lqw;
}
/**
* 新增GPS人机关联
*
* @param bo GPS人机关联
* @return 是否新增成功
*/
@Override
public Boolean insertByBo(GpsManmachineBo bo) {
GpsManmachine add = MapstructUtils.convert(bo, GpsManmachine.class);
validEntityBeforeSave(add);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setClientId(add.getClientId());
}
return flag;
}
/**
* 修改GPS人机关联
*
* @param bo GPS人机关联
* @return 是否修改成功
*/
@Override
public Boolean updateByBo(GpsManmachineBo bo) {
GpsManmachine update = MapstructUtils.convert(bo, GpsManmachine.class);
validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
}
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(GpsManmachine entity){
//TODO 做一些数据校验,如唯一约束
}
/**
* 校验并批量删除GPS人机关联信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
@Override
public Boolean deleteWithValidByIds(Collection<String> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteByIds(ids) > 0;
}
}