Jelajahi Sumber

移动端巡检、ai

Newspaper 1 tahun lalu
induk
melakukan
1947bc7f91
76 mengubah file dengan 4302 tambahan dan 2 penghapusan
  1. 143 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/aiDevice/controller/AiDeviceController.java
  2. 87 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/aiDevice/entity/AiDevice.java
  3. 21 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/aiDevice/entity/vo/AiDeviceCountVo.java
  4. 34 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/aiDevice/enums/AiDeviceEnum.java
  5. 25 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/aiDevice/mapper/AiDeviceMapper.java
  6. 5 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/aiDevice/mapper/mapping/AiDeviceMapper.xml
  7. 58 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/aiDevice/param/AiDeviceAddParam.java
  8. 63 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/aiDevice/param/AiDeviceEditParam.java
  9. 35 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/aiDevice/param/AiDeviceIdParam.java
  10. 61 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/aiDevice/param/AiDevicePageParam.java
  11. 84 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/aiDevice/service/AiDeviceService.java
  12. 135 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/aiDevice/service/impl/AiDeviceServiceImpl.java
  13. 16 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/carCapture/entity/vo/CarCaptureHourVo.java
  14. 14 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/carCapture/entity/vo/CarCapturePastVo.java
  15. 103 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/dailyInspection/controller/DailyInspectionController.java
  16. 64 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/dailyInspection/entity/DailyInspection.java
  17. 32 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/dailyInspection/entity/vo/DailyInspectionImageVo.java
  18. 60 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/dailyInspection/entity/vo/DailyInspectionPageVo.java
  19. 34 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/dailyInspection/enums/DailyInspectionEnum.java
  20. 28 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/dailyInspection/mapper/DailyInspectionMapper.java
  21. 27 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/dailyInspection/mapper/mapping/DailyInspectionMapper.xml
  22. 63 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/dailyInspection/param/DailyInspectionEditParam.java
  23. 35 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/dailyInspection/param/DailyInspectionIdParam.java
  24. 50 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/dailyInspection/param/DailyInspectionPageParam.java
  25. 59 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/dailyInspection/service/DailyInspectionService.java
  26. 119 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/dailyInspection/service/impl/DailyInspectionServiceImpl.java
  27. 131 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/dirtyCapture/controller/DirtyCaptureController.java
  28. 63 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/dirtyCapture/entity/DirtyCapture.java
  29. 34 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/dirtyCapture/enums/DirtyCaptureEnum.java
  30. 25 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/dirtyCapture/mapper/DirtyCaptureMapper.java
  31. 5 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/dirtyCapture/mapper/mapping/DirtyCaptureMapper.xml
  32. 54 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/dirtyCapture/param/DirtyCaptureAddParam.java
  33. 59 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/dirtyCapture/param/DirtyCaptureEditParam.java
  34. 35 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/dirtyCapture/param/DirtyCaptureIdParam.java
  35. 61 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/dirtyCapture/param/DirtyCapturePageParam.java
  36. 80 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/dirtyCapture/service/DirtyCaptureService.java
  37. 98 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/dirtyCapture/service/impl/DirtyCaptureServiceImpl.java
  38. 142 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/personCapture/controller/PersonCaptureController.java
  39. 75 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/personCapture/entity/PersonCapture.java
  40. 15 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/personCapture/entity/vo/PersonCaptureHourVo.java
  41. 15 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/personCapture/entity/vo/PersonCapturePastVo.java
  42. 34 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/personCapture/enums/PersonCaptureEnum.java
  43. 29 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/personCapture/mapper/PersonCaptureMapper.java
  44. 18 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/personCapture/mapper/mapping/PersonCaptureMapper.xml
  45. 66 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/personCapture/param/PersonCaptureAddParam.java
  46. 71 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/personCapture/param/PersonCaptureEditParam.java
  47. 35 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/personCapture/param/PersonCaptureIdParam.java
  48. 69 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/personCapture/param/PersonCapturePageParam.java
  49. 84 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/personCapture/service/PersonCaptureService.java
  50. 132 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/personCapture/service/impl/PersonCaptureServiceImpl.java
  51. 131 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/speciesCapture/controller/SpeciesCaptureController.java
  52. 63 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/speciesCapture/entity/SpeciesCapture.java
  53. 34 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/speciesCapture/enums/SpeciesCaptureEnum.java
  54. 25 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/speciesCapture/mapper/SpeciesCaptureMapper.java
  55. 5 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/speciesCapture/mapper/mapping/SpeciesCaptureMapper.xml
  56. 54 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/speciesCapture/param/SpeciesCaptureAddParam.java
  57. 59 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/speciesCapture/param/SpeciesCaptureEditParam.java
  58. 35 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/speciesCapture/param/SpeciesCaptureIdParam.java
  59. 61 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/speciesCapture/param/SpeciesCapturePageParam.java
  60. 80 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/speciesCapture/service/SpeciesCaptureService.java
  61. 98 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/speciesCapture/service/impl/SpeciesCaptureServiceImpl.java
  62. 108 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/taskInspection/controller/TaskInspectionController.java
  63. 73 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/taskInspection/entity/TaskInspection.java
  64. 37 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/taskInspection/entity/vo/TaskInspectionDetailVo.java
  65. 12 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/taskInspection/entity/vo/TaskInspectionImageVo.java
  66. 41 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/taskInspection/entity/vo/TaskInspectionPageVo.java
  67. 34 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/taskInspection/enums/TaskInspectionEnum.java
  68. 29 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/taskInspection/mapper/TaskInspectionMapper.java
  69. 31 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/taskInspection/mapper/mapping/TaskInspectionMapper.xml
  70. 58 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/taskInspection/param/TaskInspectionAddParam.java
  71. 63 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/taskInspection/param/TaskInspectionEditParam.java
  72. 35 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/taskInspection/param/TaskInspectionIdParam.java
  73. 52 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/taskInspection/param/TaskInspectionPageParam.java
  74. 63 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/taskInspection/service/TaskInspectionService.java
  75. 134 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/taskInspection/service/impl/TaskInspectionServiceImpl.java
  76. 2 2
      snowy-web-app/src/main/resources/application.properties

+ 143 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/aiDevice/controller/AiDeviceController.java

