From 6246673dd42d9faeab27c1372e3eff6aa58d3f0c Mon Sep 17 00:00:00 2001
From: chen.llin <1442464845@qq.comm>
Date: 星期日, 18 一月 2026 15:23:29 +0800
Subject: [PATCH] 倾斜度

---
 src/main/java/com/zy/asrs/entity/CrnTiltRecord.java                  |  209 +++++++++++++++++++++++
 src/main/webapp/views/crnTiltRecord/crnTiltRecord.html               |   63 +++++++
 src/main/java/com/zy/asrs/service/CrnTiltRecordService.java          |   11 +
 src/main/java/com/zy/asrs/service/impl/CrnTiltRecordServiceImpl.java |   15 +
 src/main/java/com/zy/asrs/controller/CrnTiltRecordController.java    |  192 +++++++++++++++++++++
 src/main/java/com/zy/asrs/mapper/CrnTiltRecordMapper.java            |   15 +
 6 files changed, 505 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/zy/asrs/controller/CrnTiltRecordController.java b/src/main/java/com/zy/asrs/controller/CrnTiltRecordController.java
new file mode 100644
index 0000000..fea8912
--- /dev/null
+++ b/src/main/java/com/zy/asrs/controller/CrnTiltRecordController.java
@@ -0,0 +1,192 @@
+package com.zy.asrs.controller;
+
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.plugins.Page;
+import com.core.annotations.ManagerAuth;
+import com.core.common.Cools;
+import com.core.common.DateUtils;
+import com.core.common.R;
+import com.zy.asrs.entity.CrnTiltRecord;
+import com.zy.asrs.service.CrnTiltRecordService;
+import com.zy.common.web.BaseController;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Map;
+
+/**
+ * 鍫嗗灈鏈哄�炬枩搴﹁褰� Controller
+ */
+@Slf4j
+@RestController
+@RequestMapping("/crnTiltRecord")
+@Api(tags = "鍫嗗灈鏈哄�炬枩搴﹁褰曠鐞�")
+public class CrnTiltRecordController extends BaseController {
+
+    @Autowired
+    private CrnTiltRecordService crnTiltRecordService;
+
+    /**
+     * 鏌ヨ鍊炬枩搴﹁褰曞垪琛紙鍒嗛〉锛�
+     */
+    @RequestMapping(value = "/list/auth", method = RequestMethod.GET)
+    @ManagerAuth
+    @ApiOperation(value = "鏌ヨ鍊炬枩搴﹁褰曞垪琛�", notes = "鏀寔鍒嗛〉鍜屽鏉′欢鏌ヨ")
+    public R list(@RequestParam(defaultValue = "1") Integer curr,
+                  @RequestParam(defaultValue = "10") Integer limit,
+                  @RequestParam(required = false) String orderByField,
+                  @RequestParam(required = false) String orderByType,
+                  @RequestParam(required = false) String condition,
+                  @RequestParam Map<String, Object> param) {
+        try {
+            EntityWrapper<CrnTiltRecord> wrapper = new EntityWrapper<>();
+            
+            // 澶勭悊鏌ヨ鏉′欢
+            excludeTrash(param);
+            convert(param, wrapper);
+            allLike(CrnTiltRecord.class, param.keySet(), wrapper, condition);
+            
+            // 鎺掑簭
+            if (!Cools.isEmpty(orderByField)) {
+                wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));
+            } else {
+                // 榛樿鎸夎褰曟棩鏈熷�掑簭
+                wrapper.orderBy("record_date", false);
+                wrapper.orderBy("record_time", false);
+            }
+            
+            Page<CrnTiltRecord> page = new Page<>(curr, limit);
+            Page<CrnTiltRecord> result = crnTiltRecordService.selectPage(page, wrapper);
+            
+            return R.ok(result);
+        } catch (Exception e) {
+            log.error("鏌ヨ鍊炬枩搴﹁褰曞垪琛ㄥけ璐�", e);
+            return R.error("鏌ヨ澶辫触锛�" + e.getMessage());
+        }
+    }
+
+    /**
+     * 鏍规嵁ID鏌ヨ璇︽儏
+     */
+    @RequestMapping(value = "/detail/auth", method = RequestMethod.GET)
+    @ManagerAuth
+    @ApiOperation(value = "鏌ヨ鍊炬枩搴﹁褰曡鎯�")
+    public R detail(@RequestParam Long id) {
+        try {
+            if (Cools.isEmpty(id)) {
+                return R.error("ID涓嶈兘涓虹┖");
+            }
+            
+            CrnTiltRecord record = crnTiltRecordService.selectById(id);
+            if (Cools.isEmpty(record)) {
+                return R.error("璁板綍涓嶅瓨鍦�");
+            }
+            
+            return R.ok(record);
+        } catch (Exception e) {
+            log.error("鏌ヨ鍊炬枩搴﹁褰曡鎯呭け璐�", e);
+            return R.error("鏌ヨ澶辫触锛�" + e.getMessage());
+        }
+    }
+
+    /**
+     * 鏍规嵁鍫嗗灈鏈虹紪鍙锋煡璇㈡渶杩戠殑璁板綍
+     */
+    @RequestMapping(value = "/latest/auth", method = RequestMethod.GET)
+    @ManagerAuth
+    @ApiOperation(value = "鏌ヨ鍫嗗灈鏈烘渶杩戠殑鍊炬枩搴﹁褰�")
+    public R latest(@RequestParam Integer crnNo) {
+        try {
+            if (Cools.isEmpty(crnNo)) {
+                return R.error("鍫嗗灈鏈虹紪鍙蜂笉鑳戒负绌�");
+            }
+            
+            EntityWrapper<CrnTiltRecord> wrapper = new EntityWrapper<>();
+            wrapper.eq("crn_no", crnNo);
+            wrapper.orderBy("record_date", false);
+            wrapper.orderBy("record_time", false);
+            wrapper.last("OFFSET 0 ROWS FETCH NEXT 1 ROWS ONLY");
+            
+            CrnTiltRecord record = crnTiltRecordService.selectOne(wrapper);
+            return R.ok(record);
+        } catch (Exception e) {
+            log.error("鏌ヨ鍫嗗灈鏈烘渶杩戝�炬枩搴﹁褰曞け璐�", e);
+            return R.error("鏌ヨ澶辫触锛�" + e.getMessage());
+        }
+    }
+
+    /**
+     * 瀵煎嚭鍊炬枩搴﹁褰�
+     */
+    @RequestMapping(value = "/export/auth", method = RequestMethod.GET)
+    @ManagerAuth
+    @ApiOperation(value = "瀵煎嚭鍊炬枩搴﹁褰�")
+    public R export(@RequestParam(required = false) String condition,
+                    @RequestParam Map<String, Object> param) {
+        try {
+            EntityWrapper<CrnTiltRecord> wrapper = new EntityWrapper<>();
+            
+            // 澶勭悊鏌ヨ鏉′欢
+            excludeTrash(param);
+            convert(param, wrapper);
+            allLike(CrnTiltRecord.class, param.keySet(), wrapper, condition);
+            
+            // 鎺掑簭锛氶粯璁ゆ寜璁板綍鏃ユ湡鍊掑簭
+            wrapper.orderBy("record_date", false);
+            wrapper.orderBy("record_time", false);
+            
+            // 鏌ヨ鎵�鏈夋暟鎹紙涓嶅垎椤碉級
+            java.util.List<CrnTiltRecord> list = crnTiltRecordService.selectList(wrapper);
+            
+            // 瀹氫箟瀵煎嚭瀛楁
+            java.util.List<String> fields = new java.util.ArrayList<>();
+            fields.add("id");
+            fields.add("crnNo");
+            fields.add("tiltValue");
+            fields.add("tiltX");
+            fields.add("tiltY");
+            fields.add("tiltZ");
+            fields.add("recordDate");
+            fields.add("recordTime");
+            fields.add("prevTiltValue");
+            fields.add("tiltChange");
+            fields.add("recordType");
+            
+            return R.ok(exportSupport(list, fields));
+        } catch (Exception e) {
+            log.error("瀵煎嚭鍊炬枩搴﹁褰曞け璐�", e);
+            return R.error("瀵煎嚭澶辫触锛�" + e.getMessage());
+        }
+    }
+
+    /**
+     * 杞崲鏌ヨ鏉′欢
+     */
+    private <T> void convert(Map<String, Object> map, EntityWrapper<T> wrapper) {
+        for (Map.Entry<String, Object> entry : map.entrySet()) {
+            String val = String.valueOf(entry.getValue());
+            // 璺宠繃绌哄�煎拰null
+            if (Cools.isEmpty(val) || "null".equals(val) || "undefined".equals(val)) {
+                continue;
+            }
+            String columnKey = humpToLine(entry.getKey());
+            
+            if (val.contains(RANGE_TIME_LINK)) {
+                // 鏃堕棿鑼冨洿鏌ヨ
+                String[] dates = val.split(RANGE_TIME_LINK);
+                if (dates.length == 2 && !Cools.isEmpty(dates[0]) && !Cools.isEmpty(dates[1])) {
+                    wrapper.ge(columnKey, DateUtils.convert(dates[0]));
+                    wrapper.le(columnKey, DateUtils.convert(dates[1]));
+                }
+            } else {
+                wrapper.like(columnKey, val);
+            }
+        }
+    }
+}
diff --git a/src/main/java/com/zy/asrs/entity/CrnTiltRecord.java b/src/main/java/com/zy/asrs/entity/CrnTiltRecord.java
new file mode 100644
index 0000000..324635f
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/CrnTiltRecord.java
@@ -0,0 +1,209 @@
+package com.zy.asrs.entity;
+
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import com.baomidou.mybatisplus.enums.IdType;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+/**
+ * 鍫嗗灈鏈哄�炬枩搴﹁褰曞疄浣撶被
+ * 鐢ㄤ簬瀛樺偍姣忓懆璁板綍鐨勫爢鍨涙満鍊炬枩搴︽暟鎹�
+ */
+@TableName("asr_crn_tilt_record")
+public class CrnTiltRecord implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 涓婚敭ID
+     */
+    @ApiModelProperty(value = "涓婚敭ID")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 鍫嗗灈鏈虹紪鍙�
+     */
+    @ApiModelProperty(value = "鍫嗗灈鏈虹紪鍙�")
+    @TableField("crn_no")
+    private Integer crnNo;
+
+    /**
+     * 鍊炬枩搴﹀�硷紙搴︽垨寮у害锛屾牴鎹疄闄呬紶鎰熷櫒鍗曚綅锛�
+     */
+    @ApiModelProperty(value = "鍊炬枩搴﹀��")
+    @TableField("tilt_value")
+    private Float tiltValue;
+
+    /**
+     * X鏂瑰悜鍊炬枩搴�
+     */
+    @ApiModelProperty(value = "X鏂瑰悜鍊炬枩搴�")
+    @TableField("tilt_x")
+    private Float tiltX;
+
+    /**
+     * Y鏂瑰悜鍊炬枩搴�
+     */
+    @ApiModelProperty(value = "Y鏂瑰悜鍊炬枩搴�")
+    @TableField("tilt_y")
+    private Float tiltY;
+
+    /**
+     * Z鏂瑰悜鍊炬枩搴�
+     */
+    @ApiModelProperty(value = "Z鏂瑰悜鍊炬枩搴�")
+    @TableField("tilt_z")
+    private Float tiltZ;
+
+    /**
+     * 璁板綍鏃ユ湡锛堟瘡鍛ㄨ褰曚竴娆★級
+     */
+    @ApiModelProperty(value = "璁板綍鏃ユ湡")
+    @TableField("record_date")
+    private Date recordDate;
+
+    /**
+     * 璁板綍鏃堕棿
+     */
+    @ApiModelProperty(value = "璁板綍鏃堕棿")
+    @TableField("record_time")
+    private Date recordTime;
+
+    /**
+     * 涓婃璁板綍鐨勫�炬枩搴﹀�硷紙鐢ㄤ簬瀵规瘮锛�
+     */
+    @ApiModelProperty(value = "涓婃璁板綍鐨勫�炬枩搴﹀��")
+    @TableField("prev_tilt_value")
+    private Float prevTiltValue;
+
+    /**
+     * 鍊炬枩搴﹀彉鍖栭噺锛堝綋鍓嶅��-涓婃鍊硷級
+     */
+    @ApiModelProperty(value = "鍊炬枩搴﹀彉鍖栭噺")
+    @TableField("tilt_change")
+    private Float tiltChange;
+
+    /**
+     * 璁板綍绫诲瀷锛欰UTO-鑷姩璁板綍锛孧ANUAL-鎵嬪姩瑙﹀彂
+     */
+    @ApiModelProperty(value = "璁板綍绫诲瀷")
+    @TableField("record_type")
+    private String recordType;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Integer getCrnNo() {
+        return crnNo;
+    }
+
+    public void setCrnNo(Integer crnNo) {
+        this.crnNo = crnNo;
+    }
+
+    public Float getTiltValue() {
+        return tiltValue;
+    }
+
+    public void setTiltValue(Float tiltValue) {
+        this.tiltValue = tiltValue;
+    }
+
+    public Float getTiltX() {
+        return tiltX;
+    }
+
+    public void setTiltX(Float tiltX) {
+        this.tiltX = tiltX;
+    }
+
+    public Float getTiltY() {
+        return tiltY;
+    }
+
+    public void setTiltY(Float tiltY) {
+        this.tiltY = tiltY;
+    }
+
+    public Float getTiltZ() {
+        return tiltZ;
+    }
+
+    public void setTiltZ(Float tiltZ) {
+        this.tiltZ = tiltZ;
+    }
+
+    public Date getRecordDate() {
+        return recordDate;
+    }
+
+    public void setRecordDate(Date recordDate) {
+        this.recordDate = recordDate;
+    }
+
+    public String getRecordDate$() {
+        if (recordDate == null) {
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd").format(recordDate);
+    }
+
+    public Date getRecordTime() {
+        return recordTime;
+    }
+
+    public void setRecordTime(Date recordTime) {
+        this.recordTime = recordTime;
+    }
+
+    public String getRecordTime$() {
+        if (recordTime == null) {
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(recordTime);
+    }
+
+    public Float getPrevTiltValue() {
+        return prevTiltValue;
+    }
+
+    public void setPrevTiltValue(Float prevTiltValue) {
+        this.prevTiltValue = prevTiltValue;
+    }
+
+    public Float getTiltChange() {
+        return tiltChange;
+    }
+
+    public void setTiltChange(Float tiltChange) {
+        this.tiltChange = tiltChange;
+    }
+
+    public String getRecordType() {
+        return recordType;
+    }
+
+    public void setRecordType(String recordType) {
+        this.recordType = recordType;
+    }
+
+    public String getRecordType$() {
+        if ("AUTO".equals(recordType)) {
+            return "鑷姩璁板綍";
+        } else if ("MANUAL".equals(recordType)) {
+            return "鎵嬪姩瑙﹀彂";
+        }
+        return recordType != null ? recordType : "";
+    }
+}
diff --git a/src/main/java/com/zy/asrs/mapper/CrnTiltRecordMapper.java b/src/main/java/com/zy/asrs/mapper/CrnTiltRecordMapper.java
new file mode 100644
index 0000000..35720a0
--- /dev/null
+++ b/src/main/java/com/zy/asrs/mapper/CrnTiltRecordMapper.java
@@ -0,0 +1,15 @@
+package com.zy.asrs.mapper;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.zy.asrs.entity.CrnTiltRecord;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+/**
+ * 鍫嗗灈鏈哄�炬枩搴﹁褰� Mapper
+ */
+@Mapper
+@Repository
+public interface CrnTiltRecordMapper extends BaseMapper<CrnTiltRecord> {
+
+}
diff --git a/src/main/java/com/zy/asrs/service/CrnTiltRecordService.java b/src/main/java/com/zy/asrs/service/CrnTiltRecordService.java
new file mode 100644
index 0000000..f137e98
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/CrnTiltRecordService.java
@@ -0,0 +1,11 @@
+package com.zy.asrs.service;
+
+import com.baomidou.mybatisplus.service.IService;
+import com.zy.asrs.entity.CrnTiltRecord;
+
+/**
+ * 鍫嗗灈鏈哄�炬枩搴﹁褰� Service 鎺ュ彛
+ */
+public interface CrnTiltRecordService extends IService<CrnTiltRecord> {
+
+}
diff --git a/src/main/java/com/zy/asrs/service/impl/CrnTiltRecordServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/CrnTiltRecordServiceImpl.java
new file mode 100644
index 0000000..5fceefe
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/impl/CrnTiltRecordServiceImpl.java
@@ -0,0 +1,15 @@
+package com.zy.asrs.service.impl;
+
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.zy.asrs.entity.CrnTiltRecord;
+import com.zy.asrs.mapper.CrnTiltRecordMapper;
+import com.zy.asrs.service.CrnTiltRecordService;
+import org.springframework.stereotype.Service;
+
+/**
+ * 鍫嗗灈鏈哄�炬枩搴﹁褰� Service 瀹炵幇绫�
+ */
+@Service
+public class CrnTiltRecordServiceImpl extends ServiceImpl<CrnTiltRecordMapper, CrnTiltRecord> implements CrnTiltRecordService {
+
+}
diff --git a/src/main/webapp/views/crnTiltRecord/crnTiltRecord.html b/src/main/webapp/views/crnTiltRecord/crnTiltRecord.html
new file mode 100644
index 0000000..c5e6c2f
--- /dev/null
+++ b/src/main/webapp/views/crnTiltRecord/crnTiltRecord.html
@@ -0,0 +1,63 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <title>鍫嗗灈鏈哄�炬枩搴﹁褰�</title>
+    <meta name="renderer" content="webkit">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+    <link rel="stylesheet" href="../../static/layui/css/layui.css" media="all">
+    <link rel="stylesheet" href="../../static/css/cool.css" media="all">
+    <link rel="stylesheet" href="../../static/css/common.css" media="all">
+</head>
+<body>
+
+<!-- 鎼滅储鏍� -->
+<div id="search-box" class="layui-form layui-card-header">
+    <div class="layui-inline">
+        <label class="layui-form-label">鍫嗗灈鏈虹紪鍙凤細</label>
+        <div class="layui-input-inline">
+            <input id="crnNo" class="layui-input" name="crnNo" type="text" placeholder="璇疯緭鍏ュ爢鍨涙満缂栧彿" autocomplete="off">
+        </div>
+    </div>
+    <div class="layui-inline">
+        <label class="layui-form-label">璁板綍鏃ユ湡锛�</label>
+        <div class="layui-input-inline">
+            <input id="recordDate" class="layui-input" name="recordDate" type="text" placeholder="璇烽�夋嫨鏃ユ湡鑼冨洿" autocomplete="off">
+        </div>
+    </div>
+    <div class="layui-inline">
+        <label class="layui-form-label">璁板綍鏃堕棿锛�</label>
+        <div class="layui-input-inline">
+            <input id="recordTime" class="layui-input" name="recordTime" type="text" placeholder="璇烽�夋嫨鏃堕棿鑼冨洿" autocomplete="off">
+        </div>
+    </div>
+    <div id="data-search-btn" class="layui-btn-container layui-form-item" style="display: inline-block">
+        <button id="search" class="layui-btn layui-btn-primary layui-btn-radius" lay-submit lay-filter="search">鎼滅储</button>
+        <button id="reset" class="layui-btn layui-btn-primary layui-btn-radius" lay-submit lay-filter="reset">閲嶇疆</button>
+    </div>
+</div>
+
+<!-- 琛ㄦ牸 -->
+<div class="layui-form">
+    <table class="layui-hide" id="crnTiltRecord" lay-filter="crnTiltRecord"></table>
+</div>
+
+<script type="text/html" id="toolbar">
+    <div class="layui-btn-container">
+        <button class="layui-btn layui-btn-primary layui-btn-sm" id="btn-export" lay-event="exportData">瀵煎嚭</button>
+    </div>
+</script>
+
+<script type="text/html" id="operate">
+    <a class="layui-btn layui-btn-primary layui-btn-xs" lay-event="detail">璇︽儏</a>
+</script>
+
+<script type="text/javascript" src="../../static/js/jquery/jquery-3.3.1.min.js"></script>
+<script type="text/javascript" src="../../static/layui/layui.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../static/js/common.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../static/js/cool.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../static/js/crnTiltRecord/crnTiltRecord.js" charset="utf-8"></script>
+
+</body>
+</html>

--
Gitblit v1.9.1