浏览代码

Merge branch 'refs/heads/feature-lihb-20251027-profiler' into dev

LHB 1 周之前
父节点
当前提交
6eb7d4a903
共有 21 个文件被更改,包括 977 次插入0 次删除
  1. 1 0
      blade-gateway/src/main/java/org/springblade/gateway/provider/AuthProvider.java
  2. 22 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/dto/ProfilerOffsetDTO.java
  3. 22 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/dto/ProfilerOffsetResultDTO.java
  4. 89 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/entity/ProfilerData.java
  5. 146 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/entity/ProfilerOffset.java
  6. 102 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/entity/ProfilerStandardSectionBean.java
  7. 43 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/entity/profiler/ProfilerResult.java
  8. 22 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/entity/profiler/ProfilerSaveDTO.java
  9. 88 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ProfilerController.java
  10. 20 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ProfilerDataMapper.java
  11. 25 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ProfilerDataMapper.xml
  12. 20 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ProfilerOffsetMapper.java
  13. 33 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ProfilerOffsetMapper.xml
  14. 20 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ProfilerStandardSectionBeanMapper.java
  15. 28 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ProfilerStandardSectionBeanMapper.xml
  16. 13 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/ProfilerDataService.java
  17. 27 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/ProfilerOffsetService.java
  18. 13 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/ProfilerStandardSectionBeanService.java
  19. 22 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ProfilerDataServiceImpl.java
  20. 199 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ProfilerOffsetServiceImpl.java
  21. 22 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ProfilerStandardSectionBeanServiceImpl.java

+ 1 - 0
blade-gateway/src/main/java/org/springblade/gateway/provider/AuthProvider.java

@@ -69,6 +69,7 @@ public class AuthProvider {
         DEFAULT_SKIP_URL.add("/getArchiveToken"); //成渝第三方登录获取档案系统tokne
         DEFAULT_SKIP_URL.add("/meeting/**");//DingDing会议接口
         DEFAULT_SKIP_URL.add("/hczc/api/meter/**");//重庆高速计量获取分部分项划分
+        DEFAULT_SKIP_URL.add("/profiler/save");//成渝断面仪新增接口开放
 
     }
 

+ 22 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/dto/ProfilerOffsetDTO.java

@@ -0,0 +1,22 @@
+package org.springblade.manager.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.manager.entity.ProfilerOffset;
+
+/**
+ * @author LHB
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class ProfilerOffsetDTO extends ProfilerOffset {
+    @ApiModelProperty(value = "当前页")
+    private Integer current;
+    @ApiModelProperty(value = "每页显示数量")
+    private Integer size;
+    @ApiModelProperty(value = "开始时间")
+    private String startTime;
+    @ApiModelProperty(value = "结束时间")
+    private String endTime;
+}

+ 22 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/dto/ProfilerOffsetResultDTO.java

@@ -0,0 +1,22 @@
+package org.springblade.manager.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.manager.entity.ProfilerData;
+import org.springblade.manager.entity.ProfilerOffset;
+import org.springblade.manager.entity.ProfilerStandardSectionBean;
+
+import java.util.List;
+
+/**
+ * @author LHB
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class ProfilerOffsetResultDTO extends ProfilerOffset {
+    @ApiModelProperty(value = "标准断面")
+    private List<ProfilerStandardSectionBean> sectionBeans;
+    @ApiModelProperty(value = "测量点数组")
+    private List<ProfilerData> data;
+}

+ 89 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/entity/ProfilerData.java

@@ -0,0 +1,89 @@
+package org.springblade.manager.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import java.time.LocalDateTime;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+/**
+ * 断面仪-测量点数组
+ * @author LHB
+ * @TableName q_profiler_data
+ */
+@TableName(value ="q_profiler_data")
+@Data
+public class ProfilerData {
+    /**
+     * 
+     */
+    @TableId(type = IdType.INPUT)
+    @ApiModelProperty("id")
+    private Long id;
+
+    /**
+     * 基础信息id
+     */
+    @ApiModelProperty("基础信息id")
+    private Long offsetId;
+
+    /**
+     * 测点角度
+     */
+    @ApiModelProperty("测点角度")
+    private String angle;
+
+    /**
+     * 超/欠挖值
+     */
+    @ApiModelProperty("超/欠挖值")
+    private String backBreak;
+
+    /**
+     * 距离
+     */
+    @ApiModelProperty("距离")
+    private String dist;
+
+    /**
+     * x坐标
+     */
+    @ApiModelProperty("x坐标")
+    private String x;
+
+    /**
+     * z坐标
+     */
+    @ApiModelProperty("z坐标")
+    private String z;
+
+    /**
+     *  创建时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime createTime;
+
+    /**
+     *  创建人
+     */
+    private Long createUser;
+
+    /**
+     *  修改时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime updateTime;
+
+    /**
+     *  修改人
+     */
+    private Long updateUser;
+
+}

