1.施工信息问题修复

This commit is contained in:
cuizhibin 2025-07-03 16:28:21 +08:00
parent 8cba5fe502
commit 3dd13474b6
11 changed files with 175 additions and 46 deletions

View File

@ -0,0 +1,20 @@
package com.dite.znpt.config;
import cn.hutool.core.date.LocalDateTimeUtil;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
import java.io.IOException;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class CustomLocalDateTimeDeserializer extends JsonDeserializer<LocalDateTime> {
private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
@Override
public LocalDateTime deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
String date = p.getText();
return LocalDateTimeUtil.parse(date, FORMATTER);
}
}

View File

@ -9,6 +9,8 @@ import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary; import org.springframework.context.annotation.Primary;
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder; import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
import java.time.LocalDateTime;
/** /**
* @date 2022/3/20 10:34 上午 * @date 2022/3/20 10:34 上午
* @description: * @description:
@ -25,6 +27,7 @@ public class JacksonConfig {
SimpleModule simpleModule = new SimpleModule(); SimpleModule simpleModule = new SimpleModule();
//JSON Long ==> String //JSON Long ==> String
simpleModule.addSerializer(Long.class, ToStringSerializer.instance); simpleModule.addSerializer(Long.class, ToStringSerializer.instance);
simpleModule.addDeserializer(LocalDateTime.class, new CustomLocalDateTimeDeserializer());
objectMapper.registerModule(simpleModule); objectMapper.registerModule(simpleModule);
return objectMapper; return objectMapper;
} }

View File

@ -0,0 +1,41 @@
package com.dite.znpt.domain.vo;
import com.dite.znpt.util.ValidationGroup;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.io.Serial;
import java.io.Serializable;
import java.util.List;
@Data
@ApiModel("缺陷记录列表请求实体")
public class DefectMarkReq implements Serializable {
@Serial
private static final long serialVersionUID = 585419070823466048L;
@ApiModelProperty("图片id")
private String imageId;
@ApiModelProperty("图片集id")
private String collectId;
@NotBlank(groups = {ValidationGroup.Request.class}, message = "模型id不能为空")
@ApiModelProperty("模型id")
private String modelId;
@NotNull(groups = {ValidationGroup.Request.class}, message = "模型置信度不能为空")
@Min(value = 0, groups = {ValidationGroup.Request.class}, message = "模型置信度只能在0-100之间")
@Max(value = 100, groups = {ValidationGroup.Request.class}, message = "模型置信度只能在0-100之间")
@ApiModelProperty("置信度")
private float confThreshold;
@ApiModelProperty("缺陷类型")
private List<String> defectTypeList;
}

View File

@ -0,0 +1,57 @@
package com.dite.znpt.domain.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* @author huise23
* @date 2025/07/03 16:25
* @Description: 施工信息表请求类
*/
@Data
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="TConstruction请求对象", description="施工信息表")
public class TConstructionReq implements Serializable {
@Serial
private static final long serialVersionUID = 583631934062856440L;
@ApiModelProperty("施工id")
private String constructionId;
@ApiModelProperty("项目id")
private String projectId;
@ApiModelProperty("机组id")
private String turbineCode;
@ApiModelProperty("作业开始时间")
private LocalDateTime startTime;
@ApiModelProperty("作业结束时间")
private LocalDateTime endTime;
@ApiModelProperty("温度(℃)")
private Double temperature;
@ApiModelProperty("风速(m/s)")
private Double windSpeed;
@ApiModelProperty("采集图片数量")
private Integer imageCount;
@ApiModelProperty("天气id")
private String weatherCode;
@ApiModelProperty("施工状态")
private String statusId;
@ApiModelProperty("当前时间")
private LocalDateTime createdAt;
}

View File

