| src/main/java/com/zy/asrs/controller/CrnTiltRecordController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/asrs/entity/CrnTiltRecord.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/asrs/mapper/CrnTiltRecordMapper.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/asrs/service/CrnTiltRecordService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/asrs/service/impl/CrnTiltRecordServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/webapp/views/crnTiltRecord/crnTiltRecord.html | ●●●●● 补丁 | 查看 | 原始文档 | 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>