+ 146 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/entity/ProfilerOffset.java

@@ -0,0 +1,146 @@
+package org.springblade.manager.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import java.time.LocalDateTime;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+/**
+ * 断面仪-基础信息+测量者信息
+ * @author LHB
+ * @TableName q_profiler_offset
+ */
+@TableName(value ="q_profiler_offset")
+@Data
+public class ProfilerOffset {
+    /**
+     * 
+     */
+    @TableId(type = IdType.INPUT)
+    @ApiModelProperty("id")
+    private Long id;
+
+    /**
+     * 断面仪测量设备编码或名称
+     */
+    @ApiModelProperty("断面仪测量设备编码或名称")
+    private String deviceCode;
+
+    /**
+     * 仪器高度(米)
+     */
+    @ApiModelProperty("仪器高度(米)")
+    private String deviceHeight;
+
+    /**
+     * 椭圆半径
+     */
+    @ApiModelProperty("椭圆半径")
+    private String ellipseRadius;
+
+    /**
+     * 斜坡
+     */
+    @ApiModelProperty("斜坡")
+    private String slope;
+
+    /**
+     * x方向偏移量(米)
+     */
+    @ApiModelProperty("x方向偏移量(米)")
+    @TableField(value = "x")
+    private String x0;
+
+    /**
+     * z方向偏移量(米)
+     */
+    @ApiModelProperty("z方向偏移量(米)")
+    @TableField(value = "z")
+    private String z0;
+
+    /**
+     * 隧道名称
+     */
+    @ApiModelProperty("隧道名称")
+    @TableField(value = "info_channel_name")
+    private String channelName;
+
+    /**
+     * 施工单位
+     */
+    @ApiModelProperty("施工单位")
+    @TableField(value = "info_construction_unit")
+    private String constructionUnit;
+
+    /**
+     * 测量时间
+     */
+    @ApiModelProperty("测量时间")
+    @TableField(value = "info_date")
+    private String date;
+
+    /**
+     * 工程名称
+     */
+    @ApiModelProperty("工程名称")
+    @TableField(value = "info_name_of_project")
+    private String nameOfProject;
+
+    /**
+     * 测量者
+     */
+    @ApiModelProperty("测量者")
+    @TableField(value = "info_user_name")
+    private String userName;
+
+    /**
+     * 里程号
+     */
+    @ApiModelProperty("里程号")
+    @TableField(value = "info_mileage_number")
+    private String mileageNumber;
+    /**
+     * 是否超欠挖 (我们这边自己判断的状态)
+     */
+    @ApiModelProperty("是否超欠挖")
+    @TableField(value = "back_break")
+    private String backBreak;
+
+    /**
+     * 文件地址
+     */
+    @ApiModelProperty("文件地址")
+    private String fileUrl;
+
+    /**
+     *  创建时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime createTime;
+
+    /**
+     *  创建人
+     */
+    private Long createUser;
+
+    /**
+     *  修改时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime updateTime;
+
+    /**
+     *  修改人
+     */
+    private Long updateUser;
+
+}

+ 102 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/entity/ProfilerStandardSectionBean.java

