ソースを参照

增加调用node转换服务

xiewj 2 年 前
コミット
cc04fa23df

+ 67 - 0
src/main/java/com/fdkankan/scene/controller/SceneMarkShapeBoxController.java

@@ -0,0 +1,67 @@
+package com.fdkankan.scene.controller;
+
+import cn.hutool.core.io.FileUtil;
+import cn.hutool.core.util.ObjectUtil;
+import com.fdkankan.fyun.face.FYunFileServiceInterface;
+import com.fdkankan.model.constants.UploadFilePath;
+import com.fdkankan.rabbitmq.util.RabbitMqProducer;
+import com.fdkankan.scene.entity.SceneMarkShape;
+import com.fdkankan.scene.entity.ScenePlus;
+import com.fdkankan.scene.entity.ScenePlusExt;
+import com.fdkankan.scene.service.ISceneMarkShapeBoxService;
+import com.fdkankan.scene.service.ISceneMarkShapeService;
+import com.fdkankan.scene.service.IScenePlusExtService;
+import com.fdkankan.scene.service.IScenePlusService;
+import com.fdkankan.scene.service.impl.SceneMarkShapeBoxServiceImpl;
+import com.fdkankan.scene.vo.SceneMarkShapeBoxParamVO;
+import com.fdkankan.scene.vo.SceneMarkShapeDetectParamVO;
+import com.fdkankan.scene.vo.SceneMarkShapeParamVO;
+import com.fdkankan.scene.vo.SceneMarkShapeReDetectParamVO;
+import com.fdkankan.web.controller.BaseController;
+import com.fdkankan.web.response.ResultData;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import java.io.IOException;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * 初始化接口
+ *
+ * @author fdkk
+ */
+@RestController
+@RequestMapping("/service/scene/sceneMarkShapeBox")
+@Slf4j
+public class SceneMarkShapeBoxController extends BaseController
+{
+    @Autowired
+    ISceneMarkShapeBoxService sceneMarkShapeBoxService;
+
+    /**
+     * 根据场景码获取box数据
+     */
+    @PostMapping("/getInfo")
+    public ResultData getInfo(@RequestBody @Validated SceneMarkShapeBoxParamVO param) {
+         return ResultData.ok(sceneMarkShapeBoxService.findBySceneNum(param.getSceneNum()));
+    }
+
+    /**
+     * 根据场景码转换box数据并且保存
+     */
+    @PostMapping("/planeCovert")
+    public ResultData planeCovert(@RequestBody @Validated SceneMarkShapeBoxParamVO param) {
+        sceneMarkShapeBoxService.planeCovert(param.getSceneNum());
+        return ResultData.ok();
+    }
+
+}

+ 8 - 0
src/main/java/com/fdkankan/scene/controller/SceneMarkShapeController.java

@@ -82,6 +82,14 @@ public class SceneMarkShapeController extends BaseController
         return ResultData.ok(res);
     }
     /**
+     * 根据场景码和图片名称获取数据
+     */
+    @PostMapping("/getInfos")
+    public ResultData getInfos(@RequestBody @Validated  SceneMarkShapeParamVO param) {
+        List<SceneMarkShape> res=  sceneMarkShapeService.findByNum(param.getNum());
+        return ResultData.ok(res);
+    }
+    /**
      * 将需要推理的场景推入到队列
      */
     @PostMapping("/detectScene")

+ 53 - 0
src/main/java/com/fdkankan/scene/entity/SceneMarkShapeBox.java

@@ -0,0 +1,53 @@
+package com.fdkankan.scene.entity;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.annotation.*;
+import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * <p>
+ * 场景标记多边形识别数据
+ * </p>
+ *
+ * @author Xiewj
+ * @date 2023/3/30
+ */
+@Data
+@TableName(value = "t_scene_mark_shape_box",autoResultMap = true)
+@Accessors(chain = true)
+public class SceneMarkShapeBox implements Serializable {
+
+      /**
+       * 主键
+       */
+      @TableId(value = "id", type = IdType.AUTO)
+      private Long id;
+
+      @TableField(typeHandler = FastjsonTypeHandler.class, value = "boxes")
+      private List<JSONObject> boxes;
+      @TableField(typeHandler = FastjsonTypeHandler.class, value = "boundingBox")
+      private JSONObject boundingBox;
+
+      @TableField("sceneNum")
+      private String sceneNum;
+
+      @TableField("create_time")
+      private Date createTime;
+
+      @TableField("update_time")
+      private Date updateTime;
+
+      /**
+       * 记录的状态,A: 生效,I: 禁用
+       */
+      @TableField("rec_status")
+      @TableLogic(value = "A", delval = "I")
+      private String recStatus;
+
+}

+ 25 - 0
src/main/java/com/fdkankan/scene/httpclient/ShapesBoxClient.java

