2024-03-18 17:34:55 +08:00
|
|
|
|
package com.zhgd.xmgl.task;
|
|
|
|
|
|
|
|
|
|
|
|
import cn.hutool.core.collection.CollUtil;
|
2024-04-07 18:32:26 +08:00
|
|
|
|
import cn.hutool.core.date.DateTime;
|
2024-04-01 18:26:50 +08:00
|
|
|
|
import cn.hutool.core.date.DateUtil;
|
2024-03-18 17:34:55 +08:00
|
|
|
|
import cn.hutool.core.text.CharSequenceUtil;
|
2024-04-01 18:26:50 +08:00
|
|
|
|
import cn.hutool.core.util.StrUtil;
|
|
|
|
|
|
import cn.hutool.http.HttpRequest;
|
|
|
|
|
|
import com.alibaba.fastjson.JSON;
|
|
|
|
|
|
import com.alibaba.fastjson.JSONArray;
|
2024-03-18 17:34:55 +08:00
|
|
|
|
import com.alibaba.fastjson.JSONObject;
|
2024-04-01 18:26:50 +08:00
|
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
2024-03-18 17:34:55 +08:00
|
|
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
2024-11-12 08:58:42 +08:00
|
|
|
|
import com.google.common.util.concurrent.RateLimiter;
|
2024-09-26 17:10:33 +08:00
|
|
|
|
import com.zhgd.annotation.OperLog;
|
|
|
|
|
|
import com.zhgd.jeecg.common.api.vo.Result;
|
2024-03-18 17:34:55 +08:00
|
|
|
|
import com.zhgd.xmgl.config.SafetyHatWSClient;
|
|
|
|
|
|
import com.zhgd.xmgl.modules.project.entity.Project;
|
2024-09-26 17:10:33 +08:00
|
|
|
|
import com.zhgd.xmgl.modules.project.entity.vo.ProjectInfoExtVo;
|
2024-03-18 17:34:55 +08:00
|
|
|
|
import com.zhgd.xmgl.modules.project.service.IProjectService;
|
2024-04-01 18:26:50 +08:00
|
|
|
|
import com.zhgd.xmgl.modules.safetyhat.entity.SafetyHatData;
|
|
|
|
|
|
import com.zhgd.xmgl.modules.safetyhat.entity.SafetyHatDev;
|
|
|
|
|
|
import com.zhgd.xmgl.modules.safetyhat.mapper.SafetyHatDataMapper;
|
|
|
|
|
|
import com.zhgd.xmgl.modules.safetyhat.mapper.SafetyHatDevMapper;
|
2024-09-19 14:33:22 +08:00
|
|
|
|
import com.zhgd.xmgl.modules.safetyhat.service.ISafetyHatDataService;
|
2024-03-18 17:34:55 +08:00
|
|
|
|
import com.zhgd.xmgl.util.RundeSafeyHatUtils;
|
2024-09-26 17:10:33 +08:00
|
|
|
|
import io.swagger.annotations.ApiImplicitParam;
|
2024-09-26 18:24:56 +08:00
|
|
|
|
import io.swagger.annotations.ApiImplicitParams;
|
2024-09-26 17:10:33 +08:00
|
|
|
|
import io.swagger.annotations.ApiOperation;
|
2024-03-18 17:34:55 +08:00
|
|
|
|
import lombok.extern.slf4j.Slf4j;
|
2024-04-01 18:26:50 +08:00
|
|
|
|
import net.javacrumbs.shedlock.core.SchedulerLock;
|
2024-09-26 17:10:33 +08:00
|
|
|
|
import org.apache.commons.collections.MapUtils;
|
|
|
|
|
|
import org.apache.commons.lang.StringUtils;
|
2024-03-18 17:34:55 +08:00
|
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
|
|
import org.springframework.scheduling.annotation.Scheduled;
|
2024-04-07 18:32:26 +08:00
|
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
2024-09-26 17:10:33 +08:00
|
|
|
|
import org.springframework.web.bind.annotation.PostMapping;
|
|
|
|
|
|
import org.springframework.web.bind.annotation.RequestBody;
|
2024-03-18 17:34:55 +08:00
|
|
|
|
import org.springframework.web.bind.annotation.RequestMapping;
|
|
|
|
|
|
import org.springframework.web.bind.annotation.RestController;
|
2024-09-26 17:10:33 +08:00
|
|
|
|
import springfox.documentation.annotations.ApiIgnore;
|
2024-03-18 17:34:55 +08:00
|
|
|
|
|
|
|
|
|
|
import javax.websocket.DeploymentException;
|
|
|
|
|
|
import javax.websocket.WebSocketContainer;
|
|
|
|
|
|
import java.io.IOException;
|
|
|
|
|
|
import java.net.URI;
|
|
|
|
|
|
import java.net.URISyntaxException;
|
2024-04-01 18:26:50 +08:00
|
|
|
|
import java.util.Date;
|
2024-03-18 17:34:55 +08:00
|
|
|
|
import java.util.List;
|
2024-09-26 17:10:33 +08:00
|
|
|
|
import java.util.Map;
|
2024-03-25 15:13:09 +08:00
|
|
|
|
import java.util.concurrent.CompletableFuture;
|
2024-03-18 17:34:55 +08:00
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 智能安全帽task
|
|
|
|
|
|
*/
|
|
|
|
|
|
@Slf4j
|
|
|
|
|
|
@RestController
|
|
|
|
|
|
@RequestMapping("xmgl/task")
|
2024-04-07 18:32:26 +08:00
|
|
|
|
@Transactional(rollbackFor = Exception.class)
|
2024-03-18 17:34:55 +08:00
|
|
|
|
public class SafetyHatTask {
|
2024-07-09 16:42:03 +08:00
|
|
|
|
public static final String SESSION_ID = "session_id";
|
2024-03-18 17:34:55 +08:00
|
|
|
|
@Autowired
|
|
|
|
|
|
IProjectService projectService;
|
|
|
|
|
|
@Autowired
|
2024-04-01 18:26:50 +08:00
|
|
|
|
SafetyHatDevMapper safetyHatDevMapper;
|
|
|
|
|
|
@Autowired
|
|
|
|
|
|
SafetyHatDataMapper safetyHatDataMapper;
|
|
|
|
|
|
@Autowired
|
2024-09-19 14:33:22 +08:00
|
|
|
|
ISafetyHatDataService safetyHatDataService;
|
|
|
|
|
|
@Autowired
|
2024-03-18 17:34:55 +08:00
|
|
|
|
WebSocketContainer webSocketContainer;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
2024-04-01 18:26:50 +08:00
|
|
|
|
* 获取安全帽心跳
|
2024-03-18 17:34:55 +08:00
|
|
|
|
*/
|
2024-03-25 17:36:28 +08:00
|
|
|
|
@Scheduled(cron = "*/20 * * * * ?")
|
2024-04-01 18:26:50 +08:00
|
|
|
|
@SchedulerLock(name = "updateHelmetStatus", lockAtMostFor = 1000 * 60 * 2, lockAtLeastFor = 1000 * 10)
|
|
|
|
|
|
@RequestMapping("updateHelmetStatus")
|
|
|
|
|
|
public void updateHelmetStatus() {
|
2024-03-18 17:34:55 +08:00
|
|
|
|
try {
|
|
|
|
|
|
List<Project> projectList = projectService.list(Wrappers.<Project>lambdaQuery().ne(Project::getHelmetUser, "").ne(Project::getHelmetPassword, ""));
|
|
|
|
|
|
if (CollUtil.isNotEmpty(projectList)) {
|
2024-04-13 15:34:36 +08:00
|
|
|
|
log.info("定时获取安全帽心跳");
|
2024-03-18 17:34:55 +08:00
|
|
|
|
for (Project project : projectList) {
|
2024-03-22 10:11:58 +08:00
|
|
|
|
log.info("安全帽user:{}", project.getHelmetUser());
|
2024-03-18 17:34:55 +08:00
|
|
|
|
SafetyHatWSClient client = SafetyHatWSClient.clientMap.get(project.getHelmetUser());
|
2024-03-25 15:13:09 +08:00
|
|
|
|
CompletableFuture.runAsync(() -> {
|
|
|
|
|
|
try {
|
|
|
|
|
|
if (client == null) {
|
|
|
|
|
|
log.info("首次连接安全帽:user:{}", project.getHelmetUser());
|
|
|
|
|
|
connect(project);
|
|
|
|
|
|
} else {
|
2024-04-01 18:26:50 +08:00
|
|
|
|
log.info("获取安全帽心跳,user:{}", project.getHelmetUser());
|
2024-03-25 15:13:09 +08:00
|
|
|
|
client.send("{\"act\":\"ma_get_active_devices\"}");
|
|
|
|
|
|
}
|
|
|
|
|
|
} catch (IllegalStateException e) {
|
|
|
|
|
|
log.info("异常重连:{}", e.getMessage());
|
2024-03-18 17:34:55 +08:00
|
|
|
|
connect(project);
|
|
|
|
|
|
}
|
2024-03-25 15:13:09 +08:00
|
|
|
|
}).exceptionally(throwable -> {
|
|
|
|
|
|
log.error("err", throwable);
|
|
|
|
|
|
return null;
|
|
|
|
|
|
});
|
|
|
|
|
|
|
2024-03-18 17:34:55 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
|
log.error("err:", e);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2024-11-12 08:58:42 +08:00
|
|
|
|
// 设置每秒最大请求数
|
2024-11-21 11:07:15 +08:00
|
|
|
|
private static final double MAX_REQUESTS_PER_SECOND = 10.0;
|
2024-11-12 08:58:42 +08:00
|
|
|
|
// 创建一个RateLimiter实例
|
|
|
|
|
|
private static final RateLimiter rateLimiter = RateLimiter.create(MAX_REQUESTS_PER_SECOND);
|
|
|
|
|
|
|
2024-11-21 11:07:15 +08:00
|
|
|
|
|
2024-04-01 18:26:50 +08:00
|
|
|
|
/**
|
|
|
|
|
|
* 定时2分钟获取安全帽数据
|
|
|
|
|
|
*/
|
|
|
|
|
|
@Scheduled(cron = "0 */2 * * * ?")
|
|
|
|
|
|
@SchedulerLock(name = "getHelmetData", lockAtMostFor = 1000 * 60 * 2, lockAtLeastFor = 1000 * 10)
|
|
|
|
|
|
@RequestMapping("getHelmetData")
|
|
|
|
|
|
public void getHelmetData() {
|
|
|
|
|
|
List<Project> projectList = projectService.list(Wrappers.<Project>lambdaQuery().ne(Project::getHelmetUser, "").ne(Project::getHelmetPassword, ""));
|
|
|
|
|
|
if (CollUtil.isNotEmpty(projectList)) {
|
2024-04-13 15:34:36 +08:00
|
|
|
|
log.info("定时2分钟获取安全帽数据任务开始");
|
2024-04-01 18:26:50 +08:00
|
|
|
|
for (Project project : projectList) {
|
|
|
|
|
|
List<SafetyHatDev> devList = safetyHatDevMapper.selectList(new LambdaQueryWrapper<SafetyHatDev>()
|
|
|
|
|
|
.eq(SafetyHatDev::getProjectSn, project.getProjectSn()));
|
|
|
|
|
|
for (SafetyHatDev dev : devList) {
|
2024-11-12 08:58:42 +08:00
|
|
|
|
// 等待从RateLimiter获取权限
|
2024-12-27 18:26:06 +08:00
|
|
|
|
rateLimiter.acquire();
|
2024-04-01 18:26:50 +08:00
|
|
|
|
if (StrUtil.isBlank(dev.getExtUserId())) {
|
|
|
|
|
|
log.info("定时2分钟获取安全帽数据任务,安全帽外部user_id没有设置,devSn:{}", dev.getDevSn());
|
|
|
|
|
|
continue;
|
|
|
|
|
|
}
|
|
|
|
|
|
SafetyHatData lastData = safetyHatDataMapper.selectOne(new LambdaQueryWrapper<SafetyHatData>()
|
|
|
|
|
|
.eq(SafetyHatData::getDevSn, dev.getDevSn()).orderByDesc(SafetyHatData::getUploadTime).last("limit 1"));
|
|
|
|
|
|
String start;
|
|
|
|
|
|
if (lastData != null) {
|
|
|
|
|
|
start = lastData.getUploadTime().getTime() / 1000L + "";
|
|
|
|
|
|
} else {
|
|
|
|
|
|
start = DateUtil.offsetHour(new Date(), -12).getTime() / 1000L + "";
|
|
|
|
|
|
}
|
|
|
|
|
|
//轨迹回放
|
|
|
|
|
|
String url = "https://caps.runde.pro/api/index.php?ctl=location&act=get_user_path_web";
|
|
|
|
|
|
JSONObject pJo = new JSONObject();
|
|
|
|
|
|
pJo.put("admin_id", project.getHelmetUser());
|
|
|
|
|
|
pJo.put("user_id", dev.getExtUserId());
|
2024-07-05 19:07:36 +08:00
|
|
|
|
String end = System.currentTimeMillis() / 1000L + "";
|
2024-04-01 18:26:50 +08:00
|
|
|
|
pJo.put("start", start);
|
|
|
|
|
|
pJo.put("end", end);
|
|
|
|
|
|
String json = pJo.toJSONString();
|
|
|
|
|
|
log.info("定时2分钟获取安全帽数据任务开始,devSn:{},url:{},json:{}", dev.getDevSn(), url, json);
|
|
|
|
|
|
String rs = HttpRequest.post(url)
|
|
|
|
|
|
.body(json)
|
|
|
|
|
|
.timeout(20000)//超时,毫秒
|
|
|
|
|
|
.execute().body();
|
|
|
|
|
|
log.info("定时2分钟获取安全帽数据任务开始rs,devSn:{},rs:{}", dev.getDevSn(), rs);
|
|
|
|
|
|
JSONObject rsJo = JSON.parseObject(rs);
|
|
|
|
|
|
if (rsJo.getBoolean("status")) {
|
|
|
|
|
|
JSONArray dataJa = rsJo.getJSONArray("data");
|
|
|
|
|
|
if (CollUtil.isEmpty(dataJa)) {
|
|
|
|
|
|
continue;
|
|
|
|
|
|
}
|
|
|
|
|
|
for (int i = 0; i < dataJa.size(); i++) {
|
|
|
|
|
|
JSONObject dataJo = dataJa.getJSONObject(i);
|
|
|
|
|
|
Double xPoint = dataJo.getDouble("x_point");
|
|
|
|
|
|
Double yPoint = dataJo.getDouble("y_point");
|
|
|
|
|
|
Long time = dataJo.getLong("time");
|
|
|
|
|
|
SafetyHatData data = new SafetyHatData();
|
|
|
|
|
|
data.setWorkerInfoId(dev.getWorkerInfoId());
|
|
|
|
|
|
data.setDevSn(dev.getDevSn());
|
|
|
|
|
|
data.setLatitude(xPoint);
|
|
|
|
|
|
data.setLongitude(yPoint);
|
|
|
|
|
|
data.setUploadTime(new Date(time * 1000L));
|
2024-04-02 15:26:29 +08:00
|
|
|
|
data.setProjectSn(dev.getProjectSn());
|
2024-04-20 15:29:28 +08:00
|
|
|
|
data.setIsPlatformData(1);
|
2024-09-20 16:43:52 +08:00
|
|
|
|
data.setType(dev.getType());
|
2024-09-19 14:33:22 +08:00
|
|
|
|
safetyHatDataService.add(data);
|
2024-04-01 18:26:50 +08:00
|
|
|
|
}
|
|
|
|
|
|
} else {
|
|
|
|
|
|
log.error("定时2分钟获取安全帽数据任务失败:devSn:{}", dev.getDevSn());
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2024-11-21 14:18:48 +08:00
|
|
|
|
// /**
|
|
|
|
|
|
// * 定时设置昨天的轨迹到数据库
|
|
|
|
|
|
// */
|
|
|
|
|
|
// @Scheduled(cron = "0 0 3 * * ?")
|
|
|
|
|
|
// @SchedulerLock(name = "setYesterdayHelmetData", lockAtMostFor = 1000 * 60 * 2, lockAtLeastFor = 1000 * 10)
|
|
|
|
|
|
// @RequestMapping("setYesterdayHelmetData")
|
|
|
|
|
|
// public void setYesterdayHelmetData() {
|
|
|
|
|
|
// log.info("定时设置昨天的轨迹到数据库任务开始");
|
|
|
|
|
|
// List<Project> projectList = projectService.list(Wrappers.<Project>lambdaQuery().ne(Project::getHelmetUser, "").ne(Project::getHelmetPassword, ""));
|
|
|
|
|
|
// if (CollUtil.isNotEmpty(projectList)) {
|
|
|
|
|
|
// for (Project project : projectList) {
|
|
|
|
|
|
// List<SafetyHatDev> devList = safetyHatDevMapper.selectList(new LambdaQueryWrapper<SafetyHatDev>()
|
|
|
|
|
|
// .eq(SafetyHatDev::getProjectSn, project.getProjectSn()));
|
|
|
|
|
|
// for (SafetyHatDev dev : devList) {
|
|
|
|
|
|
// if (StrUtil.isBlank(dev.getExtUserId())) {
|
|
|
|
|
|
// log.info("定时设置昨天的轨迹到数据库任务,安全帽外部user_id没有设置,devSn:{}", dev.getDevSn());
|
|
|
|
|
|
// continue;
|
|
|
|
|
|
// }
|
|
|
|
|
|
// DateTime yB = DateUtil.beginOfDay(DateUtil.offsetDay(new Date(), -1));
|
|
|
|
|
|
// DateTime yE = DateUtil.endOfDay(DateUtil.offsetDay(new Date(), -1));
|
|
|
|
|
|
// String start = yB.getTime() / 1000L + "";
|
|
|
|
|
|
// String end = yE.getTime() / 1000L + "";
|
|
|
|
|
|
// String url = "https://caps.runde.pro/api/index.php?ctl=location&act=get_user_path_web";
|
|
|
|
|
|
// JSONObject pJo = new JSONObject();
|
|
|
|
|
|
// pJo.put("admin_id", project.getHelmetUser());
|
|
|
|
|
|
// pJo.put("user_id", dev.getExtUserId());
|
|
|
|
|
|
// pJo.put("start", start);
|
|
|
|
|
|
// pJo.put("end", end);
|
|
|
|
|
|
// String json = pJo.toJSONString();
|
|
|
|
|
|
// log.info("定时设置昨天的轨迹到数据库任务开始,devSn:{},url:{},json:{}", dev.getDevSn(), url, json);
|
|
|
|
|
|
// String rs = HttpRequest.post(url)
|
|
|
|
|
|
// .body(json)
|
|
|
|
|
|
// .timeout(20000)//超时,毫秒
|
|
|
|
|
|
// .execute().body();
|
|
|
|
|
|
// log.info("定时设置昨天的轨迹到数据库任务开始rs,devSn:{},rs:{}", dev.getDevSn(), rs);
|
|
|
|
|
|
// JSONObject rsJo = JSON.parseObject(rs);
|
|
|
|
|
|
// if (rsJo.getBoolean("status")) {
|
|
|
|
|
|
// JSONArray dataJa = rsJo.getJSONArray("data");
|
|
|
|
|
|
// //删除昨日的数据
|
|
|
|
|
|
// safetyHatDataMapper.delete(new LambdaQueryWrapper<SafetyHatData>()
|
|
|
|
|
|
// .eq(SafetyHatData::getDevSn, dev.getDevSn())
|
|
|
|
|
|
// .eq(SafetyHatData::getIsPlatformData, 1)
|
|
|
|
|
|
// .ge(SafetyHatData::getUploadTime, yB)
|
|
|
|
|
|
// .le(SafetyHatData::getUploadTime, yE)
|
|
|
|
|
|
// );
|
|
|
|
|
|
// if (CollUtil.isEmpty(dataJa)) {
|
|
|
|
|
|
// continue;
|
|
|
|
|
|
// }
|
|
|
|
|
|
// for (int i = 0; i < dataJa.size(); i++) {
|
|
|
|
|
|
// JSONObject dataJo = dataJa.getJSONObject(i);
|
|
|
|
|
|
// Double xPoint = dataJo.getDouble("x_point");
|
|
|
|
|
|
// Double yPoint = dataJo.getDouble("y_point");
|
|
|
|
|
|
// Long time = dataJo.getLong("time");
|
|
|
|
|
|
// SafetyHatData data = new SafetyHatData();
|
|
|
|
|
|
// data.setWorkerInfoId(dev.getWorkerInfoId());
|
|
|
|
|
|
// data.setDevSn(dev.getDevSn());
|
|
|
|
|
|
// data.setLatitude(xPoint);
|
|
|
|
|
|
// data.setLongitude(yPoint);
|
|
|
|
|
|
// data.setUploadTime(new Date(time * 1000L));
|
|
|
|
|
|
// data.setProjectSn(dev.getProjectSn());
|
|
|
|
|
|
// data.setIsPlatformData(1);
|
|
|
|
|
|
// safetyHatDataMapper.insert(data);
|
|
|
|
|
|
// }
|
|
|
|
|
|
// } else {
|
|
|
|
|
|
// log.error("定时设置昨天的轨迹到数据库任务失败:devSn:{}", dev.getDevSn());
|
|
|
|
|
|
// }
|
|
|
|
|
|
// }
|
|
|
|
|
|
//
|
|
|
|
|
|
// }
|
|
|
|
|
|
// }
|
|
|
|
|
|
// }
|
2024-04-07 18:32:26 +08:00
|
|
|
|
|
|
|
|
|
|
|
2024-03-25 17:36:28 +08:00
|
|
|
|
/**
|
|
|
|
|
|
* 测试发生安全帽数据
|
|
|
|
|
|
*/
|
|
|
|
|
|
@RequestMapping("testGetHelmetData")
|
|
|
|
|
|
public void testGetHelmetData() {
|
|
|
|
|
|
SafetyHatWSClient client = new SafetyHatWSClient("jkbdz");
|
|
|
|
|
|
try {
|
|
|
|
|
|
webSocketContainer.connectToServer(client, new URI("wss://caps.runde.pro/wss"));
|
|
|
|
|
|
} catch (DeploymentException e) {
|
2024-04-14 21:05:01 +08:00
|
|
|
|
log.error("error:", e);
|
2024-03-25 17:36:28 +08:00
|
|
|
|
} catch (IOException e) {
|
2024-04-14 21:05:01 +08:00
|
|
|
|
log.error("error:", e);
|
2024-03-25 17:36:28 +08:00
|
|
|
|
} catch (URISyntaxException e) {
|
2024-04-14 21:05:01 +08:00
|
|
|
|
log.error("error:", e);
|
2024-03-25 17:36:28 +08:00
|
|
|
|
}
|
|
|
|
|
|
//SafetyHatWSClient.clientMap1.put("jkbdz", client);
|
|
|
|
|
|
String message = "{\"act\":\"ma_login\",\"user_name\":\"jkbdz\",\"access_token\":\"5c26d999d97009fc4b5d3347f6463c17\"}";
|
|
|
|
|
|
client.send(message);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2024-03-18 17:34:55 +08:00
|
|
|
|
/**
|
|
|
|
|
|
* 连接ws和登录
|
|
|
|
|
|
*
|
|
|
|
|
|
* @param project
|
|
|
|
|
|
* @throws DeploymentException
|
|
|
|
|
|
* @throws IOException
|
|
|
|
|
|
* @throws URISyntaxException
|
|
|
|
|
|
*/
|
2024-03-25 15:13:09 +08:00
|
|
|
|
private SafetyHatWSClient connect(Project project) {
|
2024-03-25 17:36:28 +08:00
|
|
|
|
SafetyHatWSClient client = new SafetyHatWSClient(project.getHelmetUser());
|
2024-03-25 15:13:09 +08:00
|
|
|
|
try {
|
|
|
|
|
|
webSocketContainer.connectToServer(client, new URI("wss://caps.runde.pro/wss"));
|
2024-03-25 17:36:28 +08:00
|
|
|
|
} catch (Exception e) {
|
2024-04-14 21:05:01 +08:00
|
|
|
|
log.error("error:", e);
|
2024-03-25 15:13:09 +08:00
|
|
|
|
}
|
2024-03-18 17:34:55 +08:00
|
|
|
|
JSONObject token = RundeSafeyHatUtils.getToken(project.getHelmetUser(), project.getHelmetPassword());
|
2024-07-09 16:42:03 +08:00
|
|
|
|
if (token != null && CharSequenceUtil.isNotBlank(token.getString(SESSION_ID))) {
|
|
|
|
|
|
String sessionId = token.getString(SESSION_ID);
|
2024-03-18 17:34:55 +08:00
|
|
|
|
project.setRundeToken(sessionId);
|
|
|
|
|
|
String message = "{\"act\":\"ma_login\",\"user_name\":\"" + project.getHelmetUser() + "\",\"access_token\":\"" + sessionId + "\"}";
|
|
|
|
|
|
client.send(message);
|
2024-03-25 15:13:09 +08:00
|
|
|
|
log.info("登录安全帽user:{},ms:{}", project.getHelmetUser(), message);
|
2024-03-18 17:34:55 +08:00
|
|
|
|
SafetyHatWSClient.clientMap.put(project.getHelmetUser(), client);
|
|
|
|
|
|
}
|
|
|
|
|
|
return client;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2024-09-26 17:10:33 +08:00
|
|
|
|
@OperLog(operModul = "智能安全帽设备管理", operType = "查询", operDesc = "文字转语音")
|
|
|
|
|
|
@ApiOperation(value = "文字转语音并发送", notes = "文字转语音", httpMethod = "POST")
|
2024-09-26 18:24:56 +08:00
|
|
|
|
@ApiImplicitParams({
|
|
|
|
|
|
@ApiImplicitParam(name = "projectSn", value = "项目sn", paramType = "query", required = true, dataType = "String"),
|
|
|
|
|
|
@ApiImplicitParam(name = "content", value = "文字", paramType = "query", required = true, dataType = "String")
|
|
|
|
|
|
})
|
2024-09-26 17:10:33 +08:00
|
|
|
|
@PostMapping(value = "/textToAudio")
|
|
|
|
|
|
public void textToAudio(@ApiIgnore @RequestBody Map<String, Object> param) {
|
|
|
|
|
|
ProjectInfoExtVo project = projectService.getProjectInfoBySn(MapUtils.getString(param, "projectSn"));
|
|
|
|
|
|
JSONObject token = RundeSafeyHatUtils.getToken(project.getHelmetUser(), project.getHelmetPassword());
|
|
|
|
|
|
String content = MapUtils.getString(param, "content");
|
|
|
|
|
|
JSONObject pJo = new JSONObject();
|
|
|
|
|
|
pJo.put("token", token.getString("token"));
|
|
|
|
|
|
pJo.put("content", content);
|
|
|
|
|
|
String json = pJo.toJSONString();
|
|
|
|
|
|
String rs = HttpRequest.post("https://caps.runde.pro/api/index.php?ctl=aibroadcast&act=send_broadcast_to_cat")
|
|
|
|
|
|
.body(json)
|
|
|
|
|
|
.timeout(20000)//超时,毫秒
|
|
|
|
|
|
.execute().body();
|
|
|
|
|
|
String id = null;
|
|
|
|
|
|
if (StringUtils.isNotBlank(rs)) {
|
|
|
|
|
|
JSONObject jsonObject = JSONObject.parseObject(rs);
|
|
|
|
|
|
id = jsonObject.getJSONObject("data").getString("message");
|
|
|
|
|
|
}
|
|
|
|
|
|
SafetyHatWSClient client = SafetyHatWSClient.clientMap.get(project.getHelmetUser());
|
|
|
|
|
|
String userId = MapUtils.getString(param, "userId");
|
|
|
|
|
|
String message = "{\"act\":\"ma_sending_message\",\"message\":\"" + id + "\",\"user_id\":\"" + userId + "\"}";
|
|
|
|
|
|
client.send(message);
|
|
|
|
|
|
log.info("安全帽发送消息:{},content:{}", userId, content);
|
|
|
|
|
|
}
|
2024-03-18 17:34:55 +08:00
|
|
|
|
|
2024-09-26 17:10:33 +08:00
|
|
|
|
@OperLog(operModul = "智能安全帽设备管理", operType = "查询", operDesc = "文字转语音")
|
2024-09-26 18:24:56 +08:00
|
|
|
|
@ApiOperation(value = "查询历史记录", notes = "查询历史记录", httpMethod = "POST")
|
|
|
|
|
|
@ApiImplicitParams({
|
|
|
|
|
|
@ApiImplicitParam(name = "projectSn", value = "项目sn", paramType = "query", required = true, dataType = "String"),
|
|
|
|
|
|
@ApiImplicitParam(name = "userId", value = "用户ID", paramType = "query", required = true, dataType = "String")
|
|
|
|
|
|
})
|
2024-09-26 17:10:33 +08:00
|
|
|
|
@PostMapping(value = "/messageRecord")
|
|
|
|
|
|
public Result<Object> messageRecord(@ApiIgnore @RequestBody Map<String, Object> param) {
|
|
|
|
|
|
ProjectInfoExtVo project = projectService.getProjectInfoBySn(MapUtils.getString(param, "projectSn"));
|
|
|
|
|
|
JSONObject token = RundeSafeyHatUtils.getToken(project.getHelmetUser(), project.getHelmetPassword());
|
|
|
|
|
|
String userId = MapUtils.getString(param, "userId");
|
|
|
|
|
|
JSONObject pJo = new JSONObject();
|
|
|
|
|
|
pJo.put("admin_id", "13997");
|
|
|
|
|
|
pJo.put("user_id", userId);
|
|
|
|
|
|
pJo.put("act", "get_user_msg_list");
|
|
|
|
|
|
pJo.put("ctl", "msg");
|
|
|
|
|
|
String json = pJo.toJSONString();
|
|
|
|
|
|
String rs = HttpRequest.post("https://caps.runde.pro/api/index.php")
|
|
|
|
|
|
.header("authentication", token.getString(SESSION_ID))
|
|
|
|
|
|
.body(json)
|
|
|
|
|
|
.timeout(20000)//超时,毫秒
|
|
|
|
|
|
.execute().body();
|
|
|
|
|
|
JSONArray jsonArray = new JSONArray();
|
|
|
|
|
|
if (StringUtils.isNotBlank(rs)) {
|
|
|
|
|
|
JSONObject jsonObject = JSONObject.parseObject(rs);
|
|
|
|
|
|
jsonArray = jsonObject.getJSONObject("data").getJSONArray("list");
|
|
|
|
|
|
}
|
|
|
|
|
|
return Result.success(jsonArray);
|
|
|
|
|
|
}
|
2024-03-18 17:34:55 +08:00
|
|
|
|
}
|