@@ -0,0 +1,102 @@
+package org.springblade.manager.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import java.time.LocalDateTime;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+/**
+ * 断面仪-标准断面
+ * @author LHB
+ * @TableName q_profiler_standard_section_bean
+ */
+@TableName(value ="q_profiler_standard_section_bean")
+@Data
+public class ProfilerStandardSectionBean {
+    /**
+     * 
+     */
+    @TableId(type = IdType.INPUT)
+    @ApiModelProperty("id")
+    private Long id;
+
+    /**
+     * 基础信息id
+     */
+    @ApiModelProperty("基础信息id")
+    private Long offsetId;
+
+    /**
+     * 方向,true为顺时针,false为逆时针 
+     */
+    @ApiModelProperty("方向,true为顺时针,false为逆时针 ")
+    private String direction;
+
+    /**
+     * 终角
+     */
+    @ApiModelProperty("终角")
+    private String endAngle;
+
+    /**
+     * 半径
+     */
+    @ApiModelProperty("半径")
+    private String radius;
+
+    /**
+     * 查询
+     */
+    @ApiModelProperty("查询")
+    @TableField("`select`")
+    private String select;
+
+    /**
+     * 起角(米)
+     */
+    @ApiModelProperty("起角(米)")
+    private String startAngle;
+
+    /**
+     * 圆心x(米)
+     */
+    @ApiModelProperty("圆心x(米)")
+    private String x;
+
+    /**
+     * 圆心z(米)
+     */
+    @ApiModelProperty("圆心z(米)")
+    private String y;
+
+    /**
+     *  创建时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime createTime;
+
+    /**
+     *  创建人
+     */
+    private Long createUser;
+
+    /**
+     *  修改时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime updateTime;
+
+    /**
+     *  修改人
+     */
+    private Long updateUser;
+}

+ 43 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/entity/profiler/ProfilerResult.java

@@ -0,0 +1,43 @@
+package org.springblade.manager.entity.profiler;
+
+import lombok.Data;
+
+/**
+ * @author LHB
+ */
+@Data
+public class ProfilerResult {
+    private String success;
+    private ProfilerError error;
+    private Object result;
+
+    @Data
+    static class ProfilerError{
+        private String code;
+        private String message;
+        private String details;
+
+        public ProfilerError(String code, String message, String details) {
+            this.code = code;
+            this.message = message;
+            this.details = details;
+        }
+    }
+
+
+    public static ProfilerResult success() {
+        ProfilerResult r = new ProfilerResult();
+        r.setSuccess("true");
+        r.setResult(null);
+        return r;
+    }
+
+
+    public static ProfilerResult error(String code, String message, String details) {
+        ProfilerResult r = new ProfilerResult();
+        r.setSuccess("false");
+        r.setError(new ProfilerError(code, message, details));
+        return r;
+    }
+
+}

+ 22 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/entity/profiler/ProfilerSaveDTO.java

@@ -0,0 +1,22 @@
+package org.springblade.manager.entity.profiler;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author LHB
+ * 第三方推送数据结构
+ */
+@Data
+public class ProfilerSaveDTO {
+    @ApiModelProperty(value = "appKey")
+    private String appKey;
+    @ApiModelProperty(value = "当前时间戳(秒)")
+    private Long timestamp;
+    @ApiModelProperty(value = "签名")
+    private String sign;
+    @ApiModelProperty(value = "编码")
+    private String deviceCode;
+    @ApiModelProperty(value = "JSON数据")
+    private String data;
+}

+ 88 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ProfilerController.java