@@ -0,0 +1,25 @@
+package com.fdkankan.scene.httpclient;
+
+
+import com.dtflys.forest.annotation.Get;
+import com.dtflys.forest.annotation.JSONBody;
+import com.dtflys.forest.annotation.Post;
+import com.dtflys.forest.annotation.Var;
+import com.dtflys.forest.extensions.DownloadFile;
+import com.fdkankan.web.response.ResultData;
+
+import java.io.File;
+
+public interface ShapesBoxClient {
+
+
+    /**
+     * 在方法上加上@DownloadFile注解
+     * dir属性表示文件下载到哪个目录
+     * filename属性表示文件下载成功后以什么名字保存,如果不填,这默认从URL中取得文件名
+     * OnProgress参数为监听上传进度的回调函数
+     */
+
+    @Post("${url}")
+    ResultData post(@Var("url") String url,@JSONBody String body);
+}

+ 17 - 0
src/main/java/com/fdkankan/scene/mapper/MarkShapeBoxMapper.java

@@ -0,0 +1,17 @@
+package com.fdkankan.scene.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fdkankan.scene.entity.SceneMarkShape;
+import com.fdkankan.scene.entity.SceneMarkShapeBox;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author Xiewj
+ * @date 2023-8-31 10:43:49
+ */
+@Mapper
+@Component("MarkShapeBoxMapper")
+public interface MarkShapeBoxMapper extends BaseMapper<SceneMarkShapeBox> {
+}
+

+ 23 - 0
src/main/java/com/fdkankan/scene/service/ISceneMarkShapeBoxService.java

@@ -0,0 +1,23 @@
+package com.fdkankan.scene.service;
+
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fdkankan.scene.entity.SceneMarkShape;
+import com.fdkankan.scene.entity.SceneMarkShapeBox;
+import com.fdkankan.scene.vo.SceneMarkShapeParamVO;
+import com.fdkankan.scene.vo.SceneMarkShapeReDetectParamVO;
+import com.fdkankan.web.response.ResultData;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.IOException;
+import java.util.List;
+
+/**
+ * Created by Xiewj on 2023年8月31日10:42:44
+ */
+public interface ISceneMarkShapeBoxService extends IService<SceneMarkShapeBox> {
+
+    SceneMarkShapeBox findBySceneNum(String sceneNum);
+
+    void planeCovert(String sceneNum);
+}

+ 1 - 0
src/main/java/com/fdkankan/scene/service/ISceneMarkShapeService.java

@@ -18,6 +18,7 @@ public interface ISceneMarkShapeService extends IService<SceneMarkShape> {
     void saveFileToDB(MultipartFile inPath, String num) throws IOException;
 
     SceneMarkShape findByNumAndImagePath(String num, String imagePath);
+    List<SceneMarkShape> findByNum(String num);
 
     ResultData editLabelByFile(String num, String imgPath, MultipartFile file) throws IOException;
 

+ 87 - 0
src/main/java/com/fdkankan/scene/service/impl/SceneMarkShapeBoxServiceImpl.java

@@ -0,0 +1,87 @@
+package com.fdkankan.scene.service.impl;
+
+import cn.hutool.core.io.FileUtil;
+import cn.hutool.core.lang.UUID;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+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.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fdkankan.common.constant.ErrorCode;
+import com.fdkankan.model.constants.ConstantFilePath;
+import com.fdkankan.rabbitmq.util.RabbitMqProducer;
+import com.fdkankan.scene.entity.SceneMarkShape;
+import com.fdkankan.scene.entity.SceneMarkShapeBox;
+import com.fdkankan.scene.httpclient.ShapesBoxClient;
+import com.fdkankan.scene.mapper.MarkShapeBoxMapper;
+import com.fdkankan.scene.mapper.MarkShapeMapper;
+import com.fdkankan.scene.service.ISceneMarkShapeBoxService;
+import com.fdkankan.scene.service.ISceneMarkShapeService;
+import com.fdkankan.scene.util.ConverxyUtil;
+import com.fdkankan.scene.vo.SceneMarkShapeBoxPostVO;
+import com.fdkankan.scene.vo.SceneMarkShapeParamVO;
+import com.fdkankan.scene.vo.SceneMarkShapeReDetectParamVO;
+import com.fdkankan.web.response.ResultData;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+
+/**
+ * Created by Xiewj on 2023-8-31 10:44:46
+ */
+@Slf4j
+@Service
+public class SceneMarkShapeBoxServiceImpl extends ServiceImpl<MarkShapeBoxMapper, SceneMarkShapeBox> implements ISceneMarkShapeBoxService {
+
+    @Autowired
+    ISceneMarkShapeService sceneMarkShapeService;
+    @Resource
+    ShapesBoxClient shapesBoxClient;
+
+    @Value("${4dkk.nodeService.basePath}")
+    private String planeCovertBasePathUrl;
+    @Value("${4dkk.nodeService.api.planeCovert}")
+    private String planeCovert;
+    @Override
+    public SceneMarkShapeBox findBySceneNum(String sceneNum) {
+        LambdaQueryWrapper<SceneMarkShapeBox> wrapper = Wrappers.lambdaQuery();
+        wrapper.eq(SceneMarkShapeBox::getSceneNum,sceneNum);
+        return getOne(wrapper);
+    }
+
+    @Override
+    public void planeCovert(String sceneNum) {
+        List<SceneMarkShape> sceneMarkShapes =  sceneMarkShapeService.findByNum(sceneNum);
+        SceneMarkShapeBoxPostVO sceneMarkShapeBoxPostVO =new SceneMarkShapeBoxPostVO(sceneNum,sceneMarkShapes);
+        ResultData res = shapesBoxClient.post(planeCovertBasePathUrl + planeCovert, JSONObject.toJSONString(sceneMarkShapeBoxPostVO));
+        log.info("请求node转换服务-{}",res);
+        if (res.getCode()==200){
+            SceneMarkShapeBox data = (SceneMarkShapeBox)res.getData();
+            SceneMarkShapeBox sceneMarkShapeBox = findBySceneNum(sceneNum);
+            if (ObjectUtil.isNotNull(sceneMarkShapeBox)){
+                log.info("存在shapesBox数据进行替换");
+                sceneMarkShapeBox.setBoxes(data.getBoxes());
+                sceneMarkShapeBox.setBoundingBox(data.getBoundingBox());
+                updateById(sceneMarkShapeBox);
+            }else {
+                log.info("不存在shapesBox数据进行保存");
+                save(data);
+            }
+
+        }
+
+    }
+}

+ 8 - 1
src/main/java/com/fdkankan/scene/service/impl/SceneMarkShapeServiceImpl.java

@@ -143,6 +143,13 @@ public class SceneMarkShapeServiceImpl extends ServiceImpl<MarkShapeMapper, Scen
     }
 
     @Override
