From dc098ce37a20b97790a426ede9554b77f0e02efe Mon Sep 17 00:00:00 2001 From: yq183 <645046984@qq.com> Date: Tue, 25 Mar 2025 08:49:13 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4=EF=BC=9A=E5=9B=BE=E7=89=87?= =?UTF-8?q?=E6=AF=94=E5=AF=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../constant/AiCompareStatusConstants.java | 36 +++++ .../controller/DeviceQrtzController.java | 4 +- .../controller/AiCompareController.java | 107 ++++++++++++++- .../wayline/mapper/IAiCompareMapper.java | 5 + .../wayline/mapper/IAiCompareQueueMapper.java | 9 ++ .../wayline/model/dto/AiCompareDTO.java | 67 +++++++--- .../model/dto/AiCompareMediaFileDTO.java | 75 +++++++++++ .../wayline/model/dto/AiCompareQueueDTO.java | 29 +++- .../wayline/model/entity/AiCompareEntity.java | 18 +-- .../model/entity/AiCompareQueueEntity.java | 8 +- .../service/IAiCompareQueueService.java | 13 ++ .../wayline/service/IAiCompareService.java | 18 +++ .../impl/AiCompareQueueServiceImpl.java | 70 ++++++++++ .../service/impl/AiCompareServiceImpl.java | 125 ++++++++++++++++++ .../main/resources/mapper/AiCompareMapper.xml | 24 ++++ .../resources/mapper/AiCompareQueueMapper.xml | 21 +++ 16 files changed, 592 insertions(+), 37 deletions(-) create mode 100644 dk-common/common-core/src/main/java/org/dromara/common/core/constant/AiCompareStatusConstants.java create mode 100644 dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/dto/AiCompareMediaFileDTO.java create mode 100644 dk-modules/sample/src/main/resources/mapper/AiCompareMapper.xml create mode 100644 dk-modules/sample/src/main/resources/mapper/AiCompareQueueMapper.xml diff --git a/dk-common/common-core/src/main/java/org/dromara/common/core/constant/AiCompareStatusConstants.java b/dk-common/common-core/src/main/java/org/dromara/common/core/constant/AiCompareStatusConstants.java new file mode 100644 index 0000000..20fd053 --- /dev/null +++ b/dk-common/common-core/src/main/java/org/dromara/common/core/constant/AiCompareStatusConstants.java @@ -0,0 +1,36 @@ +package org.dromara.common.core.constant; + +/** + * @auther yq + * @data 2025/3/22 + */ +public interface AiCompareStatusConstants { + /** + * "是否比对" + * */ + String COMPARE_STATUS_0="0"; + + /** + * "算法比对中" + * */ + String COMPARE_STATUS_1="1"; + /** + * "人工查看" + * */ + String COMPARE_STATUS_2="2"; + /** + * "可提交预警" + * */ + String COMPARE_STATUS_3="3"; + /** + * "完成对比" + * */ + String COMPARE_STATUS_4="4"; + + + /** + * 队列类型 0:未比对 1:比对*/ + String QUEUW_TYPE_0="0"; + + String QUEUW_TYPE_1="1"; +} diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/controller/DeviceQrtzController.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/controller/DeviceQrtzController.java index 63ea876..4c923c1 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/manage/controller/DeviceQrtzController.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/manage/controller/DeviceQrtzController.java @@ -47,9 +47,9 @@ public class DeviceQrtzController extends BaseController { * */ @SaCheckPermission("devict:qrtz:list") @GetMapping(value = "/page") - public TableDataInfo queryPageDept(@RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + public TableDataInfo queryPageDept(@RequestParam(name="pageNum", defaultValue="1") Integer pageNum, @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, DeviceQrtzDTO deviceQrtzDTO) { - Page page = new Page(pageNo,pageSize); + Page page = new Page(pageNum,pageSize); return deviceQrtzService.listManageDeviceQrtz(page, deviceQrtzDTO); } /** diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/controller/AiCompareController.java b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/controller/AiCompareController.java index ccc9667..a5a702c 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/controller/AiCompareController.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/controller/AiCompareController.java @@ -1,20 +1,121 @@ package org.dromara.sample.wayline.controller; +import cn.dev33.satoken.annotation.SaCheckPermission; import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.validation.constraints.NotNull; +import lombok.RequiredArgsConstructor; +import org.dromara.common.core.domain.R; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.common.idempotent.annotation.RepeatSubmit; +import org.dromara.common.log.annotation.Log; +import org.dromara.common.log.enums.BusinessType; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.web.core.BaseController; +import org.dromara.sample.wayline.model.dto.AiCompareDTO; +import org.dromara.sample.wayline.model.dto.AiCompareMediaFileDTO; +import org.dromara.sample.wayline.model.dto.AiCompareQueueDTO; +import org.dromara.sample.wayline.model.entity.AiCompareEntity; +import org.dromara.sample.wayline.model.entity.AiCompareQueueEntity; +import org.dromara.sample.wayline.model.entity.WaylineJobEntity; +import org.dromara.sample.wayline.service.IAiCompareQueueService; +import org.dromara.sample.wayline.service.IAiCompareService; import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; +import java.util.Map; /** * @auther yq * @data 2025/3/21 */ @RestController -@RequestMapping("/ai/compare") +@RequiredArgsConstructor +@RequestMapping("/compare") @Validated @Tag(name="算法比对模块") public class AiCompareController extends BaseController { + private final IAiCompareQueueService aiCompareQueueService; + + private final IAiCompareService aiCompareService; + + /** + * 图片对比列表 + */ + @SaCheckPermission("sample:compare:list") + @GetMapping("/list") + public TableDataInfo list(AiCompareDTO bo, PageQuery pageQuery) { + return aiCompareService.queryPageList(bo, pageQuery); + } + + /** + * 提交对比列表 + */ + @SaCheckPermission("sample:compare:list") + @GetMapping("/queueList") + public TableDataInfo queueList(AiCompareQueueDTO bo, PageQuery pageQuery) { + return aiCompareQueueService.queueList(bo, pageQuery); + } + + /** + * 模板列表 + * @param waylineId + * param createTime 当前记录的时间 + */ + @SaCheckPermission("sample:compare:list") + @GetMapping("/templateList") + public List templateList(String waylineId, Date createTime) { + return aiCompareQueueService.templateList(waylineId,createTime); + } + + /** + * 对比编辑 + * + * @param id 主键 + */ + @SaCheckPermission("sample:compare:query") + @GetMapping("/{id}") + public R> queryById(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(aiCompareService.queryById(id)); + } + + /** + * 模板回显 + * + * @param id 主键 + */ + @SaCheckPermission("sample:compare:query") + @GetMapping("/getInfo/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(aiCompareService.getInfo(id)); + } + /** + * 新增比对 + */ + @SaCheckPermission("sample:compare:add") + @Log(title = "算法比对", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody List> compareDTOList) { + return toAjax(aiCompareService.insertByBo(compareDTOList)); + } + + /** + * 重新比对 + */ + @SaCheckPermission("sample:compare:edit") + @Log(title = "算法重新比对", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody Map bo) { + return toAjax(aiCompareService.update(bo)); + } + } diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/mapper/IAiCompareMapper.java b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/mapper/IAiCompareMapper.java index 2f48e28..ac3d6cb 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/mapper/IAiCompareMapper.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/mapper/IAiCompareMapper.java @@ -1,10 +1,15 @@ package org.dromara.sample.wayline.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.dromara.sample.wayline.model.dto.AiCompareMediaFileDTO; import org.dromara.sample.wayline.model.entity.AiCompareEntity; +import java.util.List; + /** * @auther yq * @data 2025/3/21 */ public interface IAiCompareMapper extends BaseMapper { + + ListlistMediaFile(AiCompareEntity aiCompareEntity); } diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/mapper/IAiCompareQueueMapper.java b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/mapper/IAiCompareQueueMapper.java index 0febb94..7f6e943 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/mapper/IAiCompareQueueMapper.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/mapper/IAiCompareQueueMapper.java @@ -1,10 +1,19 @@ package org.dromara.sample.wayline.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.apache.ibatis.annotations.Param; +import org.dromara.sample.wayline.model.dto.AiCompareQueueDTO; import org.dromara.sample.wayline.model.entity.AiCompareQueueEntity; +import java.util.List; + /** * @auther yq * @data 2025/3/21 */ public interface IAiCompareQueueMapper extends BaseMapper { + IPage queueList(@Param("bo") AiCompareQueueDTO bo, @Param("page") Page page); + + Boolean updateStatus(@Param("ids") List ids, @Param("queueType") String queueType); } diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/dto/AiCompareDTO.java b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/dto/AiCompareDTO.java index b3a72be..f827e58 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/dto/AiCompareDTO.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/dto/AiCompareDTO.java @@ -1,17 +1,20 @@ package org.dromara.sample.wayline.model.dto; +import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.TableField; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonInclude; +import io.github.linpeilie.annotations.AutoMapper; import jakarta.validation.constraints.NotNull; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; +import lombok.*; import org.dromara.common.core.validate.AddGroup; import org.dromara.common.core.validate.EditGroup; +import org.dromara.sample.wayline.model.entity.AiCompareEntity; +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; import java.util.HashMap; import java.util.Map; @@ -20,24 +23,29 @@ import java.util.Map; * @data 2025/3/21 */ @Data -@Builder -@AllArgsConstructor -@NoArgsConstructor -public class AiCompareDTO { +@EqualsAndHashCode() +@AutoMapper(target = AiCompareEntity.class, reverseConvertGenerate = false) +public class AiCompareDTO implements Serializable { + + @NotNull(message = "主键id", groups = {EditGroup.class }) private Long id; /** * 0:是否比对 1:算法比对中 2:人工查看 3:可提交预警 4:完成对比 * */ private String status; + @JsonIgnore + @NotNull(message = "未比对列表主键id", groups = { AddGroup.class}) + private Long queueId; + /**航线名称*/ + private String waylineName; /** - * 模板id + * 模板id 对应模板的jobId * */ - @NotNull(message = "开始时间", groups = { AddGroup.class, EditGroup.class }) - private Long templateId; + private String templateId; /** * 算法数量 @@ -49,6 +57,7 @@ public class AiCompareDTO { /** * 总数量 * */ + private Integer totalNum; /** @@ -58,26 +67,54 @@ public class AiCompareDTO { /** * 任务名称 * */ - @NotNull(message = "任务名称", groups = { AddGroup.class, EditGroup.class }) private String jobName; /** * 任务id * */ - @NotNull(message = "任务id", groups = { AddGroup.class, EditGroup.class }) private String jobId; + /** * 搜索值 */ @JsonIgnore - @TableField(exist = false) private String searchValue; + /** + * 创建部门 + */ + + private Long createDept; + + /** + * 创建者 + */ + + private Long createBy; + /** + *用户昵称 + * */ + private String nickName; + /** + * 创建时间 + */ + private Date createTime; + + /** + * 更新者 + */ + + private Long updateBy; + + /** + * 更新时间 + */ + private Date updateTime; + /** * 请求参数 */ @JsonInclude(JsonInclude.Include.NON_EMPTY) - @TableField(exist = false) private Map params = new HashMap<>(); } diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/dto/AiCompareMediaFileDTO.java b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/dto/AiCompareMediaFileDTO.java new file mode 100644 index 0000000..e511aeb --- /dev/null +++ b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/dto/AiCompareMediaFileDTO.java @@ -0,0 +1,75 @@ +package org.dromara.sample.wayline.model.dto; + + +import com.baomidou.mybatisplus.annotation.TableField; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.springframework.format.annotation.DateTimeFormat; + +import java.util.Date; + +/** + * @auther yq + * @data 2025/3/21 + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class AiCompareMediaFileDTO { + + + private String id; + + /**上云文件id*/ + private String fileId; + + @Schema(description = "文件名") + private String fileName; + + @Schema(description = "文件的路径") + private String filePath; + + @Schema(description = "文件所属的工作区") + private String workspaceId; + @Schema(description = "桶中文件的关链字") + private String objectKey; + + @Schema(description = "此属性仅适用于由Pilot上传的图像文件。0:正常图片;1:全景。") + private String subFileType; + + @Schema(description = "是否原始图像") + private Boolean isOriginal; + + @Schema(description = "创建文件的无人机的sn。") + private String drone; + + @Schema(description = "创建文件的无人机有效载荷的名称。") + private String payload; + + @Schema(description = "文件的小指纹。此属性仅适用于由Pilot上传的媒体文件") + private String tinnyFingerprint; + + @Schema(description = "文件的指纹。此属性仅适用于由Pilot上传的媒体文件。") + private String fingerprint; + + private Date createTime; + + private String jobId; + + @Schema(description = "模板图片名称") + private String mateFileName; + + @Schema(description = "模板图url") + private String mateFilePath; + + @Schema(description = "模板拍照时间") + private Date mateFileDate; + + + +} diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/dto/AiCompareQueueDTO.java b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/dto/AiCompareQueueDTO.java index 21d2e38..003d031 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/dto/AiCompareQueueDTO.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/dto/AiCompareQueueDTO.java @@ -1,13 +1,19 @@ package org.dromara.sample.wayline.model.dto; import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import jakarta.validation.constraints.NotNull; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; import java.util.Date; +import java.util.HashMap; +import java.util.Map; /** * @auther yq @@ -23,20 +29,20 @@ public class AiCompareQueueDTO { private Long id; + /** * 航线id 对应wayline_id 字段 * */ - private String fileId; + private String waylineId; /** * 航线名称 * */ - private String fileName; - + private String waylineName; /** * 任务id * */ - private Integer jobId; + private String jobId; /** *任务名称 @@ -56,5 +62,18 @@ public class AiCompareQueueDTO { /** *队列类型 0:未比对 1:比对 * */ - private Byte queueType; + @NotNull(message = "队列类型 0:未比对 1:比对") + private String queueType; + + /** + * 搜索值 + */ + @JsonIgnore + private String searchValue; + /** + * 请求参数 + */ + @JsonInclude(JsonInclude.Include.NON_EMPTY) + private Map params = new HashMap<>(); + } diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/entity/AiCompareEntity.java b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/entity/AiCompareEntity.java index e4e235c..22cbb84 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/entity/AiCompareEntity.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/entity/AiCompareEntity.java @@ -3,10 +3,7 @@ package org.dromara.sample.wayline.model.entity; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; +import lombok.*; import org.dromara.common.mybatis.core.domain.BaseEntity; @@ -16,10 +13,8 @@ import org.dromara.common.mybatis.core.domain.BaseEntity; * @data 2025/3/21 */ @Data +@EqualsAndHashCode(callSuper = true) @TableName("ai_compare") -@Builder -@AllArgsConstructor -@NoArgsConstructor public class AiCompareEntity extends BaseEntity { @TableId(type = IdType.AUTO) @@ -30,10 +25,13 @@ public class AiCompareEntity extends BaseEntity { * */ private String status; + + /**航线名称*/ + private String waylineName; /** * 模板id * */ - private Long templateId; + private String templateId; /** * 算法数量 @@ -45,6 +43,10 @@ public class AiCompareEntity extends BaseEntity { * 总数量 * */ private Integer totalNum; + /** + *用户昵称 + * */ + private String nickName; /** *部门名称 diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/entity/AiCompareQueueEntity.java b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/entity/AiCompareQueueEntity.java index f154460..0bb8205 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/entity/AiCompareQueueEntity.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/entity/AiCompareQueueEntity.java @@ -29,17 +29,17 @@ public class AiCompareQueueEntity implements Serializable { /** * 航线id 对应wayline_id 字段 * */ - private String fileId; + private String waylineId; /** * 航线名称 * */ - private String fileName; + private String waylineName; /** * 任务id * */ - private Integer jobId; + private String jobId; /** *任务名称 @@ -59,6 +59,6 @@ public class AiCompareQueueEntity implements Serializable { /** *队列类型 0:未比对 1:比对 * */ - private Byte queueType; + private String queueType; } diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/IAiCompareQueueService.java b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/IAiCompareQueueService.java index d9c4152..f0310a3 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/IAiCompareQueueService.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/IAiCompareQueueService.java @@ -1,8 +1,21 @@ package org.dromara.sample.wayline.service; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.sample.wayline.model.dto.AiCompareQueueDTO; +import org.dromara.sample.wayline.model.entity.AiCompareQueueEntity; +import org.dromara.sample.wayline.model.entity.WaylineJobEntity; + +import java.util.Date; +import java.util.List; + /** * @auther yq * @data 2025/3/21 */ public interface IAiCompareQueueService { + TableDataInfo queueList(AiCompareQueueDTO bo, PageQuery pageQuery); + ListtemplateList(String waylineId, Date createTime); + AiCompareQueueEntity getInfo(Long queueId); + Boolean updateStatus(List ids,String queueType); } diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/IAiCompareService.java b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/IAiCompareService.java index 2dd2a5c..6fbfb90 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/IAiCompareService.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/IAiCompareService.java @@ -1,8 +1,26 @@ package org.dromara.sample.wayline.service; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.sample.wayline.model.dto.AiCompareDTO; +import org.dromara.sample.wayline.model.dto.AiCompareMediaFileDTO; +import org.dromara.sample.wayline.model.entity.AiCompareEntity; + +import java.util.List; +import java.util.Map; + /** * @auther yq * @data 2025/3/21 */ public interface IAiCompareService { + + TableDataInfo queryPageList(AiCompareDTO bo, PageQuery pageQuery); + + Boolean insertByBo(List>compareDTOList); + + Boolean update(Map compareDTO); + + AiCompareEntity getInfo(Long id); + List queryById(Long id); } diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/AiCompareQueueServiceImpl.java b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/AiCompareQueueServiceImpl.java index 030c1eb..263e92c 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/AiCompareQueueServiceImpl.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/AiCompareQueueServiceImpl.java @@ -1,14 +1,84 @@ package org.dromara.sample.wayline.service.impl; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.tdunning.math.stats.Sort; +import lombok.Data; +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.apache.poi.ss.formula.functions.T; +import org.dromara.common.core.utils.MapstructUtils; +import org.dromara.common.core.utils.StringUtils; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.sample.wayline.mapper.IAiCompareQueueMapper; +import org.dromara.sample.wayline.mapper.IWaylineJobMapper; +import org.dromara.sample.wayline.model.dto.AiCompareDTO; +import org.dromara.sample.wayline.model.dto.AiCompareQueueDTO; +import org.dromara.sample.wayline.model.entity.AiCompareEntity; +import org.dromara.sample.wayline.model.entity.AiCompareQueueEntity; +import org.dromara.sample.wayline.model.entity.WaylineJobEntity; import org.dromara.sample.wayline.service.IAiCompareQueueService; import org.springframework.stereotype.Service; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.Date; +import java.util.List; +import java.util.Map; + /** * @auther yq * @data 2025/3/21 */ +@RequiredArgsConstructor @Service @Slf4j public class AiCompareQueueServiceImpl implements IAiCompareQueueService { + + private final IAiCompareQueueMapper aiCompareQueueMapper; + private final IWaylineJobMapper waylineJobMapper; + @Override + public TableDataInfo queueList(AiCompareQueueDTO bo, PageQuery pageQuery) { + return TableDataInfo.build(aiCompareQueueMapper.selectPage(pageQuery.build(),this.buildAiCompareDTOQueryWrapper(bo))); + } + + @Override + public List templateList(String waylineId, Date createTime) { + QueryWrapper wrapper = Wrappers.query(); + // 如果 createTime 为空,使用当前时间 + if (createTime == null) { + createTime = Date.from(LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant()); + } + //获取最新的10条数据 + wrapper + .eq(StringUtils.isNotBlank(waylineId),"wayline_id", waylineId) + .lt(ObjectUtil.isNotEmpty(createTime),"create_time",createTime) // 增加创建时间小于指定时间的条件 + .orderByDesc("create_time") + .last("limit 10"); + List jobEntityList = waylineJobMapper.selectList(wrapper); + return jobEntityList; + } + + private QueryWrapper buildAiCompareDTOQueryWrapper(AiCompareQueueDTO bo) { + QueryWrapper wrapper = Wrappers.query(); + wrapper + .eq(ObjectUtil.isNotEmpty(bo.getQueueType()), "queue_type",bo.getQueueType()) + .like(StringUtils.isNotBlank(bo.getWaylineName()), "lower(wayline_name)", StringUtils.lowerCase(bo.getWaylineName())) + .like(StringUtils.isNotBlank(bo.getJobName()), "lower(job_name)", StringUtils.lowerCase(bo.getJobName())) + .orderByDesc("create_time"); + return wrapper; + } + @Override + public AiCompareQueueEntity getInfo(Long queueId) { + return aiCompareQueueMapper.selectById(queueId); + } + + @Override + public Boolean updateStatus(List ids,String queueType) { + return aiCompareQueueMapper.updateStatus(ids,queueType); + } } diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/AiCompareServiceImpl.java b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/AiCompareServiceImpl.java index 03451ea..2ab193a 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/AiCompareServiceImpl.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/AiCompareServiceImpl.java @@ -1,15 +1,140 @@ package org.dromara.sample.wayline.service.impl; +import cn.hutool.core.convert.Convert; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.apache.ibatis.executor.BatchResult; +import org.dromara.common.core.constant.AiCompareStatusConstants; +import org.dromara.common.core.utils.MapstructUtils; +import org.dromara.common.core.utils.StreamUtils; +import org.dromara.common.core.utils.StringUtils; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.satoken.utils.LoginHelper; +import org.dromara.common.translation.annotation.Translation; +import org.dromara.sample.wayline.mapper.IAiCompareMapper; +import org.dromara.sample.wayline.mapper.IWaylineJobMapper; +import org.dromara.sample.wayline.model.dto.AiCompareDTO; +import org.dromara.sample.wayline.model.dto.AiCompareMediaFileDTO; +import org.dromara.sample.wayline.model.entity.AiCompareEntity; +import org.dromara.sample.wayline.model.entity.AiCompareQueueEntity; +import org.dromara.sample.wayline.model.entity.WaylineJobEntity; +import org.dromara.sample.wayline.service.IAiCompareQueueService; import org.dromara.sample.wayline.service.IAiCompareService; +import org.dromara.system.api.model.LoginUser; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; /** * @auther yq * @data 2025/3/21 */ +@RequiredArgsConstructor @Service @Slf4j public class AiCompareServiceImpl implements IAiCompareService { + private final IAiCompareQueueService aiCompareQueueService; + private final IAiCompareMapper aiCompareMapper; + private final IWaylineJobMapper waylineJobMapper; + + @Override + public TableDataInfo queryPageList(AiCompareDTO bo, PageQuery pageQuery) { + return TableDataInfo.build(aiCompareMapper.selectPage(pageQuery.build(),this.buildAiCompareDTOQueryWrapper(bo))); + } + private QueryWrapper buildAiCompareDTOQueryWrapper(AiCompareDTO bo) { + Map params = bo.getParams(); + QueryWrapper wrapper = Wrappers.query(); + wrapper + .eq(StringUtils.isNotEmpty(bo.getStatus()), "status",bo.getStatus()) + .eq(ObjectUtil.isNotEmpty(bo.getCreateBy()), "create_by",bo.getCreateBy()) + .like(StringUtils.isNotBlank(bo.getDeptName()), "lower(dept_name)", StringUtils.lowerCase(bo.getDeptName())) + .like(StringUtils.isNotBlank(bo.getJobName()), "lower(job_name)", StringUtils.lowerCase(bo.getJobName())) + .between(params.get("beginTime") != null && params.get("endTime") != null, + "create_time", params.get("beginTime"), params.get("endTime")); + return wrapper; + } + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean insertByBo(List> compareDTOList) { + if(compareDTOList.isEmpty()){ + throw new RuntimeException("未选择比对数据"); + } + List insertList =new ArrayList<>(); + for (Map bo : compareDTOList) { + Long queueId = Convert.toLong(bo.get("queueId")); + AiCompareQueueEntity serviceInfo = aiCompareQueueService.getInfo(queueId); + AiCompareEntity aiCompareEntity = new AiCompareEntity(); + LoginUser loginUser = LoginHelper.getLoginUser(); + aiCompareEntity.setWaylineName(serviceInfo.getWaylineName()); + aiCompareEntity.setJobId(serviceInfo.getJobId()); + aiCompareEntity.setJobName(serviceInfo.getJobName()); + aiCompareEntity.setTotalNum(serviceInfo.getPictureNumber()); + aiCompareEntity.setCreateBy(loginUser.getUserId()); + aiCompareEntity.setNickName(loginUser.getNickname()); + aiCompareEntity.setDeptName(loginUser.getDeptName()); + aiCompareEntity.setCreateDept(loginUser.getDeptId()); + aiCompareEntity.setStatus(AiCompareStatusConstants.COMPARE_STATUS_1); + aiCompareEntity.setCreateTime(new Date()); + String templateId = Convert.toStr(bo.get("templateId")); + if(ObjectUtil.isNotEmpty(templateId)){ + aiCompareEntity.setTemplateId(templateId); + }else { + //获取最新一条的模板进行比对 + LambdaQueryWrapper lasted = Wrappers.lambdaQuery() + .eq(WaylineJobEntity::getFileId, serviceInfo.getWaylineId()) + .lt(WaylineJobEntity::getCreateTime, serviceInfo.getCreateTime()) // 增加创建时间小于指定时间的条件 + .orderByDesc(WaylineJobEntity::getCreateTime) + .last("limit 1"); + List jobEntityList = waylineJobMapper.selectList(lasted); + if(jobEntityList.isEmpty()){ + throw new RuntimeException("("+serviceInfo.getWaylineName()+")未找到对应的模板"); + }else { + aiCompareEntity.setTemplateId(jobEntityList.get(0).getJobId()); + } + } + insertList.add(aiCompareEntity); + } + List resultList = aiCompareMapper.insertOrUpdate(insertList, 10); + System.out.println(resultList); + List list =compareDTOList.stream().map(e->Convert.toLong(e.get("queueId"))).collect(Collectors.toList()); + ; + return aiCompareQueueService.updateStatus(list,AiCompareStatusConstants.QUEUW_TYPE_1); + } + + @Override + public Boolean update(Map compareDTO) { + AiCompareEntity aiCompareEntity =new AiCompareEntity(); + Long id = Convert.toLong(compareDTO.get("id")); + aiCompareEntity.setId(id); + String templateId = Convert.toStr(compareDTO.get("templateId")); + if(StrUtil.isNotEmpty(templateId)){ + aiCompareEntity.setTemplateId(templateId); + } + + return aiCompareMapper.updateById(aiCompareEntity)>0; + } + + @Override + public AiCompareEntity getInfo(Long id) { + return aiCompareMapper.selectById(id); + } + + @Override + public List queryById(Long id) { + AiCompareEntity aiCompareEntity = aiCompareMapper.selectById(id); + List mediaFileDTOList = aiCompareMapper.listMediaFile(aiCompareEntity); + return mediaFileDTOList; + } } diff --git a/dk-modules/sample/src/main/resources/mapper/AiCompareMapper.xml b/dk-modules/sample/src/main/resources/mapper/AiCompareMapper.xml new file mode 100644 index 0000000..b30ec1f --- /dev/null +++ b/dk-modules/sample/src/main/resources/mapper/AiCompareMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + diff --git a/dk-modules/sample/src/main/resources/mapper/AiCompareQueueMapper.xml b/dk-modules/sample/src/main/resources/mapper/AiCompareQueueMapper.xml new file mode 100644 index 0000000..cb15b2f --- /dev/null +++ b/dk-modules/sample/src/main/resources/mapper/AiCompareQueueMapper.xml @@ -0,0 +1,21 @@ + + + + + update ai_compare_queue + + queue_type = #{queueType} + + where id in + + #{id} + + + + + +