459242451@qq.com 3 жил өмнө
parent
commit
d7d49d3701

+ 19 - 4
README.md

@@ -80,22 +80,37 @@ k8s master节点:
 ip: 10.11.96.31
 登录: root/Lw123456
 
-pg数据库:
+> pg数据库:
+
 ip: 10.11.96.34
 端口:16430
 用户:postgres
 密码:Superman@2021
 数据库:sqjt
 
-nacos:
+> nacos:
+
 http://10.11.96.37:8848/nacos
 登录:nacos/nacos
 
-redis:
+> redis:
+
 ip: 10.11.96.37
 端口: 6379
 密码:superman
 
-应用服务器:
+> 应用服务器:
+
 10.11.96.40
 登录: root/Lw123456
+
+> VPN:
+
+https://61.147.254.214:8443
+test02/12345678
+
+> 测试环境访问:
+
+http://sqpc.xt.wenhq.top:8083/
+
+

+ 11 - 2
ruoyi-admin/src/main/java/com/ruoyi/web/controller/task/SysGatewayUserTask.java

@@ -8,6 +8,7 @@ import com.ruoyi.system.service.ISysUserService;
 import com.ruoyi.zhdd.domain.GatewayDept;
 import com.ruoyi.zhdd.domain.GatewayOrg;
 import com.ruoyi.zhdd.domain.GatewaySUser;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.kafka.annotation.KafkaListener;
 import org.springframework.stereotype.Component;
@@ -16,6 +17,7 @@ import java.util.Date;
 import java.util.List;
 
 @Component
