From 86b44282eaac1d11a50431e3404e891371202fc9 Mon Sep 17 00:00:00 2001 From: zt Date: Fri, 7 Nov 2025 10:34:03 +0800 Subject: [PATCH] =?UTF-8?q?=E6=95=B0=E6=8D=AE=E6=8E=A8=E9=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../clarityPm/dto/ViolationRecord.java | 49 +++++++++++++++ .../method/ClarityPmAsyncMethod.java | 54 ++++++++++++++++- .../clarityPm/method/ClarityPmClient.java | 59 ++++++++++++++++++- 3 files changed, 158 insertions(+), 4 deletions(-) create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/dataTransmission/clarityPm/dto/ViolationRecord.java diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/dataTransmission/clarityPm/dto/ViolationRecord.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/dataTransmission/clarityPm/dto/ViolationRecord.java new file mode 100644 index 00000000..59ad7031 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/dataTransmission/clarityPm/dto/ViolationRecord.java @@ -0,0 +1,49 @@ +package org.dromara.dataTransmission.clarityPm.dto; + +import lombok.Data; + +import java.io.Serializable; + +/** + * 违规行为实体类 + */ +@Data +public class ViolationRecord implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 摄像头设备序列号 + */ + private String deviceSerial; + + /** + * 摄像头名称 + */ + private String deviceName; + + /** + * 违规类型 + * 1.未戴安全帽 + * 2.未穿反光衣 + * 3.吸烟 + * 4.非授权人员闯入箱变/配电箱区域 + */ + private String violationsType; + + /** + * 违规行为描述【几人未戴安全帽、几人抽烟 。。。】 + */ + private String violationsInfo; + + /** + * 违规时间【yyyy-MM-dd HH:mm:ss】 + */ + private String createTime; + + /** + * 违规图片【http地址,1张图片】 + */ + private String imgPath; + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/dataTransmission/clarityPm/method/ClarityPmAsyncMethod.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/dataTransmission/clarityPm/method/ClarityPmAsyncMethod.java index f9dbd779..f2deebe3 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/dataTransmission/clarityPm/method/ClarityPmAsyncMethod.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/dataTransmission/clarityPm/method/ClarityPmAsyncMethod.java @@ -1,15 +1,23 @@ package org.dromara.dataTransmission.clarityPm.method; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.date.LocalDateTimeUtil; +import cn.hutool.core.lang.TypeReference; +import cn.hutool.core.util.StrUtil; +import cn.hutool.json.JSONUtil; import jakarta.annotation.Resource; +import org.dromara.common.core.utils.DateUtils; import org.dromara.common.utils.IdCardEncryptorUtil; import org.dromara.contractor.domain.SubConstructionUser; import org.dromara.contractor.service.ISubConstructionUserFileService; import org.dromara.contractor.service.ISubConstructionUserService; import org.dromara.dataTransmission.clarityPm.dto.AttendanceRecord; import org.dromara.dataTransmission.clarityPm.dto.RealUser; +import org.dromara.dataTransmission.clarityPm.dto.ViolationRecord; +import org.dromara.manager.recognizermanager.enums.RecognizerTypeEnum; import org.dromara.project.domain.BusAttendance; import org.dromara.project.service.IBusProjectTeamMemberService; +import org.dromara.safety.domain.HseRecognizeRecord; import org.dromara.system.domain.vo.SysOssVo; import org.dromara.system.service.ISysOssService; import org.springframework.context.annotation.Lazy; @@ -17,6 +25,7 @@ import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Component; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import java.util.Map; @@ -99,7 +108,7 @@ public class ClarityPmAsyncMethod { //0-app,1-考勤机 String source = busAttendance.getSource(); - attendanceRecord.setDeviceType("1".equals(source)?"1":"2"); + attendanceRecord.setDeviceType("1".equals(source) ? "1" : "2"); attendanceRecord.setDeviceName(busAttendance.getSn()); String format = LocalDateTimeUtil.format(busAttendance.getClockTime(), "yyyy-MM-dd HH:mm:ss"); attendanceRecord.setClockInTime(format); @@ -118,6 +127,49 @@ public class ClarityPmAsyncMethod { } + public void transmitAttendanceRecord(List recognizeRecords) { + List records = new ArrayList<>(); + for (HseRecognizeRecord record : recognizeRecords) { + String violationType = record.getViolationType(); + String[] typeList = violationType.split(","); + for (String type : typeList) { + ViolationRecord violationRecord = new ViolationRecord(); + violationRecord.setDeviceSerial(record.getDeviceSerial()); + violationRecord.setDeviceName(record.getDeviceName()); + String violationsType = null; + switch (type) { + case "2", "3": + violationsType = "1"; + break; + case "4": + violationsType = "2"; + break; + case "5": + violationsType = "3"; + break; + default: + } + if(StrUtil.isBlank(violationsType)){ + continue; + } + violationRecord.setViolationsType(violationsType); + String description = RecognizerTypeEnum.fromCode(violationsType).getText(); + violationRecord.setViolationsInfo(description); + violationRecord.setCreateTime(DateUtils.formatDateTime(record.getCreateTime())); + violationRecord.setImgPath(record.getPicture()); + records.add(violationRecord); + } + if (CollectionUtil.isNotEmpty(records)) { + try { + ClarityPmClient.batchInsertViolationRecord(records); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + + } + } } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/dataTransmission/clarityPm/method/ClarityPmClient.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/dataTransmission/clarityPm/method/ClarityPmClient.java index fca6f6c8..cd2750cd 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/dataTransmission/clarityPm/method/ClarityPmClient.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/dataTransmission/clarityPm/method/ClarityPmClient.java @@ -6,6 +6,7 @@ import cn.hutool.json.JSONUtil; import org.dromara.dataTransmission.TokenUtils; import org.dromara.dataTransmission.clarityPm.dto.AttendanceRecord; import org.dromara.dataTransmission.clarityPm.dto.RealUser; +import org.dromara.dataTransmission.clarityPm.dto.ViolationRecord; import org.springframework.stereotype.Component; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSON; @@ -24,9 +25,7 @@ public class ClarityPmClient { private static final String INSERT_ATTENDANCE_RECORD_URL = "https://claritypm.powerchina.cn/neSmartsite-api/realUser/tiandong/insertAttendance"; - - @Autowired - private TokenUtils tokenUtils; // 依赖之前的Token获取服务 + private static final String INSERT_VIOLATION_RECORD_URL = "https://claritypm.powerchina.cn/neSmartsite-api/remote/violations/info/add/tiandong"; /** * 批量新增实名制用户信息 @@ -129,4 +128,58 @@ public class ClarityPmClient { throw new RuntimeException("批量新增考勤失败:" + msg + "(状态码:" + code + ")"); } } + + + /** + * 批量新增违规信息 + * @param records 违规信息列表(建议单次不超过10条) + * @throws Exception 调用异常 + */ + public static void batchInsertViolationRecord(List records) throws Exception { + // 1. 校验列表大小(建议不超过10条) + if (records == null || records.isEmpty()) { + throw new IllegalArgumentException("违规列表不能为空"); + } + if (records.size() > 10) { + throw new IllegalArgumentException("单次批量新增不能超过10条数据"); + } + + // 2. 获取Token(从之前的TokenService获取) + String token = TokenUtils.getToken(TokenUtils.CLARITYPM); + if ( token.trim().isEmpty()) { + throw new RuntimeException("获取Token失败,无法调用接口"); + } + + // 3. 构建请求头(包含Token认证) + Map headers = new HashMap<>(); + headers.put("Content-Type", "application/json; charset=UTF-8"); + headers.put("User-Agent", "Mozilla/5.0"); + headers.put("Accept", "application/json"); + headers.put("Origin", "https://claritypm.powerchina.cn"); + headers.put("Referer", "https://claritypm.powerchina.cn/"); + headers.put("Authorization", "Bearer " + token); // 假设接口使用Bearer Token认证 + + // 4. 构建请求体(JSONArray格式) + JSONArray requestBody = JSONArray.parseArray(JSON.toJSONString(records)); + String jsonBody = requestBody.toJSONString(); + System.out.println("批量新增违规请求体:" + jsonBody); + + // 5. 发送POST请求 + String response = HttpUtil.createPost(INSERT_VIOLATION_RECORD_URL) + .addHeaders(headers) + .body(jsonBody) + .execute() + .body(); + System.out.println("批量新增违规响应:" + response); + + // 6. 解析响应(根据实际响应结构调整,此处假设与登录接口类似) + JSONObject responseJson = JSONUtil.parseObj(response); + int code = responseJson.getInt("code"); + String msg = responseJson.getStr("msg"); + if (code != 200) { + throw new RuntimeException("批量新增违规失败:" + msg + "(状态码:" + code + ")"); + } + } + + }