设备控制接口

localizer
lzq 2025-10-17 12:01:02 +08:00
parent 0fce5abc9f
commit 0c3281df58
8 changed files with 236 additions and 9 deletions

View File

@ -0,0 +1,19 @@
package com.njzscloud.supervisory.device.contant;
import com.njzscloud.common.core.ienum.DictStr;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
/**
* localizer_category
*
*/
@Getter
@RequiredArgsConstructor
public enum LocalizerCategory implements DictStr {
Tuqiang("Tuqiang", "途强定位器"),
HangTianZiJin("HangTianZiJin", "航天紫金定位器"),
;
private final String val;
private final String txt;
}

View File

@ -5,6 +5,8 @@ import com.njzscloud.common.mp.support.PageParam;
import com.njzscloud.common.mp.support.PageResult;
import com.njzscloud.supervisory.device.pojo.entity.DeviceLocalizerEntity;
import com.njzscloud.supervisory.device.pojo.entity.LocalizerConfig;
import com.njzscloud.supervisory.device.pojo.param.SearchDeviceLocalizerParam;
import com.njzscloud.supervisory.device.pojo.result.SearchDeviceLocalizerResult;
import com.njzscloud.supervisory.device.service.DeviceLocalizerService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@ -54,7 +56,7 @@ public class DeviceLocalizerController {
*
*/
@GetMapping("/detail")
public R<DeviceLocalizerEntity> detail(@RequestParam Long id) {
public R<SearchDeviceLocalizerResult> detail(@RequestParam Long id) {
return R.success(deviceLocalizerService.detail(id));
}
@ -62,8 +64,8 @@ public class DeviceLocalizerController {
*
*/
@GetMapping("/paging")
public R<PageResult<DeviceLocalizerEntity>> paging(PageParam pageParam, DeviceLocalizerEntity deviceLocalizerEntity) {
return R.success(deviceLocalizerService.paging(pageParam, deviceLocalizerEntity));
public R<PageResult<SearchDeviceLocalizerResult>> paging(PageParam pageParam, SearchDeviceLocalizerParam searchDeviceLocalizerParam) {
return R.success(deviceLocalizerService.paging(pageParam, searchDeviceLocalizerParam));
}
/**

View File

@ -1,8 +1,15 @@
package com.njzscloud.supervisory.device.mapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.njzscloud.supervisory.device.pojo.entity.DeviceLocalizerEntity;
import com.njzscloud.supervisory.device.pojo.result.SearchDeviceLocalizerResult;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
*
@ -10,4 +17,9 @@ import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface DeviceLocalizerMapper extends BaseMapper<DeviceLocalizerEntity> {
List<DeviceLocalizerEntity> canDel(@Param("ew") QueryWrapper<DeviceLocalizerEntity> ew);
SearchDeviceLocalizerResult detail(@Param("id") Long id);
IPage<SearchDeviceLocalizerResult> paging(Page<Object> page, QueryWrapper<?> ew);
}

View File

@ -2,6 +2,7 @@ package com.njzscloud.supervisory.device.pojo.entity;
import com.baomidou.mybatisplus.annotation.*;
import com.njzscloud.common.mp.support.handler.j.JsonTypeHandler;
import com.njzscloud.supervisory.device.contant.LocalizerCategory;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
@ -29,6 +30,10 @@ public class DeviceLocalizerEntity {
*
*/
private String terminalId;
/**
*
*/
private LocalizerCategory localizerCategory;
/**
* 线; 0-->1-->

View File

@ -0,0 +1,34 @@
package com.njzscloud.supervisory.device.pojo.param;
import com.njzscloud.supervisory.device.contant.LocalizerCategory;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import lombok.experimental.Accessors;
/**
*
*/
@Getter
@Setter
@ToString
@Accessors(chain = true)
public class SearchDeviceLocalizerParam {
/**
*
*/
private String terminalId;
/**
*
*/
private String licensePlate;
/**
*
*/
private LocalizerCategory localizerCategory;
/**
* 线; 0-->1-->
*/
private Boolean online;
}

View File

@ -0,0 +1,60 @@
package com.njzscloud.supervisory.device.pojo.result;
import com.njzscloud.supervisory.device.contant.LocalizerCategory;
import com.njzscloud.supervisory.device.pojo.entity.LocalizerConfig;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import lombok.experimental.Accessors;
import java.time.LocalDateTime;
/**
*
*/
@Getter
@Setter
@ToString
@Accessors(chain = true)
public class SearchDeviceLocalizerResult {
/**
* Id
*/
private Long id;
/**
*
*/
private String terminalId;
/**
*
*/
private String licensePlate;
/**
*
*/
private LocalizerCategory localizerCategory;
/**
* 线; 0-->1-->
*/
private Boolean online;
/**
*
*/
private LocalDateTime lastTime;
private LocalizerConfig config;
/**
*
*/
private LocalDateTime createTime;
/**
*
*/
private LocalDateTime modifyTime;
}

View File

@ -2,6 +2,7 @@ package com.njzscloud.supervisory.device.service;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.IService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@ -14,11 +15,14 @@ import com.njzscloud.common.mp.support.PageResult;
import com.njzscloud.common.mqtt.support.MqttMsg;
import com.njzscloud.common.mqtt.util.Mqtt;
import com.njzscloud.supervisory.biz.service.TruckLocationTrackService;
import com.njzscloud.supervisory.device.contant.LocalizerCategory;
import com.njzscloud.supervisory.device.mapper.DeviceLocalizerMapper;
import com.njzscloud.supervisory.device.pojo.entity.DeviceLocalizerEntity;
import com.njzscloud.supervisory.device.pojo.entity.LocalizerConfig;
import com.njzscloud.supervisory.device.pojo.param.SearchDeviceLocalizerParam;
import com.njzscloud.supervisory.device.pojo.result.DeviceInfoResult;
import com.njzscloud.supervisory.device.pojo.result.HeartbeatResult;
import com.njzscloud.supervisory.device.pojo.result.SearchDeviceLocalizerResult;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@ -40,15 +44,40 @@ public class DeviceLocalizerService extends ServiceImpl<DeviceLocalizerMapper, D
/**
*
*/
@Transactional(rollbackFor = Exception.class)
public void add(DeviceLocalizerEntity deviceLocalizerEntity) {
this.save(deviceLocalizerEntity);
String terminalId = deviceLocalizerEntity.getTerminalId();
LocalizerCategory localizerCategory = deviceLocalizerEntity.getLocalizerCategory();
Assert.notEmpty(terminalId, () -> Exceptions.exception("设备号不能为空"));
Assert.notNull(localizerCategory, () -> Exceptions.exception("定位器类型不能为空"));
Assert.isFalse(this.exists(Wrappers.lambdaQuery(DeviceLocalizerEntity.class)
.eq(DeviceLocalizerEntity::getTerminalId, terminalId)
.eq(DeviceLocalizerEntity::getLocalizerCategory, localizerCategory)),
() -> Exceptions.exception("定位器已存在"));
this.save(deviceLocalizerEntity.setConfig(new LocalizerConfig()));
}
/**
*
*/
@Transactional(rollbackFor = Exception.class)
public void modify(DeviceLocalizerEntity deviceLocalizerEntity) {
this.updateById(deviceLocalizerEntity);
String terminalId = deviceLocalizerEntity.getTerminalId();
LocalizerCategory localizerCategory = deviceLocalizerEntity.getLocalizerCategory();
Long id = deviceLocalizerEntity.getId();
DeviceLocalizerEntity oldData = this.getById(id);
Assert.notNull(oldData, () -> Exceptions.exception("定位器不存在"));
Assert.isFalse(this.exists(Wrappers.lambdaQuery(DeviceLocalizerEntity.class)
.eq(DeviceLocalizerEntity::getTerminalId, StrUtil.isEmpty(terminalId) ? oldData.getTerminalId() : terminalId)
.eq(DeviceLocalizerEntity::getLocalizerCategory, localizerCategory == null ? oldData.getLocalizerCategory() : localizerCategory)
.ne(DeviceLocalizerEntity::getId, id)
),
() -> Exceptions.exception("定位器已存在"));
this.updateById(new DeviceLocalizerEntity()
.setId(id)
.setTerminalId(terminalId)
.setLocalizerCategory(localizerCategory)
);
}
/**
@ -56,21 +85,41 @@ public class DeviceLocalizerService extends ServiceImpl<DeviceLocalizerMapper, D
*/
@Transactional(rollbackFor = Exception.class)
public void del(List<Long> ids) {
List<DeviceLocalizerEntity> deviceLocalizerEntities = baseMapper.canDel(Wrappers.query(DeviceLocalizerEntity.class).in("a.id", ids));
Assert.isTrue(deviceLocalizerEntities.isEmpty(), () -> Exceptions.exception("存在已被关联的定位器,不能删除"));
this.removeBatchByIds(ids);
}
/**
*
*/
public DeviceLocalizerEntity detail(Long id) {
return this.getById(id);
public SearchDeviceLocalizerResult detail(Long id) {
return baseMapper.detail(id);
}
/**
*
*/
public PageResult<DeviceLocalizerEntity> paging(PageParam pageParam, DeviceLocalizerEntity deviceLocalizerEntity) {
return PageResult.of(this.page(pageParam.toPage(), Wrappers.<DeviceLocalizerEntity>query(deviceLocalizerEntity)));
public PageResult<SearchDeviceLocalizerResult> paging(PageParam pageParam, SearchDeviceLocalizerParam searchDeviceLocalizerParam) {
String terminalId = searchDeviceLocalizerParam.getTerminalId();
LocalizerCategory localizerCategory = searchDeviceLocalizerParam.getLocalizerCategory();
String licensePlate = searchDeviceLocalizerParam.getLicensePlate();
Boolean online = searchDeviceLocalizerParam.getOnline();
QueryWrapper<Object> ew = Wrappers.query()
.like(StrUtil.isNotEmpty(terminalId), "a.terminal_id", terminalId)
.like(StrUtil.isNotEmpty(licensePlate), "b.license_plate", licensePlate)
.eq(localizerCategory != null, "a.localizer_category", localizerCategory)
.eq(online != null, "a.online", online);
if (online != null) {
if (online) {
ew.ge("a.last_time", LocalDateTime.now().minusMinutes(5));
} else {
ew.lt("a.last_time", LocalDateTime.now().minusMinutes(5));
}
}
return PageResult.of(baseMapper.paging(pageParam.toPage(), ew));
}
public void onApplicationReady() {

View File

@ -0,0 +1,46 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.njzscloud.supervisory.device.mapper.DeviceLocalizerMapper">
<select id="canDel" resultType="com.njzscloud.supervisory.device.pojo.entity.DeviceLocalizerEntity">
select a.id
from device_localizer a
inner join biz_truck b on b.gps = a.terminal_id and b.deleted = 0
<if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
${ew.customSqlSegment}
</if>
</select>
<resultMap id="detailResultMap" type="com.njzscloud.supervisory.device.pojo.result.SearchDeviceLocalizerResult">
<id property="id" column="id"/>
<result property="terminalId" column="terminal_id"/>
<result property="licensePlate" column="license_plate"/>
<result property="localizerCategory" column="localizer_category" typeHandler="com.njzscloud.common.mp.support.handler.e.EnumTypeHandlerDealer"/>
<result property="online" column="online"/>
<result property="lastTime" column="last_time"/>
<result property="createTime" column="create_time"/>
<result property="modifyTime" column="modify_time"/>
</resultMap>
<select id="detail" resultMap="detailResultMap">
select a.id,
a.terminal_id,
b.license_plate,
a.localizer_category,
a.online,
a.last_time,
a.create_time,
a.modify_time
from device_localizer a
left join biz_truck b on b.gps = a.terminal_id and b.deleted = 0
where a.id = #{id}
</select>
<select id="paging" resultType="com.njzscloud.supervisory.device.pojo.result.SearchDeviceLocalizerResult">
select a.id, a.terminal_id, b.license_plate, a.localizer_category, a.online, a.last_time, a.create_time, a.modify_time
from device_localizer a
left join biz_truck b on b.gps = a.terminal_id and b.deleted = 0
<if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
${ew.customSqlSegment}
</if>
</select>
</mapper>