@@ -0,0 +1,88 @@
+package org.springblade.manager.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.StringUtil;
+import org.springblade.manager.dto.ProfilerOffsetDTO;
+import org.springblade.manager.dto.ProfilerOffsetResultDTO;
+import org.springblade.manager.entity.ProfilerOffset;
+import org.springblade.manager.entity.profiler.ProfilerResult;
+import org.springblade.manager.entity.profiler.ProfilerSaveDTO;
+import org.springblade.manager.service.ProfilerOffsetService;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+/**
+ * @author LHB
+ */
+@RestController
+@AllArgsConstructor
+@RequestMapping("/profiler")
+@Api(value = "质检-综合管理-断面仪", tags = "质检-综合管理-断面仪")
+public class ProfilerController {
+
+    private final ProfilerOffsetService offsetService;
+
+    /**
+     * 新增接口
+     * 第三方推送数据过来
+     */
+    @PostMapping("/save")
+    @ApiOperationSupport(order = 1)
+    @ApiOperation(value = "新增断面仪数据", notes = "")
+    public ProfilerResult add(ProfilerSaveDTO save,
+                              @RequestParam(value = "file", required = false) MultipartFile file) {
+        if (StringUtil.isBlank(save.getAppKey())) {
+            return ProfilerResult.error("1001", "appKey不能为空", "");
+        }
+        if (save.getTimestamp() == null) {
+            return ProfilerResult.error("1002", "timestamp不能为空", "");
+        }
+        if (StringUtil.isBlank(save.getSign())) {
+            return ProfilerResult.error("1003", "sign不能为空", "");
+        }
+        if (StringUtil.isBlank(save.getDeviceCode())) {
+            return ProfilerResult.error("1004", "deviceCode不能为空", "");
+        }
+        if (StringUtil.isBlank(save.getData())) {
+            return ProfilerResult.error("1005", "data不能为空", "");
+        }
+        return offsetService.save(save, file);
+    }
+
+
+    /**
+     * 查询接口
+     */
+    @ApiOperationSupport(order = 2)
+    @ApiOperation(value = "查询接口", notes = "")
+    @PostMapping("/page")
+    public R<Page<ProfilerOffset>> page(ProfilerOffsetDTO offset) {
+        return R.data(offsetService.getPage(offset));
+    }
+
+    /**
+     * 查询详情接口
+     */
+    @ApiOperationSupport(order = 3)
+    @ApiOperation(value = "查询详情接口", notes = "")
+    @GetMapping("/getOne")
+    public R<ProfilerOffsetResultDTO> getOne(Long id) {
+        return R.data(offsetService.getOne(id));
+    }
+
+    /**
+     * 编辑接口
+     */
+    @ApiOperationSupport(order = 4)
+    @ApiOperation(value = "修改接口", notes = "")
+    @PostMapping("/edit")
+    public R<Boolean> edit(@RequestBody ProfilerOffsetResultDTO offset) {
+        return R.status(offsetService.edit(offset));
+    }
+
+}

+ 20 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ProfilerDataMapper.java

@@ -0,0 +1,20 @@
+package org.springblade.manager.mapper;
+
+import org.apache.ibatis.annotations.Mapper;
+import org.springblade.manager.entity.ProfilerData;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+* @author LHB
+* @description 针对表【q_profiler_data(断面仪-测量点数组)】的数据库操作Mapper
+* @createDate 2025-10-27 15:58:56
+* @Entity org.springblade.manager.entity.QProfilerData
+*/
+@Mapper
+public interface ProfilerDataMapper extends BaseMapper<ProfilerData> {
+
+}
+
+
+
+

+ 25 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ProfilerDataMapper.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="org.springblade.manager.mapper.ProfilerDataMapper">
+
+    <resultMap id="BaseResultMap" type="org.springblade.manager.entity.ProfilerData">
+            <id property="id" column="id" />
+            <result property="offsetId" column="offset_id" />
+            <result property="angle" column="angle" />
+            <result property="backBreak" column="back_break" />
+            <result property="dist" column="dist" />
+            <result property="x" column="x" />
+            <result property="z" column="z" />
+            <result property="createTime" column="create_time" />
+            <result property="createUser" column="create_user" />
+            <result property="updateTime" column="update_time" />
+            <result property="updateUser" column="update_user" />
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        id,offset_id,angle,back_break,dist,x,
+        z,create_time,create_user,update_time,update_user
+    </sql>
+</mapper>

+ 20 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ProfilerOffsetMapper.java

