自动化立体仓库 - WMS系统
chen.llin
22 小时以前 6246673dd42d9faeab27c1372e3eff6aa58d3f0c
倾斜度
6个文件已添加
505 ■■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/CrnTiltRecordController.java 192 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/CrnTiltRecord.java 209 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/mapper/CrnTiltRecordMapper.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/CrnTiltRecordService.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/CrnTiltRecordServiceImpl.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/crnTiltRecord/crnTiltRecord.html 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/CrnTiltRecordController.java
New file
@@ -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);
            }
        }
    }
}
src/main/java/com/zy/asrs/entity/CrnTiltRecord.java
New file
@@ -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;
    /**
     * 记录类型:AUTO-自动记录,MANUAL-手动触发
     */
    @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 : "";
    }
}
src/main/java/com/zy/asrs/mapper/CrnTiltRecordMapper.java
New file
@@ -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> {
}
src/main/java/com/zy/asrs/service/CrnTiltRecordService.java
New file
@@ -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> {
}
src/main/java/com/zy/asrs/service/impl/CrnTiltRecordServiceImpl.java
New file
@@ -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 {
}
src/main/webapp/views/crnTiltRecord/crnTiltRecord.html
New file
@@ -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>