You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
lxCameraApi/src/main/java/com/example/lxcameraapi/controller/BoxCountController.java

102 lines
4.0 KiB
Java

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package com.example.lxcameraapi.controller;
import com.example.lxcameraapi.conf.AppConfig;
import com.example.lxcameraapi.service.IndustrialCamera.camera.lx.LxCameraService;
import com.example.lxcameraapi.service.IndustrialCamera.camera.lx.config.BoxCountRequest;
import com.example.lxcameraapi.service.IndustrialCamera.camera.lx.config.BoxCountResponse;
import com.example.lxcameraapi.service.IndustrialCamera.camera.lx.config.BoxCountResult;
import com.example.lxcameraapi.service.IndustrialCamera.camera.lx.config.CaptureResult;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.HashMap;
import java.util.Map;
/**
* 箱子数量计算控制器
* 提供箱子数量计算接口
*/
@Slf4j
@RestController
@RequestMapping("/api/boxCount")
public class BoxCountController {
@Autowired
private LxCameraService lxCameraService;
@Autowired
private AppConfig appConfig;
/**
* 计算箱子数量POST请求
* POST /api/boxcount/calculate
* Body: JSON格式的BoxCountRequest
*/
@PostMapping("/calculate")
public BoxCountResponse countBoxes(@RequestBody BoxCountRequest request) {
log.info("收到箱子数量计算请求: {}", request);
String pcdFilePath = appConfig.getPicPath();
String cameraIp = appConfig.getLxCamera().isEmpty() ? null : appConfig.getLxCamera().get(0).getIp();
String cameraCalibratePath = appConfig.getLxCamera().isEmpty() ? null : appConfig.getLxCamera().get(0).getCalibratePath();
request.setCameraCalibratePath(cameraCalibratePath);
CaptureResult captureResult = lxCameraService.capture(cameraIp,pcdFilePath);
request.setPcdFilePath(captureResult.getFilePath("pointCloud"));
try {
BoxCountResult result = lxCameraService.countBoxes(request);
BoxCountResponse response = BoxCountResponse.fromResult(result);
response.setImagePath(captureResult.getFilePath("rgb").replace(appConfig.getPicPath(), appConfig.getPicUrl()));
log.info("箱子数量计算结果: {}", result.getSummary());
return response;
} catch (Exception e) {
log.error("箱子数量计算异常", e);
return BoxCountResponse.error("计算异常: " + e.getMessage());
}
}
/**
* 计算箱子数量GET请求
* GET /api/boxcount/calculate?pcdFilePath=xxx&floorHeight=xxx&boxLength=xxx&boxWidth=xxx&boxHeight=xxx&stackType=xxx
*/
@GetMapping("/calculate")
public BoxCountResponse countBoxesByGet(
@RequestParam String pcdFilePath,
@RequestParam(required = false) Double floorHeight,
@RequestParam(required = false) Double boxLength,
@RequestParam(required = false) Double boxWidth,
@RequestParam(required = false) Double boxHeight,
@RequestParam(required = false) String stackType,
@RequestParam(required = false) Integer maxBoxesPerLayer,
@RequestParam(required = false) Double baseTolerance,
@RequestParam(required = false) Double additionalTolerancePerLevel,
@RequestParam(required = false) String minBounds,
@RequestParam(required = false) String maxBounds) {
log.info("收到箱子数量计算请求GET: pcdFilePath={}", pcdFilePath);
// 创建请求对象
BoxCountRequest request = new BoxCountRequest();
request.setPcdFilePath(pcdFilePath);
request.setFloorHeight(floorHeight);
request.setBoxLength(boxLength);
request.setBoxWidth(boxWidth);
request.setBoxHeight(boxHeight);
request.setStackType(stackType);
request.setMaxBoxesPerLayer(maxBoxesPerLayer);
request.setBaseTolerance(baseTolerance);
request.setAdditionalTolerancePerLevel(additionalTolerancePerLevel);
// 解析边界(如果提供)
// 调用POST处理
return countBoxes(request);
}
}