+    public List<SceneMarkShape> findByNum(String num) {
+        LambdaQueryWrapper<SceneMarkShape> wrapper = Wrappers.lambdaQuery();
+        wrapper.eq(SceneMarkShape::getNum,num);
+        return list(wrapper);
+    }
+
+    @Override
     public SceneMarkShape findByNumAndImagePath(String num, String imagePath) {
         LambdaQueryWrapper<SceneMarkShape> wrapper = Wrappers.lambdaQuery();
         wrapper.eq(SceneMarkShape::getNum,num);
@@ -154,7 +161,7 @@ public class SceneMarkShapeServiceImpl extends ServiceImpl<MarkShapeMapper, Scen
     public void saveFileToDB(MultipartFile file, String num) throws IOException {
         String uuid = UUID.randomUUID().toString();
         String fileName = file.getOriginalFilename();
-        String extName = cn.hutool.core.io.FileUtil.extName(fileName);
+        String extName =  FileUtil.extName(fileName);
         String tempFileName = uuid + "." + extName;
         String srcPath = ConstantFilePath.SCENE_V4_PATH + num + "/markShapes/" + tempFileName;
         File tempFile = new File(srcPath);

+ 33 - 0
src/main/java/com/fdkankan/scene/vo/SceneMarkShapeBoxParamVO.java

@@ -0,0 +1,33 @@
+package com.fdkankan.scene.vo;
+
+import com.fdkankan.scene.entity.SceneMarkShape;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.constraints.NotBlank;
+import java.util.List;
+
+/**
+ * <p>
+ * TODO
+ * </p>
+ *
+ * @author dengsixing
+ * @since 2022/1/19
+ **/
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class SceneMarkShapeBoxParamVO {
+
+    /**
+     * 场景码
+     */
+    @NotBlank(message = "场景码不能为空")
+    private String sceneNum;
+
+
+}

+ 38 - 0
src/main/java/com/fdkankan/scene/vo/SceneMarkShapeBoxPostVO.java

@@ -0,0 +1,38 @@
+package com.fdkankan.scene.vo;
+
+import com.fdkankan.scene.entity.SceneMarkShape;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.constraints.NotBlank;
+import java.util.List;
+
+/**
+ * <p>
+ * TODO
+ * </p>
+ *
+ * @author dengsixing
+ * @since 2022/1/19
+ **/
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class SceneMarkShapeBoxPostVO {
+
+    /**
+     * 场景码
+     */
+    @NotBlank(message = "场景码不能为空")
+    private String sceneNum;
+
+    /**
+     * 图片名称路径
+     */
+    private List<SceneMarkShape> imgBoxsList;
+
+
+}