@@ -0,0 +1,20 @@
+package org.springblade.manager.mapper;
+
+import org.apache.ibatis.annotations.Mapper;
+import org.springblade.manager.entity.ProfilerOffset;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+* @author LHB
+* @description 针对表【q_profiler_offset(断面仪-基础信息+测量者信息)】的数据库操作Mapper
+* @createDate 2025-10-27 15:58:56
+* @Entity org.springblade.manager.entity.QProfilerOffset
+*/
+@Mapper
+public interface ProfilerOffsetMapper extends BaseMapper<ProfilerOffset> {
+
+}
+
+
+
+

+ 33 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ProfilerOffsetMapper.xml

@@ -0,0 +1,33 @@
+<?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="org.springblade.manager.mapper.ProfilerOffsetMapper">
+
+    <resultMap id="BaseResultMap" type="org.springblade.manager.entity.ProfilerOffset">
+            <id property="id" column="id" />
+            <result property="deviceCode" column="device_code" />
+            <result property="deviceHeight" column="device_height" />
+            <result property="ellipseRadius" column="ellipse_radius" />
+            <result property="slope" column="slope" />
+            <result property="x" column="x" />
+            <result property="z" column="z" />
+            <result property="infoChannelName" column="info_channel_name" />
+            <result property="infoConstructionUnit" column="info_construction_unit" />
+            <result property="infoDate" column="info_date" />
+            <result property="infoNameOfProject" column="info_name_of_project" />
+            <result property="infoUserName" column="info_user_name" />
+            <result property="infoMileageNumber" column="info_mileage_number" />
+            <result property="fileUrl" column="file_url" />
+            <result property="createTime" column="create_time" />
+            <result property="createUser" column="create_user" />
+            <result property="updateTime" column="update_time" />
+            <result property="updateUser" column="update_user" />
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        id,device_code,device_height,ellipse_radius,slope,x,z,
+        info_channel_name,info_construction_unit,info_date,info_name_of_project,info_user_name,
+        info_mileage_number,file_url,create_time,create_user,update_time,update_user
+    </sql>
+</mapper>

+ 20 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ProfilerStandardSectionBeanMapper.java

@@ -0,0 +1,20 @@
+package org.springblade.manager.mapper;
+
+import org.apache.ibatis.annotations.Mapper;
+import org.springblade.manager.entity.ProfilerStandardSectionBean;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+* @author LHB
+* @description 针对表【q_profiler_standard_section_bean(断面仪-标准断面)】的数据库操作Mapper
+* @createDate 2025-10-27 15:58:56
+* @Entity org.springblade.manager.entity.QProfilerStandardSectionBean
+*/
+@Mapper
+public interface ProfilerStandardSectionBeanMapper extends BaseMapper<ProfilerStandardSectionBean> {
+
+}
+
+
+
+

+ 28 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ProfilerStandardSectionBeanMapper.xml

@@ -0,0 +1,28 @@
+<?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="org.springblade.manager.mapper.ProfilerStandardSectionBeanMapper">
+
+    <resultMap id="BaseResultMap" type="org.springblade.manager.entity.ProfilerStandardSectionBean">
+            <id property="id" column="id" />
+            <result property="offsetId" column="offset_id" />
+            <result property="direction" column="direction" />
+            <result property="endAngle" column="end_angle" />
+            <result property="radius" column="radius" />
+            <result property="select" column="select" />
+            <result property="startAngle" column="start_angle" />
+            <result property="x" column="x" />
+            <result property="y" column="y" />
+            <result property="createTime" column="create_time" />
+            <result property="createUser" column="create_user" />
+            <result property="updateTime" column="update_time" />
+            <result property="updateUser" column="update_user" />
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        id,offset_id,direction,end_angle,radius,select,
+        start_angle,x,y,create_time,create_user,
+        update_time,update_user
+    </sql>
+</mapper>

+ 13 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/ProfilerDataService.java

@@ -0,0 +1,13 @@
+package org.springblade.manager.service;
+
+import org.springblade.manager.entity.ProfilerData;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+* @author LHB
+* @description 针对表【q_profiler_data(断面仪-测量点数组)】的数据库操作Service
+* @createDate 2025-10-27 15:58:56
+*/
+public interface ProfilerDataService extends IService<ProfilerData> {
+
+}