+@Slf4j
 public class SysGatewayUserTask {
 
     @Autowired
@@ -26,6 +28,7 @@ public class SysGatewayUserTask {
 
     @KafkaListener(topics = "t_uc_user")
     public void onUserMessage(String message){
+        log.info("kafka用户信息消费:{}", message);
         try{
             GatewaySUser gatewaySUser =  JSONUtil.toBean(message,GatewaySUser.class);
             if(gatewaySUser!=null){
@@ -89,12 +92,12 @@ public class SysGatewayUserTask {
         }catch (Exception e){
 
         }
-        System.out.println(message);
+
     }
     @KafkaListener(topics = "t_uc_org")
     public void onOrgMessage(String message){
+        log.info("kafka组织信息消费:{}", message);
         //默认组织是0   组织间的层级先不考虑
-
         try{
            GatewayOrg gatewayOrg =  JSONUtil.toBean(message,GatewayOrg.class);
             if(gatewayOrg!=null){
@@ -139,6 +142,7 @@ public class SysGatewayUserTask {
     }
     @KafkaListener(topics = "t_uc_dept")
     public void onDeptMessage(String message){
+        log.info("kafka部门信息消费:{}", message);
         try{
             GatewayDept gatewayDept =  JSONUtil.toBean(message,GatewayDept.class);
             if(gatewayDept!=null){
@@ -210,4 +214,9 @@ public class SysGatewayUserTask {
         System.out.println(message);
     }
 
+    @KafkaListener(topics = "executestation_5ee63b516d4e4d79a46cdf88a202caa1"/*, groupId = "huashe-consumer-group"*/)
+    public void onDeviceMessage(String message){
+        log.info("kafka单兵设备信息消费:{}", message);
+    }
+
 }

+ 113 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/zhdd/SingleDeviceController.java

@@ -0,0 +1,113 @@
+package com.ruoyi.web.controller.zhdd;
+
+import java.util.List;
+import java.util.Arrays;
+import java.util.concurrent.TimeUnit;
+
+import lombok.RequiredArgsConstructor;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.constraints.*;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.validation.annotation.Validated;
+import com.ruoyi.common.annotation.RepeatSubmit;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.validate.AddGroup;
+import com.ruoyi.common.core.validate.EditGroup;
+import com.ruoyi.common.core.validate.QueryGroup;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.zhdd.domain.vo.SingleDeviceVo;
+import com.ruoyi.zhdd.domain.bo.SingleDeviceBo;
+import com.ruoyi.zhdd.service.ISingleDeviceService;
+import com.ruoyi.common.core.page.TableDataInfo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+/**
+ * 单兵数据信息Controller
+ *
+ * @author xintong
+ * @date 2021-12-17
+ */
+@Validated
+@Api(value = "单兵数据信息控制器", tags = {"单兵数据信息管理"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/zhdd/singleDevice")
+public class SingleDeviceController extends BaseController {
+
+    private final ISingleDeviceService iSingleDeviceService;
+
+    /**
+     * 查询单兵数据信息列表
+     */
+    @ApiOperation("查询单兵数据信息列表")
+    @PreAuthorize("@ss.hasPermi('zhdd:singleDevice:list')")
+    @GetMapping("/list")
+    public TableDataInfo<SingleDeviceVo> list(@Validated(QueryGroup.class) SingleDeviceBo bo) {
+        return iSingleDeviceService.queryPageList(bo);
+    }
+
+    /**
+     * 导出单兵数据信息列表
+     */
+    @ApiOperation("导出单兵数据信息列表")
+    @PreAuthorize("@ss.hasPermi('zhdd:singleDevice:export')")
+    @Log(title = "单兵数据信息", businessType = BusinessType.EXPORT)
+    @GetMapping("/export")
+    public void export(@Validated SingleDeviceBo bo, HttpServletResponse response) {
+        List<SingleDeviceVo> list = iSingleDeviceService.queryList(bo);
+        ExcelUtil.exportExcel(list, "单兵数据信息", SingleDeviceVo.class, response);
+    }
+
+    /**
+     * 获取单兵数据信息详细信息
+     */
+    @ApiOperation("获取单兵数据信息详细信息")
+    @PreAuthorize("@ss.hasPermi('zhdd:singleDevice:query')")
+    @GetMapping("/{userId}")
+    public AjaxResult<SingleDeviceVo> getInfo(@NotNull(message = "主键不能为空")
+                                                  @PathVariable("userId") String userId) {
+        return AjaxResult.success(iSingleDeviceService.queryById(userId));
+    }
+
+    /**
+     * 新增单兵数据信息
+     */
+    @ApiOperation("新增单兵数据信息")
+    @PreAuthorize("@ss.hasPermi('zhdd:singleDevice:add')")
+    @Log(title = "单兵数据信息", businessType = BusinessType.INSERT)
+    @RepeatSubmit()
+    @PostMapping()
+    public AjaxResult<Void> add(@Validated(AddGroup.class) @RequestBody SingleDeviceBo bo) {
+        return toAjax(iSingleDeviceService.insertByBo(bo) ? 1 : 0);
+    }
+
+    /**
+     * 修改单兵数据信息
+     */
+    @ApiOperation("修改单兵数据信息")
+    @PreAuthorize("@ss.hasPermi('zhdd:singleDevice:edit')")
+    @Log(title = "单兵数据信息", businessType = BusinessType.UPDATE)
+    @RepeatSubmit()
+    @PutMapping()
+    public AjaxResult<Void> edit(@Validated(EditGroup.class) @RequestBody SingleDeviceBo bo) {
+        return toAjax(iSingleDeviceService.updateByBo(bo) ? 1 : 0);
+    }
+
+    /**
+     * 删除单兵数据信息
+     */
+    @ApiOperation("删除单兵数据信息")
+    @PreAuthorize("@ss.hasPermi('zhdd:singleDevice:remove')")
+    @Log(title = "单兵数据信息" , businessType = BusinessType.DELETE)
+    @DeleteMapping("/{userIds}")
+    public AjaxResult<Void> remove(@NotEmpty(message = "主键不能为空")
+                                       @PathVariable String[] userIds) {
+        return toAjax(iSingleDeviceService.deleteWithValidByIds(Arrays.asList(userIds), true) ? 1 : 0);
+    }
+}

+ 1 - 1
ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml

@@ -74,7 +74,7 @@
                r.role_key,
                r.role_sort,
                r.data_scope,
-               r.other_id,
+               u.other_id,
                r.status as role_status
         from sys_user u
 		    left join sys_dept d on u.dept_id = d.dept_id

+ 96 - 0
ruoyi-zhdd/src/main/java/com/ruoyi/zhdd/domain/SingleDevice.java

@@ -0,0 +1,96 @@
+package com.ruoyi.zhdd.domain;
+
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+import java.io.Serializable;
+import java.util.Date;
+import java.math.BigDecimal;
+
+/**
+ * 单兵数据信息对象 b_single_device
+ *
+ * @author xintong
+ * @date 2021-12-17
+ */
+@Data
+@NoArgsConstructor
+@Accessors(chain = true)
+@TableName("b_single_device")
+public class SingleDevice implements Serializable {
+
+    private static final long serialVersionUID=1L;
+
+
+    /**
+     * 用户id
+     */
+    private String userId;
+
+    /**
+     * 用户名
+     */
+    private String userName;
+
+    /**
+     * 用户类型
+     */
+    private String userType;
+
+    /**
+     * 设备id
+     */
+    private String deviceCode;
+
+    /**
+     * 经度
+     */
+    private BigDecimal gpsX;
+
+    /**
+     * 纬度
+     */
+    private BigDecimal gpsY;
+
+    /**
+     * 高度信息。单位米
+     */
+    private BigDecimal height;
+
+    /**
+     * 方向角(正北方为原点,顺时针为正)
+     */
+    private BigDecimal angle;
+
+    /**
+     * 时速。单位(公里/小时)
+     */
+    private BigDecimal speed;
+
+    /**
+     * 定位星数
+     */
+    private Integer startCount;
+
+    /**
+     * 数据来源(1:app。2:车载。3:单兵。4:PDT 350M。5:无人机)
+     */
+    private Integer dataSource;
+
+    /**
+     * gps上报时间 20060102T150405Z
+     */
+    private String time;
+
+    /**
+     * 扩展信息。gps上报带的扩展信息。1:app带扩展字段。5:无人机带扩展字段
+     */
+    private String extendInfo;
+
+    /**
+     * 设备的扩展信息
+     */
+    private String deviceExtendInfo;
+
+}

+ 137 - 0
ruoyi-zhdd/src/main/java/com/ruoyi/zhdd/domain/bo/SingleDeviceBo.java

@@ -0,0 +1,137 @@
+package com.ruoyi.zhdd.domain.bo;
+
+import com.ruoyi.common.core.validate.AddGroup;
+import com.ruoyi.common.core.validate.EditGroup;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import javax.validation.constraints.*;
+
+import java.util.Date;
+
+import java.math.BigDecimal;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 单兵数据信息业务对象 b_single_device
+ *
+ * @author xintong
+ * @date 2021-12-17
+ */
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel("单兵数据信息业务对象")
+public class SingleDeviceBo extends BaseEntity {
+
+    /**
+     * 用户id
+     */
+    @ApiModelProperty(value = "用户id")
+    private String userId;
+
+    /**
+     * 用户名
+     */
+    @ApiModelProperty(value = "用户名")
+    private String userName;
+
+    /**
+     * 用户类型
+     */
+    @ApiModelProperty(value = "用户类型")
+    private String userType;
+
+    /**
+     * 设备id
+     */
+    @ApiModelProperty(value = "设备id")
+    private String deviceCode;
+
+    /**
+     * 经度
+     */
+    @ApiModelProperty(value = "经度")
+    private BigDecimal gpsX;
+
+    /**
+     * 纬度
+     */
+    @ApiModelProperty(value = "纬度")
+    private BigDecimal gpsY;
+
+    /**
+     * 高度信息。单位米
+     */
+    @ApiModelProperty(value = "高度信息。单位米")
+    private BigDecimal height;
+
+    /**
+     * 方向角(正北方为原点,顺时针为正)
+     */
+    @ApiModelProperty(value = "方向角(正北方为原点,顺时针为正)")
+    private BigDecimal angle;
+
+    /**
+     * 时速。单位(公里/小时)
+     */
+    @ApiModelProperty(value = "时速。单位(公里/小时)")
+    private BigDecimal speed;
+
+    /**
+     * 定位星数
+     */
+    @ApiModelProperty(value = "定位星数")
+    private Integer startCount;
+
+    /**
+     * 数据来源(1:app。2:车载。3:单兵。4:PDT 350M。5:无人机)
+     */
+    @ApiModelProperty(value = "数据来源(1:app。2:车载。3:单兵。4:PDT 350M。5:无人机)")
+    private Integer dataSource;
+
+    /**
+     * gps上报时间 20060102T150405Z
+     */
+    @ApiModelProperty(value = "gps上报时间 20060102T150405Z")
+    private String time;
+
+    /**
+     * 扩展信息。gps上报带的扩展信息。1:app带扩展字段。5:无人机带扩展字段
+     */
+    @ApiModelProperty(value = "扩展信息。gps上报带的扩展信息。1:app带扩展字段。5:无人机带扩展字段")
+    private String extendInfo;
+
+    /**
+     * 设备的扩展信息
+     */
+    @ApiModelProperty(value = "设备的扩展信息")
+    private String deviceExtendInfo;
+
+
+    /**
+     * 分页大小
+     */
+    @ApiModelProperty("分页大小")
+    private Integer pageSize;
+
+    /**
+     * 当前页数
+     */
+    @ApiModelProperty("当前页数")
+    private Integer pageNum;
+
+    /**
+     * 排序列
+     */
+    @ApiModelProperty("排序列")
+    private String orderByColumn;
+
+    /**
+     * 排序的方向desc或者asc
+     */
+    @ApiModelProperty(value = "排序的方向", example = "asc,desc")
+    private String isAsc;
+
+}

+ 129 - 0
ruoyi-zhdd/src/main/java/com/ruoyi/zhdd/domain/vo/SingleDeviceVo.java

@@ -0,0 +1,129 @@
+package com.ruoyi.zhdd.domain.vo;
+
+import java.math.BigDecimal;
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.ruoyi.common.annotation.ExcelDictFormat;
+import com.ruoyi.common.convert.ExcelDictConvert;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.util.Date;
+
+
+
+/**
+ * 单兵数据信息视图对象 b_single_device
+ *
+ * @author xintong
+ * @date 2021-12-17
+ */
+@Data
+@ApiModel("单兵数据信息视图对象")
+@ExcelIgnoreUnannotated
+public class SingleDeviceVo {
+
+	private static final long serialVersionUID = 1L;
+
+    /**
+     * 用户id
+     */
+	@ExcelProperty(value = "用户id")
+	@ApiModelProperty("用户id")
+	private String userId;
+
+    /**
+     * 用户名
+     */
+	@ExcelProperty(value = "用户名")
+	@ApiModelProperty("用户名")
+	private String userName;
+
+    /**
+     * 用户类型
+     */
+	@ExcelProperty(value = "用户类型")
+	@ApiModelProperty("用户类型")
+	private String userType;
+
+    /**
+     * 设备id
+     */
+	@ExcelProperty(value = "设备id")
+	@ApiModelProperty("设备id")
+	private String deviceCode;
+
+    /**
+     * 经度
+     */
+	@ExcelProperty(value = "经度")
+	@ApiModelProperty("经度")
+	private BigDecimal gpsX;
+
+    /**
+     * 纬度
+     */
+	@ExcelProperty(value = "纬度")
+	@ApiModelProperty("纬度")
+	private BigDecimal gpsY;
+
+    /**
+     * 高度信息。单位米
+     */
+	@ExcelProperty(value = "高度信息。单位米")
+	@ApiModelProperty("高度信息。单位米")
+	private BigDecimal height;
+
+    /**
+     * 方向角(正北方为原点,顺时针为正)
+     */
+	@ExcelProperty(value = "方向角(正北方为原点,顺时针为正)")
+	@ApiModelProperty("方向角(正北方为原点,顺时针为正)")
+	private BigDecimal angle;
+
+    /**
+     * 时速。单位(公里/小时)
+     */
+	@ExcelProperty(value = "时速。单位", converter = ExcelDictConvert.class)
+    @ExcelDictFormat(readConverterExp = "公=里/小时")
+	@ApiModelProperty("时速。单位(公里/小时)")
+	private BigDecimal speed;
+
+    /**
+     * 定位星数
+     */
+	@ExcelProperty(value = "定位星数")
+	@ApiModelProperty("定位星数")
+	private Integer startCount;
+
+    /**
+     * 数据来源(1:app。2:车载。3:单兵。4:PDT 350M。5:无人机)
+     */
+	@ExcelProperty(value = "数据来源", converter = ExcelDictConvert.class)
+    @ExcelDictFormat(readConverterExp = "1=:app。2:车载。3:单兵。4:PDT,3=50M。5:无人机")
+	@ApiModelProperty("数据来源(1:app。2:车载。3:单兵。4:PDT 350M。5:无人机)")
+	private Integer dataSource;
+
+    /**
+     * gps上报时间 20060102T150405Z
+     */
+	@ExcelProperty(value = "gps上报时间 20060102T150405Z")
+	@ApiModelProperty("gps上报时间 20060102T150405Z")
+	private String time;
+
+    /**
+     * 扩展信息。gps上报带的扩展信息。1:app带扩展字段。5:无人机带扩展字段
+     */
+	@ExcelProperty(value = "扩展信息。gps上报带的扩展信息。1:app带扩展字段。5:无人机带扩展字段")
+	@ApiModelProperty("扩展信息。gps上报带的扩展信息。1:app带扩展字段。5:无人机带扩展字段")
+	private String extendInfo;
+
+    /**
+     * 设备的扩展信息
+     */
+	@ExcelProperty(value = "设备的扩展信息")
+	@ApiModelProperty("设备的扩展信息")
+	private String deviceExtendInfo;
+
+
+}

+ 16 - 0
ruoyi-zhdd/src/main/java/com/ruoyi/zhdd/mapper/SingleDeviceMapper.java

@@ -0,0 +1,16 @@
+package com.ruoyi.zhdd.mapper;
+
+import com.ruoyi.zhdd.domain.SingleDevice;
+import com.ruoyi.common.core.mybatisplus.core.BaseMapperPlus;
+import com.ruoyi.common.core.mybatisplus.cache.MybatisPlusRedisCache;
+import org.apache.ibatis.annotations.CacheNamespace;
+
+/**
+ * 单兵数据信息Mapper接口
+ *
+ * @author xintong
+ * @date 2021-12-17
+ */
+public interface SingleDeviceMapper extends BaseMapperPlus<SingleDevice> {
+
+}

+ 56 - 0
ruoyi-zhdd/src/main/java/com/ruoyi/zhdd/service/ISingleDeviceService.java

@@ -0,0 +1,56 @@
+package com.ruoyi.zhdd.service;
+
+import com.ruoyi.zhdd.domain.SingleDevice;
+import com.ruoyi.zhdd.domain.vo.SingleDeviceVo;
+import com.ruoyi.zhdd.domain.bo.SingleDeviceBo;
+import com.ruoyi.common.core.mybatisplus.core.IServicePlus;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 单兵数据信息Service接口
+ *
+ * @author xintong
+ * @date 2021-12-17
+ */
+public interface ISingleDeviceService extends IServicePlus<SingleDevice, SingleDeviceVo> {
+	/**
+	 * 查询单个
+	 * @return
+	 */
+	SingleDeviceVo queryById(String userId);
+
+	/**
+	 * 查询列表
+	 */
+    TableDataInfo<SingleDeviceVo> queryPageList(SingleDeviceBo bo);
+
+	/**
+	 * 查询列表
+	 */
+	List<SingleDeviceVo> queryList(SingleDeviceBo bo);
+
+	/**
+	 * 根据新增业务对象插入单兵数据信息
+	 * @param bo 单兵数据信息新增业务对象
+	 * @return
+	 */
+	Boolean insertByBo(SingleDeviceBo bo);
+
+	/**
+	 * 根据编辑业务对象修改单兵数据信息
+	 * @param bo 单兵数据信息编辑业务对象
+	 * @return
+	 */
+	Boolean updateByBo(SingleDeviceBo bo);
+
+	/**
+	 * 校验并删除数据
+	 * @param ids 主键集合
+	 * @param isValid 是否校验,true-删除前校验,false-不校验
+	 * @return
+	 */
+	Boolean deleteWithValidByIds(Collection<String> ids, Boolean isValid);
+}

+ 95 - 0
ruoyi-zhdd/src/main/java/com/ruoyi/zhdd/service/impl/SingleDeviceServiceImpl.java

@@ -0,0 +1,95 @@
+package com.ruoyi.zhdd.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.PageUtils;
+import com.ruoyi.common.core.page.PagePlus;
+import com.ruoyi.common.core.page.TableDataInfo;
+import org.springframework.stereotype.Service;
+import com.ruoyi.common.core.mybatisplus.core.ServicePlusImpl;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.ruoyi.zhdd.domain.bo.SingleDeviceBo;
+import com.ruoyi.zhdd.domain.vo.SingleDeviceVo;
+import com.ruoyi.zhdd.domain.SingleDevice;
+import com.ruoyi.zhdd.mapper.SingleDeviceMapper;
+import com.ruoyi.zhdd.service.ISingleDeviceService;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Collection;
+
+/**
+ * 单兵数据信息Service业务层处理
+ *
+ * @author xintong
+ * @date 2021-12-17
+ */
+@Service
+public class SingleDeviceServiceImpl extends ServicePlusImpl<SingleDeviceMapper, SingleDevice, SingleDeviceVo> implements ISingleDeviceService {
+
+    @Override
+    public SingleDeviceVo queryById(String userId){
+        return getVoById(userId);
+    }
+
+    @Override
+    public TableDataInfo<SingleDeviceVo> queryPageList(SingleDeviceBo bo) {
+        PagePlus<SingleDevice, SingleDeviceVo> result = pageVo(PageUtils.buildPagePlus(), buildQueryWrapper(bo));
+        return PageUtils.buildDataInfo(result);
+    }
+
+    @Override
+    public List<SingleDeviceVo> queryList(SingleDeviceBo bo) {
+        return listVo(buildQueryWrapper(bo));
+    }
+
+    private LambdaQueryWrapper<SingleDevice> buildQueryWrapper(SingleDeviceBo bo) {
+        Map<String, Object> params = bo.getParams();
+        LambdaQueryWrapper<SingleDevice> lqw = Wrappers.lambdaQuery();
+        lqw.eq(StringUtils.isNotBlank(bo.getUserId()), SingleDevice::getUserId, bo.getUserId());
+        lqw.like(StringUtils.isNotBlank(bo.getUserName()), SingleDevice::getUserName, bo.getUserName());
+        lqw.eq(StringUtils.isNotBlank(bo.getUserType()), SingleDevice::getUserType, bo.getUserType());
+        lqw.eq(StringUtils.isNotBlank(bo.getDeviceCode()), SingleDevice::getDeviceCode, bo.getDeviceCode());
+        lqw.eq(bo.getGpsX() != null, SingleDevice::getGpsX, bo.getGpsX());
+        lqw.eq(bo.getGpsY() != null, SingleDevice::getGpsY, bo.getGpsY());
+        lqw.eq(bo.getHeight() != null, SingleDevice::getHeight, bo.getHeight());
+        lqw.eq(bo.getAngle() != null, SingleDevice::getAngle, bo.getAngle());
+        lqw.eq(bo.getSpeed() != null, SingleDevice::getSpeed, bo.getSpeed());
+        lqw.eq(bo.getStartCount() != null, SingleDevice::getStartCount, bo.getStartCount());
+        lqw.eq(bo.getDataSource() != null, SingleDevice::getDataSource, bo.getDataSource());
+        lqw.eq(StringUtils.isNotBlank(bo.getTime()), SingleDevice::getTime, bo.getTime());
+        return lqw;
+    }
+
+    @Override
+    public Boolean insertByBo(SingleDeviceBo bo) {
+        SingleDevice add = BeanUtil.toBean(bo, SingleDevice.class);
+        validEntityBeforeSave(add);
+        return save(add);
+    }
+
+    @Override
+    public Boolean updateByBo(SingleDeviceBo bo) {
+        SingleDevice update = BeanUtil.toBean(bo, SingleDevice.class);
+        validEntityBeforeSave(update);
+        return updateById(update);
+    }
+
+    /**
+     * 保存前的数据校验
+     *
+     * @param entity 实体类数据
+     */
+    private void validEntityBeforeSave(SingleDevice entity){
+        //TODO 做一些数据校验,如唯一约束
+    }
+
+    @Override
+    public Boolean deleteWithValidByIds(Collection<String> ids, Boolean isValid) {
+        if(isValid){
+            //TODO 做一些业务上的校验,判断是否需要校验
+        }
+        return removeByIds(ids);
+    }
+}

+ 25 - 0
ruoyi-zhdd/src/main/resources/mapper/zhdd/SingleDeviceMapper.xml

@@ -0,0 +1,25 @@
+<?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.ruoyi.zhdd.mapper.SingleDeviceMapper">
+
+    <resultMap type="com.ruoyi.zhdd.domain.SingleDevice" id="SingleDeviceResult">
+        <result property="userId" column="user_id"/>
+        <result property="userName" column="user_name"/>
+        <result property="userType" column="user_type"/>
+        <result property="deviceCode" column="deviceCode"/>
+        <result property="gpsX" column="gps_x"/>
+        <result property="gpsY" column="gps_y"/>
+        <result property="height" column="height"/>
+        <result property="angle" column="angle"/>
+        <result property="speed" column="speed"/>
+        <result property="startCount" column="start_count"/>
+        <result property="dataSource" column="data_source"/>
+        <result property="time" column="time"/>
+        <result property="extendInfo" column="extend_info"/>
+        <result property="deviceExtendInfo" column="device_extend_info"/>
+    </resultMap>
+
+
+</mapper>

+ 4 - 2
sql/20211209修改.sql

@@ -5,8 +5,10 @@ comment on column b_resource.location_type is '位置类型(水上和陆上)
 
 INSERT INTO sys_dict_type (dict_id, dict_name, dict_type, status, create_by, create_time, update_by, update_time, remark) VALUES (22, '资源位置类型', 'zhdd_location_type', '0', 'admin', '2021-09-28 15:55:09', 'admin', '2021-09-28 15:55:09', null);
 
-INSERT INTO sys_dict_data (dict_code, dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES (144, 0, '水上', '水上', 'zhdd_location_type', null, 'default', 'N', '0', 'admin', '2021-09-28 15:57:23', 'admin', '2021-09-28 15:57:23', null);
-INSERT INTO sys_dict_data (dict_code, dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES (145, 0, '陆上', '陆上', 'zhdd_location_type', null, 'default', 'N', '0', 'admin', '2021-09-28 15:57:23', 'admin', '2021-09-28 15:57:23', null);
+INSERT INTO sys_dict_data (dict_code, dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES (144, 0, '水上', '1', 'zhdd_location_type', null,
+                                                                                                                                                                                               'default', 'N', '0', 'admin', '2021-09-28 15:57:23', 'admin', '2021-09-28 15:57:23', null);
+INSERT INTO sys_dict_data (dict_code, dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES (145, 0, '陆上', '2', 'zhdd_location_type', null,
+                                                                                                                                                                                               'default', 'N', '0', 'admin', '2021-09-28 15:57:23', 'admin', '2021-09-28 15:57:23', null);
 
 alter table b_incident
     add conclusion varchar(1000);