Browse Source

增加手持表历史轨迹

master
wangwei_123 5 days ago
parent
commit
d236cf04ad
  1. 11
      cc-admin-master/yudao-module-hand-mqtt/src/main/java/cn/iocoder/yudao/module/mqtt/processor/DeviceMessageProcessor.java
  2. 17
      cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/controller/admin/FenceController.java
  3. 30
      cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/controller/admin/HandDetectorController.java
  4. 7
      cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/controller/admin/HandTdengineController.java
  5. 3
      cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/mapper/HandAlarmMapper.java
  6. 2
      cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/mapper/HandDetectorMapper.java
  7. 4
      cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/mapper/TdengineMapper.java
  8. 5
      cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/service/FenceService.java
  9. 1
      cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/service/HandDetectorService.java
  10. 4
      cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/service/TdengineService.java
  11. 5
      cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/service/impl/FenceServiceImpl.java
  12. 6
      cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/service/impl/HandDetectorServiceImpl.java
  13. 7
      cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/service/impl/TdengineServiceImpl.java
  14. 2
      cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/vo/HandDataVo.java
  15. 7
      cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/vo/HandDetectorPageReqVO.java
  16. 8
      cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/vo/HandDetectorRespVO.java
  17. 5
      cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/vo/HandDetectorSaveReqVO.java
  18. 20
      cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/vo/HandTdenginePo.java
  19. 3
      cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/vo/TdengineDataVo.java
  20. 34
      cc-admin-master/yudao-module-hand/src/main/resources/mapper/TdengineMapper.xml
  21. 154
      cc-admin-master/yudao-server/src/main/resources/application-dev.yaml
  22. 10
      cc-admin-master/yudao-server/src/main/resources/application-local.yaml
  23. 6
      cc-admin-master/yudao-server/src/main/resources/application-prod.yaml
  24. 2
      cc-admin-master/yudao-server/src/main/resources/application.yaml

11
cc-admin-master/yudao-module-hand-mqtt/src/main/java/cn/iocoder/yudao/module/mqtt/processor/DeviceMessageProcessor.java