+ 27 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/ProfilerOffsetService.java

@@ -0,0 +1,27 @@
+package org.springblade.manager.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.springblade.manager.dto.ProfilerOffsetDTO;
+import org.springblade.manager.dto.ProfilerOffsetResultDTO;
+import org.springblade.manager.entity.ProfilerOffset;
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.springblade.manager.entity.profiler.ProfilerResult;
+import org.springblade.manager.entity.profiler.ProfilerSaveDTO;
+import org.springframework.web.multipart.MultipartFile;
+
+/**
+* @author LHB
+* @description 针对表【q_profiler_offset(断面仪-基础信息+测量者信息)】的数据库操作Service
+* @createDate 2025-10-27 15:58:56
+*/
+public interface ProfilerOffsetService extends IService<ProfilerOffset> {
+
+    ProfilerResult save(ProfilerSaveDTO save, MultipartFile file);
+
+    ProfilerOffsetResultDTO getOne(Long id);
+
+    boolean edit(ProfilerOffsetResultDTO offset);
+
+    Page<ProfilerOffset> getPage(ProfilerOffsetDTO offset);
+
+}

+ 13 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/ProfilerStandardSectionBeanService.java

@@ -0,0 +1,13 @@
+package org.springblade.manager.service;
+
+import org.springblade.manager.entity.ProfilerStandardSectionBean;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+* @author LHB
+* @description 针对表【q_profiler_standard_section_bean(断面仪-标准断面)】的数据库操作Service
+* @createDate 2025-10-27 15:58:56
+*/
+public interface ProfilerStandardSectionBeanService extends IService<ProfilerStandardSectionBean> {
+
+}

+ 22 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ProfilerDataServiceImpl.java

@@ -0,0 +1,22 @@
+package org.springblade.manager.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springblade.manager.entity.ProfilerData;
+import org.springblade.manager.service.ProfilerDataService;
+import org.springblade.manager.mapper.ProfilerDataMapper;
+import org.springframework.stereotype.Service;
+
+/**
+* @author LHB
+* @description 针对表【q_profiler_data(断面仪-测量点数组)】的数据库操作Service实现
+* @createDate 2025-10-27 15:58:56
+*/
+@Service
+public class ProfilerDataServiceImpl extends ServiceImpl<ProfilerDataMapper, ProfilerData>
+    implements ProfilerDataService {
+
+}
+
+
+
+

+ 199 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ProfilerOffsetServiceImpl.java