@@ -0,0 +1,143 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.ai.aiDevice.controller;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import com.github.xiaoymin.knife4j.annotations.ApiSupport;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+import vip.xiaonuo.common.annotation.CommonLog;
+import vip.xiaonuo.common.pojo.CommonResult;
+import vip.xiaonuo.common.pojo.CommonValidList;
+import vip.xiaonuo.core.param.OrgIdParam;
+import vip.xiaonuo.modular.ai.aiDevice.entity.AiDevice;
+import vip.xiaonuo.modular.ai.aiDevice.entity.vo.AiDeviceCountVo;
+import vip.xiaonuo.modular.ai.aiDevice.param.AiDeviceAddParam;
+import vip.xiaonuo.modular.ai.aiDevice.param.AiDeviceEditParam;
+import vip.xiaonuo.modular.ai.aiDevice.param.AiDeviceIdParam;
+import vip.xiaonuo.modular.ai.aiDevice.param.AiDevicePageParam;
+import vip.xiaonuo.modular.ai.aiDevice.service.AiDeviceService;
+import vip.xiaonuo.modular.energy.energyDevice.entity.vo.EnergyDeviceCountVo;
+import vip.xiaonuo.modular.energy.energyDevice.param.EnergyDeviceOrgIdParam;
+
+import javax.annotation.Resource;
+import javax.validation.Valid;
+import javax.validation.constraints.NotEmpty;
+
+/**
+ * 巡检设备控制器
+ *
+ * @author newspaper
+ * @date  2024/01/06 11:20
+ */
+@Api(tags = "巡检设备控制器")
+@ApiSupport(author = "SNOWY_TEAM", order = 1)
+@RestController
+@Validated
+public class AiDeviceController {
+
+    @Resource
+    private AiDeviceService aiDeviceService;
+
+    /**
+     * 获取巡检设备分页
+     *
+     * @author newspaper
+     * @date  2024/01/06 11:20
+     */
+    @ApiOperationSupport(order = 1)
+    @ApiOperation("获取巡检设备分页")
+    @GetMapping("/ai/aiDevice/page")
+    public CommonResult<Page<AiDevice>> page(AiDevicePageParam aiDevicePageParam) {
+        return CommonResult.data(aiDeviceService.page(aiDevicePageParam));
+    }
+
+    /**
+     * 添加巡检设备
+     *
+     * @author newspaper
+     * @date  2024/01/06 11:20
+     */
+    @ApiOperationSupport(order = 2)
+    @ApiOperation("添加巡检设备")
+    @CommonLog("添加巡检设备")
+    @PostMapping("/ai/aiDevice/add")
+    public CommonResult<String> add(@RequestBody @Valid AiDeviceAddParam aiDeviceAddParam) {
+        aiDeviceService.add(aiDeviceAddParam);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 编辑巡检设备
+     *
+     * @author newspaper
+     * @date  2024/01/06 11:20
+     */
+    @ApiOperationSupport(order = 3)
+    @ApiOperation("编辑巡检设备")
+    @CommonLog("编辑巡检设备")
+    @PostMapping("/ai/aiDevice/edit")
+    public CommonResult<String> edit(@RequestBody @Valid AiDeviceEditParam aiDeviceEditParam) {
+        aiDeviceService.edit(aiDeviceEditParam);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 删除巡检设备
+     *
+     * @author newspaper
+     * @date  2024/01/06 11:20
+     */
+    @ApiOperationSupport(order = 4)
+    @ApiOperation("删除巡检设备")
+    @CommonLog("删除巡检设备")
+    @PostMapping("/ai/aiDevice/delete")
+    public CommonResult<String> delete(@RequestBody @Valid @NotEmpty(message = "集合不能为空")
+                                                   CommonValidList<AiDeviceIdParam> aiDeviceIdParamList) {
+        aiDeviceService.delete(aiDeviceIdParamList);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 获取巡检设备详情
+     *
+     * @author newspaper
+     * @date  2024/01/06 11:20
+     */
+    @ApiOperationSupport(order = 5)
+    @ApiOperation("获取巡检设备详情")
+    @GetMapping("/ai/aiDevice/detail")
+    public CommonResult<AiDevice> detail(@Valid AiDeviceIdParam aiDeviceIdParam) {
+        return CommonResult.data(aiDeviceService.detail(aiDeviceIdParam));
+    }
+
+    /**
+     * 获取巡检设备汇总
+     *
+     * @author newspaper
+     * @date  2024/01/06 11:20
+     */
+    @ApiOperationSupport(order = 6)
+    @ApiOperation("获取巡检设备汇总")
+    @GetMapping("/ai/aiDevice/deviceCount")
+    public CommonResult<AiDeviceCountVo> deviceCount(OrgIdParam orgIdParam) {
+        return CommonResult.data(aiDeviceService.deviceCount(orgIdParam));
+    }
+}

+ 87 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/aiDevice/entity/AiDevice.java

@@ -0,0 +1,87 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.ai.aiDevice.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 巡检设备实体
+ *
+ * @author newspaper
+ * @date  2024/01/06 11:20
+ **/
+@Getter
+@Setter
+@TableName("ai_device")
+public class AiDevice {
+
+    /** id */
+    @TableId
+    @ApiModelProperty(value = "id", position = 1)
+    private String id;
+
+    /** 设备编号 */
+    @ApiModelProperty(value = "设备编号", position = 2)
+    private String deviceCode;
+
+    /** 设备类型id */
+    @ApiModelProperty(value = "设备类型id", position = 3)
+    private String deviceTypeId;
+
+    /** 设备名称 */
+    @ApiModelProperty(value = "设备名称", position = 4)
+    private String deviceName;
+
+    /** 安装位置id */
+    @ApiModelProperty(value = "安装位置id", position = 5)
+    private String installPosition;
+
+    /** 状态 */
+    @ApiModelProperty(value = "状态", position = 6)
+    private Integer status;
+
+    /** 组织id */
+    @ApiModelProperty(value = "组织id", position = 7)
+    private String orgId;
+
+    /** 删除标志 */
+    @ApiModelProperty(value = "删除标志", position = 8)
+    @TableLogic
+    @TableField(fill = FieldFill.INSERT)
+    private String deleteFlag;
+
+    /** 创建时间 */
+    @ApiModelProperty(value = "创建时间", position = 9)
+    @TableField(fill = FieldFill.INSERT)
+    private Date createTime;
+
+    /** 创建用户 */
+    @ApiModelProperty(value = "创建用户", position = 10)
+    @TableField(fill = FieldFill.INSERT)
+    private String createUser;
+
+    /** 修改时间 */
+    @ApiModelProperty(value = "修改时间", position = 11)
+    @TableField(fill = FieldFill.UPDATE)
+    private Date updateTime;
+
+    /** 修改用户 */
+    @ApiModelProperty(value = "修改用户", position = 12)
+    @TableField(fill = FieldFill.UPDATE)
+    private String updateUser;
+}

+ 21 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/aiDevice/entity/vo/AiDeviceCountVo.java

@@ -0,0 +1,21 @@
+package vip.xiaonuo.modular.ai.aiDevice.entity.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class AiDeviceCountVo {
+    @ApiModelProperty(value = "设备总数", position = 1)
+    private Long deviceNum;
+
+    @ApiModelProperty(value = "在线设备", position = 2)
+    private Long onDeviceNum;
+
+    @ApiModelProperty(value = "离线设备", position = 3)
+    private Long offDeviceNum;
+
+    @ApiModelProperty(value = "设备在线率", position = 4)
+    private String onlineRate;
+}

+ 34 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/aiDevice/enums/AiDeviceEnum.java

@@ -0,0 +1,34 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.ai.aiDevice.enums;
+
+import lombok.Getter;
+
+/**
+ * 巡检设备枚举
+ *
+ * @author newspaper
+ * @date  2024/01/06 11:20
+ **/
+@Getter
+public enum AiDeviceEnum {
+
+    /** 测试 */
+    TEST("TEST");
+
+    private final String value;
+
+    AiDeviceEnum(String value) {
+        this.value = value;
+    }
+}

+ 25 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/aiDevice/mapper/AiDeviceMapper.java

@@ -0,0 +1,25 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.ai.aiDevice.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import vip.xiaonuo.modular.ai.aiDevice.entity.AiDevice;
+
+/**
+ * 巡检设备Mapper接口
+ *
+ * @author newspaper
+ * @date  2024/01/06 11:20
+ **/
+public interface AiDeviceMapper extends BaseMapper<AiDevice> {
+}

+ 5 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/aiDevice/mapper/mapping/AiDeviceMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="vip.xiaonuo.modular.ai.aiDevice.mapper.AiDeviceMapper">
+
+</mapper>

+ 58 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/aiDevice/param/AiDeviceAddParam.java

@@ -0,0 +1,58 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.ai.aiDevice.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 巡检设备添加参数
+ *
+ * @author newspaper
+ * @date  2024/01/06 11:20
+ **/
+@Getter
+@Setter
+public class AiDeviceAddParam {
+
+    /** 设备编号 */
+    @ApiModelProperty(value = "设备编号", position = 2)
+    private String deviceCode;
+
+    /** 设备类型id */
+    @ApiModelProperty(value = "设备类型id", position = 3)
+    private String deviceTypeId;
+
+    /** 设备名称 */
+    @ApiModelProperty(value = "设备名称", position = 4)
+    private String deviceName;
+
+    /** 安装位置id */
+    @ApiModelProperty(value = "安装位置id", position = 5)
+    private String installPosition;
+
+    /** 状态 */
+    @ApiModelProperty(value = "状态", position = 6)
+    private Integer status;
+
+    /** 组织id */
+    @ApiModelProperty(value = "组织id", position = 7)
+    private String orgId;
+
+}

+ 63 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/aiDevice/param/AiDeviceEditParam.java

@@ -0,0 +1,63 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.ai.aiDevice.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 巡检设备编辑参数
+ *
+ * @author newspaper
+ * @date  2024/01/06 11:20
+ **/
+@Getter
+@Setter
+public class AiDeviceEditParam {
+
+    /** id */
+    @ApiModelProperty(value = "id", required = true, position = 1)
+    @NotBlank(message = "id不能为空")
+    private String id;
+
+    /** 设备编号 */
+    @ApiModelProperty(value = "设备编号", position = 2)
+    private String deviceCode;
+
+    /** 设备类型id */
+    @ApiModelProperty(value = "设备类型id", position = 3)
+    private String deviceTypeId;
+
+    /** 设备名称 */
+    @ApiModelProperty(value = "设备名称", position = 4)
+    private String deviceName;
+
+    /** 安装位置id */
+    @ApiModelProperty(value = "安装位置id", position = 5)
+    private String installPosition;
+
+    /** 状态 */
+    @ApiModelProperty(value = "状态", position = 6)
+    private Integer status;
+
+    /** 组织id */
+    @ApiModelProperty(value = "组织id", position = 7)
+    private String orgId;
+
+}

+ 35 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/aiDevice/param/AiDeviceIdParam.java

@@ -0,0 +1,35 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.ai.aiDevice.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+
+/**
+ * 巡检设备Id参数
+ *
+ * @author newspaper
+ * @date  2024/01/06 11:20
+ **/
+@Getter
+@Setter
+public class AiDeviceIdParam {
+
+    /** id */
+    @ApiModelProperty(value = "id", required = true)
+    @NotBlank(message = "id不能为空")
+    private String id;
+}

+ 61 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/aiDevice/param/AiDevicePageParam.java

@@ -0,0 +1,61 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.ai.aiDevice.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+import vip.xiaonuo.core.param.OrgIdParam;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 巡检设备查询参数
+ *
+ * @author newspaper
+ * @date  2024/01/06 11:20
+ **/
+@Getter
+@Setter
+public class AiDevicePageParam extends OrgIdParam {
+
+    /** 当前页 */
+    @ApiModelProperty(value = "当前页码")
+    private Integer current;
+
+    /** 每页条数 */
+    @ApiModelProperty(value = "每页条数")
+    private Integer size;
+
+    /** 排序字段 */
+    @ApiModelProperty(value = "排序字段,字段驼峰名称,如:userName")
+    private String sortField;
+
+    /** 排序方式 */
+    @ApiModelProperty(value = "排序方式,升序:ASCEND;降序:DESCEND")
+    private String sortOrder;
+
+    /** 关键词 */
+    @ApiModelProperty(value = "关键词")
+    private String searchKey;
+
+    /** 设备类型id */
+    @ApiModelProperty(value = "设备类型id")
+    private String deviceTypeId;
+
+    /** 安装位置id */
+    @ApiModelProperty(value = "安装位置id")
+    private String installPosition;
+
+}

+ 84 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/aiDevice/service/AiDeviceService.java

@@ -0,0 +1,84 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.ai.aiDevice.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import vip.xiaonuo.core.param.OrgIdParam;
+import vip.xiaonuo.modular.ai.aiDevice.entity.AiDevice;
+import vip.xiaonuo.modular.ai.aiDevice.entity.vo.AiDeviceCountVo;
+import vip.xiaonuo.modular.ai.aiDevice.param.AiDeviceAddParam;
+import vip.xiaonuo.modular.ai.aiDevice.param.AiDeviceEditParam;
+import vip.xiaonuo.modular.ai.aiDevice.param.AiDeviceIdParam;
+import vip.xiaonuo.modular.ai.aiDevice.param.AiDevicePageParam;
+
+import java.util.List;
+
+/**
+ * 巡检设备Service接口
+ *
+ * @author newspaper
+ * @date  2024/01/06 11:20
+ **/
+public interface AiDeviceService extends IService<AiDevice> {
+
+    /**
+     * 获取巡检设备分页
+     *
+     * @author newspaper
+     * @date  2024/01/06 11:20
+     */
+    Page<AiDevice> page(AiDevicePageParam aiDevicePageParam);
+
+    /**
+     * 添加巡检设备
+     *
+     * @author newspaper
+     * @date  2024/01/06 11:20
+     */
+    void add(AiDeviceAddParam aiDeviceAddParam);
+
+    /**
+     * 编辑巡检设备
+     *
+     * @author newspaper
+     * @date  2024/01/06 11:20
+     */
+    void edit(AiDeviceEditParam aiDeviceEditParam);
+
+    /**
+     * 删除巡检设备
+     *
+     * @author newspaper
+     * @date  2024/01/06 11:20
+     */
+    void delete(List<AiDeviceIdParam> aiDeviceIdParamList);
+
+    /**
+     * 获取巡检设备详情
+     *
+     * @author newspaper
+     * @date  2024/01/06 11:20
+     */
+    AiDevice detail(AiDeviceIdParam aiDeviceIdParam);
+
+    /**
+     * 获取巡检设备详情
+     *
+     * @author newspaper
+     * @date  2024/01/06 11:20
+     **/
+    AiDevice queryEntity(String id);
+
+    AiDeviceCountVo deviceCount(OrgIdParam orgIdParam);
+}

+ 135 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/aiDevice/service/impl/AiDeviceServiceImpl.java

@@ -0,0 +1,135 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.ai.aiDevice.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollStreamUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import vip.xiaonuo.common.enums.CommonSortOrderEnum;
+import vip.xiaonuo.common.exception.CommonException;
+import vip.xiaonuo.common.page.CommonPageRequest;
+import vip.xiaonuo.core.param.OrgIdParam;
+import vip.xiaonuo.modular.ai.aiDevice.entity.AiDevice;
+import vip.xiaonuo.modular.ai.aiDevice.entity.vo.AiDeviceCountVo;
+import vip.xiaonuo.modular.ai.aiDevice.mapper.AiDeviceMapper;
+import vip.xiaonuo.modular.ai.aiDevice.param.AiDeviceAddParam;
+import vip.xiaonuo.modular.ai.aiDevice.param.AiDeviceEditParam;
+import vip.xiaonuo.modular.ai.aiDevice.param.AiDeviceIdParam;
+import vip.xiaonuo.modular.ai.aiDevice.param.AiDevicePageParam;
+import vip.xiaonuo.modular.ai.aiDevice.service.AiDeviceService;
+import vip.xiaonuo.modular.energy.energyDevice.entity.EnergyDevice;
+import vip.xiaonuo.modular.energy.energyDevice.entity.vo.EnergyDeviceCountVo;
+
+import java.text.NumberFormat;
+import java.util.List;
+
+/**
+ * 巡检设备Service接口实现类
+ *
+ * @author newspaper
+ * @date  2024/01/06 11:20
+ **/
+@Service
+public class AiDeviceServiceImpl extends ServiceImpl<AiDeviceMapper, AiDevice> implements AiDeviceService {
+
+    @Override
+    public Page<AiDevice> page(AiDevicePageParam aiDevicePageParam) {
+        QueryWrapper<AiDevice> queryWrapper = new QueryWrapper<>();
+        if(ObjectUtil.isNotEmpty(aiDevicePageParam.getDeviceTypeId())) {
+            queryWrapper.lambda().eq(AiDevice::getDeviceTypeId, aiDevicePageParam.getDeviceTypeId());
+        }
+        if(ObjectUtil.isNotEmpty(aiDevicePageParam.getInstallPosition())) {
+            queryWrapper.lambda().eq(AiDevice::getInstallPosition, aiDevicePageParam.getInstallPosition());
+        }
+        if(ObjectUtil.isAllNotEmpty(aiDevicePageParam.getSortField(), aiDevicePageParam.getSortOrder())) {
+            CommonSortOrderEnum.validate(aiDevicePageParam.getSortOrder());
+            queryWrapper.orderBy(true, aiDevicePageParam.getSortOrder().equals(CommonSortOrderEnum.ASC.getValue()),
+                    StrUtil.toUnderlineCase(aiDevicePageParam.getSortField()));
+        } else {
+            queryWrapper.lambda().orderByAsc(AiDevice::getId);
+        }
+        queryWrapper.lambda().eq(AiDevice::getOrgId,aiDevicePageParam.getOrgId());
+        return this.page(CommonPageRequest.defaultPage(), queryWrapper);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void add(AiDeviceAddParam aiDeviceAddParam) {
+        AiDevice aiDevice = BeanUtil.toBean(aiDeviceAddParam, AiDevice.class);
+        this.save(aiDevice);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void edit(AiDeviceEditParam aiDeviceEditParam) {
+        AiDevice aiDevice = this.queryEntity(aiDeviceEditParam.getId());
+        BeanUtil.copyProperties(aiDeviceEditParam, aiDevice);
+        this.updateById(aiDevice);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void delete(List<AiDeviceIdParam> aiDeviceIdParamList) {
+        // 执行删除
+        this.removeByIds(CollStreamUtil.toList(aiDeviceIdParamList, AiDeviceIdParam::getId));
+    }
+
+    @Override
+    public AiDevice detail(AiDeviceIdParam aiDeviceIdParam) {
+        return this.queryEntity(aiDeviceIdParam.getId());
+    }
+
+    @Override
+    public AiDevice queryEntity(String id) {
+        AiDevice aiDevice = this.getById(id);
+        if(ObjectUtil.isEmpty(aiDevice)) {
+            throw new CommonException("巡检设备不存在,id值为:{}", id);
+        }
+        return aiDevice;
+    }
+
+    @Override
+    public AiDeviceCountVo deviceCount(OrgIdParam orgIdParam) {
+        AiDeviceCountVo aiDeviceCountVo = new AiDeviceCountVo();
+        String orgId = orgIdParam.getOrgId();
+        long deviceNum = this.count(new QueryWrapper<AiDevice>().lambda().eq(AiDevice::getOrgId, orgId));
+        if (deviceNum == 0){
+            aiDeviceCountVo.setDeviceNum(0L);
+            aiDeviceCountVo.setOnDeviceNum(0L);
+            aiDeviceCountVo.setOffDeviceNum(0L);
+            aiDeviceCountVo.setOnlineRate("0%");
+        }else {
+            aiDeviceCountVo.setDeviceNum(deviceNum);
+            long onDeviceNum = this.count(new QueryWrapper<AiDevice>().lambda().eq(AiDevice::getStatus,"1").eq(AiDevice::getOrgId, orgId));
+            aiDeviceCountVo.setOnDeviceNum(onDeviceNum);
+            long offDeviceNum = this.count(new QueryWrapper<AiDevice>().lambda().eq(AiDevice::getStatus,"0").eq(AiDevice::getOrgId, orgId));
+            aiDeviceCountVo.setOffDeviceNum(offDeviceNum);
+            //创建一个数值格式化对象
+            NumberFormat numberFormat = NumberFormat.getInstance();
+            //设置精确到小数点后两位
+            numberFormat.setMaximumFractionDigits(2);
+            System.out.println("onDeviceNum"+onDeviceNum);
+            System.out.println("deviceNum"+deviceNum);
+            String onlineRate = numberFormat.format((float)onDeviceNum / (float) deviceNum* 100) + "%";
+            System.out.println("onlineRate"+onlineRate);
+            aiDeviceCountVo.setOnlineRate(onlineRate);
+        }
+        return aiDeviceCountVo;
+    }
+}

+ 16 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/carCapture/entity/vo/CarCaptureHourVo.java

@@ -0,0 +1,16 @@
+package vip.xiaonuo.modular.ai.carCapture.entity.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import io.swagger.models.auth.In;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+public class CarCaptureHourVo {
+
+    @ApiModelProperty(value = "时间", position = 1)
+    private LocalDateTime time;
+    @ApiModelProperty(value = "数量", position = 2)
+    private Integer value;
+}

+ 14 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/carCapture/entity/vo/CarCapturePastVo.java

@@ -0,0 +1,14 @@
+package vip.xiaonuo.modular.ai.carCapture.entity.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class CarCapturePastVo {
+    @ApiModelProperty(value = "总数", position = 1)
+    private long total;
+    @ApiModelProperty(value = "详情", position = 1)
+    private List<CarCaptureHourVo> list;
+}

+ 103 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/dailyInspection/controller/DailyInspectionController.java

@@ -0,0 +1,103 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.ai.dailyInspection.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import com.github.xiaoymin.knife4j.annotations.ApiSupport;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+import vip.xiaonuo.common.annotation.CommonLog;
+import vip.xiaonuo.common.pojo.CommonResult;
+import vip.xiaonuo.common.pojo.CommonValidList;
+import vip.xiaonuo.modular.ai.dailyInspection.entity.DailyInspection;
+import vip.xiaonuo.modular.ai.dailyInspection.entity.vo.DailyInspectionImageVo;
+import vip.xiaonuo.modular.ai.dailyInspection.param.DailyInspectionEditParam;
+import vip.xiaonuo.modular.ai.dailyInspection.param.DailyInspectionIdParam;
+import vip.xiaonuo.modular.ai.dailyInspection.param.DailyInspectionPageParam;
+import vip.xiaonuo.modular.ai.dailyInspection.service.DailyInspectionService;
+
+import javax.annotation.Resource;
+import javax.validation.Valid;
+import javax.validation.constraints.NotEmpty;
+import java.io.IOException;
+
+/**
+ * 日常巡检控制器
+ *
+ * @author newspaper
+ * @date  2024/01/08 15:58
+ */
+@Api(tags = "日常巡检控制器")
+@ApiSupport(author = "SNOWY_TEAM", order = 1)
+@RestController
+@Validated
+public class DailyInspectionController {
+
+    @Resource
+    private DailyInspectionService dailyInspectionService;
+
+    /**
+     * 获取日常巡检分页
+     *
+     * @author newspaper
+     * @date  2024/01/08 15:58
+     */
+    @ApiOperationSupport(order = 1)
+    @ApiOperation("获取日常巡检分页")
+    @GetMapping("/ai/dailyInspection/page")
+    public CommonResult<Page<DailyInspectionImageVo>> page(DailyInspectionPageParam dailyInspectionPageParam) {
+        return CommonResult.data(dailyInspectionService.page(dailyInspectionPageParam));
+    }
+
+    /**
+     * 编辑日常巡检
+     *
+     * @author newspaper
+     * @date  2024/01/08 15:58
+     */
+    @ApiOperationSupport(order = 3)
+    @ApiOperation("提交日常巡检")
+    @CommonLog("提交日常巡检")
+    @PostMapping("/ai/dailyInspection/edit")
+    public CommonResult<String> edit(@RequestParam @ApiParam(value = "日常巡检id") String id,
+                                     @RequestParam @ApiParam(value = "巡检时间") String inspectTime,
+                                     @RequestParam @ApiParam(value = "巡检人员id") String inspectPersonId,
+                                     @RequestParam @ApiParam(value = "问题描述") String description,
+                                     @RequestParam(value = "img1") @ApiParam(value = "图片1") MultipartFile img1,
+                                     @RequestParam(value = "img2", required = false) @ApiParam(value = "图片2") MultipartFile img2,
+                                     @RequestParam(value = "img3", required = false) @ApiParam(value = "图片3") MultipartFile img3) throws IOException {
+        dailyInspectionService.edit(id,inspectTime,inspectPersonId,description,img1,img2,img3);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 删除日常巡检
+     *
+     * @author newspaper
+     * @date  2024/01/08 15:58
+     */
+    @ApiOperationSupport(order = 4)
+    @ApiOperation("删除日常巡检")
+    @CommonLog("删除日常巡检")
+    @PostMapping("/ai/dailyInspection/delete")
+    public CommonResult<String> delete(@RequestBody @Valid @NotEmpty(message = "集合不能为空")
+                                                   CommonValidList<DailyInspectionIdParam> dailyInspectionIdParamList) {
+        dailyInspectionService.delete(dailyInspectionIdParamList);
+        return CommonResult.ok();
+    }
+}

+ 64 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/dailyInspection/entity/DailyInspection.java

@@ -0,0 +1,64 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.ai.dailyInspection.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+import vip.xiaonuo.common.pojo.CommonEntity;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.Date;
+
+/**
+ * 日常巡检实体
+ *
+ * @author newspaper
+ * @date  2024/01/08 15:58
+ **/
+@Getter
+@Setter
+@TableName("daily_inspection")
+public class DailyInspection extends CommonEntity {
+
+    /** id */
+    @TableId
+    @ApiModelProperty(value = "id", position = 1)
+    private String id;
+
+    /** 巡检位置id */
+    @ApiModelProperty(value = "巡检位置id", position = 2)
+    private String unitId;
+
+    /** 巡检时间 */
+    @ApiModelProperty(value = "巡检时间", position = 3)
+    private LocalDateTime inspectTime;
+
+    /** 巡检人员id */
+    @ApiModelProperty(value = "巡检人员id", position = 4)
+    private String inspectPersonId;
+
+    /** 问题描述 */
+    @ApiModelProperty(value = "问题描述", position = 5)
+    private String description;
+
+    /** 问题照片id */
+    @ApiModelProperty(value = "问题照片id", position = 6)
+    private String imgUrl;
+
+    /** 状态 0:待处理 1:已完成 */
+    @ApiModelProperty(value = "状态 0:待处理 1:已完成", position = 7)
+    private Integer status;
+}

+ 32 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/dailyInspection/entity/vo/DailyInspectionImageVo.java

@@ -0,0 +1,32 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.ai.dailyInspection.entity.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.time.LocalDateTime;
+
+/**
+ * 日常巡检实体
+ *
+ * @author newspaper
+ * @date  2024/01/08 15:58
+ **/
+@Getter
+@Setter
+public class DailyInspectionImageVo extends DailyInspectionPageVo{
+    @ApiModelProperty(value = "图片", position = 99)
+    private String[] pages;
+}

+ 60 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/dailyInspection/entity/vo/DailyInspectionPageVo.java

@@ -0,0 +1,60 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.ai.dailyInspection.entity.vo;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+import vip.xiaonuo.common.pojo.CommonEntity;
+
+import java.time.LocalDateTime;
+import java.util.Date;
+
+/**
+ * 日常巡检实体
+ *
+ * @author newspaper
+ * @date  2024/01/08 15:58
+ **/
+@Getter
+@Setter
+public class DailyInspectionPageVo{
+
+    @ApiModelProperty(value = "id", position = 1)
+    private String id;
+
+    /** 巡检位置id */
+    @ApiModelProperty(value = "巡检位置", position = 2)
+    private String unitName;
+
+    @ApiModelProperty(value = "创建时间", position = 3)
+    private LocalDateTime createTime;
+
+    @ApiModelProperty(value = "巡检时间", position = 4)
+    private LocalDateTime inspectTime;
+
+    @ApiModelProperty(value = "巡检人名", position = 5)
+    private String userName;
+
+    @ApiModelProperty(value = "问题描述", position = 6)
+    private String description;
+
+    @ApiModelProperty(value = "问题照片", position = 7)
+    private String imgUrl;
+
+    /** 状态 0:待处理 1:已完成 */
+    @ApiModelProperty(value = "状态 0:待处理 1:已完成", position = 8)
+    private Integer status;
+}

+ 34 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/dailyInspection/enums/DailyInspectionEnum.java

@@ -0,0 +1,34 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.ai.dailyInspection.enums;
+
+import lombok.Getter;
+
+/**
+ * 日常巡检枚举
+ *
+ * @author newspaper
+ * @date  2024/01/08 15:58
+ **/
+@Getter
+public enum DailyInspectionEnum {
+
+    /** 测试 */
+    TEST("TEST");
+
+    private final String value;
+
+    DailyInspectionEnum(String value) {
+        this.value = value;
+    }
+}

+ 28 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/dailyInspection/mapper/DailyInspectionMapper.java

@@ -0,0 +1,28 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.ai.dailyInspection.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import vip.xiaonuo.modular.ai.dailyInspection.entity.DailyInspection;
+import vip.xiaonuo.modular.ai.dailyInspection.entity.vo.DailyInspectionPageVo;
+
+/**
+ * 日常巡检Mapper接口
+ *
+ * @author newspaper
+ * @date  2024/01/08 15:58
+ **/
+public interface DailyInspectionMapper extends BaseMapper<DailyInspection> {
+    Page<DailyInspectionPageVo> page(Page<Object> defaultPage, String userId, Integer status, Integer orgId);
+}

+ 27 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/dailyInspection/mapper/mapping/DailyInspectionMapper.xml

@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="vip.xiaonuo.modular.ai.dailyInspection.mapper.DailyInspectionMapper">
+
+    <select id="page" resultType="vip.xiaonuo.modular.ai.dailyInspection.entity.vo.DailyInspectionPageVo">
+        SELECT
+        d.id,
+        p.fullName AS 'unitName',
+        d.create_time,
+        d.inspect_time,
+        u.NAME AS 'userName',
+        d.description,
+        d.img_url,
+        d.status
+        FROM
+        `daily_inspection` d
+        LEFT JOIN `base_pigpen` p ON w.unit_id = p.id
+        LEFT JOIN `SYS_USER` u ON t.inspect_person_id = u.id
+        WHERE
+        d.inspect_person_id = #{userId} AND t.org_id = #{orgId}
+        <if test="status != null">
+            AND d.status = #{status}
+        </if>
+        ORDER BY
+        d.create_time DESC;
+    </select>
+</mapper>

+ 63 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/dailyInspection/param/DailyInspectionEditParam.java

@@ -0,0 +1,63 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.ai.dailyInspection.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 日常巡检编辑参数
+ *
+ * @author newspaper
+ * @date  2024/01/08 15:58
+ **/
+@Getter
+@Setter
+public class DailyInspectionEditParam {
+
+    /** id */
+    @ApiModelProperty(value = "id", required = true, position = 1)
+    @NotBlank(message = "id不能为空")
+    private String id;
+
+    /** 巡检位置id */
+    @ApiModelProperty(value = "巡检位置id", position = 2)
+    private String locationId;
+
+    /** 巡检时间 */
+    @ApiModelProperty(value = "巡检时间", position = 3)
+    private Date inspectTime;
+
+    /** 巡检人员id */
+    @ApiModelProperty(value = "巡检人员id", position = 4)
+    private String inspectId;
+
+    /** 问题描述 */
+    @ApiModelProperty(value = "问题描述", position = 5)
+    private String description;
+
+    /** 问题照片id */
+    @ApiModelProperty(value = "问题照片id", position = 6)
+    private String imgId;
+
+    /** 状态 0:待处理 1:已完成 */
+    @ApiModelProperty(value = "状态 0:待处理 1:已完成", position = 7)
+    private Integer status;
+
+}

+ 35 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/dailyInspection/param/DailyInspectionIdParam.java

@@ -0,0 +1,35 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.ai.dailyInspection.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+
+/**
+ * 日常巡检Id参数
+ *
+ * @author newspaper
+ * @date  2024/01/08 15:58
+ **/
+@Getter
+@Setter
+public class DailyInspectionIdParam {
+
+    /** id */
+    @ApiModelProperty(value = "id", required = true)
+    @NotBlank(message = "id不能为空")
+    private String id;
+}

+ 50 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/dailyInspection/param/DailyInspectionPageParam.java

@@ -0,0 +1,50 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.ai.dailyInspection.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 日常巡检查询参数
+ *
+ * @author newspaper
+ * @date  2024/01/08 15:58
+ **/
+@Getter
+@Setter
+public class DailyInspectionPageParam {
+
+    /** 当前页 */
+    @ApiModelProperty(value = "当前页码")
+    private Integer current;
+
+    /** 每页条数 */
+    @ApiModelProperty(value = "每页条数")
+    private Integer size;
+
+    /** 组织id */
+    @ApiModelProperty(value = "组织id", position = 3)
+    @NotBlank(message = "orgId不能为空")
+    private Integer orgId;
+
+    /** 状态 0:待处理 1:已完成 */
+    @ApiModelProperty(value = "状态 0:待处理 1:已完成", position = 4)
+    private Integer status;
+
+}

+ 59 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/dailyInspection/service/DailyInspectionService.java

@@ -0,0 +1,59 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.ai.dailyInspection.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.springframework.web.multipart.MultipartFile;
+import vip.xiaonuo.modular.ai.dailyInspection.entity.DailyInspection;
+import vip.xiaonuo.modular.ai.dailyInspection.entity.vo.DailyInspectionImageVo;
+import vip.xiaonuo.modular.ai.dailyInspection.param.DailyInspectionEditParam;
+import vip.xiaonuo.modular.ai.dailyInspection.param.DailyInspectionIdParam;
+import vip.xiaonuo.modular.ai.dailyInspection.param.DailyInspectionPageParam;
+
+import java.io.IOException;
+import java.util.List;
+
+/**
+ * 日常巡检Service接口
+ *
+ * @author newspaper
+ * @date  2024/01/08 15:58
+ **/
+public interface DailyInspectionService extends IService<DailyInspection> {
+
+    /**
+     * 获取日常巡检分页
+     *
+     * @author newspaper
+     * @date  2024/01/08 15:58
+     */
+    Page<DailyInspectionImageVo> page(DailyInspectionPageParam dailyInspectionPageParam);
+
+
+    /**
+     * 删除日常巡检
+     *
+     * @author newspaper
+     * @date  2024/01/08 15:58
+     */
+    void delete(List<DailyInspectionIdParam> dailyInspectionIdParamList);
+
+    /**
+     * 提交日常巡检
+     *
+     * @author newspaper
+     * @date  2024/01/08 15:58
+     */
+    void edit(String id, String inspectTime, String inspectPersonId, String description, MultipartFile img1, MultipartFile img2, MultipartFile img3) throws IOException;
+}

+ 119 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/dailyInspection/service/impl/DailyInspectionServiceImpl.java

@@ -0,0 +1,119 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.ai.dailyInspection.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollStreamUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
+import vip.xiaonuo.auth.core.util.StpLoginUserUtil;
+import vip.xiaonuo.common.enums.CommonSortOrderEnum;
+import vip.xiaonuo.common.page.CommonPageRequest;
+import vip.xiaonuo.modular.ai.dailyInspection.entity.DailyInspection;
+import vip.xiaonuo.modular.ai.dailyInspection.entity.vo.DailyInspectionImageVo;
+import vip.xiaonuo.modular.ai.dailyInspection.entity.vo.DailyInspectionPageVo;
+import vip.xiaonuo.modular.ai.dailyInspection.mapper.DailyInspectionMapper;
+import vip.xiaonuo.modular.ai.dailyInspection.param.DailyInspectionEditParam;
+import vip.xiaonuo.modular.ai.dailyInspection.param.DailyInspectionIdParam;
+import vip.xiaonuo.modular.ai.dailyInspection.param.DailyInspectionPageParam;
+import vip.xiaonuo.modular.ai.dailyInspection.service.DailyInspectionService;
+import vip.xiaonuo.modular.bi.utils.UploadImage;
+
+import java.io.IOException;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 日常巡检Service接口实现类
+ *
+ * @author newspaper
+ * @date  2024/01/08 15:58
+ **/
+@Service
+public class DailyInspectionServiceImpl extends ServiceImpl<DailyInspectionMapper, DailyInspection> implements DailyInspectionService {
+
+    @Autowired
+    private DailyInspectionMapper dailyInspectionMapper;
+    @Autowired
+    private UploadImage uploadImage;
+
+    @Override
+    public Page<DailyInspectionImageVo> page(DailyInspectionPageParam dailyInspectionPageParam) {
+        Integer status = dailyInspectionPageParam.getStatus();
+        String userId = StpLoginUserUtil.getLoginUser().getId();
+        Integer orgId = dailyInspectionPageParam.getOrgId();
+        Page<DailyInspectionPageVo> page = dailyInspectionMapper.page(CommonPageRequest.defaultPage(), userId, status, orgId);
+        Page<DailyInspectionImageVo> dailyInspectionImageVoPage = new Page<>();
+        List dailyInspectionImageVoList = new ArrayList<>();
+        for (DailyInspectionPageVo record : page.getRecords()) {
+            DailyInspectionImageVo dailyInspectionImageVo = new DailyInspectionImageVo();
+            BeanUtil.copyProperties(record,dailyInspectionImageVo);
+            if (ObjectUtil.isNotEmpty(record.getImgUrl())){
+                dailyInspectionImageVo.setPages(record.getImgUrl().split(","));
+            }
+            dailyInspectionImageVoList.add(dailyInspectionImageVo);
+        }
+        dailyInspectionImageVoPage.setRecords(dailyInspectionImageVoList);
+        dailyInspectionImageVoPage.setTotal(page.getTotal());
+        dailyInspectionImageVoPage.setCountId(page.getCountId());
+        dailyInspectionImageVoPage.setCurrent(page.getCurrent());
+        return dailyInspectionImageVoPage;
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void edit(String id, String inspectTime, String inspectPersonId, String description, MultipartFile img1, MultipartFile img2, MultipartFile img3) throws IOException {
+        DailyInspection dailyInspection = this.getById(id);
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy:MM:dd HH:mm:ss");
+        dailyInspection.setInspectTime(LocalDateTime.parse(inspectTime,formatter));
+        dailyInspection.setInspectPersonId(inspectPersonId);
+        dailyInspection.setDescription(description);
+        String imgUrl = "";
+        if (ObjectUtil.isNotEmpty(img1)){
+            if (!uploadImage.getImageCom(img1).equals("上传失败")){
+                imgUrl = uploadImage.getImageCom(img1);
+            }
+        }
+        if (ObjectUtil.isNotEmpty(img2)){
+            if (!uploadImage.getImageCom(img2).equals("上传失败")){
+                imgUrl = imgUrl + "," + uploadImage.getImageCom(img2);
+            }
+        }
+        if (ObjectUtil.isNotEmpty(img3)){
+            if (!uploadImage.getImageCom(img3).equals("上传失败")){
+                imgUrl = imgUrl + "," + uploadImage.getImageCom(img3);
+            }
+        }
+        dailyInspection.setImgUrl(imgUrl);
+        dailyInspection.setStatus(1);
+        this.updateById(dailyInspection);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void delete(List<DailyInspectionIdParam> dailyInspectionIdParamList) {
+        // 执行删除
+        this.removeByIds(CollStreamUtil.toList(dailyInspectionIdParamList, DailyInspectionIdParam::getId));
+    }
+
+
+}

+ 131 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/dirtyCapture/controller/DirtyCaptureController.java

@@ -0,0 +1,131 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.ai.dirtyCapture.controller;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import com.github.xiaoymin.knife4j.annotations.ApiSupport;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+import vip.xiaonuo.common.annotation.CommonLog;
+import vip.xiaonuo.common.pojo.CommonResult;
+import vip.xiaonuo.common.pojo.CommonValidList;
+import vip.xiaonuo.modular.ai.dirtyCapture.entity.DirtyCapture;
+import vip.xiaonuo.modular.ai.dirtyCapture.param.DirtyCaptureAddParam;
+import vip.xiaonuo.modular.ai.dirtyCapture.param.DirtyCaptureEditParam;
+import vip.xiaonuo.modular.ai.dirtyCapture.param.DirtyCaptureIdParam;
+import vip.xiaonuo.modular.ai.dirtyCapture.param.DirtyCapturePageParam;
+import vip.xiaonuo.modular.ai.dirtyCapture.service.DirtyCaptureService;
+
+import javax.annotation.Resource;
+import javax.validation.Valid;
+import javax.validation.constraints.NotEmpty;
+
+/**
+ * 设备镜头脏污控制器
+ *
+ * @author newspaper
+ * @date  2024/01/06 11:30
+ */
+@Api(tags = "设备镜头脏污控制器")
+@ApiSupport(author = "SNOWY_TEAM", order = 1)
+@RestController
+@Validated
+public class DirtyCaptureController {
+
+    @Resource
+    private DirtyCaptureService dirtyCaptureService;
+
+    /**
+     * 获取设备镜头脏污分页
+     *
+     * @author newspaper
+     * @date  2024/01/06 11:30
+     */
+    @ApiOperationSupport(order = 1)
+    @ApiOperation("获取设备镜头脏污分页")
+    @SaCheckPermission("/ai/dirtyCapture/page")
+    @GetMapping("/ai/dirtyCapture/page")
+    public CommonResult<Page<DirtyCapture>> page(DirtyCapturePageParam dirtyCapturePageParam) {
+        return CommonResult.data(dirtyCaptureService.page(dirtyCapturePageParam));
+    }
+
+    /**
+     * 添加设备镜头脏污
+     *
+     * @author newspaper
+     * @date  2024/01/06 11:30
+     */
+    @ApiOperationSupport(order = 2)
+    @ApiOperation("添加设备镜头脏污")
+    @CommonLog("添加设备镜头脏污")
+    @SaCheckPermission("/ai/dirtyCapture/add")
+    @PostMapping("/ai/dirtyCapture/add")
+    public CommonResult<String> add(@RequestBody @Valid DirtyCaptureAddParam dirtyCaptureAddParam) {
+        dirtyCaptureService.add(dirtyCaptureAddParam);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 编辑设备镜头脏污
+     *
+     * @author newspaper
+     * @date  2024/01/06 11:30
+     */
+    @ApiOperationSupport(order = 3)
+    @ApiOperation("编辑设备镜头脏污")
+    @CommonLog("编辑设备镜头脏污")
+    @SaCheckPermission("/ai/dirtyCapture/edit")
+    @PostMapping("/ai/dirtyCapture/edit")
+    public CommonResult<String> edit(@RequestBody @Valid DirtyCaptureEditParam dirtyCaptureEditParam) {
+        dirtyCaptureService.edit(dirtyCaptureEditParam);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 删除设备镜头脏污
+     *
+     * @author newspaper
+     * @date  2024/01/06 11:30
+     */
+    @ApiOperationSupport(order = 4)
+    @ApiOperation("删除设备镜头脏污")
+    @CommonLog("删除设备镜头脏污")
+    @SaCheckPermission("/ai/dirtyCapture/delete")
+    @PostMapping("/ai/dirtyCapture/delete")
+    public CommonResult<String> delete(@RequestBody @Valid @NotEmpty(message = "集合不能为空")
+                                                   CommonValidList<DirtyCaptureIdParam> dirtyCaptureIdParamList) {
+        dirtyCaptureService.delete(dirtyCaptureIdParamList);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 获取设备镜头脏污详情
+     *
+     * @author newspaper
+     * @date  2024/01/06 11:30
+     */
+    @ApiOperationSupport(order = 5)
+    @ApiOperation("获取设备镜头脏污详情")
+    @SaCheckPermission("/ai/dirtyCapture/detail")
+    @GetMapping("/ai/dirtyCapture/detail")
+    public CommonResult<DirtyCapture> detail(@Valid DirtyCaptureIdParam dirtyCaptureIdParam) {
+        return CommonResult.data(dirtyCaptureService.detail(dirtyCaptureIdParam));
+    }
+}

+ 63 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/dirtyCapture/entity/DirtyCapture.java

@@ -0,0 +1,63 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.ai.dirtyCapture.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 设备镜头脏污实体
+ *
+ * @author newspaper
+ * @date  2024/01/06 11:30
+ **/
+@Getter
+@Setter
+@TableName("dirty_capture")
+public class DirtyCapture {
+
+    /** id */
+    @TableId
+    @ApiModelProperty(value = "id", position = 1)
+    private String id;
+
+    /** 时间 */
+    @ApiModelProperty(value = "时间", position = 2)
+    private Date capTime;
+
+    /** 照片 */
+    @ApiModelProperty(value = "照片", position = 3)
+    private String imgUrl;
+
+    /** 设备名称 */
+    @ApiModelProperty(value = "设备名称", position = 4)
+    private String devName;
+
+    /** 通知人 */
+    @ApiModelProperty(value = "通知人", position = 5)
+    private String notifier;
+
+    /** 组织id */
+    @ApiModelProperty(value = "组织id", position = 6)
+    private String orgId;
+
+    /** 删除标志 */
+    @ApiModelProperty(value = "删除标志", position = 7)
+    @TableLogic
+    @TableField(fill = FieldFill.INSERT)
+    private String deleteFlag;
+}

+ 34 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/dirtyCapture/enums/DirtyCaptureEnum.java

@@ -0,0 +1,34 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.ai.dirtyCapture.enums;
+
+import lombok.Getter;
+
+/**
+ * 设备镜头脏污枚举
+ *
+ * @author newspaper
+ * @date  2024/01/06 11:30
+ **/
+@Getter
+public enum DirtyCaptureEnum {
+
+    /** 测试 */
+    TEST("TEST");
+
+    private final String value;
+
+    DirtyCaptureEnum(String value) {
+        this.value = value;
+    }
+}

+ 25 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/dirtyCapture/mapper/DirtyCaptureMapper.java

@@ -0,0 +1,25 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.ai.dirtyCapture.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import vip.xiaonuo.modular.ai.dirtyCapture.entity.DirtyCapture;
+
+/**
+ * 设备镜头脏污Mapper接口
+ *
+ * @author newspaper
+ * @date  2024/01/06 11:30
+ **/
+public interface DirtyCaptureMapper extends BaseMapper<DirtyCapture> {
+}

+ 5 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/dirtyCapture/mapper/mapping/DirtyCaptureMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="vip.xiaonuo.modular.ai.dirtyCapture.mapper.DirtyCaptureMapper">
+
+</mapper>

+ 54 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/dirtyCapture/param/DirtyCaptureAddParam.java

@@ -0,0 +1,54 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.ai.dirtyCapture.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 设备镜头脏污添加参数
+ *
+ * @author newspaper
+ * @date  2024/01/06 11:30
+ **/
+@Getter
+@Setter
+public class DirtyCaptureAddParam {
+
+    /** 时间 */
+    @ApiModelProperty(value = "时间", position = 2)
+    private Date capTime;
+
+    /** 照片 */
+    @ApiModelProperty(value = "照片", position = 3)
+    private String imgUrl;
+
+    /** 设备名称 */
+    @ApiModelProperty(value = "设备名称", position = 4)
+    private String devName;
+
+    /** 通知人 */
+    @ApiModelProperty(value = "通知人", position = 5)
+    private String notifier;
+
+    /** 组织id */
+    @ApiModelProperty(value = "组织id", position = 6)
+    private String orgId;
+
+}

+ 59 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/dirtyCapture/param/DirtyCaptureEditParam.java

@@ -0,0 +1,59 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.ai.dirtyCapture.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 设备镜头脏污编辑参数
+ *
+ * @author newspaper
+ * @date  2024/01/06 11:30
+ **/
+@Getter
+@Setter
+public class DirtyCaptureEditParam {
+
+    /** id */
+    @ApiModelProperty(value = "id", required = true, position = 1)
+    @NotBlank(message = "id不能为空")
+    private String id;
+
+    /** 时间 */
+    @ApiModelProperty(value = "时间", position = 2)
+    private Date capTime;
+
+    /** 照片 */
+    @ApiModelProperty(value = "照片", position = 3)
+    private String imgUrl;
+
+    /** 设备名称 */
+    @ApiModelProperty(value = "设备名称", position = 4)
+    private String devName;
+
+    /** 通知人 */
+    @ApiModelProperty(value = "通知人", position = 5)
+    private String notifier;
+
+    /** 组织id */
+    @ApiModelProperty(value = "组织id", position = 6)
+    private String orgId;
+
+}

+ 35 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/dirtyCapture/param/DirtyCaptureIdParam.java

@@ -0,0 +1,35 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.ai.dirtyCapture.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+
+/**
+ * 设备镜头脏污Id参数
+ *
+ * @author newspaper
+ * @date  2024/01/06 11:30
+ **/
+@Getter
+@Setter
+public class DirtyCaptureIdParam {
+
+    /** id */
+    @ApiModelProperty(value = "id", required = true)
+    @NotBlank(message = "id不能为空")
+    private String id;
+}

+ 61 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/dirtyCapture/param/DirtyCapturePageParam.java

@@ -0,0 +1,61 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.ai.dirtyCapture.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+import vip.xiaonuo.core.param.OrgIdParam;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 设备镜头脏污查询参数
+ *
+ * @author newspaper
+ * @date  2024/01/06 11:30
+ **/
+@Getter
+@Setter
+public class DirtyCapturePageParam extends OrgIdParam {
+
+    /** 当前页 */
+    @ApiModelProperty(value = "当前页码")
+    private Integer current;
+
+    /** 每页条数 */
+    @ApiModelProperty(value = "每页条数")
+    private Integer size;
+
+    /** 排序字段 */
+    @ApiModelProperty(value = "排序字段,字段驼峰名称,如:userName")
+    private String sortField;
+
+    /** 排序方式 */
+    @ApiModelProperty(value = "排序方式,升序:ASCEND;降序:DESCEND")
+    private String sortOrder;
+
+    /** 关键词 */
+    @ApiModelProperty(value = "关键词")
+    private String searchKey;
+
+    /** 时间开始 */
+    @ApiModelProperty(value = "时间开始")
+    private String startCapTime;
+
+    /** 时间结束 */
+    @ApiModelProperty(value = "时间结束")
+    private String endCapTime;
+
+}

+ 80 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/dirtyCapture/service/DirtyCaptureService.java

@@ -0,0 +1,80 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.ai.dirtyCapture.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import vip.xiaonuo.modular.ai.dirtyCapture.entity.DirtyCapture;
+import vip.xiaonuo.modular.ai.dirtyCapture.param.DirtyCaptureAddParam;
+import vip.xiaonuo.modular.ai.dirtyCapture.param.DirtyCaptureEditParam;
+import vip.xiaonuo.modular.ai.dirtyCapture.param.DirtyCaptureIdParam;
+import vip.xiaonuo.modular.ai.dirtyCapture.param.DirtyCapturePageParam;
+
+import java.util.List;
+
+/**
+ * 设备镜头脏污Service接口
+ *
+ * @author newspaper
+ * @date  2024/01/06 11:30
+ **/
+public interface DirtyCaptureService extends IService<DirtyCapture> {
+
+    /**
+     * 获取设备镜头脏污分页
+     *
+     * @author newspaper
+     * @date  2024/01/06 11:30
+     */
+    Page<DirtyCapture> page(DirtyCapturePageParam dirtyCapturePageParam);
+
+    /**
+     * 添加设备镜头脏污
+     *
+     * @author newspaper
+     * @date  2024/01/06 11:30
+     */
+    void add(DirtyCaptureAddParam dirtyCaptureAddParam);
+
+    /**
+     * 编辑设备镜头脏污
+     *
+     * @author newspaper
+     * @date  2024/01/06 11:30
+     */
+    void edit(DirtyCaptureEditParam dirtyCaptureEditParam);
+
+    /**
+     * 删除设备镜头脏污
+     *
+     * @author newspaper
+     * @date  2024/01/06 11:30
+     */
+    void delete(List<DirtyCaptureIdParam> dirtyCaptureIdParamList);
+
+    /**
+     * 获取设备镜头脏污详情
+     *
+     * @author newspaper
+     * @date  2024/01/06 11:30
+     */
+    DirtyCapture detail(DirtyCaptureIdParam dirtyCaptureIdParam);
+
+    /**
+     * 获取设备镜头脏污详情
+     *
+     * @author newspaper
+     * @date  2024/01/06 11:30
+     **/
+    DirtyCapture queryEntity(String id);
+}

+ 98 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/dirtyCapture/service/impl/DirtyCaptureServiceImpl.java

@@ -0,0 +1,98 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.ai.dirtyCapture.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollStreamUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import vip.xiaonuo.common.enums.CommonSortOrderEnum;
+import vip.xiaonuo.common.exception.CommonException;
+import vip.xiaonuo.common.page.CommonPageRequest;
+import vip.xiaonuo.modular.ai.dirtyCapture.entity.DirtyCapture;
+import vip.xiaonuo.modular.ai.dirtyCapture.mapper.DirtyCaptureMapper;
+import vip.xiaonuo.modular.ai.dirtyCapture.param.DirtyCaptureAddParam;
+import vip.xiaonuo.modular.ai.dirtyCapture.param.DirtyCaptureEditParam;
+import vip.xiaonuo.modular.ai.dirtyCapture.param.DirtyCaptureIdParam;
+import vip.xiaonuo.modular.ai.dirtyCapture.param.DirtyCapturePageParam;
+import vip.xiaonuo.modular.ai.dirtyCapture.service.DirtyCaptureService;
+
+import java.util.List;
+
+/**
+ * 设备镜头脏污Service接口实现类
+ *
+ * @author newspaper
+ * @date  2024/01/06 11:30
+ **/
+@Service
+public class DirtyCaptureServiceImpl extends ServiceImpl<DirtyCaptureMapper, DirtyCapture> implements DirtyCaptureService {
+
+    @Override
+    public Page<DirtyCapture> page(DirtyCapturePageParam dirtyCapturePageParam) {
+        QueryWrapper<DirtyCapture> queryWrapper = new QueryWrapper<>();
+        if(ObjectUtil.isNotEmpty(dirtyCapturePageParam.getStartCapTime()) && ObjectUtil.isNotEmpty(dirtyCapturePageParam.getEndCapTime())) {
+            queryWrapper.lambda().between(DirtyCapture::getCapTime, dirtyCapturePageParam.getStartCapTime(), dirtyCapturePageParam.getEndCapTime());
+        }
+        if(ObjectUtil.isAllNotEmpty(dirtyCapturePageParam.getSortField(), dirtyCapturePageParam.getSortOrder())) {
+            CommonSortOrderEnum.validate(dirtyCapturePageParam.getSortOrder());
+            queryWrapper.orderBy(true, dirtyCapturePageParam.getSortOrder().equals(CommonSortOrderEnum.ASC.getValue()),
+                    StrUtil.toUnderlineCase(dirtyCapturePageParam.getSortField()));
+        } else {
+            queryWrapper.lambda().orderByAsc(DirtyCapture::getId);
+        }
+        queryWrapper.lambda().eq(DirtyCapture::getOrgId,dirtyCapturePageParam.getOrgId());
+        return this.page(CommonPageRequest.defaultPage(), queryWrapper);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void add(DirtyCaptureAddParam dirtyCaptureAddParam) {
+        DirtyCapture dirtyCapture = BeanUtil.toBean(dirtyCaptureAddParam, DirtyCapture.class);
+        this.save(dirtyCapture);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void edit(DirtyCaptureEditParam dirtyCaptureEditParam) {
+        DirtyCapture dirtyCapture = this.queryEntity(dirtyCaptureEditParam.getId());
+        BeanUtil.copyProperties(dirtyCaptureEditParam, dirtyCapture);
+        this.updateById(dirtyCapture);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void delete(List<DirtyCaptureIdParam> dirtyCaptureIdParamList) {
+        // 执行删除
+        this.removeByIds(CollStreamUtil.toList(dirtyCaptureIdParamList, DirtyCaptureIdParam::getId));
+    }
+
+    @Override
+    public DirtyCapture detail(DirtyCaptureIdParam dirtyCaptureIdParam) {
+        return this.queryEntity(dirtyCaptureIdParam.getId());
+    }
+
+    @Override
+    public DirtyCapture queryEntity(String id) {
+        DirtyCapture dirtyCapture = this.getById(id);
+        if(ObjectUtil.isEmpty(dirtyCapture)) {
+            throw new CommonException("设备镜头脏污不存在,id值为:{}", id);
+        }
+        return dirtyCapture;
+    }
+}

+ 142 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/personCapture/controller/PersonCaptureController.java

@@ -0,0 +1,142 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.ai.personCapture.controller;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import com.github.xiaoymin.knife4j.annotations.ApiSupport;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+import vip.xiaonuo.common.annotation.CommonLog;
+import vip.xiaonuo.common.pojo.CommonResult;
+import vip.xiaonuo.common.pojo.CommonValidList;
+import vip.xiaonuo.core.param.OrgIdParam;
+import vip.xiaonuo.modular.ai.carCapture.entity.vo.CarCapturePastVo;
+import vip.xiaonuo.modular.ai.personCapture.entity.PersonCapture;
+import vip.xiaonuo.modular.ai.personCapture.entity.vo.PersonCapturePastVo;
+import vip.xiaonuo.modular.ai.personCapture.param.PersonCaptureAddParam;
+import vip.xiaonuo.modular.ai.personCapture.param.PersonCaptureEditParam;
+import vip.xiaonuo.modular.ai.personCapture.param.PersonCaptureIdParam;
+import vip.xiaonuo.modular.ai.personCapture.param.PersonCapturePageParam;
+import vip.xiaonuo.modular.ai.personCapture.service.PersonCaptureService;
+
+import javax.annotation.Resource;
+import javax.validation.Valid;
+import javax.validation.constraints.NotEmpty;
+
+/**
+ * 人员识别控制器
+ *
+ * @author newspaper
+ * @date  2024/01/06 13:56
+ */
+@Api(tags = "人员识别控制器")
+@ApiSupport(author = "SNOWY_TEAM", order = 1)
+@RestController
+@Validated
+public class PersonCaptureController {
+
+    @Resource
+    private PersonCaptureService personCaptureService;
+
+    /**
+     * 获取人员识别分页
+     *
+     * @author newspaper
+     * @date  2024/01/06 13:56
+     */
+    @ApiOperationSupport(order = 1)
+    @ApiOperation("获取人员识别分页")
+    @GetMapping("/ai/personCapture/page")
+    public CommonResult<Page<PersonCapture>> page(PersonCapturePageParam personCapturePageParam) {
+        return CommonResult.data(personCaptureService.page(personCapturePageParam));
+    }
+
+    /**
+     * 添加人员识别
+     *
+     * @author newspaper
+     * @date  2024/01/06 13:56
+     */
+    @ApiOperationSupport(order = 2)
+    @ApiOperation("添加人员识别")
+    @CommonLog("添加人员识别")
+    @PostMapping("/ai/personCapture/add")
+    public CommonResult<String> add(@RequestBody @Valid PersonCaptureAddParam personCaptureAddParam) {
+        personCaptureService.add(personCaptureAddParam);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 编辑人员识别
+     *
+     * @author newspaper
+     * @date  2024/01/06 13:56
+     */
+    @ApiOperationSupport(order = 3)
+    @ApiOperation("编辑人员识别")
+    @CommonLog("编辑人员识别")
+    @PostMapping("/ai/personCapture/edit")
+    public CommonResult<String> edit(@RequestBody @Valid PersonCaptureEditParam personCaptureEditParam) {
+        personCaptureService.edit(personCaptureEditParam);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 删除人员识别
+     *
+     * @author newspaper
+     * @date  2024/01/06 13:56
+     */
+    @ApiOperationSupport(order = 4)
+    @ApiOperation("删除人员识别")
+    @CommonLog("删除人员识别")
+    @PostMapping("/ai/personCapture/delete")
+    public CommonResult<String> delete(@RequestBody @Valid @NotEmpty(message = "集合不能为空")
+                                                   CommonValidList<PersonCaptureIdParam> personCaptureIdParamList) {
+        personCaptureService.delete(personCaptureIdParamList);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 获取人员识别详情
+     *
+     * @author newspaper
+     * @date  2024/01/06 13:56
+     */
+    @ApiOperationSupport(order = 5)
+    @ApiOperation("获取人员识别详情")
+    @GetMapping("/ai/personCapture/detail")
+    public CommonResult<PersonCapture> detail(@Valid PersonCaptureIdParam personCaptureIdParam) {
+        return CommonResult.data(personCaptureService.detail(personCaptureIdParam));
+    }
+
+    /**
+     * 获取过去12小时人员识别
+     *
+     * @author newspaper
+     * @date  2024/01/06 13:56
+     */
+    @ApiOperationSupport(order = 6)
+    @ApiOperation("获取过去12小时人员识别")
+    @GetMapping("/ai/personCapture/getPastCapture")
+    public CommonResult<PersonCapturePastVo> getPastCapture(@Valid OrgIdParam orgIdParam) {
+        return CommonResult.data(personCaptureService.getPastCapture(orgIdParam));
+    }
+}

+ 75 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/personCapture/entity/PersonCapture.java

@@ -0,0 +1,75 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.ai.personCapture.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 人员识别实体
+ *
+ * @author newspaper
+ * @date  2024/01/06 13:56
+ **/
+@Getter
+@Setter
+@TableName("person_capture")
+public class PersonCapture {
+
+    /** id */
+    @TableId
+    @ApiModelProperty(value = "id", position = 1)
+    private String id;
+
+    /** 时间 */
+    @ApiModelProperty(value = "时间", position = 2)
+    private Date capTime;
+
+    /** 姓名 */
+    @ApiModelProperty(value = "姓名", position = 3)
+    private String name;
+
+    /** 类型 */
+    @ApiModelProperty(value = "类型", position = 4)
+    private Integer personType;
+
+    /** 照片 */
+    @ApiModelProperty(value = "照片", position = 5)
+    private String carImgUrl;
+
+    /** 尝试进入区域 */
+    @ApiModelProperty(value = "尝试进入区域", position = 6)
+    private String devName;
+
+    /** 结果 */
+    @ApiModelProperty(value = "结果", position = 7)
+    private String capResult;
+
+    /** 通知人 */
+    @ApiModelProperty(value = "通知人", position = 8)
+    private String notifier;
+
+    /** 组织id */
+    @ApiModelProperty(value = "组织id", position = 9)
+    private String orgId;
+
+    /** 删除标志 */
+    @ApiModelProperty(value = "删除标志", position = 10)
+    @TableLogic
+    @TableField(fill = FieldFill.INSERT)
+    private String deleteFlag;
+}

+ 15 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/personCapture/entity/vo/PersonCaptureHourVo.java

@@ -0,0 +1,15 @@
+package vip.xiaonuo.modular.ai.personCapture.entity.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+public class PersonCaptureHourVo {
+
+    @ApiModelProperty(value = "时间", position = 1)
+    private LocalDateTime time;
+    @ApiModelProperty(value = "数量", position = 2)
+    private Integer value;
+}

+ 15 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/personCapture/entity/vo/PersonCapturePastVo.java

@@ -0,0 +1,15 @@
+package vip.xiaonuo.modular.ai.personCapture.entity.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import vip.xiaonuo.modular.ai.carCapture.entity.vo.CarCaptureHourVo;
+
+import java.util.List;
+
+@Data
+public class PersonCapturePastVo {
+    @ApiModelProperty(value = "总数", position = 1)
+    private long total;
+    @ApiModelProperty(value = "详情", position = 1)
+    private List<PersonCaptureHourVo> list;
+}

+ 34 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/personCapture/enums/PersonCaptureEnum.java

@@ -0,0 +1,34 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.ai.personCapture.enums;
+
+import lombok.Getter;
+
+/**
+ * 人员识别枚举
+ *
+ * @author newspaper
+ * @date  2024/01/06 13:56
+ **/
+@Getter
+public enum PersonCaptureEnum {
+
+    /** 测试 */
+    TEST("TEST");
+
+    private final String value;
+
+    PersonCaptureEnum(String value) {
+        this.value = value;
+    }
+}

+ 29 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/personCapture/mapper/PersonCaptureMapper.java

@@ -0,0 +1,29 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.ai.personCapture.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import vip.xiaonuo.modular.ai.personCapture.entity.PersonCapture;
+import vip.xiaonuo.modular.ai.personCapture.entity.vo.PersonCaptureHourVo;
+
+import java.util.List;
+
+/**
+ * 人员识别Mapper接口
+ *
+ * @author newspaper
+ * @date  2024/01/06 13:56
+ **/
+public interface PersonCaptureMapper extends BaseMapper<PersonCapture> {
+    List<PersonCaptureHourVo> listPast(String orgId);
+}

+ 18 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/personCapture/mapper/mapping/PersonCaptureMapper.xml

@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="vip.xiaonuo.modular.ai.personCapture.mapper.PersonCaptureMapper">
+
+    <select id="listPast" resultType="vip.xiaonuo.modular.ai.personCapture.entity.vo.PersonCaptureHourVo">
+        SELECT
+            DATE_FORMAT(cap_time, "%Y-%m-%d %H:00:00") AS time,
+            COUNT(*) as value
+        FROM
+            `person_capture`
+        WHERE
+            org_id = #{orgId} AND cap_time BETWEEN NOW() - INTERVAL 12 HOUR AND NOW()
+        GROUP BY
+            DATE_FORMAT(cap_time, "%Y-%m-%d %H:00:00");
+        ORDER BY
+            cap_time ASC
+    </select>
+</mapper>

+ 66 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/personCapture/param/PersonCaptureAddParam.java

@@ -0,0 +1,66 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.ai.personCapture.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 人员识别添加参数
+ *
+ * @author newspaper
+ * @date  2024/01/06 13:56
+ **/
+@Getter
+@Setter
+public class PersonCaptureAddParam {
+
+    /** 时间 */
+    @ApiModelProperty(value = "时间", position = 2)
+    private Date capTime;
+
+    /** 姓名 */
+    @ApiModelProperty(value = "姓名", position = 3)
+    private String name;
+
+    /** 类型 */
+    @ApiModelProperty(value = "类型", position = 4)
+    private Integer personType;
+
+    /** 照片 */
+    @ApiModelProperty(value = "照片", position = 5)
+    private String carImgUrl;
+
+    /** 尝试进入区域 */
+    @ApiModelProperty(value = "尝试进入区域", position = 6)
+    private String devName;
+
+    /** 结果 */
+    @ApiModelProperty(value = "结果", position = 7)
+    private String capResult;
+
+    /** 通知人 */
+    @ApiModelProperty(value = "通知人", position = 8)
+    private String notifier;
+
+    /** 组织id */
+    @ApiModelProperty(value = "组织id", position = 9)
+    private String orgId;
+
+}

+ 71 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/personCapture/param/PersonCaptureEditParam.java

@@ -0,0 +1,71 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.ai.personCapture.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 人员识别编辑参数
+ *
+ * @author newspaper
+ * @date  2024/01/06 13:56
+ **/
+@Getter
+@Setter
+public class PersonCaptureEditParam {
+
+    /** id */
+    @ApiModelProperty(value = "id", required = true, position = 1)
+    @NotBlank(message = "id不能为空")
+    private String id;
+
+    /** 时间 */
+    @ApiModelProperty(value = "时间", position = 2)
+    private Date capTime;
+
+    /** 姓名 */
+    @ApiModelProperty(value = "姓名", position = 3)
+    private String name;
+
+    /** 类型 */
+    @ApiModelProperty(value = "类型", position = 4)
+    private Integer personType;
+
+    /** 照片 */
+    @ApiModelProperty(value = "照片", position = 5)
+    private String carImgUrl;
+
+    /** 尝试进入区域 */
+    @ApiModelProperty(value = "尝试进入区域", position = 6)
+    private String devName;
+
+    /** 结果 */
+    @ApiModelProperty(value = "结果", position = 7)
+    private String capResult;
+
+    /** 通知人 */
+    @ApiModelProperty(value = "通知人", position = 8)
+    private String notifier;
+
+    /** 组织id */
+    @ApiModelProperty(value = "组织id", position = 9)
+    private String orgId;
+
+}

+ 35 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/personCapture/param/PersonCaptureIdParam.java

@@ -0,0 +1,35 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.ai.personCapture.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+
+/**
+ * 人员识别Id参数
+ *
+ * @author newspaper
+ * @date  2024/01/06 13:56
+ **/
+@Getter
+@Setter
+public class PersonCaptureIdParam {
+
+    /** id */
+    @ApiModelProperty(value = "id", required = true)
+    @NotBlank(message = "id不能为空")
+    private String id;
+}

+ 69 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/personCapture/param/PersonCapturePageParam.java

@@ -0,0 +1,69 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.ai.personCapture.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+import vip.xiaonuo.core.param.OrgIdParam;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 人员识别查询参数
+ *
+ * @author newspaper
+ * @date  2024/01/06 13:56
+ **/
+@Getter
+@Setter
+public class PersonCapturePageParam extends OrgIdParam {
+
+    /** 当前页 */
+    @ApiModelProperty(value = "当前页码")
+    private Integer current;
+
+    /** 每页条数 */
+    @ApiModelProperty(value = "每页条数")
+    private Integer size;
+
+    /** 排序字段 */
+    @ApiModelProperty(value = "排序字段,字段驼峰名称,如:userName")
+    private String sortField;
+
+    /** 排序方式 */
+    @ApiModelProperty(value = "排序方式,升序:ASCEND;降序:DESCEND")
+    private String sortOrder;
+
+    /** 关键词 */
+    @ApiModelProperty(value = "关键词")
+    private String searchKey;
+
+    /** 时间开始 */
+    @ApiModelProperty(value = "时间开始")
+    private String startCapTime;
+
+    /** 时间结束 */
+    @ApiModelProperty(value = "时间结束")
+    private String endCapTime;
+
+    /** 类型 */
+    @ApiModelProperty(value = "类型")
+    private Integer personType;
+
+    /** 结果 */
+    @ApiModelProperty(value = "结果")
+    private String capResult;
+
+}

+ 84 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/personCapture/service/PersonCaptureService.java

@@ -0,0 +1,84 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.ai.personCapture.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import vip.xiaonuo.core.param.OrgIdParam;
+import vip.xiaonuo.modular.ai.personCapture.entity.PersonCapture;
+import vip.xiaonuo.modular.ai.personCapture.entity.vo.PersonCapturePastVo;
+import vip.xiaonuo.modular.ai.personCapture.param.PersonCaptureAddParam;
+import vip.xiaonuo.modular.ai.personCapture.param.PersonCaptureEditParam;
+import vip.xiaonuo.modular.ai.personCapture.param.PersonCaptureIdParam;
+import vip.xiaonuo.modular.ai.personCapture.param.PersonCapturePageParam;
+
+import java.util.List;
+
+/**
+ * 人员识别Service接口
+ *
+ * @author newspaper
+ * @date  2024/01/06 13:56
+ **/
+public interface PersonCaptureService extends IService<PersonCapture> {
+
+    /**
+     * 获取人员识别分页
+     *
+     * @author newspaper
+     * @date  2024/01/06 13:56
+     */
+    Page<PersonCapture> page(PersonCapturePageParam personCapturePageParam);
+
+    /**
+     * 添加人员识别
+     *
+     * @author newspaper
+     * @date  2024/01/06 13:56
+     */
+    void add(PersonCaptureAddParam personCaptureAddParam);
+
+    /**
+     * 编辑人员识别
+     *
+     * @author newspaper
+     * @date  2024/01/06 13:56
+     */
+    void edit(PersonCaptureEditParam personCaptureEditParam);
+
+    /**
+     * 删除人员识别
+     *
+     * @author newspaper
+     * @date  2024/01/06 13:56
+     */
+    void delete(List<PersonCaptureIdParam> personCaptureIdParamList);
+
+    /**
+     * 获取人员识别详情
+     *
+     * @author newspaper
+     * @date  2024/01/06 13:56
+     */
+    PersonCapture detail(PersonCaptureIdParam personCaptureIdParam);
+
+    /**
+     * 获取人员识别详情
+     *
+     * @author newspaper
+     * @date  2024/01/06 13:56
+     **/
+    PersonCapture queryEntity(String id);
+
+    PersonCapturePastVo getPastCapture(OrgIdParam orgIdParam);
+}

+ 132 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/personCapture/service/impl/PersonCaptureServiceImpl.java

@@ -0,0 +1,132 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.ai.personCapture.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollStreamUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import vip.xiaonuo.common.enums.CommonSortOrderEnum;
+import vip.xiaonuo.common.exception.CommonException;
+import vip.xiaonuo.common.page.CommonPageRequest;
+import vip.xiaonuo.core.param.OrgIdParam;
+import vip.xiaonuo.modular.ai.carCapture.entity.CarCapture;
+import vip.xiaonuo.modular.ai.carCapture.entity.vo.CarCaptureHourVo;
+import vip.xiaonuo.modular.ai.carCapture.entity.vo.CarCapturePastVo;
+import vip.xiaonuo.modular.ai.personCapture.entity.PersonCapture;
+import vip.xiaonuo.modular.ai.personCapture.entity.vo.PersonCaptureHourVo;
+import vip.xiaonuo.modular.ai.personCapture.entity.vo.PersonCapturePastVo;
+import vip.xiaonuo.modular.ai.personCapture.mapper.PersonCaptureMapper;
+import vip.xiaonuo.modular.ai.personCapture.param.PersonCaptureAddParam;
+import vip.xiaonuo.modular.ai.personCapture.param.PersonCaptureEditParam;
+import vip.xiaonuo.modular.ai.personCapture.param.PersonCaptureIdParam;
+import vip.xiaonuo.modular.ai.personCapture.param.PersonCapturePageParam;
+import vip.xiaonuo.modular.ai.personCapture.service.PersonCaptureService;
+
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.List;
+
+/**
+ * 人员识别Service接口实现类
+ *
+ * @author newspaper
+ * @date  2024/01/06 13:56
+ **/
+@Service
+public class PersonCaptureServiceImpl extends ServiceImpl<PersonCaptureMapper, PersonCapture> implements PersonCaptureService {
+
+    @Autowired
+    private PersonCaptureMapper personCaptureMapper;
+
+    @Override
+    public Page<PersonCapture> page(PersonCapturePageParam personCapturePageParam) {
+        QueryWrapper<PersonCapture> queryWrapper = new QueryWrapper<>();
+        if(ObjectUtil.isNotEmpty(personCapturePageParam.getStartCapTime()) && ObjectUtil.isNotEmpty(personCapturePageParam.getEndCapTime())) {
+            queryWrapper.lambda().between(PersonCapture::getCapTime, personCapturePageParam.getStartCapTime(), personCapturePageParam.getEndCapTime());
+        }
+        if(ObjectUtil.isNotEmpty(personCapturePageParam.getPersonType())) {
+            queryWrapper.lambda().eq(PersonCapture::getPersonType, personCapturePageParam.getPersonType());
+        }
+        if(ObjectUtil.isNotEmpty(personCapturePageParam.getCapResult())) {
+            queryWrapper.lambda().eq(PersonCapture::getCapResult, personCapturePageParam.getCapResult());
+        }
+        if(ObjectUtil.isAllNotEmpty(personCapturePageParam.getSortField(), personCapturePageParam.getSortOrder())) {
+            CommonSortOrderEnum.validate(personCapturePageParam.getSortOrder());
+            queryWrapper.orderBy(true, personCapturePageParam.getSortOrder().equals(CommonSortOrderEnum.ASC.getValue()),
+                    StrUtil.toUnderlineCase(personCapturePageParam.getSortField()));
+        } else {
+            queryWrapper.lambda().orderByAsc(PersonCapture::getId);
+        }
+        queryWrapper.lambda().eq(PersonCapture::getOrgId,personCapturePageParam.getOrgId());
+        return this.page(CommonPageRequest.defaultPage(), queryWrapper);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void add(PersonCaptureAddParam personCaptureAddParam) {
+        PersonCapture personCapture = BeanUtil.toBean(personCaptureAddParam, PersonCapture.class);
+        this.save(personCapture);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void edit(PersonCaptureEditParam personCaptureEditParam) {
+        PersonCapture personCapture = this.queryEntity(personCaptureEditParam.getId());
+        BeanUtil.copyProperties(personCaptureEditParam, personCapture);
+        this.updateById(personCapture);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void delete(List<PersonCaptureIdParam> personCaptureIdParamList) {
+        // 执行删除
+        this.removeByIds(CollStreamUtil.toList(personCaptureIdParamList, PersonCaptureIdParam::getId));
+    }
+
+    @Override
+    public PersonCapture detail(PersonCaptureIdParam personCaptureIdParam) {
+        return this.queryEntity(personCaptureIdParam.getId());
+    }
+
+    @Override
+    public PersonCapture queryEntity(String id) {
+        PersonCapture personCapture = this.getById(id);
+        if(ObjectUtil.isEmpty(personCapture)) {
+            throw new CommonException("人员识别不存在,id值为:{}", id);
+        }
+        return personCapture;
+    }
+
+    @Override
+    public PersonCapturePastVo getPastCapture(OrgIdParam orgIdParam) {
+        PersonCapturePastVo personCapturePastVo = new PersonCapturePastVo();
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+        // 获取当前时间
+        LocalDateTime currentTime = LocalDateTime.now();
+        // 计算12小时前的时间
+        LocalDateTime twelveHoursAgo = currentTime.minusHours(12);
+        String twelveHoursAgoFormatted = twelveHoursAgo.format(formatter);
+        long count = this.count(new QueryWrapper<PersonCapture>().lambda().eq(PersonCapture::getOrgId, orgIdParam.getOrgId()).ge(PersonCapture::getCapTime, twelveHoursAgoFormatted));
+        personCapturePastVo.setTotal(count);
+        List<PersonCaptureHourVo> carCaptureHourVos = personCaptureMapper.listPast(orgIdParam.getOrgId());
+        personCapturePastVo.setList(carCaptureHourVos);
+        return personCapturePastVo;
+    }
+}

+ 131 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/speciesCapture/controller/SpeciesCaptureController.java

@@ -0,0 +1,131 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.ai.speciesCapture.controller;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import com.github.xiaoymin.knife4j.annotations.ApiSupport;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+import vip.xiaonuo.common.annotation.CommonLog;
+import vip.xiaonuo.common.pojo.CommonResult;
+import vip.xiaonuo.common.pojo.CommonValidList;
+import vip.xiaonuo.modular.ai.speciesCapture.entity.SpeciesCapture;
+import vip.xiaonuo.modular.ai.speciesCapture.param.SpeciesCaptureAddParam;
+import vip.xiaonuo.modular.ai.speciesCapture.param.SpeciesCaptureEditParam;
+import vip.xiaonuo.modular.ai.speciesCapture.param.SpeciesCaptureIdParam;
+import vip.xiaonuo.modular.ai.speciesCapture.param.SpeciesCapturePageParam;
+import vip.xiaonuo.modular.ai.speciesCapture.service.SpeciesCaptureService;
+
+import javax.annotation.Resource;
+import javax.validation.Valid;
+import javax.validation.constraints.NotEmpty;
+
+/**
+ * 外来生物识别控制器
+ *
+ * @author newspaper
+ * @date  2024/01/06 11:32
+ */
+@Api(tags = "外来生物识别控制器")
+@ApiSupport(author = "SNOWY_TEAM", order = 1)
+@RestController
+@Validated
+public class SpeciesCaptureController {
+
+    @Resource
+    private SpeciesCaptureService speciesCaptureService;
+
+    /**
+     * 获取外来生物识别分页
+     *
+     * @author newspaper
+     * @date  2024/01/06 11:32
+     */
+    @ApiOperationSupport(order = 1)
+    @ApiOperation("获取外来生物识别分页")
+    @SaCheckPermission("/ai/speciesCapture/page")
+    @GetMapping("/ai/speciesCapture/page")
+    public CommonResult<Page<SpeciesCapture>> page(SpeciesCapturePageParam speciesCapturePageParam) {
+        return CommonResult.data(speciesCaptureService.page(speciesCapturePageParam));
+    }
+
+    /**
+     * 添加外来生物识别
+     *
+     * @author newspaper
+     * @date  2024/01/06 11:32
+     */
+    @ApiOperationSupport(order = 2)
+    @ApiOperation("添加外来生物识别")
+    @CommonLog("添加外来生物识别")
+    @SaCheckPermission("/ai/speciesCapture/add")
+    @PostMapping("/ai/speciesCapture/add")
+    public CommonResult<String> add(@RequestBody @Valid SpeciesCaptureAddParam speciesCaptureAddParam) {
+        speciesCaptureService.add(speciesCaptureAddParam);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 编辑外来生物识别
+     *
+     * @author newspaper
+     * @date  2024/01/06 11:32
+     */
+    @ApiOperationSupport(order = 3)
+    @ApiOperation("编辑外来生物识别")
+    @CommonLog("编辑外来生物识别")
+    @SaCheckPermission("/ai/speciesCapture/edit")
+    @PostMapping("/ai/speciesCapture/edit")
+    public CommonResult<String> edit(@RequestBody @Valid SpeciesCaptureEditParam speciesCaptureEditParam) {
+        speciesCaptureService.edit(speciesCaptureEditParam);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 删除外来生物识别
+     *
+     * @author newspaper
+     * @date  2024/01/06 11:32
+     */
+    @ApiOperationSupport(order = 4)
+    @ApiOperation("删除外来生物识别")
+    @CommonLog("删除外来生物识别")
+    @SaCheckPermission("/ai/speciesCapture/delete")
+    @PostMapping("/ai/speciesCapture/delete")
+    public CommonResult<String> delete(@RequestBody @Valid @NotEmpty(message = "集合不能为空")
+                                                   CommonValidList<SpeciesCaptureIdParam> speciesCaptureIdParamList) {
+        speciesCaptureService.delete(speciesCaptureIdParamList);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 获取外来生物识别详情
+     *
+     * @author newspaper
+     * @date  2024/01/06 11:32
+     */
+    @ApiOperationSupport(order = 5)
+    @ApiOperation("获取外来生物识别详情")
+    @SaCheckPermission("/ai/speciesCapture/detail")
+    @GetMapping("/ai/speciesCapture/detail")
+    public CommonResult<SpeciesCapture> detail(@Valid SpeciesCaptureIdParam speciesCaptureIdParam) {
+        return CommonResult.data(speciesCaptureService.detail(speciesCaptureIdParam));
+    }
+}

+ 63 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/speciesCapture/entity/SpeciesCapture.java

@@ -0,0 +1,63 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.ai.speciesCapture.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 外来生物识别实体
+ *
+ * @author newspaper
+ * @date  2024/01/06 11:32
+ **/
+@Getter
+@Setter
+@TableName("species_capture")
+public class SpeciesCapture {
+
+    /** id */
+    @TableId
+    @ApiModelProperty(value = "id", position = 1)
+    private String id;
+
+    /** 时间 */
+    @ApiModelProperty(value = "时间", position = 2)
+    private Date capTime;
+
+    /** 照片 */
+    @ApiModelProperty(value = "照片", position = 3)
+    private String imgUrl;
+
+    /** 尝试进入区域 */
+    @ApiModelProperty(value = "尝试进入区域", position = 4)
+    private String devName;
+
+    /** 通知人 */
+    @ApiModelProperty(value = "通知人", position = 5)
+    private String notifier;
+
+    /** 组织id */
+    @ApiModelProperty(value = "组织id", position = 6)
+    private String orgId;
+
+    /** 删除标志 */
+    @ApiModelProperty(value = "删除标志", position = 7)
+    @TableLogic
+    @TableField(fill = FieldFill.INSERT)
+    private String deleteFlag;
+}

+ 34 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/speciesCapture/enums/SpeciesCaptureEnum.java

@@ -0,0 +1,34 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.ai.speciesCapture.enums;
+
+import lombok.Getter;
+
+/**
+ * 外来生物识别枚举
+ *
+ * @author newspaper
+ * @date  2024/01/06 11:32
+ **/
+@Getter
+public enum SpeciesCaptureEnum {
+
+    /** 测试 */
+    TEST("TEST");
+
+    private final String value;
+
+    SpeciesCaptureEnum(String value) {
+        this.value = value;
+    }
+}

+ 25 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/speciesCapture/mapper/SpeciesCaptureMapper.java

@@ -0,0 +1,25 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.ai.speciesCapture.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import vip.xiaonuo.modular.ai.speciesCapture.entity.SpeciesCapture;
+
+/**
+ * 外来生物识别Mapper接口
+ *
+ * @author newspaper
+ * @date  2024/01/06 11:32
+ **/
+public interface SpeciesCaptureMapper extends BaseMapper<SpeciesCapture> {
+}

+ 5 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/speciesCapture/mapper/mapping/SpeciesCaptureMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="vip.xiaonuo.modular.ai.speciesCapture.mapper.SpeciesCaptureMapper">
+
+</mapper>

+ 54 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/speciesCapture/param/SpeciesCaptureAddParam.java

@@ -0,0 +1,54 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.ai.speciesCapture.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 外来生物识别添加参数
+ *
+ * @author newspaper
+ * @date  2024/01/06 11:32
+ **/
+@Getter
+@Setter
+public class SpeciesCaptureAddParam {
+
+    /** 时间 */
+    @ApiModelProperty(value = "时间", position = 2)
+    private Date capTime;
+
+    /** 照片 */
+    @ApiModelProperty(value = "照片", position = 3)
+    private String imgUrl;
+
+    /** 尝试进入区域 */
+    @ApiModelProperty(value = "尝试进入区域", position = 4)
+    private String devName;
+
+    /** 通知人 */
+    @ApiModelProperty(value = "通知人", position = 5)
+    private String notifier;
+
+    /** 组织id */
+    @ApiModelProperty(value = "组织id", position = 6)
+    private String orgId;
+
+}

+ 59 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/speciesCapture/param/SpeciesCaptureEditParam.java

@@ -0,0 +1,59 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.ai.speciesCapture.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 外来生物识别编辑参数
+ *
+ * @author newspaper
+ * @date  2024/01/06 11:32
+ **/
+@Getter
+@Setter
+public class SpeciesCaptureEditParam {
+
+    /** id */
+    @ApiModelProperty(value = "id", required = true, position = 1)
+    @NotBlank(message = "id不能为空")
+    private String id;
+
+    /** 时间 */
+    @ApiModelProperty(value = "时间", position = 2)
+    private Date capTime;
+
+    /** 照片 */
+    @ApiModelProperty(value = "照片", position = 3)
+    private String imgUrl;
+
+    /** 尝试进入区域 */
+    @ApiModelProperty(value = "尝试进入区域", position = 4)
+    private String devName;
+
+    /** 通知人 */
+    @ApiModelProperty(value = "通知人", position = 5)
+    private String notifier;
+
+    /** 组织id */
+    @ApiModelProperty(value = "组织id", position = 6)
+    private String orgId;
+
+}

+ 35 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/speciesCapture/param/SpeciesCaptureIdParam.java

@@ -0,0 +1,35 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.ai.speciesCapture.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+
+/**
+ * 外来生物识别Id参数
+ *
+ * @author newspaper
+ * @date  2024/01/06 11:32
+ **/
+@Getter
+@Setter
+public class SpeciesCaptureIdParam {
+
+    /** id */
+    @ApiModelProperty(value = "id", required = true)
+    @NotBlank(message = "id不能为空")
+    private String id;
+}

+ 61 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/speciesCapture/param/SpeciesCapturePageParam.java

@@ -0,0 +1,61 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.ai.speciesCapture.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+import vip.xiaonuo.core.param.OrgIdParam;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 外来生物识别查询参数
+ *
+ * @author newspaper
+ * @date  2024/01/06 11:32
+ **/
+@Getter
+@Setter
+public class SpeciesCapturePageParam extends OrgIdParam {
+
+    /** 当前页 */
+    @ApiModelProperty(value = "当前页码")
+    private Integer current;
+
+    /** 每页条数 */
+    @ApiModelProperty(value = "每页条数")
+    private Integer size;
+
+    /** 排序字段 */
+    @ApiModelProperty(value = "排序字段,字段驼峰名称,如:userName")
+    private String sortField;
+
+    /** 排序方式 */
+    @ApiModelProperty(value = "排序方式,升序:ASCEND;降序:DESCEND")
+    private String sortOrder;
+
+    /** 关键词 */
+    @ApiModelProperty(value = "关键词")
+    private String searchKey;
+
+    /** 时间开始 */
+    @ApiModelProperty(value = "时间开始")
+    private String startCapTime;
+
+    /** 时间结束 */
+    @ApiModelProperty(value = "时间结束")
+    private String endCapTime;
+
+}

+ 80 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/speciesCapture/service/SpeciesCaptureService.java

@@ -0,0 +1,80 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.ai.speciesCapture.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import vip.xiaonuo.modular.ai.speciesCapture.entity.SpeciesCapture;
+import vip.xiaonuo.modular.ai.speciesCapture.param.SpeciesCaptureAddParam;
+import vip.xiaonuo.modular.ai.speciesCapture.param.SpeciesCaptureEditParam;
+import vip.xiaonuo.modular.ai.speciesCapture.param.SpeciesCaptureIdParam;
+import vip.xiaonuo.modular.ai.speciesCapture.param.SpeciesCapturePageParam;
+
+import java.util.List;
+
+/**
+ * 外来生物识别Service接口
+ *
+ * @author newspaper
+ * @date  2024/01/06 11:32
+ **/
+public interface SpeciesCaptureService extends IService<SpeciesCapture> {
+
+    /**
+     * 获取外来生物识别分页
+     *
+     * @author newspaper
+     * @date  2024/01/06 11:32
+     */
+    Page<SpeciesCapture> page(SpeciesCapturePageParam speciesCapturePageParam);
+
+    /**
+     * 添加外来生物识别
+     *
+     * @author newspaper
+     * @date  2024/01/06 11:32
+     */
+    void add(SpeciesCaptureAddParam speciesCaptureAddParam);
+
+    /**
+     * 编辑外来生物识别
+     *
+     * @author newspaper
+     * @date  2024/01/06 11:32
+     */
+    void edit(SpeciesCaptureEditParam speciesCaptureEditParam);
+
+    /**
+     * 删除外来生物识别
+     *
+     * @author newspaper
+     * @date  2024/01/06 11:32
+     */
+    void delete(List<SpeciesCaptureIdParam> speciesCaptureIdParamList);
+
+    /**
+     * 获取外来生物识别详情
+     *
+     * @author newspaper
+     * @date  2024/01/06 11:32
+     */
+    SpeciesCapture detail(SpeciesCaptureIdParam speciesCaptureIdParam);
+
+    /**
+     * 获取外来生物识别详情
+     *
+     * @author newspaper
+     * @date  2024/01/06 11:32
+     **/
+    SpeciesCapture queryEntity(String id);
+}

+ 98 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/speciesCapture/service/impl/SpeciesCaptureServiceImpl.java

@@ -0,0 +1,98 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.ai.speciesCapture.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollStreamUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import vip.xiaonuo.common.enums.CommonSortOrderEnum;
+import vip.xiaonuo.common.exception.CommonException;
+import vip.xiaonuo.common.page.CommonPageRequest;
+import vip.xiaonuo.modular.ai.speciesCapture.entity.SpeciesCapture;
+import vip.xiaonuo.modular.ai.speciesCapture.mapper.SpeciesCaptureMapper;
+import vip.xiaonuo.modular.ai.speciesCapture.param.SpeciesCaptureAddParam;
+import vip.xiaonuo.modular.ai.speciesCapture.param.SpeciesCaptureEditParam;
+import vip.xiaonuo.modular.ai.speciesCapture.param.SpeciesCaptureIdParam;
+import vip.xiaonuo.modular.ai.speciesCapture.param.SpeciesCapturePageParam;
+import vip.xiaonuo.modular.ai.speciesCapture.service.SpeciesCaptureService;
+
+import java.util.List;
+
+/**
+ * 外来生物识别Service接口实现类
+ *
+ * @author newspaper
+ * @date  2024/01/06 11:32
+ **/
+@Service
+public class SpeciesCaptureServiceImpl extends ServiceImpl<SpeciesCaptureMapper, SpeciesCapture> implements SpeciesCaptureService {
+
+    @Override
+    public Page<SpeciesCapture> page(SpeciesCapturePageParam speciesCapturePageParam) {
+        QueryWrapper<SpeciesCapture> queryWrapper = new QueryWrapper<>();
+        if(ObjectUtil.isNotEmpty(speciesCapturePageParam.getStartCapTime()) && ObjectUtil.isNotEmpty(speciesCapturePageParam.getEndCapTime())) {
+            queryWrapper.lambda().between(SpeciesCapture::getCapTime, speciesCapturePageParam.getStartCapTime(), speciesCapturePageParam.getEndCapTime());
+        }
+        if(ObjectUtil.isAllNotEmpty(speciesCapturePageParam.getSortField(), speciesCapturePageParam.getSortOrder())) {
+            CommonSortOrderEnum.validate(speciesCapturePageParam.getSortOrder());
+            queryWrapper.orderBy(true, speciesCapturePageParam.getSortOrder().equals(CommonSortOrderEnum.ASC.getValue()),
+                    StrUtil.toUnderlineCase(speciesCapturePageParam.getSortField()));
+        } else {
+            queryWrapper.lambda().orderByAsc(SpeciesCapture::getId);
+        }
+        queryWrapper.lambda().eq(SpeciesCapture::getOrgId,speciesCapturePageParam.getOrgId());
+        return this.page(CommonPageRequest.defaultPage(), queryWrapper);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void add(SpeciesCaptureAddParam speciesCaptureAddParam) {
+        SpeciesCapture speciesCapture = BeanUtil.toBean(speciesCaptureAddParam, SpeciesCapture.class);
+        this.save(speciesCapture);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void edit(SpeciesCaptureEditParam speciesCaptureEditParam) {
+        SpeciesCapture speciesCapture = this.queryEntity(speciesCaptureEditParam.getId());
+        BeanUtil.copyProperties(speciesCaptureEditParam, speciesCapture);
+        this.updateById(speciesCapture);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void delete(List<SpeciesCaptureIdParam> speciesCaptureIdParamList) {
+        // 执行删除
+        this.removeByIds(CollStreamUtil.toList(speciesCaptureIdParamList, SpeciesCaptureIdParam::getId));
+    }
+
+    @Override
+    public SpeciesCapture detail(SpeciesCaptureIdParam speciesCaptureIdParam) {
+        return this.queryEntity(speciesCaptureIdParam.getId());
+    }
+
+    @Override
+    public SpeciesCapture queryEntity(String id) {
+        SpeciesCapture speciesCapture = this.getById(id);
+        if(ObjectUtil.isEmpty(speciesCapture)) {
+            throw new CommonException("外来生物识别不存在,id值为:{}", id);
+        }
+        return speciesCapture;
+    }
+}

+ 108 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/taskInspection/controller/TaskInspectionController.java

@@ -0,0 +1,108 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.ai.taskInspection.controller;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import com.github.xiaoymin.knife4j.annotations.ApiSupport;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+import vip.xiaonuo.common.annotation.CommonLog;
+import vip.xiaonuo.common.pojo.CommonResult;
+import vip.xiaonuo.common.pojo.CommonValidList;
+import vip.xiaonuo.modular.ai.taskInspection.entity.TaskInspection;
+import vip.xiaonuo.modular.ai.taskInspection.entity.vo.TaskInspectionDetailVo;
+import vip.xiaonuo.modular.ai.taskInspection.entity.vo.TaskInspectionImageVo;
+import vip.xiaonuo.modular.ai.taskInspection.entity.vo.TaskInspectionPageVo;
+import vip.xiaonuo.modular.ai.taskInspection.param.TaskInspectionAddParam;
+import vip.xiaonuo.modular.ai.taskInspection.param.TaskInspectionEditParam;
+import vip.xiaonuo.modular.ai.taskInspection.param.TaskInspectionIdParam;
+import vip.xiaonuo.modular.ai.taskInspection.param.TaskInspectionPageParam;
+import vip.xiaonuo.modular.ai.taskInspection.service.TaskInspectionService;
+
+import javax.annotation.Resource;
+import javax.validation.Valid;
+import javax.validation.constraints.NotEmpty;
+import java.io.IOException;
+
+/**
+ * 任务巡检控制器
+ *
+ * @author newspaper
+ * @date  2024/01/08 09:21
+ */
+@Api(tags = "任务巡检控制器")
+@ApiSupport(author = "SNOWY_TEAM", order = 1)
+@RestController
+@Validated
+public class TaskInspectionController {
+
+    @Resource
+    private TaskInspectionService taskInspectionService;
+
+    /**
+     * 获取任务巡检分页
+     *
+     * @author newspaper
+     * @date  2024/01/08 09:21
+     */
+    @ApiOperationSupport(order = 1)
+    @ApiOperation("获取任务巡检分页")
+    @GetMapping("/ai/taskInspection/page")
+    public CommonResult<Page<TaskInspectionImageVo>> page(TaskInspectionPageParam taskInspectionPageParam) {
+        return CommonResult.data(taskInspectionService.page(taskInspectionPageParam));
+    }
+
+    /**
+     * 提交任务巡检
+     *
+     * @author newspaper
+     * @date  2024/01/08 09:21
+     */
+    @ApiOperationSupport(order = 2)
+    @ApiOperation("提交任务巡检")
+    @CommonLog("提交任务巡检")
+    @PostMapping("/ai/taskInspection/edit")
+    public CommonResult<String> edit(@RequestParam @ApiParam(value = "任务巡检id") String id,
+                                     @RequestParam @ApiParam(value = "巡检时间") String inspectTime,
+                                     @RequestParam @ApiParam(value = "巡检人员id") String inspectPersonId,
+                                     @RequestParam @ApiParam(value = "问题描述") String description,
+                                     @RequestParam @ApiParam(value = "今日不再提醒 ") String noRemind,
+                                     @RequestParam(value = "img1") @ApiParam(value = "图片1") MultipartFile img1,
+                                     @RequestParam(value = "img2", required = false) @ApiParam(value = "图片2") MultipartFile img2,
+                                     @RequestParam(value = "img3", required = false) @ApiParam(value = "图片3") MultipartFile img3) throws IOException {
+        taskInspectionService.edit(id,inspectTime,inspectPersonId,description,noRemind,img1,img2,img3);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 删除任务巡检
+     *
+     * @author newspaper
+     * @date  2024/01/08 09:21
+     */
+    @ApiOperationSupport(order = 4)
+    @ApiOperation("删除任务巡检")
+    @CommonLog("删除任务巡检")
+    @PostMapping("/ai/taskInspection/delete")
+    public CommonResult<String> delete(@RequestBody @Valid @NotEmpty(message = "集合不能为空")
+                                                   CommonValidList<TaskInspectionIdParam> taskInspectionIdParamList) {
+        taskInspectionService.delete(taskInspectionIdParamList);
+        return CommonResult.ok();
+    }
+}

+ 73 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/taskInspection/entity/TaskInspection.java

@@ -0,0 +1,73 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.ai.taskInspection.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+import vip.xiaonuo.common.pojo.CommonEntity;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.Date;
+
+/**
+ * 任务巡检实体
+ *
+ * @author newspaper
+ * @date  2024/01/08 09:21
+ **/
+@Getter
+@Setter
+@TableName("task_inspection")
+public class TaskInspection extends CommonEntity {
+
+    /** id */
+    @TableId
+    @ApiModelProperty(value = "id", position = 1)
+    private String id;
+
+    /** 预警id */
+    @ApiModelProperty(value = "预警id", position = 2)
+    private String warningId;
+
+    /** 通知人id */
+    @ApiModelProperty(value = "通知人id", position = 3)
+    private String notifierId;
+
+    /** 巡检时间 */
+    @ApiModelProperty(value = "巡检时间", position = 4)
+    private LocalDateTime inspectTime;
+
+    /** 巡检人员id */
+    @ApiModelProperty(value = "巡检人员id", position = 5)
+    private String inspectPersonId;
+
+    /** 问题描述 */
+    @ApiModelProperty(value = "问题描述", position = 6)
+    private String description;
+
+    /** 问题照片id */
+    @ApiModelProperty(value = "问题照片", position = 7)
+    private String imgUrl;
+
+    /** 状态 0:待处理 1:已完成 */
+    @ApiModelProperty(value = "状态 0:待处理 1:已完成", position = 8)
+    private Integer status;
+
+    /** 组织id */
+    @ApiModelProperty(value = "组织id", position = 9)
+    private Integer orgId;
+
+}

+ 37 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/taskInspection/entity/vo/TaskInspectionDetailVo.java

@@ -0,0 +1,37 @@
+package vip.xiaonuo.modular.ai.taskInspection.entity.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+public class TaskInspectionDetailVo {
+
+    @ApiModelProperty(value = "id", position = 1)
+    private String id;
+
+    @ApiModelProperty(value = "预警类型", position = 2)
+    private String warningType;
+
+    @ApiModelProperty(value = "触发位置", position = 3)
+    private String unitName;
+
+    @ApiModelProperty(value = "预警内容", position = 4)
+    private String warningContent;
+
+    @ApiModelProperty(value = "创建时间", position = 5)
+    private LocalDateTime createTime;
+
+    @ApiModelProperty(value = "巡检时间", position = 6)
+    private LocalDateTime inspectTime;
+
+    @ApiModelProperty(value = "巡检人名", position = 7)
+    private String userName;
+
+    @ApiModelProperty(value = "问题描述", position = 8)
+    private String description;
+
+    @ApiModelProperty(value = "问题照片", position = 9)
+    private String imgUrl;
+}

+ 12 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/taskInspection/entity/vo/TaskInspectionImageVo.java

@@ -0,0 +1,12 @@
+package vip.xiaonuo.modular.ai.taskInspection.entity.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+public class TaskInspectionImageVo extends TaskInspectionPageVo{
+    @ApiModelProperty(value = "图片", position = 99)
+    private String[] pages;
+}

+ 41 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/taskInspection/entity/vo/TaskInspectionPageVo.java

@@ -0,0 +1,41 @@
+package vip.xiaonuo.modular.ai.taskInspection.entity.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+public class TaskInspectionPageVo {
+
+    @ApiModelProperty(value = "id", position = 1)
+    private String id;
+
+    @ApiModelProperty(value = "预警类型", position = 2)
+    private String warningType;
+
+    @ApiModelProperty(value = "触发位置", position = 3)
+    private String unitName;
+
+    @ApiModelProperty(value = "预警内容", position = 4)
+    private String warningContent;
+
+    @ApiModelProperty(value = "创建时间", position = 5)
+    private LocalDateTime createTime;
+
+    @ApiModelProperty(value = "巡检时间", position = 6)
+    private LocalDateTime inspectTime;
+
+    @ApiModelProperty(value = "巡检人名", position = 7)
+    private String userName;
+
+    @ApiModelProperty(value = "问题描述", position = 8)
+    private String description;
+
+    @ApiModelProperty(value = "问题照片", position = 9)
+    private String imgUrl;
+
+    /** 状态 0:待处理 1:已完成 */
+    @ApiModelProperty(value = "状态 0:待处理 1:已完成", position = 10)
+    private Integer status;
+}

+ 34 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/taskInspection/enums/TaskInspectionEnum.java

@@ -0,0 +1,34 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.ai.taskInspection.enums;
+
+import lombok.Getter;
+
+/**
+ * 任务巡检枚举
+ *
+ * @author newspaper
+ * @date  2024/01/08 09:21
+ **/
+@Getter
+public enum TaskInspectionEnum {
+
+    /** 测试 */
+    TEST("TEST");
+
+    private final String value;
+
+    TaskInspectionEnum(String value) {
+        this.value = value;
+    }
+}

+ 29 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/taskInspection/mapper/TaskInspectionMapper.java

@@ -0,0 +1,29 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.ai.taskInspection.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import vip.xiaonuo.modular.ai.taskInspection.entity.TaskInspection;
+import vip.xiaonuo.modular.ai.taskInspection.entity.vo.TaskInspectionDetailVo;
+import vip.xiaonuo.modular.ai.taskInspection.entity.vo.TaskInspectionPageVo;
+
+/**
+ * 任务巡检Mapper接口
+ *
+ * @author newspaper
+ * @date  2024/01/08 09:21
+ **/
+public interface TaskInspectionMapper extends BaseMapper<TaskInspection> {
+    Page<TaskInspectionPageVo> page(Page<Object> defaultPage, String userId, Integer status, Integer orgId);
+}

+ 31 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/taskInspection/mapper/mapping/TaskInspectionMapper.xml

@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="vip.xiaonuo.modular.ai.taskInspection.mapper.TaskInspectionMapper">
+
+    <select id="page" resultType="vip.xiaonuo.modular.ai.taskInspection.entity.vo.TaskInspectionPageVo">
+        SELECT
+            t.id,
+            c.configName AS 'warningType',
+            p.fullName AS 'unitName',
+            w.warning_content,
+            t.create_time,
+            t.status
+            t.inspect_time,
+            u.NAME AS 'userName',
+            t.description,
+            t.img_url
+        FROM
+            `task_inspection` t
+            LEFT JOIN `warning_info` w ON t.warning_id = w.id
+            LEFT JOIN `base_config` c ON w.warning_type_id = c.id
+            LEFT JOIN `base_pigpen` p ON w.unit_id = p.id
+            LEFT JOIN `SYS_USER` u ON t.inspect_person_id = u.id
+        WHERE
+            t.inspect_person_id = #{userId} AND t.org_id = #{orgId}
+             <if test="status != null">
+                AND t.status = #{status}
+            </if>
+        ORDER BY
+            t.create_time DESC;
+    </select>
+</mapper>

+ 58 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/taskInspection/param/TaskInspectionAddParam.java

@@ -0,0 +1,58 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.ai.taskInspection.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 任务巡检添加参数
+ *
+ * @author newspaper
+ * @date  2024/01/08 09:21
+ **/
+@Getter
+@Setter
+public class TaskInspectionAddParam {
+
+    /** 预警id */
+    @ApiModelProperty(value = "预警id", position = 2)
+    private String warningId;
+
+    /** 通知人id */
+    @ApiModelProperty(value = "通知人id", position = 3)
+    private String notifierId;
+
+    /** 巡检时间 */
+    @ApiModelProperty(value = "巡检时间", position = 4)
+    private Date inspectTime;
+
+    /** 巡检人员id */
+    @ApiModelProperty(value = "巡检人员id", position = 5)
+    private String inspectId;
+
+    /** 问题描述 */
+    @ApiModelProperty(value = "问题描述", position = 6)
+    private String description;
+
+    /** 问题照片id */
+    @ApiModelProperty(value = "问题照片id", position = 7)
+    private String imgId;
+
+}

+ 63 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/taskInspection/param/TaskInspectionEditParam.java

@@ -0,0 +1,63 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.ai.taskInspection.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 任务巡检编辑参数
+ *
+ * @author newspaper
+ * @date  2024/01/08 09:21
+ **/
+@Getter
+@Setter
+public class TaskInspectionEditParam {
+
+    /** id */
+    @ApiModelProperty(value = "id", required = true, position = 1)
+    @NotBlank(message = "id不能为空")
+    private String id;
+
+    /** 预警id */
+    @ApiModelProperty(value = "预警id", position = 2)
+    private String warningId;
+
+    /** 通知人id */
+    @ApiModelProperty(value = "通知人id", position = 3)
+    private String notifierId;
+
+    /** 巡检时间 */
+    @ApiModelProperty(value = "巡检时间", position = 4)
+    private Date inspectTime;
+
+    /** 巡检人员id */
+    @ApiModelProperty(value = "巡检人员id", position = 5)
+    private String inspectId;
+
+    /** 问题描述 */
+    @ApiModelProperty(value = "问题描述", position = 6)
+    private String description;
+
+    /** 问题照片id */
+    @ApiModelProperty(value = "问题照片id", position = 7)
+    private String imgId;
+
+}

+ 35 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/taskInspection/param/TaskInspectionIdParam.java

@@ -0,0 +1,35 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.ai.taskInspection.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+
+/**
+ * 任务巡检Id参数
+ *
+ * @author newspaper
+ * @date  2024/01/08 09:21
+ **/
+@Getter
+@Setter
+public class TaskInspectionIdParam {
+
+    /** id */
+    @ApiModelProperty(value = "id", required = true)
+    @NotBlank(message = "id不能为空")
+    private String id;
+}

+ 52 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/taskInspection/param/TaskInspectionPageParam.java

@@ -0,0 +1,52 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.ai.taskInspection.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 任务巡检查询参数
+ *
+ * @author newspaper
+ * @date  2024/01/08 09:21
+ **/
+@Getter
+@Setter
+public class TaskInspectionPageParam {
+
+    /** 当前页 */
+    @ApiModelProperty(value = "当前页码")
+    private Integer current;
+
+    /** 每页条数 */
+    @ApiModelProperty(value = "每页条数")
+    private Integer size;
+
+    /** 组织id */
+    @ApiModelProperty(value = "组织id", position = 3)
+    @NotBlank(message = "orgId不能为空")
+    private Integer orgId;
+
+    /** 状态 0:待处理 1:已完成 */
+    @ApiModelProperty(value = "状态 0:待处理 1:已完成", position = 4)
+    private Integer status;
+
+
+
+}

+ 63 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/taskInspection/service/TaskInspectionService.java

@@ -0,0 +1,63 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.ai.taskInspection.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.springframework.web.multipart.MultipartFile;
+import vip.xiaonuo.modular.ai.taskInspection.entity.TaskInspection;
+import vip.xiaonuo.modular.ai.taskInspection.entity.vo.TaskInspectionDetailVo;
+import vip.xiaonuo.modular.ai.taskInspection.entity.vo.TaskInspectionImageVo;
+import vip.xiaonuo.modular.ai.taskInspection.entity.vo.TaskInspectionPageVo;
+import vip.xiaonuo.modular.ai.taskInspection.param.TaskInspectionAddParam;
+import vip.xiaonuo.modular.ai.taskInspection.param.TaskInspectionEditParam;
+import vip.xiaonuo.modular.ai.taskInspection.param.TaskInspectionIdParam;
+import vip.xiaonuo.modular.ai.taskInspection.param.TaskInspectionPageParam;
+
+import java.io.IOException;
+import java.util.List;
+
+/**
+ * 任务巡检Service接口
+ *
+ * @author newspaper
+ * @date  2024/01/08 09:21
+ **/
+public interface TaskInspectionService extends IService<TaskInspection> {
+
+    /**
+     * 获取任务巡检分页
+     *
+     * @author newspaper
+     * @date  2024/01/08 09:21
+     */
+    Page<TaskInspectionImageVo> page(TaskInspectionPageParam taskInspectionPageParam);
+
+    /**
+     * 删除任务巡检
+     *
+     * @author newspaper
+     * @date  2024/01/08 09:21
+     */
+    void delete(List<TaskInspectionIdParam> taskInspectionIdParamList);
+
+    /**
+     * 获取任务巡检详情
+     *
+     * @author newspaper
+     * @date  2024/01/08 09:21
+     **/
+    TaskInspection queryEntity(String id);
+
+    void edit(String id, String inspectTime, String inspectPersonId, String description, String noRemind, MultipartFile img1, MultipartFile img2, MultipartFile img3) throws IOException;
+}

+ 134 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/ai/taskInspection/service/impl/TaskInspectionServiceImpl.java

@@ -0,0 +1,134 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.ai.taskInspection.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollStreamUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
+import vip.xiaonuo.auth.core.util.StpLoginUserUtil;
+import vip.xiaonuo.common.enums.CommonSortOrderEnum;
+import vip.xiaonuo.common.exception.CommonException;
+import vip.xiaonuo.common.page.CommonPageRequest;
+import vip.xiaonuo.dev.modular.file.enums.DevFileEngineTypeEnum;
+import vip.xiaonuo.dev.modular.file.service.DevFileService;
+import vip.xiaonuo.modular.ai.taskInspection.entity.TaskInspection;
+import vip.xiaonuo.modular.ai.taskInspection.entity.vo.TaskInspectionDetailVo;
+import vip.xiaonuo.modular.ai.taskInspection.entity.vo.TaskInspectionImageVo;
+import vip.xiaonuo.modular.ai.taskInspection.entity.vo.TaskInspectionPageVo;
+import vip.xiaonuo.modular.ai.taskInspection.mapper.TaskInspectionMapper;
+import vip.xiaonuo.modular.ai.taskInspection.param.TaskInspectionAddParam;
+import vip.xiaonuo.modular.ai.taskInspection.param.TaskInspectionEditParam;
+import vip.xiaonuo.modular.ai.taskInspection.param.TaskInspectionIdParam;
+import vip.xiaonuo.modular.ai.taskInspection.param.TaskInspectionPageParam;
+import vip.xiaonuo.modular.ai.taskInspection.service.TaskInspectionService;
+import vip.xiaonuo.modular.bi.utils.UploadImage;
+
+import javax.validation.constraints.NotBlank;
+import java.io.IOException;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 任务巡检Service接口实现类
+ *
+ * @author newspaper
+ * @date  2024/01/08 09:21
+ **/
+@Service
+public class TaskInspectionServiceImpl extends ServiceImpl<TaskInspectionMapper, TaskInspection> implements TaskInspectionService {
+
+    @Autowired
+    private TaskInspectionMapper taskInspectionMapper;
+    @Autowired
+    private UploadImage uploadImage;
+
+    @Override
+    public Page<TaskInspectionImageVo> page(TaskInspectionPageParam taskInspectionPageParam) {
+        Integer status = taskInspectionPageParam.getStatus();
+        String userId = StpLoginUserUtil.getLoginUser().getId();
+        Integer orgId = taskInspectionPageParam.getOrgId();
+        Page<TaskInspectionPageVo> taskInspectionPageVoPage = taskInspectionMapper.page(CommonPageRequest.defaultPage(), userId, status, orgId);
+        Page<TaskInspectionImageVo> taskInspectionImageVoPage = new Page<>();
+        List TaskInspectionImageVoList = new ArrayList();
+        for (TaskInspectionPageVo record : taskInspectionPageVoPage.getRecords()) {
+            TaskInspectionImageVo taskInspectionImageVo = new TaskInspectionImageVo();
+            BeanUtil.copyProperties(record,taskInspectionImageVo);
+            if (ObjectUtil.isNotEmpty(record.getImgUrl())){
+                taskInspectionImageVo.setPages(record.getImgUrl().split(","));
+            }
+            TaskInspectionImageVoList.add(taskInspectionImageVo);
+        }
+        taskInspectionImageVoPage.setRecords(TaskInspectionImageVoList);
+        taskInspectionImageVoPage.setTotal(taskInspectionPageVoPage.getTotal());
+        taskInspectionImageVoPage.setCountId(taskInspectionPageVoPage.getCountId());
+        taskInspectionImageVoPage.setTotal(taskInspectionPageVoPage.getCurrent());
+        return taskInspectionImageVoPage;
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void edit(String id, String inspectTime, String inspectPersonId, String description, String noRemind, MultipartFile img1, MultipartFile img2, MultipartFile img3) throws IOException {
+        TaskInspection taskInspection = this.queryEntity(id);
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy:MM:dd HH:mm:ss");
+        taskInspection.setInspectTime(LocalDateTime.parse(inspectTime,formatter));
+        taskInspection.setInspectPersonId(inspectPersonId);
+        taskInspection.setDescription(description);
+        String imgUrl = "";
+        if (ObjectUtil.isNotEmpty(img1)){
+            if (!uploadImage.getImageCom(img1).equals("上传失败")){
+                imgUrl = uploadImage.getImageCom(img1);
+            }
+        }
+        if (ObjectUtil.isNotEmpty(img2)){
+            if (!uploadImage.getImageCom(img2).equals("上传失败")){
+                imgUrl = imgUrl + "," + uploadImage.getImageCom(img2);
+            }
+        }
+        if (ObjectUtil.isNotEmpty(img3)){
+            if (!uploadImage.getImageCom(img3).equals("上传失败")){
+                imgUrl = imgUrl + "," + uploadImage.getImageCom(img3);
+            }
+        }
+        taskInspection.setImgUrl(imgUrl);
+        taskInspection.setStatus(1);
+        this.updateById(taskInspection);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void delete(List<TaskInspectionIdParam> taskInspectionIdParamList) {
+        // 执行删除
+        this.removeByIds(CollStreamUtil.toList(taskInspectionIdParamList, TaskInspectionIdParam::getId));
+    }
+
+    @Override
+    public TaskInspection queryEntity(String id) {
+        TaskInspection taskInspection = this.getById(id);
+        if(ObjectUtil.isEmpty(taskInspection)) {
+            throw new CommonException("任务巡检不存在,id值为:{}", id);
+        }
+        return taskInspection;
+    }
+
+
+}

+ 2 - 2
snowy-web-app/src/main/resources/application.properties

@@ -176,9 +176,9 @@ snowy.config.common.backend-url=http://localhost:82
 
 img.url=https://img.ifarmcloud.com/images/
 img.basePath=/home/huimv/img/
-img.ip=139.9.172.209
+img.ip=119.3.44.183
 img.user=huimv
-img.password="!hm123@1"
+img.password=!hm123@1
 img.port=22
 
 #img: