From cd36d21d0174fde20c4b0872f3f50eb148f6bfac Mon Sep 17 00:00:00 2001 From: lld <15027638633@163.com> Date: Sun, 1 Mar 2026 03:39:43 +0800 Subject: [PATCH] =?UTF-8?q?=E8=87=AA=E5=8A=A8=E5=8C=96=E6=9D=A1=E4=BB=B6?= =?UTF-8?q?=E4=BF=9D=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- agri-quartz/pom.xml | 4 + .../java/com/agri/quartz/task/TempTask.java | 28 ++ .../controller/SysAutoTermController.java | 137 ++++++++++ .../controller/SysRollerParamController.java | 104 ++++++++ .../com/agri/system/domain/SysAutoTerm.java | 145 +++++++++++ .../agri/system/domain/SysRollerParam.java | 151 +++++++++++ .../com/agri/system/domain/vo/AgriTermVo.java | 18 ++ .../agri/system/mapper/SysAutoTermMapper.java | 62 +++++ .../agri/system/mapper/SysDtuDataMapper.java | 5 +- .../system/mapper/SysRollerParamMapper.java | 62 +++++ .../system/service/ISysAutoTermService.java | 71 ++++++ .../system/service/ISysDtuDataService.java | 5 +- .../service/ISysRollerParamService.java | 61 +++++ .../service/impl/SysAutoTermServiceImpl.java | 241 ++++++++++++++++++ .../service/impl/SysDtuDataServiceImpl.java | 3 +- .../impl/SysRollerParamServiceImpl.java | 93 +++++++ .../system/util/RollerParamValidateUtil.java | 210 +++++++++++++++ .../mapper/control/SysAutoTermMapper.xml | 95 +++++++ .../mapper/control/SysRollerParamMapper.xml | 94 +++++++ 19 files changed, 1586 insertions(+), 3 deletions(-) create mode 100644 agri-quartz/src/main/java/com/agri/quartz/task/TempTask.java create mode 100644 agri-system/src/main/java/com/agri/system/controller/SysAutoTermController.java create mode 100644 agri-system/src/main/java/com/agri/system/controller/SysRollerParamController.java create mode 100644 agri-system/src/main/java/com/agri/system/domain/SysAutoTerm.java create mode 100644 agri-system/src/main/java/com/agri/system/domain/SysRollerParam.java create mode 100644 agri-system/src/main/java/com/agri/system/domain/vo/AgriTermVo.java create mode 100644 agri-system/src/main/java/com/agri/system/mapper/SysAutoTermMapper.java create mode 100644 agri-system/src/main/java/com/agri/system/mapper/SysRollerParamMapper.java create mode 100644 agri-system/src/main/java/com/agri/system/service/ISysAutoTermService.java create mode 100644 agri-system/src/main/java/com/agri/system/service/ISysRollerParamService.java create mode 100644 agri-system/src/main/java/com/agri/system/service/impl/SysAutoTermServiceImpl.java create mode 100644 agri-system/src/main/java/com/agri/system/service/impl/SysRollerParamServiceImpl.java create mode 100644 agri-system/src/main/java/com/agri/system/util/RollerParamValidateUtil.java create mode 100644 agri-system/src/main/resources/mapper/control/SysAutoTermMapper.xml create mode 100644 agri-system/src/main/resources/mapper/control/SysRollerParamMapper.xml diff --git a/agri-quartz/pom.xml b/agri-quartz/pom.xml index 6a48310..3433fda 100644 --- a/agri-quartz/pom.xml +++ b/agri-quartz/pom.xml @@ -34,6 +34,10 @@ com.agri agri-common + + com.agri + agri-system + diff --git a/agri-quartz/src/main/java/com/agri/quartz/task/TempTask.java b/agri-quartz/src/main/java/com/agri/quartz/task/TempTask.java new file mode 100644 index 0000000..7eecfbe --- /dev/null +++ b/agri-quartz/src/main/java/com/agri/quartz/task/TempTask.java @@ -0,0 +1,28 @@ +package com.agri.quartz.task; + +import com.agri.system.domain.SysDtuData; +import com.agri.system.service.ISysDtuDataService; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.Date; + +@Component("tempTask") +public class TempTask { + + @Autowired + private ISysDtuDataService dtuDataService; + + public void ryNoParams() + { + dtuDataService.lambdaUpdate() + .eq(SysDtuData::getImei, "864536071851206") + .orderByDesc(SysDtuData::getId) + .last("limit 1") + .set(SysDtuData::getTime, new Date()) + .set(SysDtuData::getCreateTime, new Date()) + .update(); + } + +} diff --git a/agri-system/src/main/java/com/agri/system/controller/SysAutoTermController.java b/agri-system/src/main/java/com/agri/system/controller/SysAutoTermController.java new file mode 100644 index 0000000..c0c9ed0 --- /dev/null +++ b/agri-system/src/main/java/com/agri/system/controller/SysAutoTermController.java @@ -0,0 +1,137 @@ +package com.agri.system.controller; + +import java.util.ArrayList; +import java.util.List; +import javax.servlet.http.HttpServletResponse; + +import com.agri.common.utils.StringUtils; +import com.agri.system.domain.vo.AgriTermVo; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.agri.common.annotation.Log; +import com.agri.common.core.controller.BaseController; +import com.agri.common.core.domain.AjaxResult; +import com.agri.common.enums.BusinessType; +import com.agri.system.domain.SysAutoTerm; +import com.agri.system.service.ISysAutoTermService; +import com.agri.common.utils.poi.ExcelUtil; +import com.agri.common.core.page.TableDataInfo; + +/** + * 卷膜运行条件Controller + * + * @author lld + * @date 2026-02-27 + */ +@RestController +@RequestMapping("/control/autoTerm") +public class SysAutoTermController extends BaseController +{ + @Autowired + private ISysAutoTermService sysAutoTermService; + + /** + * 查询卷膜运行条件列表 + */ + @PreAuthorize("@ss.hasPermi('control:autoTerm:list')") + @GetMapping("/list") + public TableDataInfo list(SysAutoTerm sysAutoTerm) + { + startPage(); + List list = sysAutoTermService.selectSysAutoTermList(sysAutoTerm); + return getDataTable(list); + } + + /** + * 导出卷膜运行条件列表 + */ + @PreAuthorize("@ss.hasPermi('control:autoTerm:export')") + @Log(title = "卷膜运行条件", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, SysAutoTerm sysAutoTerm) + { + List list = sysAutoTermService.selectSysAutoTermList(sysAutoTerm); + ExcelUtil util = new ExcelUtil(SysAutoTerm.class); + util.exportExcel(response, list, "卷膜运行条件数据"); + } + + /** + * 获取卷膜运行条件详细信息 + */ + @PreAuthorize("@ss.hasPermi('control:autoTerm:query')") + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") String id) + { + return success(sysAutoTermService.selectSysAutoTermById(id)); + } + + /** + * 新增卷膜运行条件 + */ + @PreAuthorize("@ss.hasPermi('control:autoTerm:add')") + @Log(title = "卷膜运行条件", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody SysAutoTerm sysAutoTerm) + { + return toAjax(sysAutoTermService.insertSysAutoTerm(sysAutoTerm)); + } + + /** + * 修改卷膜运行条件 + */ + @PreAuthorize("@ss.hasPermi('control:autoTerm:edit')") + @Log(title = "卷膜运行条件", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody SysAutoTerm sysAutoTerm) + { + return toAjax(sysAutoTermService.updateSysAutoTerm(sysAutoTerm)); + } + + /** + * 删除卷膜运行条件 + */ + @PreAuthorize("@ss.hasPermi('control:autoTerm:remove')") + @Log(title = "卷膜运行条件", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public AjaxResult remove(@PathVariable String[] ids) + { + return toAjax(sysAutoTermService.deleteSysAutoTermByIds(ids)); + } + + @PreAuthorize("@ss.hasPermi('control:autoTerm:saveAgriTerm')") + @Log(title = "保存自动化条件", businessType = BusinessType.INSERT) + @PutMapping("/saveAgriTerm") + public AjaxResult saveAgriTerm(@RequestBody List agriTerms) { + if (CollectionUtils.isEmpty(agriTerms)) { + return error("保存失败!自动化条件设置为空!"); + } else { + String validateTips = sysAutoTermService.validate(agriTerms); + if (StringUtils.isNotEmpty(validateTips)) { + return error(validateTips); + } + } + sysAutoTermService.saveAgriTerm(agriTerms); + return success(); + } + + /** + * 获取当前设备下所有条件 + * @param imei + * @return + */ + @PreAuthorize("@ss.hasPermi('control:autoTerm:query')") + @GetMapping("/getAgriTerm/{imei}") + public AjaxResult getAgriTerm(@PathVariable String imei) { + + return success(sysAutoTermService.getAgriTerm(imei)); + } +} diff --git a/agri-system/src/main/java/com/agri/system/controller/SysRollerParamController.java b/agri-system/src/main/java/com/agri/system/controller/SysRollerParamController.java new file mode 100644 index 0000000..f175123 --- /dev/null +++ b/agri-system/src/main/java/com/agri/system/controller/SysRollerParamController.java @@ -0,0 +1,104 @@ +package com.agri.system.controller; + +import java.util.List; +import javax.servlet.http.HttpServletResponse; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.agri.common.annotation.Log; +import com.agri.common.core.controller.BaseController; +import com.agri.common.core.domain.AjaxResult; +import com.agri.common.enums.BusinessType; +import com.agri.system.domain.SysRollerParam; +import com.agri.system.service.ISysRollerParamService; +import com.agri.common.utils.poi.ExcelUtil; +import com.agri.common.core.page.TableDataInfo; + +/** + * 卷膜参数配置Controller + * + * @author lld + * @date 2026-02-27 + */ +@RestController +@RequestMapping("/control/rollerParam") +public class SysRollerParamController extends BaseController +{ + @Autowired + private ISysRollerParamService sysRollerParamService; + + /** + * 查询卷膜参数配置列表 + */ + @PreAuthorize("@ss.hasPermi('control:rollerParam:list')") + @GetMapping("/list") + public TableDataInfo list(SysRollerParam sysRollerParam) + { + startPage(); + List list = sysRollerParamService.selectSysRollerParamList(sysRollerParam); + return getDataTable(list); + } + + /** + * 导出卷膜参数配置列表 + */ + @PreAuthorize("@ss.hasPermi('control:rollerParam:export')") + @Log(title = "卷膜参数配置", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, SysRollerParam sysRollerParam) + { + List list = sysRollerParamService.selectSysRollerParamList(sysRollerParam); + ExcelUtil util = new ExcelUtil(SysRollerParam.class); + util.exportExcel(response, list, "卷膜参数配置数据"); + } + + /** + * 获取卷膜参数配置详细信息 + */ + @PreAuthorize("@ss.hasPermi('control:rollerParam:query')") + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") String id) + { + return success(sysRollerParamService.selectSysRollerParamById(id)); + } + + /** + * 新增卷膜参数配置 + */ + @PreAuthorize("@ss.hasPermi('control:rollerParam:add')") + @Log(title = "卷膜参数配置", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody SysRollerParam sysRollerParam) + { + return toAjax(sysRollerParamService.insertSysRollerParam(sysRollerParam)); + } + + /** + * 修改卷膜参数配置 + */ + @PreAuthorize("@ss.hasPermi('control:rollerParam:edit')") + @Log(title = "卷膜参数配置", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody SysRollerParam sysRollerParam) + { + return toAjax(sysRollerParamService.updateSysRollerParam(sysRollerParam)); + } + + /** + * 删除卷膜参数配置 + */ + @PreAuthorize("@ss.hasPermi('control:rollerParam:remove')") + @Log(title = "卷膜参数配置", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public AjaxResult remove(@PathVariable String[] ids) + { + return toAjax(sysRollerParamService.deleteSysRollerParamByIds(ids)); + } +} diff --git a/agri-system/src/main/java/com/agri/system/domain/SysAutoTerm.java b/agri-system/src/main/java/com/agri/system/domain/SysAutoTerm.java new file mode 100644 index 0000000..ed05cca --- /dev/null +++ b/agri-system/src/main/java/com/agri/system/domain/SysAutoTerm.java @@ -0,0 +1,145 @@ +package com.agri.system.domain; + +import java.math.BigDecimal; +import java.util.Date; + +import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.baomidou.mybatisplus.annotation.TableName; +import com.agri.common.annotation.Excel; +import com.agri.common.core.domain.BaseEntity; + +/** + * 卷膜运行条件对象 sys_auto_term + * + * @author lld + * @date 2026-02-27 + */ +@TableName("sys_auto_term") +public class SysAutoTerm extends BaseEntity +{ + @TableField(exist = false) + private static final long serialVersionUID = 1L; + + /** 主键ID */ + @TableId(type = IdType.ASSIGN_ID) + @JsonSerialize(using = ToStringSerializer.class) + private String id; + + /** imei */ + @Excel(name = "imei") + private String imei; + + /** 卷膜标识 */ + @Excel(name = "卷膜标识") + private String roller; + + /** 运行时间始 */ + @JsonFormat(pattern = "HH:mm",timezone = "GMT+8") + @Excel(name = "运行时间始", width = 30) + private Date startTime; + + /** 运行时间止 */ + @JsonFormat(pattern = "HH:mm",timezone = "GMT+8") + @Excel(name = "运行时间止", width = 30) + private Date endTime; + + /** 适宜温度 */ + @Excel(name = "适宜温度") + private BigDecimal temp; + + /** 开启风口大小(米) */ + @Excel(name = "开启风口大小(米)") + private Long vent; + + public void setId(String id) + { + this.id = id; + } + + public String getId() + { + return id; + } + + public void setImei(String imei) + { + this.imei = imei; + } + + public String getImei() + { + return imei; + } + + public void setRoller(String roller) + { + this.roller = roller; + } + + public String getRoller() + { + return roller; + } + + public void setStartTime(Date startTime) + { + this.startTime = startTime; + } + + public Date getStartTime() + { + return startTime; + } + + public void setEndTime(Date endTime) + { + this.endTime = endTime; + } + + public Date getEndTime() + { + return endTime; + } + + public void setTemp(BigDecimal temp) + { + this.temp = temp; + } + + public BigDecimal getTemp() + { + return temp; + } + + public void setVent(Long vent) + { + this.vent = vent; + } + + public Long getVent() + { + return vent; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("imei", getImei()) + .append("roller", getRoller()) + .append("startTime", getStartTime()) + .append("endTime", getEndTime()) + .append("temp", getTemp()) + .append("vent", getVent()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .toString(); + } +} diff --git a/agri-system/src/main/java/com/agri/system/domain/SysRollerParam.java b/agri-system/src/main/java/com/agri/system/domain/SysRollerParam.java new file mode 100644 index 0000000..955d0d9 --- /dev/null +++ b/agri-system/src/main/java/com/agri/system/domain/SysRollerParam.java @@ -0,0 +1,151 @@ +package com.agri.system.domain; + +import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.baomidou.mybatisplus.annotation.TableName; +import com.agri.common.annotation.Excel; +import com.agri.common.core.domain.BaseEntity; + +/** + * 卷膜参数配置对象 sys_roller_param + * + * @author lld + * @date 2026-02-27 + */ +@TableName("sys_roller_param") +public class SysRollerParam extends BaseEntity +{ + @TableField(exist = false) + private static final long serialVersionUID = 1L; + + /** 主键ID */ + @TableId(type = IdType.ASSIGN_ID) + @JsonSerialize(using = ToStringSerializer.class) + private String id; + + /** imei */ + @Excel(name = "imei") + private String imei; + + /** 卷膜标识 */ + @Excel(name = "卷膜标识") + private String roller; + + /** 参考温度 */ + @Excel(name = "参考温度") + private String refTempCode; + /** 参考温度 */ + @TableField(exist = false) + @Excel(name = "参考温度") + private String refTemp; + + /** 预留风口长度(cm) */ + @Excel(name = "预留风口长度(cm)") + private Long reservedLen; + + /** 手动计算风口总长(cm) */ + @Excel(name = "手动计算风口总长(cm)") + private Long manualTotalLen; + + /** 自动计算风口总长(cm) */ + @Excel(name = "自动计算风口总长(cm)") + private Long autoTotalLen; + + public void setId(String id) + { + this.id = id; + } + + public String getId() + { + return id; + } + + public void setImei(String imei) + { + this.imei = imei; + } + + public String getImei() + { + return imei; + } + + public void setRoller(String roller) + { + this.roller = roller; + } + + public String getRoller() + { + return roller; + } + + public void setRefTempCode(String refTempCode) + { + this.refTempCode = refTempCode; + } + + public String getRefTempCode() + { + return refTempCode; + } + + public void setReservedLen(Long reservedLen) + { + this.reservedLen = reservedLen; + } + + public Long getReservedLen() + { + return reservedLen; + } + + public void setManualTotalLen(Long manualTotalLen) + { + this.manualTotalLen = manualTotalLen; + } + + public Long getManualTotalLen() + { + return manualTotalLen; + } + + public void setAutoTotalLen(Long autoTotalLen) + { + this.autoTotalLen = autoTotalLen; + } + + public Long getAutoTotalLen() + { + return autoTotalLen; + } + + public String getRefTemp() { + return refTemp; + } + + public void setRefTemp(String refTemp) { + this.refTemp = refTemp; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("imei", getImei()) + .append("roller", getRoller()) + .append("refTempCode", getRefTempCode()) + .append("reservedLen", getReservedLen()) + .append("manualTotalLen", getManualTotalLen()) + .append("autoTotalLen", getAutoTotalLen()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .toString(); + } +} diff --git a/agri-system/src/main/java/com/agri/system/domain/vo/AgriTermVo.java b/agri-system/src/main/java/com/agri/system/domain/vo/AgriTermVo.java new file mode 100644 index 0000000..47c08c0 --- /dev/null +++ b/agri-system/src/main/java/com/agri/system/domain/vo/AgriTermVo.java @@ -0,0 +1,18 @@ +package com.agri.system.domain.vo; + +import com.agri.system.domain.SysAutoTerm; +import com.agri.system.domain.SysRollerParam; +import lombok.Data; + +import java.util.List; + +/** + * 自动化条件vo + */ +@Data +public class AgriTermVo { + + private SysRollerParam config; + + private List terms; +} diff --git a/agri-system/src/main/java/com/agri/system/mapper/SysAutoTermMapper.java b/agri-system/src/main/java/com/agri/system/mapper/SysAutoTermMapper.java new file mode 100644 index 0000000..fdb418f --- /dev/null +++ b/agri-system/src/main/java/com/agri/system/mapper/SysAutoTermMapper.java @@ -0,0 +1,62 @@ +package com.agri.system.mapper; + +import java.util.List; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.agri.system.domain.SysAutoTerm; + +/** + * 卷膜运行条件Mapper接口 + * + * @author lld + * @date 2026-02-27 + */ +public interface SysAutoTermMapper extends BaseMapper +{ + /** + * 查询卷膜运行条件 + * + * @param id 卷膜运行条件主键 + * @return 卷膜运行条件 + */ + public SysAutoTerm selectSysAutoTermById(String id); + + /** + * 查询卷膜运行条件列表 + * + * @param sysAutoTerm 卷膜运行条件 + * @return 卷膜运行条件集合 + */ + public List selectSysAutoTermList(SysAutoTerm sysAutoTerm); + + /** + * 新增卷膜运行条件 + * + * @param sysAutoTerm 卷膜运行条件 + * @return 结果 + */ + public int insertSysAutoTerm(SysAutoTerm sysAutoTerm); + + /** + * 修改卷膜运行条件 + * + * @param sysAutoTerm 卷膜运行条件 + * @return 结果 + */ + public int updateSysAutoTerm(SysAutoTerm sysAutoTerm); + + /** + * 删除卷膜运行条件 + * + * @param id 卷膜运行条件主键 + * @return 结果 + */ + public int deleteSysAutoTermById(String id); + + /** + * 批量删除卷膜运行条件 + * + * @param ids 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteSysAutoTermByIds(String[] ids); +} diff --git a/agri-system/src/main/java/com/agri/system/mapper/SysDtuDataMapper.java b/agri-system/src/main/java/com/agri/system/mapper/SysDtuDataMapper.java index 752d31b..c3e8953 100644 --- a/agri-system/src/main/java/com/agri/system/mapper/SysDtuDataMapper.java +++ b/agri-system/src/main/java/com/agri/system/mapper/SysDtuDataMapper.java @@ -1,7 +1,10 @@ package com.agri.system.mapper; import java.util.List; + +import com.agri.system.domain.SysAgriAlarmRelation; import com.agri.system.domain.SysDtuData; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; /** * DTU温湿度上报数据Mapper接口 @@ -9,7 +12,7 @@ import com.agri.system.domain.SysDtuData; * @author agri * @date 2025-12-23 */ -public interface SysDtuDataMapper +public interface SysDtuDataMapper extends BaseMapper { /** * 查询DTU温湿度上报数据 diff --git a/agri-system/src/main/java/com/agri/system/mapper/SysRollerParamMapper.java b/agri-system/src/main/java/com/agri/system/mapper/SysRollerParamMapper.java new file mode 100644 index 0000000..a9d8bcb --- /dev/null +++ b/agri-system/src/main/java/com/agri/system/mapper/SysRollerParamMapper.java @@ -0,0 +1,62 @@ +package com.agri.system.mapper; + +import java.util.List; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.agri.system.domain.SysRollerParam; + +/** + * 卷膜参数配置Mapper接口 + * + * @author lld + * @date 2026-02-27 + */ +public interface SysRollerParamMapper extends BaseMapper +{ + /** + * 查询卷膜参数配置 + * + * @param id 卷膜参数配置主键 + * @return 卷膜参数配置 + */ + public SysRollerParam selectSysRollerParamById(String id); + + /** + * 查询卷膜参数配置列表 + * + * @param sysRollerParam 卷膜参数配置 + * @return 卷膜参数配置集合 + */ + public List selectSysRollerParamList(SysRollerParam sysRollerParam); + + /** + * 新增卷膜参数配置 + * + * @param sysRollerParam 卷膜参数配置 + * @return 结果 + */ + public int insertSysRollerParam(SysRollerParam sysRollerParam); + + /** + * 修改卷膜参数配置 + * + * @param sysRollerParam 卷膜参数配置 + * @return 结果 + */ + public int updateSysRollerParam(SysRollerParam sysRollerParam); + + /** + * 删除卷膜参数配置 + * + * @param id 卷膜参数配置主键 + * @return 结果 + */ + public int deleteSysRollerParamById(String id); + + /** + * 批量删除卷膜参数配置 + * + * @param ids 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteSysRollerParamByIds(String[] ids); +} diff --git a/agri-system/src/main/java/com/agri/system/service/ISysAutoTermService.java b/agri-system/src/main/java/com/agri/system/service/ISysAutoTermService.java new file mode 100644 index 0000000..b98ed2b --- /dev/null +++ b/agri-system/src/main/java/com/agri/system/service/ISysAutoTermService.java @@ -0,0 +1,71 @@ +package com.agri.system.service; + +import java.util.List; + +import com.agri.system.domain.vo.AgriTermVo; +import com.baomidou.mybatisplus.extension.service.IService; +import com.agri.system.domain.SysAutoTerm; + +/** + * 卷膜运行条件Service接口 + * + * @author lld + * @date 2026-02-27 + */ +public interface ISysAutoTermService extends IService { + /** + * 查询卷膜运行条件 + * + * @param id 卷膜运行条件主键 + * @return 卷膜运行条件 + */ + public SysAutoTerm selectSysAutoTermById(String id); + + /** + * 查询卷膜运行条件列表 + * + * @param sysAutoTerm 卷膜运行条件 + * @return 卷膜运行条件集合 + */ + public List selectSysAutoTermList(SysAutoTerm sysAutoTerm); + + /** + * 新增卷膜运行条件 + * + * @param sysAutoTerm 卷膜运行条件 + * @return 结果 + */ + public int insertSysAutoTerm(SysAutoTerm sysAutoTerm); + + /** + * 修改卷膜运行条件 + * + * @param sysAutoTerm 卷膜运行条件 + * @return 结果 + */ + public int updateSysAutoTerm(SysAutoTerm sysAutoTerm); + + /** + * 批量删除卷膜运行条件 + * + * @param ids 需要删除的卷膜运行条件主键集合 + * @return 结果 + */ + public int deleteSysAutoTermByIds(String[] ids); + + /** + * 删除卷膜运行条件信息 + * + * @param id 卷膜运行条件主键 + * @return 结果 + */ + public int deleteSysAutoTermById(String id); + + + + boolean saveAgriTerm(List agriTerms); + + String validate(List agriTerms); + + List getAgriTerm(String imei); +} diff --git a/agri-system/src/main/java/com/agri/system/service/ISysDtuDataService.java b/agri-system/src/main/java/com/agri/system/service/ISysDtuDataService.java index b8cbc8a..d7f21e6 100644 --- a/agri-system/src/main/java/com/agri/system/service/ISysDtuDataService.java +++ b/agri-system/src/main/java/com/agri/system/service/ISysDtuDataService.java @@ -1,7 +1,10 @@ package com.agri.system.service; import java.util.List; + +import com.agri.system.domain.SysAgriAlarmRelation; import com.agri.system.domain.SysDtuData; +import com.baomidou.mybatisplus.extension.service.IService; /** * DTU温湿度上报数据Service接口 @@ -9,7 +12,7 @@ import com.agri.system.domain.SysDtuData; * @author agri * @date 2025-12-23 */ -public interface ISysDtuDataService +public interface ISysDtuDataService extends IService { /** * 查询DTU温湿度上报数据 diff --git a/agri-system/src/main/java/com/agri/system/service/ISysRollerParamService.java b/agri-system/src/main/java/com/agri/system/service/ISysRollerParamService.java new file mode 100644 index 0000000..4ae9856 --- /dev/null +++ b/agri-system/src/main/java/com/agri/system/service/ISysRollerParamService.java @@ -0,0 +1,61 @@ +package com.agri.system.service; + +import java.util.List; +import com.baomidou.mybatisplus.extension.service.IService; +import com.agri.system.domain.SysRollerParam; + +/** + * 卷膜参数配置Service接口 + * + * @author lld + * @date 2026-02-27 + */ +public interface ISysRollerParamService extends IService { + /** + * 查询卷膜参数配置 + * + * @param id 卷膜参数配置主键 + * @return 卷膜参数配置 + */ + public SysRollerParam selectSysRollerParamById(String id); + + /** + * 查询卷膜参数配置列表 + * + * @param sysRollerParam 卷膜参数配置 + * @return 卷膜参数配置集合 + */ + public List selectSysRollerParamList(SysRollerParam sysRollerParam); + + /** + * 新增卷膜参数配置 + * + * @param sysRollerParam 卷膜参数配置 + * @return 结果 + */ + public int insertSysRollerParam(SysRollerParam sysRollerParam); + + /** + * 修改卷膜参数配置 + * + * @param sysRollerParam 卷膜参数配置 + * @return 结果 + */ + public int updateSysRollerParam(SysRollerParam sysRollerParam); + + /** + * 批量删除卷膜参数配置 + * + * @param ids 需要删除的卷膜参数配置主键集合 + * @return 结果 + */ + public int deleteSysRollerParamByIds(String[] ids); + + /** + * 删除卷膜参数配置信息 + * + * @param id 卷膜参数配置主键 + * @return 结果 + */ + public int deleteSysRollerParamById(String id); +} diff --git a/agri-system/src/main/java/com/agri/system/service/impl/SysAutoTermServiceImpl.java b/agri-system/src/main/java/com/agri/system/service/impl/SysAutoTermServiceImpl.java new file mode 100644 index 0000000..0ca5fa9 --- /dev/null +++ b/agri-system/src/main/java/com/agri/system/service/impl/SysAutoTermServiceImpl.java @@ -0,0 +1,241 @@ +package com.agri.system.service.impl; + +import java.math.BigDecimal; +import java.util.*; +import java.util.stream.Collectors; + +import com.agri.common.exception.ServiceException; +import com.agri.common.utils.DateUtils; +import com.agri.common.utils.StringUtils; +import com.agri.system.domain.SysRollerParam; +import com.agri.system.domain.vo.AgriTermVo; +import com.agri.system.service.ISysRollerParamService; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.agri.system.mapper.SysAutoTermMapper; +import com.agri.system.domain.SysAutoTerm; +import com.agri.system.service.ISysAutoTermService; +import org.springframework.transaction.annotation.Transactional; + +/** + * 卷膜运行条件Service业务层处理 + * + * @author lld + * @date 2026-02-27 + */ +@Service +public class SysAutoTermServiceImpl extends ServiceImpl implements ISysAutoTermService +{ + + @Autowired + private ISysRollerParamService rollerParamService; + + // 温度控制条件数量上限 + private static final int MAX_TERM_COUNT = 5; + + /** + * 查询卷膜运行条件 + * + * @param id 卷膜运行条件主键 + * @return 卷膜运行条件 + */ + @Override + public SysAutoTerm selectSysAutoTermById(String id) + { + return baseMapper.selectSysAutoTermById(id); + } + + /** + * 查询卷膜运行条件列表 + * + * @param sysAutoTerm 卷膜运行条件 + * @return 卷膜运行条件 + */ + @Override + public List selectSysAutoTermList(SysAutoTerm sysAutoTerm) + { + return baseMapper.selectSysAutoTermList(sysAutoTerm); + } + + /** + * 新增卷膜运行条件 + * + * @param sysAutoTerm 卷膜运行条件 + * @return 结果 + */ + @Override + public int insertSysAutoTerm(SysAutoTerm sysAutoTerm) + { + return baseMapper.insert(sysAutoTerm); + } + + /** + * 修改卷膜运行条件 + * + * @param sysAutoTerm 卷膜运行条件 + * @return 结果 + */ + @Override + public int updateSysAutoTerm(SysAutoTerm sysAutoTerm) + { + sysAutoTerm.setUpdateTime(DateUtils.getNowDate()); + return baseMapper.updateSysAutoTerm(sysAutoTerm); + } + + /** + * 批量删除卷膜运行条件 + * + * @param ids 需要删除的卷膜运行条件主键 + * @return 结果 + */ + @Override + public int deleteSysAutoTermByIds(String[] ids) + { + return baseMapper.deleteSysAutoTermByIds(ids); + } + + /** + * 删除卷膜运行条件信息 + * + * @param id 卷膜运行条件主键 + * @return 结果 + */ + @Override + public int deleteSysAutoTermById(String id) + { + return baseMapper.deleteSysAutoTermById(id); + } + + + @Transactional + @Override + public boolean saveAgriTerm(List agriTerms) { + + Map map = new HashMap<>(); + map.put("imei", agriTerms.get(0).getConfig().getImei()); + boolean isDelTermSuc = super.removeByMap(map); + boolean isDelParamSuc = rollerParamService.removeByMap(map); + List autoTerms = new ArrayList<>(); + List rollerParams = new ArrayList<>(); + for (AgriTermVo agriTerm : agriTerms) { + autoTerms.addAll(agriTerm.getTerms()); + rollerParams.add(agriTerm.getConfig()); + } + boolean isSaveTermSuccess = super.saveBatch(autoTerms); + boolean isSaveRollerSuccess = rollerParamService.saveBatch(rollerParams); + + return isSaveTermSuccess && isSaveRollerSuccess; + } + + @Override + public String validate(List agriTerms) { + if (CollectionUtils.isEmpty(agriTerms)) { + return "请设置自动化条件后重新保存重试!"; + } + + for (AgriTermVo vo : agriTerms) { + SysRollerParam config = vo.getConfig(); + if (config == null) { + return "参数设置失败,请下拉刷新后重试!"; + } + + String roller = config.getRoller(); + List terms = vo.getTerms(); + + // ===== 按顺序校验,一步一判断,清晰直观 ===== + if (StringUtils.isBlank(config.getRefTempCode())) { + return roller + "参考温度未设置,请点击相应页签左上角设置后重试!"; + } + + boolean hasLen = (config.getManualTotalLen() != null && config.getManualTotalLen() > 0) + || (config.getAutoTotalLen() != null && config.getAutoTotalLen() > 0); + if (!hasLen) { + return roller + "计算风口总长和手动设置风口长度至少填写一个!"; + } + + if (config.getReservedLen() == null || config.getReservedLen() <= 0) { + return roller + "预留风口长度未设置,请点击相应页签右上角设置后重试!"; + } + + if (CollectionUtils.isEmpty(terms)) { + return roller + "温度控制未设置,请设置后重新尝试!"; + } + + if (terms.size() > 5) { + return roller + "温度控制设置条数超过上限!请调整后重试"; + } + + for (SysAutoTerm term : terms) { + if (term.getStartTime() == null || term.getEndTime() == null) { + return roller + "温度控制运行时间填写不完整,请检查填写后重新尝试!"; + } + if (term.getStartTime().after(term.getEndTime())) { + return roller + "温度控制运行时间起不能大于止!"; + } + if (term.getTemp() == null || term.getTemp().compareTo(BigDecimal.ZERO) <= 0) { + return roller + "温度控制适宜温度填写不完整!"; + } + if (term.getVent() == null || term.getVent() <= 0) { + return roller + "温度控制风口开合大小填写不完整!"; + } + } + + if (checkTimeConflict(terms)) { + return roller + "温度控制运行时间存在冲突,请检查填写后重新尝试!"; + } + } + return ""; + } + + /** + * 精简版:时间冲突校验(逻辑不变,代码更紧凑) + */ + private static boolean checkTimeConflict(List terms) { + if (terms.size() <= 1) return false; + + for (int i = 0; i < terms.size(); i++) { + SysAutoTerm t1 = terms.get(i); + for (int j = i + 1; j < terms.size(); j++) { + SysAutoTerm t2 = terms.get(j); + // 一行判断时间重叠,精简代码 + if (!(t1.getEndTime().before(t2.getStartTime()) || t1.getStartTime().after(t2.getEndTime()))) { + return true; + } + } + } + return false; + } + + @Override + public List getAgriTerm(String imei) { + + List agriTerms = new ArrayList<>(); + List autoTerms = super.lambdaQuery() + .eq(SysAutoTerm::getImei, imei) + .orderByAsc(SysAutoTerm::getRoller) + .list(); + List rollerParams = rollerParamService.lambdaQuery() + .eq(SysRollerParam::getImei, imei) + .orderByAsc(SysRollerParam::getRoller) + .list(); + if (CollectionUtils.isEmpty(rollerParams)) { + return agriTerms; + } + Map> rollerMap + = autoTerms.stream().collect(Collectors.groupingBy(SysAutoTerm::getRoller)); + for (SysRollerParam rollerParam : rollerParams) { + rollerParam.setRefTemp(rollerParam.getRefTempCode().replace("20","温度")); + AgriTermVo agriTerm = new AgriTermVo(); + agriTerm.setConfig(rollerParam); + List terms = rollerMap.get(rollerParam.getRoller()); + if (CollectionUtils.isNotEmpty(terms)) { + agriTerm.setTerms(terms); + } + agriTerms.add(agriTerm); + } + return agriTerms; + } +} diff --git a/agri-system/src/main/java/com/agri/system/service/impl/SysDtuDataServiceImpl.java b/agri-system/src/main/java/com/agri/system/service/impl/SysDtuDataServiceImpl.java index ea19c57..3af6611 100644 --- a/agri-system/src/main/java/com/agri/system/service/impl/SysDtuDataServiceImpl.java +++ b/agri-system/src/main/java/com/agri/system/service/impl/SysDtuDataServiceImpl.java @@ -2,6 +2,7 @@ package com.agri.system.service.impl; import java.util.List; import com.agri.common.utils.DateUtils; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.agri.system.mapper.SysDtuDataMapper; @@ -15,7 +16,7 @@ import com.agri.system.service.ISysDtuDataService; * @date 2025-12-23 */ @Service -public class SysDtuDataServiceImpl implements ISysDtuDataService +public class SysDtuDataServiceImpl extends ServiceImpl implements ISysDtuDataService { @Autowired private SysDtuDataMapper sysDtuDataMapper; diff --git a/agri-system/src/main/java/com/agri/system/service/impl/SysRollerParamServiceImpl.java b/agri-system/src/main/java/com/agri/system/service/impl/SysRollerParamServiceImpl.java new file mode 100644 index 0000000..c163546 --- /dev/null +++ b/agri-system/src/main/java/com/agri/system/service/impl/SysRollerParamServiceImpl.java @@ -0,0 +1,93 @@ +package com.agri.system.service.impl; + +import java.util.List; +import com.agri.common.utils.DateUtils; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; +import com.agri.system.mapper.SysRollerParamMapper; +import com.agri.system.domain.SysRollerParam; +import com.agri.system.service.ISysRollerParamService; + +/** + * 卷膜参数配置Service业务层处理 + * + * @author lld + * @date 2026-02-27 + */ +@Service +public class SysRollerParamServiceImpl extends ServiceImpl implements ISysRollerParamService +{ + + /** + * 查询卷膜参数配置 + * + * @param id 卷膜参数配置主键 + * @return 卷膜参数配置 + */ + @Override + public SysRollerParam selectSysRollerParamById(String id) + { + return baseMapper.selectSysRollerParamById(id); + } + + /** + * 查询卷膜参数配置列表 + * + * @param sysRollerParam 卷膜参数配置 + * @return 卷膜参数配置 + */ + @Override + public List selectSysRollerParamList(SysRollerParam sysRollerParam) + { + return baseMapper.selectSysRollerParamList(sysRollerParam); + } + + /** + * 新增卷膜参数配置 + * + * @param sysRollerParam 卷膜参数配置 + * @return 结果 + */ + @Override + public int insertSysRollerParam(SysRollerParam sysRollerParam) + { + return baseMapper.insert(sysRollerParam); + } + + /** + * 修改卷膜参数配置 + * + * @param sysRollerParam 卷膜参数配置 + * @return 结果 + */ + @Override + public int updateSysRollerParam(SysRollerParam sysRollerParam) + { + sysRollerParam.setUpdateTime(DateUtils.getNowDate()); + return baseMapper.updateSysRollerParam(sysRollerParam); + } + + /** + * 批量删除卷膜参数配置 + * + * @param ids 需要删除的卷膜参数配置主键 + * @return 结果 + */ + @Override + public int deleteSysRollerParamByIds(String[] ids) + { + return baseMapper.deleteSysRollerParamByIds(ids); + } + + /** + * 删除卷膜参数配置信息 + * + * @param id 卷膜参数配置主键 + * @return 结果 + */ + @Override + public int deleteSysRollerParamById(String id) + { + return baseMapper.deleteSysRollerParamById(id); + } +} diff --git a/agri-system/src/main/java/com/agri/system/util/RollerParamValidateUtil.java b/agri-system/src/main/java/com/agri/system/util/RollerParamValidateUtil.java new file mode 100644 index 0000000..8892e50 --- /dev/null +++ b/agri-system/src/main/java/com/agri/system/util/RollerParamValidateUtil.java @@ -0,0 +1,210 @@ +package com.agri.system.util; + +import com.agri.common.exception.ServiceException; + +import com.agri.system.domain.SysAutoTerm; +import com.agri.system.domain.SysRollerParam; +import com.agri.system.domain.vo.AgriTermVo; +import org.apache.commons.lang3.StringUtils; +import org.springframework.util.CollectionUtils; + +import java.math.BigDecimal; +import java.util.*; + +/** + * 卷膜参数校验工具类(和前端 saveAutoTerm 1:1 对齐) + */ +public class RollerParamValidateUtil { + // 条件数量上限(和前端 5 保持一致) + private static final int MAX_TERM_COUNT = 5; + + /** + * 核心校验方法:完全复刻前端 saveAutoTerm 逻辑 + * @param agriTerms 对应前端 termList + * @param filmRollerList 对应前端 this.filmRollerList(卷膜名称列表:["卷膜1","卷膜2","卷膜3"]) + */ + public static void validate(List agriTerms, List filmRollerList) { + // 对应前端 termMap = this.termList + List termMap = agriTerms; + // 对应前端 rollerList = [] + List rollerList = new ArrayList<>(); + // 对应前端 showTips = null + String showTips = null; + + // 1. 定义校验规则数组(完全复刻前端 checkRules) + List checkRules = buildCheckRules(); + + // 2. 外层循环:遍历每个校验规则(对应前端 for (const [_, rule] of checkRules.entries())) + for (CheckRule rule : checkRules) { + // 内层循环:遍历每个卷膜(对应前端 for (const [index, item] of this.filmRollerList.entries())) + for (int index = 0; index < filmRollerList.size(); index++) { + String filmRoller = filmRollerList.get(index); // 卷膜名称:卷膜1/卷膜2/卷膜3 + // 对应前端 term = termMap[index]['terms'] + List term = termMap.get(index).getTerms(); + // 对应前端 rollerParam = termMap[index]['config'] + SysRollerParam rollerParam = termMap.get(index).getConfig(); + + // 对应前端 if (!rollerParam) 逻辑 + if (rollerParam == null) { + throw new ServiceException("参数设置失败,请下拉刷新后重试!"); + } + // 对应前端 else if (rule.validate(rollerParam, term)) 逻辑 + else if (rule.validate(rollerParam, term)) { + rollerList.add(filmRoller); + showTips = rule.getTip(); + } + } + + // 对应前端 if (rollerList.length>0) 逻辑:校验失败则抛异常 + if (!rollerList.isEmpty()) { + String errorMsg = String.format("【%s】%s", String.join(",", rollerList), showTips); + throw new ServiceException(errorMsg); + } + } + } + + /** + * 构建校验规则数组(完全复刻前端 checkRules) + */ + private static List buildCheckRules() { + List rules = new ArrayList<>(); + + // 规则1:请设置自动化条件后重新保存重试! + rules.add(new CheckRule("请设置自动化条件后重新保存重试!", (rollerParam, term) -> + // 前端:rollerParam.refTemp === '请选择' && !(term && term.length > 0) + // Java 对应:refTempCode 为空(对应前端 '请选择') + 条件为空 + StringUtils.isBlank(rollerParam.getRefTempCode()) && (CollectionUtils.isEmpty(term)) + )); + + // 规则2:参考温度未设置,请点击相应页签左上角设置后重试! + rules.add(new CheckRule("参考温度未设置,请点击相应页签左上角设置后重试!", (rollerParam, term) -> + // 前端:rollerParam.refTemp === '请选择' + StringUtils.isBlank(rollerParam.getRefTempCode()) + )); + + // 规则3:计算风口总长和手动设置风口长度至少填写一个! + rules.add(new CheckRule("计算风口总长和手动设置风口长度至少填写一个!请填写后重试!", (rollerParam, term) -> + // 前端:!((manualTotalLen>0) || (autoTotalLen>0)) + !((rollerParam.getManualTotalLen() != null && rollerParam.getManualTotalLen() > 0) + || (rollerParam.getAutoTotalLen() != null && rollerParam.getAutoTotalLen() > 0)) + )); + + // 规则4:预留风口长度未设置! + rules.add(new CheckRule("预留风口长度未设置,请点击相应页签右上角设置后重试!", (rollerParam, term) -> + // 前端:!(reservedLen && reservedLen > 0) + !(rollerParam.getReservedLen() != null && rollerParam.getReservedLen() > 0) + )); + + // 规则5:温度控制未设置! + rules.add(new CheckRule("温度控制未设置,请设置后重新尝试!", (rollerParam, term) -> + // 前端:!(term && term.length > 0) + CollectionUtils.isEmpty(term) + )); + + // 规则6:温度控制设置条数超过上限! + rules.add(new CheckRule("温度控制设置条数超过上限!请调整后重试", (rollerParam, term) -> + // 前端:term && term.length > 5 + !CollectionUtils.isEmpty(term) && term.size() > MAX_TERM_COUNT + )); + + // 规则7:温度控制运行时间填写不完整! + rules.add(new CheckRule("温度控制运行时间填写不完整,请检查填写后重新尝试!", (rollerParam, term) -> + // 前端:term.some(item => !(item.startTime && item.startTime!=='请选择时间' && item.endTime && item.endTime !== '请选择时间')) + !CollectionUtils.isEmpty(term) && term.stream().anyMatch(item -> + item.getStartTime() == null || item.getEndTime() == null + ) + )); + + // 规则8:温度控制运行时间起不能大于止! + rules.add(new CheckRule("温度控制运行时间起不能大于止,请检查填写后重新尝试!", (rollerParam, term) -> + // 前端:term.some(item => (item.startTime > item.endTime)) + !CollectionUtils.isEmpty(term) && term.stream().anyMatch(item -> + item.getStartTime() != null && item.getEndTime() != null + && item.getStartTime().after(item.getEndTime()) + ) + )); + + // 规则9:温度控制运行时间存在冲突! + rules.add(new CheckRule("温度控制运行时间存在冲突,请检查填写后重新尝试!", (rollerParam, term) -> + // 前端:调用 checkTimeConflict(term) 返回 isConflict + !CollectionUtils.isEmpty(term) && checkTimeConflict(term) + )); + + // 规则10:温度控制适宜温度填写不完整! + rules.add(new CheckRule("温度控制适宜温度填写不完整,请填写后重新尝试!", (rollerParam, term) -> + // 前端:term.some(item => !(item.temp && item.temp!=='选择')) + !CollectionUtils.isEmpty(term) && term.stream().anyMatch(item -> + item.getTemp() == null || item.getTemp().compareTo(BigDecimal.ZERO) <= 0 + ) + )); + + // 规则11:温度控制风口开合大小填写不完整! + rules.add(new CheckRule("温度控制风口开合大小填写不完整,请填写后重新尝试!", (rollerParam, term) -> + // 前端:term.some(item => !(item.vent && item.vent!=='选择')) + !CollectionUtils.isEmpty(term) && term.stream().anyMatch(item -> + item.getVent() == null || item.getVent() <= 0 + ) + )); + + return rules; + } + + /** + * 时间冲突判断(完全复刻前端 checkTimeConflict 逻辑) + */ + private static boolean checkTimeConflict(List term) { + if (CollectionUtils.isEmpty(term) || term.size() <= 1) { + return false; + } + + // 遍历判断时间区间是否冲突 + for (int i = 0; i < term.size(); i++) { + SysAutoTerm item1 = term.get(i); + for (int j = i + 1; j < term.size(); j++) { + SysAutoTerm item2 = term.get(j); + // 前端时间冲突逻辑:判断两个时间区间是否重叠 + Date start1 = item1.getStartTime(); + Date end1 = item1.getEndTime(); + Date start2 = item2.getStartTime(); + Date end2 = item2.getEndTime(); + + if (start1 == null || end1 == null || start2 == null || end2 == null) { + continue; + } + + // 核心冲突判断逻辑(和前端一致) + boolean isConflict = !(end1.before(start2) || start1.after(end2)); + if (isConflict) { + return true; + } + } + } + return false; + } + + /** + * 校验规则内部类(对应前端 checkRules 里的单个规则对象) + */ + @FunctionalInterface + interface ValidateFunction { + boolean validate(SysRollerParam rollerParam, List term); + } + + static class CheckRule { + private final String tip; // 对应前端 rule.tip + private final ValidateFunction validate; // 对应前端 rule.validate + + public CheckRule(String tip, ValidateFunction validate) { + this.tip = tip; + this.validate = validate; + } + + public String getTip() { + return tip; + } + + public boolean validate(SysRollerParam rollerParam, List term) { + return validate.validate(rollerParam, term); + } + } +} \ No newline at end of file diff --git a/agri-system/src/main/resources/mapper/control/SysAutoTermMapper.xml b/agri-system/src/main/resources/mapper/control/SysAutoTermMapper.xml new file mode 100644 index 0000000..c485231 --- /dev/null +++ b/agri-system/src/main/resources/mapper/control/SysAutoTermMapper.xml @@ -0,0 +1,95 @@ + + + + + + + + + + + + + + + + + + + + select id, imei, roller, start_time, end_time, temp, vent, create_by, create_time, update_by, update_time from sys_auto_term + + + + + + + + insert into sys_auto_term + + imei, + roller, + start_time, + end_time, + temp, + vent, + create_by, + create_time, + update_by, + update_time, + + + #{imei}, + #{roller}, + #{startTime}, + #{endTime}, + #{temp}, + #{vent}, + #{createBy}, + #{createTime}, + #{updateBy}, + #{updateTime}, + + + + + update sys_auto_term + + imei = #{imei}, + roller = #{roller}, + start_time = #{startTime}, + end_time = #{endTime}, + temp = #{temp}, + vent = #{vent}, + create_by = #{createBy}, + create_time = #{createTime}, + update_by = #{updateBy}, + update_time = #{updateTime}, + + where id = #{id} + + + + delete from sys_auto_term where id = #{id} + + + + delete from sys_auto_term where id in + + #{id} + + + \ No newline at end of file diff --git a/agri-system/src/main/resources/mapper/control/SysRollerParamMapper.xml b/agri-system/src/main/resources/mapper/control/SysRollerParamMapper.xml new file mode 100644 index 0000000..e4ee300 --- /dev/null +++ b/agri-system/src/main/resources/mapper/control/SysRollerParamMapper.xml @@ -0,0 +1,94 @@ + + + + + + + + + + + + + + + + + + + + select id, imei, roller, ref_temp_code, reserved_len, manual_total_len, auto_total_len, create_by, create_time, update_by, update_time from sys_roller_param + + + + + + + + insert into sys_roller_param + + imei, + roller, + ref_temp_code, + reserved_len, + manual_total_len, + auto_total_len, + create_by, + create_time, + update_by, + update_time, + + + #{imei}, + #{roller}, + #{refTempCode}, + #{reservedLen}, + #{manualTotalLen}, + #{autoTotalLen}, + #{createBy}, + #{createTime}, + #{updateBy}, + #{updateTime}, + + + + + update sys_roller_param + + imei = #{imei}, + roller = #{roller}, + ref_temp_code = #{refTempCode}, + reserved_len = #{reservedLen}, + manual_total_len = #{manualTotalLen}, + auto_total_len = #{autoTotalLen}, + create_by = #{createBy}, + create_time = #{createTime}, + update_by = #{updateBy}, + update_time = #{updateTime}, + + where id = #{id} + + + + delete from sys_roller_param where id = #{id} + + + + delete from sys_roller_param where id in + + #{id} + + + \ No newline at end of file