@@ -0,0 +1,199 @@
+package org.springblade.manager.service.impl;
+
+import cn.hutool.json.JSONObject;
+import cn.hutool.json.JSONUtil;
+import com.alibaba.nacos.common.utils.MD5Utils;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springblade.common.utils.SnowFlakeUtil;
+import org.springblade.core.oss.model.BladeFile;
+import org.springblade.core.tool.utils.BeanUtil;
+import org.springblade.core.tool.utils.CollectionUtil;
+import org.springblade.core.tool.utils.StringUtil;
+import org.springblade.manager.dto.ProfilerOffsetDTO;
+import org.springblade.manager.dto.ProfilerOffsetResultDTO;
+import org.springblade.manager.entity.ProfilerData;
+import org.springblade.manager.entity.ProfilerOffset;
+import org.springblade.manager.entity.ProfilerStandardSectionBean;
+import org.springblade.manager.entity.profiler.ProfilerResult;
+import org.springblade.manager.entity.profiler.ProfilerSaveDTO;
+import org.springblade.manager.service.ProfilerDataService;
+import org.springblade.manager.service.ProfilerOffsetService;
+import org.springblade.manager.mapper.ProfilerOffsetMapper;
+import org.springblade.manager.service.ProfilerStandardSectionBeanService;
+import org.springblade.resource.feign.NewIOSSClient;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import java.time.Instant;
+import java.util.List;
+
+/**
+ * @author LHB
+ * @description 针对表【q_profiler_offset(断面仪-基础信息+测量者信息)】的数据库操作Service实现
+ * @createDate 2025-10-27 15:58:56
+ */
+@Service
+public class ProfilerOffsetServiceImpl extends ServiceImpl<ProfilerOffsetMapper, ProfilerOffset>
+        implements ProfilerOffsetService {
+
+    //第三方的appKey 固定值
+    private final static String APP_KEY = "QDM123";
+    //第三方密钥
+    private final static String APP_SECRET = "MDc1YWI4OTMtY2M0NC00NDViLTlkZmUtYzAzZTVmZTUxMmE1";
+    // 时间戳有效期(秒),防止重放攻击 // 30分钟
+    private static final long TIMESTAMP_EXPIRE = 1800;
+    @Resource
+    private NewIOSSClient newIOSSClient;
+    @Resource
+    private ProfilerDataService dataService;
+    @Resource
+    private ProfilerStandardSectionBeanService beanService;
+
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public ProfilerResult save(ProfilerSaveDTO save, MultipartFile file) {
+        if (!save.getAppKey().equals(APP_KEY)) {
+            return ProfilerResult.error("10006", "appKey错误", "");
+        }
+        String s = MD5Utils.md5Hex(APP_KEY + save.getTimestamp() + APP_SECRET, "UTF-8");
+        if (!s.equals(save.getSign())) {
+            return ProfilerResult.error("10007", "sign错误", "");
+        }
+        if(!isValidTimestamp(save.getTimestamp())){
+            return ProfilerResult.error("10008","签名验证失败:timeTicks的时间和当前时间必须小于30分钟","");
+        }
+
+        //主键id
+        Long id = SnowFlakeUtil.getId();
+        //断面仪测量设备编码或名称
+        String deviceCode = save.getDeviceCode();
+        //字符串转json
+        JSONObject jsonObject = null;
+        try {
+            jsonObject = JSONUtil.parseObj(save.getData());
+        } catch (Exception e) {
+            return ProfilerResult.error("10009","data参数格式错误","");
+        }
+        //获取基础信息 + 测量者信息
+        ProfilerOffset offset = jsonObject.getBean("offset", ProfilerOffset.class);
+        if(offset == null){
+            offset = new ProfilerOffset();
+        }
+        offset.setId(id);
+        offset.setDeviceCode(deviceCode);
+        ProfilerOffset info = jsonObject.getBean("info", ProfilerOffset.class);
+        //把测量者信息赋值给基础信息对象
+        if(info != null){
+            offset.setChannelName(info.getChannelName());
+            offset.setConstructionUnit(info.getConstructionUnit());
+            offset.setDate(info.getDate());
+            offset.setNameOfProject(info.getNameOfProject());
+            offset.setUserName(info.getUserName());
+            offset.setMileageNumber(info.getMileageNumber());
+        }
+        //获取标准断面数据
+        JSONObject mStandardSectionDataBeanList = jsonObject.getJSONObject("standardSectionBean");
+        List<ProfilerStandardSectionBean> standardSectionBean = null;
+        if(mStandardSectionDataBeanList != null){
+            standardSectionBean = mStandardSectionDataBeanList.getBeanList("mStandardSectionDataBeanList", ProfilerStandardSectionBean.class);
+            if(standardSectionBean != null){
+                standardSectionBean.forEach(f ->{
+                    f.setId(SnowFlakeUtil.getId());
+                    f.setOffsetId(id);
+                });
+            }
+        }
+        //获取测量数据
+        List<ProfilerData> data = jsonObject.getBeanList("data", ProfilerData.class);
+        if(data != null){
+            data.forEach(f -> {
+                f.setId(SnowFlakeUtil.getId());
+                f.setOffsetId(id);
+            });
+        }
+        //上传文件
+        if (file != null && !file.isEmpty() && file.getSize() > 0) {
+            //获取文件名称后缀
+            BladeFile bladeFile = this.newIOSSClient.uploadFileByInputStream(file);
+            offset.setFileUrl(bladeFile.getLink());
+        }
+        //保存数据
+        baseMapper.insert(offset);
+        if(CollectionUtil.isNotEmpty(standardSectionBean)){
+            beanService.saveBatch(standardSectionBean);
+        }
+        if(CollectionUtil.isNotEmpty(data)){
+            dataService.saveBatch(data);
+        }
+        return ProfilerResult.success();
+    }
+
+    /**
+     * 验证时间戳有效性
+     *
+     * @param timestamp 时间戳字符串
+     * @return 是否有效
+     */
+    private static boolean isValidTimestamp(Long timestamp) {
+        try {
+            long currentTs = Instant.now().getEpochSecond();
+            // 检查时间戳是否在有效期内(前后5分钟)
+            return Math.abs(currentTs - timestamp) <= TIMESTAMP_EXPIRE;
+        } catch (NumberFormatException e) {
+            return false;
+        }
+    }
+
+    @Override
+    public ProfilerOffsetResultDTO getOne(Long id) {
+        ProfilerOffset byId = this.getById(id);
+        if(byId != null){
+            ProfilerOffsetResultDTO resultDTO = BeanUtil.copyProperties(byId, ProfilerOffsetResultDTO.class);
+            if(resultDTO != null){
+                List<ProfilerStandardSectionBean> list = beanService.list(Wrappers.<ProfilerStandardSectionBean>lambdaQuery().eq(ProfilerStandardSectionBean::getOffsetId, id));
+                List<ProfilerData> list1 = dataService.list(Wrappers.<ProfilerData>lambdaQuery().eq(ProfilerData::getOffsetId, id));
+                resultDTO.setSectionBeans(list);
+                resultDTO.setData(list1);
+            }
+            return resultDTO;
+        }
+        return null;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean edit(ProfilerOffsetResultDTO offset) {
+        ProfilerOffset qProfilerOffset = BeanUtil.copyProperties(offset, ProfilerOffset.class);
+        boolean update = this.updateById(qProfilerOffset);
+
+        List<ProfilerStandardSectionBean> sectionBeans = offset.getSectionBeans();
+        if(CollectionUtil.isNotEmpty(sectionBeans)){
+            beanService.updateBatchById(sectionBeans);
+        }
+        List<ProfilerData> data = offset.getData();
+        if(CollectionUtil.isNotEmpty(data)){
+            dataService.updateBatchById(data);
+        }
+        return update;
+    }
+
+    @Override
+    public Page<ProfilerOffset> getPage(ProfilerOffsetDTO offset) {
+        QueryWrapper<ProfilerOffset> qProfilerOffsetQueryWrapper = new QueryWrapper<>();
+        qProfilerOffsetQueryWrapper.lambda()
+                .eq(StringUtil.isNotBlank(offset.getUserName()), ProfilerOffset::getUserName, offset.getUserName())
+                .ge(StringUtil.isNotBlank(offset.getStartTime()), ProfilerOffset::getDate, offset.getStartTime())
+                .le(StringUtil.isNotBlank(offset.getEndTime()), ProfilerOffset::getDate, offset.getEndTime());
+        return baseMapper.selectPage(new Page<>(offset.getCurrent(), offset.getSize()),qProfilerOffsetQueryWrapper);
+    }
+}
+
+
+
+

+ 22 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ProfilerStandardSectionBeanServiceImpl.java

@@ -0,0 +1,22 @@
+package org.springblade.manager.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springblade.manager.entity.ProfilerStandardSectionBean;
+import org.springblade.manager.service.ProfilerStandardSectionBeanService;
+import org.springblade.manager.mapper.ProfilerStandardSectionBeanMapper;
+import org.springframework.stereotype.Service;
+
+/**
+* @author LHB
+* @description 针对表【q_profiler_standard_section_bean(断面仪-标准断面)】的数据库操作Service实现
+* @createDate 2025-10-27 15:58:56
+*/
+@Service
+public class ProfilerStandardSectionBeanServiceImpl extends ServiceImpl<ProfilerStandardSectionBeanMapper, ProfilerStandardSectionBean>
+    implements ProfilerStandardSectionBeanService {
+
+}
+
+
+
+