@ -13,7 +13,7 @@ import java.util.List;
*/ */
@Getter @Getter
public enum DefectTypeEnum { public enum DefectTypeEnum {
CRAZE("CRAZE", "合缝开裂"), CRAZE("BMLW", "合缝开裂"),
ABRASION("ABRASION", "合缝磨损"), ABRASION("ABRASION", "合缝磨损"),
LEATHER_BREAKAGE("LEATHER_BREAKAGE", "蒙皮破损"), LEATHER_BREAKAGE("LEATHER_BREAKAGE", "蒙皮破损"),
FABRIC_BREAKAGE("FABRIC_BREAKAGE", "布层破损"), FABRIC_BREAKAGE("FABRIC_BREAKAGE", "布层破损"),

View File

@ -3,6 +3,7 @@ package com.dite.znpt.service;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.dite.znpt.domain.entity.TConstructionEntity; import com.dite.znpt.domain.entity.TConstructionEntity;
import com.dite.znpt.domain.vo.TConstructionListReq; import com.dite.znpt.domain.vo.TConstructionListReq;
import com.dite.znpt.domain.vo.TConstructionReq;
import com.dite.znpt.domain.vo.TConstructionResp; import com.dite.znpt.domain.vo.TConstructionResp;
import java.util.List; import java.util.List;
@ -37,20 +38,20 @@ public interface TConstructionService extends IService<TConstructionEntity> {
/** /**
* 功能描述新增施工信息 * 功能描述新增施工信息
* *
* @param tConstruction 施工信息 * @param req 施工信息
* @author huise23 * @author huise23
* @date 2025/04/11 23:17 * @date 2025/04/11 23:17
**/ **/
void saveData(TConstructionEntity tConstruction); void saveData(TConstructionReq req);
/** /**
* 功能描述更新施工信息 * 功能描述更新施工信息
* *
* @param tConstruction 施工信息 * @param req 施工信息
* @author huise23 * @author huise23
* @date 2025/04/11 23:17 * @date 2025/04/11 23:17
**/ **/
void updateData(TConstructionEntity tConstruction); void updateData(TConstructionReq req);
/** /**
* 功能描述删除施工信息 * 功能描述删除施工信息

View File

@ -1,15 +1,17 @@
package com.dite.znpt.service.impl; package com.dite.znpt.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dite.znpt.domain.entity.TConstructionEntity; import com.dite.znpt.domain.entity.TConstructionEntity;
import com.dite.znpt.domain.vo.TConstructionListReq; import com.dite.znpt.domain.vo.TConstructionListReq;
import com.dite.znpt.domain.vo.TConstructionReq;
import com.dite.znpt.domain.vo.TConstructionResp; import com.dite.znpt.domain.vo.TConstructionResp;
import com.dite.znpt.service.TConstructionService;
import com.dite.znpt.mapper.TConstructionMapper; import com.dite.znpt.mapper.TConstructionMapper;
import org.springframework.stereotype.Service; import com.dite.znpt.service.TConstructionService;
import cn.hutool.core.collection.CollUtil;
import lombok.RequiredArgsConstructor;
import com.dite.znpt.util.PageUtil; import com.dite.znpt.util.PageUtil;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.List; import java.util.List;
@ -60,27 +62,25 @@ public class TConstructionServiceImpl extends ServiceImpl<TConstructionMapper, T
/** /**
* 功能描述新增施工信息 * 功能描述新增施工信息
* *
* @param tConstruction 施工信息 * @param req 施工信息
* @author huise23 * @author huise23
* @date 2025/04/11 23:17 * @date 2025/04/11 23:17
**/ **/
@Override @Override
public void saveData(TConstructionEntity tConstruction) { public void saveData(TConstructionReq req) {
// todo 校验 save(BeanUtil.copyProperties(req, TConstructionEntity.class));
save(tConstruction);
} }
/** /**
* 功能描述更新施工信息 * 功能描述更新施工信息
* *
* @param tConstruction 施工信息 * @param req 施工信息
* @author huise23 * @author huise23
* @date 2025/04/11 23:17 * @date 2025/04/11 23:17
**/ **/
@Override @Override
public void updateData(TConstructionEntity tConstruction) { public void updateData(TConstructionReq req) {
// todo 校验 updateById(BeanUtil.copyProperties(req, TConstructionEntity.class));
updateById(tConstruction);
} }
/** /**

View File

@ -1,7 +1,5 @@
package com.dite.znpt.util; package com.dite.znpt.util;
import lombok.Data;
/** /**
* @author Bear.G * @author Bear.G
* @date 2025/5/19/周一 15:09 * @date 2025/5/19/周一 15:09
@ -11,4 +9,5 @@ import lombok.Data;
public interface ValidationGroup { public interface ValidationGroup {
interface Insert {} // interface Insert {} //
interface Update {} // interface Update {} //
interface Request {} // 其他类型
} }

View File

@ -2,19 +2,25 @@ package com.dite.znpt.web.controller;
import com.dite.znpt.constant.Constants; import com.dite.znpt.constant.Constants;
import com.dite.znpt.domain.PageResult;
import com.dite.znpt.domain.Result;
import com.dite.znpt.domain.entity.DefectEntity;
import com.dite.znpt.domain.vo.DefectListReq; import com.dite.znpt.domain.vo.DefectListReq;
import com.dite.znpt.domain.vo.DefectMarkReq;
import com.dite.znpt.domain.vo.DefectReq; import com.dite.znpt.domain.vo.DefectReq;
import com.dite.znpt.domain.vo.DefectResp; import com.dite.znpt.domain.vo.DefectResp;
import com.dite.znpt.domain.entity.DefectEntity;
import com.dite.znpt.service.DefectService; import com.dite.znpt.service.DefectService;
import com.dite.znpt.domain.Result; import com.dite.znpt.service.impl.MultiModelYoloService;
import com.dite.znpt.domain.PageResult; import com.dite.znpt.util.ValidationGroup;
import com.pig4cloud.plugin.excel.annotation.RequestExcel; import com.pig4cloud.plugin.excel.annotation.RequestExcel;
import com.pig4cloud.plugin.excel.annotation.ResponseExcel; import com.pig4cloud.plugin.excel.annotation.ResponseExcel;
import com.pig4cloud.plugin.excel.vo.ErrorMessage; import com.pig4cloud.plugin.excel.vo.ErrorMessage;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.BindingResult; import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource; import javax.annotation.Resource;
@ -30,6 +36,8 @@ import java.util.List;
public class DefectController { public class DefectController {
@Resource @Resource
private DefectService defectService; private DefectService defectService;
@Autowired
private MultiModelYoloService multiModelYoloService;
@ApiOperation(value = "分页查询缺陷记录列表", httpMethod = "GET") @ApiOperation(value = "分页查询缺陷记录列表", httpMethod = "GET")
@GetMapping("/page") @GetMapping("/page")
@ -87,5 +95,18 @@ public class DefectController {
} }
return Result.okM("导入"+dataList.size()+"条数据"); return Result.okM("导入"+dataList.size()+"条数据");
} }
@ApiOperation(value = "单图自动标注缺陷", httpMethod = "POST")
@PostMapping("/run")
public ResponseEntity<String> runBatch(@Validated(ValidationGroup.Request.class) @RequestBody DefectMarkReq markReq,
@RequestParam("outputDir") String outputDir,
@RequestParam("confThreshold") Float confThreshold) {
try {
// multiModelYoloService.runFolderDetection(modelId, inputDir, outputDir, confThreshold);
return ResponseEntity.ok("批量推理完成");
} catch (Exception e) {
return ResponseEntity.status(500).body("处理失败:" + e.getMessage());
}
}
} }

View File

@ -13,7 +13,6 @@ import com.dite.znpt.util.ValidationGroup;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
@ -66,18 +65,5 @@ public class ModelConfigController {
modelConfigService.deleteById(modelId); modelConfigService.deleteById(modelId);
return Result.ok(); return Result.ok();
} }
@PostMapping("/run")
public ResponseEntity<String> runBatch(@RequestParam("modelId") String modelId,
@RequestParam("inputDir") String inputDir,
@RequestParam("outputDir") String outputDir,
@RequestParam("confThreshold") Float confThreshold) {
try {
multiModelYoloService.runFolderDetection(modelId, inputDir, outputDir, confThreshold);
return ResponseEntity.ok("批量推理完成");
} catch (Exception e) {
return ResponseEntity.status(500).body("处理失败:" + e.getMessage());
}
}
} }

View File

@ -2,12 +2,13 @@ package com.dite.znpt.web.controller;
import com.dite.znpt.constant.Constants; import com.dite.znpt.constant.Constants;
import com.dite.znpt.domain.vo.TConstructionListReq;
import com.dite.znpt.domain.vo.TConstructionResp;
import com.dite.znpt.domain.entity.TConstructionEntity;
import com.dite.znpt.service.TConstructionService;
import com.dite.znpt.domain.Result;
import com.dite.znpt.domain.PageResult; import com.dite.znpt.domain.PageResult;
import com.dite.znpt.domain.Result;
import com.dite.znpt.domain.entity.TConstructionEntity;
import com.dite.znpt.domain.vo.TConstructionListReq;
import com.dite.znpt.domain.vo.TConstructionReq;
import com.dite.znpt.domain.vo.TConstructionResp;
import com.dite.znpt.service.TConstructionService;
import com.pig4cloud.plugin.excel.annotation.RequestExcel; import com.pig4cloud.plugin.excel.annotation.RequestExcel;
import com.pig4cloud.plugin.excel.annotation.ResponseExcel; import com.pig4cloud.plugin.excel.annotation.ResponseExcel;
import com.pig4cloud.plugin.excel.vo.ErrorMessage; import com.pig4cloud.plugin.excel.vo.ErrorMessage;
@ -21,7 +22,7 @@ import java.util.List;
/** /**
* @author huise23 * @author huise23
* @date 2025/04/11 23:17 * @date 2025/07/03 16:25
*/ */
@Api(tags = "施工信息") @Api(tags = "施工信息")
@RestController @RestController
@ -44,15 +45,15 @@ public class TConstructionController {
@ApiOperation(value = "新增施工信息", httpMethod = "POST") @ApiOperation(value = "新增施工信息", httpMethod = "POST")
@PostMapping @PostMapping
public Result<Object> add(@RequestBody TConstructionEntity tConstruction) { public Result<Object> add(@RequestBody TConstructionReq tConstructionReq) {
tConstructionService.saveData(tConstruction); tConstructionService.saveData(tConstructionReq);
return Result.ok(); return Result.ok();
} }
@ApiOperation(value = "修改施工信息", httpMethod = "PUT") @ApiOperation(value = "修改施工信息", httpMethod = "PUT")
@PutMapping @PutMapping
public Result<Object> edit(@RequestBody TConstructionEntity tConstruction) { public Result<Object> edit(@RequestBody TConstructionReq tConstructionReq) {
tConstructionService.updateData(tConstruction); tConstructionService.updateData(tConstructionReq);
return Result.ok(); return Result.ok();
} }