feat(ops): 安保工单 admin-api/open-api 补全确认、提交、误报接口

admin-api:
- 新增 /false-alarm 误报标记接口(权限: ops:security-order:complete)
- createOrder 移除 location 字段

open-api:
- 新增 /confirm 确认工单(无需传 userId)
- 新增 /submit 提交处理结果(结果描述 + 图片)
- 新增 /false-alarm 误报标记
- createOrder 移除 location 字段

VO 优化:
- 合并 SecurityOrderFalseAlarmReqVO 和 SecurityOrderOpenConfirmReqVO
  为通用 SecurityOrderIdReqVO,消除重复定义

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
lzh
2026-03-15 10:33:51 +08:00
parent f32315f790
commit ea64ca9c61
5 changed files with 44 additions and 45 deletions

View File

@@ -6,6 +6,7 @@ import com.viewsh.module.ops.controller.admin.security.vo.SecurityOrderAutoCompl
import com.viewsh.module.ops.controller.admin.security.vo.SecurityOrderCompleteReqVO;
import com.viewsh.module.ops.controller.admin.security.vo.SecurityOrderConfirmReqVO;
import com.viewsh.module.ops.controller.admin.security.vo.SecurityOrderCreateReqVO;
import com.viewsh.module.ops.controller.admin.security.vo.SecurityOrderIdReqVO;
import com.viewsh.module.ops.security.service.securityorder.SecurityOrderCompleteReqDTO;
import com.viewsh.module.ops.security.service.securityorder.SecurityOrderCreateReqDTO;
import com.viewsh.module.ops.security.service.securityorder.SecurityOrderService;
@@ -48,7 +49,6 @@ public class SecurityOrderController {
.description(reqVO.getDescription())
.priority(reqVO.getPriority())
.areaId(reqVO.getAreaId())
.location(reqVO.getLocation())
.alarmId(reqVO.getAlarmId())
.alarmType(reqVO.getAlarmType())
.cameraId(reqVO.getCameraId())
@@ -90,4 +90,12 @@ public class SecurityOrderController {
return success(true);
}
@PostMapping("/false-alarm")
@Operation(summary = "误报标记", description = "将安保工单标记为误报并完成")
@PreAuthorize("@ss.hasPermission('ops:security-order:complete')")
public CommonResult<Boolean> falseAlarmOrder(@Valid @RequestBody SecurityOrderIdReqVO reqVO) {
securityOrderService.falseAlarmOrder(reqVO.getOrderId(), SecurityFrameworkUtils.getLoginUserId());
return success(true);
}
}

View File

@@ -28,9 +28,6 @@ public class SecurityOrderCreateReqVO {
@NotNull(message = "区域ID不能为空")
private Long areaId;
@Schema(description = "具体位置描述", example = "A栋3层东侧走廊")
private String location;
// ==================== 告警来源 ====================
@Schema(description = "关联告警ID", example = "ALM20260211001")

View File

@@ -1,20 +0,0 @@
package com.viewsh.module.ops.controller.admin.security.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
/**
* 安保工单误报请求 VO
*
* @author lzh
*/
@Schema(description = "安保工单误报请求")
@Data
public class SecurityOrderFalseAlarmReqVO {
@Schema(description = "工单ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1001")
@NotNull(message = "工单ID不能为空")
private Long orderId;
}

View File

@@ -1,20 +0,0 @@
package com.viewsh.module.ops.controller.admin.security.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
/**
* 安保工单开放接口确认请求 VO无需传 userId默认使用已分配人员
*
* @author lzh
*/
@Schema(description = "安保工单确认请求(开放接口)")
@Data
public class SecurityOrderOpenConfirmReqVO {
@Schema(description = "工单ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1001")
@NotNull(message = "工单ID不能为空")
private Long orderId;
}

View File

@@ -3,7 +3,10 @@ package com.viewsh.module.ops.controller.open.security;
import com.viewsh.framework.common.pojo.CommonResult;
import com.viewsh.framework.signature.core.annotation.ApiSignature;
import com.viewsh.module.ops.controller.admin.security.vo.SecurityOrderAutoCompleteReqVO;
import com.viewsh.module.ops.controller.admin.security.vo.SecurityOrderCompleteReqVO;
import com.viewsh.module.ops.controller.admin.security.vo.SecurityOrderCreateReqVO;
import com.viewsh.module.ops.controller.admin.security.vo.SecurityOrderIdReqVO;
import com.viewsh.module.ops.security.service.securityorder.SecurityOrderCompleteReqDTO;
import com.viewsh.module.ops.security.service.securityorder.SecurityOrderCreateReqDTO;
import com.viewsh.module.ops.security.service.securityorder.SecurityOrderService;
import io.swagger.v3.oas.annotations.Operation;
@@ -48,7 +51,6 @@ public class SecurityOrderOpenController {
.description(reqVO.getDescription())
.priority(reqVO.getPriority())
.areaId(reqVO.getAreaId())
.location(reqVO.getLocation())
.alarmId(reqVO.getAlarmId())
.alarmType(reqVO.getAlarmType())
.cameraId(reqVO.getCameraId())
@@ -69,4 +71,36 @@ public class SecurityOrderOpenController {
return success(true);
}
@PostMapping("/confirm")
@Operation(summary = "确认工单", description = "由外部系统调用,确认安保人员已接单,无需传 userId自动取已分配人员")
@ApiSignature
@PermitAll
public CommonResult<Boolean> confirmOrder(@Valid @RequestBody SecurityOrderIdReqVO reqVO) {
securityOrderService.confirmOrder(reqVO.getOrderId(), null);
return success(true);
}
@PostMapping("/submit")
@Operation(summary = "工单提交", description = "由外部系统调用,提交处理结果(描述 + 图片),完成工单")
@ApiSignature
@PermitAll
public CommonResult<Boolean> submitOrder(@Valid @RequestBody SecurityOrderCompleteReqVO reqVO) {
SecurityOrderCompleteReqDTO dto = SecurityOrderCompleteReqDTO.builder()
.orderId(reqVO.getOrderId())
.result(reqVO.getResult())
.resultImgUrls(reqVO.getResultImgUrls())
.build();
securityOrderService.manualCompleteOrder(dto);
return success(true);
}
@PostMapping("/false-alarm")
@Operation(summary = "误报标记", description = "由外部系统调用,将工单标记为误报并完成")
@ApiSignature
@PermitAll
public CommonResult<Boolean> falseAlarmOrder(@Valid @RequestBody SecurityOrderIdReqVO reqVO) {
securityOrderService.falseAlarmOrder(reqVO.getOrderId(), null);
return success(true);
}
}