diff --git a/intc-admin/pom.xml b/intc-admin/pom.xml index 8f83bc0..3e99ddd 100644 --- a/intc-admin/pom.xml +++ b/intc-admin/pom.xml @@ -3,7 +3,7 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - intc-vue-plus + intc-vue-ultra com.intc ${revision} diff --git a/intc-admin/src/main/java/com/intc/IntcApplication.java b/intc-admin/src/main/java/com/intc/IntcUltraApplication.java similarity index 90% rename from intc-admin/src/main/java/com/intc/IntcApplication.java rename to intc-admin/src/main/java/com/intc/IntcUltraApplication.java index 29f43cf..2cfd5bd 100644 --- a/intc-admin/src/main/java/com/intc/IntcApplication.java +++ b/intc-admin/src/main/java/com/intc/IntcUltraApplication.java @@ -11,10 +11,10 @@ import org.springframework.boot.context.metrics.buffering.BufferingApplicationSt */ @SpringBootApplication -public class IntcApplication { +public class IntcUltraApplication { public static void main(String[] args) { - SpringApplication application = new SpringApplication(IntcApplication.class); + SpringApplication application = new SpringApplication(IntcUltraApplication.class); application.setApplicationStartup(new BufferingApplicationStartup(2048)); application.run(args); System.out.println("(♥◠‿◠)ノ゙ Intc-Vue-Plus启动成功 ლ(´ڡ`ლ)゙"); diff --git a/intc-admin/src/main/java/com/intc/IntcServletInitializer.java b/intc-admin/src/main/java/com/intc/IntcUltraServletInitializer.java similarity index 70% rename from intc-admin/src/main/java/com/intc/IntcServletInitializer.java rename to intc-admin/src/main/java/com/intc/IntcUltraServletInitializer.java index e13e60d..2432f94 100644 --- a/intc-admin/src/main/java/com/intc/IntcServletInitializer.java +++ b/intc-admin/src/main/java/com/intc/IntcUltraServletInitializer.java @@ -8,11 +8,11 @@ import org.springframework.boot.web.servlet.support.SpringBootServletInitializer * * @author Lion Li */ -public class IntcServletInitializer extends SpringBootServletInitializer { +public class IntcUltraServletInitializer extends SpringBootServletInitializer { @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { - return application.sources(IntcApplication.class); + return application.sources(IntcUltraApplication.class); } } diff --git a/intc-admin/src/main/resources/application-dev.yml b/intc-admin/src/main/resources/application-dev.yml index 5a0531d..4620112 100644 --- a/intc-admin/src/main/resources/application-dev.yml +++ b/intc-admin/src/main/resources/application-dev.yml @@ -100,11 +100,11 @@ spring: spring.data: redis: # 地址 - host: 117.72.197.29 + host: 154.8.147.51 # 端口,默认为6379 port: 6379 # 数据库索引 - database: 6 + database: 1 # redis 密码必须配置 password: intc@123987 # 连接超时时间 diff --git a/intc-admin/src/test/java/com/intc/test/AssertUnitTest.java b/intc-admin/src/test/java/com/intc/test/AssertUnitTest.java deleted file mode 100644 index d207764..0000000 --- a/intc-admin/src/test/java/com/intc/test/AssertUnitTest.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.intc.test; - -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -/** - * 断言单元测试案例 - * - * @author Lion Li - */ -@DisplayName("断言单元测试案例") -public class AssertUnitTest { - - @DisplayName("测试 assertEquals 方法") - @Test - public void testAssertEquals() { - Assertions.assertEquals("666", new String("666")); - Assertions.assertNotEquals("666", new String("666")); - } - - @DisplayName("测试 assertSame 方法") - @Test - public void testAssertSame() { - Object obj = new Object(); - Object obj1 = obj; - Assertions.assertSame(obj, obj1); - Assertions.assertNotSame(obj, obj1); - } - - @DisplayName("测试 assertTrue 方法") - @Test - public void testAssertTrue() { - Assertions.assertTrue(true); - Assertions.assertFalse(true); - } - - @DisplayName("测试 assertNull 方法") - @Test - public void testAssertNull() { - Assertions.assertNull(null); - Assertions.assertNotNull(null); - } - -} diff --git a/intc-admin/src/test/java/com/intc/test/DemoUnitTest.java b/intc-admin/src/test/java/com/intc/test/DemoUnitTest.java deleted file mode 100644 index 2d351e5..0000000 --- a/intc-admin/src/test/java/com/intc/test/DemoUnitTest.java +++ /dev/null @@ -1,70 +0,0 @@ -package com.intc.test; - -import com.intc.common.web.config.properties.CaptchaProperties; -import org.junit.jupiter.api.*; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; - -import java.util.concurrent.TimeUnit; - -/** - * 单元测试案例 - * - * @author Lion Li - */ -@SpringBootTest // 此注解只能在 springboot 主包下使用 需包含 main 方法与 yml 配置文件 -@DisplayName("单元测试案例") -public class DemoUnitTest { - - @Autowired - private CaptchaProperties captchaProperties; - - @DisplayName("测试 @SpringBootTest @Test @DisplayName 注解") - @Test - public void testTest() { - System.out.println(captchaProperties); - } - - @Disabled - @DisplayName("测试 @Disabled 注解") - @Test - public void testDisabled() { - System.out.println(captchaProperties); - } - - @Timeout(value = 2L, unit = TimeUnit.SECONDS) - @DisplayName("测试 @Timeout 注解") - @Test - public void testTimeout() throws InterruptedException { - Thread.sleep(3000); - System.out.println(captchaProperties); - } - - - @DisplayName("测试 @RepeatedTest 注解") - @RepeatedTest(3) - public void testRepeatedTest() { - System.out.println(666); - } - - @BeforeAll - public static void testBeforeAll() { - System.out.println("@BeforeAll =================="); - } - - @BeforeEach - public void testBeforeEach() { - System.out.println("@BeforeEach =================="); - } - - @AfterEach - public void testAfterEach() { - System.out.println("@AfterEach =================="); - } - - @AfterAll - public static void testAfterAll() { - System.out.println("@AfterAll =================="); - } - -} diff --git a/intc-admin/src/test/java/com/intc/test/ParamUnitTest.java b/intc-admin/src/test/java/com/intc/test/ParamUnitTest.java deleted file mode 100644 index 80dfe6f..0000000 --- a/intc-admin/src/test/java/com/intc/test/ParamUnitTest.java +++ /dev/null @@ -1,72 +0,0 @@ -package com.intc.test; - -import com.intc.common.core.enums.UserType; -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.EnumSource; -import org.junit.jupiter.params.provider.MethodSource; -import org.junit.jupiter.params.provider.NullSource; -import org.junit.jupiter.params.provider.ValueSource; - -import java.util.ArrayList; -import java.util.List; -import java.util.stream.Stream; - -/** - * 带参数单元测试案例 - * - * @author Lion Li - */ -@DisplayName("带参数单元测试案例") -public class ParamUnitTest { - - @DisplayName("测试 @ValueSource 注解") - @ParameterizedTest - @ValueSource(strings = {"t1", "t2", "t3"}) - public void testValueSource(String str) { - System.out.println(str); - } - - @DisplayName("测试 @NullSource 注解") - @ParameterizedTest - @NullSource - public void testNullSource(String str) { - System.out.println(str); - } - - @DisplayName("测试 @EnumSource 注解") - @ParameterizedTest - @EnumSource(UserType.class) - public void testEnumSource(UserType type) { - System.out.println(type.getUserType()); - } - - @DisplayName("测试 @MethodSource 注解") - @ParameterizedTest - @MethodSource("getParam") - public void testMethodSource(String str) { - System.out.println(str); - } - - public static Stream getParam() { - List list = new ArrayList<>(); - list.add("t1"); - list.add("t2"); - list.add("t3"); - return list.stream(); - } - - @BeforeEach - public void testBeforeEach() { - System.out.println("@BeforeEach =================="); - } - - @AfterEach - public void testAfterEach() { - System.out.println("@AfterEach =================="); - } - - -} diff --git a/intc-admin/src/test/java/com/intc/test/TagUnitTest.java b/intc-admin/src/test/java/com/intc/test/TagUnitTest.java deleted file mode 100644 index 4acf84d..0000000 --- a/intc-admin/src/test/java/com/intc/test/TagUnitTest.java +++ /dev/null @@ -1,54 +0,0 @@ -package com.intc.test; - -import org.junit.jupiter.api.*; -import org.springframework.boot.test.context.SpringBootTest; - -/** - * 标签单元测试案例 - * - * @author Lion Li - */ -@SpringBootTest -@DisplayName("标签单元测试案例") -public class TagUnitTest { - - @Tag("dev") - @DisplayName("测试 @Tag dev") - @Test - public void testTagDev() { - System.out.println("dev"); - } - - @Tag("prod") - @DisplayName("测试 @Tag prod") - @Test - public void testTagProd() { - System.out.println("prod"); - } - - @Tag("local") - @DisplayName("测试 @Tag local") - @Test - public void testTagLocal() { - System.out.println("local"); - } - - @Tag("exclude") - @DisplayName("测试 @Tag exclude") - @Test - public void testTagExclude() { - System.out.println("exclude"); - } - - @BeforeEach - public void testBeforeEach() { - System.out.println("@BeforeEach =================="); - } - - @AfterEach - public void testAfterEach() { - System.out.println("@AfterEach =================="); - } - - -} diff --git a/intc-common/pom.xml b/intc-common/pom.xml index d34ccac..2849f36 100644 --- a/intc-common/pom.xml +++ b/intc-common/pom.xml @@ -3,7 +3,7 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - intc-vue-plus + intc-vue-ultra com.intc ${revision} diff --git a/intc-extend/pom.xml b/intc-extend/pom.xml index 691e274..5b8e4a6 100644 --- a/intc-extend/pom.xml +++ b/intc-extend/pom.xml @@ -3,7 +3,7 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - intc-vue-plus + intc-vue-ultra com.intc ${revision} diff --git a/intc-modules/intc-fishery/src/main/java/com/intc/fishery/controller/LinkedCtrlController.java b/intc-modules/intc-fishery/src/main/java/com/intc/fishery/controller/LinkedCtrlController.java new file mode 100644 index 0000000..33990f6 --- /dev/null +++ b/intc-modules/intc-fishery/src/main/java/com/intc/fishery/controller/LinkedCtrlController.java @@ -0,0 +1,105 @@ +package com.intc.fishery.controller; + +import java.util.List; + +import com.intc.common.excel.utils.ExcelUtil; +import lombok.RequiredArgsConstructor; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.constraints.*; +import cn.dev33.satoken.annotation.SaCheckPermission; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import com.intc.common.idempotent.annotation.RepeatSubmit; +import com.intc.common.log.annotation.Log; +import com.intc.common.web.core.BaseController; +import com.intc.common.mybatis.core.page.PageQuery; +import com.intc.common.core.domain.R; +import com.intc.common.core.validate.AddGroup; +import com.intc.common.core.validate.EditGroup; +import com.intc.common.log.enums.BusinessType; +import com.intc.fishery.domain.vo.LinkedCtrlVo; +import com.intc.fishery.domain.bo.LinkedCtrlBo; +import com.intc.fishery.service.ILinkedCtrlService; +import com.intc.common.mybatis.core.page.TableDataInfo; + +/** + * 溶解氧联动控制 + * + * @author intc + * @date 2025-10-23 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/fishery/linkedCtrl") +public class LinkedCtrlController extends BaseController { + + private final ILinkedCtrlService linkedCtrlService; + + /** + * 查询溶解氧联动控制列表 + */ + @SaCheckPermission("fishery:linkedCtrl:list") + @GetMapping("/list") + public TableDataInfo list(LinkedCtrlBo bo, PageQuery pageQuery) { + return linkedCtrlService.queryPageList(bo, pageQuery); + } + + /** + * 导出溶解氧联动控制列表 + */ + @SaCheckPermission("fishery:linkedCtrl:export") + @Log(title = "溶解氧联动控制", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(LinkedCtrlBo bo, HttpServletResponse response) { + List list = linkedCtrlService.queryList(bo); + ExcelUtil.exportExcel(list, "溶解氧联动控制", LinkedCtrlVo.class, response); + } + + /** + * 获取溶解氧联动控制详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("fishery:linkedCtrl:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(linkedCtrlService.queryById(id)); + } + + /** + * 新增溶解氧联动控制 + */ + @SaCheckPermission("fishery:linkedCtrl:add") + @Log(title = "溶解氧联动控制", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody LinkedCtrlBo bo) { + return toAjax(linkedCtrlService.insertByBo(bo)); + } + + /** + * 修改溶解氧联动控制 + */ + @SaCheckPermission("fishery:linkedCtrl:edit") + @Log(title = "溶解氧联动控制", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody LinkedCtrlBo bo) { + return toAjax(linkedCtrlService.updateByBo(bo)); + } + + /** + * 删除溶解氧联动控制 + * + * @param ids 主键串 + */ + @SaCheckPermission("fishery:linkedCtrl:remove") + @Log(title = "溶解氧联动控制", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(linkedCtrlService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/intc-modules/intc-fishery/src/main/java/com/intc/fishery/controller/TimingCtrlController.java b/intc-modules/intc-fishery/src/main/java/com/intc/fishery/controller/TimingCtrlController.java new file mode 100644 index 0000000..bd05380 --- /dev/null +++ b/intc-modules/intc-fishery/src/main/java/com/intc/fishery/controller/TimingCtrlController.java @@ -0,0 +1,104 @@ +package com.intc.fishery.controller; + +import java.util.List; +import com.intc.common.excel.utils.ExcelUtil; +import lombok.RequiredArgsConstructor; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.constraints.*; +import cn.dev33.satoken.annotation.SaCheckPermission; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import com.intc.common.idempotent.annotation.RepeatSubmit; +import com.intc.common.log.annotation.Log; +import com.intc.common.web.core.BaseController; +import com.intc.common.mybatis.core.page.PageQuery; +import com.intc.common.core.domain.R; +import com.intc.common.core.validate.AddGroup; +import com.intc.common.core.validate.EditGroup; +import com.intc.common.log.enums.BusinessType; +import com.intc.fishery.domain.vo.TimingCtrlVo; +import com.intc.fishery.domain.bo.TimingCtrlBo; +import com.intc.fishery.service.ITimingCtrlService; +import com.intc.common.mybatis.core.page.TableDataInfo; + +/** + * 开关定时控制 + * + * @author intc + * @date 2025-10-23 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/fishery/timingCtrl") +public class TimingCtrlController extends BaseController { + + private final ITimingCtrlService timingCtrlService; + + /** + * 查询开关定时控制列表 + */ + @SaCheckPermission("fishery:timingCtrl:list") + @GetMapping("/list") + public TableDataInfo list(TimingCtrlBo bo, PageQuery pageQuery) { + return timingCtrlService.queryPageList(bo, pageQuery); + } + + /** + * 导出开关定时控制列表 + */ + @SaCheckPermission("fishery:timingCtrl:export") + @Log(title = "开关定时控制", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(TimingCtrlBo bo, HttpServletResponse response) { + List list = timingCtrlService.queryList(bo); + ExcelUtil.exportExcel(list, "开关定时控制", TimingCtrlVo.class, response); + } + + /** + * 获取开关定时控制详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("fishery:timingCtrl:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(timingCtrlService.queryById(id)); + } + + /** + * 新增开关定时控制 + */ + @SaCheckPermission("fishery:timingCtrl:add") + @Log(title = "开关定时控制", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody TimingCtrlBo bo) { + return toAjax(timingCtrlService.insertByBo(bo)); + } + + /** + * 修改开关定时控制 + */ + @SaCheckPermission("fishery:timingCtrl:edit") + @Log(title = "开关定时控制", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody TimingCtrlBo bo) { + return toAjax(timingCtrlService.updateByBo(bo)); + } + + /** + * 删除开关定时控制 + * + * @param ids 主键串 + */ + @SaCheckPermission("fishery:timingCtrl:remove") + @Log(title = "开关定时控制", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(timingCtrlService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/intc-modules/intc-fishery/src/main/java/com/intc/fishery/domain/LinkedCtrl.java b/intc-modules/intc-fishery/src/main/java/com/intc/fishery/domain/LinkedCtrl.java new file mode 100644 index 0000000..2de03cf --- /dev/null +++ b/intc-modules/intc-fishery/src/main/java/com/intc/fishery/domain/LinkedCtrl.java @@ -0,0 +1,70 @@ +package com.intc.fishery.domain; + +import com.baomidou.mybatisplus.annotation.*; +import com.intc.common.tenant.core.TenantEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; +import java.util.Date; + +/** + * 溶解氧联动控制对象 aqu_linked_ctrl + * + * @author intc + * @date 2025-10-23 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("aqu_linked_ctrl") +public class LinkedCtrl extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + @TableId(value = "id") + private Long id; + + /** + * 设备id + */ + private Long deviceId; + + /** + * 溶解氧上限开关 + */ + private Integer oxyUpperOpen; + + /** + * 溶解氧上限值 + */ + private Double oxyUpperValue; + + /** + * 溶解氧下限开关 + */ + private Integer oxyLowerOpen; + + /** + * 溶解氧下限值 + */ + private Double oxyLowerValue; + + /** + * 是否触发上限关闭操作 + */ + private Integer isOxyUpperTrigger; + + /** + * 备注 + */ + private String remark; + + private Date createTime; + + private Date updateTime; + +} diff --git a/intc-modules/intc-fishery/src/main/java/com/intc/fishery/domain/TimingCtrl.java b/intc-modules/intc-fishery/src/main/java/com/intc/fishery/domain/TimingCtrl.java new file mode 100644 index 0000000..36fe937 --- /dev/null +++ b/intc-modules/intc-fishery/src/main/java/com/intc/fishery/domain/TimingCtrl.java @@ -0,0 +1,69 @@ +package com.intc.fishery.domain; + +import com.baomidou.mybatisplus.annotation.*; +import com.intc.common.tenant.core.TenantEntity; +import com.intc.common.translation.annotation.Translation; +import com.intc.common.translation.constant.TransConstant; +import lombok.Data; +import lombok.EqualsAndHashCode; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; + +import java.io.Serial; + +/** + * 开关定时控制对象 aqu_timing_ctrl + * + * @author intc + * @date 2025-10-23 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("aqu_timing_ctrl") +public class TimingCtrl extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + @TableId(value = "id") + private Long id; + + /** + * 开关id + */ + private Long switchId; + + /** + * 开启时间 + */ + private Date openTime; + + /** + * 关闭时间 + */ + private Date closeTime; + + /** + * 循环类型 + */ + private Long loopType; + + /** + * 是否启用 + */ + private Long isOpen; + + /** + * 备注 + */ + private String remark; + + private Date createTime; + + private Date updateTime; + + +} diff --git a/intc-modules/intc-fishery/src/main/java/com/intc/fishery/domain/bo/LinkedCtrlBo.java b/intc-modules/intc-fishery/src/main/java/com/intc/fishery/domain/bo/LinkedCtrlBo.java new file mode 100644 index 0000000..bc0fb64 --- /dev/null +++ b/intc-modules/intc-fishery/src/main/java/com/intc/fishery/domain/bo/LinkedCtrlBo.java @@ -0,0 +1,70 @@ +package com.intc.fishery.domain.bo; +import com.intc.common.core.validate.AddGroup; +import com.intc.common.core.validate.EditGroup; +import com.intc.fishery.domain.LinkedCtrl; +import com.intc.common.mybatis.core.domain.BaseEntity; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import lombok.EqualsAndHashCode; +import jakarta.validation.constraints.*; + +/** + * 溶解氧联动控制业务对象 aqu_linked_ctrl + * + * @author intc + * @date 2025-10-23 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = LinkedCtrl.class, reverseConvertGenerate = false) +public class LinkedCtrlBo extends BaseEntity { + + /** + * 主键id + */ + @NotNull(message = "主键id不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 设备id + */ + @NotNull(message = "设备id不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long deviceId; + + /** + * 溶解氧上限开关 + */ + @NotNull(message = "溶解氧上限开关不能为空", groups = { AddGroup.class, EditGroup.class }) + private Integer oxyUpperOpen; + + /** + * 溶解氧上限值 + */ + @NotNull(message = "溶解氧上限值不能为空", groups = { AddGroup.class, EditGroup.class }) + private Double oxyUpperValue; + + /** + * 溶解氧下限开关 + */ + @NotNull(message = "溶解氧下限开关不能为空", groups = { AddGroup.class, EditGroup.class }) + private Integer oxyLowerOpen; + + /** + * 溶解氧下限值 + */ + @NotNull(message = "溶解氧下限值不能为空", groups = { AddGroup.class, EditGroup.class }) + private Double oxyLowerValue; + + /** + * 是否触发上限关闭操作 + */ + @NotNull(message = "是否触发上限关闭操作不能为空", groups = { AddGroup.class, EditGroup.class }) + private Integer isOxyUpperTrigger; + + /** + * 备注 + */ + private String remark; + + +} diff --git a/intc-modules/intc-fishery/src/main/java/com/intc/fishery/domain/bo/TimingCtrlBo.java b/intc-modules/intc-fishery/src/main/java/com/intc/fishery/domain/bo/TimingCtrlBo.java new file mode 100644 index 0000000..d9f475c --- /dev/null +++ b/intc-modules/intc-fishery/src/main/java/com/intc/fishery/domain/bo/TimingCtrlBo.java @@ -0,0 +1,66 @@ +package com.intc.fishery.domain.bo; +import com.intc.common.core.validate.AddGroup; +import com.intc.common.core.validate.EditGroup; +import com.intc.fishery.domain.TimingCtrl; +import com.intc.common.mybatis.core.domain.BaseEntity; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import lombok.EqualsAndHashCode; +import jakarta.validation.constraints.*; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; + +/** + * 开关定时控制业务对象 aqu_timing_ctrl + * + * @author intc + * @date 2025-10-23 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = TimingCtrl.class, reverseConvertGenerate = false) +public class TimingCtrlBo extends BaseEntity { + + /** + * 主键id + */ + @NotNull(message = "主键id不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 开关id + */ + @NotNull(message = "开关id不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long switchId; + + /** + * 开启时间 + */ + @NotNull(message = "开启时间不能为空", groups = { AddGroup.class, EditGroup.class }) + private Date openTime; + + /** + * 关闭时间 + */ + @NotNull(message = "关闭时间不能为空", groups = { AddGroup.class, EditGroup.class }) + private Date closeTime; + + /** + * 循环类型 + */ + @NotNull(message = "循环类型不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long loopType; + + /** + * 是否启用 + */ + @NotNull(message = "是否启用不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long isOpen; + + /** + * 备注 + */ + private String remark; + + +} diff --git a/intc-modules/intc-fishery/src/main/java/com/intc/fishery/domain/vo/DeviceSwitchVo.java b/intc-modules/intc-fishery/src/main/java/com/intc/fishery/domain/vo/DeviceSwitchVo.java index ac406ac..8e7b193 100644 --- a/intc-modules/intc-fishery/src/main/java/com/intc/fishery/domain/vo/DeviceSwitchVo.java +++ b/intc-modules/intc-fishery/src/main/java/com/intc/fishery/domain/vo/DeviceSwitchVo.java @@ -1,18 +1,18 @@ package com.intc.fishery.domain.vo; +import java.io.Serial; +import java.io.Serializable; import java.util.Date; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.intc.common.json.handler.DoubleSerializer; import com.intc.fishery.domain.DeviceSwitch; + import cn.idev.excel.annotation.ExcelIgnoreUnannotated; import cn.idev.excel.annotation.ExcelProperty; import io.github.linpeilie.annotations.AutoMapper; import lombok.Data; -import java.io.Serial; -import java.io.Serializable; - /** * 测控一体机开关视图对象 aqu_device_switch @@ -131,6 +131,24 @@ public class DeviceSwitchVo implements Serializable { @ExcelProperty(value = "是否联动控制") private Integer isLinkedCtrl; + /** + * 用户名 + */ + @ExcelProperty(value = "用户名") + private String userName; + + /** + * 用户手机号 + */ + @ExcelProperty(value = "用户手机号") + private String mobilePhone; + + /** + * 定时控制数量 + */ + @ExcelProperty(value = "定时控制数量") + private Integer timingCtrlCount; + private Date createTime; diff --git a/intc-modules/intc-fishery/src/main/java/com/intc/fishery/domain/vo/LinkedCtrlVo.java b/intc-modules/intc-fishery/src/main/java/com/intc/fishery/domain/vo/LinkedCtrlVo.java new file mode 100644 index 0000000..bc04cc4 --- /dev/null +++ b/intc-modules/intc-fishery/src/main/java/com/intc/fishery/domain/vo/LinkedCtrlVo.java @@ -0,0 +1,113 @@ +package com.intc.fishery.domain.vo; + +import java.io.Serial; +import java.io.Serializable; + +import com.intc.common.excel.annotation.ExcelDictFormat; +import com.intc.common.excel.convert.ExcelDictConvert; +import com.intc.fishery.domain.LinkedCtrl; + +import cn.idev.excel.annotation.ExcelIgnoreUnannotated; +import cn.idev.excel.annotation.ExcelProperty; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; + + + +/** + * 溶解氧联动控制视图对象 aqu_linked_ctrl + * + * @author intc + * @date 2025-10-23 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = LinkedCtrl.class) +public class LinkedCtrlVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + @ExcelProperty(value = "主键id") + private Long id; + + /** + * 设备id + */ + @ExcelProperty(value = "设备id") + private Long deviceId; + + /** + * 溶解氧上限开关 + */ + @ExcelProperty(value = "溶解氧上限开关", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "open_close") + private Integer oxyUpperOpen; + + /** + * 溶解氧上限值 + */ + @ExcelProperty(value = "溶解氧上限值") + private Double oxyUpperValue; + + /** + * 溶解氧下限开关 + */ + @ExcelProperty(value = "溶解氧下限开关", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "open_close") + private Integer oxyLowerOpen; + + /** + * 溶解氧下限值 + */ + @ExcelProperty(value = "溶解氧下限值") + private Double oxyLowerValue; + + /** + * 是否触发上限关闭操作 + */ + @ExcelProperty(value = "是否触发上限关闭操作", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "yes_no") + private Integer isOxyUpperTrigger; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + /** + * 设备名称 + */ + @ExcelProperty(value = "塘口名称") + private String pondName; + + /** + * 设备名称 + */ + @ExcelProperty(value = "设备名称") + private String deviceName; + + /** + * 设备编号 + */ + @ExcelProperty(value = "设备编号") + private String serialNum; + + /** + * 用户手机号 + */ + @ExcelProperty(value = "用户手机号") + private String mobilePhone; + + /** + * 用户名 + */ + @ExcelProperty(value = "用户名") + private String userName; + + +} diff --git a/intc-modules/intc-fishery/src/main/java/com/intc/fishery/domain/vo/TimingCtrlVo.java b/intc-modules/intc-fishery/src/main/java/com/intc/fishery/domain/vo/TimingCtrlVo.java new file mode 100644 index 0000000..0b48e8c --- /dev/null +++ b/intc-modules/intc-fishery/src/main/java/com/intc/fishery/domain/vo/TimingCtrlVo.java @@ -0,0 +1,106 @@ +package com.intc.fishery.domain.vo; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + +import com.intc.common.excel.annotation.ExcelDictFormat; +import com.intc.common.excel.convert.ExcelDictConvert; +import com.intc.fishery.domain.TimingCtrl; + +import cn.idev.excel.annotation.ExcelIgnoreUnannotated; +import cn.idev.excel.annotation.ExcelProperty; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; + + + +/** + * 开关定时控制视图对象 aqu_timing_ctrl + * + * @author intc + * @date 2025-10-23 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = TimingCtrl.class) +public class TimingCtrlVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + @ExcelProperty(value = "主键id") + private Long id; + + /** + * 开关id + */ + @ExcelProperty(value = "开关id") + private Long switchId; + + /** + * 开启时间 + */ + @ExcelProperty(value = "开启时间") + private Date openTime; + + /** + * 关闭时间 + */ + @ExcelProperty(value = "关闭时间") + private Date closeTime; + + /** + * 循环类型 + */ + @ExcelProperty(value = "循环类型", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "loop_type") + private Long loopType; + + /** + * 是否启用 + */ + @ExcelProperty(value = "是否启用") + private Long isOpen; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + /** + * 开关名称 + */ + @ExcelProperty(value = "开关名称") + private String switchName; + + /** + * 设备名称 + */ + @ExcelProperty(value = "设备名称") + private String deviceName; + + /** + * 设备编号 + */ + @ExcelProperty(value = "设备编号") + private String serialNum; + + /** + * 用户手机号 + */ + @ExcelProperty(value = "用户手机号") + private String mobilePhone; + + /** + * 用户名 + */ + @ExcelProperty(value = "用户名") + private String userName; + + +} diff --git a/intc-modules/intc-fishery/src/main/java/com/intc/fishery/mapper/LinkedCtrlMapper.java b/intc-modules/intc-fishery/src/main/java/com/intc/fishery/mapper/LinkedCtrlMapper.java new file mode 100644 index 0000000..a7f2aed --- /dev/null +++ b/intc-modules/intc-fishery/src/main/java/com/intc/fishery/mapper/LinkedCtrlMapper.java @@ -0,0 +1,15 @@ +package com.intc.fishery.mapper; + +import com.intc.common.mybatis.core.mapper.BaseMapperPlusJoin; +import com.intc.fishery.domain.LinkedCtrl; +import com.intc.fishery.domain.vo.LinkedCtrlVo; + +/** + * 溶解氧联动控制Mapper接口 + * + * @author intc + * @date 2025-10-23 + */ +public interface LinkedCtrlMapper extends BaseMapperPlusJoin { + +} diff --git a/intc-modules/intc-fishery/src/main/java/com/intc/fishery/mapper/TimingCtrlMapper.java b/intc-modules/intc-fishery/src/main/java/com/intc/fishery/mapper/TimingCtrlMapper.java new file mode 100644 index 0000000..f7d67e6 --- /dev/null +++ b/intc-modules/intc-fishery/src/main/java/com/intc/fishery/mapper/TimingCtrlMapper.java @@ -0,0 +1,15 @@ +package com.intc.fishery.mapper; + +import com.intc.common.mybatis.core.mapper.BaseMapperPlusJoin; +import com.intc.fishery.domain.TimingCtrl; +import com.intc.fishery.domain.vo.TimingCtrlVo; + +/** + * 开关定时控制Mapper接口 + * + * @author intc + * @date 2025-10-23 + */ +public interface TimingCtrlMapper extends BaseMapperPlusJoin { + +} diff --git a/intc-modules/intc-fishery/src/main/java/com/intc/fishery/service/ILinkedCtrlService.java b/intc-modules/intc-fishery/src/main/java/com/intc/fishery/service/ILinkedCtrlService.java new file mode 100644 index 0000000..6a836de --- /dev/null +++ b/intc-modules/intc-fishery/src/main/java/com/intc/fishery/service/ILinkedCtrlService.java @@ -0,0 +1,68 @@ +package com.intc.fishery.service; + +import com.intc.fishery.domain.vo.LinkedCtrlVo; +import com.intc.fishery.domain.bo.LinkedCtrlBo; +import com.intc.common.mybatis.core.page.TableDataInfo; +import com.intc.common.mybatis.core.page.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * 溶解氧联动控制Service接口 + * + * @author intc + * @date 2025-10-23 + */ +public interface ILinkedCtrlService { + + /** + * 查询溶解氧联动控制 + * + * @param id 主键 + * @return 溶解氧联动控制 + */ + LinkedCtrlVo queryById(Long id); + + /** + * 分页查询溶解氧联动控制列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 溶解氧联动控制分页列表 + */ + TableDataInfo queryPageList(LinkedCtrlBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的溶解氧联动控制列表 + * + * @param bo 查询条件 + * @return 溶解氧联动控制列表 + */ + List queryList(LinkedCtrlBo bo); + + /** + * 新增溶解氧联动控制 + * + * @param bo 溶解氧联动控制 + * @return 是否新增成功 + */ + Boolean insertByBo(LinkedCtrlBo bo); + + /** + * 修改溶解氧联动控制 + * + * @param bo 溶解氧联动控制 + * @return 是否修改成功 + */ + Boolean updateByBo(LinkedCtrlBo bo); + + /** + * 校验并批量删除溶解氧联动控制信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/intc-modules/intc-fishery/src/main/java/com/intc/fishery/service/ITimingCtrlService.java b/intc-modules/intc-fishery/src/main/java/com/intc/fishery/service/ITimingCtrlService.java new file mode 100644 index 0000000..9ca835f --- /dev/null +++ b/intc-modules/intc-fishery/src/main/java/com/intc/fishery/service/ITimingCtrlService.java @@ -0,0 +1,68 @@ +package com.intc.fishery.service; + +import com.intc.fishery.domain.vo.TimingCtrlVo; +import com.intc.fishery.domain.bo.TimingCtrlBo; +import com.intc.common.mybatis.core.page.TableDataInfo; +import com.intc.common.mybatis.core.page.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * 开关定时控制Service接口 + * + * @author intc + * @date 2025-10-23 + */ +public interface ITimingCtrlService { + + /** + * 查询开关定时控制 + * + * @param id 主键 + * @return 开关定时控制 + */ + TimingCtrlVo queryById(Long id); + + /** + * 分页查询开关定时控制列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 开关定时控制分页列表 + */ + TableDataInfo queryPageList(TimingCtrlBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的开关定时控制列表 + * + * @param bo 查询条件 + * @return 开关定时控制列表 + */ + List queryList(TimingCtrlBo bo); + + /** + * 新增开关定时控制 + * + * @param bo 开关定时控制 + * @return 是否新增成功 + */ + Boolean insertByBo(TimingCtrlBo bo); + + /** + * 修改开关定时控制 + * + * @param bo 开关定时控制 + * @return 是否修改成功 + */ + Boolean updateByBo(TimingCtrlBo bo); + + /** + * 校验并批量删除开关定时控制信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/intc-modules/intc-fishery/src/main/java/com/intc/fishery/service/impl/DeviceSwitchServiceImpl.java b/intc-modules/intc-fishery/src/main/java/com/intc/fishery/service/impl/DeviceSwitchServiceImpl.java index 43124fe..6afabc0 100644 --- a/intc-modules/intc-fishery/src/main/java/com/intc/fishery/service/impl/DeviceSwitchServiceImpl.java +++ b/intc-modules/intc-fishery/src/main/java/com/intc/fishery/service/impl/DeviceSwitchServiceImpl.java @@ -16,6 +16,7 @@ import com.intc.fishery.domain.vo.DeviceSwitchVo; import com.intc.fishery.domain.DeviceSwitch; import com.intc.fishery.domain.Device; import com.intc.fishery.domain.Pond; +import com.intc.fishery.domain.AquUser; import com.intc.fishery.mapper.DeviceSwitchMapper; import com.intc.fishery.service.IDeviceSwitchService; @@ -106,8 +107,13 @@ public class DeviceSwitchServiceImpl implements IDeviceSwitchService { .selectAs(Device::getDeviceName, DeviceSwitchVo::getDeviceName) .selectAs(Device::getSerialNum, DeviceSwitchVo::getSerialNum) .selectAs(Pond::getPondName, DeviceSwitchVo::getPondName) + .selectAs(AquUser::getUserName, DeviceSwitchVo::getUserName) + .selectAs(AquUser::getMobilePhone, DeviceSwitchVo::getMobilePhone) + // 使用子查询统计定时控制数量 + .select("(SELECT COUNT(*) FROM aqu_timing_ctrl tc WHERE tc.switch_id = t.id) AS timing_ctrl_count") .leftJoin(Device.class, Device::getId, DeviceSwitch::getDeviceId) .leftJoin(Pond.class, Pond::getId, DeviceSwitch::getPondId) + .leftJoin(AquUser.class, AquUser::getId, Device::getUserId) .eq(bo.getDeviceId() != null, DeviceSwitch::getDeviceId, bo.getDeviceId()) .eq(bo.getIndex() != null, DeviceSwitch::getIndex, bo.getIndex()) .like(StringUtils.isNotBlank(bo.getSwitchName()), DeviceSwitch::getSwitchName, bo.getSwitchName()) @@ -116,7 +122,7 @@ public class DeviceSwitchServiceImpl implements IDeviceSwitchService { .eq(bo.getIsOpen() != null, DeviceSwitch::getIsOpen, bo.getIsOpen()) .eq(bo.getLinkedCtrlId() != null, DeviceSwitch::getLinkedCtrlId, bo.getLinkedCtrlId()) .eq(bo.getLastTurnTime() != null, DeviceSwitch::getLastTurnTime, bo.getLastTurnTime()) - .orderByAsc(DeviceSwitch::getId); + .orderByDesc(DeviceSwitch::getCreateTime); // 处理额外的查询参数 if (params != null && !params.isEmpty()) { @@ -156,16 +162,13 @@ public class DeviceSwitchServiceImpl implements IDeviceSwitchService { .like(Device::getSerialNum, deviceKeyword)); } - // 处理设备名称模糊查询 - String deviceName = (String) params.get("deviceName"); - if (StringUtils.isNotBlank(deviceName)) { - wrapper.like(Device::getDeviceName, deviceName); - } - // 处理设备编号模糊查询 - String serialNum = (String) params.get("serialNum"); - if (StringUtils.isNotBlank(serialNum)) { - wrapper.like(Device::getSerialNum, serialNum); + // 处理用户名或用户手机号模糊查询 + String userKeyword = (String) params.get("userKeyword"); + if (StringUtils.isNotBlank(userKeyword)) { + wrapper.and(w -> w.like(AquUser::getUserName, userKeyword) + .or() + .like(AquUser::getMobilePhone, userKeyword)); } } diff --git a/intc-modules/intc-fishery/src/main/java/com/intc/fishery/service/impl/LinkedCtrlServiceImpl.java b/intc-modules/intc-fishery/src/main/java/com/intc/fishery/service/impl/LinkedCtrlServiceImpl.java new file mode 100644 index 0000000..4dd9a8e --- /dev/null +++ b/intc-modules/intc-fishery/src/main/java/com/intc/fishery/service/impl/LinkedCtrlServiceImpl.java @@ -0,0 +1,200 @@ +package com.intc.fishery.service.impl; + +import com.intc.common.core.utils.MapstructUtils; +import com.intc.common.core.utils.StringUtils; +import com.intc.common.mybatis.core.page.TableDataInfo; +import com.intc.common.mybatis.core.page.PageQuery; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.github.yulichang.wrapper.MPJLambdaWrapper; +import com.intc.fishery.domain.*; +import com.intc.fishery.domain.vo.DeviceSwitchVo; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import com.intc.fishery.domain.bo.LinkedCtrlBo; +import com.intc.fishery.domain.vo.LinkedCtrlVo; +import com.intc.fishery.mapper.LinkedCtrlMapper; +import com.intc.fishery.service.ILinkedCtrlService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 溶解氧联动控制Service业务层处理 + * + * @author intc + * @date 2025-10-23 + */ +@Slf4j +@RequiredArgsConstructor +@Service +public class LinkedCtrlServiceImpl implements ILinkedCtrlService { + + private final LinkedCtrlMapper baseMapper; + + /** + * 查询溶解氧联动控制 + * + * @param id 主键 + * @return 溶解氧联动控制 + */ + @Override + public LinkedCtrlVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询溶解氧联动控制列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 溶解氧联动控制分页列表 + */ + @Override + public TableDataInfo queryPageList(LinkedCtrlBo bo, PageQuery pageQuery) { + MPJLambdaWrapper wrapper = buildJoinQueryWrapper(bo); + Page result = baseMapper.selectJoinPage(pageQuery.build(), LinkedCtrlVo.class, wrapper); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的溶解氧联动控制列表 + * + * @param bo 查询条件 + * @return 溶解氧联动控制列表 + */ + @Override + public List queryList(LinkedCtrlBo bo) { + MPJLambdaWrapper wrapper = buildJoinQueryWrapper(bo); + return baseMapper.selectJoinList(LinkedCtrlVo.class, wrapper); + } + + private MPJLambdaWrapper buildQueryWrapper(LinkedCtrlBo bo) { + Map params = bo.getParams(); + MPJLambdaWrapper wrapper = new MPJLambdaWrapper() + .selectAll(LinkedCtrl.class) + .selectAs(Device::getDeviceName, DeviceSwitchVo::getDeviceName) + .selectAs(Device::getSerialNum, DeviceSwitchVo::getSerialNum) + .selectAs(Pond::getPondName, DeviceSwitchVo::getPondName) + .selectAs(AquUser::getUserName, DeviceSwitchVo::getUserName) + .selectAs(AquUser::getMobilePhone, DeviceSwitchVo::getMobilePhone) + .leftJoin(Device.class, Device::getId, LinkedCtrl::getDeviceId) + .leftJoin(Pond.class, Pond::getId, Device::getPondId) + .leftJoin(AquUser.class, AquUser::getId, Device::getUserId) + .orderByDesc(LinkedCtrl::getCreateTime) + .eq(bo.getDeviceId() != null, LinkedCtrl::getDeviceId, bo.getDeviceId()) + .eq(bo.getOxyUpperOpen() != null, LinkedCtrl::getOxyUpperOpen, bo.getOxyUpperOpen()) + .eq(bo.getOxyLowerOpen() != null, LinkedCtrl::getOxyLowerOpen, bo.getOxyLowerOpen()) + .eq(bo.getIsOxyUpperTrigger() != null, LinkedCtrl::getIsOxyUpperTrigger, bo.getIsOxyUpperTrigger()); + // 处理额外的查询参数 + if (params != null && !params.isEmpty()) { + handleExtraParams(wrapper, params); + } + return wrapper; + } + + /** + * 处理额外的查询参数 + * + * @param wrapper 查询包装器 + * @param params 额外参数 + */ + private void handleExtraParams(MPJLambdaWrapper wrapper, Map params) { + // 处理设备名称或设备编号模糊查询 + String deviceKeyword = (String) params.get("deviceKeyword"); + if (StringUtils.isNotBlank(deviceKeyword)) { + wrapper.and(w -> w.like(Device::getDeviceName, deviceKeyword) + .or() + .like(Device::getSerialNum, deviceKeyword)); + } + + + // 处理用户名或用户手机号模糊查询 + String userKeyword = (String) params.get("userKeyword"); + if (StringUtils.isNotBlank(userKeyword)) { + wrapper.and(w -> w.like(AquUser::getUserName, userKeyword) + .or() + .like(AquUser::getMobilePhone, userKeyword)); + } + } + + + /** + * 构建关联查询条件 + * + * @param bo 查询条件 + * @return 关联查询Wrapper + */ + private MPJLambdaWrapper buildJoinQueryWrapper(LinkedCtrlBo bo) { + Map params = bo.getParams(); + MPJLambdaWrapper wrapper = new MPJLambdaWrapper() + .selectAll(LinkedCtrl.class) + .selectAs(Device::getDeviceName, LinkedCtrlVo::getDeviceName) + .selectAs(Device::getSerialNum, LinkedCtrlVo::getSerialNum) + .selectAs(AquUser::getMobilePhone, LinkedCtrlVo::getMobilePhone) + .selectAs(AquUser::getUserName, LinkedCtrlVo::getUserName) + .leftJoin(Device.class, Device::getId, LinkedCtrl::getDeviceId) + .leftJoin(AquUser.class, AquUser::getId, Device::getUserId) + .orderByAsc(LinkedCtrl::getId) + .eq(bo.getDeviceId() != null, LinkedCtrl::getDeviceId, bo.getDeviceId()) + .eq(bo.getOxyUpperOpen() != null, LinkedCtrl::getOxyUpperOpen, bo.getOxyUpperOpen()) + .eq(bo.getOxyLowerOpen() != null, LinkedCtrl::getOxyLowerOpen, bo.getOxyLowerOpen()) + .eq(bo.getIsOxyUpperTrigger() != null, LinkedCtrl::getIsOxyUpperTrigger, bo.getIsOxyUpperTrigger()); + return wrapper; + } + + /** + * 新增溶解氧联动控制 + * + * @param bo 溶解氧联动控制 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(LinkedCtrlBo bo) { + LinkedCtrl add = MapstructUtils.convert(bo, LinkedCtrl.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改溶解氧联动控制 + * + * @param bo 溶解氧联动控制 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(LinkedCtrlBo bo) { + LinkedCtrl update = MapstructUtils.convert(bo, LinkedCtrl.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(LinkedCtrl entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除溶解氧联动控制信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } +} diff --git a/intc-modules/intc-fishery/src/main/java/com/intc/fishery/service/impl/TimingCtrlServiceImpl.java b/intc-modules/intc-fishery/src/main/java/com/intc/fishery/service/impl/TimingCtrlServiceImpl.java new file mode 100644 index 0000000..bf8e576 --- /dev/null +++ b/intc-modules/intc-fishery/src/main/java/com/intc/fishery/service/impl/TimingCtrlServiceImpl.java @@ -0,0 +1,198 @@ +package com.intc.fishery.service.impl; + +import com.intc.common.core.utils.MapstructUtils; +import com.intc.common.core.utils.StringUtils; +import com.intc.common.mybatis.core.page.TableDataInfo; +import com.intc.common.mybatis.core.page.PageQuery; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.github.yulichang.wrapper.MPJLambdaWrapper; +import com.intc.fishery.domain.*; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import com.intc.fishery.domain.bo.TimingCtrlBo; +import com.intc.fishery.domain.vo.TimingCtrlVo; +import com.intc.fishery.mapper.TimingCtrlMapper; +import com.intc.fishery.service.ITimingCtrlService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 开关定时控制Service业务层处理 + * + * @author intc + * @date 2025-10-23 + */ +@Slf4j +@RequiredArgsConstructor +@Service +public class TimingCtrlServiceImpl implements ITimingCtrlService { + + private final TimingCtrlMapper baseMapper; + + /** + * 查询开关定时控制 + * + * @param id 主键 + * @return 开关定时控制 + */ + @Override + public TimingCtrlVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询开关定时控制列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 开关定时控制分页列表 + */ + @Override + public TableDataInfo queryPageList(TimingCtrlBo bo, PageQuery pageQuery) { + MPJLambdaWrapper wrapper = buildJoinQueryWrapper(bo); + Page result = baseMapper.selectJoinPage(pageQuery.build(), TimingCtrlVo.class, wrapper); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的开关定时控制列表 + * + * @param bo 查询条件 + * @return 开关定时控制列表 + */ + @Override + public List queryList(TimingCtrlBo bo) { + MPJLambdaWrapper wrapper = buildJoinQueryWrapper(bo); + return baseMapper.selectJoinList(TimingCtrlVo.class, wrapper); + } + + private LambdaQueryWrapper buildQueryWrapper(TimingCtrlBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByAsc(TimingCtrl::getId); + lqw.eq(bo.getSwitchId() != null, TimingCtrl::getSwitchId, bo.getSwitchId()); + lqw.eq(bo.getLoopType() != null, TimingCtrl::getLoopType, bo.getLoopType()); + lqw.eq(bo.getIsOpen() != null, TimingCtrl::getIsOpen, bo.getIsOpen()); + return lqw; + } + + /** + * 构建关联查询条件 + * + * @param bo 查询条件 + * @return 关联查询Wrapper + */ + private MPJLambdaWrapper buildJoinQueryWrapper(TimingCtrlBo bo) { + Map params = bo.getParams(); + MPJLambdaWrapper wrapper = new MPJLambdaWrapper() + .selectAll(TimingCtrl.class) + .selectAs(DeviceSwitch::getSwitchName, TimingCtrlVo::getSwitchName) + .selectAs(Device::getDeviceName, TimingCtrlVo::getDeviceName) + .selectAs(Device::getSerialNum, TimingCtrlVo::getSerialNum) + .selectAs(AquUser::getMobilePhone, TimingCtrlVo::getMobilePhone) + .selectAs(AquUser::getUserName, TimingCtrlVo::getUserName) + .leftJoin(DeviceSwitch.class, DeviceSwitch::getId, TimingCtrl::getSwitchId) + .leftJoin(Device.class, Device::getId, DeviceSwitch::getDeviceId) + .leftJoin(AquUser.class, AquUser::getId, Device::getUserId) + .orderByDesc(TimingCtrl::getCreateTime) + .eq(bo.getSwitchId() != null, TimingCtrl::getSwitchId, bo.getSwitchId()) + .eq(bo.getLoopType() != null, TimingCtrl::getLoopType, bo.getLoopType()) + .eq(bo.getIsOpen() != null, TimingCtrl::getIsOpen, bo.getIsOpen()); + // 处理额外的查询参数 + if (params != null && !params.isEmpty()) { + handleExtraParams(wrapper, params); + } + + + return wrapper; + } + + /** + * 处理额外的查询参数 + * + * @param wrapper 查询包装器 + * @param params 额外参数 + */ + private void handleExtraParams(MPJLambdaWrapper wrapper, Map params) { + + // 处理设备名称或设备编号模糊查询 + String switchKeyword = (String) params.get("switchKeyword"); + if (StringUtils.isNotBlank(switchKeyword)) { + wrapper.and(w -> w.like(DeviceSwitch::getSwitchName, switchKeyword)); + } + + // 处理设备名称或设备编号模糊查询 + String deviceKeyword = (String) params.get("deviceKeyword"); + if (StringUtils.isNotBlank(deviceKeyword)) { + wrapper.and(w -> w.like(Device::getDeviceName, deviceKeyword) + .or() + .like(Device::getSerialNum, deviceKeyword)); + } + + + // 处理用户名或用户手机号模糊查询 + String userKeyword = (String) params.get("userKeyword"); + if (StringUtils.isNotBlank(userKeyword)) { + wrapper.and(w -> w.like(AquUser::getUserName, userKeyword) + .or() + .like(AquUser::getMobilePhone, userKeyword)); + } + } + + /** + * 新增开关定时控制 + * + * @param bo 开关定时控制 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(TimingCtrlBo bo) { + TimingCtrl add = MapstructUtils.convert(bo, TimingCtrl.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改开关定时控制 + * + * @param bo 开关定时控制 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(TimingCtrlBo bo) { + TimingCtrl update = MapstructUtils.convert(bo, TimingCtrl.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(TimingCtrl entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除开关定时控制信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } +} diff --git a/intc-modules/intc-fishery/src/main/resources/mapper/fishery/LinkedCtrlMapper.xml b/intc-modules/intc-fishery/src/main/resources/mapper/fishery/LinkedCtrlMapper.xml new file mode 100644 index 0000000..a0b6965 --- /dev/null +++ b/intc-modules/intc-fishery/src/main/resources/mapper/fishery/LinkedCtrlMapper.xml @@ -0,0 +1,6 @@ + + + + diff --git a/intc-modules/intc-fishery/src/main/resources/mapper/fishery/TimingCtrlMapper.xml b/intc-modules/intc-fishery/src/main/resources/mapper/fishery/TimingCtrlMapper.xml new file mode 100644 index 0000000..8d89990 --- /dev/null +++ b/intc-modules/intc-fishery/src/main/resources/mapper/fishery/TimingCtrlMapper.xml @@ -0,0 +1,6 @@ + + + + diff --git a/intc-modules/intc-generator/src/main/resources/generator.yml b/intc-modules/intc-generator/src/main/resources/generator.yml index 943b329..67e5562 100644 --- a/intc-modules/intc-generator/src/main/resources/generator.yml +++ b/intc-modules/intc-generator/src/main/resources/generator.yml @@ -3,7 +3,7 @@ gen: # 作者 author: intc # 默认生成包路径 system 需改成自己的模块名称 如 system monitor tool - packageName: org.dromara.fishery + packageName: com.intc.fishery # 自动去除表前缀,默认是false autoRemovePre: true # 表前缀(生成类名不会包含表前缀,多个用逗号分隔) diff --git a/intc-modules/intc-generator/src/main/resources/vm/java/bo.java.vm b/intc-modules/intc-generator/src/main/resources/vm/java/bo.java.vm index f313c87..d3066d8 100644 --- a/intc-modules/intc-generator/src/main/resources/vm/java/bo.java.vm +++ b/intc-modules/intc-generator/src/main/resources/vm/java/bo.java.vm @@ -1,5 +1,6 @@ package ${packageName}.domain.bo; - +import com.intc.common.core.validate.AddGroup; +import com.intc.common.core.validate.EditGroup; import ${packageName}.domain.${ClassName}; import com.intc.common.mybatis.core.domain.BaseEntity; import io.github.linpeilie.annotations.AutoMapper; diff --git a/intc-modules/intc-generator/src/main/resources/vm/java/controller.java.vm b/intc-modules/intc-generator/src/main/resources/vm/java/controller.java.vm index 236be14..88adffd 100644 --- a/intc-modules/intc-generator/src/main/resources/vm/java/controller.java.vm +++ b/intc-modules/intc-generator/src/main/resources/vm/java/controller.java.vm @@ -1,7 +1,7 @@ package ${packageName}.controller; import java.util.List; - +import com.intc.common.excel.utils.ExcelUtil; import lombok.RequiredArgsConstructor; import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.constraints.*; @@ -16,7 +16,6 @@ import com.intc.common.core.domain.R; import com.intc.common.core.validate.AddGroup; import com.intc.common.core.validate.EditGroup; import com.intc.common.log.enums.BusinessType; -com.intc import ${packageName}.domain.vo.${ClassName}Vo; import ${packageName}.domain.bo.${ClassName}Bo; import ${packageName}.service.I${ClassName}Service; diff --git a/intc-modules/intc-generator/src/main/resources/vm/java/domain.java.vm b/intc-modules/intc-generator/src/main/resources/vm/java/domain.java.vm index 5a8d0c4..ed336cc 100644 --- a/intc-modules/intc-generator/src/main/resources/vm/java/domain.java.vm +++ b/intc-modules/intc-generator/src/main/resources/vm/java/domain.java.vm @@ -6,10 +6,10 @@ package ${packageName}.domain; #end #end #if($IsTenant==1) -com.intc #else #end import com.baomidou.mybatisplus.annotation.*; +import com.intc.common.tenant.core.TenantEntity; import lombok.Data; import lombok.EqualsAndHashCode; #foreach ($import in $importList) diff --git a/intc-modules/intc-generator/src/main/resources/vm/java/serviceImpl.java.vm b/intc-modules/intc-generator/src/main/resources/vm/java/serviceImpl.java.vm index c12eacf..0001fac 100644 --- a/intc-modules/intc-generator/src/main/resources/vm/java/serviceImpl.java.vm +++ b/intc-modules/intc-generator/src/main/resources/vm/java/serviceImpl.java.vm @@ -1,6 +1,7 @@ package ${packageName}.service.impl; import com.intc.common.core.utils.MapstructUtils; +import com.intc.common.core.utils.StringUtils; #if($table.crud) import com.intc.common.mybatis.core.page.TableDataInfo; import com.intc.common.mybatis.core.page.PageQuery; diff --git a/intc-modules/intc-generator/src/main/resources/vm/java/vo.java.vm b/intc-modules/intc-generator/src/main/resources/vm/java/vo.java.vm index c2ee6ef..a922614 100644 --- a/intc-modules/intc-generator/src/main/resources/vm/java/vo.java.vm +++ b/intc-modules/intc-generator/src/main/resources/vm/java/vo.java.vm @@ -6,8 +6,8 @@ import ${import}; import ${packageName}.domain.${ClassName}; import cn.idev.excel.annotation.ExcelIgnoreUnannotated; import cn.idev.excel.annotation.ExcelProperty; -com.intc -com.intc +import com.intc.common.excel.annotation.ExcelDictFormat; +import com.intc.common.excel.convert.ExcelDictConvert; import io.github.linpeilie.annotations.AutoMapper; import lombok.Data; @@ -62,5 +62,7 @@ public class ${ClassName}Vo implements Serializable { #end #end #end + private Date createTime; + private Date updateTime; } diff --git a/intc-modules/intc-system/src/main/java/com/intc/system/domain/SysNotice.java b/intc-modules/intc-system/src/main/java/com/intc/system/domain/SysNotice.java index d041aca..58ab6a2 100644 --- a/intc-modules/intc-system/src/main/java/com/intc/system/domain/SysNotice.java +++ b/intc-modules/intc-system/src/main/java/com/intc/system/domain/SysNotice.java @@ -6,6 +6,8 @@ import com.intc.common.tenant.core.TenantEntity; import lombok.Data; import lombok.EqualsAndHashCode; +import java.util.Date; + /** * 通知公告表 sys_notice @@ -48,4 +50,14 @@ public class SysNotice extends TenantEntity { */ private String remark; + /** + * 优先级 + */ + private Integer priority; + + /** + * 有效期 + */ + private Date deadTime; + } diff --git a/intc-modules/intc-system/src/main/java/com/intc/system/domain/bo/SysNoticeBo.java b/intc-modules/intc-system/src/main/java/com/intc/system/domain/bo/SysNoticeBo.java index 03ecee9..9a4b53b 100644 --- a/intc-modules/intc-system/src/main/java/com/intc/system/domain/bo/SysNoticeBo.java +++ b/intc-modules/intc-system/src/main/java/com/intc/system/domain/bo/SysNoticeBo.java @@ -9,6 +9,8 @@ import com.intc.common.core.xss.Xss; import com.intc.common.mybatis.core.domain.BaseEntity; import com.intc.system.domain.SysNotice; +import java.util.Date; + /** * 通知公告业务对象 sys_notice * @@ -58,4 +60,14 @@ public class SysNoticeBo extends BaseEntity { */ private String createByName; + /** + * 优先级 + */ + private Integer priority; + + /** + * 有效期 + */ + private Date deadTime; + } diff --git a/intc-modules/intc-system/src/main/java/com/intc/system/domain/vo/SysNoticeVo.java b/intc-modules/intc-system/src/main/java/com/intc/system/domain/vo/SysNoticeVo.java index 01bc42b..85f9779 100644 --- a/intc-modules/intc-system/src/main/java/com/intc/system/domain/vo/SysNoticeVo.java +++ b/intc-modules/intc-system/src/main/java/com/intc/system/domain/vo/SysNoticeVo.java @@ -70,4 +70,14 @@ public class SysNoticeVo implements Serializable { */ private Date createTime; + /** + * 优先级 + */ + private Integer priority; + + /** + * 有效期 + */ + private Date deadTime; + } diff --git a/intc-modules/pom.xml b/intc-modules/pom.xml index 16d96f8..a99163b 100644 --- a/intc-modules/pom.xml +++ b/intc-modules/pom.xml @@ -3,7 +3,7 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - intc-vue-plus + intc-vue-ultra com.intc ${revision} diff --git a/pom.xml b/pom.xml index 3a6ce82..82e556c 100644 --- a/pom.xml +++ b/pom.xml @@ -5,10 +5,10 @@ 4.0.0 com.intc - intc-vue-plus + intc-vue-ultra ${revision} - intc-vue-plus + intc-vue-ultra https://gitee.com/dromara/RuoYi-Vue-Plus intc-vue-plus多租户管理系统