@ -58,7 +58,7 @@ public class DeviceMessageProcessor {
}
Long tenantId = Long.parseLong(tenantIdObj.toString());
// 保存原始日志,这个操作不涉及状态竞争,可以放在锁外
// 保存原始日志
logSave(topic, payload, tenantId);
// topic 即为设备 sn,是锁的最佳 key
@ -129,6 +129,7 @@ public class DeviceMessageProcessor {
private void handLogSave(HandDataVo handVo) {
TdengineDataVo bean = BeanUtils.toBean(handVo, TdengineDataVo.class);
bean.setGasType(handVo.getGasType());
bean.setTenantId(handVo.getTenantId());
bean.setTs(new Timestamp(System.currentTimeMillis())); // 直接创建Timestamp对象
tdengineBatchConfig.addToBatch(bean);
@ -271,6 +272,7 @@ public class DeviceMessageProcessor {
*/
private void fanceAlarm(HandDataVo handVo) {
if (StringUtils.isBlank(handVo.getFenceIds())) {
handVo.setFenceStatus(HandAlarmType.NORMAL.getType());
log.info("当前设备未绑定围栏,sn{}", handVo.getSn());
return;
}
@ -376,7 +378,7 @@ public class DeviceMessageProcessor {
}
fenceAlarmService.update(existingAlarm);
}
handVo.setGasStatus(HandAlarmType.ALARM.getType());
handVo.setFenceStatus(HandAlarmType.ALARM.getType());
} else {
// --- 场景:当前处于正常状态 ---
@ -394,7 +396,7 @@ public class DeviceMessageProcessor {
handVo.setFenceAlarmId(null);
handVo.setDistance(null);
handVo.setMaxDistance(null);
handVo.setGasStatus(HandAlarmType.NORMAL.getType());
handVo.setFenceStatus(HandAlarmType.NORMAL.getType());
} else {
log.debug("当前状态正常,且无进行中报警,无需操作。");
}
@ -440,6 +442,7 @@ public class DeviceMessageProcessor {
private HandDataVo gasHandAlarm(AlarmRuleDO alarmRule, HandDataVo redisData) {
if (null == alarmRule) {
log.error("无报警规则:sn: {}", redisData.getSn());
redisData.setGasStatus(HandAlarmType.NORMAL.getType());
return redisData;
}
@ -530,6 +533,8 @@ public class DeviceMessageProcessor {
detector.setTime(new Date(System.currentTimeMillis()));
//添加默认状态
detector.setOnlineStatus(OnlineStatusType.ONLINE.getType());
String type = split[2];
detector.setGasType(Integer.parseInt(type));
return detector;
}

17
cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/controller/admin/FenceController.java

@ -1,12 +1,14 @@
package cn.iocoder.yudao.module.hand.controller.admin;
import cn.iocoder.yudao.module.hand.dal.FenceDO;
import cn.iocoder.yudao.module.hand.dal.HandDetectorDO;
import cn.iocoder.yudao.module.hand.service.FenceService;
import cn.iocoder.yudao.module.hand.vo.FencePageReqVO;
import cn.iocoder.yudao.module.hand.vo.FenceRespVO;
import cn.iocoder.yudao.module.hand.vo.FenceSaveReqVO;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.bind.annotation.*;
import jakarta.annotation.Resource;
import org.springframework.validation.annotation.Validated;
@ -94,7 +96,22 @@ public class FenceController {
PageResult<FenceDO> pageResult = fenceService.getFencePage(pageReqVO);
return success(BeanUtils.toBean(pageResult, FenceRespVO.class));
}
@GetMapping("/getListAll")
@Operation(summary = "获得围栏全部")
public CommonResult<List<FenceDO>> getListAll(@RequestParam(value = "name", required = false) String name,
@RequestParam(value = "type", required = false) String type) {
QueryWrapper<FenceDO> handDetectorDOQueryWrapper = new QueryWrapper<>();
// 添加动态查询条件
if (StringUtils.isNotBlank(name)) {
handDetectorDOQueryWrapper.like("name", name); // 模糊查询名称
}
if (StringUtils.isNotBlank(type)) {
handDetectorDOQueryWrapper.eq("type", type);
}
List<FenceDO> handDetectorDOS = fenceService.listAll(handDetectorDOQueryWrapper);
return success(handDetectorDOS);
}
@GetMapping("/export-excel")
@Operation(summary = "导出GAS电子围栏 Excel")
@PreAuthorize("@ss.hasPermission('gas:fence:export')")

30
cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/controller/admin/HandDetectorController.java

@ -8,6 +8,8 @@ import cn.iocoder.yudao.module.hand.util.RedisUtil;
import cn.iocoder.yudao.module.hand.vo.HandDetectorPageReqVO;
import cn.iocoder.yudao.module.hand.vo.HandDetectorRespVO;
import cn.iocoder.yudao.module.hand.vo.HandDetectorSaveReqVO;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.bind.annotation.*;
import jakarta.annotation.Resource;
import org.springframework.validation.annotation.Validated;
@ -19,6 +21,7 @@ import io.swagger.v3.oas.annotations.Operation;
import jakarta.validation.constraints.*;
import jakarta.validation.*;
import jakarta.servlet.http.*;
import java.util.*;
import java.io.IOException;
@ -33,6 +36,7 @@ import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*;
import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUser;
import static cn.iocoder.yudao.module.hand.enums.ErrorCodeConstants.HAND_DETECTOR_NOT_EXISTS;
@ -95,7 +99,24 @@ public class HandDetectorController {
@PreAuthorize("@ss.hasPermission('gas:hand-detector:query')")
public CommonResult<PageResult<HandDetectorRespVO>> getHandDetectorPage(@Valid HandDetectorPageReqVO pageReqVO) {
PageResult<HandDetectorDO> pageResult = handDetectorService.getHandDetectorPage(pageReqVO);
return success(BeanUtils.toBean(pageResult,HandDetectorRespVO.class));
return success(BeanUtils.toBean(pageResult, HandDetectorRespVO.class));
}
@GetMapping("/getListAll")
@Operation(summary = "获得GAS手持探测器全部")
public CommonResult<List<HandDetectorDO>> getListAll(@RequestParam(value = "name", required = false) String name,
@RequestParam(value = "sn", required = false) String sn) {
QueryWrapper<HandDetectorDO> handDetectorDOQueryWrapper = new QueryWrapper<>();
// 添加动态查询条件
if (StringUtils.isNotBlank(name)) {
handDetectorDOQueryWrapper.like("name", name); // 模糊查询名称
}
if (StringUtils.isNotBlank(sn)) {
handDetectorDOQueryWrapper.eq("sn", sn); // 精确查询序列号
}
List<HandDetectorDO> handDetectorDOS = handDetectorService.listAll(handDetectorDOQueryWrapper);
return success(handDetectorDOS);
}
@GetMapping("/export-excel")
@ -113,18 +134,19 @@ public class HandDetectorController {
@GetMapping("/getByHandData")
@Operation(summary = "获得GAS手持探测器实时数据")
public CommonResult<Map<Object, Object>> getHandData(){
public CommonResult<Map<Object, Object>> getHandData() {
LoginUser loginUser = getLoginUser();
if (null == loginUser){
if (null == loginUser) {
throw exception(HAND_DETECTOR_REDIS_NOT_EXISTS);
}
String tenantDeviceHashKey = RedisKeyUtil.getTenantDeviceHashKey(loginUser.getTenantId());
Map<Object, Object> handData = handDetectorService.getHandData(tenantDeviceHashKey);
return CommonResult.success(handData);
}
@GetMapping("/getMonitor")
@Operation(summary = "综合监控数据展示")
public CommonResult<Map<Object, Object>> getMonitor(){
public CommonResult<Map<Object, Object>> getMonitor() {
Map<Object, Object> monitor = handDetectorService.getMonitor();
return CommonResult.success(monitor);
}

7
cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/controller/admin/HandTdengineController.java

@ -62,5 +62,12 @@ public class HandTdengineController {
PageResult<HandOriginalLog> pageResult = tdengineService.getOriginalLogPage(pageReqVO);
return success(pageResult);
}
@GetMapping("/HistoricalSn")
@Operation(summary = "手持表历史轨迹")
@PreAuthorize("@ss.hasPermission('gas:hand-td:HistoricalSn')")
public CommonResult<List<TdengineDataVo>> HistoricalSn(@Valid HandTdenginePo po) {
List<TdengineDataVo> list = tdengineService.HistoricalSn(po);
return success(list);
}
}

3
cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/mapper/HandAlarmMapper.java

@ -19,6 +19,9 @@ public interface HandAlarmMapper extends BaseMapperX<HandAlarmDO> {
default PageResult<HandAlarmDO> selectPage(HandAlarmPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<HandAlarmDO>()
.eqIfPresent(HandAlarmDO::getDetectorId,reqVO.getDetectorId())
.likeIfPresent(HandAlarmDO::getName,reqVO.getName())
.likeIfPresent(HandAlarmDO::getSn,reqVO.getSn())
.eqIfPresent(HandAlarmDO::getAlarmLevel, reqVO.getAlarmLevel())
.eqIfPresent(HandAlarmDO::getGasType, reqVO.getGasType())
.eqIfPresent(HandAlarmDO::getUnit, reqVO.getUnit())

2
cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/mapper/HandDetectorMapper.java

@ -21,7 +21,7 @@ public interface HandDetectorMapper extends BaseMapperX<HandDetectorDO> {
return selectPage(reqVO, new LambdaQueryWrapperX<HandDetectorDO>()
.eqIfPresent(HandDetectorDO::getSn, reqVO.getSn())
.likeIfPresent(HandDetectorDO::getName, reqVO.getName())
.eqIfPresent(HandDetectorDO::getFenceIds, reqVO.getFenceId())
.eqIfPresent(HandDetectorDO::getFenceIds, reqVO.getFenceIds())
.eqIfPresent(HandDetectorDO::getGasTypeId, reqVO.getGasTypeId())
.eqIfPresent(HandDetectorDO::getGasChemical, reqVO.getGasChemical())
.eqIfPresent(HandDetectorDO::getMin, reqVO.getMin())

4
cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/mapper/TdengineMapper.java

@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.hand.mapper;
import cn.iocoder.yudao.module.hand.vo.HandOriginalLog;
import cn.iocoder.yudao.module.hand.vo.HandTdenginePageVO;
import cn.iocoder.yudao.module.hand.vo.HandTdenginePo;
import cn.iocoder.yudao.module.hand.vo.TdengineDataVo;
import com.baomidou.mybatisplus.annotation.InterceptorIgnore; // 确保导入这个注解
import com.baomidou.mybatisplus.core.metadata.IPage;
@ -27,4 +28,7 @@ public interface TdengineMapper {
IPage<TdengineDataVo> selectPage(IPage<TdengineDataVo> page,@Param("vo") HandTdenginePageVO vo);
IPage<HandOriginalLog> selectOriginalPage(IPage<HandOriginalLog> page,@Param("vo") HandTdenginePageVO vo);
List<TdengineDataVo> HistoricalSn(HandTdenginePo po);
}

5
cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/service/FenceService.java

@ -6,6 +6,7 @@ import cn.iocoder.yudao.module.hand.dal.FenceDO;
import cn.iocoder.yudao.module.hand.vo.FencePageReqVO;
import cn.iocoder.yudao.module.hand.vo.FenceSaveReqVO;
import cn.iocoder.yudao.module.hand.vo.Geofence;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import jakarta.validation.*;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
@ -69,4 +70,8 @@ public interface FenceService {
* @return GAS电子围栏列表
*/
List<Geofence> getFenceList(List<Long> idList);
List<FenceDO> listAll(QueryWrapper<FenceDO> handDetectorDOQueryWrapper);
}

1
cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/service/HandDetectorService.java

@ -71,4 +71,5 @@ public interface HandDetectorService {
Map<Object, Object> getMonitor();
List<HandDetectorDO> listAll(QueryWrapper<HandDetectorDO> handDetectorDOQueryWrapper);
}

4
cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/service/TdengineService.java

@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.hand.service;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.hand.vo.HandOriginalLog;
import cn.iocoder.yudao.module.hand.vo.HandTdenginePageVO;
import cn.iocoder.yudao.module.hand.vo.HandTdenginePo;
import cn.iocoder.yudao.module.hand.vo.TdengineDataVo;
import java.util.List;
@ -17,4 +18,7 @@ public interface TdengineService {
PageResult<TdengineDataVo> getHandDataLog(HandTdenginePageVO pageReqVO);
PageResult<HandOriginalLog> getOriginalLogPage(HandTdenginePageVO pageReqVO);
List<TdengineDataVo> HistoricalSn(HandTdenginePo po);
}

5
cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/service/impl/FenceServiceImpl.java

@ -132,4 +132,9 @@ public class FenceServiceImpl implements FenceService {
return allGeofences;
}
@Override
public List<FenceDO> listAll(QueryWrapper<FenceDO> handDetectorDOQueryWrapper) {
return fenceMapper.selectList(handDetectorDOQueryWrapper);
}
}

6
cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/service/impl/HandDetectorServiceImpl.java

@ -258,4 +258,10 @@ public class HandDetectorServiceImpl implements HandDetectorService {
return objectObjectHashMap;
}
@Override
public List<HandDetectorDO> listAll(QueryWrapper<HandDetectorDO> handDetectorDOQueryWrapper) {
return handDetectorMapper.selectList(handDetectorDOQueryWrapper);
}
}

7
cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/service/impl/TdengineServiceImpl.java

@ -5,6 +5,7 @@ import cn.iocoder.yudao.module.hand.mapper.TdengineMapper;
import cn.iocoder.yudao.module.hand.service.TdengineService;
import cn.iocoder.yudao.module.hand.vo.HandOriginalLog;
import cn.iocoder.yudao.module.hand.vo.HandTdenginePageVO;
import cn.iocoder.yudao.module.hand.vo.HandTdenginePo;
import cn.iocoder.yudao.module.hand.vo.TdengineDataVo;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.metadata.IPage;
@ -97,4 +98,10 @@ public class TdengineServiceImpl implements TdengineService {
return new PageResult<>(doList, resultPage.getTotal());
}
@Override
public List<TdengineDataVo> HistoricalSn(HandTdenginePo po) {
return tdengineMapper.HistoricalSn(po);
}
}

2
cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/vo/HandDataVo.java

@ -69,6 +69,8 @@ public class HandDataVo {
@Schema(description = "最大报警值")
private Double maxValue;
@Schema(description = "定位类型")
private Integer gasType;
@Schema(description = "报警开始时间")
private LocalDateTime tAlarmStart;

7
cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/vo/HandDetectorPageReqVO.java

@ -21,8 +21,11 @@ public class HandDetectorPageReqVO extends PageParam {
@Schema(description = "持有人姓名", example = "赵六")
private String name;
@Schema(description = "围栏id", example = "15853")
private Long fenceId;
/**
* 围栏id
*/
@Schema(description = "围栏ids")
private String fenceIds;
@Schema(description = "围栏类型", example = "1")

8
cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/vo/HandDetectorRespVO.java

@ -24,9 +24,11 @@ public class HandDetectorRespVO {
@ExcelProperty("持有人姓名")
private String name;
@Schema(description = "围栏id", example = "15853")
@ExcelProperty("围栏id")
private Long fenceId;
/**
* 围栏id
*/
@Schema(description = "围栏ids")
private String fenceIds;
@Schema(description = "围栏类型", example = "1")
private Integer fenceType;

5
cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/vo/HandDetectorSaveReqVO.java

@ -19,8 +19,9 @@ public class HandDetectorSaveReqVO {
@Schema(description = "持有人姓名", example = "赵六")
private String name;
@Schema(description = "围栏id", example = "15853")
private Long fenceId;
@Schema(description = "围栏ids")
private String fenceIds;
@Schema(description = "围栏类型", example = "1")
private Integer fenceType;

20
cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/vo/HandTdenginePo.java

@ -0,0 +1,20 @@
package cn.iocoder.yudao.module.hand.vo;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import lombok.Data;
import java.sql.Timestamp;
@Data
public class HandTdenginePo{
private String sn;
private Timestamp startTime;
private Timestamp endTime;
private Long tenantId;
}

3
cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/vo/TdengineDataVo.java

@ -27,6 +27,9 @@ public class TdengineDataVo {
@Schema(description = "纬度")
private Double latitude;
@Schema(description = "纬度")
private Integer gasType;
@Schema(description = "更新时间")
private Timestamp ts;

34
cc-admin-master/yudao-module-hand/src/main/resources/mapper/TdengineMapper.xml

@ -25,17 +25,17 @@
INSERT INTO device_data_log_#{sn}
USING device_data_log
TAGS(#{sn}, #{tenantId})
(ts, battery, `value`, longitude, latitude, `name`)
(ts, battery, `value`, longitude, latitude, `name`,gas_type)
VALUES
<foreach collection="dataVoList" item="log" separator=",">
(#{log.ts}, #{log.battery}, #{log.value}, #{log.longitude}, #{log.latitude}, #{log.name})
(#{log.ts}, #{log.battery}, #{log.value}, #{log.longitude}, #{log.latitude}, #{log.name}, #{log.gasType})
</foreach>
</insert>
<select id="selectPage" resultType="cn.iocoder.yudao.module.hand.vo.TdengineDataVo">
SELECT
ts, sn, battery, `value`, longitude, latitude, `name`,tenantId
ts, sn, battery, `value`, longitude, latitude, `name`,gas_type as gasType,tenantId
FROM
device_data_log
<where>
@ -80,4 +80,32 @@
</if>
</where>
</select>
<select id="HistoricalSn" resultType="cn.iocoder.yudao.module.hand.vo.TdengineDataVo">
SELECT
_wstart as ts,
LAST(`value`) as `value`,
LAST(longitude) as longitude,
LAST(latitude) as latitude,
LAST(gas_type) as gasType
FROM
device_data_log
<where>
<if test="vo.sn != null and vo.sn != ''">
AND sn = #{vo.sn}
</if>
<if test="vo.tenantId != null">
AND tenantId = #{vo.tenantId}
</if>
<if test="vo.startTime != null">
AND ts >= #{vo.startTime}
</if>
<if test="vo.endTime != null">
AND ts &lt;= #{vo.endTime}
</if>
</where>
INTERVAL(1m)
PARTITION BY sn, tenantId
ORDER BY ts DESC
</select>
</mapper>

154
cc-admin-master/yudao-server/src/main/resources/application-dev.yaml

@ -1,11 +1,15 @@
server:
port: 48080
port: 48081
--- #################### 数据库相关配置 ####################
spring:
autoconfigure:
# noinspection SpringBootApplicationYaml
exclude:
# - org.springframework.boot.autoconfigure.quartz.QuartzAutoConfiguration # 默认 local 环境,不开启 Quartz 的自动配置
# - de.codecentric.boot.admin.server.config.AdminServerAutoConfiguration # 禁用 Spring Boot Admin 的 Server 的自动配置
# - de.codecentric.boot.admin.server.ui.config.AdminServerUiAutoConfiguration # 禁用 Spring Boot Admin 的 Server UI 的自动配置
# - de.codecentric.boot.admin.client.config.SpringBootAdminClientAutoConfiguration # 禁用 Spring Boot Admin 的 Client 的自动配置
- org.springframework.ai.vectorstore.qdrant.autoconfigure.QdrantVectorStoreAutoConfiguration # 禁用 AI 模块的 Qdrant,手动创建
- org.springframework.ai.vectorstore.milvus.autoconfigure.MilvusVectorStoreAutoConfiguration # 禁用 AI 模块的 Milvus,手动创建
# 数据源配置项
@ -30,43 +34,40 @@ spring:
multi-statement-allow: true
dynamic: # 多数据源配置
druid: # Druid 【连接池】相关的全局配置
initial-size: 5 # 初始连接数
min-idle: 10 # 最小连接池数量
initial-size: 1 # 初始连接数
min-idle: 1 # 最小连接池数量
max-active: 20 # 最大连接池数量
max-wait: 600000 # 配置获取连接等待超时的时间,单位:毫秒
time-between-eviction-runs-millis: 60000 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位:毫秒
min-evictable-idle-time-millis: 300000 # 配置一个连接在池中最小生存的时间,单位:毫秒
max-evictable-idle-time-millis: 900000 # 配置一个连接在池中最大生存的时间,单位:毫秒
validation-query: SELECT 1 # 配置检测连接是否有效
validation-query: SELECT 1 FROM DUAL # 配置检测连接是否有效
test-while-idle: true
test-on-borrow: false
test-on-return: false
primary: master
datasource:
master:
url: jdbc:mysql://127.0.0.1:3306/ruoyi-vue-pro?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例
url: jdbc:mysql://127.0.0.1:3306/hand_alarm?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例
username: root
password: 123456
slave: # 模拟从库,可根据自己需要修改 # 模拟从库,可根据自己需要修改
lazy: true # 开启懒加载,保证启动速度
url: jdbc:mysql://127.0.0.1:3306/ruoyi-vue-pro?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例
username: root
password: 123456
password: roomasd111
driver-class-name: com.mysql.cj.jdbc.Driver # MySQL Connector/J 8.X 连接的示例
# Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优
data:
redis:
host: 400-infra.server.iocoder.cn # 地址
host: 127.0.0.1 # 地址
port: 6379 # 端口
database: 1 # 数据库索引
# password: 123456 # 密码,建议生产环境开启
database: 5 # 数据库索引
# password: dev # 密码,建议生产环境开启
--- #################### 定时任务相关配置 ####################
# Quartz 配置项,对应 QuartzProperties 配置类
spring:
quartz:
auto-startup: true # 测试环境,需要开启 Job
auto-startup: true # 本地开发环境,尽量不要开启 Job
scheduler-name: schedulerName # Scheduler 名字。默认为 schedulerName
job-store-type: jdbc # Job 存储器类型。默认为 memory 表示内存,可选 jdbc 使用数据库。
wait-for-jobs-to-complete-on-shutdown: true # 应用关闭时,是否等待定时任务执行完成。默认为 false ,建议设置为 true
@ -103,12 +104,15 @@ spring:
rabbitmq:
host: 127.0.0.1 # RabbitMQ 服务的地址
port: 5672 # RabbitMQ 服务的端口
username: guest # RabbitMQ 服务的账号
password: guest # RabbitMQ 服务的密码
username: rabbit # RabbitMQ 服务的账号
password: rabbit # RabbitMQ 服务的密码
# Kafka 配置项,对应 KafkaProperties 配置类
kafka:
bootstrap-servers: 127.0.0.1:9092 # 指定 Kafka Broker 地址,可以设置多个,以逗号分隔
bootstrap-servers: zdmq.zdhlcn.com:9092 # 或者内网地址 172.21.16.6:9091
properties:
security.protocol: SASL_PLAINTEXT
sasl.mechanism: SCRAM-SHA-512
sasl.jaas.config: 'org.apache.kafka.common.security.scram.ScramLoginModule required username="zdkafka" password="Zdhl@2025";'
--- #################### 服务保障相关配置 ####################
# Lock4j 配置项
@ -142,21 +146,41 @@ spring:
logging:
file:
name: ${user.home}/logs/${spring.application.name}.log # 日志文件名,全路径
--- #################### 微信公众号相关配置 ####################
wx: # 参见 https://github.com/Wechat-Group/WxJava/blob/develop/spring-boot-starters/wx-java-mp-spring-boot-starter/README.md 文档
mp:
# 公众号配置(必填)
app-id: wx041349c6f39b268b
secret: 5abee519483bc9f8cb37ce280e814bd0
level:
# 配置自己写的 MyBatis Mapper 打印日志
cn.iocoder.yudao.module.bpm.dal.mysql: debug
cn.iocoder.yudao.module.infra.dal.mysql: debug
cn.iocoder.yudao.module.infra.dal.mysql.logger.ApiErrorLogMapper: INFO # 配置 ApiErrorLogMapper 的日志级别为 info,避免和 GlobalExceptionHandler 重复打印
cn.iocoder.yudao.module.infra.dal.mysql.job.JobLogMapper: INFO # 配置 JobLogMapper 的日志级别为 info
cn.iocoder.yudao.module.infra.dal.mysql.file.FileConfigMapper: INFO # 配置 FileConfigMapper 的日志级别为 info
cn.iocoder.yudao.module.pay.dal.mysql: debug
cn.iocoder.yudao.module.pay.dal.mysql.notify.PayNotifyTaskMapper: INFO # 配置 PayNotifyTaskMapper 的日志级别为 info
cn.iocoder.yudao.module.system.dal.mysql: debug
cn.iocoder.yudao.module.mqtt: WARN
org.springframework.context.support.PostProcessorRegistrationDelegate: ERROR # TODO 芋艿:先禁用,Spring Boot 3.X 存在部分错误的 WARN 提示
# 打开 dynamic-datasource 框架的 DEBUG 日志
#com.baomidou.dynamic.datasource: DEBUG
debug: false
--- #################### 微信公众号、小程序相关配置 ####################
wx:
mp: # 公众号配置(必填),参见 https://github.com/Wechat-Group/WxJava/blob/develop/spring-boot-starters/wx-java-mp-spring-boot-starter/README.md 文档
app-id: wxf56b1542b9e85f8a # 测试号(Kongdy 提供的)
secret: 496379dcef1ba869e9234de8d598cfd3
# 存储配置,解决 AccessToken 的跨节点的共享
cp:
# 你的企业ID
corpId: ww6e1eee0a8ae45397
agentId: 1000002
corpSecret: ITbfuoZkmUifGoDL5ZB8SyuMzVM8VXZNkfZJzYn5sGo
config-storage:
type: RedisTemplate # 采用 RedisTemplate 操作 Redis,会自动从 Spring 中获取
key-prefix: wx # Redis Key 的前缀
http-client-type: HttpClient # 采用 HttpClient 请求微信公众号平台
miniapp: # 小程序配置(必填),参见 https://github.com/Wechat-Group/WxJava/blob/develop/spring-boot-starters/wx-java-miniapp-spring-boot-starter/README.md 文档
appid: wx63c280fe3248a3e7
secret: 6f270509224a7ae1296bbf1c8cb97aed
appid: wxc4598c446f8a9cb3 # 测试号(Kongdy 提供的)
secret: 4a1a04e07f6a4a0751b39c3064a92c8b
config-storage:
type: RedisTemplate # 采用 RedisTemplate 操作 Redis,会自动从 Spring 中获取
key-prefix: wa # Redis Key 的前缀
@ -166,69 +190,35 @@ wx: # 参见 https://github.com/Wechat-Group/WxJava/blob/develop/spring-boot-sta
# 芋道配置项,设置当前项目所有自定义的配置
yudao:
pay:
order-notify-url: http://yunai.natapp1.cc/admin-api/pay/notify/order # 支付渠道的【支付】回调地址
refund-notify-url: http://yunai.natapp1.cc/admin-api/pay/notify/refund # 支付渠道的【退款】回调地址
transfer-notify-url: https://yunai.natapp1.cc/admin-api/pay/notify/transfer # 支付渠道的【转账】回调地址
demo: false # 开启演示模式
captcha:
enable: false # 本地环境,暂时关闭图片验证码,方便登录等接口的测试;
security:
mock-enable: true
access-log: # 访问日志的配置项
enable: false
demo: false # 关闭演示模式
wxa-code:
env-version: develop # 小程序版本: 正式版为 "release";体验版为 "trial";开发版为 "develop"
wxa-subscribe-message:
miniprogram-state: developer # 跳转小程序类型:开发版为 “developer”;体验版为 “trial”为;正式版为 “formal”
tencent-lbs-key: TVDBZ-TDILD-4ON4B-PFDZA-RNLKH-VVF6E # QQ 地图的密钥 https://lbs.qq.com/service/staticV2/staticGuide/staticDoc
justauth:
enabled: true
type:
DINGTALK: # 钉钉
client-id: dingvrnreaje3yqvzhxg
client-secret: i8E6iZyDvZj51JIb0tYsYfVQYOks9Cq1lgryEjFRqC79P3iJcrxEwT6Qk2QvLrLI
ignore-check-redirect-uri: true
WECHAT_ENTERPRISE: # 企业微信
client-id: wwd411c69a39ad2e54
client-secret: 1wTb7hYxnpT2TUbIeHGXGo7T0odav1ic10mLdyyATOw
agent-id: 1000004
ignore-check-redirect-uri: true
# noinspection SpringBootApplicationYaml
WECHAT_MINI_PROGRAM: # 微信小程序
client-id: ${wx.miniapp.appid}
client-secret: ${wx.miniapp.secret}
ignore-check-redirect-uri: true
ignore-check-state: true # 微信小程序,不会使用到 state,所以不进行校验
WECHAT_MP: # 微信公众号
client-id: ${wx.mp.app-id}
client-secret: ${wx.mp.secret}
ignore-check-redirect-uri: true
cache:
type: REDIS
prefix: 'social_auth_state:' # 缓存前缀,目前只对 Redis 缓存生效,默认 JUSTAUTH::STATE::
timeout: 24h # 超时时长,目前只对 Redis 缓存生效,默认 3 分钟
--- #################### iot相关配置 TODO 芋艿:再瞅瞅 ####################
iot:
emq:
# 账号
username: anhaohao
# 密码
password: ahh@123456
# 主机地址
hostUrl: tcp://chaojiniu.top:1883
# 客户端Id,不能相同,采用随机数 ${random.value}
client-id: ${random.int}
# 默认主题
default-topic: test
# 保持连接
keepalive: 60
# 清除会话(设置为false,断开连接,重连后使用原来的会话 保留订阅的主题,能接收离线期间的消息)
clearSession: true
# 插件配置
--- #################### iot相关配置 TODO 芋艿【IOT】:再瞅瞅 ####################
pf4j:
pluginsDir: ${user.home}/plugins # 插件目录
# pluginsDir: /tmp/
pluginsDir: ../plugins
mqtt:
enable: true
url: tcp://127.0.0.1:1883
username: root
password: roomasd111
url: tcp://zdmq.zdhlcn.com:2883
username: mobileqt
password: DVSwxQwY<x
client:
id: cc-admin-qg-dev44
connectionTimeout: 10
@ -236,7 +226,7 @@ mqtt:
cleanSession: true
subscribe:
# $share/hand_alarm/+/zds_up //MQTT 共享订阅,不是多台服务器的情况下不要开启
topic: +/up,+/ups,+/will,$share/hand_alarm/+/zds_up
topic: +/up,+/ups,+/will,+/zds_up
qos: 1,1,1,1
default:
publishQos: 1

10
cc-admin-master/yudao-server/src/main/resources/application-local.yaml

@ -114,9 +114,11 @@ spring:
password: rabbit # RabbitMQ 服务的密码
# Kafka 配置项,对应 KafkaProperties 配置类
kafka:
bootstrap-servers: video.zdhlcn.com:9092 # 指定 Kafka Broker 地址,可以设置多个,以逗号分隔
#bootstrap-servers: 127.0.0.1:9092 # 指定 Kafka Broker 地址,可以设置多个,以逗号分隔
bootstrap-servers: video.zdhlcn.com:9092 # 或者内网地址 172.21.16.6:9091,或者测试地址video.zdhlcn.com:9092
properties:
security.protocol: SASL_PLAINTEXT
sasl.mechanism: SCRAM-SHA-512
sasl.jaas.config: 'org.apache.kafka.common.security.scram.ScramLoginModule required username="zdkafka" password="Zdhl@2025";'
--- #################### 服务保障相关配置 ####################
# Lock4j 配置项
@ -230,7 +232,7 @@ mqtt:
cleanSession: true
subscribe:
# $share/hand_alarm/+/zds_up //MQTT 共享订阅,不是多台服务器的情况下不要开启
topic: +/up,+/ups,+/will,$share/hand_alarm/+/zds_up
topic: +/up,+/ups,+/will,+/zds_up
qos: 1,1,1,1
default:
publishQos: 1

6
cc-admin-master/yudao-server/src/main/resources/application-prod.yaml

@ -114,7 +114,11 @@ spring:
password: rabbit # RabbitMQ 服务的密码
# Kafka 配置项,对应 KafkaProperties 配置类
kafka:
bootstrap-servers: video.zdhlcn.com:9092 # 指定 Kafka Broker 地址,可以设置多个,以逗号分隔
bootstrap-servers: 172.21.16.6:9091 # 或者内网地址 172.21.16.6:9091
properties:
security.protocol: SASL_PLAINTEXT
sasl.mechanism: SCRAM-SHA-512
sasl.jaas.config: 'org.apache.kafka.common.security.scram.ScramLoginModule required username="zdkafka" password="Zdhl@2025";'
--- #################### 服务保障相关配置 ####################

2
cc-admin-master/yudao-server/src/main/resources/application.yaml

@ -108,7 +108,7 @@ aj:
cache-number: 1000 # local 缓存的阈值,达到这个值,清除缓存
timing-clear: 180 # local定时清除过期缓存(单位秒),设置为0代表不执行
type: blockPuzzle # 验证码类型 default两种都实例化。 blockPuzzle 滑块拼图 clickWord 文字点选
water-mark: 哈哈哈 # 右下角水印文字(我的水印),可使用 https://tool.chinaz.com/tools/unicode.aspx 中文转 Unicode,Linux 可能需要转 unicode
water-mark: 1 # 右下角水印文字(我的水印),可使用 https://tool.chinaz.com/tools/unicode.aspx 中文转 Unicode,Linux 可能需要转 unicode
interference-options: 0 # 滑动干扰项(0/1/2)
req-frequency-limit-enable: false # 接口请求次数一分钟限制是否开启 true|false
req-get-lock-limit: 5 # 验证失败 5 次,get接口锁定

Loading…
Cancel
Save