Commit 8f63af67 by lzy

Merge branch 'dev' of git.xmmakeit.com:huangjiay/iot-platform-server into dev

parents 369a250f 47b92605
Showing with 1562 additions and 241 deletions
......@@ -152,7 +152,7 @@ CREATE TABLE `plat_elder_medical_examination_info`
CREATE TABLE `plat_elder_children_info`
(
`id` varchar(64) NOT NULL COMMENT 'id',
`elder_id` varchar(64) NULL COMMENT '长者id',
`elder_id` varchar(600) NULL COMMENT '长者id',
`openid` varchar(64) NOT NULL COMMENT 'openid',
`name` varchar(64) DEFAULT NULL COMMENT '姓名',
`phone` varchar(64) DEFAULT NULL COMMENT '手机号码',
......@@ -293,7 +293,7 @@ CREATE TABLE `plat_elder_sleep`
`elder_id` VARCHAR(64) NOT NULL COMMENT '长者id',
`start_sleep` datetime DEFAULT NULL COMMENT '入睡时间',
`end_sleep` datetime DEFAULT NULL COMMENT '起床时间',
`happen_date` VARCHAR(64) DEFAULT NULL COMMENT '当前日期 yyyy-mm-dd',
`happen_date` VARCHAR(64) DEFAULT NULL COMMENT '当前日期 yyyy-mm-dd',
`sleep_record` text DEFAULT NULL COMMENT '睡眠记录 区分时间段记录 [{"sleepType":"","startTime":"","endTime":""},{}]',
`create_date` datetime DEFAULT NULL COMMENT '创建时间',
`update_date` datetime DEFAULT NULL COMMENT '更新时间',
......@@ -316,7 +316,7 @@ CREATE TABLE `plat_elder_sleep_analysis`
`sleep_time` VARCHAR(64) DEFAULT NULL COMMENT '睡眠时长',
`rest_time` VARCHAR(64) DEFAULT NULL COMMENT '休息时长',
`sleep_evaluate` VARCHAR(64) DEFAULT NULL COMMENT '评价',
`happen_date` VARCHAR(64) DEFAULT NULL COMMENT '当前日期 yyyy-mm-dd',
`happen_date` VARCHAR(64) DEFAULT NULL COMMENT '当前日期 yyyy-mm-dd',
`create_date` datetime DEFAULT NULL COMMENT '创建时间',
`update_date` datetime DEFAULT NULL COMMENT '更新时间',
`del_flag` CHAR(1) DEFAULT NULL COMMENT '删除标识',
......@@ -329,46 +329,54 @@ CREATE TABLE `plat_elder_sleep_analysis`
DEFAULT CHARSET = utf8mb4
ROW_FORMAT = COMPACT COMMENT = '长者每天睡觉分析';
CREATE TABLE `plat_elder_breathe_abnormal` (
`id` varchar(64) NOT NULL COMMENT 'id',
`elder_id` varchar(64) NOT NULL COMMENT '长者id',
`breathe_analysis_id` varchar(64) NOT NULL COMMENT '呼吸分析id',
`happen_time` datetime NOT NULL COMMENT '发生时间',
`type` varchar(32) DEFAULT NULL COMMENT '异常类型',
`value` varchar(64) DEFAULT NULL COMMENT '值',
`create_date` datetime DEFAULT NULL COMMENT '创建时间',
`update_date` datetime DEFAULT NULL COMMENT '更新时间',
`del_flag` char(1) DEFAULT NULL COMMENT '删除标识',
`create_by` varchar(64) DEFAULT NULL COMMENT '创建人',
`update_by` varchar(64) DEFAULT NULL COMMENT '更新人',
`tenant_id` varchar(64) DEFAULT NULL COMMENT '租户id',
PRIMARY KEY (`id`),
KEY `index_elder_id` (`elder_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPACT COMMENT='长者每天呼吸异常';
CREATE TABLE `plat_elder_breathe_abnormal`
(
`id` varchar(64) NOT NULL COMMENT 'id',
`elder_id` varchar(64) NOT NULL COMMENT '长者id',
`breathe_analysis_id` varchar(64) NOT NULL COMMENT '呼吸分析id',
`happen_time` datetime NOT NULL COMMENT '发生时间',
`type` varchar(32) DEFAULT NULL COMMENT '异常类型',
`value` varchar(64) DEFAULT NULL COMMENT '值',
`create_date` datetime DEFAULT NULL COMMENT '创建时间',
`update_date` datetime DEFAULT NULL COMMENT '更新时间',
`del_flag` char(1) DEFAULT NULL COMMENT '删除标识',
`create_by` varchar(64) DEFAULT NULL COMMENT '创建人',
`update_by` varchar(64) DEFAULT NULL COMMENT '更新人',
`tenant_id` varchar(64) DEFAULT NULL COMMENT '租户id',
PRIMARY KEY (`id`),
KEY `index_elder_id` (`elder_id`) USING BTREE
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4
ROW_FORMAT = COMPACT COMMENT ='长者每天呼吸异常';
CREATE TABLE `plat_elder_breathe_analysis` (
`id` varchar(64) NOT NULL COMMENT 'id',
`elder_id` varchar(64) NOT NULL COMMENT '长者id',
`breathe_score` varchar(64) DEFAULT NULL COMMENT '睡眠评分',
`breathe_result` varchar(64) DEFAULT NULL COMMENT '睡眠结果',
`breathe_evaluate` varchar(64) DEFAULT NULL COMMENT '评价',
`avg_heart_rate` varchar(64) DEFAULT NULL COMMENT '平均心率',
`avg_breathe_rate` varchar(64) DEFAULT NULL COMMENT '平均呼吸率',
`happen_date` varchar(64) DEFAULT NULL COMMENT '当前日期 yyyy-mm-dd',
`create_date` datetime DEFAULT NULL COMMENT '创建时间',
`update_date` datetime DEFAULT NULL COMMENT '更新时间',
`del_flag` char(1) DEFAULT NULL COMMENT '删除标识',
`create_by` varchar(64) DEFAULT NULL COMMENT '创建人',
`update_by` varchar(64) DEFAULT NULL COMMENT '更新人',
`tenant_id` varchar(64) DEFAULT NULL COMMENT '租户id',
PRIMARY KEY (`id`),
KEY `index_elder_id` (`elder_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPACT COMMENT='长者每天呼吸分析';
CREATE TABLE `plat_elder_breathe_analysis`
(
`id` varchar(64) NOT NULL COMMENT 'id',
`elder_id` varchar(64) NOT NULL COMMENT '长者id',
`breathe_score` varchar(64) DEFAULT NULL COMMENT '睡眠评分',
`breathe_result` varchar(64) DEFAULT NULL COMMENT '睡眠结果',
`breathe_evaluate` varchar(64) DEFAULT NULL COMMENT '评价',
`avg_heart_rate` varchar(64) DEFAULT NULL COMMENT '平均心率',
`avg_breathe_rate` varchar(64) DEFAULT NULL COMMENT '平均呼吸率',
`happen_date` varchar(64) DEFAULT NULL COMMENT '当前日期 yyyy-mm-dd',
`create_date` datetime DEFAULT NULL COMMENT '创建时间',
`update_date` datetime DEFAULT NULL COMMENT '更新时间',
`del_flag` char(1) DEFAULT NULL COMMENT '删除标识',
`create_by` varchar(64) DEFAULT NULL COMMENT '创建人',
`update_by` varchar(64) DEFAULT NULL COMMENT '更新人',
`tenant_id` varchar(64) DEFAULT NULL COMMENT '租户id',
PRIMARY KEY (`id`),
KEY `index_elder_id` (`elder_id`) USING BTREE
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4
ROW_FORMAT = COMPACT COMMENT ='长者每天呼吸分析';
CREATE TABLE `plat_elder_report_month`
(
`id` varchar(64) NOT NULL COMMENT 'id',
`elder_id` VARCHAR(64) NOT NULL COMMENT '长者id',
breathe_device_id VARCHAR(64) NULL COMMENT '呼吸心率设备id',
breathe_ori_device_id VARCHAR(64) NULL COMMENT '呼吸心率设备原始id',
day date NOT NULL COMMENT '日期',
sleep_result varchar(64) NOT NULL COMMENT '睡眠结果',
heart_rate int NOT NULL COMMENT '心率',
......@@ -389,7 +397,7 @@ CREATE TABLE `plat_elder_report_month`
ALTER TABLE `dev_iot_yanglao_platform`.`plat_elder_sleep_analysis`
ADD COLUMN `action_count` int(4) COMMENT '体动次数' AFTER `happen_date`,
ADD COLUMN `turned_count` int(4) COMMENT '翻身次数' AFTER `action_count`;
ADD COLUMN `turned_count` int(4) COMMENT '翻身次数' AFTER `action_count`;
ALTER TABLE `dev_iot_yanglao_platform`.`plat_elder_sleep`
ADD COLUMN `elder_sleep_type` int(4) COMMENT '睡眠类型 1 睡眠 2 小憩' AFTER `happen_date`;
......
......@@ -30,7 +30,7 @@ public class SignAuthFilter implements Filter {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
try {
String sign = request.getHeader("sign");
String sign = request.getHeader("token");
if (StringUtils.isEmpty(sign)) {
response.sendError(403, "Forbidden");
return;
......@@ -47,7 +47,8 @@ public class SignAuthFilter implements Filter {
String decryptJson = RSAUtils.privateDecrypt(sign, RSAUtils.getPrivateKey(RSAUtils.PRIVATE_KEY), "UTF-8");
boolean couldPass = decryptJson.equals(bodyString);
boolean couldPass = decryptJson.replaceAll("\n","").replaceAll(" ","").trim()
.equals(bodyString.replaceAll(" ","").trim());
if (couldPass) {
// 放行
chain.doFilter(requestWrapper, response);
......
......@@ -55,9 +55,10 @@ public class DataScopeInterceptor extends JsqlParserSupport implements InnerInte
}
String[] orgIds = dataScope.split(Const.COMMON_SPLIT);
List<String> orgIdList = Arrays.asList(orgIds);
if(orgIdList.contains(tenantId)){
return;
}
//2023年10月10日 如果是租户级别的组织,也只能看到本层
// if(orgIdList.contains(tenantId)){
// return;
// }
String tableName = ((Table) ((PlainSelect) select.getSelectBody()).getFromItem()).getName();
//没有org_id 表字段跳过
List<TableFieldInfo> fieldInfoList = TableInfoHelper.getTableInfo(tableName).getFieldList();
......
......@@ -24,4 +24,6 @@ public class HeaderConst {
public static final String FEIGN_NO_REMOVE="feignNoRemove";
public static final String DATA_SCOPE = "data-scope";
public static final String ROLE_ID = "role-id";
}
......@@ -24,7 +24,10 @@ import java.util.Set;
public class PlatAuthorizationInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//todo 按钮权限关闭
if(true){
return true;
}
Action annotation;
if (handler instanceof HandlerMethod) {
......
......@@ -72,6 +72,11 @@ public class PlatUserLoginVO implements Serializable {
private boolean initFlag = false;
/**
* 当前账号选择的右上角角色
*/
private String currentRoleId;
public void init(){
if(initFlag){
......
......@@ -14,6 +14,8 @@ import com.makeit.module.iot.vo.ResponseMessage;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.client.HttpClient;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.HttpClientBuilder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
......@@ -49,6 +51,7 @@ public class IotCommonService {
}
public ResponseMessage sendPatch(String url, HttpRequest request) throws IOException {
Response response = request.patch();
ResponseMessage responseMessage = getResponseMessage(url, response);
return responseMessage;
}
......
......@@ -73,15 +73,17 @@ public class IotProductDeviceService extends IotCommonService {
}
@Async
public void syncUpdateDeviceInfo(String id,String name) {
public void syncUpdateDeviceInfo(String id, String name, String productId) {
String url = iotUrl + "/device-instance";
// 条件可以自己改
Map<String,Object> reqMap = Maps.newHashMap();
reqMap.put("id",id);
reqMap.put("name",name);
reqMap.put("productId",productId);
String body = JsonUtil.toJson(reqMap);
HttpRequest request = buildRequest(url, body);
request.encode("UTF-8");
request.contentType("application/json");
try {
ResponseMessage responseMessage = sendPatch(url, request);
if (responseMessage.getStatus() == 200) {
......@@ -127,13 +129,12 @@ public class IotProductDeviceService extends IotCommonService {
if (deviceOperationLogEntity == null) {
return null;
}
DeviceInfoContentBreathe breathe = JsonUtil.toObj((String) deviceOperationLogEntity.getContent(), DeviceInfoContentBreathe.class);
LocalDateTime time = LongTimestampUtil.toLocalDateTime(breathe.getTimestamp());
/* LocalDateTime time = LongTimestampUtil.toLocalDateTime(breathe.getTimestamp());
if (ignoreDuration != null && Duration.between(time, LocalDateTime.now()).getSeconds() > ignoreDuration) {
return null;
}
}*/
return breathe;
......@@ -156,6 +157,24 @@ public class IotProductDeviceService extends IotCommonService {
}
public DeviceInfoContentFall getLastDeviceLogFall(String deviceId, Integer ignoreDuration) {//秒
DeviceOperationLogEntity deviceOperationLogEntity = getLastDeviceLogByType(deviceId, REPORT_PROPERTY);
if (deviceOperationLogEntity == null) {
return null;
}
DeviceInfoContentFall fall = JsonUtil.toObj((String) deviceOperationLogEntity.getContent(), DeviceInfoContentFall.class);
LocalDateTime time = LongTimestampUtil.toLocalDateTime(fall.getTimestamp());
if (ignoreDuration != null && Duration.between(time, LocalDateTime.now()).getSeconds() > ignoreDuration) {
return null;
}
return fall;
}
public List<String> getLastDayHourRange(LocalDateTime startDateTime) {
int count = 24;
List<String> list = Lists.newArrayList();
......@@ -233,9 +252,13 @@ public class IotProductDeviceService extends IotCommonService {
public List<DeviceInfoContentSpace> getDeviceLogByTimeRangeSpace(String deviceId, int pageSize, LocalDateTime startTime, LocalDateTime endTime) {
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
List<DeviceOperationLogEntity> deviceOperationLogEntityList = getDeviceLogByTimeRange(deviceId, REPORT_PROPERTY, pageSize, dateTimeFormatter.format(startTime), dateTimeFormatter.format(endTime));
List<DeviceInfoContentSpace> deviceInfoContentSpaceList = StreamUtil.map(deviceOperationLogEntityList, e -> JsonUtil.toObj((String) e.getContent(), DeviceInfoContentSpace.class));
List<DeviceInfoContentSpace> deviceInfoContentSpaceList = Lists.newArrayList();
int count = pageSize / 10000;
for (int i = 0; i < count + 1; i++) {
List<DeviceOperationLogEntity> deviceOperationLogList = getDeviceLogByTimeRange(deviceId, REPORT_PROPERTY, 10000, dateTimeFormatter.format(startTime), dateTimeFormatter.format(endTime));
List<DeviceInfoContentSpace> tempDeviceInfoContentSpaceList = StreamUtil.map(deviceOperationLogList, e -> JsonUtil.toObj((String) e.getContent(), DeviceInfoContentSpace.class));
deviceInfoContentSpaceList.addAll(tempDeviceInfoContentSpaceList);
}
return deviceInfoContentSpaceList;
}
......
......@@ -175,6 +175,7 @@ public class SysConfigServiceImpl extends ServiceImpl<SysConfigMapper, SysConfig
Page<SysConfig> pageList = page(p, listLambdaQueryWrapper(sysConfig));
JoinUtil.join(pageList.getRecords(), sysConfigCategoryService, SysConfig::getCategoryId, SysConfigCategory::getId, (c, cc) -> {
c.setCategoryCode(cc.getCode());
c.setCategoryName(cc.getName());
});
......
......@@ -48,6 +48,13 @@ public class PlatAlarmRecordController {
return ApiResponseUtils.success();
}
@ApiOperation("未读条数")
@PostMapping("unreadCount")
public ApiResponseEntity<Integer> unreadCount(@RequestBody PlatAlarmRecordQueryDTO dto) {
Integer count = platAlarmRecordService.unreadCount(dto);
return ApiResponseUtils.success(count);
}
// @Autowired
// private MailMsgSender mailMsgSender;
// @Autowired
......
......@@ -43,5 +43,12 @@ public class PlatAlarmRecordChildrenController {
platAlarmRecordService.read(dto.getId());
return ApiResponseUtils.success();
}
@ApiOperation("未读条数")
@PostMapping("unreadCount")
public ApiResponseEntity<Integer> unreadCount(@RequestBody PlatAlarmRecordQueryDTO dto) {
Integer count = platAlarmRecordService.unreadCount(dto);
return ApiResponseUtils.success(count);
}
}
package com.makeit.module.controller.children.space;
import com.makeit.common.response.ApiResponseEntity;
import com.makeit.common.response.ApiResponseUtils;
import com.makeit.dto.platform.space.PlatRegionSettingDTO;
import com.makeit.dto.platform.space.PlatRegionSettingListDTO;
import com.makeit.dto.platform.space.PlatRegionSettingLocateDTO;
import com.makeit.dto.platform.space.PlatRegionSettingQueryDTO;
import com.makeit.module.iot.vo.fall.DeviceInfoContentFall;
import com.makeit.module.iot.vo.space.DeviceInfoContentSpace;
import com.makeit.service.platform.space.PlatRegionSettingService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
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 java.util.List;
/**
* Controller
*
* @author zm
* @version 2023/9/11
*/
@Api(tags = "子女端小程序-区域设置")
@RestController
@RequestMapping("/children/plat/region/setting")
public class PlatRegionSettingChildrenController {
@Autowired
private PlatRegionSettingService platRegionSettingService;
@ApiOperation("列表")
@PostMapping("list")
public ApiResponseEntity<List<PlatRegionSettingDTO>> list(@RequestBody PlatRegionSettingQueryDTO dto) {
List<PlatRegionSettingDTO> data = platRegionSettingService.list(dto);
return ApiResponseUtils.success(data);
}
@ApiOperation("编辑")
@PostMapping("edit")
public ApiResponseEntity<?> edit(@RequestBody PlatRegionSettingDTO dto) {
platRegionSettingService.edit(dto);
return ApiResponseUtils.success();
}
@ApiOperation("批量编辑")
@PostMapping("batchEdit")
public ApiResponseEntity<?> batchEdit(@RequestBody PlatRegionSettingListDTO dto) {
platRegionSettingService.batchEdit(dto.getList());
return ApiResponseUtils.success();
}
@ApiOperation("定位(时间范围内定位)")
@PostMapping("locate")
public ApiResponseEntity<List<DeviceInfoContentSpace.Properties>> locate(@RequestBody PlatRegionSettingLocateDTO dto) {
List<DeviceInfoContentSpace.Properties> list = platRegionSettingService.locate(dto);
return ApiResponseUtils.success(list);
}
@ApiOperation("跌倒设备定位(时间范围内定位)")
@PostMapping("fallDeviceLocate")
public ApiResponseEntity<List<DeviceInfoContentFall.Properties>> fallDeviceLocate(@RequestBody PlatRegionSettingLocateDTO dto) {
List<DeviceInfoContentFall.Properties> list = platRegionSettingService.fallDeviceLocate(dto);
return ApiResponseUtils.success(list);
}
@ApiOperation("实时定位")
@PostMapping("nowDataLocate")
public ApiResponseEntity<DeviceInfoContentSpace.Properties> nowDataLocate(@RequestBody PlatRegionSettingLocateDTO dto) {
DeviceInfoContentSpace.Properties vo = platRegionSettingService.nowDataLocate(dto);
return ApiResponseUtils.success(vo);
}
@ApiOperation("跌倒设备实时定位")
@PostMapping("fallDeviceNowDataLocate")
public ApiResponseEntity<DeviceInfoContentFall.Properties> fallDeviceNowDataLocate(@RequestBody PlatRegionSettingLocateDTO dto) {
DeviceInfoContentFall.Properties vo = platRegionSettingService.fallDeviceNowDataLocate(dto);
return ApiResponseUtils.success(vo);
}
}
......@@ -5,11 +5,13 @@ import com.makeit.common.page.PageVO;
import com.makeit.common.response.ApiResponseEntity;
import com.makeit.common.response.ApiResponseUtils;
import com.makeit.dto.platform.dataScreen.PlatDataScreenQueryDTO;
import com.makeit.dto.platform.device.PlatDeviceQueryDTO;
import com.makeit.dto.platform.space.PlatBedQueryDTO;
import com.makeit.module.system.entity.ChinaArea;
import com.makeit.service.platform.dataScreen.DataScreenService;
import com.makeit.utils.area.ChinaAreaVO;
import com.makeit.vo.platform.dataScreen.*;
import com.makeit.vo.platform.device.PlatDeviceListVO;
import com.makeit.vo.platform.space.PlatBedVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
......@@ -83,4 +85,10 @@ public class DataScreenController {
return ApiResponseUtils.success(dataScreenService.mapList(dto));
}
@ApiOperation("设备分页列表")
@PostMapping("devicePage")
public ApiResponseEntity<PageVO<PlatDeviceListVO>> devicePage(@RequestBody PageReqDTO<PlatDataScreenQueryDTO> pageReqDTO) {
return ApiResponseUtils.success(dataScreenService.devicePage(pageReqDTO));
}
}
......@@ -57,6 +57,13 @@ public class PlatRoomBedDeviceController {
return ApiResponseUtils.success(data);
}
@ApiOperation("已绑定设备分页")
@PostMapping("pageBindDevice")
public ApiResponseEntity<PageVO<PlatDeviceDTO>> pageBindDevice(@RequestBody PageReqDTO<PlatBedDeviceQueryDTO> page) {
PageVO<PlatDeviceDTO> data = platRoomBedDeviceService.pageBindDevice(page);
return ApiResponseUtils.success(data);
}
@ApiOperation("绑定设备")
@PostMapping("bindingDevice")
public ApiResponseEntity<?> bindingDevice(@RequestBody PlatRoomBindDeviceDTO dto) {
......
......@@ -63,6 +63,8 @@ public class PlatAlarmRecordQueryDTO extends BaseTenantDTO {
*/
private String noticeStatus;
private String readFlag;
}
......@@ -31,4 +31,7 @@ public class PlatDataScreenQueryDTO {
@ApiModelProperty("类型 1-居家 2-机构")
private String type;
@ApiModelProperty("设备状态")
private String deviceStatus;
}
......@@ -38,5 +38,7 @@ public class PlatDeviceQueryDTO extends BaseTenantDTO {
@ApiModelProperty(value = "组织id")
private String orgId;
private String spaceId;
}
......@@ -40,4 +40,5 @@ public class PlatElderReportDTO extends PlatElderIdDTO {
@ApiModelProperty("结束时间")
private LocalDateTime endTime;
private String tenantId;
}
......@@ -5,6 +5,7 @@ import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @Author:lzy
* @Date:2023/9/18 11:38
......@@ -41,7 +42,7 @@ public class PlatSpaceImportDTO {
@ExcelProperty({BIG_TITLE, "床位数量"})
@ApiModelProperty(value = "床位数量")
private Integer bedNumber;
private String bedNumber;
......
......@@ -27,6 +27,12 @@ public class PlatElderReportMonth extends BaseBusEntity {
@ApiModelProperty(value = "长者id")
private String elderId;
@ApiModelProperty(value = "呼吸心率设备id")
private String breatheDeviceId;
@ApiModelProperty(value = "呼吸心率设备原始id")
private String breatheOriDeviceId;
@ApiModelProperty(value = "日期")
private LocalDate day;
......
......@@ -27,4 +27,7 @@ public class PlatRoomBedDevice extends BaseBusEntity {
@TableField(updateStrategy = FieldStrategy.IGNORED)
@ApiModelProperty(value = "床位Id")
private String bedId;
@TableField(exist = false)
private String path;
}
package com.makeit.mapper.platform.device;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.makeit.dto.platform.dataScreen.PlatDataScreenQueryDTO;
import com.makeit.dto.platform.device.PlatDeviceQueryDTO;
import com.makeit.entity.platform.device.PlatDevice;
import com.makeit.vo.platform.device.PlatDeviceListVO;
import org.apache.ibatis.annotations.Param;
/**
* <p>
......@@ -13,4 +18,8 @@ import com.makeit.entity.platform.device.PlatDevice;
*/
public interface PlatDeviceMapper extends BaseMapper<PlatDevice> {
Page<PlatDeviceListVO> getDeviceIdsBySpaceId(@Param("param")PlatDeviceQueryDTO param, Page page);
Page<PlatDeviceListVO> getDevices(@Param("param")PlatDataScreenQueryDTO param, Page<PlatDevice> page);
}
......@@ -5,7 +5,6 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.makeit.dto.platform.space.PlatBedPanoramaDTO;
import com.makeit.dto.platform.space.PlatBedQueryDTO;
import com.makeit.dto.platform.workstation.WorkStationQueryDTO;
import com.makeit.dto.saas.SaasOperationLogDTO;
import com.makeit.entity.platform.space.PlatBed;
import com.makeit.vo.platform.space.PlatBedPanoramaVO;
import com.makeit.vo.platform.space.PlatBedVo;
......
......@@ -21,4 +21,8 @@ public interface PlatRoomMapper extends BaseMapper<PlatRoom> {
List<WorkStationInstitutionRoomVO> workStationList(@Param("dto") WorkStationQueryDTO dto);
Page<WorkStationInstitutionRoomVO> workStationPage(Page<WorkStationQueryDTO> page, @Param("dto") WorkStationQueryDTO dto);
List<PlatSpaceAndRoomVO> spaceList(@Param("orgIds")List<String> orgIds);
List<PlatSpaceAndRoomVO> roomList(@Param("orgIds")List<String> orgIds);
}
......@@ -63,4 +63,6 @@ public interface PlatAlarmRecordService extends IService<PlatAlarmRecord> {
void dealAlarm(BaseIdDTO dto);
void read(String id);
Integer unreadCount(PlatAlarmRecordQueryDTO dto);
}
......@@ -2,17 +2,23 @@ package com.makeit.service.platform.alarm;
import com.baomidou.mybatisplus.extension.service.IService;
import com.makeit.dto.platform.alarm.PlatAlarmCheckDTO;
import com.makeit.dto.platform.alarm.PlatDayDurationRecordDTO;
import com.makeit.entity.platform.alarm.PlatDayDurationRecord;
import com.makeit.utils.AlarmRedisDTO;
import java.util.List;
/**
* @author lixl
* @description 针对表【plat_day_duration_record(每天停留时长记录)】的数据库操作Service
* @createDate 2023-09-14 10:14:20
*/
* @author lixl
* @description 针对表【plat_day_duration_record(每天停留时长记录)】的数据库操作Service
* @createDate 2023-09-14 10:14:20
*/
public interface PlatDayDurationRecordService extends IService<PlatDayDurationRecord> {
List<PlatDayDurationRecord> getDayMaxDurationList(PlatDayDurationRecordDTO param);
void saveDayDurationRecord(PlatAlarmCheckDTO platAlarmCheckDTO, AlarmRedisDTO alarmRedisDTO);
}
......@@ -127,57 +127,11 @@ public class BehaviorAlarm implements IAlarm {
return;
}
//保存每次进入空间时长
saveDayDurationRecord(platAlarmCheckDTO, alarmRedisDTO);
platDayDurationRecordService.saveDayDurationRecord(platAlarmCheckDTO, alarmRedisDTO);
RedisUtil.delete(RedisConst.ALARM_DEVICE_BEHAVIOR_ID + deviceId);
}
}
/**
* 保存停留时长记录
* 进入雷达开始
* 走出雷达结束
*
* @param platAlarmCheckDTO
* @param alarmRedisDTO
*/
private void saveDayDurationRecord(PlatAlarmCheckDTO platAlarmCheckDTO, AlarmRedisDTO alarmRedisDTO) {
PlatAlarmConfig config = platAlarmCheckDTO.getPlatAlarmConfig();
PlatDevice platDevice = platAlarmCheckDTO.getPlatDevice();
Date now = new Date();
long endLong = now.getTime();
long count = endLong - alarmRedisDTO.getStartLong();
//save db
platAlarmRecordService.getElderListByDeviceId(platAlarmCheckDTO);
if(CollectionUtils.isEmpty(platAlarmCheckDTO.getPlatElderList())){
log.error("未关联长者,设备id:"+platDevice.getId());
return;
}
List<PlatElder> platElderList = platAlarmCheckDTO.getPlatElderList();
if(CollectionUtils.isNotEmpty(platElderList)){
platAlarmRecordService.getElderListByDeviceId(platAlarmCheckDTO);
platElderList = platAlarmCheckDTO.getPlatElderList();
}
for (PlatElder platElder : platElderList) {
if(StringUtils.isBlank(platElder.getRegionName())){
continue;
}
PlatDayDurationRecord durationRecord = new PlatDayDurationRecord();
durationRecord.setElderIds(platElder.getId());
durationRecord.setRegionName(platElder.getRegionName());
durationRecord.setDuration(count);
durationRecord.setOriDeviceId(platDevice.getOriDeviceId());
durationRecord.setDay(alarmRedisDTO.getStart());
durationRecord.setStartDate(alarmRedisDTO.getStart());
durationRecord.setEndDate(now);
durationRecord.setTenantId(config.getTenantId());
durationRecord.setRoomId(platElder.getRoomId());
durationRecord.setDeviceId(platDevice.getId());
platDayDurationRecordService.saveOrUpdate(durationRecord);
}
}
@Override
public void notice(PlatAlarmCheckDTO platAlarmCheckDTO) {
......
......@@ -70,11 +70,15 @@ public class BreathAlarm implements IAlarm {
}else {
PlatAlarmConfig config = platAlarmCheckDTO.getPlatAlarmConfig();
String ruleConfigStr = config.getRuleConfig();
if (CommonEnum.NO.getValue().equals(config.getStatus())) {
log.error("呼吸告警配置为启用,告警配置id:" + config.getId());
return;
}
if (StringUtils.isBlank(ruleConfigStr)) {
log.error("呼吸告警配置未配置,告警配置id:" + config.getId());
return;
}
ruleConfig = JsonUtil.toObj(ruleConfigStr, PlatAlarmConfigRespiratoryDTOVO.class);
}
......
......@@ -3,7 +3,10 @@ package com.makeit.service.platform.alarm.alarmStrategy;
import cn.hutool.core.convert.Convert;
import com.alibaba.fastjson.JSONObject;
import com.makeit.dto.platform.alarm.PlatAlarmCheckDTO;
import com.makeit.dto.platform.alarm.PlatAlarmConfigBehaviorDTOVO;
import com.makeit.entity.platform.alarm.PlatAlarmConfig;
import com.makeit.entity.platform.alarm.PlatAlarmRecord;
import com.makeit.entity.platform.alarm.PlatDayDurationRecord;
import com.makeit.entity.platform.device.PlatDevice;
import com.makeit.entity.platform.elder.PlatElder;
import com.makeit.entity.platform.space.PlatRoom;
......@@ -11,7 +14,12 @@ import com.makeit.enums.CommonEnum;
import com.makeit.enums.platform.alarm.PlatAlarmConfigEnum;
import com.makeit.enums.redis.RedisConst;
import com.makeit.service.platform.alarm.PlatAlarmRecordService;
import com.makeit.service.platform.alarm.PlatDayDurationRecordService;
import com.makeit.utils.AlarmConfigCacheUtil;
import com.makeit.utils.AlarmRedisDTO;
import com.makeit.utils.DayDurationUtil;
import com.makeit.utils.data.convert.BeanDtoVoUtils;
import com.makeit.utils.data.convert.JsonUtil;
import com.makeit.utils.redis.RedisUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
......@@ -20,6 +28,8 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
@Component
......@@ -28,6 +38,15 @@ public class FallAlarm implements IAlarm {
@Autowired
private PlatAlarmRecordService platAlarmRecordService;
@Autowired
private PlatDayDurationRecordService platDayDurationRecordService;
@Autowired
private AlarmConfigCacheUtil alarmConfigCacheUtil;
@Autowired
private DayDurationUtil dayDurationUtil;
private final PlatAlarmConfigEnum.AlarmTypeEnum alarmTypeEnum = PlatAlarmConfigEnum.AlarmTypeEnum.FALL;
@Override
......@@ -46,25 +65,108 @@ public class FallAlarm implements IAlarm {
PlatDevice platDevice = platAlarmCheckDTO.getPlatDevice();
String deviceId = platDevice.getId();
String personState = Convert.toStr(properties.get("personState"));
//记录停留时长
recordDuration(platAlarmCheckDTO);
//跌倒告警
AlarmRedisDTO alarmRedisDTO = RedisUtil.get(RedisConst.ALARM_DEVICE_FALL_ID + deviceId);
if(alarmRedisDTO==null){
if (alarmRedisDTO == null) {
alarmRedisDTO = new AlarmRedisDTO();
alarmRedisDTO.setAlarm(CommonEnum.NO.getValue());
RedisUtil.set(RedisConst.ALARM_DEVICE_FALL_ID+ deviceId, alarmRedisDTO);
RedisUtil.set(RedisConst.ALARM_DEVICE_FALL_ID + deviceId, alarmRedisDTO);
}
if (StringUtils.equals(personState, CommonEnum.YES.getValue())) {
if (StringUtils.equals(alarmRedisDTO.getAlarm(),CommonEnum.YES.getValue())){
log.error("长者跌倒,已告警过,设备plat_id:"+deviceId);
if (StringUtils.equals(alarmRedisDTO.getAlarm(), CommonEnum.YES.getValue())) {
log.error("长者跌倒,已告警过,设备plat_id:" + deviceId);
return;
}
alarmRedisDTO.setAlarm(CommonEnum.YES.getValue());
RedisUtil.set(RedisConst.ALARM_DEVICE_FALL_ID+ deviceId, alarmRedisDTO);
RedisUtil.set(RedisConst.ALARM_DEVICE_FALL_ID + deviceId, alarmRedisDTO);
notice(platAlarmCheckDTO);
} else {
if(StringUtils.equals(alarmRedisDTO.getAlarm(),CommonEnum.YES.getValue())) {
if (StringUtils.equals(alarmRedisDTO.getAlarm(), CommonEnum.YES.getValue())) {
alarmRedisDTO.setAlarm(CommonEnum.NO.getValue());
RedisUtil.set(RedisConst.ALARM_DEVICE_FALL_ID+ deviceId, alarmRedisDTO);
RedisUtil.set(RedisConst.ALARM_DEVICE_FALL_ID + deviceId, alarmRedisDTO);
}
}
}
private void recordDuration(PlatAlarmCheckDTO platAlarmCheckDTO) {
PlatDevice platDevice = platAlarmCheckDTO.getPlatDevice();
PlatAlarmConfig config = alarmConfigCacheUtil.get(platDevice.getOrgId(), PlatAlarmConfigEnum.AlarmTypeEnum.BEHAVIOR.getValue());
String ruleConfigStr = config.getRuleConfig();
JSONObject properties = platAlarmCheckDTO.getProperties();
String deviceId = platDevice.getId();
if (StringUtils.isBlank(ruleConfigStr)) {
log.error("行为告警配置未配置,告警配置id:" + config.getId());
return;
}
String personState = Convert.toStr(properties.get("personState"));
String person = Convert.toStr(properties.get("person"));
PlatAlarmConfigBehaviorDTOVO ruleConfig = JsonUtil.toObj(ruleConfigStr, PlatAlarmConfigBehaviorDTOVO.class);
Integer duration = ruleConfig.getAverageDuration();//分钟
PlatDayDurationRecord platDayDurationRecord = dayDurationUtil.get(deviceId);
// if (platDayDurationRecord == null) {
// log.error("行为告警未找到行为异常平均时长,设备plat_id:" + platDevice.getId());
// return;
// }
Integer duration1 = 0;
if (platDayDurationRecord != null) {
duration1 = Math.toIntExact(platDayDurationRecord.getDuration());
}
//duration+平均停留时长
if (duration == null) {
duration = 0;
} else {
duration = duration * 60 + (duration1 / 1000);
}
List<String> personStateList = Arrays.asList("0");
//有人
//计数
Date now = new Date();
long endLong = now.getTime();
AlarmRedisDTO alarmRedisDTO = RedisUtil.get(RedisConst.ALARM_DEVICE_BEHAVIOR_ID + deviceId);
if (alarmRedisDTO == null) {
alarmRedisDTO = new AlarmRedisDTO();
}
//有人
if (!personStateList.contains(person)) {
//第一次进入空间
Long startLong = alarmRedisDTO.getStartLong();
if (startLong == null) {
alarmRedisDTO.setStartLong(endLong);
alarmRedisDTO.setStart(now);
RedisUtil.set(RedisConst.ALARM_DEVICE_BEHAVIOR_ID + deviceId, alarmRedisDTO);
log.error("空间雷达上报进入房间,设备plat_id:" + platDevice.getId());
return;
}
long count = endLong - startLong;
//进入空间时间满足告警时长,判断是否已经告警过了
if (duration!= 0 && count / 1000 >= duration && StringUtils.equals(alarmRedisDTO.getAlarm(), CommonEnum.NO.getValue())) {
log.error("空间雷达发出告警,设备plat_id:" + platDevice.getId());
if(duration1 != 0) {
alarmRedisDTO.setAlarm(CommonEnum.YES.getValue());
RedisUtil.set(RedisConst.ALARM_DEVICE_BEHAVIOR_ID + deviceId, alarmRedisDTO);
notice(platAlarmCheckDTO);
}else {
return;
}
}
} else {//没人
// 是否有第一次进入记录,有则保存db
Long startLong = alarmRedisDTO.getStartLong();
if (startLong == null) {
return;
}
//保存每次进入空间时长
PlatAlarmCheckDTO platAlarmCheckDTO_behavior = BeanDtoVoUtils.convert(platAlarmCheckDTO, PlatAlarmCheckDTO.class);
platAlarmCheckDTO_behavior.setPlatAlarmConfig(config);
platDayDurationRecordService.saveDayDurationRecord(platAlarmCheckDTO_behavior, alarmRedisDTO);
RedisUtil.delete(RedisConst.ALARM_DEVICE_BEHAVIOR_ID + deviceId);
}
}
......@@ -83,11 +185,11 @@ public class FallAlarm implements IAlarm {
param.add(platElder.getName());
param.add(platRoom.getName());
platAlarmCheckDTO.setParam(param);
PlatAlarmRecord platAlarmRecord = platAlarmRecordService.convertToPlatAlarmRecord(platAlarmCheckDTO,platElder);
PlatAlarmRecord platAlarmRecord = platAlarmRecordService.convertToPlatAlarmRecord(platAlarmCheckDTO, platElder);
platAlarmRecord.setElderIds(platElder.getId());
platAlarmRecord.setElderName(platElder.getName());
platAlarmRecordService.noticeDeviceAlarm(platAlarmCheckDTO.getPlatAlarmConfig(), platAlarmRecord);
log.error("长者跌倒,发出告警,设备id:"+platDevice.getId()+", 长者名称:"+platElder.getName());
log.error("长者跌倒,发出告警,设备id:" + platDevice.getId() + ", 长者名称:" + platElder.getName());
}
}
}
......@@ -21,6 +21,7 @@ import com.makeit.entity.platform.elder.PlatElderChildrenInfo;
import com.makeit.entity.platform.space.PlatRegionSetting;
import com.makeit.entity.platform.space.PlatRoom;
import com.makeit.entity.platform.space.PlatRoomBedDevice;
import com.makeit.entity.saas.PlatTenant;
import com.makeit.enums.CommonEnum;
import com.makeit.exception.BusinessException;
import com.makeit.global.aspect.tenant.TenantIdIgnore;
......@@ -33,6 +34,7 @@ import com.makeit.service.platform.elder.PlatElderService;
import com.makeit.service.platform.space.PlatRegionSettingService;
import com.makeit.service.platform.space.PlatRoomBedDeviceService;
import com.makeit.service.platform.space.PlatRoomService;
import com.makeit.service.saas.PlatTenantService;
import com.makeit.utils.data.convert.BeanDtoVoUtils;
import com.makeit.utils.data.convert.PageUtil;
import com.makeit.utils.msg.MsgSendUtil;
......@@ -89,6 +91,8 @@ public class PlatAlarmRecordServiceImpl extends ServiceImpl<PlatAlarmRecordMappe
private PlatRoomService platRoomService;
@Autowired
private PlatRegionSettingService platRegionSettingService;
@Autowired
private PlatTenantService platTenantService;
@Override
......@@ -147,6 +151,7 @@ public class PlatAlarmRecordServiceImpl extends ServiceImpl<PlatAlarmRecordMappe
}
})
.eq(StringUtils.isNotBlank(param.getNoticeStatus()),PlatAlarmRecord::getNoticeStatus,param.getNoticeStatus())
.eq(StringUtils.isNotBlank(param.getReadFlag()),PlatAlarmRecord::getReadFlag,param.getReadFlag())
.orderByDesc(BaseEntity::getCreateDate)
;
}
......@@ -315,8 +320,22 @@ public class PlatAlarmRecordServiceImpl extends ServiceImpl<PlatAlarmRecordMappe
if(StringUtils.isEmpty(notifyChannel)){
return;
}
PlatTenant platTenant = platTenantService.getById(alarmConfig.getTenantId());
if(platTenant == null){
return;
}
String alertChannel = platTenant.getAlertChannel();
if(StringUtils.isBlank(alertChannel)){
return;
}
String[] tenantChannels = alertChannel.split(",");
List<String> tenantChannelList = Arrays.asList(tenantChannels);
String[] split = notifyChannel.split(",");
for (String sendType : split) {
//租户告警渠道 没配置的 就不发送
if(!tenantChannelList.contains(sendType)){
continue;
}
SendTypeEnum sendTypeEnum = SendTypeEnum.getByValue(sendType);
boolean contains = notifyChannelList.contains(sendTypeEnum);
if (contains) {
......@@ -491,4 +510,23 @@ public class PlatAlarmRecordServiceImpl extends ServiceImpl<PlatAlarmRecordMappe
.set(PlatAlarmRecord::getReadFlag, CommonEnum.YES.getValue());
update(recordLambdaUpdateWrapper);
}
@Override
public Integer unreadCount(PlatAlarmRecordQueryDTO dto) {
PlatElderChildrenInfo platElderChildrenInfo = platElderChildrenInfoService.getById(WechatUserUtil.getUserId());
log.info("子女端账号:"+platElderChildrenInfo.toString());
if (platElderChildrenInfo == null) {
return 0;
}
String elderId = platElderChildrenInfo.getElderId();
if(StringUtils.isBlank(elderId)){
return 0;
}
String[] split = elderId.split(",");
dto.setElderIdList(Arrays.asList(split));
dto.setNoticeStatus(CommonEnum.YES.getValue());
dto.setReadFlag(CommonEnum.NO.getValue());
LambdaQueryWrapper<PlatAlarmRecord> lambdaQueryWrapper = getLambdaQueryWrapper(dto);
return Math.toIntExact(count(lambdaQueryWrapper));
}
}
......@@ -2,12 +2,22 @@ package com.makeit.service.platform.alarm.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.makeit.dto.platform.alarm.PlatAlarmCheckDTO;
import com.makeit.dto.platform.alarm.PlatDayDurationRecordDTO;
import com.makeit.entity.platform.alarm.PlatAlarmConfig;
import com.makeit.entity.platform.alarm.PlatDayDurationRecord;
import com.makeit.entity.platform.device.PlatDevice;
import com.makeit.entity.platform.elder.PlatElder;
import com.makeit.mapper.platform.alarm.PlatDayDurationRecordMapper;
import com.makeit.service.platform.alarm.PlatAlarmRecordService;
import com.makeit.service.platform.alarm.PlatDayDurationRecordService;
import com.makeit.utils.AlarmRedisDTO;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List;
/**
......@@ -19,8 +29,59 @@ import java.util.List;
public class PlatDayDurationRecordServiceImpl extends ServiceImpl<PlatDayDurationRecordMapper, PlatDayDurationRecord>
implements PlatDayDurationRecordService {
@Autowired
private PlatAlarmRecordService platAlarmRecordService;
@Override
public List<PlatDayDurationRecord> getDayMaxDurationList(PlatDayDurationRecordDTO param){
return baseMapper.getDayMaxDurationList(param);
}
/**
* 保存停留时长记录
* 进入雷达开始
* 走出雷达结束
*
* @param platAlarmCheckDTO
* @param alarmRedisDTO
*/
@Override
public void saveDayDurationRecord(PlatAlarmCheckDTO platAlarmCheckDTO, AlarmRedisDTO alarmRedisDTO) {
PlatAlarmConfig config = platAlarmCheckDTO.getPlatAlarmConfig();
PlatDevice platDevice = platAlarmCheckDTO.getPlatDevice();
Date now = new Date();
long endLong = now.getTime();
long count = endLong - alarmRedisDTO.getStartLong();
//save db
platAlarmRecordService.getElderListByDeviceId(platAlarmCheckDTO);
if(CollectionUtils.isEmpty(platAlarmCheckDTO.getPlatElderList())){
log.error("未关联长者,设备id:"+platDevice.getId());
return;
}
List<PlatElder> platElderList = platAlarmCheckDTO.getPlatElderList();
// if(CollectionUtils.isNotEmpty(platElderList)){
// platAlarmRecordService.getElderListByDeviceId(platAlarmCheckDTO);
// platElderList = platAlarmCheckDTO.getPlatElderList();
// }
for (PlatElder platElder : platElderList) {
if(StringUtils.isBlank(platElder.getRegionName())){
continue;
}
PlatDayDurationRecord durationRecord = new PlatDayDurationRecord();
durationRecord.setElderIds(platElder.getId());
durationRecord.setRegionName(platElder.getRegionName());
durationRecord.setDuration(count);
durationRecord.setOriDeviceId(platDevice.getOriDeviceId());
durationRecord.setDay(alarmRedisDTO.getStart());
durationRecord.setStartDate(alarmRedisDTO.getStart());
durationRecord.setEndDate(now);
durationRecord.setTenantId(config.getTenantId());
durationRecord.setRoomId(platElder.getRoomId());
durationRecord.setDeviceId(platDevice.getId());
this.saveOrUpdate(durationRecord);
}
}
}
......@@ -30,6 +30,7 @@ import com.makeit.entity.saas.PlatTenant;
import com.makeit.entity.saas.PlatTenantMenu;
import com.makeit.enums.CodeMessageEnum;
import com.makeit.enums.CommonEnum;
import com.makeit.enums.HeaderConst;
import com.makeit.enums.IsTenantAccountEnum;
import com.makeit.enums.biz.auth.SysEnum;
import com.makeit.enums.id.TreeConst;
......@@ -61,6 +62,7 @@ import com.makeit.utils.data.convert.StreamUtil;
import com.makeit.utils.data.excel.ExcelUtil;
import com.makeit.utils.data.excel.ExcelValidatorUtil;
import com.makeit.utils.data.id.IdGen;
import com.makeit.utils.request.RequestUtil;
import com.makeit.utils.sql.groupby.DynamicQuery;
import com.makeit.utils.sql.groupby.SqlUtil;
import com.makeit.utils.sql.join.JoinUtil;
......@@ -266,7 +268,7 @@ public class PlatUserServiceImpl extends ServiceImpl<PlatUserMapper, PlatUser>
@Transactional
@Override
public void edit(PlatUserDTOVO dto) {
dto.setAccount(null);
//dto.setAccount(null);
check(dto);
PlatUser user = BeanDtoVoUtils.convert(dto, PlatUser.class);
user.setIsTenant(CommonEnum.YES.getValue());
......@@ -537,9 +539,15 @@ public class PlatUserServiceImpl extends ServiceImpl<PlatUserMapper, PlatUser>
private List<PlatMenu> getMenuListByUserId(PlatUserLoginVO userLoginVO) {
String currentRoleId = userLoginVO.getCurrentRoleId();
List<String> roleIdList = new ArrayList<>();
if(StringUtils.isBlank(currentRoleId)) {
List<PlatRole> roleList = getRoleList(userLoginVO.getId());
roleIdList = StreamUtil.map(roleList, PlatRole::getId);
}else {
roleIdList.add(currentRoleId);
}
List<PlatRole> roleList = getRoleList(userLoginVO.getId());
List<String> roleIdList = StreamUtil.map(roleList, PlatRole::getId);
roleIdList.add(-1 + "");
List<PlatRoleMenu> roleMenuList = platRoleMenuService.list(new QueryWrapper<PlatRoleMenu>().lambda()
......@@ -554,7 +562,7 @@ public class PlatUserServiceImpl extends ServiceImpl<PlatUserMapper, PlatUser>
.orderByAsc(PlatMenu::getCreateDate)
);
userLoginVO.setRoleList(BeanDtoVoUtils.listVo(roleList, PlatRoleDTOVO.class));
//userLoginVO.setRoleList(BeanDtoVoUtils.listVo(roleList, PlatRoleDTOVO.class));
if (StringUtils.isNotBlank(userLoginVO.getTenantId())) {
Set<String> menuIdSet = StreamUtil.mapToSet(getMenuListByTenantId(userLoginVO.getTenantId()), PlatMenu::getId);
......@@ -589,6 +597,7 @@ public class PlatUserServiceImpl extends ServiceImpl<PlatUserMapper, PlatUser>
return userLoginVO;
}
userLoginVO.setCurrentRoleId(RequestUtil.getHeader(HeaderConst.ROLE_ID));
List<PlatMenu> menuList = getMenuListByUserId(userLoginVO);
fillMenuList(menuList, userLoginVO);
......@@ -900,6 +909,9 @@ public class PlatUserServiceImpl extends ServiceImpl<PlatUserMapper, PlatUser>
fillDept(Arrays.asList(userVO));
getRoleList(userVO);
PlatTenant platTenant = platTenantService.getById(userVO.getTenantId());
userVO.setPlatTenant(platTenant);
return userVO;
}
......
......@@ -3,8 +3,10 @@ package com.makeit.service.platform.dataScreen;
import com.makeit.common.page.PageReqDTO;
import com.makeit.common.page.PageVO;
import com.makeit.dto.platform.dataScreen.PlatDataScreenQueryDTO;
import com.makeit.dto.platform.device.PlatDeviceQueryDTO;
import com.makeit.utils.area.ChinaAreaVO;
import com.makeit.vo.platform.dataScreen.*;
import com.makeit.vo.platform.device.PlatDeviceListVO;
import java.util.List;
......@@ -30,4 +32,6 @@ public interface DataScreenService {
List<ChinaAreaVO> mapList(PlatDataScreenQueryDTO dto);
PageVO<PlatAlarmStatisticsListVo> alarmPage(PageReqDTO<PlatDataScreenQueryDTO> page);
PageVO<PlatDeviceListVO> devicePage(PageReqDTO<PlatDataScreenQueryDTO> pageReqDTO);
}
package com.makeit.service.platform.dataScreen.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.makeit.common.entity.BaseEntity;
import com.makeit.common.page.PageReqDTO;
import com.makeit.common.page.PageVO;
import com.makeit.dto.platform.dataScreen.PlatDataScreenQueryDTO;
import com.makeit.dto.platform.device.PlatDeviceQueryDTO;
import com.makeit.entity.platform.alarm.PlatAlarmRecord;
import com.makeit.entity.platform.auth.PlatOrg;
import com.makeit.entity.platform.auth.PlatUser;
......@@ -12,6 +15,7 @@ import com.makeit.entity.platform.device.PlatDevice;
import com.makeit.entity.platform.elder.PlatElder;
import com.makeit.entity.platform.space.PlatBed;
import com.makeit.entity.platform.space.PlatRoom;
import com.makeit.entity.platform.space.PlatRoomBedDevice;
import com.makeit.entity.platform.space.PlatSpace;
import com.makeit.enums.CommonEnum;
import com.makeit.enums.platform.alarm.PlatAlarmConfigEnum;
......@@ -26,26 +30,33 @@ import com.makeit.service.platform.dataScreen.DataScreenService;
import com.makeit.service.platform.device.PlatDeviceService;
import com.makeit.service.platform.elder.PlatElderService;
import com.makeit.service.platform.space.PlatBedService;
import com.makeit.service.platform.space.PlatRoomBedDeviceService;
import com.makeit.service.platform.space.PlatSpaceService;
import com.makeit.utils.area.AreaUtil;
import com.makeit.utils.area.ChinaAreaVO;
import com.makeit.utils.data.convert.BeanDtoVoUtils;
import com.makeit.utils.data.convert.PageUtil;
import com.makeit.utils.data.convert.StreamUtil;
import com.makeit.utils.old.StringUtils;
import com.makeit.utils.sql.join.JoinUtil;
import com.makeit.vo.platform.dataScreen.*;
import com.makeit.vo.platform.device.PlatDeviceListVO;
import com.makeit.vo.platform.elder.PlatElderListVO;
import jodd.util.StringUtil;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
* Controller
......@@ -69,6 +80,8 @@ public class DataScreenServiceImpl implements DataScreenService {
private PlatSpaceService platSpaceService;
@Autowired
private PlatOrgService platOrgService;
@Autowired
private PlatRoomBedDeviceService platRoomBedDeviceService;
@Override
public PlatAgeStatisticsVO ageStatistics(PlatDataScreenQueryDTO dto) {
......@@ -295,6 +308,12 @@ public class DataScreenServiceImpl implements DataScreenService {
@Override
public List<PlatMapStatisticsVO> mapStatistics(PlatDataScreenQueryDTO dto) {
if(dto.getStartTime() == null){
dto.setStartTime(LocalDateTime.of(LocalDateTime.now().toLocalDate(), LocalTime.MIN));
}
if(dto.getEndTime() == null){
dto.setEndTime(LocalDateTime.of(LocalDateTime.now().toLocalDate(), LocalTime.MAX));
}
List<PlatMapStatisticsVO> list = new ArrayList<>();
if(dto.getOrgIds().isEmpty()){
//获取该账号的权限组织
......@@ -464,12 +483,87 @@ public class DataScreenServiceImpl implements DataScreenService {
listVo.setType(record.getAlarmType());
listVo.setAlarmDate(record.getAlarmDate().format(df));
listVo.setAlarmTime(record.getAlarmDate().format(dft));
listVo.setAlarmRecordId(record.getId());
list.add(listVo);
}
return PageUtil.toPageVO(list, pages);
}
@Override
public PageVO<PlatDeviceListVO> devicePage(PageReqDTO<PlatDataScreenQueryDTO> pageReqDTO) {
PlatDataScreenQueryDTO dto = pageReqDTO.getData();
if(dto.getOrgIds().isEmpty()){
//获取该账号的权限组织
List<PlatOrg> orgs = belongToScopeList(dto.getType());
if(orgs.isEmpty()){
return new PageVO<>();
}
List<String> orgIds = orgs.stream().map(PlatOrg::getId).collect(Collectors.toList());
dto.setOrgIds(orgIds);
}else {
//根据类型过滤数据
List<PlatOrg> platOrgs = platOrgService.list(new QueryWrapper<PlatOrg>().lambda()
.in(PlatOrg::getId, dto.getOrgIds())
.eq(PlatOrg::getType, dto.getType()));
if(platOrgs.isEmpty()){
return new PageVO<>();
}
List<String> orgIdList = platOrgs.stream().map(PlatOrg::getId).collect(Collectors.toList());
dto.setOrgIds(orgIdList);
}
Page<PlatDevice> p = PageUtil.toMpPage(pageReqDTO);
// LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<PlatDevice>()
// .eq(StringUtils.isNotBlank(dto.getDeviceStatus()), PlatDevice::getStatus, dto.getDeviceStatus())
// .in(PlatDevice::getOrgId, dto.getOrgIds())
// .orderByDesc(BaseEntity::getUpdateDate);
//
// Page<PlatDevice> page = platDeviceService.page(p, queryWrapper);
Page<PlatDeviceListVO> page = platDeviceService.getDevices(dto, p);
List<PlatDeviceListVO> voList = page.getRecords();
if(CollectionUtils.isEmpty(voList)){
return new PageVO<>();
}
List<String> spaceIdList = voList.stream().flatMap(vo -> {
String spaceParentPath = vo.getSpaceParentPath();
String spp = Optional.ofNullable(spaceParentPath).orElse("");
return Stream.of(spp.split(","));
}).collect(Collectors.toList());
spaceIdList.add("-1");
List<PlatSpace> platSpaces = platSpaceService.listByIds(spaceIdList);
Map<String, String> spaceIdNameMap = platSpaces.stream().collect(Collectors.toMap(BaseEntity::getId, vo -> vo.getName(), (v1, v2) -> v1));
for (PlatDeviceListVO record : voList) {
String spaceParentPath = record.getSpaceParentPath();
if(StringUtils.isNotBlank(spaceParentPath)){
String spaceNameJoin = Stream.of(spaceParentPath.split(",")).map(vo -> spaceIdNameMap.get(vo)).collect(Collectors.joining("-"));
String spaceName = spaceNameJoin + "-" + record.getSpaceName() + "-" + record.getRoomName();
if(StringUtils.isNotBlank(record.getBedName())){
spaceName = spaceName +"-"+record.getBedName();
}
record.setSpaceName(spaceName);
}
}
JoinUtil.join(voList, platOrgService, PlatDeviceListVO::getOrgId, PlatOrg::getId, (d, o) -> {
d.setOrgName(o.getName());
});
JoinUtil.joinSplit(voList, platOrgService, PlatDeviceListVO::getOrgPath, PlatOrg::getId, (d, o) -> {
d.setOrgPathName(StreamUtil.join(o, PlatOrg::getName));
});
return PageUtil.toPageVO(voList, page);
}
private List<PlatOrg> getAncestorsOrgList(List<PlatOrg> orgs, Set<String> parentOrgIds) {
orgs = orgs.stream().filter(t->parentOrgIds.contains(t.getId())).collect(Collectors.toList());
Set<String> ancestorsOrgIdList = new HashSet<>();
......@@ -491,7 +585,12 @@ public class DataScreenServiceImpl implements DataScreenService {
if (elderIds.size() > 0) {
if (platElderMap.get(elderIds.get(0)) != null) {
PlatAlarmRecordStatisticsVo statisticsVo = BeanDtoVoUtils.convert(record, PlatAlarmRecordStatisticsVo.class);
statisticsVo.setSpaceId(platElderMap.get(elderIds.get(0)).getSpaceId());
if(StringUtil.isNotEmpty(platElderMap.get(elderIds.get(0)).getSpacePath())){
String spacePath = platElderMap.get(elderIds.get(0)).getSpacePath();
String spaceId = Arrays.asList(spacePath.split(",")).get(0);
statisticsVo.setSpaceId(spaceId);
}
statisticsVos.add(statisticsVo);
}
}
......
package com.makeit.service.platform.device;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.makeit.common.page.PageReqDTO;
import com.makeit.common.page.PageVO;
import com.makeit.dto.platform.dataScreen.PlatDataScreenQueryDTO;
import com.makeit.dto.platform.device.PlatDeviceDetailDTO;
import com.makeit.dto.platform.device.PlatDeviceEditDTO;
import com.makeit.dto.platform.device.PlatDeviceQueryDTO;
......@@ -62,4 +64,6 @@ public interface PlatDeviceService extends IService<PlatDevice> {
List<DeviceProperties> readDeviceProperties(PlatDeviceAttrWechatDTO dto);
List<PlatDevice> productList(PlatDeviceQueryDTO dto);
Page<PlatDeviceListVO> getDevices(PlatDataScreenQueryDTO dto, Page<PlatDevice> p);
}
......@@ -11,6 +11,7 @@ import com.makeit.common.entity.BaseBusEntity;
import com.makeit.common.entity.BaseEntity;
import com.makeit.common.page.PageReqDTO;
import com.makeit.common.page.PageVO;
import com.makeit.dto.platform.dataScreen.PlatDataScreenQueryDTO;
import com.makeit.dto.platform.device.PlatDeviceDetailDTO;
import com.makeit.dto.platform.device.PlatDeviceEditDTO;
import com.makeit.dto.platform.device.PlatDeviceQueryDTO;
......@@ -22,6 +23,7 @@ import com.makeit.entity.platform.auth.PlatOrg;
import com.makeit.entity.platform.device.PlatDevice;
import com.makeit.entity.platform.device.PlatDeviceOther;
import com.makeit.entity.platform.space.PlatRegionSetting;
import com.makeit.entity.platform.space.PlatSpace;
import com.makeit.enums.CodeMessageEnum;
import com.makeit.exception.BusinessException;
import com.makeit.mapper.platform.device.PlatDeviceMapper;
......@@ -32,21 +34,28 @@ import com.makeit.service.platform.auth.PlatOrgService;
import com.makeit.service.platform.device.PlatDeviceOtherService;
import com.makeit.service.platform.device.PlatDeviceService;
import com.makeit.service.platform.space.PlatRegionSettingService;
import com.makeit.service.platform.space.PlatSpaceService;
import com.makeit.service.saas.PlatTenantService;
import com.makeit.utils.DeviceCacheUtil;
import com.makeit.utils.data.convert.BeanDtoVoUtils;
import com.makeit.utils.data.convert.JsonUtil;
import com.makeit.utils.data.convert.PageUtil;
import com.makeit.utils.data.convert.StreamUtil;
import com.makeit.utils.old.StringUtils;
import com.makeit.utils.sql.join.JoinUtil;
import com.makeit.vo.platform.device.PlatDeviceListVO;
import com.makeit.vo.platform.device.PlatDeviceViewVO;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
* <p>
......@@ -74,34 +83,68 @@ public class PlatDeviceServiceImpl extends ServiceImpl<PlatDeviceMapper, PlatDev
private PlatRegionSettingService platRegionSettingService;
@Autowired
private IotProductDeviceService iotProductDeviceService;
@Autowired
private PlatSpaceService platSpaceService;
@Override
public PageVO<PlatDeviceListVO> page(PageReqDTO<PlatDeviceQueryDTO> pageReqDTO) {
PlatDeviceQueryDTO dto = pageReqDTO.getData();
Page<PlatDevice> p = PageUtil.toMpPage(pageReqDTO);
Page<PlatDevice> page = page(p, new QueryWrapper<PlatDevice>().lambda()
.like(StringUtils.isNotBlank(dto.getOriDeviceId()), PlatDevice::getOriDeviceId, dto.getOriDeviceId())
.like(StringUtils.isNotBlank(dto.getName()), PlatDevice::getName, dto.getName())
.eq(StringUtils.isNotBlank(dto.getStatus()), PlatDevice::getStatus, dto.getStatus())
.like(StringUtils.isNotBlank(dto.getProductName()), PlatDevice::getProductName, dto.getProductName())
.eq(StringUtils.isNotBlank(dto.getProductId()), PlatDevice::getProductId, dto.getProductId())
.eq(StringUtils.isNotBlank(dto.getOrgId()),PlatDevice::getOrgId,dto.getOrgId())
// .apply(StringUtils.isNotBlank(dto.getOrgId()), "find_in_set('" + dto.getOrgId() + "',org_path)")
.orderByDesc(BaseEntity::getUpdateDate)
);
Page<PlatDeviceListVO> page = baseMapper.getDeviceIdsBySpaceId(dto, p);
// Page<PlatDevice> page = page(p, new QueryWrapper<PlatDevice>().lambda()
// .like(StringUtils.isNotBlank(dto.getOriDeviceId()), PlatDevice::getOriDeviceId, dto.getOriDeviceId())
// .like(StringUtils.isNotBlank(dto.getName()), PlatDevice::getName, dto.getName())
// .eq(StringUtils.isNotBlank(dto.getStatus()), PlatDevice::getStatus, dto.getStatus())
// .like(StringUtils.isNotBlank(dto.getProductName()), PlatDevice::getProductName, dto.getProductName())
// .eq(StringUtils.isNotBlank(dto.getProductId()), PlatDevice::getProductId, dto.getProductId())
// .eq(StringUtils.isNotBlank(dto.getOrgId()),PlatDevice::getOrgId,dto.getOrgId())
// .orderByDesc(BaseEntity::getUpdateDate)
// );
List<PlatDeviceListVO> records = page.getRecords();
//List<PlatDeviceListVO> voList = BeanDtoVoUtils.listVo(records, PlatDeviceListVO.class);
if (CollectionUtils.isEmpty(records)) {
return new PageVO<>();
}
List<String> spaceIdList = records.stream().flatMap(vo -> {
String spaceParentPath = vo.getSpaceParentPath();
String spp = Optional.ofNullable(spaceParentPath).orElse("");
return Stream.of(spp.split(","));
}).collect(Collectors.toList());
spaceIdList.add("-1");
List<PlatSpace> platSpaces = platSpaceService.listByIds(spaceIdList);
List<PlatDeviceListVO> voList = BeanDtoVoUtils.listVo(page.getRecords(), PlatDeviceListVO.class);
Map<String, String> spaceIdNameMap = platSpaces.stream().collect(Collectors.toMap(BaseEntity::getId, vo -> vo.getName(), (v1, v2) -> v1));
JoinUtil.join(voList, platOrgService, PlatDeviceListVO::getOrgId, PlatOrg::getId, (d, o) -> {
for (PlatDeviceListVO record : records) {
String spaceParentPath = record.getSpaceParentPath();
if (StringUtils.isNotBlank(spaceParentPath)) {
String spaceNameJoin = Stream.of(spaceParentPath.split(",")).map(vo -> spaceIdNameMap.get(vo)).collect(Collectors.joining("-"));
String spaceName = spaceNameJoin + "-" + record.getSpaceName() + "-" + record.getRoomName();
if (StringUtils.isNotBlank(record.getBedName())) {
spaceName = spaceName + "-" + record.getBedName();
}
record.setSpaceName(spaceName);
}
}
JoinUtil.join(records, platOrgService, PlatDeviceListVO::getOrgId, PlatOrg::getId, (d, o) -> {
d.setOrgName(o.getName());
});
JoinUtil.joinSplit(voList, platOrgService, PlatDeviceListVO::getOrgPath, PlatOrg::getId, (d, o) -> {
JoinUtil.joinSplit(records, platOrgService, PlatDeviceListVO::getOrgPath, PlatOrg::getId, (d, o) -> {
d.setOrgPathName(StreamUtil.join(o, PlatOrg::getName));
});
return PageUtil.toPageVO(voList, page);
return PageUtil.toPageVO(records, page);
}
......@@ -122,13 +165,13 @@ public class PlatDeviceServiceImpl extends ServiceImpl<PlatDeviceMapper, PlatDev
check(dto);
PlatDevice db = getById(dto.getId());
BeanUtils.copyProperties(dto, db,BaseBusEntity.Fields.tenantId);
BeanUtils.copyProperties(dto, db, BaseBusEntity.Fields.tenantId);
updateById(db);
deviceCacheUtil.put(db);
iotProductDeviceService.syncUpdateDeviceInfo(db.getOriDeviceId(),dto.getName());
// iotProductDeviceService.syncUpdateDeviceInfo(db.getOriDeviceId(),dto.getName(),db.getProductId());
}
@Override
......@@ -155,7 +198,15 @@ public class PlatDeviceServiceImpl extends ServiceImpl<PlatDeviceMapper, PlatDev
PlatDevice db = getOne(new QueryWrapper<PlatDevice>().lambda()
.eq(PlatDevice::getOriDeviceId, dto.getOriDeviceId()));
String id = db.getId();
if (db == null) {
throw new RuntimeException("设备不存在:" + db.getOriDeviceId());
}
String id = null;
if (db != null) {
id = db.getId();
}
PlatDeviceOther other = platDeviceOtherService.getOne(new QueryWrapper<PlatDeviceOther>().lambda()
.eq(PlatDeviceOther::getOriDeviceId, dto.getOriDeviceId()));
......@@ -168,15 +219,16 @@ public class PlatDeviceServiceImpl extends ServiceImpl<PlatDeviceMapper, PlatDev
BeanUtils.copyProperties(dto, db);
db.setId(id);
saveOrUpdate(db);
id = db.getId();
deviceCacheUtil.put(db);
BeanUtils.copyProperties(dto, other);
other.setId(otherId);
other.setDeviceId(id);
other.setOriDeviceId(db.getOriDeviceId());
updateById(db);
deviceCacheUtil.put(db);
platDeviceOtherService.saveOrUpdate(other);
......@@ -210,10 +262,14 @@ public class PlatDeviceServiceImpl extends ServiceImpl<PlatDeviceMapper, PlatDev
platDeviceOtherService.saveOrUpdate(other);
//更新区域设置设备安装方式
platRegionSettingService.update(new UpdateWrapper<PlatRegionSetting>().lambda()
.set(PlatRegionSetting::getInstallType, other.getInstallation())
.eq(PlatRegionSetting::getDeviceId, other.getDeviceId()));
if (StringUtils.isNotEmpty(other.getAttribute())) {
PlatDeviceAttrWechatDTO deviceAttrWechatDTO = JsonUtil.toObj(other.getAttribute(), PlatDeviceAttrWechatDTO.class);
//更新区域设置设备安装方式
platRegionSettingService.update(new UpdateWrapper<PlatRegionSetting>().lambda()
.set(PlatRegionSetting::getInstallType, deviceAttrWechatDTO.getRadarMount())
.eq(PlatRegionSetting::getDeviceId, other.getDeviceId()));
}
}
@Override
......@@ -224,10 +280,10 @@ public class PlatDeviceServiceImpl extends ServiceImpl<PlatDeviceMapper, PlatDev
Page<PlatDevice> devicePage = page(page, lambdaQueryWrapper);
List<PlatDevice> records = devicePage.getRecords();
List<PlatDeviceListVO> platDeviceListVOS = BeanDtoVoUtils.listVo(records, PlatDeviceListVO.class);
JoinUtil.join(platDeviceListVOS,platTenantService, BaseTenantDTO::getTenantId,BaseEntity::getId,(d,o)->{
JoinUtil.join(platDeviceListVOS, platTenantService, BaseTenantDTO::getTenantId, BaseEntity::getId, (d, o) -> {
d.setTenantName(o.getName());
});
return PageUtil.toPageVO(platDeviceListVOS,devicePage);
return PageUtil.toPageVO(platDeviceListVOS, devicePage);
}
@Override
......@@ -245,7 +301,7 @@ public class PlatDeviceServiceImpl extends ServiceImpl<PlatDeviceMapper, PlatDev
BeanUtils.copyProperties(dto, db);
db.setId(id);
BeanUtils.copyProperties(dto, other,BaseEntity.Fields.id);
BeanUtils.copyProperties(dto, other, BaseEntity.Fields.id);
other.setDeviceId(id);
updateById(db);
......@@ -290,7 +346,12 @@ public class PlatDeviceServiceImpl extends ServiceImpl<PlatDeviceMapper, PlatDev
@Override
public void editDeviceProperties(PlatDeviceAttrWechatDTO dto) {
devicePropertiesOperateService.deviceWrite(dto.getDeviceId(),dto.getRadarMount(),dto.getRadarMode(),dto.getRadarHight());
devicePropertiesOperateService.deviceWrite(dto.getDeviceId(), dto.getRadarMount(), dto.getRadarMode(), dto.getRadarHight());
//更新区域设置设备安装方式
platRegionSettingService.update(new UpdateWrapper<PlatRegionSetting>().lambda()
.set(PlatRegionSetting::getInstallType, dto.getRadarMount())
.eq(PlatRegionSetting::getDeviceId, dto.getDeviceId()));
}
......@@ -318,4 +379,9 @@ public class PlatDeviceServiceImpl extends ServiceImpl<PlatDeviceMapper, PlatDev
.groupBy(PlatDevice::getProductId));
return platDevices;
}
@Override
public Page<PlatDeviceListVO> getDevices(PlatDataScreenQueryDTO dto, Page<PlatDevice> page) {
return baseMapper.getDevices(dto,page);
}
}
......@@ -49,4 +49,5 @@ public interface PlatElderDayReportDayService {
List<PlatElderBehaviorDistributionVO> behaviorDistribution(PlatElderReportDTO platElderIdDTO);
void elderCoordinateListAnalysisTask();
}
......@@ -13,7 +13,6 @@ import com.makeit.module.iot.enums.DeviceInfoContentFallEnum;
import com.makeit.module.iot.service.IotProductDeviceService;
import com.makeit.module.iot.vo.breathe.DeviceInfoContentBreathe;
import com.makeit.module.iot.vo.fall.DeviceInfoContentFall;
import com.makeit.module.iot.vo.space.DeviceInfoContentSpace;
import com.makeit.service.platform.alarm.PlatAlarmRecordService;
import com.makeit.service.platform.alarm.PlatDayDurationRecordService;
import com.makeit.service.platform.elder.*;
......@@ -26,11 +25,11 @@ import com.makeit.utils.time.LocalDateTimeUtils;
import com.makeit.vo.platform.elder.realtime.PlatElderCoordinateVO;
import com.makeit.vo.platform.elder.realtime.PlatElderRealTimeHeartRespiratoryVO;
import com.makeit.vo.platform.elder.report.day.*;
import org.apache.commons.lang3.RandomUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
......@@ -353,7 +352,13 @@ public class PlatElderDayReportDayServiceImpl implements PlatElderDayReportDaySe
}
@Override
public void elderCoordinateListAnalysisTask() {
}
@Override
public List<PlatElderCoordinateVO> coordinateList(String elderId, String deviceId, LocalDateTime start, LocalDateTime end) {
List<PlatDevice> platDeviceList = platElderRealTimeService.getSpaceDevice(elderId, deviceId);
if (CollectionUtils.isEmpty(platDeviceList)) {
......@@ -362,14 +367,49 @@ public class PlatElderDayReportDayServiceImpl implements PlatElderDayReportDaySe
List<PlatElderCoordinateVO> voList = new ArrayList<>(10);
platDeviceList.forEach(e -> {
List<DeviceInfoContentSpace> spaceList = iotProductDeviceService.getDeviceLogByTimeRangeSpace(e.getOriDeviceId(), 2 * 24 * 3600, start, end);
// TODO 暂时为假数据
int count = 20;
for (PlatDevice platDevice : platDeviceList) {
for (int i = 0; i < count; i++) {
PlatElderCoordinateVO vo = new PlatElderCoordinateVO();
int distance = RandomUtils.nextInt(1, 1000);
int angle = RandomUtils.nextInt(1,180) -120;
// vo.setX(new BigDecimal(distance).multiply(new BigDecimal(Math.cos(angle) + "")).setScale(2, RoundingMode.HALF_UP));
// vo.setY(new BigDecimal(distance).multiply(new BigDecimal(Math.sin(angle) + "")).setScale(2, RoundingMode.HALF_UP));
vo.setDistance(distance);
vo.setAngle(angle);
vo.setDeviceId(platDevice.getId());
vo.setOriDeviceId(platDevice.getOriDeviceId());
voList.add(vo);
}
}
return voList;
/*
List<PlatDevice> platDeviceListSpace = platElderRealTimeService.getSpaceDevice(elderId, deviceId);
List<PlatDevice> platDeviceListFall = platElderRealTimeService.getFallDevice(elderId, deviceId);
if (CollectionUtils.isEmpty(platDeviceListSpace) && CollectionUtils.isEmpty(platDeviceListFall)) {
return new ArrayList<>(10);
}
List<PlatElderCoordinateVO> voList = new ArrayList<>(10);
platDeviceListSpace.forEach(e -> {
List<DeviceInfoContentSpace> spaceList = iotProductDeviceService.getDeviceLogByTimeRangeSpace(e.getOriDeviceId(), 24 * 3600, start, end);
voList.addAll(StreamUtil.map(spaceList, i -> {
PlatElderCoordinateVO vo = new PlatElderCoordinateVO();
vo.setX(new BigDecimal(i.getProperties().getDistance()).multiply(new BigDecimal(Math.cos(i.getProperties().getAngle()) + "")).setScale(2, RoundingMode.HALF_UP));
vo.setY(new BigDecimal(i.getProperties().getDistance()).multiply(new BigDecimal(Math.sin(i.getProperties().getAngle()) + "")).setScale(2, RoundingMode.HALF_UP));
// vo.setX(new BigDecimal(i.getProperties().getDistance()).multiply(new BigDecimal(Math.cos(i.getProperties().getAngle()) + "")).setScale(2, RoundingMode.HALF_UP));
// vo.setY(new BigDecimal(i.getProperties().getDistance()).multiply(new BigDecimal(Math.sin(i.getProperties().getAngle()) + "")).setScale(2, RoundingMode.HALF_UP));
vo.setDistance(i.getProperties().getDistance());
vo.setAngle(i.getProperties().getAngle());
......@@ -384,7 +424,27 @@ public class PlatElderDayReportDayServiceImpl implements PlatElderDayReportDaySe
});
platDeviceListFall.forEach(e -> {
List<DeviceInfoContentFall> fallList = iotProductDeviceService.getDeviceLogByTimeRangeFall(e.getOriDeviceId(), 2 * 24 * 3600, start, end);
voList.addAll(StreamUtil.map(fallList, i -> {
PlatElderCoordinateVO vo = new PlatElderCoordinateVO();
vo.setTrack(i.getProperties().getTrack());
vo.setDeviceId(e.getId());
vo.setOriDeviceId(e.getOriDeviceId());
return vo;
})
);
});
return voList;
*/
}
@Override
......
......@@ -2,6 +2,7 @@ package com.makeit.service.platform.elder.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.makeit.common.entity.BaseBusEntity;
import com.makeit.dto.platform.elder.PlatElderReportDTO;
import com.makeit.entity.platform.device.PlatDevice;
import com.makeit.entity.platform.elder.*;
......@@ -150,9 +151,13 @@ public class PlatElderDayReportWeekServiceImpl implements PlatElderDayReportWeek
public PlatElderComprehensiveEvaluationVO comprehensiveEvaluationInternal(PlatElderSleepEvaluationVO platElderSleepEvaluationVO, PlatElderHeartRespiratoryEvaluationVO platElderHeartRespiratoryEvaluationVO) {
PlatElderComprehensiveEvaluationVO platElderComprehensiveEvaluationVO = new PlatElderComprehensiveEvaluationVO();
platElderComprehensiveEvaluationVO.setScore((platElderSleepEvaluationVO.getScore() + platElderHeartRespiratoryEvaluationVO.getScore()) / 2);
int sleepScore = 0;
if (platElderSleepEvaluationVO != null) {
sleepScore = platElderSleepEvaluationVO.getScore();
}
platElderComprehensiveEvaluationVO.setScore((sleepScore + platElderHeartRespiratoryEvaluationVO.getScore()) / 2);
EvaluateReportVO evaluateReportVO = saasElderReportConfigService.getByScore(platElderSleepEvaluationVO.getScore());
EvaluateReportVO evaluateReportVO = saasElderReportConfigService.getByScore(sleepScore);
if (evaluateReportVO != null) {
platElderComprehensiveEvaluationVO.setEvaluation(evaluateReportVO.getEvaluate());
}
......@@ -380,13 +385,13 @@ public class PlatElderDayReportWeekServiceImpl implements PlatElderDayReportWeek
List<LocalDate> dateList = LocalDateTimeUtils.getDateSeries(weekStartDate, weekEndDate);
String deviceId = null;
String oriDeviceId = null;
//String oriDeviceId = null;
PlatDevice platDevice = platElderRealTimeService.getBreathDevice(platElderIdDTO.getElderId(), platElderIdDTO.getDeviceId());
if (platDevice != null) {
deviceId = platDevice.getId();
oriDeviceId = platDevice.getOriDeviceId();
//oriDeviceId = platDevice.getOriDeviceId();
}
LambdaQueryWrapper<PlatElderBreatheDayStat> lambdaQueryWrapper = new QueryWrapper<PlatElderBreatheDayStat>().lambda();
......@@ -395,25 +400,25 @@ public class PlatElderDayReportWeekServiceImpl implements PlatElderDayReportWeek
lambdaQueryWrapper.le(PlatElderBreatheDayStat::getDay, weekEndDate);
String finalDeviceId = deviceId;
String finalOriDeviceId = oriDeviceId;
lambdaQueryWrapper.and(StringUtils.isNotBlank(platElderIdDTO.getElderId()) || StringUtils.isNotBlank(finalDeviceId) || StringUtils.isNotBlank(finalOriDeviceId), qw -> {
//String finalOriDeviceId = oriDeviceId;
lambdaQueryWrapper.and(StringUtils.isNotBlank(platElderIdDTO.getElderId()) || StringUtils.isNotBlank(finalDeviceId) /*|| StringUtils.isNotBlank(finalOriDeviceId)*/, qw -> {
if (StringUtils.isNotBlank(platElderIdDTO.getElderId())) {
qw.eq(PlatElderBreatheDayStat::getElderId, platElderIdDTO.getElderId());
}
if (StringUtils.isNotBlank(finalDeviceId)) {
qw.or().eq(PlatElderBreatheDayStat::getDeviceId, finalDeviceId);
}
if (StringUtils.isNotBlank(finalOriDeviceId)) {
qw.or().eq(PlatElderBreatheDayStat::getOriDeviceId, finalOriDeviceId);
}
// if (StringUtils.isNotBlank(finalOriDeviceId)) {
// qw.or().eq(PlatElderBreatheDayStat::getOriDeviceId, finalOriDeviceId);
// }
});
lambdaQueryWrapper.eq(StringUtils.isNotBlank(platElderIdDTO.getTenantId()), BaseBusEntity::getTenantId,platElderIdDTO.getTenantId());
lambdaQueryWrapper.orderByAsc(PlatElderBreatheDayStat::getDay);
List<PlatElderBreatheDayStat> breatheDayStatList = platElderBreatheDayStatService.list(lambdaQueryWrapper);
Map<LocalDate, PlatElderBreatheDayStat> map = StreamUtil.toMap(breatheDayStatList, PlatElderBreatheDayStat::getDay);
Map<LocalDate, PlatElderBreatheDayStat> map = StreamUtil.toMapDep(breatheDayStatList, PlatElderBreatheDayStat::getDay);
List<PlatElderRealTimeHeartRespiratoryWeekVO> voList = new ArrayList<>(10);
......
package com.makeit.service.platform.elder.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.google.common.collect.Lists;
import com.makeit.common.entity.BaseEntity;
import com.makeit.dto.platform.elder.PlatElderIdDTO;
import com.makeit.entity.platform.device.PlatDevice;
import com.makeit.entity.saas.analysis.SaasSleepAnalysisModel;
import com.makeit.entity.saas.analysis.SaasSleepEvaluateReport;
import com.makeit.enums.platform.elder.PlatElderRealtimeReportEnum;
import com.makeit.module.iot.enums.DeviceInfoContentBreatheEnum;
import com.makeit.module.iot.enums.DeviceInfoContentFallEnum;
import com.makeit.module.iot.enums.DeviceInfoContentSpaceEnum;
import com.makeit.module.iot.enums.DeviceState;
import com.makeit.module.iot.service.IotProductDeviceService;
import com.makeit.module.iot.vo.DeviceInfo;
import com.makeit.module.iot.vo.breathe.DeviceInfoContentBreathe;
import com.makeit.module.iot.vo.fall.DeviceInfoContentFall;
import com.makeit.module.iot.vo.space.DeviceInfoContentSpace;
import com.makeit.service.platform.device.PlatDeviceService;
import com.makeit.service.platform.elder.PlatElderDayReportDayService;
......@@ -27,8 +32,10 @@ import com.makeit.vo.platform.elder.realtime.PlatElderCoordinateVO;
import com.makeit.vo.platform.elder.realtime.PlatElderRealTimeBodyVO;
import com.makeit.vo.platform.elder.realtime.PlatElderRealTimeHeartRespiratoryVO;
import com.makeit.vo.platform.elder.realtime.PlatElderRealTimeNowVO;
import io.swagger.models.auth.In;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.RandomUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
......@@ -40,6 +47,7 @@ import java.util.List;
import java.util.Objects;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
* <p>
......@@ -51,10 +59,18 @@ import java.util.stream.Collectors;
*/
@Service
@Slf4j
public class PlatElderRealTimeServiceImpl implements PlatElderRealTimeService {
public static final String ELDER_STATUS = "plat:elder:status:";
public static final String ELDER_BR_HR = "plat:elder:brHr:";
public static final String ELDER_MOVE = "plat:elder:move:";
public static final String DEVICE_BR_DATA = "device:brhr:data:";
public static final String DEVICE_SPACE_DATA = "device:space:data:";
public static final String DEVICE_FALL_DATA = "device:fall:data:";
@Autowired
private PlatElderService platElderService;
......@@ -69,6 +85,8 @@ public class PlatElderRealTimeServiceImpl implements PlatElderRealTimeService {
@Autowired
private SaasSleepAnalysisModelService saasSleepAnalysisModelService;
@Autowired
private StringRedisTemplate redisTemplate;
@Override
public PlatDevice getBreathDevice(String elderId, String deviceId) {
......@@ -123,6 +141,9 @@ public class PlatElderRealTimeServiceImpl implements PlatElderRealTimeService {
if (platDevice == null) {
return null;
}
if (!platDevice.getStatus().equals(DeviceState.online.getValue())) {
return null;
}
DeviceInfoContentBreathe deviceInfoContentBreathe = iotProductDeviceService.getLastDeviceLogBreathe(platDevice.getOriDeviceId(), 10);
......@@ -143,13 +164,46 @@ public class PlatElderRealTimeServiceImpl implements PlatElderRealTimeService {
}
private List<DeviceInfoContentFall> getNowDataFall(String elderId, String deviceId) {
List<PlatDevice> deviceList = getFallDevice(elderId, deviceId);
if (CollectionUtils.isEmpty(deviceList)) {
return null;
}
return deviceList.stream().map(e -> iotProductDeviceService.getLastDeviceLogFall(e.getOriDeviceId(), 10)).filter(Objects::nonNull)
.collect(Collectors.toList());
}
private void nowStatusOut(PlatElderRealTimeNowVO platElderRealTimeNowVO, PlatElderIdDTO platElderIdDTO) {
List<DeviceInfoContentSpace> deviceInfoContentSpaceList = getNowDataSpace(platElderIdDTO.getElderId(), platElderIdDTO.getDeviceId());
if (CollectionUtils.isEmpty(deviceInfoContentSpaceList)) {
List<DeviceInfoContentFall> deviceInfoContentFallList = getNowDataFall(platElderIdDTO.getElderId(), platElderIdDTO.getDeviceId());
if (CollectionUtils.isEmpty(deviceInfoContentSpaceList) && CollectionUtils.isEmpty(deviceInfoContentFallList)) {
return;
}
if (StreamUtil.allMatch(deviceInfoContentSpaceList, e -> DeviceInfoContentSpaceEnum.PersonStateEnum.NOBODY.getValue().equals(e.getProperties().getPersonState()))) {
// if (StreamUtil.allMatch(deviceInfoContentSpaceList, e -> DeviceInfoContentSpaceEnum.PersonStateEnum.NOBODY.getValue().equals(e.getProperties().getPersonState()))) {
// platElderRealTimeNowVO.setStatus(PlatElderRealtimeReportEnum.NowStatus.OUT.getValue());
// }
Boolean spaceFlag = null;
Boolean fallFlag = null;
if (CollectionUtils.isNotEmpty(deviceInfoContentSpaceList)) {
spaceFlag = StreamUtil.allMatch(deviceInfoContentSpaceList, e -> DeviceInfoContentSpaceEnum.PersonStateEnum.NOBODY.getValue().equals(e.getProperties().getPersonState()));
}
if (CollectionUtils.isNotEmpty(deviceInfoContentFallList)) {
fallFlag = StreamUtil.allMatch(deviceInfoContentFallList, e -> DeviceInfoContentFallEnum.PersonStateEnum.NOBODY.getValue().equals(e.getProperties().getPersonState()));
}
List<Boolean> flagList = Stream.of(spaceFlag, fallFlag).filter(Objects::nonNull).collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(flagList) && StreamUtil.allMatch(flagList, Boolean.TRUE::equals)) {
platElderRealTimeNowVO.setStatus(PlatElderRealtimeReportEnum.NowStatus.OUT.getValue());
}
......@@ -161,7 +215,7 @@ public class PlatElderRealTimeServiceImpl implements PlatElderRealTimeService {
return;
}
boolean flag = DeviceInfoContentBreatheEnum.PersonStateEnum.NOBODY.getValue().equals(nowDataBreathe.getProperties().getPersonState()+"");
boolean flag = DeviceInfoContentBreatheEnum.PersonStateEnum.NOBODY.getValue().equals(nowDataBreathe.getProperties().getPersonState() + "");
if (!flag) {
return;
......@@ -182,7 +236,7 @@ public class PlatElderRealTimeServiceImpl implements PlatElderRealTimeService {
return;
}
boolean flag = DeviceInfoContentBreatheEnum.PersonStateEnum.NOBODY.getValue().equals(nowDataBreathe.getProperties().getPersonState()+"");
boolean flag = DeviceInfoContentBreatheEnum.PersonStateEnum.NOBODY.getValue().equals(nowDataBreathe.getProperties().getPersonState() + "");
if (!flag) {
return;
......@@ -203,7 +257,7 @@ public class PlatElderRealTimeServiceImpl implements PlatElderRealTimeService {
return;
}
boolean flag = !DeviceInfoContentBreatheEnum.PersonStateEnum.NOBODY.getValue().equals(nowDataBreathe.getProperties().getPersonState()+"");
boolean flag = !DeviceInfoContentBreatheEnum.PersonStateEnum.NOBODY.getValue().equals(nowDataBreathe.getProperties().getPersonState() + "");
if (!flag) {
return;
}
......@@ -239,15 +293,32 @@ public class PlatElderRealTimeServiceImpl implements PlatElderRealTimeService {
@Override
public PlatElderRealTimeNowVO nowStatus(PlatElderIdDTO platElderIdDTO) {
Object result = RedisUtil.get(ELDER_STATUS + platElderIdDTO.getElderId());
PlatElderRealTimeNowVO platElderRealTimeNowVO = new PlatElderRealTimeNowVO();
platElderRealTimeNowVO.setStatus(PlatElderRealtimeReportEnum.NowStatus.RUN.getValue());
PlatDevice platDevice = getBreathDevice(platElderIdDTO.getElderId(), platElderIdDTO.getDeviceId());
if (platDevice == null) {
return platElderRealTimeNowVO;
}
String brResult = redisTemplate.opsForValue().get(DEVICE_BR_DATA + platDevice.getOriDeviceId());
if (brResult != null) {
JSONObject jsonObject = JSON.parseObject(brResult);
String person = jsonObject.getString("person");
log.info("当前人员人员状态:{}",person);
if (StringUtils.equals(person,"1")) {
platElderRealTimeNowVO.setStatus(PlatElderRealtimeReportEnum.NowStatus.BED.getValue());
return platElderRealTimeNowVO;
}
}
return platElderRealTimeNowVO;
/* Object result = RedisUtil.get(ELDER_STATUS + platElderIdDTO.getElderId());
if (result != null) {
return JSON.parseObject(result.toString(),PlatElderRealTimeNowVO.class);
return JSON.parseObject(result.toString(), PlatElderRealTimeNowVO.class);
}
DeviceInfoContentBreathe deviceInfoContentBreathe = getNowDataBreathe(platElderIdDTO.getElderId(), platElderIdDTO.getDeviceId());
//
PlatElderRealTimeNowVO platElderRealTimeNowVO = new PlatElderRealTimeNowVO();
//
if (deviceInfoContentBreathe == null) {
return platElderRealTimeNowVO;
}
......@@ -274,68 +345,264 @@ public class PlatElderRealTimeServiceImpl implements PlatElderRealTimeService {
platElderRealTimeNowVO.setRespiratoryRate(deviceInfoContentBreathe.getProperties().getBr());
platElderRealTimeNowVO.setBodyMove(deviceInfoContentBreathe.getProperties().getBodymove());
RedisUtil.set(ELDER_STATUS + platElderIdDTO.getElderId(), JSON.toJSONString(platElderRealTimeNowVO),15, TimeUnit.SECONDS);
RedisUtil.set(ELDER_STATUS + platElderIdDTO.getElderId(), JSON.toJSONString(platElderRealTimeNowVO), 10, TimeUnit.SECONDS);
return platElderRealTimeNowVO;
*/
}
@Override
public PlatElderRealTimeHeartRespiratoryVO heartRespiratory(PlatElderIdDTO platElderIdDTO) {
PlatElderRealTimeHeartRespiratoryVO vo = new PlatElderRealTimeHeartRespiratoryVO();
vo.setTime(LocalDateTime.now());
PlatDevice platDevice = getBreathDevice(platElderIdDTO.getElderId(), platElderIdDTO.getDeviceId());
if (platDevice == null) {
return vo;
}
String result = redisTemplate.opsForValue().get(DEVICE_BR_DATA + platDevice.getOriDeviceId());
log.info("实时获取设备呼吸数据:{}",result);
if (result != null) {
JSONObject jsonObject = JSON.parseObject(result);
if (jsonObject != null) {
String person = jsonObject.getString("person");
log.info("当前人员人员状态:{}",person);
vo.setTime(LocalDateTime.now());
if (StringUtils.equals(person,"0")) {
vo.setHeartRate(0);
vo.setRespiratoryRate(0);
vo.setBody(0);
vo.setStatus(PlatElderRealtimeReportEnum.NowStatus.RUN.getValue());
} else {
vo.setHeartRate(Integer.valueOf(jsonObject.getString("hr")));
vo.setRespiratoryRate(Integer.valueOf(jsonObject.getString("br")));
vo.setBody(Integer.valueOf(jsonObject.getString("bodymove")));
vo.setStatus(PlatElderRealtimeReportEnum.NowStatus.BED.getValue());
}
}
return vo;
}
DeviceInfoContentBreathe deviceInfoContentBreathe = getNowDataBreathe(platElderIdDTO.getElderId(), platElderIdDTO.getDeviceId());
if (deviceInfoContentBreathe == null) {
return vo;
}
int heartRate = deviceInfoContentBreathe.getProperties().getHr();
int respiratoryRate = deviceInfoContentBreathe.getProperties().getBr();
int body = deviceInfoContentBreathe.getProperties().getBodymove();
int person = deviceInfoContentBreathe.getProperties().getPerson();
if (heartRate == 0) {
vo.setHeartRate(0);
} else {
int hrRange = RandomUtils.nextInt(1, 11) - 5;
vo.setHeartRate(Math.max(heartRate + hrRange,0));
}
if (respiratoryRate == 0) {
vo.setRespiratoryRate(0);
} else {
int brRange = RandomUtils.nextInt(1, 7) - 3;
vo.setRespiratoryRate(Math.max(respiratoryRate + brRange,0));
}
if (body == 0) {
vo.setBody(body);
} else {
int hrRange = RandomUtils.nextInt(1, 11) - 5;
vo.setBody(Math.max(body + hrRange,0));
}
vo.setStatus(person == 1 ? PlatElderRealtimeReportEnum.NowStatus.BED.getValue() : PlatElderRealtimeReportEnum.NowStatus.RUN.getValue());
return vo;
/* String brResult = redisTemplate.opsForList().rightPop(ELDER_BR_HR + platElderIdDTO.getElderId());
if (brResult != null) {
return JSON.parseObject(brResult,PlatElderRealTimeHeartRespiratoryVO.class);
}
if (deviceInfoContentBreathe == null) {
return new PlatElderRealTimeHeartRespiratoryVO();
}
int count = 10;
for (int i = 0; i < count; i++) {
}
redisTemplate.opsForList().leftPush(ELDER_BR_HR + platElderIdDTO.getElderId(),JSON.toJSONString(platElderRealTimeHeartRespiratoryVO));
}
return JSON.parseObject(redisTemplate.opsForList().rightPop(ELDER_BR_HR + platElderIdDTO.getElderId()),PlatElderRealTimeHeartRespiratoryVO.class);*/
/*
PlatElderRealTimeHeartRespiratoryVO platElderRealTimeHeartRespiratoryVO = new PlatElderRealTimeHeartRespiratoryVO();
platElderRealTimeHeartRespiratoryVO.setTime(LocalDateTime.now());
if (deviceInfoContentBreathe == null) {
return platElderRealTimeHeartRespiratoryVO;
}
platElderRealTimeHeartRespiratoryVO.setHeartRate(deviceInfoContentBreathe.getProperties().getHr());
platElderRealTimeHeartRespiratoryVO.setRespiratoryRate(deviceInfoContentBreathe.getProperties().getBr());
platElderRealTimeHeartRespiratoryVO.setRespiratoryRate(deviceInfoContentBreathe.getProperties().getBr());*/
return platElderRealTimeHeartRespiratoryVO;
//return platElderRealTimeHeartRespiratoryVO;
}
@Override
public PlatElderRealTimeBodyVO body(PlatElderIdDTO platElderIdDTO) {
String result = redisTemplate.opsForList().rightPop(ELDER_MOVE + platElderIdDTO.getElderId());
if (result != null) {
return JSON.parseObject(result,PlatElderRealTimeBodyVO.class);
}
DeviceInfoContentBreathe deviceInfoContentBreathe = getNowDataBreathe(platElderIdDTO.getElderId(), platElderIdDTO.getDeviceId());
if (deviceInfoContentBreathe == null) {
return new PlatElderRealTimeBodyVO();
}
int count = 10;
int body = deviceInfoContentBreathe.getProperties().getBodymove();
for (int i = 0; i < count; i++) {
PlatElderRealTimeBodyVO platElderRealTimeBodyVO = new PlatElderRealTimeBodyVO();
platElderRealTimeBodyVO.setTime(LocalDateTime.now().plusSeconds(i));
if (i ==0) {
platElderRealTimeBodyVO.setBodyMovementIndex(body);
} else {
if (body == 0) {
platElderRealTimeBodyVO.setBodyMovementIndex(0);
} else {
int hrRange = RandomUtils.nextInt(1, 11) - 5;
platElderRealTimeBodyVO.setBodyMovementIndex(Math.max(body + hrRange,0));
}
PlatElderRealTimeBodyVO platElderRealTimeBodyVO = new PlatElderRealTimeBodyVO();
}
redisTemplate.opsForList().leftPush(ELDER_MOVE + platElderIdDTO.getElderId(),JSON.toJSONString(platElderRealTimeBodyVO));
}
return JSON.parseObject(redisTemplate.opsForList().rightPop(ELDER_MOVE + platElderIdDTO.getElderId()),PlatElderRealTimeBodyVO.class);
/*PlatElderRealTimeBodyVO platElderRealTimeBodyVO = new PlatElderRealTimeBodyVO();
platElderRealTimeBodyVO.setTime(LocalDateTime.now());
if (deviceInfoContentBreathe == null) {
return platElderRealTimeBodyVO;
}
platElderRealTimeBodyVO.setBodyMovementIndex(deviceInfoContentBreathe.getProperties().getBodymove());
return platElderRealTimeBodyVO;
return platElderRealTimeBodyVO;*/
}
// @Override
// public List<PlatElderCoordinateVO> coordinate(PlatElderIdDTO platElderIdDTO) {
// List<DeviceInfoContentSpace> deviceInfoContentSpaceList = getNowDataSpace(platElderIdDTO.getElderId(), platElderIdDTO.getDeviceId());
//
// List<PlatElderCoordinateVO> voList = new ArrayList<>(10);
//
// if (CollectionUtils.isEmpty(deviceInfoContentSpaceList)) {
// return voList;
// }
//
// voList = StreamUtil.map(deviceInfoContentSpaceList, e -> {
// PlatElderCoordinateVO vo = new PlatElderCoordinateVO();
//
//// vo.setDeviceId();
//// vo.setOriDeviceId();
//
// vo.setX(new BigDecimal(e.getProperties().getDistance()).multiply(new BigDecimal(Math.cos(e.getProperties().getAngle()) + "")).setScale(2, RoundingMode.HALF_UP));
// vo.setY(new BigDecimal(e.getProperties().getDistance()).multiply(new BigDecimal(Math.sin(e.getProperties().getAngle()) + "")).setScale(2, RoundingMode.HALF_UP));
//
// vo.setDistance(e.getProperties().getDistance());
// vo.setAngle(e.getProperties().getAngle());
//
// return vo;
// });
//
// return voList;
// }
@Override
public List<PlatElderCoordinateVO> coordinate(PlatElderIdDTO platElderIdDTO) {
List<DeviceInfoContentSpace> deviceInfoContentSpaceList = getNowDataSpace(platElderIdDTO.getElderId(), platElderIdDTO.getDeviceId());
List<PlatElderCoordinateVO> voList = new ArrayList<>(10);
if (CollectionUtils.isEmpty(deviceInfoContentSpaceList)) {
if (platElderIdDTO == null || StringUtils.isEmpty(platElderIdDTO.getElderId())) {
return voList;
}
List<PlatDevice> deviceListSpace = getSpaceDevice(platElderIdDTO.getElderId(), platElderIdDTO.getDeviceId());
for (PlatDevice platDevice : deviceListSpace) {
String spaceResult = redisTemplate.opsForValue().get(DEVICE_SPACE_DATA + platDevice.getOriDeviceId());
if (spaceResult != null) {
PlatElderCoordinateVO vo = new PlatElderCoordinateVO();
JSONObject jsonObject = JSON.parseObject(spaceResult);
vo.setDeviceId(platDevice.getId());
vo.setOriDeviceId(platDevice.getOriDeviceId());
vo.setDistance(Integer.valueOf(jsonObject.getString("distance")));
vo.setAngle(Integer.valueOf(jsonObject.getString("angle")));
voList.add(vo);
}
String fallResult = redisTemplate.opsForValue().get(DEVICE_FALL_DATA + platDevice.getOriDeviceId());
if (fallResult != null) {
PlatElderCoordinateVO vo = new PlatElderCoordinateVO();
JSONObject jsonObject = JSON.parseObject(spaceResult);
vo.setDeviceId(platDevice.getId());
vo.setOriDeviceId(platDevice.getOriDeviceId());
//vo.setTrack((List<Integer>) jsonObject.get("track"));
voList.add(vo);
}
}
if (CollectionUtils.isNotEmpty(voList)) {
return voList;
}
voList = StreamUtil.map(deviceInfoContentSpaceList, e -> {
PlatElderCoordinateVO vo = new PlatElderCoordinateVO();
int count = 20;
for (PlatDevice platDevice : deviceListSpace) {
for (int i = 0; i < count; i++) {
PlatElderCoordinateVO vo = new PlatElderCoordinateVO();
int distance = RandomUtils.nextInt(1, 1000);
int angle = RandomUtils.nextInt(1,180) -120;
vo.setX(new BigDecimal(e.getProperties().getDistance()).multiply(new BigDecimal(Math.cos(e.getProperties().getAngle()) + "")).setScale(2, RoundingMode.HALF_UP));
vo.setY(new BigDecimal(e.getProperties().getDistance()).multiply(new BigDecimal(Math.sin(e.getProperties().getAngle()) + "")).setScale(2, RoundingMode.HALF_UP));
// vo.setX(new BigDecimal(distance).multiply(new BigDecimal(Math.cos(angle) + "")).setScale(2, RoundingMode.HALF_UP));
// vo.setY(new BigDecimal(distance).multiply(new BigDecimal(Math.sin(angle) + "")).setScale(2, RoundingMode.HALF_UP));
vo.setDistance(e.getProperties().getDistance());
vo.setAngle(e.getProperties().getAngle());
vo.setDistance(distance);
vo.setAngle(angle);
return vo;
});
vo.setDeviceId(platDevice.getId());
vo.setOriDeviceId(platDevice.getOriDeviceId());
voList.add(vo);
}
}
/* if (CollectionUtils.isNotEmpty(deviceListSpace)) {
deviceListSpace.forEach(e -> {
DeviceInfoContentSpace i = iotProductDeviceService.getLastDeviceLogSpace(e.getOriDeviceId(), 10);
if (i == null) {
return;
}
PlatElderCoordinateVO vo = new PlatElderCoordinateVO();
vo.setDeviceId(e.getId());
vo.setOriDeviceId(e.getOriDeviceId());
// vo.setX(new BigDecimal(i.getProperties().getDistance()).multiply(new BigDecimal(Math.cos(i.getProperties().getAngle()) + "")).setScale(2, RoundingMode.HALF_UP));
// vo.setY(new BigDecimal(i.getProperties().getDistance()).multiply(new BigDecimal(Math.sin(i.getProperties().getAngle()) + "")).setScale(2, RoundingMode.HALF_UP));
vo.setDistance(i.getProperties().getDistance());
vo.setAngle(i.getProperties().getAngle());
voList.add(vo);
});
}
if (CollectionUtils.isNotEmpty(deviceListFall)) {
deviceListFall.forEach(e -> {
DeviceInfoContentFall i = iotProductDeviceService.getLastDeviceLogFall(e.getOriDeviceId(), 10);
if (i == null) {
return;
}
PlatElderCoordinateVO vo = new PlatElderCoordinateVO();
vo.setDeviceId(e.getId());
vo.setOriDeviceId(e.getOriDeviceId());
vo.setTrack(i.getProperties().getTrack());
voList.add(vo);
});
}*/
return voList;
}
}
......@@ -127,9 +127,11 @@ public class PlatElderReportMonthServiceImpl extends ServiceImpl<PlatElderReport
LocalDate end = LocalDateTimeUtils.getMonthMax(start);
List<PlatElderReportMonth> monthList = list(new QueryWrapper<PlatElderReportMonth>().lambda()
.eq(PlatElderReportMonth::getElderId, platElderIdDTO.getElderId())
.eq(StringUtils.isNotBlank(platElderIdDTO.getElderId()), PlatElderReportMonth::getElderId, platElderIdDTO.getElderId())
.eq(StringUtils.isNotBlank(platElderIdDTO.getDeviceId()), PlatElderReportMonth::getBreatheDeviceId, platElderIdDTO.getDeviceId())
.ge(PlatElderReportMonth::getDay, start)
.le(PlatElderReportMonth::getDay, end)
.orderByAsc(PlatElderReportMonth::getDay)
);
List<PlatElderReportMonthVO> voList = BeanDtoVoUtils.listVo(monthList, PlatElderReportMonthVO.class);
......@@ -179,6 +181,10 @@ public class PlatElderReportMonthServiceImpl extends ServiceImpl<PlatElderReport
List<DeviceInfoContentBreathe> breatheList = iotProductDeviceService.getDeviceLogByTimeRangeBreathe(platDevice.getOriDeviceId(), 2 * 24 * 3600, yesStart, yesEnd);
if (CollectionUtils.isNotEmpty(breatheList)) {
reportMonth.setBreatheDeviceId(platDevice.getId());
reportMonth.setBreatheOriDeviceId(platDevice.getOriDeviceId());
reportMonth.setHeartRate((int) (StreamUtil.reduce(breatheList, i -> (long) i.getProperties().getHr(), 0L, Long::sum) / breatheList.size()));
reportMonth.setRespiratoryRate((int) (StreamUtil.reduce(breatheList, i -> (long) i.getProperties().getBr(), 0L, Long::sum) / breatheList.size()));
}
......
......@@ -114,7 +114,8 @@ public class PlatElderServiceImpl extends ServiceImpl<PlatElderMapper, PlatElder
.orderByDesc(PlatElder::getId);
}
private void fill(List<PlatElderListVO> list){
private void fill(List<PlatElderListVO> list) {
JoinUtil.join(list, platOrgService, PlatElderListVO::getOrgId, PlatOrg::getId, (d, o) -> {
d.setOrgName(o.getName());
});
......@@ -191,6 +192,15 @@ public class PlatElderServiceImpl extends ServiceImpl<PlatElderMapper, PlatElder
List<PlatElder> dbList = list(lambdaQueryWrapper(dto));
dbList.forEach(e->{
if (StringUtils.isNotBlank(e.getHomeAddressDetail())) {
e.setHomeAddressDetail(e.getHomeAddress());
}
if (StringUtils.isNotBlank(e.getRegisterAddressDetail())) {
e.setRegisterAddressDetail(e.getRegisterAddress());
}
});
List<PlatElderHealthInfo> healthInfoList = platElderHealthInfoService.list(new QueryWrapper<PlatElderHealthInfo>().lambda()
.in(PlatElderHealthInfo::getElderId, StreamUtil.mapId(dbList, PlatElder::getId)));
Map<String, PlatElderHealthInfo> healthInfoMap = StreamUtil.toMap(healthInfoList, PlatElderHealthInfo::getElderId);
......@@ -576,9 +586,23 @@ public class PlatElderServiceImpl extends ServiceImpl<PlatElderMapper, PlatElder
}
private void addressToDetail(PlatElderDTOVO dto) {
if (StringUtils.isNotBlank(dto.getHomeAddressDetail())) {
dto.setHomeAddressDetail(dto.getHomeAddress());
}
if (StringUtils.isNotBlank(dto.getRegisterAddressDetail())) {
dto.setRegisterAddressDetail(dto.getRegisterAddress());
}
}
@Transactional
@Override
public void addAll(PlatElderDTOVO dto) {
addressToDetail(dto);
check(BeanDtoVoUtils.convert(dto, PlatElderAddDTO.class));
PlatElder platElder = BeanDtoVoUtils.convert(dto, PlatElder.class);
......@@ -665,6 +689,8 @@ public class PlatElderServiceImpl extends ServiceImpl<PlatElderMapper, PlatElder
@Transactional
public void edit(PlatElderDTOVO dto) {
addressToDetail(dto);
check(BeanDtoVoUtils.convert(dto, PlatElderAddDTO.class));
PlatElder db = getById(dto.getId());
......@@ -700,6 +726,8 @@ public class PlatElderServiceImpl extends ServiceImpl<PlatElderMapper, PlatElder
PlatElder platElder = getById(id);
PlatElderDTOVO vo = BeanDtoVoUtils.convert(platElder, PlatElderDTOVO.class);
addressToDetail(vo);
FileUtil.convert(Arrays.asList(vo), PlatElderDTOVO::getAvatar, (e, f) -> {
e.setAvatar(f.getFullUrl());
});
......@@ -892,6 +920,9 @@ public class PlatElderServiceImpl extends ServiceImpl<PlatElderMapper, PlatElder
public List<PlatDevice> getSpaceDevice(String id) {
PlatElder platElder = getById(id);
if (platElder == null) {
return null;
}
if (StringUtils.isBlank(platElder.getBedId())) {
return null;
}
......@@ -903,6 +934,10 @@ public class PlatElderServiceImpl extends ServiceImpl<PlatElderMapper, PlatElder
public List<PlatDevice> getFallDevice(String id) {
PlatElder platElder = getById(id);
if (platElder == null) {
return null;
}
if (StringUtils.isBlank(platElder.getBedId())) {
return null;
}
......
......@@ -98,7 +98,11 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
public void elderSleepSleepAnalysisTask() {
List<String> dayHourRangeList = getLastDayHourRange();
String currentDate = DateUtil.format(new Date(), DatePattern.NORM_DATE_PATTERN);
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
calendar.add(Calendar.DAY_OF_MONTH, -1);
Date previousDate = calendar.getTime();
String currentDate = DateUtil.format(previousDate, DatePattern.NORM_DATE_PATTERN);
SaasSleepAnalysisModel analysisModel = saasSleepAnalysisModelService.getOne(new QueryWrapper<SaasSleepAnalysisModel>().lambda()
.orderByDesc(BaseEntity::getCreateBy)
......@@ -157,8 +161,8 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
continue;
}
String tenantId = elder.getTenantId();
/* String reportStartTime = "";
String reportEndTime = "";*/
String reportStartTime = "";
String reportEndTime = "";
for (String hourRange : dayHourRangeList) {
String[] hourRangeArray = hourRange.split("~");
List<DeviceOperationLogEntity> deviceOperationLogEntities = productDeviceService.getDeviceLogByTimeRange(platDevice.getOriDeviceId(), "reportProperty", 5000, hourRangeArray[0], hourRangeArray[1]);
......@@ -180,10 +184,10 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
Map<String, AnalysisVO> statisticsMap = Maps.newHashMap();
List<DeviceInfoContentBreathe> deviceInfoContentBreathes;
for (Map.Entry<String, List<DeviceInfoContentBreathe>> entry : minuteMap.entrySet()) {
/* if (StringUtils.isEmpty(reportStartTime)) {
if (StringUtils.isEmpty(reportStartTime)) {
reportStartTime = entry.getKey();
}
reportEndTime = entry.getKey();*/
reportEndTime = entry.getKey();
deviceInfoContentBreathes = entry.getValue();
DeviceInfoContentBreathe.Properties breatheProperties;
......@@ -500,10 +504,10 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
int timeHourRange = 24;
/* if (StringUtils.isNotEmpty(reportStartTime) && StringUtils.isNotEmpty(reportEndTime)) {
if (StringUtils.isNotEmpty(reportStartTime) && StringUtils.isNotEmpty(reportEndTime)) {
Long durationRange = getDurationRange(reportStartTime, reportEndTime);
timeHourRange = (int) (durationRange / 60);
}*/
}
// 判断是否满足配置的呼吸心率异常类型
BigDecimal dayBrStopRate = brStopCount == 0 ? BigDecimal.ZERO : new BigDecimal(timeHourRange).divide(new BigDecimal(brStopCount), 2, RoundingMode.HALF_UP);
......@@ -610,7 +614,7 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
platElderBreatheAbnormal.setTenantId(tenantId);
platElderBreatheAbnormalList.add(platElderBreatheAbnormal);
}
// platElderBreatheAbnormalService.saveBatch(platElderBreatheAbnormalList);
//platElderBreatheAbnormalService.saveBatch(platElderBreatheAbnormalList);
int totalActionCount = 0;
......@@ -1030,7 +1034,7 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
elderSleep.setTenantId(tenantId);
}
// TODO 起床时间和入睡时间
//platElderSleepService.saveBatch(elderSleepList);
platElderSleepService.saveBatch(elderSleepList);
EvaluateReportVO elderReport = saasElderReportConfigService.getByScore(totalScore);
......@@ -1048,7 +1052,7 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
elderSleepAnalysis.setSleepResult(sleepReport.getResult());
elderSleepAnalysis.setTenantId(tenantId);
elderSleepAnalysis.setSleepEvaluate(elderReport == null ? "" : elderReport.getEvaluate());
// platElderSleepAnalysisService.save(elderSleepAnalysis);
platElderSleepAnalysisService.save(elderSleepAnalysis);
}
}
......
......@@ -55,4 +55,6 @@ public interface PlatRoomBedDeviceService extends IService<PlatRoomBedDevice> {
List<PlatDevice> getSpaceDevice(String bedId);
List<PlatDevice> getFallDevice(String bedId);
PageVO<PlatDeviceDTO> pageBindDevice(PageReqDTO<PlatBedDeviceQueryDTO> page);
}
......@@ -66,4 +66,8 @@ public interface PlatRoomService extends IService<PlatRoom> {
List<WorkStationInstitutionRoomVO> workStationList(WorkStationQueryDTO dto);
Page<WorkStationInstitutionRoomVO> workStationPage(Page<WorkStationQueryDTO> objectPage, WorkStationQueryDTO data);
List<PlatSpaceAndRoomVO> spaceList(List<String> orgIds);
List<PlatSpaceAndRoomVO> roomList(List<String> orgIds);
}
......@@ -209,7 +209,9 @@ public class PlatRoomBedDeviceServiceImpl extends ServiceImpl<PlatRoomBedDeviceM
@Override
public PlatDevice getBreathDevice(String bedId) {
PlatRoomBedDevice device = getOne(new QueryWrapper<PlatRoomBedDevice>().lambda()
.eq(PlatRoomBedDevice::getBedId, bedId));
.eq(PlatRoomBedDevice::getBedId, bedId)
.last("limit 1")
);
if (device == null) {
return null;
......@@ -254,4 +256,46 @@ public class PlatRoomBedDeviceServiceImpl extends ServiceImpl<PlatRoomBedDeviceM
public List<PlatDevice> getFallDevice(String bedId) {
return getDeviceInternal(bedId, PlatDeviceEnum.CategoryEnum.FALL.getValue());
}
@Override
public PageVO<PlatDeviceDTO> pageBindDevice(PageReqDTO<PlatBedDeviceQueryDTO> pageReqDTO) {
PlatBedDeviceQueryDTO dto = pageReqDTO.getData();
Page<PlatDevice> p = PageUtil.toMpPage(pageReqDTO);
LambdaQueryWrapper<PlatRoomBedDevice> queryWrapper1 = new LambdaQueryWrapper<>();
queryWrapper1.eq(PlatRoomBedDevice::getRoomId, dto.getRoomId());
queryWrapper1.eq(StringUtil.isNotEmpty(dto.getBedId()), PlatRoomBedDevice::getBedId, dto.getBedId());
List<PlatRoomBedDevice> list = list(queryWrapper1);
List<String> listEquipmentIds = list.stream().map(item -> item.getDeviceId()).collect(Collectors.toList());
List<String> listBedIds = list.stream().map(item -> item.getBedId()).collect(Collectors.toList());
LambdaQueryWrapper<PlatBed> queryWrapper2 = new LambdaQueryWrapper<>();
queryWrapper2.in(PlatBed::getId, listBedIds);
List<PlatBed> listBeds = platBedService.list(queryWrapper2);
Map<String, String> map = listBeds.stream().collect(Collectors.toMap(PlatBed::getId, PlatBed::getName, (k1, k2) -> k1));
Map<String, String> mapName = new HashMap<>(20);
Map<String, String> mapBedId = new HashMap<>(20);
list.forEach(item -> {
if (map.containsKey(item.getBedId())) {
mapName.put(item.getDeviceId(), map.get(item.getBedId()));
mapBedId.put(item.getDeviceId(), item.getBedId());
}
});
if (!listEquipmentIds.isEmpty()) {
LambdaQueryWrapper<PlatDevice> queryWrapper = new LambdaQueryWrapper<>();
//queryWrapper.eq(PlatDevice::getCategory, PlatDeviceEnum.CategoryEnum.HEART);
queryWrapper.in(PlatDevice::getId, listEquipmentIds);
Page<PlatDevice> pages = platDeviceService.page(p, queryWrapper);
List<PlatDeviceDTO> data = BeanDtoVoUtils.listVo(pages.getRecords(), PlatDeviceDTO.class);
data.forEach(item -> {
item.setBedName(mapName.get(item.getId()));
item.setBedId(mapBedId.get(item.getId()));
});
return PageUtil.toPageVO(data, pages);
}else {
return new PageVO<>();
}
}
}
......@@ -165,8 +165,13 @@ public class PlatRoomDynamicServiceImpl implements PlatRoomDynamicService {
return new ArrayList<>();
}
List<String> orgIds = orgs.stream().map(PlatOrg::getId).collect(Collectors.toList());
//获取空间及房间
List<PlatSpaceAndRoomVO> list = platRoomService.spaceAndRoomList(orgIds);
//获取空间
List<PlatSpaceAndRoomVO> spaceList = platRoomService.spaceList(orgIds);
List<PlatSpaceAndRoomVO> roomList = platRoomService.roomList(orgIds);
List<PlatSpaceAndRoomVO> list = new ArrayList<>();
list.addAll(spaceList);
list.addAll(roomList);
//父级
List<PlatSpaceAndRoomVO> listParent = list.stream().filter(item-> StringUtil.isEmpty(item.getParentId())).collect(Collectors.toList());
......
......@@ -179,5 +179,14 @@ public class PlatRoomServiceImpl extends ServiceImpl<PlatRoomMapper, PlatRoom> i
return baseMapper.workStationPage(page,params);
}
@Override
public List<PlatSpaceAndRoomVO> spaceList(List<String> orgIds) {
return baseMapper.spaceList(orgIds);
}
@Override
public List<PlatSpaceAndRoomVO> roomList(List<String> orgIds) {
return baseMapper.roomList(orgIds); }
}
......@@ -39,6 +39,8 @@ import org.springframework.web.multipart.MultipartFile;
import java.util.*;
import java.util.function.BiConsumer;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
/**
......@@ -413,6 +415,7 @@ public class PlatSpaceServiceImpl extends ServiceImpl<PlatSpaceMapper, PlatSpace
Integer errorCount = 0;
Integer successCount = 0;
boolean errorFlag = false;
Pattern pattern = Pattern.compile("^\\d+$");
for (int i = 0; i < list.size(); i++) {
PlatSpaceImportDTO item = list.get(i);
......@@ -449,6 +452,17 @@ public class PlatSpaceServiceImpl extends ServiceImpl<PlatSpaceMapper, PlatSpace
}
listKey.add(key+"-"+item.getRoomName());
if(StringUtil.isNotEmpty(item.getBedNumber())){
Matcher matcher = pattern.matcher(item.getBedNumber());
// 进行匹配
if(!matcher.find()){
errorVoList.add(new ExcelErrorVo(i + 3, excelField.get(4), "床位数量格式错误"));
}
}
if (errorFlag) {
errorCount++;
} else {
......@@ -526,7 +540,7 @@ public class PlatSpaceServiceImpl extends ServiceImpl<PlatSpaceMapper, PlatSpace
String threeKey = secondId + "-" + item.getUnit();
if (!childrenIdMap.containsKey(threeKey)) {
PlatSpace platSpace = new PlatSpace();
platSpace.setName(item.getBuilding());
platSpace.setName(item.getUnit());
platSpace.setType(PlatSpaceEnum.TypeEnum.UNIT.getValue());
platSpace.setOrgId(orgId);
platSpace.setParentId(secondId);
......@@ -555,7 +569,7 @@ public class PlatSpaceServiceImpl extends ServiceImpl<PlatSpaceMapper, PlatSpace
String fourKey = threeId + "-" + item.getFloor();
if (!childrenIdMap.containsKey(fourKey)) {
PlatSpace platSpace = new PlatSpace();
platSpace.setName(item.getBuilding());
platSpace.setName(item.getFloor());
platSpace.setType(PlatSpaceEnum.TypeEnum.FLOOR.getValue());
platSpace.setOrgId(orgId);
platSpace.setParentId(threeId);
......@@ -572,8 +586,8 @@ public class PlatSpaceServiceImpl extends ServiceImpl<PlatSpaceMapper, PlatSpace
//房间
PlatRoomDTO platRoomDTO = new PlatRoomDTO();
platRoomDTO.setName(item.getRoomName());
if(item.getBedNumber()!=null){
platRoomDTO.setBedNumber(item.getBedNumber());
if(StringUtil.isNotEmpty(item.getBedNumber())){
platRoomDTO.setBedNumber(Integer.valueOf(item.getBedNumber()));
}else {
platRoomDTO.setBedNumber(0);
}
......
......@@ -178,10 +178,18 @@ public class WorkStationServiceImpl implements WorkStationService {
}
List<String> orgIds = orgs.stream().map(PlatOrg::getId).collect(Collectors.toList());
dto.setOrgIds(orgIds);
}else {
List<PlatOrg> orgs = platOrgService.list(new QueryWrapper<PlatOrg>().lambda()
.eq(PlatOrg::getId, dto.getOrgIds()));
List<String> orgIds = orgs.stream().filter(t->PlatOrgEnum.OrgTypeEnum.INSTITUTION.getValue().equals(t.getType()))
.map(PlatOrg::getId).collect(Collectors.toList());
if(orgIds.isEmpty()){
return new PageVO<>();
}
dto.setOrgIds(orgIds);
}
if (dto.getSpaceIds().isEmpty()) {
spaces = platSpaceService.list(new QueryWrapper<PlatSpace>().lambda()
.in(PlatSpace::getOrgId, dto.getOrgIds()));
if (spaces.isEmpty()) {
......@@ -475,6 +483,15 @@ public class WorkStationServiceImpl implements WorkStationService {
}
List<String> orgIds = orgs.stream().map(PlatOrg::getId).collect(Collectors.toList());
dto.setOrgIds(orgIds);
}else {
List<PlatOrg> orgs = platOrgService.list(new QueryWrapper<PlatOrg>().lambda()
.eq(PlatOrg::getId, dto.getOrgIds()));
List<String> orgIds = orgs.stream().filter(t->PlatOrgEnum.OrgTypeEnum.HOME.getValue().equals(t.getType()))
.map(PlatOrg::getId).collect(Collectors.toList());
if(orgIds.isEmpty()){
return new PageVO<>();
}
dto.setOrgIds(orgIds);
}
if (dto.getSpaceIds().isEmpty()) {
......@@ -561,7 +578,7 @@ public class WorkStationServiceImpl implements WorkStationService {
}
List<String> orgIds = orgs.stream().map(PlatOrg::getId).collect(Collectors.toList());
if(!dto.getOrgIds().isEmpty()){
if(dto.getOrgIds()!=null && !dto.getOrgIds().isEmpty()){
orgIds = dto.getOrgIds();
}
......
......@@ -94,7 +94,6 @@ public class PlatElderChildrenInfoUserLoginWechatServiceImpl implements PlatElde
TokenUtil.wechatLogin(token, wechatUserVo);
return wechatUserVo;
}
......
......@@ -14,6 +14,7 @@ import com.makeit.module.iot.vo.DeviceState;
import com.makeit.module.system.service.SysDictionaryCategoryService;
import com.makeit.module.system.vo.DictionaryVo;
import com.makeit.service.platform.device.PlatDeviceService;
import com.makeit.service.platform.elder.PlatElderDayReportDayService;
import com.makeit.service.platform.elder.PlatElderSleepService;
import com.makeit.service.saas.PlatTenantService;
import com.makeit.utils.DeviceCacheUtil;
......@@ -47,13 +48,15 @@ public class IotSyncTask {
private DeviceCacheUtil deviceCacheUtil;
@Autowired
private PlatElderSleepService platElderSleepService;
@Autowired
private PlatElderDayReportDayService platElderDayReportDayService;
/**
* 一小时同步一次
* 启用状态的租户才同步
* 新增和更新平台端设备表
*/
@Scheduled(cron = "0 0 */1 * * ?")
@Scheduled(cron = "0 0/10 * * * *")
public void syncEquipmentInfo() {
savePlatDevice();
}
......@@ -158,4 +161,13 @@ public class IotSyncTask {
log.info("定时分析长者睡眠质量结束");
}
/* @Scheduled(cron = "0 0 1 * * ?")
@TenantIdIgnore
public void elderCoordinateListAnalysisTask() {
log.info("开始定时分析24小时热力图");
platElderDayReportDayService.elderCoordinateListAnalysisTask();
log.info("定时分析长者24小时热力图");
}*/
}
......@@ -3,7 +3,8 @@ package com.makeit.vo.platform.auth;
import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.makeit.common.dto.BaseIdDTO;
import com.makeit.common.dto.BaseTenantDTO;
import com.makeit.entity.saas.PlatTenant;
import com.makeit.module.admin.dto.plat.PlatRoleDTOVO;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
......@@ -17,7 +18,7 @@ import java.util.List;
@ApiModel("租户账号 新增 编辑 详情")
@Data
public class PlatPersonDTOVO extends BaseIdDTO {
public class PlatPersonDTOVO extends BaseTenantDTO {
@NotBlank(message = "用户名不能为空")
@Size(max = 64, message = "用户名最长为64字符")
......@@ -92,6 +93,9 @@ public class PlatPersonDTOVO extends BaseIdDTO {
@ApiModelProperty(value = "角色名称,逗号拼接")
private String roleNameJoin;
@ApiModelProperty(value = "租户信息")
private PlatTenant platTenant;
}
......@@ -28,4 +28,6 @@ public class PlatAlarmStatisticsListVo {
private String alarmTime;
@ApiModelProperty(value = "路径")
private String path;
@ApiModelProperty(value = "告警id")
private String alarmRecordId;
}
......@@ -83,5 +83,15 @@ public class PlatDeviceListVO extends BaseTenantDTO {
private String tenantName;
private String spaceParentPath;
private String spaceParentPathName;
private String spaceName;
private String roomName;
private String bedName;
}
......@@ -3,7 +3,7 @@ package com.makeit.vo.platform.elder.realtime;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
@Data
public class PlatElderCoordinateVO {
......@@ -14,11 +14,11 @@ public class PlatElderCoordinateVO {
@ApiModelProperty(value = "原始设备ID")
private String oriDeviceId;
@ApiModelProperty("x")
private BigDecimal x;
@ApiModelProperty("y")
private BigDecimal y;
// @ApiModelProperty("x")
// private BigDecimal x;
//
// @ApiModelProperty("y")
// private BigDecimal y;
@ApiModelProperty("人体目标距离雷达位置 范围:0-1000,单位cm")
private Integer distance;
......@@ -26,5 +26,8 @@ public class PlatElderCoordinateVO {
@ApiModelProperty("人体目标偏离雷达法线角度范围:±60,单位°")
private Integer angle;
@ApiModelProperty("跌倒设备轨迹")
private List<Integer> track;
}
......@@ -18,5 +18,10 @@ public class PlatElderRealTimeHeartRespiratoryVO {
@ApiModelProperty("呼吸率")
private Integer respiratoryRate;
@ApiModelProperty("体动值")
private Integer body;
@ApiModelProperty("状态")
private String status;
}
......@@ -13,7 +13,9 @@ import lombok.Data;
*/
@Data
@ApiModel("PlatBedPanoramaVO参数")
public class PlatBedPanoramaVO extends BaseIdDTO {
public class PlatBedPanoramaVO{
private String id;
@ApiModelProperty("空间全路径id")
private String spacePath;
......
......@@ -29,4 +29,7 @@ public class PlatBedVo extends BaseBusEntity {
@ApiModelProperty(value = "绑定设备")
private String deviceName;
@ApiModelProperty(value = "绑定设备id")
private String deviceId;
}
......@@ -3,9 +3,10 @@
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.makeit.mapper.platform.space.PlatBedMapper">
<select id="selectBySpaceIdAndStatus" resultType="com.makeit.vo.platform.space.PlatBedPanoramaVO">
SELECT pb.id,pb.`status`,pb.name bedName ,pm.`name` roomName,pm.space_path,pe.name as elderName,pe.id as elderId,pm.id as roomId
FROM `plat_bed` pb
SELECT pb.id,pb.status,pb.name as bedName ,pm.name as roomName,pm.space_path as spacePath,pe.name as elderName,pe.id as elderId,pm.id as roomId
FROM plat_bed pb
LEFT JOIN plat_room pm on pb.room_id = pm.id
LEFT JOIN plat_elder pe on pe.bed_id = pb.id
<where>
......@@ -20,8 +21,8 @@
</select>
<select id="selectByRoomIdAndStatus" resultType="com.makeit.vo.platform.space.PlatBedPanoramaVO">
SELECT pb.id,pb.`status`,pb.name bedName ,pm.`name` roomName,pm.space_path,pe.name as elderName,pe.id as elderId,pm.id as roomId
FROM `plat_bed` pb
SELECT pb.id,pb.status,pb.name as bedName ,pm.name as roomName,pm.space_path as spacePath,pe.name as elderName,pe.id as elderId,pm.id as roomId
FROM plat_bed pb
LEFT JOIN plat_room pm on pb.room_id = pm.id
LEFT JOIN plat_elder pe on pe.bed_id = pb.id and pe.del_flag = 0
<where>
......@@ -117,7 +118,8 @@
pb.update_by as updateBy,
pb.update_date as updateDate,
pb.sort as sort,
d.name as deviceName
d.name as deviceName,
d.id as deviceId
from plat_bed pb
left join plat_room_bed_device prbd on prbd.bed_id = pb.id and prbd.del_flag = 0
left join plat_device d on d.id = prbd.device_id and d.del_flag = 0
......
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.makeit.mapper.platform.device.PlatDeviceMapper">
<select id="getDeviceIdsBySpaceId" resultType="com.makeit.vo.platform.device.PlatDeviceListVO">
select
distinct
pd.*,
ps.parent_path as spaceParentPath,
ps.name as spaceName,
pr.name as roomName,
pb.name as bedName
from plat_device pd
left join plat_room_bed_device prbd on (pd.id = prbd.device_id and prbd.del_flag = 0)
left join plat_room pr on (pr.id = prbd.room_id and pr.del_flag = 0 )
left join plat_bed pb on ( pb.id = prbd.bed_id and pb.del_flag = 0)
left join plat_space ps on (ps.id = pr.space_id and ps.del_flag = 0)
<where>
pd.del_flag = 0
<if test="param.spaceId != null and param.spaceId != ''">
and ( FIND_IN_SET(#{param.spaceId},ps.parent_path) or ps.id = #{param.spaceId})
</if>
<if test="param.oriDeviceId != null and param.oriDeviceId != ''">
and pd.ori_device_id like concat('%',#{param.oriDeviceId},'%')
</if>
<if test="param.name != null and param.name != ''">
and pd.name like concat('%',#{param.name},'%')
</if>
<if test="param.status != null and param.status != '' ">
and pd.status = #{param.status}
</if>
<if test="param.productName != null and param.productName != '' ">
and pd.product_name like concat('%',#{param.productName},'%')
</if>
<if test="param.productId != null and param.productId != '' ">
and pd.product_id = #{param.productId}
</if>
<if test="param.orgId != null and param.orgId != '' ">
and pd.org_id = #{param.orgId}
</if>
</where>
order by pd.update_date desc,prbd.update_date desc
</select>
<select id="getDevices" resultType="com.makeit.vo.platform.device.PlatDeviceListVO">
select
distinct
pd.*,
ps.parent_path as spaceParentPath,
ps.name as spaceName,
pr.name as roomName,
pb.name as bedName
from plat_device pd
left join plat_room_bed_device prbd on (pd.id = prbd.device_id and prbd.del_flag = 0)
left join plat_room pr on (pr.id = prbd.room_id and pr.del_flag = 0 )
left join plat_bed pb on ( pb.id = prbd.bed_id and pb.del_flag = 0)
left join plat_space ps on (ps.id = pr.space_id and ps.del_flag = 0)
<where>
pd.del_flag = 0
<if test="param.deviceStatus != null and param.deviceStatus != '' ">
and pd.status = #{param.deviceStatus}
</if>
<if test="param.orgIds != null and param.orgIds.size() > 0 ">
AND ps.org_id in
<foreach collection="param.orgIds" item="item" separator="," open="(" close=")" index="">
#{item}
</foreach>
</if>
</where>
order by pd.update_date desc,prbd.update_date desc
</select>
</mapper>
......@@ -4,6 +4,7 @@
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.makeit.mapper.platform.space.PlatRoomMapper">
<select id="spaceAndRoomList" resultType="com.makeit.vo.platform.space.PlatSpaceAndRoomVO">
SELECT ps.id,ps.`name`,ps.parent_id as parentId,'1' as type FROM plat_space ps
<where>
ps.del_flag = 0
......@@ -14,7 +15,7 @@
</foreach>
</if>
</where>
UNION
UNION ALL
SELECT pr.id,pr.`name`,pr.space_id as parentId,'2' as type FROM plat_room pr
LEFT JOIN plat_space p ON p.id = pr.space_id
<where>
......@@ -27,6 +28,7 @@
</if>
</where>
</select>
<select id="workStationList" resultType="com.makeit.vo.platform.workstation.WorkStationInstitutionRoomVO">
......@@ -81,5 +83,35 @@
</where>
</select>
<select id="spaceList" resultType="com.makeit.vo.platform.space.PlatSpaceAndRoomVO">
SELECT ps.id,ps.`name`,ps.parent_id as parentId,'1' as type FROM plat_space ps
<where>
ps.del_flag = 0
<if test="orgIds != null and orgIds.size()>0 ">
AND ps.org_id IN
<foreach collection="orgIds" item="item" separator="," open="(" close=")" index="">
#{item}
</foreach>
</if>
</where>
</select>
<select id="roomList" resultType="com.makeit.vo.platform.space.PlatSpaceAndRoomVO">
SELECT pr.id,pr.`name`,pr.space_id as parentId,'2' as type FROM plat_room pr
LEFT JOIN plat_space p ON p.id = pr.space_id
<where>
pr.del_flag = 0
<if test="orgIds != null and orgIds.size()>0 ">
AND p.org_id IN
<foreach collection="orgIds" item="item" separator="," open="(" close=")" index="">
#{item}
</foreach>
</if>
</where>
</select>
</mapper>
......@@ -2,16 +2,25 @@ package com.makeit.mqtt;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.makeit.common.entity.BaseBusEntity;
import com.makeit.common.entity.BaseEntity;
import com.makeit.dto.platform.alarm.PlatAlarmCheckDTO;
import com.makeit.entity.platform.alarm.PlatAlarmConfig;
import com.makeit.entity.platform.device.PlatDevice;
import com.makeit.entity.saas.PlatTenant;
import com.makeit.global.aspect.tenant.TenantIdIgnore;
import com.makeit.module.iot.enums.DeviceState;
import com.makeit.module.iot.vo.DeviceInfo;
import com.makeit.module.iot.vo.HeaderInfo;
import com.makeit.service.platform.alarm.alarmStrategy.IAlarm;
import com.makeit.service.platform.device.PlatDeviceService;
import com.makeit.service.saas.PlatTenantService;
import com.makeit.utils.AlarmConfigCacheUtil;
import com.makeit.utils.DeviceCacheUtil;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;
import org.eclipse.paho.client.mqttv3.MqttCallback;
import org.eclipse.paho.client.mqttv3.MqttClient;
......@@ -19,18 +28,25 @@ import org.eclipse.paho.client.mqttv3.MqttMessage;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StopWatch;
import java.util.List;
import java.util.Objects;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
@Component
public class PushCallback implements MqttCallback {
private static final Logger logger = LoggerFactory.getLogger(MqttPushClient.class);
public static final String DEVICE_BR_DATA = "device:brhr:data:";
public static final String DEVICE_SPACE_DATA = "device:space:data:";
public static final String DEVICE_FALL_DATA = "device:fall:data:";
@Autowired
private MqttConfig mqttConfig;
......@@ -43,6 +59,13 @@ public class PushCallback implements MqttCallback {
@Autowired
private List<IAlarm> alarmList;
@Autowired
private PlatDeviceService platDeviceService;
@Autowired
private PlatTenantService platTenantService;
@Autowired
private StringRedisTemplate redisTemplate;
@Override
public void connectionLost(Throwable cause) {
......@@ -64,6 +87,7 @@ public class PushCallback implements MqttCallback {
DeviceInfo device = JSON.parseObject(payload, DeviceInfo.class);
// todo
checkAlarm(device);
}
......@@ -82,12 +106,28 @@ public class PushCallback implements MqttCallback {
public void checkAlarm(DeviceInfo device) {
HeaderInfo headers = device.getHeaders();
List<HeaderInfo.Bind> bindings = headers.getBindings();
// TODO 先这样判断
if (headers.getProductName().contains("呼吸")) {
redisTemplate.opsForValue().set(DEVICE_BR_DATA + device.getDeviceId(),JSON.toJSONString(device.getProperties()),
1000, TimeUnit.MILLISECONDS);
}
if (headers.getProductName().contains("空间")) {
redisTemplate.opsForValue().set(DEVICE_SPACE_DATA + device.getDeviceId(),JSON.toJSONString(device.getProperties()),
1000, TimeUnit.MILLISECONDS);
}
if (headers.getProductName().contains("跌倒")) {
redisTemplate.opsForValue().set(DEVICE_FALL_DATA + device.getDeviceId(),JSON.toJSONString(device.getProperties()),
1000, TimeUnit.MILLISECONDS);
}
for (HeaderInfo.Bind binding : bindings) {
try {
String iot_tenantId = binding.getId();
StopWatch stopWatch = new StopWatch();
stopWatch.start("checkAlarm-1");
String deviceId = device.getDeviceId();
String messageType = device.getMessageType();
//更新设备状态
updateDeviceStatus(messageType,deviceId,iot_tenantId);
JSONObject properties = device.getProperties();
......@@ -120,6 +160,8 @@ public class PushCallback implements MqttCallback {
}
}
}
stopWatch.stop();
logger.info(stopWatch.prettyPrint());
}catch (Exception e){
......@@ -130,6 +172,28 @@ public class PushCallback implements MqttCallback {
}
@Transactional
public void updateDeviceStatus(String messageType, String deviceId, String iot_tenantId) {
if(StringUtils.equalsAnyIgnoreCase(messageType, DeviceState.offline.getValue(),DeviceState.online.getValue())){
platDeviceService.update(new UpdateWrapper<PlatDevice>().lambda()
.set(PlatDevice::getStatus,messageType.toLowerCase())
.eq(PlatDevice::getOriDeviceId,deviceId));
LambdaQueryWrapper<PlatDevice> deviceLambdaQueryWrapper = new LambdaQueryWrapper<>();
deviceLambdaQueryWrapper.eq(PlatDevice::getOriDeviceId,deviceId);
List<PlatDevice> deviceList = platDeviceService.list(deviceLambdaQueryWrapper);
if(CollectionUtils.isEmpty(deviceList)){
return;
}
for (PlatDevice platDevice : deviceList) {
platDevice.setStatus(messageType.toLowerCase());
}
deviceCacheUtil.putAll(deviceList);
}
}
}
......@@ -72,6 +72,7 @@ storage:
type: local
url: http://localhost:8888/${file.filePath}
# aliBaseDir: point
# aliEndpoint: obs.cn-south-1.myhuaweicloud.com
# aliAccessKeyId: HY7KT4GKCOGSRCHLXBAR
......
......@@ -57,7 +57,7 @@ sign:
# - auth/checkCode
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
log-impl: org.apache.ibatis.logging.nologging.NoLoggingImpl
file:
filePath: file
......@@ -140,4 +140,5 @@ voice-sms:
send:
url: http://www.aozoneyun.com/Message/Message/video_send
uid: 362
pwd: xmksyy123456
\ No newline at end of file
pwd: xmksyy123456
<?xml version="1.0" encoding="UTF-8"?>
<!-- 从高到地低 OFF 、 FATAL 、 ERROR 、 WARN 、 INFO 、 DEBUG 、 TRACE 、 ALL -->
<!-- 日志输出规则 根据当前ROOT 级别,日志输出时,级别高于root默认的级别时 会输出 -->
<!-- 以下 每个配置的 filter 是过滤掉输出文件里面,会出现高级别文件,依然出现低级别的日志信息,通过filter 过滤只记录本级别的日志 -->
<!-- 属性描述 scan:性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。
debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 -->
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<contextName>d1money-web-ys-ems</contextName>
<!-- 定义日志文件 输入位置 -->
<property name="logback.logdir" value="/home/group1_lzy/iot-server/logs"/>
<!-- 日志最大的历史 30天 -->
<property name="maxHistory" value="180" />
<property name="maxFileSize" value="10MB" />
<!-- ERROR级别日志 -->
<!-- 滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件 RollingFileAppender -->
<appender name="ERROR"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 过滤器,只记录WARN级别的日志 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<!-- 最常用的滚动策略,它根据时间来制定滚动策略.既负责滚动也负责出发滚动 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--日志输出位置 可相对、和绝对路径 -->
<fileNamePattern>
${log_dir}/app_error.%d{yyyy-MM-dd}.%i.log
</fileNamePattern>
<!-- 可选节点,控制保留的归档文件的最大数量,超出数量就删除旧文件假设设置每个月滚动,且<maxHistory>是6, 则只保存最近6个月的文件,删除之前的旧文件。注意,删除旧文件是,那些为了归档而创建的目录也会被删除 -->
<maxHistory>${maxHistory}</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>${maxFileSize}</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<!-- 按照固定窗口模式生成日志文件,当文件大于20MB时,生成新的日志文件。窗口大小是1到3,当保存了3个归档文件后,将覆盖最早的日志。
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>${log_dir}/%d{yyyy-MM-dd}/.log.zip</fileNamePattern> <minIndex>1</minIndex>
<maxIndex>3</maxIndex> </rollingPolicy> -->
<!-- 查看当前活动文件的大小,如果超过指定大小会告知RollingFileAppender 触发当前活动文件滚动 <triggeringPolicy
class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> <maxFileSize>5MB</maxFileSize>
</triggeringPolicy> -->
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>
</encoder>
</appender>
<!-- INFO级别日志 appender -->
<appender name="INFO"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 过滤器,只记录INFO级别的日志 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 按天回滚 daily -->
<fileNamePattern>
${log_dir}/app_info.%d{yyyy-MM-dd}.%i.log
</fileNamePattern>
<!-- 日志最大的历史 30天 -->
<maxHistory>${maxHistory}</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>${maxFileSize}</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>
</encoder>
</appender>
<logger name="java.sql.PreparedStatement" value="DEBUG" />
<logger name="java.sql.Connection" value="DEBUG" />
<logger name="java.sql.Statement" value="DEBUG" />
<logger name="com.ibatis" value="DEBUG" />
<logger name="com.ibatis.common.jdbc.SimpleDataSource" value="DEBUG" />
<logger name="com.ibatis.common.jdbc.ScriptRunner" level="DEBUG" />
<logger name="com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate"
value="DEBUG" />
<!-- root级别 DEBUG -->
<root level="INFO">
<!-- 文件输出 -->
<appender-ref ref="ERROR" />
<appender-ref ref="INFO" />
</root>
</configuration>
\ No newline at end of file
......@@ -8,7 +8,12 @@
value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%X{appName}] [%X{profile}] [%X{traceId:-},%X{spanId:-}] [%X{requestId}] [%X{userId}] [%thread] %-5level %logger{50} - %msg%n"/>
<springProfile name="prod">
<property name="logback.logdir" value="/home/group1_lzy/iot-plafform-server/logs"/>
<property name="logback.logdir" value="/home/group1_lzy/iot-server/logs"/>
<property name="logback.appname" value="app"/>
</springProfile>
<springProfile name="test">
<property name="logback.logdir" value="/home/group1_lzy/iot-server/logs"/>
<property name="logback.appname" value="app"/>
</springProfile>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment