From 7e301851c744dfac9704b658f7d970b45bf4135e Mon Sep 17 00:00:00 2001 From: shizisheng Date: Tue, 27 May 2025 15:43:33 +0800 Subject: [PATCH] =?UTF-8?q?=E6=98=9F=E9=80=BB=E7=AE=97=E6=B3=95-=E8=B0=83?= =?UTF-8?q?=E7=94=A8=E5=AE=89=E5=85=A8=E5=B8=BD=E8=AF=86=E5=88=AB-?= =?UTF-8?q?=E4=BF=9D=E5=AD=98=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/BusinessAlertConstructInfo.java | 2 +- .../impl/BusinessAlertServiceImpl.java | 60 +++++- .../manage/config/XingluoApiConfig.java | 32 ++++ .../sample/manage/config/XingluoApiEnum.java | 68 +++++++ .../sample/manage/config/xingluoApiType.json | 83 +++++++++ .../SampleEngineRecordController.java | 172 +++++++++++++++++- .../model/entity/EngineRecordEntity.java | 17 ++ .../manage/model/entity/TaskJobEntity.java | 5 + .../model/entity/WarningRecordEntity.java | 9 +- .../service/impl/EngineRecordServiceImpl.java | 6 +- .../impl/SampleEngineRecordServiceImpl.java | 146 ++++++++------- 11 files changed, 515 insertions(+), 85 deletions(-) create mode 100644 dk-modules/sample/src/main/java/org/dromara/sample/manage/config/XingluoApiConfig.java create mode 100644 dk-modules/sample/src/main/java/org/dromara/sample/manage/config/XingluoApiEnum.java create mode 100644 dk-modules/sample/src/main/java/org/dromara/sample/manage/config/xingluoApiType.json diff --git a/dk-modules/business/src/main/java/org/dromara/business/domain/BusinessAlertConstructInfo.java b/dk-modules/business/src/main/java/org/dromara/business/domain/BusinessAlertConstructInfo.java index 4c349fc..e2bc794 100644 --- a/dk-modules/business/src/main/java/org/dromara/business/domain/BusinessAlertConstructInfo.java +++ b/dk-modules/business/src/main/java/org/dromara/business/domain/BusinessAlertConstructInfo.java @@ -22,7 +22,7 @@ public class BusinessAlertConstructInfo extends TenantEntity { private static final long serialVersionUID = 1L; /** - * + * */ @TableId(value = "id") private Long id; diff --git a/dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertServiceImpl.java b/dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertServiceImpl.java index 79a85b9..bd99d4b 100644 --- a/dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertServiceImpl.java +++ b/dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertServiceImpl.java @@ -1,7 +1,9 @@ package org.dromara.business.service.impl; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.ListUtil; +import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -18,6 +20,7 @@ import org.dromara.business.api.domain.vo.RemoteBusinessAlertConstructInfo; import org.dromara.business.api.domain.vo.RemoteBusinessAlertVo; import org.dromara.business.config.ProjectTablePrefixConfig; import org.dromara.business.domain.BusinessAlert; +import org.dromara.business.domain.BusinessAlertConstructInfo; import org.dromara.business.domain.bo.BusinessAlertBo; import org.dromara.business.domain.vo.BusinessAlertConstructInfoVo; import org.dromara.business.domain.vo.BusinessAlertVo; @@ -181,9 +184,11 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService { alert.setCreateTime(new Date()); alert.setHandleType(BusinessStatusEnum.VERIFY.getStatus()); RemoteBusinessAlertConstructInfo remoteAlertConstructInfo = alert.getRemoteAlertConstructInfo(); - BusinessAlertConstructInfoVo alertConstructInfoVo = new BusinessAlertConstructInfoVo(); - BeanUtils.copyProperties(alert.getRemoteAlertConstructInfo(), alertConstructInfoVo); - businessAlert.setAlertConstructInfoVo(alertConstructInfoVo); + if(BeanUtil.isNotEmpty(remoteAlertConstructInfo)){ + BusinessAlertConstructInfoVo alertConstructInfoVo = new BusinessAlertConstructInfoVo(); + BeanUtils.copyProperties(remoteAlertConstructInfo, alertConstructInfoVo); + businessAlert.setAlertConstructInfoVo(alertConstructInfoVo); + } BeanUtils.copyProperties(alert, businessAlert); if(!StrUtil.equals("default", activeProfile)){ businessAlert.setBusinessType(2); @@ -291,6 +296,8 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService { } Page page = this.baseMapper.pageBusinessAlert(pageQuery.build(), wrapper, ptPrefix); + //拼接-预警扩展施工信息 + setupConstructInfo(page.getRecords(), page); try {//预警管理查询图片 page.getRecords().forEach(businessAlertVo->{ @@ -329,6 +336,8 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService { Page page = this.baseMapper.pageBusinessAlertCancel(pageQuery.build(), wrapper, ptPrefix); + //拼接-预警扩展施工信息 + setupConstructInfo(page.getRecords(), page); try { page.getRecords().forEach(businessAlertVo->{ if (businessAlertVo.getBusinessType() == 2){ @@ -367,6 +376,9 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService { Page page = this.baseMapper.pageBusinessAlertFinish(pageQuery.build(), wrapper, ptPrefix); + //拼接-预警扩展施工信息 + setupConstructInfo(page.getRecords(), page); + try { page.getRecords().forEach(businessAlertVo->{ if (businessAlertVo.getBusinessType() == 2){ @@ -418,6 +430,9 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService { }); } + //拼接-预警扩展施工信息 + setupConstructInfo(records, page); + try { page.getRecords().forEach(businessAlertVo->{ if (businessAlertVo.getBusinessType() == 2){ @@ -452,6 +467,9 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService { Page page = this.baseMapper.pageBusinessAlertHandle(pageQuery.build(), wrapper, ptPrefix); + //拼接-预警扩展施工信息 + setupConstructInfo(page.getRecords(), page); + try { page.getRecords().forEach(businessAlertVo->{ businessAlertVo.setHandleType(null); @@ -471,6 +489,21 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService { return TableDataInfo.build(page); } + private void setupConstructInfo(List records, Page page) { + List alertIds = records.stream().map(BusinessAlert::getId).collect(Collectors.toList()); + if(alertIds.isEmpty()){ + return; + } + LambdaQueryWrapper qw = new LambdaQueryWrapper(); + qw.in(BusinessAlertConstructInfo::getBusinessAlertId, alertIds); + List constructInfoVoList = businessAlertConstructInfoMapper.selectVoList(qw,BusinessAlertConstructInfoVo.class); + for (BusinessAlert record : page.getRecords()) { + BusinessAlertConstructInfoVo businessAlertConstructInfoVo = constructInfoVoList.stream().filter(item -> item.getBusinessAlertId().equals(record.getId())).findFirst().orElse(null); + record.setAlertConstructInfoVo(businessAlertConstructInfoVo); + } + } + + /** * 构建wrapper @@ -914,8 +947,20 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService { LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>(); wrapper.eq(BusinessAlert::getHandleType,BusinessStatusEnum.VERIFY.getStatus()); wrapper.in(BusinessAlert::getId, alertIdList); + List businessAlerts = this.baseMapper.selectList(wrapper); +// 删除文件 - 仅处理ai识别文件删除 + for (BusinessAlert businessAlert : businessAlerts) { + if(businessAlert.getBusinessType().equals(2)){ + try { + MinioUtil.deleteFile(businessAlert.getImages(), MinIOConstants.BUCKET_DKCY); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + } - return this.baseMapper.delete(wrapper) > 0; + boolean b = this.baseMapper.delete(wrapper) > 0; + return b; } @Override @@ -1019,6 +1064,13 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService { List businessAlerts = this.baseMapper.listTodoAlert(wrapper, ptPrefix); BusinessAlert businessAlert = businessAlerts.stream().filter(p -> p.getId().equals(alertId)).findFirst().get(); + //拼接-预警扩展施工信息 + QueryWrapper qw = new QueryWrapper(); + qw.eq("business_alert_id", businessAlert.getId()); + List constructInfoVoList = businessAlertConstructInfoMapper.selectVoList(qw); + if(!constructInfoVoList.isEmpty()){ + businessAlert.setAlertConstructInfoVo(constructInfoVoList.getFirst()); + } try { if (businessAlert.getBusinessType() == 2){ diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/config/XingluoApiConfig.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/config/XingluoApiConfig.java new file mode 100644 index 0000000..76bda87 --- /dev/null +++ b/dk-modules/sample/src/main/java/org/dromara/sample/manage/config/XingluoApiConfig.java @@ -0,0 +1,32 @@ +package org.dromara.sample.manage.config; + +import cn.hutool.core.io.IoUtil; +import cn.hutool.core.util.StrUtil; +import io.minio.*; +import io.minio.http.Method; +import lombok.Data; +import lombok.Getter; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; +import org.springframework.stereotype.Component; + +import java.io.InputStream; +import java.util.HashMap; + +@Data +@Component +@ConfigurationProperties(prefix="xingluoapi") +public class XingluoApiConfig { + + @Value("${xingluoapi.engineLogin:http://60.204.247.65:8100/Third/Login}") + private String engineLogin; + @Value("${xingluoapi.engineCallbackUrl:http://121.237.178.63:11100/sample/manage/api/v1/saEngineRecord/some}") + private String engineCallbackUrl; + @Value("${xingluoapi.engineStart:http://60.204.247.65:8100/Third/Engine/Start}") + private String engineStart; + @Value("${xingluoapi.engineStop:http://60.204.247.65:8100/Third/Engine/Stop}") + private String engineStop; + + +} diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/config/XingluoApiEnum.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/config/XingluoApiEnum.java new file mode 100644 index 0000000..2f1e837 --- /dev/null +++ b/dk-modules/sample/src/main/java/org/dromara/sample/manage/config/XingluoApiEnum.java @@ -0,0 +1,68 @@ +package org.dromara.sample.manage.config; + +public enum XingluoApiEnum { + SAFETY_HELMET(2004, "可见光","是否佩戴安全帽","安全帽预警","2004_ext",2004, 1899717400907046939l,"SafetyHelmet","安全帽"), + SAFETY_HARNESS(2003, "可见光","是否佩戴安全绳","安全绳预警","2003_ext",2003, 1899717400907046940l,"SafetyHarness","安全带"); + + + private final Integer id; + private final String sence; + private final String type; + private final String typeStr; //类型描述 + private final String extraType; + private final Integer senceId; + + private final Long aiLabelId; //ailabel对照数据 + private final String aiType; + private final String aiName; + + XingluoApiEnum(Integer id, String sence, String type, String typeStr, String extraType, Integer senceId, Long aiLabelId,String aiType, String aiName) { + this.id = id; + this.sence = sence; + this.type = type; + this.typeStr = typeStr; + this.extraType = extraType; + this.senceId = senceId; + + this.aiLabelId = aiLabelId; + this.aiType = aiType; + this.aiName = aiName; + } + + + public Integer getId() { + return id; + } + + public String getSence() { + return sence; + } + + public String getType() { + return type; + } + + public String getTypeStr() { + return typeStr; + } + + public String getExtraType() { + return extraType; + } + + public Integer getSenceId() { + return senceId; + } + + public Long getAiLabelId() { + return aiLabelId; + } + + public String getAiType() { + return aiType; + } + + public String getAiName() { + return aiName; + } +} diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/config/xingluoApiType.json b/dk-modules/sample/src/main/java/org/dromara/sample/manage/config/xingluoApiType.json new file mode 100644 index 0000000..da4a255 --- /dev/null +++ b/dk-modules/sample/src/main/java/org/dromara/sample/manage/config/xingluoApiType.json @@ -0,0 +1,83 @@ +{ + "code": 200, + "message": "操作成功", + "data": [ + { + "id": 2022, + "sence": "可见光", + "type": "秸秆焚烧(烟、火、焚后痕迹)", + "model": "01", + "difficult": 0, + "extra_type": "2010_12", + "if_open": 1, + "user": "xuzhou_ai", + "sence_id": 2022, + "conf": 0.7, + "aiConfig": 0 + }, + { + "id": 2023, + "sence": "可见光", + "type": "烟火识别", + "model": "01", + "difficult": 0, + "extra_type": "2010_13", + "if_open": 1, + "user": "xuzhou_ai", + "sence_id": 2023, + "conf": 0.7, + "aiConfig": 0 + }, + { + "id": 2003, + "sence": "可见光", + "type": "是否佩戴安全绳", + "model": "01", + "difficult": 0, + "extra_type": "2003_ext", + "if_open": 1, + "user": "xuzhou_ai", + "sence_id": 2003, + "conf": 0.7, + "aiConfig": 0 + }, + { + "id": 2004, + "sence": "可见光", + "type": "是否佩戴安全帽", + "model": "01", + "difficult": 0, + "extra_type": "2004_ext", + "if_open": 1, + "user": "xuzhou_ai", + "sence_id": 2004, + "conf": 0.7, + "aiConfig": 0 + }, + { + "id": 2034, + "sence": "可见光", + "type": "路面车辆计数", + "model": "01", + "difficult": 0, + "extra_type": "2010_24", + "if_open": 1, + "user": "xuzhou_ai", + "sence_id": 2034, + "conf": 0.7, + "aiConfig": 0 + }, + { + "id": 2015, + "sence": "可见光", + "type": "多类型车辆计数", + "model": "01", + "difficult": 0, + "extra_type": "2010_5", + "if_open": 1, + "user": "xuzhou_ai", + "sence_id": 2015, + "conf": 0.7 + } + ] +} diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/controller/SampleEngineRecordController.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/controller/SampleEngineRecordController.java index 3bf7485..f79bcc7 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/manage/controller/SampleEngineRecordController.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/manage/controller/SampleEngineRecordController.java @@ -1,30 +1,59 @@ package org.dromara.sample.manage.controller; +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.io.FileUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; import com.alibaba.nacos.common.utils.CollectionUtils; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.apache.dubbo.config.annotation.DubboReference; +import org.dromara.business.api.RemoteBusinessAlertService; +import org.dromara.business.api.domain.vo.RemoteBusinessAlertVo; +import org.dromara.common.core.utils.file.MimeTypeUtils; +import org.dromara.common.oss.core.OssClient; +import org.dromara.common.oss.entity.UploadResult; +import org.dromara.common.oss.factory.OssFactory; import org.dromara.common.sdk.common.HttpResultResponse; +import org.dromara.sample.manage.config.XingluoApiEnum; +import org.dromara.sample.manage.mapper.ITaskJobMapper; import org.dromara.sample.manage.model.dto.CallBackDTO; +import org.dromara.sample.manage.model.dto.DeviceDTO; import org.dromara.sample.manage.model.dto.EventsDTO; +import org.dromara.sample.manage.model.entity.TaskJobEntity; import org.dromara.sample.manage.model.entity.WarningRecordEntity; +import org.dromara.sample.manage.service.IDeviceService; import org.dromara.sample.manage.service.ISampleEngineRecordService; import org.dromara.sample.manage.service.ISampleWarningRecordService; +import org.dromara.sample.media.constant.MinIOConstants; +import org.dromara.sample.wayline.mapper.IWaylineJobMapper; +import org.dromara.sample.wayline.model.entity.WaylineJobEntity; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import javax.annotation.Resource; +import java.io.IOException; +import java.io.InputStream; +import java.net.URL; +import java.net.URLConnection; import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.Optional; /** * @author sean.zhou * @version 0.1 * @date 2021/11/15 */ +@RequiredArgsConstructor @RestController @Slf4j @RequestMapping("${url.manage.prefix}${url.manage.version}/saEngineRecord") @@ -37,6 +66,16 @@ public class SampleEngineRecordController { @Autowired private ISampleWarningRecordService sampleWarningRecordService; + @Autowired + private IDeviceService deviceService; + + @DubboReference + private final RemoteBusinessAlertService businessAlertService; + + @Autowired + private final IWaylineJobMapper waylineJobMapper; + + /** * 启动星罗引擎。 * Get the topology list of all online devices in one workspace. @@ -55,23 +94,142 @@ public class SampleEngineRecordController { return HttpResultResponse.success(); } + @Resource + ITaskJobMapper taskJobMapper; + @PostMapping("/some") @Operation(summary = "存储推流的预警(对外接口)。", description = "存储推流的预警(对外接口)。") - public void some(@RequestBody CallBackDTO callBackVo){ - WarningRecordEntity warningRecord = new WarningRecordEntity(); - List list = new ArrayList<>(); +// public void some(@RequestBody CallBackDTO callBackVo){ + public void some(@RequestBody JSONObject resObject){ + JSONObject entries = new JSONObject(resObject); + CallBackDTO callBackVo = JSONUtil.toBean(resObject, CallBackDTO.class); + String str = entries.getStr("taskId"); +// System.out.println(entries.toString()); + if(StrUtil.isBlank(str)){ + + return; + } + List warningRecordList = new ArrayList<>(); +// String fileUrlStr = "mediafile/e5b8ce3a-3562-40e0-b244-91554d9c17ad/DJI_202505211323_001_e5b8ce3a-3562-40e0-b244-91554d9c17ad/DJI_20250521132610_0001_V.jpeg"; +// String fileUrl = fileService.getObjectUrlOne(MinIOConstants.BUCKET_DKCY, fileUrlStr, 360000).toString(); if (CollectionUtils.isNotEmpty(callBackVo.getEvents())){ - for (EventsDTO eventsVo :callBackVo.getEvents()){ + for (EventsDTO eventsVo :callBackVo.getEvents()){ //一个事件一个图片 + WarningRecordEntity warningRecord = new WarningRecordEntity(); warningRecord.setTaskId(callBackVo.getTaskId()); warningRecord.setAlgoId(eventsVo.getAlgoId()); warningRecord.setEventId(eventsVo.getEventId()); warningRecord.setExtraType(eventsVo.getExtraType()); warningRecord.setPicUrl(eventsVo.getPicUrl()); +// warningRecord.setPicUrl("http://114.235.183.147:9090/api/v1/download-shared-object/aHR0cDovLzEyNy4wLjAuMTo5MDAwL2RrY3kvbWVkaWFmaWxlL2U1YjhjZTNhLTM1NjItNDBlMC1iMjQ0LTkxNTU0ZDljMTdhZC9ESklfMjAyNTA1MjExMzIzXzAwMV9lNWI4Y2UzYS0zNTYyLTQwZTAtYjI0NC05MTU1NGQ5YzE3YWQvREpJXzIwMjUwNTIxMTMyNjEwXzAwMDFfVi5qcGVnP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QVI5MEk5QkxXWVZBWkRLOUowVjElMkYyMDI1MDUyMiUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNTA1MjJUMTUxNzAxWiZYLUFtei1FeHBpcmVzPTQzMjAwJlgtQW16LVNlY3VyaXR5LVRva2VuPWV5SmhiR2NpT2lKSVV6VXhNaUlzSW5SNWNDSTZJa3BYVkNKOS5leUpoWTJObGMzTkxaWGtpT2lKQlVqa3dTVGxDVEZkWlZrRmFSRXM1U2pCV01TSXNJbVY0Y0NJNk1UYzBOemsyT0RneE9Dd2ljR0Z5Wlc1MElqb2lZV1J0YVc0aWZRLkh1N1VaVkhuS19EUWhfR1lnLVB0cVhBNFpJTHpPTk1vTkZ3by1YalI0N0R3U3VnZ2NyRC1EdXkxeEdfM3FmWXdRQmdPd29Ca2xGVTRYLWpvNncxY0lRJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZ2ZXJzaW9uSWQ9bnVsbCZYLUFtei1TaWduYXR1cmU9MjNmZjdhZWViNTJlZjk4ZWFmMTg5OTg4MjQzNDk5ZTRiYzgwNzI5ZWU1MzJkM2M2MTdlMDFmM2U3ODZlZDA1OQ"); warningRecord.setTimestamp(eventsVo.getTimestamp()); - list.add(warningRecord); + warningRecordList.add(warningRecord); } - sampleWarningRecordService.saveBatch(list); - System.out.println(callBackVo); + sampleWarningRecordService.saveBatch(warningRecordList); + + //保存数据到BusinessAlert + String activeProfile = "w_nantong"; + ArrayList alertVoList = new ArrayList<>(); + + for (WarningRecordEntity warningRecordEntity : warningRecordList) { + RemoteBusinessAlertVo remoteBusinessAlertVo = new RemoteBusinessAlertVo(); + String deviceSn = ""; + if(null != warningRecordEntity.getTaskId()){ + LambdaQueryWrapper qw = new LambdaQueryWrapper<>(TaskJobEntity.class); + qw.eq(TaskJobEntity::getTaskId, warningRecordEntity.getTaskId()); + qw.orderByDesc(TaskJobEntity::getCreateTime); + qw.last("limit 1"); + TaskJobEntity taskJobEntity = taskJobMapper.selectOne(qw); //taskjob,找最新得一条任务 + if(BeanUtil.isNotEmpty(taskJobEntity)){ + String jobId = taskJobEntity.getJobId(); + deviceSn = taskJobEntity.getDeviceSn(); + if(StrUtil.isNotEmpty(jobId)){ + LambdaQueryWrapper waylineJobQuery = new LambdaQueryWrapper<>(); + waylineJobQuery.eq(WaylineJobEntity::getJobId,jobId); //jobId是unique唯一 + WaylineJobEntity waylineJobEntity = waylineJobMapper.selectOne(waylineJobQuery); + if(BeanUtil.isEmpty(waylineJobEntity)){ //找不到航线-不处理预警 + continue; + } + remoteBusinessAlertVo.setJobId(waylineJobEntity.getJobId()); + remoteBusinessAlertVo.setJobName(waylineJobEntity.getName()); + } + } + } + + remoteBusinessAlertVo.setLat(""); + remoteBusinessAlertVo.setLng(""); + if(StrUtil.isNotEmpty(deviceSn)){ + Optional deviceBySn = deviceService.getDeviceBySn(deviceSn); + DeviceDTO deviceDTO = deviceBySn.isPresent() ? deviceBySn.get() : null; + remoteBusinessAlertVo.setLat(deviceDTO.getLatitude()+ ""); + remoteBusinessAlertVo.setLng(deviceDTO.getLongitude()+ ""); +// remoteBusinessAlertVo.setLat("34.20912175973148"); +// remoteBusinessAlertVo.setLng("117.2260332850499"); + + } + + //预警基础信息扩展 +// remoteBusinessAlertVo.setAlertType("1"); //1:图片比对预警 2:AI实时预警 +// remoteBusinessAlertVo.setJobName(warningRecordEntity.getTaskId());//todo 需要查job信息。填jobName + remoteBusinessAlertVo.setAssign(false); + String minioUrl = saveAliyunPreviewToMinio(warningRecordEntity.getPicUrl(),deviceSn, MinIOConstants.BUCKET_DKCY); + remoteBusinessAlertVo.setImages(minioUrl); +// remoteBusinessAlertVo.setMaxImages("");//mateFileUrl +// remoteBusinessAlertVo.setMateSourceImgUrl("");//mateFileUrl + + setupLabelInfo(warningRecordEntity, remoteBusinessAlertVo);//设置标签信息 + remoteBusinessAlertVo.setTaskContent(""); + remoteBusinessAlertVo.setHandleType("waiting"); + +// remoteBusinessAlertVo.setDeptId(aiCompareEntity.getCreateDept()+""); +// remoteBusinessAlertVo.setDeptName(aiCompareEntity.getDeptName()); + remoteBusinessAlertVo.setHandleNum(0); + //businessAlertConstructInfo数据 + alertVoList.add(remoteBusinessAlertVo); + } + businessAlertService.saveBusinessAlert(alertVoList,activeProfile); + } + } + + private static void setupLabelInfo(WarningRecordEntity warningRecordEntity, RemoteBusinessAlertVo remoteBusinessAlertVo) { + // String extraType = XingluoApiEnum.SAFETY_HARNESS.getExtraType(); + switch (warningRecordEntity.getExtraType()){ + case "2004_ext": + remoteBusinessAlertVo.setLabelCn(XingluoApiEnum.SAFETY_HELMET.getTypeStr());//安全帽预警 + remoteBusinessAlertVo.setLabelEn(XingluoApiEnum.SAFETY_HELMET.getAiType()); //SafetyHelmet + break; + case "2003_ext": + remoteBusinessAlertVo.setLabelCn(XingluoApiEnum.SAFETY_HARNESS.getTypeStr());//安全绳预警 + remoteBusinessAlertVo.setLabelEn(XingluoApiEnum.SAFETY_HARNESS.getAiType()); //SafetyHarness + break; + } + } + + + public String saveAliyunPreviewToMinio(String aliyunUrl,String deviceSn, String minioBucket) { + try { + URL url = new URL(aliyunUrl); + URLConnection conn = url.openConnection(); + conn.setConnectTimeout(3_500); + conn.setReadTimeout(3_500); + InputStream inputStream = conn.getInputStream(); + long fileSize = conn.getContentLengthLong(); + + String fileName = FileUtil.getName(url.getPath()); + String path = url.getPath().replace(fileName, deviceSn+ fileName); // eg: /ai/report/29847/{deviceSn+xxx.jpg} + String originalFileName = path.substring(path.lastIndexOf("/") + 1); // qwfbGaBixI.jpg + String suffix = originalFileName.contains(".") ? originalFileName.substring(originalFileName.lastIndexOf(".")) : ".jpg"; // fallback + +// String newFileName = IdUtils.fastUUID() + suffix; + OssClient minioClient = OssFactory.instance(minioBucket); + UploadResult result = minioClient.upload(inputStream, path, fileSize, MimeTypeUtils.IMAGE_JPG); +// MinioUtil.uploadFile(path,inputStream,); + + inputStream.close(); + return path; // 返回 MinIO 的访问地址 + } catch (IOException e) { + throw new RuntimeException("上传图片失败", e); } } + + } diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/entity/EngineRecordEntity.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/entity/EngineRecordEntity.java index ebffdb9..92494af 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/entity/EngineRecordEntity.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/entity/EngineRecordEntity.java @@ -30,12 +30,23 @@ public class EngineRecordEntity implements Serializable { @TableField(value = "device_sn") private String deviceSn; + /** + * 算法类型 + */ @TableField(value = "extra_type") private String extraType; + + //引擎任务id 格式:qMx86W2tE @TableField(value = "task_id") private String taskId; + //任务批次号 格式: WX20250526918312 + //(是调用其他接口中的关键字, 也就是飞行所关联的业务逻辑单据号) + @TableField(value = "mission_batch") + private String missionBatch; + + @TableField(fill = FieldFill.INSERT) private Date createTime; @@ -45,4 +56,10 @@ public class EngineRecordEntity implements Serializable { @TableField(value = "push_url") private String pushUrl; + @TableField(value = "stop_res_data") + private String stopResData; + + @TableField(value = "stop_res_data_str") + private String stopResDataStr; + } diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/entity/TaskJobEntity.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/entity/TaskJobEntity.java index 6c56af2..c08e7c4 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/entity/TaskJobEntity.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/entity/TaskJobEntity.java @@ -30,4 +30,9 @@ public class TaskJobEntity implements Serializable { private String jobId; + private String deviceSn; + + @TableField(fill = FieldFill.INSERT) + private Date createTime; + } diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/entity/WarningRecordEntity.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/entity/WarningRecordEntity.java index 5791d73..e291833 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/entity/WarningRecordEntity.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/entity/WarningRecordEntity.java @@ -1,14 +1,12 @@ package org.dromara.sample.manage.model.entity; -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableField; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.annotation.*; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; import java.io.Serializable; +import java.util.Date; /** * 设备对象-》用于存储设备对象 iot_device @@ -44,4 +42,7 @@ public class WarningRecordEntity implements Serializable { @TableField(value = "timestamp") private Integer timestamp;//事件时间戳,单位:毫秒") + @TableField(fill = FieldFill.INSERT) + private Date createTime; + } diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/EngineRecordServiceImpl.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/EngineRecordServiceImpl.java index 50c040b..65a91d7 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/EngineRecordServiceImpl.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/EngineRecordServiceImpl.java @@ -95,6 +95,7 @@ public class EngineRecordServiceImpl implements IEngineRecordService { JSONObject jsonObj = new JSONObject(); jsonObj.put("username", sanitize("xuzhou_ai")); // sanitize函数见下文 jsonObj.put("password", sanitize(md5)); + //{"code":200,"message":"操作成功","data":{"token":"eyJhbGciOiJSUzI1NiJ9.eyJpYXQiOjE3NDc5NjY2NzksImV4cCI6MTc1MDU1ODY3OSwidWlkIjoiT2tUV0NyWWxZSSIsInRoaXJkIjoxfQ.lkOSgcWES1ViKmeVht6b1AKuw6MbxPxsmGVeuahy4QZfWkv8y8Ac80bkvZMVBQD_-DmcwK3HXOslrWI5_uHDuBRO2phB6BGXzqkb4GKvLsZMGI-Wrc4tHyZ-ojQ67uhWVUgnjFK4OnMsf5U9LxAxe0XJZQWwrm8KAh9Zb0iD4gY"}} String responseBody = PostRequest(jsonObj, "http://60.204.247.65:8100/Third/Login"); JSONObject jsonObject = new JSONObject(responseBody); // 逐层获取 data -> token @@ -107,6 +108,7 @@ public class EngineRecordServiceImpl implements IEngineRecordService { try { URI uri = new URIBuilder("http://60.204.247.65:8100/V2/AI/WX/User/Scene") .build(); + //{"code":200,"message":"操作成功","data":[{"scene":"可见光","id":2}]} sceneResponseBody = GetRequest(uri, token); } catch (URISyntaxException e) { throw new RuntimeException(e); @@ -115,6 +117,7 @@ public class EngineRecordServiceImpl implements IEngineRecordService { // 逐层获取 data -> token JSONObject data1 = jsonObject.getJSONObject("data"); String scene = data1.getString("scene"); +// String scene = jsonObject1.getJSONArray("data").getJSONObject(0).getString("scene"); //查询场景算法 List extra_type_list = new ArrayList<>(); @@ -125,6 +128,7 @@ public class EngineRecordServiceImpl implements IEngineRecordService { .build(); algorithmResponseBody = GetRequest(uri, token); ObjectMapper mapper = new ObjectMapper(); + //ExtraTypeResponse(code=200, message=操作成功, data=[ExtraType(id=2022, sence=可见光, type=秸秆焚烧(烟、火、焚后痕迹), extra_type=2010_12, model=01, user=xuzhou_ai, difficult=0, if_open=1, sence_id=2022, conf=0.7, aiConfig=0), ExtraType(id=2023, sence=可见光, type=烟火识别, extra_type=2010_13, model=01, user=xuzhou_ai, difficult=0, if_open=1, sence_id=2023, conf=0.7, aiConfig=0), ExtraType(id=2003, sence=可见光, type=是否佩戴安全绳, extra_type=2003_ext, model=01, user=xuzhou_ai, difficult=0, if_open=1, sence_id=2003, conf=0.7, aiConfig=0), ExtraType(id=2004, sence=可见光, type=是否佩戴安全帽, extra_type=2004_ext, model=01, user=xuzhou_ai, difficult=0, if_open=1, sence_id=2004, conf=0.7, aiConfig=1), ExtraType(id=2034, sence=可见光, type=路面车辆计数, extra_type=2010_24, model=01, user=xuzhou_ai, difficult=0, if_open=1, sence_id=2034, conf=0.7, aiConfig=0), ExtraType(id=2015, sence=可见光, type=多类型车辆计数, extra_type=2010_5, model=01, user=xuzhou_ai, difficult=0, if_open=1, sence_id=2015, conf=0.7, aiConfig=0), ExtraType(id=2016, sence=可见光, type=多类型车辆拥堵聚集, extra_type=2010_6, model=01, user=xuzhou_ai, difficult=0, if_open=1, sence_id=2016, conf=0.7, aiConfig=0)]) ExtraTypeResponse response = mapper.readValue(algorithmResponseBody,ExtraTypeResponse.class); List list = response.getData(); for (ExtraType extraType : list) { @@ -181,7 +185,7 @@ public class EngineRecordServiceImpl implements IEngineRecordService { if(dataObj != null && dataObj instanceof Integer) { int data = (Integer) dataObj; if (data ==1){ - mapper.delete(new LambdaQueryWrapper().eq(EngineRecordEntity::getDeviceSn, objectMap.get("device_sn"))); + mapper.delete(new LambdaQueryWrapper().eq(EngineRecordEntity::getDeviceSn, objectMap.get("deviceSn"))); }else { throw new RuntimeException("关闭引擎失败!"); } diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/SampleEngineRecordServiceImpl.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/SampleEngineRecordServiceImpl.java index 47b08fe..1336aa5 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/SampleEngineRecordServiceImpl.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/SampleEngineRecordServiceImpl.java @@ -1,6 +1,7 @@ package org.dromara.sample.manage.service.impl; import cn.hutool.core.map.MapUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; @@ -10,27 +11,29 @@ import org.apache.dubbo.config.annotation.DubboReference; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; -import org.apache.http.client.utils.URIBuilder; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; import org.dromara.sample.common.util.Md5Utils; +import org.dromara.sample.manage.config.XingluoApiConfig; +import org.dromara.sample.manage.mapper.IDeviceMapper; import org.dromara.sample.manage.mapper.ISampleEngineRecordMapper; import org.dromara.sample.manage.mapper.ITaskJobMapper; import org.dromara.sample.manage.model.dto.*; import org.dromara.sample.manage.model.entity.EngineRecordEntity; import org.dromara.sample.manage.model.entity.TaskJobEntity; +import org.dromara.sample.manage.service.IDeviceService; import org.dromara.sample.manage.service.ISampleEngineRecordService; import org.dromara.system.api.RemoteConfigService; import org.json.JSONArray; import org.json.JSONObject; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.net.URI; -import java.net.URISyntaxException; import java.util.*; import static org.apache.commons.compress.utils.ArchiveUtils.sanitize; @@ -40,81 +43,58 @@ import static org.apache.commons.compress.utils.ArchiveUtils.sanitize; @Transactional public class SampleEngineRecordServiceImpl implements ISampleEngineRecordService { @Resource - ISampleEngineRecordMapper mapper; + ISampleEngineRecordMapper engineRecordMapper; @Resource ITaskJobMapper taskJobMapper; + @Autowired + private XingluoApiConfig xingluoApiConfig; + @DubboReference private RemoteConfigService remoteConfigService; + @Override public Map startEngine(Map objectMap){ EngineRecordEntity record = new EngineRecordEntity(); String ip = remoteConfigService.selectStreamIp(); - //获取token - //设置请求Header和Body(如JSON) - String md5 = Md5Utils.hash("xuzhou_ai"); + String md5 = Md5Utils.hash("xuzhou_ai"); //获取token + 设置请求Header和Body(如JSON) JSONObject jsonObj = new JSONObject(); jsonObj.put("username", sanitize("xuzhou_ai")); // sanitize函数见下文 jsonObj.put("password", sanitize(md5)); - String responseBody = PostRequest(jsonObj, "http://60.204.247.65:8100/Third/Login",""); + String responseBody = PostRequest(jsonObj, xingluoApiConfig.getEngineLogin(),""); //"http://60.204.247.65:8100/Third/Login" JSONObject jsonObject = new JSONObject(responseBody); + // 逐层获取 data -> token JSONObject data = jsonObject.getJSONObject("data"); String token = data.getString("token"); String sceneResponseBody = null; String algorithmResponseBody = null; + String taskId = ""; + String missionBatch = ""; + String deviceSn = MapUtil.getStr(objectMap, "deviceSn", ""); + //查询用户开通的场景 if (StringUtils.isNotEmpty(token)){ -// try { -// URI uri = new URIBuilder("http://60.204.247.65:8100/V2/AI/WX/User/Scene") -// .build(); -// sceneResponseBody = GetRequest(uri, token); -// } catch (URISyntaxException e) { -// throw new RuntimeException(e); -// } -// EngineTypeResponse engineTypeResponse = null; -// try { -// ObjectMapper mapper = new ObjectMapper(); -// engineTypeResponse = mapper.readValue(sceneResponseBody, EngineTypeResponse.class); -// } catch (JsonProcessingException e) { -// throw new RuntimeException(e); -// } -//// JSONObject jsonObject1 = new JSONObject(sceneResponseBody); -// // 逐层获取 data -> token -//// JSONObject data1 = jsonObject1.getJSONObject("data"); -// String scene = engineTypeResponse.getData().getScene(); -// -// //查询场景算法 -// List extra_type_list = new ArrayList<>(); -// try { -// URI uri = new URIBuilder("http://60.204.247.65:8100/V2/AI/WX/User/ExtraType/Get") -// .addParameter("scene",scene) -// .addParameter("if_open","1") -// .build(); -// algorithmResponseBody = GetRequest(uri, token); -// ObjectMapper mapper = new ObjectMapper(); -// ExtraTypeResponse response = mapper.readValue(algorithmResponseBody,ExtraTypeResponse.class); -// List list = response.getData(); -// for (ExtraType extraType : list) { -// extra_type_list.add(extraType.getExtra_type()); -// break; -// } -// } catch (URISyntaxException | JsonProcessingException e) { -// throw new RuntimeException(e); -// } - JSONObject jsonObj2 = new JSONObject(); String type = objectMap.get("type").toString(); - if (StringUtils.isNotEmpty(type)){ + if (StringUtils.isNotEmpty(type)){ //2004_ext 算法名称 List list = Arrays.asList(type.split(",")); jsonObj2.put("scene", "可见光"); // sanitize函数见下文 - jsonObj2.put("callback_url", "http://114.235.183.162:9888/ces/iot/deviceLog/some"); + jsonObj2.put("callback_url", xingluoApiConfig.getEngineCallbackUrl());//"http://121.237.178.63:11100/sample/manage/api/v1/saEngineRecord/some" jsonObj2.put("extra_type_list",new JSONArray(list)); - jsonObj2.put("input_url","http://"+ip+":19008/live/livesteam/"+objectMap.get("rtmpUrl")+".flv"); - jsonObj2.put("push_url", "rtmp://"+ip+"/live/livesteam/"+objectMap.get("rtmpUrl")+"ai1"); -// jsonObj2.put("play_url", objectMap.get("play_url")); - String responseBody2 = PostRequest(jsonObj2, "http://60.204.247.65:8100/Third/Engine/Start",token); +// jsonObj2.put("input_url","http://"+ip+":19008/live/livesteam/"+objectMap.get("rtmpUrl")+".flv"); + jsonObj2.put("input_url", "rtmp://"+ip+"/live/livesteam/"+objectMap.get("rtmpUrl"));//预览接口必须要传rtmp,不能是flv + String pushUrl = "rtmp://" + ip + "/live/livesteam/" + objectMap.get("rtmpUrl") + "ai1"; + jsonObj2.put("push_url", pushUrl); //推流接口有时候不稳定,需要检查SRS服务 +// jsonObj2.put("play_url", objectMap.get("play_url")); //play_url不必传, play和push是一对, play 其实是冗余的, 方便记录更详细的日志 + /** + * {"code":500,"message":"任务启动错误:can not open input stream http://114.235.183.163:19008/live/livesteam/7CTXN2T00B07C5-165-0-7.flv","data":null} + * {"code":500,"message":"AI开启失败","data":null} + * {"code":500,"message":"任务启动错误:can not open output rtmp://114.235.183.163/live/livesteam/7CTXN2T00B07C5-165-0-7ai1","data":null} + * {"code":200,"message":"操作成功","data":{"task_id":"NOZGoIIubQ","mission_batch":"WX1748254304635"}} + */ + String responseBody2 = PostRequest(jsonObj2, xingluoApiConfig.getEngineStart(),token); //"http://60.204.247.65:8100/Third/Engine/Start" ObjectMapper mapper1 = new ObjectMapper(); EngineResponse response = null; try { @@ -125,28 +105,32 @@ public class SampleEngineRecordServiceImpl implements ISampleEngineRecordService } catch (JsonProcessingException e) { throw new RuntimeException(e); } + taskId = response.getData().getTask_id(); + missionBatch = response.getData().getMission_batch(); + objectMap.put("task_id",response.getData().getTask_id()); - record.setPushUrl(objectMap.get("rtmpUrl").toString()); - record.setTaskId(MapUtil.getStr(objectMap,"task_id","")); - record.setDeviceSn(MapUtil.getStr(objectMap,"deviceSn","")); - record.setTaskId(response.getData().getTask_id()); + record.setDeviceSn(deviceSn); record.setExtraType(objectMap.get("type").toString()); + record.setPushUrl(objectMap.get("rtmpUrl").toString()); + record.setTaskId(taskId); //MapUtil.getStr(objectMap,"task_id","") + record .setMissionBatch(missionBatch); + record.setPushUrl(pushUrl); System.out.print(objectMap); } } - Map map = new HashMap(); + //添加启动引擎记录 + engineRecordMapper.insert(record); + Map map = new HashMap(); map.put("push_url", "http://"+ip+":1985/rtc/v1/whep/?app=live/livesteam&stream="+objectMap.get("rtmpUrl")+"ai1"); - - map.put("task_id", objectMap.get("task_id")); - //添加启动引擎记录 - mapper.insert(record); + map.put("task_id", taskId);//objectMap.get("task_id") //添加任务id和jobid关联关系 TaskJobEntity taskJobEntity = new TaskJobEntity(); taskJobEntity.setJobId(objectMap.get("jobId").toString()); taskJobEntity.setTaskId(objectMap.get("task_id").toString()); + taskJobEntity.setDeviceSn(deviceSn); taskJobMapper.insert(taskJobEntity); return map; } @@ -154,7 +138,13 @@ public class SampleEngineRecordServiceImpl implements ISampleEngineRecordService @Override public void closeEngine(Map objectMap) { JSONObject jsonObj2 = new JSONObject(); - EngineRecordEntity record = mapper.selectOne(new LambdaQueryWrapper().eq(EngineRecordEntity::getDeviceSn, objectMap.get("deviceSn"))); + String taskId = (String)objectMap.get("taskId"); + String deviceSn = (String)objectMap.get("deviceSn"); + LambdaQueryWrapper engineRecordQW = new LambdaQueryWrapper(); + engineRecordQW.eq(EngineRecordEntity::getTaskId, taskId); + engineRecordQW.eq(EngineRecordEntity::getDeviceSn,deviceSn); + engineRecordQW.orderByDesc(EngineRecordEntity::getCreateTime); + EngineRecordEntity record = engineRecordMapper.selectOne(engineRecordQW); if (record == null){ // throw new RuntimeException("关闭引擎失败!"); }else { @@ -164,18 +154,40 @@ public class SampleEngineRecordServiceImpl implements ISampleEngineRecordService JSONObject jsonObj = new JSONObject(); jsonObj.put("username", sanitize("xuzhou_ai")); // sanitize函数见下文 jsonObj.put("password", sanitize(md5)); - String responseBody = PostRequest(jsonObj, "http://60.204.247.65:8100/Third/Login",""); + //{"code":200,"message":"操作成功","data":{"token":"eyJhbGciOiJSUzI1NiJ9.eyJpYXQiOjE3NDgyNDM0MDgsImV4cCI6MTc1MDgzNTQwOCwidWlkIjoiT2tUV0NyWWxZSSIsInRoaXJkIjoxfQ.LZI1jEl7wyUquXJrApynEE7aUdpqiiqy8VD_3nm215I0dgkGTtDWa3PO26pDWFzw40kNPI5JwWuZBjEtroLAOEQtmhsI9BId5aw605D5jGQ69U6JTa7q095eJxIT2I7rMwAjMGqOtxDfRyw_U-GJPTA4nE4uy98yCXG56FBnrY8"}} + String responseBody = PostRequest(jsonObj, xingluoApiConfig.getEngineLogin(),"");//"http://60.204.247.65:8100/Third/Login" JSONObject jsonObject = new JSONObject(responseBody); // 逐层获取 data -> token JSONObject data = jsonObject.getJSONObject("data"); String token = data.getString("token"); - jsonObj2.put("task_id", record.getTaskId()); // sanitize函数见下文 - String responseBody2 = PostRequest(jsonObj2, "http://60.204.247.65:8100/Third/Engine/Stop",token); + //{"code":200,"message":"操作成功","data":0} + String responseBody2 = PostRequest(jsonObj2, xingluoApiConfig.getEngineStop(),token); //"http://60.204.247.65:8100/Third/Engine/Stop" JSONObject json = new JSONObject(responseBody2); + String resData = json.getString("data"); + String resDataStr = ""; +// String resDataStr = StrUtil.equals(resData,"1") ? "停止成功" : "停止失败"; + switch (resData){ + case "": + resDataStr = "停止成功(长时间未关闭)"; + break; + case "0": + resDataStr = "停止失败"; + break; + case "1": + resDataStr = "停止成功"; + break; + } + + EngineRecordEntity engineRecordUpdate = new EngineRecordEntity(); + engineRecordUpdate.setId(record.getId()); + engineRecordUpdate.setStopResData(resData); + engineRecordUpdate.setStopResDataStr(resDataStr); + engineRecordMapper.updateById(engineRecordUpdate); + // 方式2:安全获取(先判空再转换) - Object dataObj = json.get("data"); + /* Object dataObj = json.get("data"); if(dataObj != null && dataObj instanceof Integer) { int data1 = (Integer) dataObj; if (data1 ==1){ @@ -185,11 +197,9 @@ public class SampleEngineRecordServiceImpl implements ISampleEngineRecordService } } else { throw new RuntimeException("关闭引擎失败!"); - } + }*/ } - - }