Commit c1c027fe by 罗志长

Merge branch 'dev'

parents bbc5094a 1a9a479c
Showing with 1015 additions and 226 deletions
...@@ -3,7 +3,7 @@ INSERT INTO `saas_user`(`id`, `username`, `account`, `password`, `mobile`, `stat ...@@ -3,7 +3,7 @@ INSERT INTO `saas_user`(`id`, `username`, `account`, `password`, `mobile`, `stat
INSERT INTO `plat_alarm_config`(`id`, `alarm_type`, `status`, `org_id`, `city_org_id`, `district_org_id`, `street_org_id`, `org_path`, `rule_config`, `content`, `notify_channel`, `notify_relation`, `notify_way`, `notify_user`, `description`, `create_by`, `create_date`, `update_by`, `update_date`, `del_flag`, `tenant_id`, `content_audit`) VALUES ('1699667670087065604', '1', '1', '1701542574740770817', NULL, NULL, NULL, NULL, '{}', '[#长者姓名]在[#房间名]跌倒,请及时处理!', '', '1', '1', NULL, NULL, 'platAdmin02', '2023-09-07 14:15:26', '测试clt', '2023-09-12 17:09:17', '0', '0', NULL); INSERT INTO `plat_alarm_config`(`id`, `alarm_type`, `status`, `org_id`, `city_org_id`, `district_org_id`, `street_org_id`, `org_path`, `rule_config`, `content`, `notify_channel`, `notify_relation`, `notify_way`, `notify_user`, `description`, `create_by`, `create_date`, `update_by`, `update_date`, `del_flag`, `tenant_id`, `content_audit`) VALUES ('1699667670087065604', '1', '1', '1701542574740770817', NULL, NULL, NULL, NULL, '{}', '[#长者姓名]在[#房间名]跌倒,请及时处理!', '', '1', '1', NULL, NULL, 'platAdmin02', '2023-09-07 14:15:26', '测试clt', '2023-09-12 17:09:17', '0', '0', NULL);
INSERT INTO `plat_alarm_config`(`id`, `alarm_type`, `status`, `org_id`, `city_org_id`, `district_org_id`, `street_org_id`, `org_path`, `rule_config`, `content`, `notify_channel`, `notify_relation`, `notify_way`, `notify_user`, `description`, `create_by`, `create_date`, `update_by`, `update_date`, `del_flag`, `tenant_id`, `content_audit`) VALUES ('16996678722776842251', '2', '1', '1701542574740770817', NULL, NULL, NULL, NULL, '{\"respiratoryRateStart\":\"10\",\"respiratoryRateEnd\":\"120\",\"duration\":\"5\"}', '[#长者姓名][#呼吸状态],请及时处理!', '', '1', '1', NULL, NULL, 'platAdmin02', '2023-09-07 14:16:14', 'platAdmin02', '2023-09-07 14:16:14', '0', '0', NULL); INSERT INTO `plat_alarm_config`(`id`, `alarm_type`, `status`, `org_id`, `city_org_id`, `district_org_id`, `street_org_id`, `org_path`, `rule_config`, `content`, `notify_channel`, `notify_relation`, `notify_way`, `notify_user`, `description`, `create_by`, `create_date`, `update_by`, `update_date`, `del_flag`, `tenant_id`, `content_audit`) VALUES ('16996678722776842251', '2', '1', '1701542574740770817', NULL, NULL, NULL, NULL, '{\"respiratoryRateStart\":\"10\",\"respiratoryRateEnd\":\"120\",\"duration\":\"5\"}', '[#长者姓名][#呼吸状态],请及时处理!', '', '1', '1', NULL, NULL, 'platAdmin02', '2023-09-07 14:16:14', 'platAdmin02', '2023-09-07 14:16:14', '0', '0', NULL);
INSERT INTO `plat_alarm_config`(`id`, `alarm_type`, `status`, `org_id`, `city_org_id`, `district_org_id`, `street_org_id`, `org_path`, `rule_config`, `content`, `notify_channel`, `notify_relation`, `notify_way`, `notify_user`, `description`, `create_by`, `create_date`, `update_by`, `update_date`, `del_flag`, `tenant_id`, `content_audit`) VALUES ('16996680489417687051', '3', '1', '1701542574740770817', NULL, NULL, NULL, NULL, '{\"heartRateStart\":\"60\",\"heartRateeEnd\":\"90\",\"duration\":\"5\"}', '[#长者姓名][#心率状态],请及时处理!', '', '1', '1', NULL, NULL, 'platAdmin02', '2023-09-07 14:16:56', 'platAdmin02', '2023-09-07 14:16:56', '0', '0', NULL); INSERT INTO `plat_alarm_config`(`id`, `alarm_type`, `status`, `org_id`, `city_org_id`, `district_org_id`, `street_org_id`, `org_path`, `rule_config`, `content`, `notify_channel`, `notify_relation`, `notify_way`, `notify_user`, `description`, `create_by`, `create_date`, `update_by`, `update_date`, `del_flag`, `tenant_id`, `content_audit`) VALUES ('16996680489417687051', '3', '1', '1701542574740770817', NULL, NULL, NULL, NULL, '{\"heartRateStart\":\"60\",\"heartRateEnd\":\"90\",\"duration\":\"5\"}', '[#长者姓名][#心率状态],请及时处理!', '', '1', '1', NULL, NULL, 'platAdmin02', '2023-09-07 14:16:56', 'platAdmin02', '2023-09-07 14:16:56', '0', '0', NULL);
INSERT INTO `plat_alarm_config`(`id`, `alarm_type`, `status`, `org_id`, `city_org_id`, `district_org_id`, `street_org_id`, `org_path`, `rule_config`, `content`, `notify_channel`, `notify_relation`, `notify_way`, `notify_user`, `description`, `create_by`, `create_date`, `update_by`, `update_date`, `del_flag`, `tenant_id`, `content_audit`) VALUES ('16996682046846648331', '4', '1', '1701542574740770817', NULL, NULL, NULL, NULL, '{\"averageDuration\":\"5\"}', '[#长者姓名]在[#上级空间名-房间名]内存在行为异常,请及时处理!', '', '1', '1', NULL, NULL, 'platAdmin02', '2023-09-07 14:17:33', 'platAdmin02', '2023-09-07 14:17:33', '0', '0', NULL); INSERT INTO `plat_alarm_config`(`id`, `alarm_type`, `status`, `org_id`, `city_org_id`, `district_org_id`, `street_org_id`, `org_path`, `rule_config`, `content`, `notify_channel`, `notify_relation`, `notify_way`, `notify_user`, `description`, `create_by`, `create_date`, `update_by`, `update_date`, `del_flag`, `tenant_id`, `content_audit`) VALUES ('16996682046846648331', '4', '1', '1701542574740770817', NULL, NULL, NULL, NULL, '{\"averageDuration\":\"5\"}', '[#长者姓名]在[#上级空间名-房间名]内存在行为异常,请及时处理!', '', '1', '1', NULL, NULL, 'platAdmin02', '2023-09-07 14:17:33', 'platAdmin02', '2023-09-07 14:17:33', '0', '0', NULL);
......
ALTER TABLE `plat_device_other` ALTER TABLE `plat_device_other`
...@@ -4,8 +4,7 @@ ADD COLUMN `secure_key` varchar(255) COMMENT '密钥key' AFTER `secure_id`; ...@@ -4,8 +4,7 @@ ADD COLUMN `secure_key` varchar(255) COMMENT '密钥key' AFTER `secure_id`;
ALTER TABLE `plat_alarm_record` ALTER TABLE `plat_alarm_record`
ADD COLUMN `misinformation_flag` char(1) DEFAULT 0 COMMENT '是否误报 1 误报 0 没有误报' AFTER `read_flag` ADD COLUMN `misinformation_flag` char(1) DEFAULT 0 COMMENT '是否误报 1 误报 0 没有误报' AFTER `read_flag`;
ADD COLUMN `wechat_read_flag` char(1) DEFAULT 0 COMMENT '小程序端是否读取 0未读 1已读' AFTER `misinformation_flag`;
ALTER TABLE `plat_elder_report_month` ALTER TABLE `plat_elder_report_month`
...@@ -54,4 +53,35 @@ CREATE TABLE `plat_device_log` ( ...@@ -54,4 +53,35 @@ CREATE TABLE `plat_device_log` (
`update_by` VARCHAR ( 64 ) DEFAULT NULL COMMENT '更新人', `update_by` VARCHAR ( 64 ) DEFAULT NULL COMMENT '更新人',
`tenant_id` varchar(64) DEFAULT NULL COMMENT ' 租户id', `tenant_id` varchar(64) DEFAULT NULL COMMENT ' 租户id',
PRIMARY KEY ( `id` ) PRIMARY KEY ( `id` )
) ENGINE = INNODB DEFAULT CHARSET = utf8mb4 ROW_FORMAT = COMPACT COMMENT = '设备日志'; ) ENGINE = INNODB DEFAULT CHARSET = utf8mb4 ROW_FORMAT = COMPACT COMMENT = '设备日志';
\ No newline at end of file
-- 12.15 迭代执行sql
## 告警中心新增离床异常 初始化
ALTER TABLE `plat_alarm_config` modify column alarm_type char(1) comment '告警类型 数据字典 1 长者跌倒 2 呼吸异常 3 心率异常 4 行为异常 5 离床异常';
INSERT INTO `plat_alarm_config`(`id`, `alarm_type`, `status`, `org_id`, `city_org_id`, `district_org_id`, `street_org_id`, `org_path`, `rule_config`, `content`, `notify_channel`, `notify_relation`, `notify_way`, `notify_user`, `description`, `create_by`, `create_date`, `update_by`, `update_date`, `del_flag`, `tenant_id`, `content_audit`)
VALUES ('16996678722776842252', '5', '1', '1701542574740770817', NULL, NULL, NULL, NULL, '{"offBedStart":"00:00:00","offBedEnd":"05:00:00","duration":"60"}', '[#长者姓名]离床时间过长,请及时处理!', '', '1', '1', NULL, NULL, 'platAdmin02', NOW(), 'platAdmin02', NOW(), '0', '0', NULL);
## 离床异常字典
INSERT INTO `sys_dictionary` VALUES ('204', 'alarm.alarmType.offBed', '离床异常', '5', 5, '', '200', NOW(), NOW(), '0', NULL, NULL, NULL);
## 离床次数月统计
ALTER TABLE `plat_elder_report_month` add column off_bed_exception_count int(11) default 0 COMMENT '离床异常次数' after behavior_exception_count;
CREATE TABLE `saas_pid_manage` (
`id` varchar(64) NOT NULL COMMENT 'id',
`pid` varchar(100) NOT NULL COMMENT 'pid',
`status` char(1) DEFAULT NULL COMMENT '状态 0禁用 1启用',
`available_credit` int4 DEFAULT NULL COMMENT '可用额度',
`used_credit` int4 DEFAULT NULL COMMENT '已用额度',
`total_credit` int4 DEFAULT NULL COMMENT '总额度',
`create_date` datetime NOT NULL COMMENT '创建时间',
`update_date` datetime NOT NULL COMMENT '更新时间',
`del_flag` char(1) DEFAULT NULL COMMENT '删除标识',
`create_by` varchar(64) NOT NULL COMMENT '创建人',
`update_by` varchar(64) NOT NULL COMMENT '更新人',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPACT COMMENT='声网pid管理';
ALTER TABLE `plat_alarm_record`
ADD COLUMN `wechat_read_flag` char(1) DEFAULT 0 COMMENT '小程序端是否读取 0未读 1已读' AFTER `misinformation_flag`;
...@@ -43,6 +43,7 @@ public class SaasDeviceController { ...@@ -43,6 +43,7 @@ public class SaasDeviceController {
@ApiOperation("列表") @ApiOperation("列表")
@PostMapping("page") @PostMapping("page")
@TenantIdIgnore @TenantIdIgnore
@AuthIgnore
public ApiResponseEntity<PageVO<PlatDeviceListVO>> page(@RequestBody PageReqDTO<PlatDevice> pageReqDTO) { public ApiResponseEntity<PageVO<PlatDeviceListVO>> page(@RequestBody PageReqDTO<PlatDevice> pageReqDTO) {
return ApiResponseUtils.success(platDeviceService.pageSaas(pageReqDTO)); return ApiResponseUtils.success(platDeviceService.pageSaas(pageReqDTO));
......
...@@ -4,6 +4,7 @@ package com.makeit.controller.device; ...@@ -4,6 +4,7 @@ package com.makeit.controller.device;
import com.makeit.common.response.ApiResponseEntity; import com.makeit.common.response.ApiResponseEntity;
import com.makeit.common.response.ApiResponseUtils; import com.makeit.common.response.ApiResponseUtils;
import com.makeit.dto.platform.elder.PlatElderReportDTO; import com.makeit.dto.platform.elder.PlatElderReportDTO;
import com.makeit.global.annotation.AuthIgnore;
import com.makeit.global.aspect.tenant.TenantIdIgnore; import com.makeit.global.aspect.tenant.TenantIdIgnore;
import com.makeit.service.platform.elder.PlatElderDayReportDayService; import com.makeit.service.platform.elder.PlatElderDayReportDayService;
import com.makeit.vo.platform.elder.realtime.PlatElderCoordinateVO; import com.makeit.vo.platform.elder.realtime.PlatElderCoordinateVO;
...@@ -43,6 +44,7 @@ public class SaasDeviceReportDayController { ...@@ -43,6 +44,7 @@ public class SaasDeviceReportDayController {
@ApiOperation("睡眠评价") @ApiOperation("睡眠评价")
@PostMapping("sleepEvaluation") @PostMapping("sleepEvaluation")
@TenantIdIgnore @TenantIdIgnore
@AuthIgnore
public ApiResponseEntity<PlatElderSleepEvaluationVO> sleepEvaluation(@RequestBody PlatElderReportDTO platElderIdDTO) { public ApiResponseEntity<PlatElderSleepEvaluationVO> sleepEvaluation(@RequestBody PlatElderReportDTO platElderIdDTO) {
return ApiResponseUtils.success(platElderDayReportDayService.sleepEvaluation(platElderIdDTO)); return ApiResponseUtils.success(platElderDayReportDayService.sleepEvaluation(platElderIdDTO));
} }
......
...@@ -52,7 +52,7 @@ public class PlatOrgController { ...@@ -52,7 +52,7 @@ public class PlatOrgController {
@ApiOperation("树形列表") @ApiOperation("树形列表")
@PostMapping("list") @PostMapping("list")
public ApiResponseEntity<List<PlatOrg>> list(@RequestBody PlatOrgQueryDTO platOrgQueryDTO){ public ApiResponseEntity<List<PlatOrg>> list(@RequestBody PlatOrgQueryDTO platOrgQueryDTO){
return ApiResponseUtils.success(platOrgService.subOrgList(platOrgQueryDTO)); return ApiResponseUtils.success(platOrgService.currentOrg(platOrgQueryDTO));
} }
@Action(module = "平台端-组织", name = "新增", code = "plat:org:add") @Action(module = "平台端-组织", name = "新增", code = "plat:org:add")
......
package com.makeit.controller.saas;
import com.makeit.common.dto.BaseIdDTO;
import com.makeit.common.page.PageReqDTO;
import com.makeit.common.page.PageVO;
import com.makeit.common.response.ApiResponseEntity;
import com.makeit.common.response.ApiResponseUtils;
import com.makeit.entity.platform.device.PlatDeviceLog;
import com.makeit.entity.saas.SaasPidManage;
import com.makeit.global.aspect.tenant.TenantIdIgnore;
import com.makeit.service.saas.SaasPidManageService;
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;
/**
* <p>
* 声网pid管理 前端控制器
* </p>
*
* @author eugene young
* @since 2023-12-13
*/
@RestController
@RequestMapping("/saas/pidManage")
@Api(tags = "租户管理-声网pid管理")
public class SaasPidManageController {
@Autowired
private SaasPidManageService saasPidManageService;
@ApiOperation("列表")
@PostMapping("page")
@TenantIdIgnore
public ApiResponseEntity<PageVO<SaasPidManage>> page(@RequestBody PageReqDTO<SaasPidManage> pageReqDTO) {
return ApiResponseUtils.success(saasPidManageService.pageList(pageReqDTO));
}
@ApiOperation("新增")
@PostMapping("add")
@TenantIdIgnore
public ApiResponseEntity<Void> add(@RequestBody SaasPidManage dto) {
saasPidManageService.add(dto);
return ApiResponseUtils.success();
}
@ApiOperation("新增")
@PostMapping("delete")
@TenantIdIgnore
public ApiResponseEntity<Void> delete(@RequestBody BaseIdDTO dto) {
saasPidManageService.delete(dto.getId());
return ApiResponseUtils.success();
}
}
...@@ -29,23 +29,24 @@ public class RSAUtils { ...@@ -29,23 +29,24 @@ public class RSAUtils {
public static final String RSA_ALGORITHM = "RSA"; public static final String RSA_ALGORITHM = "RSA";
public static final String RSA_ALGORITHM_SIGN = "SHA256WithRSA"; public static final String RSA_ALGORITHM_SIGN = "SHA256WithRSA";
public static final String PRIVATE_KEY = "MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDEjW_RLCPPCeAPWzQWIAwMGNvHf1pat27oH6CZDCG5nLwxyDsUgxdF89IB2_rLURVTkkrB5tq_dcBk5Wi2pmu2yMn8Dpk2XYsm0LJwJe3gg2qqRXQm8DGbf9kvtHUqBLe_24PMHL88YavJdrcS6HNlwwth2YINmViroqMZgqW4bQnmV4t5X4BO1dl3gTB5y8pRXd1zoKsLNgjzbuVBgieA0-e99eMsdjJadZFPzETQW-BO9Q6Kbbx4fIjOkqxiS8KzsiDSvf3KXG9lfvoz67vuNez_QBFauA_MJsUP_bgHLXFV9-XzcjCE2fkDbKbNHPAP20o1IM1S3G43mGzRwAb5AgMBAAECggEAV_nOsNuG86bB6V2zRKv3eHqv9O2l7bDpLXDqm1Z4yfHDsqyi9R1wD1mBCGAEM3kJiKyUVZIVG1mDUiX05rw6vkfFUNLf9RuNq0QCenwfqzxnQ-tuf_dG3Qkul1G4l6Qg8vk4VuYPGuHE2JoQe6Ab9tKEh7mpopievcRAKKz3rEIn4NGGfg4tlTP2hoZ_EhCDMc02UTtjm2YXUux2T2KLZPXMeClbxU1vTMTxFNp9edWyB9syLbfJp34lrnrueKnqpBPUI4oldKj-3QsE4v3Ie8wLTp5leiowzKqZUXqTplWAvROpIvVfj9eeouBPAz_IQR_U77c3m22cisCh-5QT-QKBgQD764Um0miLVQQIrfM9GQiWpiiM75nzmt4QaRkjoNg896b-qjDelG9K_EQ3RjopFuQBKBf7xY304qtD6nY_5IFRlhdB58nrSgPgSxLaShAQ2yUkdDPr00rDBu_9cAT9GZxSRmDhds-87rnz21QMNIofg2cpKNpl1HQQfTcFN9OETwKBgQDHvFvQ0bizfkh4o71pfD0tiiWEeQzV7KMjuwQ3nnUBfgv2Rd1QkOUo3x_dLBTRzacIslQ3DFljXqoBJWJasRFUSAyikR1KUAven7z5D3u-rdye6MLofKkf0YY_qAlNQXEDh9hzhlWqifd4UJTcZujVQNvkuvjldGnMMTK1W49GNwKBgBUbZ52YFYBPEDZ19KJS3aBZrZ4ZWSnK-P4hACU3DccV7Nz7f3q2rxh2SHTlImxc6Z-bL1897yXsc_MNyviRebBPRgWUmRtoqSh6wcqeV_hBlDwYrFz-6A2tICB46UIXijxufyGE5eTrj5L59nHLWSNIzDTroljT0yGqjBiY09ULAoGAN339hGbACh5rxBi55zS9Som3Irb--fBk4uhyo4FCwMdkS2fdtSSMhm53S9uTbTbV0XS6MREdRJ5oXSklykyno-Lgn8nxeVQD-DYpKolCuBdV1FCW1kDMPCraQZVOAEjOPUzgtjf8VQU_3A2HTjTJO3ZpoYLQ4-8T9cc1b22gwMECgYBCq2CPsNMSf55_VCD23b2B_PuppnowWw-k_zl4MkZGLtLJx5qsLRp-hNRvqW2t81fFkOieDdGg_6s7DPinwKfjH8KNgv7ke3kv9euiJ-AmF8HQKlRNCsX_-J7JeB39BHZXU9WPRI4YT8dR6NzZS3D_ug_Coeiq9TIFa2Za6Q6mXg"; public static final String PRIVATE_KEY = "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDOQEOR73MVcKL6pMROood6gpq-NGJgSC_q07Zj4KEa81jL8yt9x32vn97-zoGjaq_5R22rPBM-ou1czekvrgs1-XDunyRwXb6yzD83Z8T8AykqWPY1t0YnAXhck-uNWyeJPIsNBQWT38HOywxHUB21Mly8G1dEF4uRUs2fB--XZ78tw1QPl-1DHwIthHelnFTlSCQcxFXEI-vGFPpStvHZ3eNM1tTei8IkNsTimsl3EGgta355pEv6PpSNnGpv_TVzq3Uto5qD4p2VCv2OL96bUN3iLlSOSOz7axi_HHTBau2JEzPZ05kztlMOkwAgdox3fHbI9oayPYIMnsq_1tVLAgMBAAECggEAODXRdINixPQWpuKi0Z9_9saDb9UM_pqN3Jzod13v6k1p5OOX9caZnXSfrKgRMr1PyktKO0G7KPX0ZLeFlsYDLimWOqJKpwkVgNsjW3E_gUNHQ9BNAaS6TMUczXZO2w59vuwuJVU6COwRgM9bwE-4WPqpxWZaKSeVlPyRJ4ddJ9DUHKfugsNxFVKfAKs6TqaF6epOZQLSS6hsX33ZCT7PiYwOp_lltdCNb9IWNu9FhL5H8RqmmruW_9lIrdOYBvLS5R5dYUBZNvSAi0UgaYxfk6q26hyHZnFln1npZDhLnIL5QF2R6eXYa5sgILedToEWvhmTt0kzmnTGXID1sBLsGQKBgQDyvWgGWboCxe5vkwtFNL0Fsh5h4vjyN-o0icYR1VINhTSwJ6beIPWsN9sHrTS2GLDUdhn2o8nkImmJ8GEfQ_ylqdRuYbOSN9DgmwnDJjT2-Pun0QKAKwa5BV4WQbwPTBNpZE85dVU-K0Wam9tcJ3nQQSDHbijQ57RH0J1MPQ33jwKBgQDZhJRq9DOK_gSjPWC-1VzbhuvkuHOGFUuH94V-oCr9dyqCIimPwXAkkO-CxeVnFkDHtdkYa5Jmpa1jmwjmuBgZOjwfq3LmRDgK-sE8fTXPrum4bWWn078DUaFjPCbo0nunIBh3cMBs_FI5UUhJsBzzuJFoR6CXe2JjTvpeNDtIhQKBgDJjJsjKr1YMCCaY-2nuPJ6GDtB68Po2qSMmxjrFcTblQ76dPII3jUemgIzjY2G5VluD-He-IBZ_HjFH-KEo17T7v-D53vCnLXCyPiCIOc5aeMKpHD_GrqqRdqpgEs2KGS1zaQ6gUIWLLfOeDrbeaubT3h4Hu-lBb6bIox5EPjX5AoGAXE04NdJ-dMKp8SNAhHpBtx4fx6TF0OYEcSQFz9_jnj8NGL-qZ0gscDfYiuOzHvWAc76k6wnqzAgN9bB6LH1-LGZb0QyN60yTg4U4rpRrWz_cCdjSRE9ERQJEu7lwwWdf9WFXQIfl_9lqgswNIsfK4Vk2ystqSB2heIaxE3ySk4kCgYEA5g75I3C0UDCLqpft_VJKlmMGm7LaitXznt2ywsaCOPmPpuuz-mGsWeR2FSXol6lLKxarxrCI2llKi8PaarRyoHLnVBkwGxRtJptuyLvrJncpeQwRmY9gxnx3J73y_EXymJxAx1jigkZH0F1T5UA-xJ8wdbGd5y_UE1MEKbCKvHg";
public static final String PUBLIC_KEY = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxI1v0SwjzwngD1s0FiAMDBjbx39aWrdu6B-gmQwhuZy8Mcg7FIMXRfPSAdv6y1EVU5JKwebav3XAZOVotqZrtsjJ_A6ZNl2LJtCycCXt4INqqkV0JvAxm3_ZL7R1KgS3v9uDzBy_PGGryXa3EuhzZcMLYdmCDZlYq6KjGYKluG0J5leLeV-ATtXZd4EwecvKUV3dc6CrCzYI827lQYIngNPnvfXjLHYyWnWRT8xE0FvgTvUOim28eHyIzpKsYkvCs7Ig0r39ylxvZX76M-u77jXs_0ARWrgPzCbFD_24By1xVffl83IwhNn5A2ymzRzwD9tKNSDNUtxuN5hs0cAG-QIDAQAB"; public static final String PUBLIC_KEY = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzkBDke9zFXCi-qTETqKHeoKavjRiYEgv6tO2Y-ChGvNYy_Mrfcd9r5_e_s6Bo2qv-UdtqzwTPqLtXM3pL64LNflw7p8kcF2-ssw_N2fE_AMpKlj2NbdGJwF4XJPrjVsniTyLDQUFk9_BzssMR1AdtTJcvBtXRBeLkVLNnwfvl2e_LcNUD5ftQx8CLYR3pZxU5UgkHMRVxCPrxhT6Urbx2d3jTNbU3ovCJDbE4prJdxBoLWt-eaRL-j6UjZxqb_01c6t1LaOag-KdlQr9ji_em1Dd4i5Ujkjs-2sYvxx0wWrtiRMz2dOZM7ZTDpMAIHaMd3x2yPaGsj2CDJ7Kv9bVSwIDAQAB";
public static void main(String[] args) throws Exception { public static void main(String[] args) throws Exception {
Map<String, String> keys = createKeys(2048); Map<String, String> keys = createKeys(2048);
System.out.println("privateKey:" + keys.get("privateKey")); System.out.println("privateKey:" + PRIVATE_KEY);
System.out.println("publicKey:" + keys.get("publicKey")); System.out.println("publicKey:" + PUBLIC_KEY);
RSAPublicKey publicKey = getPublicKey(PUBLIC_KEY); RSAPublicKey publicKey = getPublicKey(PUBLIC_KEY);
System.out.println("------------");
String encrypt = publicEncrypt("{\"page\":1,\"limit\":10,\"data\":{}}", publicKey, "UTF-8"); String encrypt = publicEncrypt("{\"page\":1,\"limit\":10,\"data\":{}}", publicKey, "UTF-8");
System.out.println(encrypt); System.out.println(encrypt);
RSAPrivateKey privateKey = getPrivateKey(PRIVATE_KEY); RSAPrivateKey privateKey = getPrivateKey(PRIVATE_KEY);
String decrypt = privateDecrypt(encrypt, privateKey, "UTF-8"); String decrypt = privateDecrypt(encrypt, privateKey, "UTF-8");
System.out.println("------------");
System.out.println(decrypt); System.out.println(decrypt);
......
...@@ -17,14 +17,14 @@ import java.util.Properties; ...@@ -17,14 +17,14 @@ import java.util.Properties;
/** /**
* @author Robert Hafner * @author Robert Hafner
*/ */
@Component /*@Component
@Intercepts({ @Intercepts({
@Signature(type = Executor.class, method = "query", @Signature(type = Executor.class, method = "query",
args = { MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class }), args = { MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class }),
@Signature(type = Executor.class, method = "query", @Signature(type = Executor.class, method = "query",
args = { MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class, CacheKey.class, BoundSql.class }), args = { MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class, CacheKey.class, BoundSql.class }),
@Signature(type= Executor.class, method = "update", args = { MappedStatement.class, Object.class}) @Signature(type= Executor.class, method = "update", args = { MappedStatement.class, Object.class})
}) })*/
public class LogSqlExecutionTimePlugin implements Interceptor { public class LogSqlExecutionTimePlugin implements Interceptor {
private static final Logger LOGGER = LoggerFactory.getLogger(LogSqlExecutionTimePlugin.class); private static final Logger LOGGER = LoggerFactory.getLogger(LogSqlExecutionTimePlugin.class);
......
...@@ -28,6 +28,10 @@ public class DataScopeHandler { ...@@ -28,6 +28,10 @@ public class DataScopeHandler {
if (where == null) { if (where == null) {
where = new HexValue(" 1 = 1 "); where = new HexValue(" 1 = 1 ");
} }
if ("com.makeit.mapper.platform.auth.PlatUserMapper.listAll".equals(whereSegment)) {
ItemsList delFlag = new ExpressionList(Stream.of("0").map(LongValue::new).collect(Collectors.toList()));
return new AndExpression(where, new InExpression(new Column("del_flag"), delFlag));
}
Table fromItem = (Table) plainSelect.getFromItem(); Table fromItem = (Table) plainSelect.getFromItem();
// 有别名用别名,无别名用表名,防止字段冲突报错 // 有别名用别名,无别名用表名,防止字段冲突报错
Alias fromItemAlias = fromItem.getAlias(); Alias fromItemAlias = fromItem.getAlias();
......
...@@ -106,6 +106,7 @@ public enum CodeMessageEnum { ...@@ -106,6 +106,7 @@ public enum CodeMessageEnum {
PLATFORM_ERROR_SPACE_NAME_DUPLICATE(500, "PLATFORM.ERROR.SPACE.NAME.DUPLICATE"), PLATFORM_ERROR_SPACE_NAME_DUPLICATE(500, "PLATFORM.ERROR.SPACE.NAME.DUPLICATE"),
PLATFORM_ERROR_SPACE_NOT_DEL(500, "PLATFORM.ERROR.SPACE.NOT.DEL"), PLATFORM_ERROR_SPACE_NOT_DEL(500, "PLATFORM.ERROR.SPACE.NOT.DEL"),
PLATFORM_ERROR_SPACE_NOT_AUTH_PARENT(500, "PLATFORM.ERROR.SPACE.NOT.AUTH.PARENT"), PLATFORM_ERROR_SPACE_NOT_AUTH_PARENT(500, "PLATFORM.ERROR.SPACE.NOT.AUTH.PARENT"),
PLATFORM_ERROR_SPACE_OVER_LEVEL(500, "PLATFORM.ERROR.SPACE.OVER.LEVEL"),
PLATFORM_ERROR_SPACE_USER_NOT_ADD(500, "PLATFORM.ERROR.SPACE.USER.NOT.ADD"), PLATFORM_ERROR_SPACE_USER_NOT_ADD(500, "PLATFORM.ERROR.SPACE.USER.NOT.ADD"),
PLATFORM_ERROR_SPACE_ROOM_NOT_ADD(500, "PLATFORM.ERROR.SPACE.ROOM.NOT.ADD"), PLATFORM_ERROR_SPACE_ROOM_NOT_ADD(500, "PLATFORM.ERROR.SPACE.ROOM.NOT.ADD"),
PLATFORM_ERROR_ROOM_EXIT_BAD(500, "PLATFORM.ERROR.ROOM.EXIT.BED"), PLATFORM_ERROR_ROOM_EXIT_BAD(500, "PLATFORM.ERROR.ROOM.EXIT.BED"),
......
...@@ -96,6 +96,7 @@ public class RedisConst { ...@@ -96,6 +96,7 @@ public class RedisConst {
public static final String ALARM_DEVICE_HR_ID = "alarm:device:hr:id:"; public static final String ALARM_DEVICE_HR_ID = "alarm:device:hr:id:";
public static final String ALARM_DEVICE_FALL_ID = "alarm:device:fall:id:"; public static final String ALARM_DEVICE_FALL_ID = "alarm:device:fall:id:";
public static final String ALARM_DEVICE_BEHAVIOR_ID = "alarm:device:behavior:id:"; public static final String ALARM_DEVICE_BEHAVIOR_ID = "alarm:device:behavior:id:";
public static final String ALARM_DEVICE_OFF_BED_ID = "alarm:device:off_bed:id:";
public static final String ALARM_CONFIG_ORG_ID = "alarm:config:org:id:"; public static final String ALARM_CONFIG_ORG_ID = "alarm:config:org:id:";
public static final String PLAT_IOT_DEVICE_PREFIX = "plat:iot:device:"; public static final String PLAT_IOT_DEVICE_PREFIX = "plat:iot:device:";
......
...@@ -10,8 +10,8 @@ import org.springframework.stereotype.Component; ...@@ -10,8 +10,8 @@ import org.springframework.stereotype.Component;
import java.util.Arrays; import java.util.Arrays;
@Aspect //@Aspect
@Component //@Component
public class ControllerLogAspect { public class ControllerLogAspect {
private static final Logger logger = LoggerFactory.getLogger(ControllerLogAspect.class); private static final Logger logger = LoggerFactory.getLogger(ControllerLogAspect.class);
......
...@@ -56,9 +56,7 @@ public class JavaProxyUtil { ...@@ -56,9 +56,7 @@ public class JavaProxyUtil {
// logger.info(content, t.getClass() + "." + method.getName(), parseParams(args), (System.currentTimeMillis() - start)); // logger.info(content, t.getClass() + "." + method.getName(), parseParams(args), (System.currentTimeMillis() - start));
// } // }
return CostTimeUtil.executeException(() -> method.invoke(t, args), c -> { return CostTimeUtil.executeException(() -> method.invoke(t, args), c -> {});
logger.info(content, t.getClass() + "." + method.getName(), parseParams(args), c);
});
}; };
......
...@@ -18,7 +18,7 @@ public class RedisConnectionFactoryWrapper implements RedisConnectionFactory { ...@@ -18,7 +18,7 @@ public class RedisConnectionFactoryWrapper implements RedisConnectionFactory {
@Override @Override
public RedisConnection getConnection() { public RedisConnection getConnection() {
return JavaProxyUtil.getProxyLog("RedisTemplate 执行:{},参数:{},耗时:{} ms", rcf.getConnection(),EXCLUDE_METHOD_LIST); return JavaProxyUtil.getProxyLog("", rcf.getConnection(),EXCLUDE_METHOD_LIST);
} }
@Override @Override
......
...@@ -12,8 +12,8 @@ import org.springframework.stereotype.Component; ...@@ -12,8 +12,8 @@ import org.springframework.stereotype.Component;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
@Aspect //@Aspect
@Component //@Component
public class RedissonLogAspect { public class RedissonLogAspect {
private static final Logger logger = LoggerFactory.getLogger(RedissonLogAspect.class); private static final Logger logger = LoggerFactory.getLogger(RedissonLogAspect.class);
......
...@@ -10,8 +10,8 @@ import org.slf4j.LoggerFactory; ...@@ -10,8 +10,8 @@ import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@Aspect //@Aspect
@Component //@Component
public class ServiceLogAspect { public class ServiceLogAspect {
private static final Logger logger = LoggerFactory.getLogger(ServiceLogAspect.class); private static final Logger logger = LoggerFactory.getLogger(ServiceLogAspect.class);
......
...@@ -233,6 +233,7 @@ public class IotProductDeviceService extends IotCommonService { ...@@ -233,6 +233,7 @@ public class IotProductDeviceService extends IotCommonService {
DeviceInfoContentBreathe.Properties tempProperties; DeviceInfoContentBreathe.Properties tempProperties;
for (Map.Entry<String, List<DeviceInfoContentBreathe>> entry : minuteMap.entrySet()) { for (Map.Entry<String, List<DeviceInfoContentBreathe>> entry : minuteMap.entrySet()) {
deviceInfoContentBreathes = entry.getValue(); deviceInfoContentBreathes = entry.getValue();
int reportCount = deviceInfoContentBreathes.size();
DeviceInfoContentBreathe.Properties breatheProperties; DeviceInfoContentBreathe.Properties breatheProperties;
Integer bodymove = 0; Integer bodymove = 0;
int br = 0; int br = 0;
...@@ -246,15 +247,27 @@ public class IotProductDeviceService extends IotCommonService { ...@@ -246,15 +247,27 @@ public class IotProductDeviceService extends IotCommonService {
noPersonCount++; noPersonCount++;
continue; continue;
} }
// 0和255直接跳过
if (breatheProperties.getHr() == 255 || breatheProperties.getHr() == 0 ) {
noPersonCount++;
continue;
}
if (breatheProperties.getBr() == 255 || breatheProperties.getBr() == 0) {
noPersonCount++;
continue;
}
hr += breatheProperties.getHr(); hr += breatheProperties.getHr();
br += breatheProperties.getBr(); br += breatheProperties.getBr();
bodymove += breatheProperties.getBodymove(); bodymove += breatheProperties.getBodymove();
} }
temp = new DeviceInfoContentBreathe(); temp = new DeviceInfoContentBreathe();
tempProperties = new DeviceInfoContentBreathe.Properties(); tempProperties = new DeviceInfoContentBreathe.Properties();
tempProperties.setHr(noPersonCount == 60 ? 0 : hr / (60 - noPersonCount)); if (noPersonCount == reportCount) {
tempProperties.setBr(noPersonCount == 60 ? 0 : br / (60 - noPersonCount)); continue;
tempProperties.setBodymove(noPersonCount == 60 ? 0 : bodymove / (60- noPersonCount)); }
tempProperties.setHr(hr / (reportCount - noPersonCount));
tempProperties.setBr(br / (reportCount - noPersonCount));
tempProperties.setBodymove(bodymove / (reportCount- noPersonCount));
temp.setTimestamp(timestamp); temp.setTimestamp(timestamp);
temp.setProperties(tempProperties); temp.setProperties(tempProperties);
tempList.add(temp); tempList.add(temp);
......
...@@ -14,6 +14,8 @@ public class DeviceInfo { ...@@ -14,6 +14,8 @@ public class DeviceInfo {
private Long timestamp; private Long timestamp;
private String messageId;
private String messageType; private String messageType;
private HeaderInfo headers; private HeaderInfo headers;
......
...@@ -17,7 +17,7 @@ public class ShengwangHttpUtil { ...@@ -17,7 +17,7 @@ public class ShengwangHttpUtil {
@Autowired @Autowired
private ShengwangProperties shengwangProperties; private ShengwangProperties shengwangProperties;
public String active(String licenseKey) { public String active(String licenseKey,String pid) {
String plainCredentials = shengwangProperties.getCustomerKey() + ":" + shengwangProperties.getCustomerSecret(); String plainCredentials = shengwangProperties.getCustomerKey() + ":" + shengwangProperties.getCustomerSecret();
String base64Credentials = new String(Base64.getEncoder().encode(plainCredentials.getBytes())); String base64Credentials = new String(Base64.getEncoder().encode(plainCredentials.getBytes()));
// 创建 authorization header // 创建 authorization header
......
...@@ -10,7 +10,7 @@ public class StandardDeviationUtil { ...@@ -10,7 +10,7 @@ public class StandardDeviationUtil {
* @param x * @param x
* @return 平均值 * @return 平均值
*/ */
public static double average(double[] x) { public static double average(Double[] x) {
int n = x.length; //数列元素个数 int n = x.length; //数列元素个数
double sum = 0; double sum = 0;
for (double i : x) { //求和 for (double i : x) { //求和
...@@ -35,7 +35,7 @@ public class StandardDeviationUtil { ...@@ -35,7 +35,7 @@ public class StandardDeviationUtil {
* @param x 要计算的数列 * @param x 要计算的数列
* @return 方差 * @return 方差
*/ */
public static double variance(double[] x) { public static double variance(Double[] x) {
int n = x.length; //数列元素个数 int n = x.length; //数列元素个数
double avg = average(x); //求平均值 double avg = average(x); //求平均值
double var = 0; double var = 0;
...@@ -62,7 +62,7 @@ public class StandardDeviationUtil { ...@@ -62,7 +62,7 @@ public class StandardDeviationUtil {
* @param x 要计算的数列 * @param x 要计算的数列
* @return 标准差 * @return 标准差
*/ */
public static double standardDeviation(double[] x) { public static double standardDeviation(Double[] x) {
return Math.sqrt(variance(x)); return Math.sqrt(variance(x));
} }
......
...@@ -65,7 +65,7 @@ public class SmsVoiceSender implements IMsgSender{ ...@@ -65,7 +65,7 @@ public class SmsVoiceSender implements IMsgSender{
paramMap.put("pwd", md32); paramMap.put("pwd", md32);
paramMap.put("time", time); paramMap.put("time", time);
paramMap.put("mobile", vo); paramMap.put("mobile", vo);
//告警类型 数据字典 1 长者跌倒 2 呼吸异常 3 心率异常 4 行为异常 //告警类型 数据字典 1 长者跌倒 2 呼吸异常 3 心率异常 4 行为异常 5 离床异常
if (StringUtils.equals(alarmType, "1")) { if (StringUtils.equals(alarmType, "1")) {
paramMap.put("vid", "142"); paramMap.put("vid", "142");
} }
...@@ -78,6 +78,9 @@ public class SmsVoiceSender implements IMsgSender{ ...@@ -78,6 +78,9 @@ public class SmsVoiceSender implements IMsgSender{
if (StringUtils.equals(alarmType, "4")) { if (StringUtils.equals(alarmType, "4")) {
paramMap.put("vid", "145"); paramMap.put("vid", "145");
} }
if (StringUtils.equals(alarmType, "5")) {
paramMap.put("vid", "158");
}
String[] param = msgDTO.getParam(); String[] param = msgDTO.getParam();
List<BiConsumer<HashMap<String, String>, String>> consumerList = Arrays.asList( List<BiConsumer<HashMap<String, String>, String>> consumerList = Arrays.asList(
......
...@@ -106,7 +106,7 @@ public class CodeGenerator { ...@@ -106,7 +106,7 @@ public class CodeGenerator {
// 使用重点 下列字段填写表名 运行方法 // 使用重点 下列字段填写表名 运行方法
// strategy.setInclude("edu_teacher","..."); // 多表-逆向工程 // strategy.setInclude("edu_teacher","..."); // 多表-逆向工程
strategy.setInclude("plat_device_log"); strategy.setInclude("saas_pid_manage");
strategy.setNaming(NamingStrategy.underline_to_camel);//数据库表映射到实体的命名策略 strategy.setNaming(NamingStrategy.underline_to_camel);//数据库表映射到实体的命名策略
strategy.setTablePrefix(pc.getModuleName() + "_"); //生成实体属性时去掉表"_"前缀并且第一个字母大写 如:gmt_create -> gmtCreate strategy.setTablePrefix(pc.getModuleName() + "_"); //生成实体属性时去掉表"_"前缀并且第一个字母大写 如:gmt_create -> gmtCreate
......
...@@ -97,5 +97,15 @@ public class PlatAlarmConfigController { ...@@ -97,5 +97,15 @@ public class PlatAlarmConfigController {
} }
@ApiOperation("初始化数据")
@PostMapping("/data/init")
@TenantIdIgnore
@AuthIgnore
public ApiResponseEntity<PlatAlarmConfig> initConfig() {
platAlarmConfigService.initData();
return ApiResponseUtils.success();
}
} }
package com.makeit.module.controller.children.alarm; package com.makeit.module.controller.children.alarm;
import cn.hutool.core.collection.CollUtil;
import com.google.common.collect.Maps;
import com.makeit.common.dto.BaseIdDTO; import com.makeit.common.dto.BaseIdDTO;
import com.makeit.common.page.PageReqDTO; import com.makeit.common.page.PageReqDTO;
import com.makeit.common.page.PageVO; import com.makeit.common.page.PageVO;
...@@ -8,6 +10,7 @@ import com.makeit.common.response.ApiResponseEntity; ...@@ -8,6 +10,7 @@ import com.makeit.common.response.ApiResponseEntity;
import com.makeit.common.response.ApiResponseUtils; import com.makeit.common.response.ApiResponseUtils;
import com.makeit.dto.platform.alarm.PlatAlarmRecordQueryDTO; import com.makeit.dto.platform.alarm.PlatAlarmRecordQueryDTO;
import com.makeit.enums.report.PlatformTypeEnum; import com.makeit.enums.report.PlatformTypeEnum;
import com.makeit.global.annotation.AuthIgnore;
import com.makeit.global.aspect.tenant.TenantIdIgnore; import com.makeit.global.aspect.tenant.TenantIdIgnore;
import com.makeit.service.platform.alarm.PlatAlarmRecordService; import com.makeit.service.platform.alarm.PlatAlarmRecordService;
import com.makeit.vo.platform.alarm.PlatAlarmRecordVO; import com.makeit.vo.platform.alarm.PlatAlarmRecordVO;
...@@ -19,6 +22,8 @@ import org.springframework.web.bind.annotation.RequestBody; ...@@ -19,6 +22,8 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import java.util.Map;
@Api(tags = "子女端小程序-告警记录") @Api(tags = "子女端小程序-告警记录")
@RestController @RestController
@RequestMapping("/children/alarm-record") @RequestMapping("/children/alarm-record")
...@@ -30,9 +35,14 @@ public class PlatAlarmRecordChildrenController { ...@@ -30,9 +35,14 @@ public class PlatAlarmRecordChildrenController {
@ApiOperation("列表") @ApiOperation("列表")
@PostMapping("page") @PostMapping("page")
@TenantIdIgnore @TenantIdIgnore
public ApiResponseEntity<PageVO<PlatAlarmRecordVO>> page(@RequestBody PageReqDTO<PlatAlarmRecordQueryDTO> dto) { public ApiResponseEntity<Map<String, Object>> page(@RequestBody PageReqDTO<PlatAlarmRecordQueryDTO> dto) {
//只能看到发给关联的长者告警 //只能看到发给关联的长者告警
return ApiResponseUtils.success(platAlarmRecordService.childrenPage(dto)); PageVO<PlatAlarmRecordVO> result = platAlarmRecordService.childrenPage(dto);
Map<String, Object> resMap = Maps.newHashMap();
boolean b = CollUtil.isNotEmpty(result.getList()) && result.getList().get(0).getIsUnWechatRead();
resMap.put("wechatReadFlag", b);
resMap.put("page", result);
return ApiResponseUtils.success(resMap);
} }
@ApiOperation("查看") @ApiOperation("查看")
@PostMapping("view") @PostMapping("view")
...@@ -45,7 +55,7 @@ public class PlatAlarmRecordChildrenController { ...@@ -45,7 +55,7 @@ public class PlatAlarmRecordChildrenController {
@PostMapping("read") @PostMapping("read")
@TenantIdIgnore @TenantIdIgnore
public ApiResponseEntity<Void> read(@RequestBody BaseIdDTO dto) { public ApiResponseEntity<Void> read(@RequestBody BaseIdDTO dto) {
platAlarmRecordService.read(dto.getId(), PlatformTypeEnum.PC); platAlarmRecordService.read(dto.getId(), PlatformTypeEnum.WECHAT);
return ApiResponseUtils.success(); return ApiResponseUtils.success();
} }
......
package com.makeit.module.controller.wechat.alarm; package com.makeit.module.controller.wechat.alarm;
import cn.hutool.core.collection.CollUtil;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import com.makeit.common.dto.BaseIdDTO; import com.makeit.common.dto.BaseIdDTO;
import com.makeit.common.page.PageReqDTO; import com.makeit.common.page.PageReqDTO;
...@@ -8,14 +9,13 @@ import com.makeit.common.page.PageVO; ...@@ -8,14 +9,13 @@ import com.makeit.common.page.PageVO;
import com.makeit.common.response.ApiResponseEntity; import com.makeit.common.response.ApiResponseEntity;
import com.makeit.common.response.ApiResponseUtils; import com.makeit.common.response.ApiResponseUtils;
import com.makeit.dto.platform.alarm.PlatAlarmRecordQueryDTO; import com.makeit.dto.platform.alarm.PlatAlarmRecordQueryDTO;
import com.makeit.enums.CommonEnum;
import com.makeit.enums.report.PlatformTypeEnum; import com.makeit.enums.report.PlatformTypeEnum;
import com.makeit.global.annotation.AuthIgnore;
import com.makeit.service.platform.alarm.PlatAlarmRecordService; import com.makeit.service.platform.alarm.PlatAlarmRecordService;
import com.makeit.utils.user.common.CommonUserUtil; import com.makeit.utils.user.common.CommonUserUtil;
import com.makeit.vo.platform.alarm.PlatAlarmRecordVO; import com.makeit.vo.platform.alarm.PlatAlarmRecordVO;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
...@@ -34,6 +34,7 @@ public class PlatAlarmRecordWechatController { ...@@ -34,6 +34,7 @@ public class PlatAlarmRecordWechatController {
@ApiOperation("列表") @ApiOperation("列表")
@PostMapping("page") @PostMapping("page")
@AuthIgnore
public ApiResponseEntity<Map<String,Object>> page(@RequestBody PageReqDTO<PlatAlarmRecordQueryDTO> dto) { public ApiResponseEntity<Map<String,Object>> page(@RequestBody PageReqDTO<PlatAlarmRecordQueryDTO> dto) {
//小程序告警记录只看到发给自己的告警 //小程序告警记录只看到发给自己的告警
String userId = CommonUserUtil.getUserId(); String userId = CommonUserUtil.getUserId();
...@@ -42,7 +43,8 @@ public class PlatAlarmRecordWechatController { ...@@ -42,7 +43,8 @@ public class PlatAlarmRecordWechatController {
Map<String,Object> resMap = Maps.newHashMap(); Map<String,Object> resMap = Maps.newHashMap();
PageVO<PlatAlarmRecordVO> page = platAlarmRecordService.page(dto); PageVO<PlatAlarmRecordVO> page = platAlarmRecordService.page(dto);
boolean b = page.getList().stream().anyMatch(platAlarmRecord -> StringUtils.equals(CommonEnum.NO.getValue(), platAlarmRecord.getStatus())); // boolean b = page.getList().stream().anyMatch(platAlarmRecord -> StringUtils.equals(CommonEnum.NO.getValue(), platAlarmRecord.getStatus()));
boolean b = CollUtil.isNotEmpty(page.getList()) && page.getList().get(0).getStatusFlag();
resMap.put("todoFlag",b); resMap.put("todoFlag",b);
resMap.put("page",page); resMap.put("page",page);
return ApiResponseUtils.success(resMap); return ApiResponseUtils.success(resMap);
...@@ -62,7 +64,7 @@ public class PlatAlarmRecordWechatController { ...@@ -62,7 +64,7 @@ public class PlatAlarmRecordWechatController {
@ApiOperation("已读") @ApiOperation("已读")
@PostMapping("read") @PostMapping("read")
public ApiResponseEntity<Void> read(@RequestBody BaseIdDTO dto) { public ApiResponseEntity<Void> read(@RequestBody BaseIdDTO dto) {
platAlarmRecordService.read(dto.getId(), PlatformTypeEnum.WECHAT); platAlarmRecordService.read(dto.getId(), PlatformTypeEnum.PC);
return ApiResponseUtils.success(); return ApiResponseUtils.success();
} }
@ApiOperation("通知家属") @ApiOperation("通知家属")
......
...@@ -25,7 +25,7 @@ public class PlatAlarmConfigDTOVO extends BaseTenantDTO { ...@@ -25,7 +25,7 @@ public class PlatAlarmConfigDTOVO extends BaseTenantDTO {
@NotBlank(message = "告警类型不能为空") @NotBlank(message = "告警类型不能为空")
@DictEnum(em = PlatAlarmConfigEnum.AlarmTypeEnum.class, message = "告警类型可选值为{m}") @DictEnum(em = PlatAlarmConfigEnum.AlarmTypeEnum.class, message = "告警类型可选值为{m}")
@ApiModelProperty(value = "告警类型 数据字典 1 长者跌倒 2 呼吸异常 3 心率异常 4 行为异常") @ApiModelProperty(value = "告警类型 数据字典 1 长者跌倒 2 呼吸异常 3 心率异常 4 行为异常,5 离床异常")
private String alarmType; private String alarmType;
@ApiModelProperty(value = "所属组织机构id") @ApiModelProperty(value = "所属组织机构id")
...@@ -55,6 +55,9 @@ public class PlatAlarmConfigDTOVO extends BaseTenantDTO { ...@@ -55,6 +55,9 @@ public class PlatAlarmConfigDTOVO extends BaseTenantDTO {
@ApiModelProperty(value = "行为异常") @ApiModelProperty(value = "行为异常")
private PlatAlarmConfigBehaviorDTOVO behavior; private PlatAlarmConfigBehaviorDTOVO behavior;
@ApiModelProperty(value = "离床异常")
private PlatAlarmConfigOffBedDTOVO offBed;
@ApiModelProperty(value = "内容") @ApiModelProperty(value = "内容")
private String content; private String content;
......
...@@ -22,7 +22,7 @@ public class PlatAlarmConfigHeartDTOVO { ...@@ -22,7 +22,7 @@ public class PlatAlarmConfigHeartDTOVO {
private Integer heartRateStart; private Integer heartRateStart;
@ApiModelProperty("心率正常范围结束") @ApiModelProperty("心率正常范围结束")
private Integer heartRateeEnd; private Integer heartRateEnd;
@ApiModelProperty("异常持续时间") @ApiModelProperty("异常持续时间")
private Integer duration; private Integer duration;
......
package com.makeit.dto.platform.alarm;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalTime;
/**
* <p>
* 离床异常告警配置
* </p>
*
* @author wangzy
* @since 2023-12-05
*/
@Data
@EqualsAndHashCode
@ApiModel(value = "PlatAlarmConfig对象", description = "离床异常告警配置")
public class PlatAlarmConfigOffBedDTOVO {
@ApiModelProperty("离床开始时间")
@DateTimeFormat(pattern = "HH:mm:ss")
@JsonFormat(pattern = "HH:mm:ss",timezone="GMT+8")
private LocalTime offBedStart;
// @ApiModelProperty("离床时间类型 :1-当日,2-次日")
// private String startTimeType;
@ApiModelProperty("离床结束时间")
@DateTimeFormat(pattern = "HH:mm:ss")
@JsonFormat(pattern = "HH:mm:ss",timezone="GMT+8")
private LocalTime offBedEnd;
// @ApiModelProperty("离床时间类型 :1-当日,2-次日")
// private String endTimeType;
@ApiModelProperty("离床持续时间")
private Integer duration;
}
...@@ -72,6 +72,8 @@ public class PlatAlarmRecordQueryDTO extends BaseTenantDTO { ...@@ -72,6 +72,8 @@ public class PlatAlarmRecordQueryDTO extends BaseTenantDTO {
@ApiModelProperty(value = "微信端 0-未读 1-已读") @ApiModelProperty(value = "微信端 0-未读 1-已读")
private String wechatReadFlag; private String wechatReadFlag;
@ApiModelProperty(value = "是否误报 1 误报 0 没有误报")
private String misinformationFlag;
......
...@@ -65,7 +65,7 @@ public class PlatHealthConfigDTO { ...@@ -65,7 +65,7 @@ public class PlatHealthConfigDTO {
if(heartConfig){ if(heartConfig){
PlatAlarmConfigHeartDTOVO dto = new PlatAlarmConfigHeartDTOVO(); PlatAlarmConfigHeartDTOVO dto = new PlatAlarmConfigHeartDTOVO();
dto.setHeartRateStart(heartRateStart); dto.setHeartRateStart(heartRateStart);
dto.setHeartRateeEnd(heartRateEnd); dto.setHeartRateEnd(heartRateEnd);
dto.setDuration(heartDuration); dto.setDuration(heartDuration);
return dto; return dto;
} }
......
...@@ -30,6 +30,7 @@ public class PlatUserImportDTO { ...@@ -30,6 +30,7 @@ public class PlatUserImportDTO {
* 导入手机号会作为账号使用,所以导入需要特殊处理,手机号没有判重后,账号要再判断下有没有判重 * 导入手机号会作为账号使用,所以导入需要特殊处理,手机号没有判重后,账号要再判断下有没有判重
*/ */
@ExcelProperty(value = {headDesc,"账户"}) @ExcelProperty(value = {headDesc,"账户"})
@ExcelIgnore
private String account; private String account;
......
...@@ -42,6 +42,10 @@ public class PlatDeviceBaseAttrDTO { ...@@ -42,6 +42,10 @@ public class PlatDeviceBaseAttrDTO {
private DeviceAttrRange radarAngle; private DeviceAttrRange radarAngle;
@ApiModelProperty(value = "雷达检测延迟时间 单位S ,范围:0-32768") @ApiModelProperty(value = "雷达检测延迟时间 单位S ,范围:0-32768")
private Integer radarDelay; private Integer radarDelay;
@ApiModelProperty(value = "雷达安装场景 0:客厅;1:卧室;2:卫生间")
private Integer radarSence;
@ApiModelProperty(value = "雷达灵敏度 0:灵敏;1:标准;2:鲁棒")
private Integer radarSPL;
@Data @Data
......
...@@ -39,5 +39,12 @@ public class PlatDeviceDTO { ...@@ -39,5 +39,12 @@ public class PlatDeviceDTO {
@ApiModelProperty(value = "设备类型 0-呼吸心率雷达 1-空间人体雷达 2-跌倒检测雷达") @ApiModelProperty(value = "设备类型 0-呼吸心率雷达 1-空间人体雷达 2-跌倒检测雷达")
private String category; private String category;
@ApiModelProperty(value = "许可证")
private String deviceLicense;
@ApiModelProperty(value = "许可证信息")
private String licenseInfo;
@ApiModelProperty(value = "过期时间")
private Long expireTime;
@ApiModelProperty(value = "激活时间")
private Long activationTime;
} }
...@@ -23,7 +23,7 @@ public class PlatAlarmConfig extends BaseBusEntity { ...@@ -23,7 +23,7 @@ public class PlatAlarmConfig extends BaseBusEntity {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "告警类型 数据字典 1 长者跌倒 2 呼吸异常 3 心率异常 4 行为异常") @ApiModelProperty(value = "告警类型 数据字典 1 长者跌倒 2 呼吸异常 3 心率异常 4 行为异常 5离床异常")
private String alarmType; private String alarmType;
@ApiModelProperty(value = "状态 数据字典 1 启用 0 禁用") @ApiModelProperty(value = "状态 数据字典 1 启用 0 禁用")
......
...@@ -21,7 +21,7 @@ public class PlatAlarmRecord extends BaseBusEntity { ...@@ -21,7 +21,7 @@ public class PlatAlarmRecord extends BaseBusEntity {
*/ */
private String alarmId; private String alarmId;
@ApiModelProperty(value = "告警类型 数据字典 1 长者跌倒 2 呼吸异常 3 心率异常 4 行为异常") @ApiModelProperty(value = "告警类型 数据字典 1 长者跌倒 2 呼吸异常 3 心率异常 4 行为异常, 5 离床异常")
private String alarmType; private String alarmType;
/** /**
......
...@@ -63,6 +63,10 @@ public class PlatOrg extends BaseBusEntity { ...@@ -63,6 +63,10 @@ public class PlatOrg extends BaseBusEntity {
@TableField(exist = false) @TableField(exist = false)
private PlatOrg parent; private PlatOrg parent;
@ApiModelProperty(value = "级别")
@TableField(exist = false)
private Integer grade;
private String remark; private String remark;
} }
\ No newline at end of file
...@@ -38,6 +38,9 @@ public class PlatDeviceLog extends BaseBusEntity { ...@@ -38,6 +38,9 @@ public class PlatDeviceLog extends BaseBusEntity {
private String url; private String url;
@ApiModelProperty(value = "文件名称") @ApiModelProperty(value = "文件名称")
private String fileName; private String fileName;
@ApiModelProperty(value = "租户名称")
@TableField(exist = false)
private String tenantName;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
......
package com.makeit.entity.platform.elder; package com.makeit.entity.platform.elder;
import com.baomidou.mybatisplus.annotation.IdType;
import java.time.LocalDate;
import com.baomidou.mybatisplus.annotation.TableId;
import com.makeit.common.entity.BaseBusEntity; import com.makeit.common.entity.BaseBusEntity;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import java.time.LocalDate;
/** /**
* <p> * <p>
* 长者月报 * 长者月报
...@@ -57,5 +56,7 @@ public class PlatElderReportMonth extends BaseBusEntity { ...@@ -57,5 +56,7 @@ public class PlatElderReportMonth extends BaseBusEntity {
@ApiModelProperty(value = "行为异常次数") @ApiModelProperty(value = "行为异常次数")
private Integer behaviorExceptionCount; private Integer behaviorExceptionCount;
@ApiModelProperty(value = "离床异常次数")
private Integer offBedExceptionCount;
} }
package com.makeit.entity.saas;
import com.makeit.common.entity.BaseBusEntity;
import com.makeit.common.entity.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 声网pid管理
* </p>
*
* @author eugene young
* @since 2023-12-13
*/
@Data
@EqualsAndHashCode(callSuper = true)
@ApiModel(value="SaasPidManage对象", description="声网pid管理")
public class SaasPidManage extends BaseEntity {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "pid")
private String pid;
@ApiModelProperty(value = "状态 0已用完 1可用")
private String status;
@ApiModelProperty(value = "可用额度")
private Integer availableCredit;
@ApiModelProperty(value = "已用额度")
private Integer usedCredit;
@ApiModelProperty(value = "总额度")
private Integer totalCredit;
}
...@@ -9,7 +9,8 @@ public class PlatAlarmConfigEnum { ...@@ -9,7 +9,8 @@ public class PlatAlarmConfigEnum {
FALL("alarm.alarmType.fall"), FALL("alarm.alarmType.fall"),
BREATHE("alarm.alarmType.breathe"), BREATHE("alarm.alarmType.breathe"),
HEART("alarm.alarmType.heart"), HEART("alarm.alarmType.heart"),
BEHAVIOR("alarm.alarmType.behavior"); BEHAVIOR("alarm.alarmType.behavior"),
OFF_BED("alarm.alarmType.offBed");
private String code; private String code;
......
...@@ -6,10 +6,11 @@ import com.makeit.utils.sys.SysDictUtil; ...@@ -6,10 +6,11 @@ import com.makeit.utils.sys.SysDictUtil;
public class PlatElderRealtimeReportEnum { public class PlatElderRealtimeReportEnum {
public enum NowStatus implements BaseEnum { public enum NowStatus implements BaseEnum {
OUT("elder.realtime.now.status.out"), OUT("elder.realtime.now.status.out"),
RUN("elder.realtime.now.status.run"), RUN("elder.realtime.now.status.noBed.run"),
REST("elder.realtime.now.status.rest"), REST("elder.realtime.now.status.noBen.rest"),
BED("elder.realtime.now.status.bed"), BED("elder.realtime.now.status.bed.rest"),
SLEEP("elder.realtime.now.status.sleep"); SLEEP("elder.realtime.now.status.bed.sleep"),
SPORT("elder.realtime.now.status.bed.sport");
private String code; private String code;
......
...@@ -10,7 +10,8 @@ public enum PlatAlarmRecordType { ...@@ -10,7 +10,8 @@ public enum PlatAlarmRecordType {
FALL("fall","长者跌倒"), FALL("fall","长者跌倒"),
BEHAVIOR("behavior","行为异常"); BEHAVIOR("behavior","行为异常"),
OFF_BED("off_bed","离床告警");
private final String value; private final String value;
private final String name; private final String name;
......
...@@ -12,8 +12,8 @@ import lombok.Getter; ...@@ -12,8 +12,8 @@ import lombok.Getter;
@AllArgsConstructor @AllArgsConstructor
public enum PlatformTypeEnum { public enum PlatformTypeEnum {
PC("1", "pc端"), PC("1", "pc端、小程序"),
WECHAT("2", "微信小程序"); WECHAT("2", "子女端小程序");
private String code; private String code;
private String value; private String value;
......
...@@ -20,4 +20,11 @@ public interface PlatUserMapper extends BaseMapper<PlatUser> { ...@@ -20,4 +20,11 @@ public interface PlatUserMapper extends BaseMapper<PlatUser> {
Page<PlatUser> noDeptUserList(Page<PlatUser> page, PlatUserQueryDTO dto); Page<PlatUser> noDeptUserList(Page<PlatUser> page, PlatUserQueryDTO dto);
List<PlatMenu> getMenuListByUserId(String userId); List<PlatMenu> getMenuListByUserId(String userId);
/**
* DataScopeHandler#getSqlSegment(PlainSelect, String)
* 改查询过滤掉全局org=xxx设置
* @return
*/
List<PlatUser> listAll();
} }
package com.makeit.mapper.saas;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.makeit.entity.saas.SaasPidManage;
/**
* <p>
* 声网pid管理 Mapper 接口
* </p>
*
* @author eugene young
* @since 2023-12-13
*/
public interface SaasPidManageMapper extends BaseMapper<SaasPidManage> {
}
...@@ -41,4 +41,5 @@ public interface PlatAlarmConfigService extends IService<PlatAlarmConfig> { ...@@ -41,4 +41,5 @@ public interface PlatAlarmConfigService extends IService<PlatAlarmConfig> {
List<PlatHealthConfigDTO> getHealthConfigList(); List<PlatHealthConfigDTO> getHealthConfigList();
void initData();
} }
package com.makeit.service.platform.alarm.alarmStrategy; package com.makeit.service.platform.alarm.alarmStrategy;
import cn.hutool.core.convert.Convert; import cn.hutool.core.convert.Convert;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.makeit.dto.platform.alarm.PlatAlarmCheckDTO; import com.makeit.dto.platform.alarm.PlatAlarmCheckDTO;
import com.makeit.dto.platform.alarm.PlatAlarmConfigBehaviorDTOVO; import com.makeit.dto.platform.alarm.PlatAlarmConfigBehaviorDTOVO;
...@@ -61,6 +62,7 @@ public class FallAlarm implements IAlarm { ...@@ -61,6 +62,7 @@ public class FallAlarm implements IAlarm {
*/ */
@Override @Override
public void checkConfig(PlatAlarmCheckDTO platAlarmCheckDTO) { public void checkConfig(PlatAlarmCheckDTO platAlarmCheckDTO) {
log.info("跌倒预警config开始");
JSONObject properties = platAlarmCheckDTO.getProperties(); JSONObject properties = platAlarmCheckDTO.getProperties();
PlatDevice platDevice = platAlarmCheckDTO.getPlatDevice(); PlatDevice platDevice = platAlarmCheckDTO.getPlatDevice();
String deviceId = platDevice.getId(); String deviceId = platDevice.getId();
...@@ -68,7 +70,7 @@ public class FallAlarm implements IAlarm { ...@@ -68,7 +70,7 @@ public class FallAlarm implements IAlarm {
properties = new JSONObject(); properties = new JSONObject();
} }
String personState = Convert.toStr(properties.get("personState")); String personState = Convert.toStr(properties.get("personState"));
log.info("跌倒预警personState:{}", personState);
//记录停留时长 //记录停留时长
recordDuration(platAlarmCheckDTO); recordDuration(platAlarmCheckDTO);
...@@ -182,8 +184,10 @@ public class FallAlarm implements IAlarm { ...@@ -182,8 +184,10 @@ public class FallAlarm implements IAlarm {
@Override @Override
public void notice(PlatAlarmCheckDTO platAlarmCheckDTO) { public void notice(PlatAlarmCheckDTO platAlarmCheckDTO) {
PlatDevice platDevice = platAlarmCheckDTO.getPlatDevice(); PlatDevice platDevice = platAlarmCheckDTO.getPlatDevice();
log.info("跌倒预警参数platAlarmCheckDTO:{}", platAlarmCheckDTO);
platAlarmRecordService.getElderListByDeviceId(platAlarmCheckDTO); platAlarmRecordService.getElderListByDeviceId(platAlarmCheckDTO);
List<PlatElder> platElderList = platAlarmCheckDTO.getPlatElderList(); List<PlatElder> platElderList = platAlarmCheckDTO.getPlatElderList();
log.info("跌倒预警长者:{}", JSONUtil.toJsonStr(platElderList));
PlatAlarmConfig config = platAlarmCheckDTO.getPlatAlarmConfig(); PlatAlarmConfig config = platAlarmCheckDTO.getPlatAlarmConfig();
if (CommonEnum.NO.getValue().equals(config.getStatus())) { if (CommonEnum.NO.getValue().equals(config.getStatus())) {
log.error("告警配置为禁用,告警配置id:" + config.getId()); log.error("告警配置为禁用,告警配置id:" + config.getId());
......
...@@ -81,7 +81,7 @@ public class HeartAlarm implements IAlarm { ...@@ -81,7 +81,7 @@ public class HeartAlarm implements IAlarm {
PlatDevice platDevice = platAlarmCheckDTO.getPlatDevice(); PlatDevice platDevice = platAlarmCheckDTO.getPlatDevice();
String deviceId = platDevice.getId(); String deviceId = platDevice.getId();
Integer start = ruleConfig.getHeartRateStart(); Integer start = ruleConfig.getHeartRateStart();
Integer end = ruleConfig.getHeartRateeEnd(); Integer end = ruleConfig.getHeartRateEnd();
Integer duration = ruleConfig.getDuration(); Integer duration = ruleConfig.getDuration();
String personState = Convert.toStr(properties.get("personState")); String personState = Convert.toStr(properties.get("personState"));
//心率 //心率
...@@ -107,7 +107,7 @@ public class HeartAlarm implements IAlarm { ...@@ -107,7 +107,7 @@ public class HeartAlarm implements IAlarm {
RedisUtil.delete(RedisConst.ALARM_DEVICE_HR_ID + deviceId); RedisUtil.delete(RedisConst.ALARM_DEVICE_HR_ID + deviceId);
return; return;
} }
log.info("hr:{},end:{},start:{},mes:{}", hr, end, start, messageType);
if ((hr > end || hr < start) && StringUtils.equalsAnyIgnoreCase(messageType, "REPORT_PROPERTY")) { if ((hr > end || hr < start) && StringUtils.equalsAnyIgnoreCase(messageType, "REPORT_PROPERTY")) {
if(alarmRedisDTO==null){ if(alarmRedisDTO==null){
alarmRedisDTO = new AlarmRedisDTO(); alarmRedisDTO = new AlarmRedisDTO();
......
package com.makeit.service.platform.alarm.impl; package com.makeit.service.platform.alarm.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.makeit.common.dto.StatusDTO; import com.makeit.common.dto.StatusDTO;
import com.makeit.dto.platform.alarm.PlatAlarmConfigDTOVO; import com.makeit.dto.platform.alarm.PlatAlarmConfigDTOVO;
...@@ -16,6 +19,7 @@ import com.makeit.exception.BusinessException; ...@@ -16,6 +19,7 @@ import com.makeit.exception.BusinessException;
import com.makeit.global.aspect.tenant.TenantIdUtil; import com.makeit.global.aspect.tenant.TenantIdUtil;
import com.makeit.mapper.platform.alarm.PlatAlarmConfigMapper; import com.makeit.mapper.platform.alarm.PlatAlarmConfigMapper;
import com.makeit.service.platform.alarm.PlatAlarmConfigService; import com.makeit.service.platform.alarm.PlatAlarmConfigService;
import com.makeit.service.platform.auth.PlatOrgService;
import com.makeit.service.platform.auth.PlatUserService; import com.makeit.service.platform.auth.PlatUserService;
import com.makeit.utils.AlarmConfigCacheUtil; import com.makeit.utils.AlarmConfigCacheUtil;
import com.makeit.utils.data.convert.BeanDtoVoUtils; import com.makeit.utils.data.convert.BeanDtoVoUtils;
...@@ -23,13 +27,17 @@ import com.makeit.utils.data.convert.StreamUtil; ...@@ -23,13 +27,17 @@ import com.makeit.utils.data.convert.StreamUtil;
import com.makeit.utils.old.StringUtils; import com.makeit.utils.old.StringUtils;
import com.makeit.utils.sql.join.JoinUtil; import com.makeit.utils.sql.join.JoinUtil;
import com.makeit.vo.platform.alarm.PlatAlarmConfigListVO; import com.makeit.vo.platform.alarm.PlatAlarmConfigListVO;
import org.apache.commons.compress.utils.Lists;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.function.BiConsumer; import java.util.function.BiConsumer;
import java.util.stream.Collectors;
/** /**
* <p> * <p>
...@@ -47,6 +55,8 @@ public class PlatAlarmConfigServiceImpl extends ServiceImpl<PlatAlarmConfigMappe ...@@ -47,6 +55,8 @@ public class PlatAlarmConfigServiceImpl extends ServiceImpl<PlatAlarmConfigMappe
@Autowired @Autowired
private AlarmConfigCacheUtil alarmConfigUtil; private AlarmConfigCacheUtil alarmConfigUtil;
@Resource
private PlatOrgService platOrgService;
@Override @Override
public List<PlatAlarmConfigListVO> list(PlatAlarmConfigQueryDTO dto) { public List<PlatAlarmConfigListVO> list(PlatAlarmConfigQueryDTO dto) {
...@@ -221,4 +231,29 @@ public class PlatAlarmConfigServiceImpl extends ServiceImpl<PlatAlarmConfigMappe ...@@ -221,4 +231,29 @@ public class PlatAlarmConfigServiceImpl extends ServiceImpl<PlatAlarmConfigMappe
public List<PlatHealthConfigDTO> getHealthConfigList() { public List<PlatHealthConfigDTO> getHealthConfigList() {
return baseMapper.getHealthConfigList(); return baseMapper.getHealthConfigList();
} }
@Override
public void initData() {
List<PlatOrg> orgList = platOrgService.list();
PlatAlarmConfig config = getOne(Wrappers.<PlatAlarmConfig>lambdaQuery().eq(PlatAlarmConfig::getTenantId, 0)
.eq(PlatAlarmConfig::getAlarmType, "5"));
List<String> orgIds = orgList.stream().map(PlatOrg::getId).collect(Collectors.toList());
List<PlatAlarmConfig> existList = list(Wrappers.<PlatAlarmConfig>lambdaQuery().in(PlatAlarmConfig::getOrgId, orgIds)
.eq(PlatAlarmConfig::getAlarmType, "5"));
Map<String, PlatAlarmConfig> configMap = StreamUtil.toMap(existList, PlatAlarmConfig::getOrgId);
List<PlatAlarmConfig> saveList = Lists.newArrayList();
for (PlatOrg o : orgList) {
if (configMap.containsKey(o.getId())) {
continue;
}
PlatAlarmConfig alarmConfig = new PlatAlarmConfig();
BeanUtil.copyProperties(config, alarmConfig, "id");
alarmConfig.setTenantId(o.getTenantId());
alarmConfig.setOrgId(o.getId());
saveList.add(alarmConfig);
}
if (CollUtil.isNotEmpty(saveList)) {
saveBatch(saveList);
}
}
} }
package com.makeit.service.platform.alarm.impl; package com.makeit.service.platform.alarm.impl;
import cn.hutool.core.collection.CollUtil;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
...@@ -118,6 +119,11 @@ public class PlatAlarmRecordServiceImpl extends ServiceImpl<PlatAlarmRecordMappe ...@@ -118,6 +119,11 @@ public class PlatAlarmRecordServiceImpl extends ServiceImpl<PlatAlarmRecordMappe
PlatAlarmRecordQueryDTO param = dto.getData(); PlatAlarmRecordQueryDTO param = dto.getData();
Page<PlatAlarmRecord> mpPage = PageUtil.toMpPage(dto); Page<PlatAlarmRecord> mpPage = PageUtil.toMpPage(dto);
LambdaQueryWrapper<PlatAlarmRecord> lambdaQueryWrapper = getLambdaQueryWrapper(param); LambdaQueryWrapper<PlatAlarmRecord> lambdaQueryWrapper = getLambdaQueryWrapper(param);
List<PlatAlarmRecord> list = list(lambdaQueryWrapper);
Boolean isUnWechatRead = CollUtil.isNotEmpty(list) && list.stream()
.anyMatch(a -> CommonEnum.NO.getValue().equals(a.getWechatReadFlag()));
Boolean statusFlag = CollUtil.isNotEmpty(list) && list.stream()
.anyMatch(a -> CommonEnum.NO.getValue().equals(a.getStatus()));
Page<PlatAlarmRecord> page = page(mpPage, lambdaQueryWrapper); Page<PlatAlarmRecord> page = page(mpPage, lambdaQueryWrapper);
List<PlatAlarmRecord> records = page.getRecords(); List<PlatAlarmRecord> records = page.getRecords();
List<PlatAlarmRecordVO> dtos = BeanDtoVoUtils.listVo(records, PlatAlarmRecordVO.class); List<PlatAlarmRecordVO> dtos = BeanDtoVoUtils.listVo(records, PlatAlarmRecordVO.class);
...@@ -131,6 +137,8 @@ public class PlatAlarmRecordServiceImpl extends ServiceImpl<PlatAlarmRecordMappe ...@@ -131,6 +137,8 @@ public class PlatAlarmRecordServiceImpl extends ServiceImpl<PlatAlarmRecordMappe
if (platDevice != null) { if (platDevice != null) {
platAlarmRecordVO.setDevice(platDevice); platAlarmRecordVO.setDevice(platDevice);
} }
platAlarmRecordVO.setIsUnWechatRead(isUnWechatRead);
platAlarmRecordVO.setStatusFlag(statusFlag);
} }
return PageUtil.toPageVO(dtos, page); return PageUtil.toPageVO(dtos, page);
} }
...@@ -202,6 +210,7 @@ public class PlatAlarmRecordServiceImpl extends ServiceImpl<PlatAlarmRecordMappe ...@@ -202,6 +210,7 @@ public class PlatAlarmRecordServiceImpl extends ServiceImpl<PlatAlarmRecordMappe
.in(CollectionUtils.isNotEmpty(param.getElderIdList()),PlatAlarmRecord::getElderIds,param.getElderIdList()) .in(CollectionUtils.isNotEmpty(param.getElderIdList()),PlatAlarmRecord::getElderIds,param.getElderIdList())
.eq(StringUtils.isNotBlank(param.getNoticeStatus()),PlatAlarmRecord::getNoticeStatus,param.getNoticeStatus()) .eq(StringUtils.isNotBlank(param.getNoticeStatus()),PlatAlarmRecord::getNoticeStatus,param.getNoticeStatus())
.eq(StringUtils.isNotBlank(param.getReadFlag()),PlatAlarmRecord::getReadFlag,param.getReadFlag()) .eq(StringUtils.isNotBlank(param.getReadFlag()),PlatAlarmRecord::getReadFlag,param.getReadFlag())
.eq(StringUtils.isNotBlank(param.getMisinformationFlag()),PlatAlarmRecord::getMisinformationFlag,param.getMisinformationFlag())
.eq(StringUtils.isNotBlank(param.getWechatReadFlag()), PlatAlarmRecord::getWechatReadFlag, param.getWechatReadFlag()) .eq(StringUtils.isNotBlank(param.getWechatReadFlag()), PlatAlarmRecord::getWechatReadFlag, param.getWechatReadFlag())
.orderByDesc(BaseEntity::getCreateDate) .orderByDesc(BaseEntity::getCreateDate)
; ;
...@@ -399,7 +408,7 @@ public class PlatAlarmRecordServiceImpl extends ServiceImpl<PlatAlarmRecordMappe ...@@ -399,7 +408,7 @@ public class PlatAlarmRecordServiceImpl extends ServiceImpl<PlatAlarmRecordMappe
msgSendDTO.setSubject(alarmRecord.getContent()); msgSendDTO.setSubject(alarmRecord.getContent());
msgSendDTO.setParam(alarmRecord.getElderName()); msgSendDTO.setParam(alarmRecord.getElderName());
String alarmType = alarmConfig.getAlarmType(); String alarmType = alarmConfig.getAlarmType();
//告警类型 数据字典 1 长者跌倒 2 呼吸异常 3 心率异常 4 行为异常 //告警类型 数据字典 1 长者跌倒 2 呼吸异常 3 心率异常 4 行为异常 5 离床异常
if (StringUtils.equals(alarmType, "1")) { if (StringUtils.equals(alarmType, "1")) {
msgSendDTO.setParam(alarmRecord.getElderName(),alarmRecord.getRegionName()); msgSendDTO.setParam(alarmRecord.getElderName(),alarmRecord.getRegionName());
} }
...@@ -412,6 +421,9 @@ public class PlatAlarmRecordServiceImpl extends ServiceImpl<PlatAlarmRecordMappe ...@@ -412,6 +421,9 @@ public class PlatAlarmRecordServiceImpl extends ServiceImpl<PlatAlarmRecordMappe
if (StringUtils.equals(alarmType, "4")) { if (StringUtils.equals(alarmType, "4")) {
msgSendDTO.setParam(alarmRecord.getElderName(),alarmRecord.getRegionName()); msgSendDTO.setParam(alarmRecord.getElderName(),alarmRecord.getRegionName());
} }
if (StringUtils.equals(alarmType, "5")) {
msgSendDTO.setParam(alarmRecord.getElderName(), "");
}
msgSendDTO.setAlarmType(alarmConfig.getAlarmType()); msgSendDTO.setAlarmType(alarmConfig.getAlarmType());
//todo 小程序消息 //todo 小程序消息
msgUtil.send(msgSendDTO); msgUtil.send(msgSendDTO);
...@@ -522,7 +534,7 @@ public class PlatAlarmRecordServiceImpl extends ServiceImpl<PlatAlarmRecordMappe ...@@ -522,7 +534,7 @@ public class PlatAlarmRecordServiceImpl extends ServiceImpl<PlatAlarmRecordMappe
} }
private String replaceParam(String oriContent,List<String> param) { public static String replaceParam(String oriContent,List<String> param) {
Pattern p = Pattern.compile("\\[#\\d+\\]|\\[#[\\p{IsHan}]+\\]|\\[#[^\\]]*\\]"); Pattern p = Pattern.compile("\\[#\\d+\\]|\\[#[\\p{IsHan}]+\\]|\\[#[^\\]]*\\]");
Matcher m = p.matcher(oriContent); Matcher m = p.matcher(oriContent);
StringBuffer sb = new StringBuffer(); StringBuffer sb = new StringBuffer();
...@@ -597,7 +609,7 @@ public class PlatAlarmRecordServiceImpl extends ServiceImpl<PlatAlarmRecordMappe ...@@ -597,7 +609,7 @@ public class PlatAlarmRecordServiceImpl extends ServiceImpl<PlatAlarmRecordMappe
platAlarmRecord.setStatus(CommonEnum.YES.getValue()); platAlarmRecord.setStatus(CommonEnum.YES.getValue());
platAlarmRecord.setDealDate(LocalDateTime.now()); platAlarmRecord.setDealDate(LocalDateTime.now());
CommonUserVO user = CommonUserUtil.getUser(); CommonUserVO user = CommonUserUtil.getUser();
//platAlarmRecord.setDealUser(user.getName()); platAlarmRecord.setDealUser(user.getName());
updateById(platAlarmRecord); updateById(platAlarmRecord);
String deviceId = platAlarmRecord.getDeviceId(); String deviceId = platAlarmRecord.getDeviceId();
...@@ -607,7 +619,11 @@ public class PlatAlarmRecordServiceImpl extends ServiceImpl<PlatAlarmRecordMappe ...@@ -607,7 +619,11 @@ public class PlatAlarmRecordServiceImpl extends ServiceImpl<PlatAlarmRecordMappe
} }
Timestamp timestamp = Timestamp.valueOf(platAlarmRecord.getCreateDate()); Timestamp timestamp = Timestamp.valueOf(platAlarmRecord.getCreateDate());
log.info("开始想设备发送误报通知"); log.info("开始想设备发送误报通知");
iotDevicePropertiesOperateService.deviceFunctionAttr(platDevice.getOriDeviceId(),timestamp.getTime()); String result = iotDevicePropertiesOperateService.deviceFunctionAttr(platDevice.getOriDeviceId(), timestamp.getTime());
if (StringUtils.isNotEmpty(result)) {
throw new RuntimeException("发送误报通知失败:" + result);
}
} }
@Override @Override
......
...@@ -89,6 +89,8 @@ public interface PlatOrgService extends IService<PlatOrg> { ...@@ -89,6 +89,8 @@ public interface PlatOrgService extends IService<PlatOrg> {
List<PlatOrg> subOrgList(PlatOrgQueryDTO platOrgQueryDTO); List<PlatOrg> subOrgList(PlatOrgQueryDTO platOrgQueryDTO);
List<PlatOrg> currentOrg(PlatOrgQueryDTO platOrgQueryDTO);
/** /**
* 组织表增加一条数据 * 组织表增加一条数据
* 增加告警配置 * 增加告警配置
...@@ -116,4 +118,6 @@ public interface PlatOrgService extends IService<PlatOrg> { ...@@ -116,4 +118,6 @@ public interface PlatOrgService extends IService<PlatOrg> {
* @return * @return
*/ */
List<PlatOrg> belongToScopeListIgnoreTenant(PlatOrg param); List<PlatOrg> belongToScopeListIgnoreTenant(PlatOrg param);
List<String> getCurrentAndSubIds(String id);
} }
...@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; ...@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.google.common.collect.Lists;
import com.makeit.common.entity.BaseEntity; import com.makeit.common.entity.BaseEntity;
import com.makeit.common.page.PageReqDTO; import com.makeit.common.page.PageReqDTO;
import com.makeit.common.page.PageVO; import com.makeit.common.page.PageVO;
...@@ -571,6 +572,7 @@ public class PlatOrgServiceImpl extends ServiceImpl<PlatOrgMapper, PlatOrg> ...@@ -571,6 +572,7 @@ public class PlatOrgServiceImpl extends ServiceImpl<PlatOrgMapper, PlatOrg>
.like(StringUtils.isNotBlank(dto.getName()),PlatOrg::getName,dto.getName()) .like(StringUtils.isNotBlank(dto.getName()),PlatOrg::getName,dto.getName())
.eq(StringUtils.isNotBlank(dto.getType()),PlatOrg::getType,dto.getType()) .eq(StringUtils.isNotBlank(dto.getType()),PlatOrg::getType,dto.getType())
.eq(StringUtils.isNotBlank(dto.getStatus()),PlatOrg::getStatus,dto.getStatus()) .eq(StringUtils.isNotBlank(dto.getStatus()),PlatOrg::getStatus,dto.getStatus())
.in(CollectionUtils.isNotEmpty(dto.getOrgIds()), PlatOrg::getId, dto.getOrgIds())
.orderByDesc(BaseEntity::getUpdateDate); .orderByDesc(BaseEntity::getUpdateDate);
return queryWrapper; return queryWrapper;
} }
...@@ -594,6 +596,24 @@ public class PlatOrgServiceImpl extends ServiceImpl<PlatOrgMapper, PlatOrg> ...@@ -594,6 +596,24 @@ public class PlatOrgServiceImpl extends ServiceImpl<PlatOrgMapper, PlatOrg>
return orgTree; return orgTree;
} }
@Override
public List<PlatOrg> currentOrg(PlatOrgQueryDTO platOrgQueryDTO) {
PlatUserVO userVOCanNull = PlatUserUtil.getUserVOCanNull();
String orgId = userVOCanNull.getOrgId();
List<String> orgIds = this.getCurrentAndSubIds(orgId);
platOrgQueryDTO.setOrgIds(orgIds);
LambdaQueryWrapper<PlatOrg> queryWrapper = getLambdaQueryWrapper(platOrgQueryDTO);
List<PlatOrg> list = list(queryWrapper);
if(CollectionUtils.isEmpty(list)){
return new ArrayList<>();
}
list = list.stream().map(org -> {
org.setGrade(org.getPath().split(",").length);
return org;
}).collect(Collectors.toList());
return createOrgTree(list);
}
/** /**
* 返回parentId的 树 * 返回parentId的 树
* @param platOrgQueryDTO * @param platOrgQueryDTO
...@@ -721,4 +741,14 @@ public class PlatOrgServiceImpl extends ServiceImpl<PlatOrgMapper, PlatOrg> ...@@ -721,4 +741,14 @@ public class PlatOrgServiceImpl extends ServiceImpl<PlatOrgMapper, PlatOrg>
} }
return orgList; return orgList;
} }
@Override
public List<String> getCurrentAndSubIds(String id) {
List<String> ids = Lists.newArrayList(id);
LambdaQueryWrapper<PlatOrg> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.like(PlatOrg::getPath, id);
List<String> subIds = this.list(queryWrapper).stream().map(PlatOrg::getId).collect(Collectors.toList());
ids.addAll(subIds);
return ids;
}
} }
...@@ -84,6 +84,7 @@ import org.springframework.stereotype.Service; ...@@ -84,6 +84,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.HashSet; import java.util.HashSet;
...@@ -127,6 +128,8 @@ public class PlatUserServiceImpl extends ServiceImpl<PlatUserMapper, PlatUser> ...@@ -127,6 +128,8 @@ public class PlatUserServiceImpl extends ServiceImpl<PlatUserMapper, PlatUser>
@Autowired @Autowired
private PlatOrgService platOrgService; private PlatOrgService platOrgService;
@Resource
private PlatUserMapper platUserMapper;
private DefaultIdentifierGenerator defaultIdentifierGenerator = new DefaultIdentifierGenerator(); private DefaultIdentifierGenerator defaultIdentifierGenerator = new DefaultIdentifierGenerator();
...@@ -611,7 +614,7 @@ public class PlatUserServiceImpl extends ServiceImpl<PlatUserMapper, PlatUser> ...@@ -611,7 +614,7 @@ public class PlatUserServiceImpl extends ServiceImpl<PlatUserMapper, PlatUser>
TokenUtil.platLogin(TokenUtil.tntGetToken(), userLoginVO); TokenUtil.platLogin(TokenUtil.tntGetToken(), userLoginVO);
supperRoleMenuList(userLoginVO); supperRoleMenuList(userLoginVO);
filterOrgManageMenu(userLoginVO); // filterOrgManageMenu(userLoginVO); // 去除该逻辑
setRoleMenuToRedis(userLoginVO); setRoleMenuToRedis(userLoginVO);
return userLoginVO; return userLoginVO;
} }
...@@ -620,7 +623,7 @@ public class PlatUserServiceImpl extends ServiceImpl<PlatUserMapper, PlatUser> ...@@ -620,7 +623,7 @@ public class PlatUserServiceImpl extends ServiceImpl<PlatUserMapper, PlatUser>
List<PlatMenu> menuList = getMenuListByUserId(userLoginVO); List<PlatMenu> menuList = getMenuListByUserId(userLoginVO);
fillMenuList(menuList, userLoginVO); fillMenuList(menuList, userLoginVO);
filterOrgManageMenu(userLoginVO); // filterOrgManageMenu(userLoginVO);
setRoleMenuToRedis(userLoginVO); setRoleMenuToRedis(userLoginVO);
return userLoginVO; return userLoginVO;
...@@ -1179,9 +1182,10 @@ public class PlatUserServiceImpl extends ServiceImpl<PlatUserMapper, PlatUser> ...@@ -1179,9 +1182,10 @@ public class PlatUserServiceImpl extends ServiceImpl<PlatUserMapper, PlatUser>
LambdaQueryWrapper<PlatUser> userLambdaQueryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<PlatUser> userLambdaQueryWrapper = new LambdaQueryWrapper<>();
userLambdaQueryWrapper.select(PlatUser::getMobile, PlatUser::getEmail,PlatUser::getAccount, BaseEntity::getId); userLambdaQueryWrapper.select(PlatUser::getMobile, PlatUser::getEmail,PlatUser::getAccount, BaseEntity::getId);
List<PlatUser> userList = this.list(userLambdaQueryWrapper); List<PlatUser> userList = this.list(userLambdaQueryWrapper);
List<PlatUser> allUserList = platUserMapper.listAll();
Map<String, String> mobileMap = userList.stream().collect(Collectors.toMap(PlatUser::getMobile, BaseEntity::getId, (a, b) -> a)); Map<String, String> mobileMap = userList.stream().collect(Collectors.toMap(PlatUser::getMobile, BaseEntity::getId, (a, b) -> a));
Map<String, String> emailMap = userList.stream().filter(vo->StringUtils.isNotBlank(vo.getEmail())).collect(Collectors.toMap(PlatUser::getEmail, BaseEntity::getId, (a, b) -> a)); Map<String, String> emailMap = userList.stream().filter(vo->StringUtils.isNotBlank(vo.getEmail())).collect(Collectors.toMap(PlatUser::getEmail, BaseEntity::getId, (a, b) -> a));
Map<String, String> accountMap = userList.stream().collect(Collectors.toMap(PlatUser::getAccount, BaseEntity::getId, (a, b) -> a)); Map<String, String> accountMap = allUserList.stream().collect(Collectors.toMap(PlatUser::getAccount, BaseEntity::getId, (a, b) -> a));
return ExcelValidatorUtil.validateMain(3, platUserImportDTOS, list -> { return ExcelValidatorUtil.validateMain(3, platUserImportDTOS, list -> {
......
package com.makeit.service.platform.device; package com.makeit.service.platform.device;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.makeit.common.dto.BaseIdDTO; import com.makeit.common.dto.BaseIdDTO;
...@@ -92,4 +93,6 @@ public interface PlatDeviceService extends IService<PlatDevice> { ...@@ -92,4 +93,6 @@ public interface PlatDeviceService extends IService<PlatDevice> {
PlatAlarmCallDeviceVO callingDevice(PlatCallingDeviceDTO dto); PlatAlarmCallDeviceVO callingDevice(PlatCallingDeviceDTO dto);
void devicePushLog(MultipartFile multipartFile, String deviceId) throws IOException; void devicePushLog(MultipartFile multipartFile, String deviceId) throws IOException;
void syncIotProperties(String deviceId, JSONObject iotProperties);
} }
...@@ -4,19 +4,28 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; ...@@ -4,19 +4,28 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.makeit.common.entity.BaseBusEntity;
import com.makeit.common.entity.BaseEntity;
import com.makeit.common.page.PageReqDTO; import com.makeit.common.page.PageReqDTO;
import com.makeit.common.page.PageVO; import com.makeit.common.page.PageVO;
import com.makeit.dto.platform.device.PlatDeviceQueryDTO; import com.makeit.dto.platform.device.PlatDeviceQueryDTO;
import com.makeit.entity.platform.alarm.PlatAlarmRecord; import com.makeit.entity.platform.alarm.PlatAlarmRecord;
import com.makeit.entity.platform.device.PlatDevice; import com.makeit.entity.platform.device.PlatDevice;
import com.makeit.entity.platform.device.PlatDeviceLog; import com.makeit.entity.platform.device.PlatDeviceLog;
import com.makeit.entity.saas.PlatTenant;
import com.makeit.mapper.platform.device.PlatDeviceLogMapper; import com.makeit.mapper.platform.device.PlatDeviceLogMapper;
import com.makeit.service.platform.device.PlatDeviceLogService; import com.makeit.service.platform.device.PlatDeviceLogService;
import com.makeit.service.saas.PlatTenantService;
import com.makeit.utils.data.convert.PageUtil; import com.makeit.utils.data.convert.PageUtil;
import com.makeit.utils.data.convert.StreamUtil;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/** /**
* <p> * <p>
* 设备日志 服务实现类 * 设备日志 服务实现类
...@@ -30,6 +39,8 @@ public class PlatDeviceLogServiceImpl extends ServiceImpl<PlatDeviceLogMapper, P ...@@ -30,6 +39,8 @@ public class PlatDeviceLogServiceImpl extends ServiceImpl<PlatDeviceLogMapper, P
@Autowired @Autowired
private PlatDeviceLogMapper platDeviceLogMapper; private PlatDeviceLogMapper platDeviceLogMapper;
@Autowired
private PlatTenantService platTenantService;
@Override @Override
public PageVO<PlatDeviceLog> pageList(PageReqDTO<PlatDeviceLog> pageReqDTO) { public PageVO<PlatDeviceLog> pageList(PageReqDTO<PlatDeviceLog> pageReqDTO) {
...@@ -38,12 +49,19 @@ public class PlatDeviceLogServiceImpl extends ServiceImpl<PlatDeviceLogMapper, P ...@@ -38,12 +49,19 @@ public class PlatDeviceLogServiceImpl extends ServiceImpl<PlatDeviceLogMapper, P
LambdaQueryWrapper<PlatDeviceLog> lambdaQueryWrapper = new QueryWrapper<PlatDeviceLog>().lambda() LambdaQueryWrapper<PlatDeviceLog> lambdaQueryWrapper = new QueryWrapper<PlatDeviceLog>().lambda()
.eq(StringUtils.isNotEmpty(dto.getDeviceId()), PlatDeviceLog::getDeviceId, dto.getDeviceId()) .eq(StringUtils.isNotEmpty(dto.getDeviceId()), PlatDeviceLog::getDeviceId, dto.getDeviceId())
.eq(StringUtils.isNotEmpty(dto.getProductName()), PlatDeviceLog::getProductName, dto.getProductName()) .like(StringUtils.isNotEmpty(dto.getProductName()), PlatDeviceLog::getProductName, dto.getProductName())
.eq(StringUtils.isNotEmpty(dto.getTenantId()), PlatDeviceLog::getTenantId, dto.getTenantId()) .eq(StringUtils.isNotEmpty(dto.getTenantId()), PlatDeviceLog::getTenantId, dto.getTenantId())
.ge(dto.getStartTime() != null, PlatDeviceLog::getCreateDate, dto.getStartTime()) .ge(dto.getStartTime() != null, PlatDeviceLog::getCreateDate, dto.getStartTime())
.ge(dto.getEndTime() != null, PlatDeviceLog::getCreateDate, dto.getEndTime()); .le(dto.getEndTime() != null, PlatDeviceLog::getCreateDate, dto.getEndTime());
Page<PlatDeviceLog> deviceLogPage = platDeviceLogMapper.selectPage(p, lambdaQueryWrapper); Page<PlatDeviceLog> deviceLogPage = platDeviceLogMapper.selectPage(p, lambdaQueryWrapper);
List<PlatDeviceLog> records = deviceLogPage.getRecords();
List<String> tenantIdList = StreamUtil.map(records, BaseBusEntity::getTenantId);
List<PlatTenant> platTenantList = platTenantService.listByIds(tenantIdList);
Map<String, String> tenantMap = platTenantList.stream().collect(Collectors.toMap(BaseEntity::getId, PlatTenant::getName, ((v1, v2) -> v2)));
for (PlatDeviceLog record : records) {
record.setTenantName(tenantMap.getOrDefault(record.getTenantId(),""));
}
return PageUtil.toPageVO(deviceLogPage.getRecords(), deviceLogPage); return PageUtil.toPageVO(records, deviceLogPage);
} }
} }
...@@ -71,7 +71,7 @@ public interface PlatElderService extends IService<PlatElder> { ...@@ -71,7 +71,7 @@ public interface PlatElderService extends IService<PlatElder> {
List<PlatElderListVO> listByElder(PlatElderQueryDTO dto); List<PlatElderListVO> listByElder(PlatElderQueryDTO dto);
PlatElder getByDeviceId(String deviceId); PlatElder getByDeviceId(String deviceId, String tenantId);
/*小程序*/ /*小程序*/
} }
...@@ -102,7 +102,7 @@ public class PlatElderBreatheAnalysisServiceImpl extends ServiceImpl<PlatElderBr ...@@ -102,7 +102,7 @@ public class PlatElderBreatheAnalysisServiceImpl extends ServiceImpl<PlatElderBr
.in(PlatElderBreatheDayStat::getElderId, elderIdList) .in(PlatElderBreatheDayStat::getElderId, elderIdList)
.eq(PlatElderBreatheDayStat::getDay, yesDate)); .eq(PlatElderBreatheDayStat::getDay, yesDate));
Map<String, PlatElderBreatheDayStat> breatheDayStatMap = StreamUtil.toMap(elderBreatheDayStatList, PlatElderBreatheDayStat::getElderId); Map<String, PlatElderBreatheDayStat> breatheDayStatMap = StreamUtil.toMapDep(elderBreatheDayStatList, PlatElderBreatheDayStat::getElderId);
SaasSleepAnalysisModel analysisModel = saasSleepAnalysisModelService.getOne(new QueryWrapper<SaasSleepAnalysisModel>().lambda() SaasSleepAnalysisModel analysisModel = saasSleepAnalysisModelService.getOne(new QueryWrapper<SaasSleepAnalysisModel>().lambda()
.orderByDesc(BaseEntity::getCreateBy) .orderByDesc(BaseEntity::getCreateBy)
......
...@@ -4,13 +4,13 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; ...@@ -4,13 +4,13 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.makeit.entity.platform.alarm.PlatAlarmRecord; import com.makeit.entity.platform.alarm.PlatAlarmRecord;
import com.makeit.entity.platform.device.PlatDevice; import com.makeit.entity.platform.device.PlatDevice;
import com.makeit.entity.platform.elder.*; import com.makeit.entity.platform.elder.PlatElder;
import com.makeit.entity.platform.elder.PlatElderBreatheDayStat;
import com.makeit.entity.platform.elder.PlatElderReportMonth;
import com.makeit.entity.platform.elder.PlatElderSleepAnalysis;
import com.makeit.enums.platform.alarm.PlatAlarmConfigEnum; import com.makeit.enums.platform.alarm.PlatAlarmConfigEnum;
import com.makeit.enums.report.BreatheTypeEnum;
import com.makeit.enums.report.HeartRateTypeEnum;
import com.makeit.mapper.platform.elder.PlatElderBreatheDayStatMapper; import com.makeit.mapper.platform.elder.PlatElderBreatheDayStatMapper;
import com.makeit.module.iot.service.IotProductDeviceService; import com.makeit.module.iot.service.IotProductDeviceService;
import com.makeit.module.iot.vo.analysis.DiseaseReportVO;
import com.makeit.module.iot.vo.breathe.DeviceInfoContentBreathe; import com.makeit.module.iot.vo.breathe.DeviceInfoContentBreathe;
import com.makeit.service.platform.alarm.PlatAlarmRecordService; import com.makeit.service.platform.alarm.PlatAlarmRecordService;
import com.makeit.service.platform.elder.*; import com.makeit.service.platform.elder.*;
...@@ -19,16 +19,17 @@ import com.makeit.utils.data.validate.CollectionUtils; ...@@ -19,16 +19,17 @@ import com.makeit.utils.data.validate.CollectionUtils;
import com.makeit.utils.data.validate.MapUtil; import com.makeit.utils.data.validate.MapUtil;
import com.makeit.utils.time.LocalDateTimeUtils; import com.makeit.utils.time.LocalDateTimeUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.ArrayList; import java.util.*;
import java.util.List;
import java.util.Map; import static com.makeit.service.platform.elder.impl.PlatElderRealTimeServiceImpl.*;
import java.util.Optional;
/** /**
* <p> * <p>
...@@ -53,10 +54,16 @@ public class PlatElderBreatheDayStatServiceImpl extends ServiceImpl<PlatElderBre ...@@ -53,10 +54,16 @@ public class PlatElderBreatheDayStatServiceImpl extends ServiceImpl<PlatElderBre
private PlatElderRealTimeService platElderRealTimeService; private PlatElderRealTimeService platElderRealTimeService;
@Autowired @Autowired
private PlatElderReportMonthService platElderReportMonthService; private PlatElderReportMonthService platElderReportMonthService;
@Autowired
private StringRedisTemplate redisTemplate;
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@Override @Override
public void heartRespiratoryTask() { public void heartRespiratoryTask() {
redisTemplate.delete(Objects.requireNonNull(redisTemplate.keys(DEVICE_BR_ANALYSIS + "*")));
redisTemplate.delete(Objects.requireNonNull(redisTemplate.keys(DEVICE_SPACE_TEMP_DATA + "*")));
redisTemplate.delete(Objects.requireNonNull(redisTemplate.keys(DEVICE_FALL_TEMP_DATA + "*")));
LocalDate nowDate = LocalDate.now(); LocalDate nowDate = LocalDate.now();
LocalDate yesDate = nowDate.minusDays(1); LocalDate yesDate = nowDate.minusDays(1);
...@@ -134,6 +141,7 @@ public class PlatElderBreatheDayStatServiceImpl extends ServiceImpl<PlatElderBre ...@@ -134,6 +141,7 @@ public class PlatElderBreatheDayStatServiceImpl extends ServiceImpl<PlatElderBre
reportMonth.setHeartExceptionCount((int) StreamUtil.count(rList, i -> PlatAlarmConfigEnum.AlarmTypeEnum.HEART.getValue().equals(i.getAlarmType()))); reportMonth.setHeartExceptionCount((int) StreamUtil.count(rList, i -> PlatAlarmConfigEnum.AlarmTypeEnum.HEART.getValue().equals(i.getAlarmType())));
reportMonth.setRespiratoryExceptionCount((int) StreamUtil.count(rList, i -> PlatAlarmConfigEnum.AlarmTypeEnum.BREATHE.getValue().equals(i.getAlarmType()))); reportMonth.setRespiratoryExceptionCount((int) StreamUtil.count(rList, i -> PlatAlarmConfigEnum.AlarmTypeEnum.BREATHE.getValue().equals(i.getAlarmType())));
reportMonth.setBehaviorExceptionCount((int) StreamUtil.count(rList, i -> PlatAlarmConfigEnum.AlarmTypeEnum.BEHAVIOR.getValue().equals(i.getAlarmType()))); reportMonth.setBehaviorExceptionCount((int) StreamUtil.count(rList, i -> PlatAlarmConfigEnum.AlarmTypeEnum.BEHAVIOR.getValue().equals(i.getAlarmType())));
reportMonth.setOffBedExceptionCount((int) StreamUtil.count(rList, i -> PlatAlarmConfigEnum.AlarmTypeEnum.OFF_BED.getValue().equals(i.getAlarmType())));
reportMonth.setTenantId(e.getTenantId()); reportMonth.setTenantId(e.getTenantId());
reportMonthList.add(reportMonth); reportMonthList.add(reportMonth);
......
package com.makeit.service.platform.elder.impl; package com.makeit.service.platform.elder.impl;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
...@@ -11,7 +12,6 @@ import com.makeit.common.entity.BaseEntity; ...@@ -11,7 +12,6 @@ import com.makeit.common.entity.BaseEntity;
import com.makeit.common.page.PageReqDTO; import com.makeit.common.page.PageReqDTO;
import com.makeit.common.page.PageVO; import com.makeit.common.page.PageVO;
import com.makeit.dto.platform.auth.PlatOrgSplitDTO; import com.makeit.dto.platform.auth.PlatOrgSplitDTO;
import com.makeit.dto.platform.elder.add.PlatElderDTOVO;
import com.makeit.dto.platform.elder.children.PlatElderChildrenInfoDTOVO; import com.makeit.dto.platform.elder.children.PlatElderChildrenInfoDTOVO;
import com.makeit.dto.platform.elder.children.PlatElderChildrenInfoQueryDTO; import com.makeit.dto.platform.elder.children.PlatElderChildrenInfoQueryDTO;
import com.makeit.dto.platform.elder.children.PlatElderChildrenInfoWechatDTOVO; import com.makeit.dto.platform.elder.children.PlatElderChildrenInfoWechatDTOVO;
...@@ -19,7 +19,6 @@ import com.makeit.entity.platform.auth.PlatOrg; ...@@ -19,7 +19,6 @@ import com.makeit.entity.platform.auth.PlatOrg;
import com.makeit.entity.platform.elder.PlatElder; import com.makeit.entity.platform.elder.PlatElder;
import com.makeit.entity.platform.elder.PlatElderChildrenInfo; import com.makeit.entity.platform.elder.PlatElderChildrenInfo;
import com.makeit.enums.CodeMessageEnum; import com.makeit.enums.CodeMessageEnum;
import com.makeit.enums.Const;
import com.makeit.exception.BusinessException; import com.makeit.exception.BusinessException;
import com.makeit.mapper.platform.elder.PlatElderChildrenInfoMapper; import com.makeit.mapper.platform.elder.PlatElderChildrenInfoMapper;
import com.makeit.service.platform.auth.PlatOrgService; import com.makeit.service.platform.auth.PlatOrgService;
...@@ -44,8 +43,10 @@ import org.springframework.beans.factory.annotation.Autowired; ...@@ -44,8 +43,10 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.util.*; import java.util.ArrayList;
import java.util.function.Function; import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
...@@ -253,7 +254,12 @@ public class PlatElderChildrenInfoServiceImpl extends ServiceImpl<PlatElderChild ...@@ -253,7 +254,12 @@ public class PlatElderChildrenInfoServiceImpl extends ServiceImpl<PlatElderChild
@Override @Override
public PlatElderChildrenInfoWechatVO view() { public PlatElderChildrenInfoWechatVO view() {
return BeanDtoVoUtils.convert(getById(WechatUserUtil.getUserId()), PlatElderChildrenInfoWechatVO.class); PlatElderChildrenInfoWechatVO wechatVO =
BeanDtoVoUtils.convert(getById(WechatUserUtil.getUserId()), PlatElderChildrenInfoWechatVO.class);
if (wechatVO != null && (StrUtil.isBlank(wechatVO.getName()) && StrUtil.isNotBlank(wechatVO.getPhone()))) {
wechatVO.setName(wechatVO.getPhone());
}
return wechatVO;
} }
@Override @Override
...@@ -299,7 +305,9 @@ public class PlatElderChildrenInfoServiceImpl extends ServiceImpl<PlatElderChild ...@@ -299,7 +305,9 @@ public class PlatElderChildrenInfoServiceImpl extends ServiceImpl<PlatElderChild
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void bind(String elderId) { public void bind(String elderId) {
PlatElderChildrenInfo childrenInfo = getById(WechatUserUtil.getUserId()); PlatElderChildrenInfo childrenInfo = getById(WechatUserUtil.getUserId());
if (childrenInfo == null) {
return;
}
List<PlatElderChildrenInfo> platElderChildrenInfoList = list(new QueryWrapper<PlatElderChildrenInfo>().lambda() List<PlatElderChildrenInfo> platElderChildrenInfoList = list(new QueryWrapper<PlatElderChildrenInfo>().lambda()
.eq(PlatElderChildrenInfo::getOpenid, childrenInfo.getOpenid()) .eq(PlatElderChildrenInfo::getOpenid, childrenInfo.getOpenid())
.isNotNull(PlatElderChildrenInfo::getElderId)); .isNotNull(PlatElderChildrenInfo::getElderId));
...@@ -313,11 +321,26 @@ public class PlatElderChildrenInfoServiceImpl extends ServiceImpl<PlatElderChild ...@@ -313,11 +321,26 @@ public class PlatElderChildrenInfoServiceImpl extends ServiceImpl<PlatElderChild
if (platElder == null) { if (platElder == null) {
throw new RuntimeException("找不到要绑定的长者"); throw new RuntimeException("找不到要绑定的长者");
} }
// 优先同租户同组织下的长者,没有的话就同租户下的,再没有就拿初始的数据
PlatElderChildrenInfo orgChildrenInfo = platElderChildrenInfoList.stream()
.filter(f -> f.getOrgId().equals(platElder.getOrgId())).findFirst().orElse(null);
PlatElderChildrenInfo tenantInfo = platElderChildrenInfoList.stream()
.filter(f -> f.getTenantId().equals(platElder.getTenantId())).findFirst().orElse(null);
PlatElderChildrenInfo copyInfo = null;
if(orgChildrenInfo != null){
copyInfo = orgChildrenInfo;
}
if(tenantInfo != null && orgChildrenInfo == null){
copyInfo = tenantInfo;
}
if(copyInfo == null){
copyInfo = childrenInfo;
}
newChildrenInfo.setTenantId(platElder.getTenantId()); newChildrenInfo.setTenantId(platElder.getTenantId());
newChildrenInfo.setOpenid(childrenInfo.getOpenid()); newChildrenInfo.setOpenid(copyInfo.getOpenid());
newChildrenInfo.setPhone(childrenInfo.getPhone()); newChildrenInfo.setPhone(copyInfo.getPhone());
newChildrenInfo.setName(childrenInfo.getName()); newChildrenInfo.setName(copyInfo.getName());
newChildrenInfo.setAvatar(childrenInfo.getAvatar()); newChildrenInfo.setAvatar(copyInfo.getAvatar());
PlatOrgSplitDTO vo = platOrgService.getOrgSplitVO(platElder.getOrgId()); PlatOrgSplitDTO vo = platOrgService.getOrgSplitVO(platElder.getOrgId());
......
...@@ -4,25 +4,18 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; ...@@ -4,25 +4,18 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.makeit.common.entity.BaseBusEntity; import com.makeit.common.entity.BaseBusEntity;
import com.makeit.dto.platform.elder.PlatElderReportDTO; import com.makeit.dto.platform.elder.PlatElderReportDTO;
import com.makeit.entity.platform.alarm.PlatAlarmRecord;
import com.makeit.entity.platform.device.PlatDevice; import com.makeit.entity.platform.device.PlatDevice;
import com.makeit.entity.platform.elder.*; import com.makeit.entity.platform.elder.*;
import com.makeit.enums.platform.alarm.PlatAlarmConfigEnum; import com.makeit.enums.platform.alarm.PlatAlarmConfigEnum;
import com.makeit.enums.report.SleepTypeEnum; import com.makeit.enums.report.SleepTypeEnum;
import com.makeit.global.aspect.tenant.TenantIdIgnore;
import com.makeit.module.iot.service.IotProductDeviceService;
import com.makeit.module.iot.vo.analysis.EvaluateReportVO; import com.makeit.module.iot.vo.analysis.EvaluateReportVO;
import com.makeit.module.iot.vo.breathe.DeviceInfoContentBreathe;
import com.makeit.service.platform.alarm.PlatAlarmRecordService;
import com.makeit.service.platform.elder.*; import com.makeit.service.platform.elder.*;
import com.makeit.service.saas.PlatTenantService;
import com.makeit.service.saas.SaasDiseaseReportService; import com.makeit.service.saas.SaasDiseaseReportService;
import com.makeit.service.saas.SaasElderReportConfigService; import com.makeit.service.saas.SaasElderReportConfigService;
import com.makeit.service.saas.SaasSleepEvaluateReportService; import com.makeit.service.saas.SaasSleepEvaluateReportService;
import com.makeit.utils.data.convert.BeanDtoVoUtils; import com.makeit.utils.data.convert.BeanDtoVoUtils;
import com.makeit.utils.data.convert.StreamUtil; import com.makeit.utils.data.convert.StreamUtil;
import com.makeit.utils.data.validate.CollectionUtils; import com.makeit.utils.data.validate.CollectionUtils;
import com.makeit.utils.data.validate.MapUtil;
import com.makeit.utils.old.StringUtils; import com.makeit.utils.old.StringUtils;
import com.makeit.utils.time.LocalDateTimeUtils; import com.makeit.utils.time.LocalDateTimeUtils;
import com.makeit.vo.platform.elder.realtime.PlatElderCoordinateVO; import com.makeit.vo.platform.elder.realtime.PlatElderCoordinateVO;
...@@ -45,6 +38,7 @@ import java.util.ArrayList; ...@@ -45,6 +38,7 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Optional; import java.util.Optional;
import java.util.function.Function;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@Service @Service
...@@ -178,7 +172,7 @@ public class PlatElderDayReportWeekServiceImpl implements PlatElderDayReportWeek ...@@ -178,7 +172,7 @@ public class PlatElderDayReportWeekServiceImpl implements PlatElderDayReportWeek
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
String elderId = platElderIdDTO.getElderId(); String elderId = platElderIdDTO.getElderId();
if (StringUtils.isNotEmpty(platElderIdDTO.getDeviceId())) { if (StringUtils.isNotEmpty(platElderIdDTO.getDeviceId())) {
PlatElder platElder = platElderService.getByDeviceId(platElderIdDTO.getDeviceId()); PlatElder platElder = platElderService.getByDeviceId(platElderIdDTO.getDeviceId(), platElderIdDTO.getTenantId());
if (platElder != null) { if (platElder != null) {
elderId = platElder.getId(); elderId = platElder.getId();
} }
...@@ -249,7 +243,7 @@ public class PlatElderDayReportWeekServiceImpl implements PlatElderDayReportWeek ...@@ -249,7 +243,7 @@ public class PlatElderDayReportWeekServiceImpl implements PlatElderDayReportWeek
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
String elderId = platElderIdDTO.getElderId(); String elderId = platElderIdDTO.getElderId();
if (StringUtils.isNotEmpty(platElderIdDTO.getDeviceId())) { if (StringUtils.isNotEmpty(platElderIdDTO.getDeviceId())) {
PlatElder platElder = platElderService.getByDeviceId(platElderIdDTO.getDeviceId()); PlatElder platElder = platElderService.getByDeviceId(platElderIdDTO.getDeviceId(), platElderIdDTO.getTenantId());
if (platElder != null) { if (platElder != null) {
elderId = platElder.getId(); elderId = platElder.getId();
} }
...@@ -268,7 +262,8 @@ public class PlatElderDayReportWeekServiceImpl implements PlatElderDayReportWeek ...@@ -268,7 +262,8 @@ public class PlatElderDayReportWeekServiceImpl implements PlatElderDayReportWeek
Map<Integer, Map<String, List<PlatElderSleep>>> sleepMap = sleepList.stream().collect(Collectors.groupingBy(PlatElderSleep::getElderSleepType, Collectors.groupingBy(PlatElderSleep::getHappenDate))); Map<Integer, Map<String, List<PlatElderSleep>>> sleepMap = sleepList.stream().collect(Collectors.groupingBy(PlatElderSleep::getElderSleepType, Collectors.groupingBy(PlatElderSleep::getHappenDate)));
Map<String, PlatElderSleepAnalysis> sleepAnalysisMap = StreamUtil.toMap(sleepAnalysisList, PlatElderSleepAnalysis::getHappenDate); Map<String, PlatElderSleepAnalysis> sleepAnalysisMap = sleepAnalysisList.stream().collect(Collectors.toMap(PlatElderSleepAnalysis::getHappenDate, Function.identity(),(v1,v2)->v1));
// Map<String, PlatElderSleepAnalysis> sleepAnalysisMap = StreamUtil.toMap(sleepAnalysisList, PlatElderSleepAnalysis::getHappenDate);
List<LocalDate> dateList = LocalDateTimeUtils.getDateSeries(weekStartDate, weekEndDate); List<LocalDate> dateList = LocalDateTimeUtils.getDateSeries(weekStartDate, weekEndDate);
...@@ -333,7 +328,7 @@ public class PlatElderDayReportWeekServiceImpl implements PlatElderDayReportWeek ...@@ -333,7 +328,7 @@ public class PlatElderDayReportWeekServiceImpl implements PlatElderDayReportWeek
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
String elderId = platElderIdDTO.getElderId(); String elderId = platElderIdDTO.getElderId();
if (StringUtils.isNotEmpty(platElderIdDTO.getDeviceId())) { if (StringUtils.isNotEmpty(platElderIdDTO.getDeviceId())) {
PlatElder platElder = platElderService.getByDeviceId(platElderIdDTO.getDeviceId()); PlatElder platElder = platElderService.getByDeviceId(platElderIdDTO.getDeviceId(), platElderIdDTO.getTenantId());
if (platElder != null) { if (platElder != null) {
elderId = platElder.getId(); elderId = platElder.getId();
} }
...@@ -345,13 +340,19 @@ public class PlatElderDayReportWeekServiceImpl implements PlatElderDayReportWeek ...@@ -345,13 +340,19 @@ public class PlatElderDayReportWeekServiceImpl implements PlatElderDayReportWeek
); );
int score = 0; int score = 0;
int br = 0;
int hr = 0;
if (CollectionUtils.isNotEmpty(breatheAnalyses)) { if (CollectionUtils.isNotEmpty(breatheAnalyses)) {
score = StreamUtil.reduce(breatheAnalyses, e -> Integer.valueOf(e.getBreatheScore() + ""), 0, Integer::sum) / breatheAnalyses.size(); score = StreamUtil.reduce(breatheAnalyses, e -> Integer.valueOf(e.getBreatheScore() + ""), 0, Integer::sum) / breatheAnalyses.size();
br = StreamUtil.reduce(breatheAnalyses, e -> Integer.valueOf(e.getAvgBreatheRate() + ""), 0, Integer::sum) / breatheAnalyses.size();
hr = StreamUtil.reduce(breatheAnalyses, e -> Integer.valueOf(e.getAvgHeartRate() + ""), 0, Integer::sum) / breatheAnalyses.size();
} }
PlatElderHeartRespiratoryEvaluationVO platElderHeartRespiratoryEvaluationVO = new PlatElderHeartRespiratoryEvaluationVO(); PlatElderHeartRespiratoryEvaluationVO platElderHeartRespiratoryEvaluationVO = new PlatElderHeartRespiratoryEvaluationVO();
platElderHeartRespiratoryEvaluationVO.setScore(score); platElderHeartRespiratoryEvaluationVO.setScore(score);
platElderHeartRespiratoryEvaluationVO.setHeartRate(hr);
platElderHeartRespiratoryEvaluationVO.setRespiratoryRate(br);
EvaluateReportVO evaluateReportVO = saasDiseaseReportService.getByScore(platElderHeartRespiratoryEvaluationVO.getScore()); EvaluateReportVO evaluateReportVO = saasDiseaseReportService.getByScore(platElderHeartRespiratoryEvaluationVO.getScore());
if (evaluateReportVO != null) { if (evaluateReportVO != null) {
...@@ -412,12 +413,10 @@ public class PlatElderDayReportWeekServiceImpl implements PlatElderDayReportWeek ...@@ -412,12 +413,10 @@ public class PlatElderDayReportWeekServiceImpl implements PlatElderDayReportWeek
} }
LambdaQueryWrapper<PlatElderBreatheDayStat> lambdaQueryWrapper = new QueryWrapper<PlatElderBreatheDayStat>().lambda(); LambdaQueryWrapper<PlatElderBreatheDayStat> lambdaQueryWrapper = new QueryWrapper<PlatElderBreatheDayStat>().lambda();
lambdaQueryWrapper.ge(PlatElderBreatheDayStat::getDay, weekStartDate); lambdaQueryWrapper.ge(PlatElderBreatheDayStat::getDay, weekStartDate);
lambdaQueryWrapper.le(PlatElderBreatheDayStat::getDay, weekEndDate); lambdaQueryWrapper.le(PlatElderBreatheDayStat::getDay, weekEndDate);
String finalDeviceId = deviceId; String finalDeviceId = deviceId;
//String finalOriDeviceId = oriDeviceId;
lambdaQueryWrapper.and(StringUtils.isNotBlank(platElderIdDTO.getElderId()) || StringUtils.isNotBlank(finalDeviceId) /*|| StringUtils.isNotBlank(finalOriDeviceId)*/, qw -> { lambdaQueryWrapper.and(StringUtils.isNotBlank(platElderIdDTO.getElderId()) || StringUtils.isNotBlank(finalDeviceId) /*|| StringUtils.isNotBlank(finalOriDeviceId)*/, qw -> {
if (StringUtils.isNotBlank(platElderIdDTO.getElderId())) { if (StringUtils.isNotBlank(platElderIdDTO.getElderId())) {
qw.eq(PlatElderBreatheDayStat::getElderId, platElderIdDTO.getElderId()); qw.eq(PlatElderBreatheDayStat::getElderId, platElderIdDTO.getElderId());
...@@ -425,9 +424,6 @@ public class PlatElderDayReportWeekServiceImpl implements PlatElderDayReportWeek ...@@ -425,9 +424,6 @@ public class PlatElderDayReportWeekServiceImpl implements PlatElderDayReportWeek
if (StringUtils.isNotBlank(finalDeviceId)) { if (StringUtils.isNotBlank(finalDeviceId)) {
qw.or().eq(PlatElderBreatheDayStat::getDeviceId, finalDeviceId); qw.or().eq(PlatElderBreatheDayStat::getDeviceId, finalDeviceId);
} }
// if (StringUtils.isNotBlank(finalOriDeviceId)) {
// qw.or().eq(PlatElderBreatheDayStat::getOriDeviceId, finalOriDeviceId);
// }
}); });
lambdaQueryWrapper.eq(StringUtils.isNotBlank(platElderIdDTO.getTenantId()), BaseBusEntity::getTenantId,platElderIdDTO.getTenantId()); lambdaQueryWrapper.eq(StringUtils.isNotBlank(platElderIdDTO.getTenantId()), BaseBusEntity::getTenantId,platElderIdDTO.getTenantId());
......
...@@ -5,10 +5,8 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; ...@@ -5,10 +5,8 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.makeit.dto.platform.elder.PlatElderReportDTO; import com.makeit.dto.platform.elder.PlatElderReportDTO;
import com.makeit.entity.platform.elder.PlatElderReportMonth; import com.makeit.entity.platform.elder.PlatElderReportMonth;
import com.makeit.mapper.platform.elder.PlatElderReportMonthMapper; import com.makeit.mapper.platform.elder.PlatElderReportMonthMapper;
import com.makeit.module.iot.service.IotProductDeviceService; import com.makeit.service.platform.elder.PlatElderDayReportWeekService;
import com.makeit.service.platform.alarm.PlatAlarmRecordService; import com.makeit.service.platform.elder.PlatElderReportMonthService;
import com.makeit.service.platform.elder.*;
import com.makeit.service.saas.PlatTenantService;
import com.makeit.utils.data.convert.BeanDtoVoUtils; import com.makeit.utils.data.convert.BeanDtoVoUtils;
import com.makeit.utils.old.StringUtils; import com.makeit.utils.old.StringUtils;
import com.makeit.utils.time.LocalDateTimeUtils; import com.makeit.utils.time.LocalDateTimeUtils;
...@@ -33,27 +31,9 @@ import java.util.List; ...@@ -33,27 +31,9 @@ import java.util.List;
@Service @Service
public class PlatElderReportMonthServiceImpl extends ServiceImpl<PlatElderReportMonthMapper, PlatElderReportMonth> implements PlatElderReportMonthService { public class PlatElderReportMonthServiceImpl extends ServiceImpl<PlatElderReportMonthMapper, PlatElderReportMonth> implements PlatElderReportMonthService {
@Autowired
private PlatElderRealTimeService platElderRealTimeService;
@Autowired @Autowired
private PlatElderDayReportWeekService platElderDayReportWeekService; private PlatElderDayReportWeekService platElderDayReportWeekService;
@Autowired
private PlatTenantService platTenantService;
@Autowired
private PlatElderService platElderService;
@Autowired
private PlatElderSleepAnalysisService platElderSleepAnalysisService;
@Autowired
private PlatAlarmRecordService platAlarmRecordService;
@Autowired
private IotProductDeviceService iotProductDeviceService;
public LocalDate monthStartDate(PlatElderReportDTO platElderIdDTO) { public LocalDate monthStartDate(PlatElderReportDTO platElderIdDTO) {
return monthStartDate(platElderIdDTO.getYear(), platElderIdDTO.getMonth()); return monthStartDate(platElderIdDTO.getYear(), platElderIdDTO.getMonth());
......
package com.makeit.service.platform.elder.impl; package com.makeit.service.platform.elder.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
...@@ -8,6 +10,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; ...@@ -8,6 +10,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.makeit.common.dto.StatusDTO; import com.makeit.common.dto.StatusDTO;
import com.makeit.common.entity.BaseBusEntity;
import com.makeit.common.entity.BaseEntity; import com.makeit.common.entity.BaseEntity;
import com.makeit.common.page.PageReqDTO; import com.makeit.common.page.PageReqDTO;
import com.makeit.common.page.PageVO; import com.makeit.common.page.PageVO;
...@@ -399,17 +402,17 @@ public class PlatElderServiceImpl extends ServiceImpl<PlatElderMapper, PlatElder ...@@ -399,17 +402,17 @@ public class PlatElderServiceImpl extends ServiceImpl<PlatElderMapper, PlatElder
return vo; return vo;
}); });
JoinUtil.join(list, platSpaceService, Arrays.asList( // JoinUtil.join(list, platSpaceService, Arrays.asList(
PlatElderExportVO::getStreetSpaceId, // PlatElderExportVO::getStreetSpaceId,
PlatElderExportVO::getBuildingSpaceId, // PlatElderExportVO::getBuildingSpaceId,
PlatElderExportVO::getUnitSpaceId, // PlatElderExportVO::getUnitSpaceId,
PlatElderExportVO::getFloorSpaceId // PlatElderExportVO::getFloorSpaceId
), PlatSpace::getId, Arrays.asList( // ), PlatSpace::getId, Arrays.asList(
(e, s) -> e.setStreetSpaceName(s.getName()), // (e, s) -> e.setStreetSpaceName(s.getName()),
(e, s) -> e.setBuildingSpaceName(s.getName()), // (e, s) -> e.setBuildingSpaceName(s.getName()),
(e, s) -> e.setUnitSpaceName(s.getName()), // (e, s) -> e.setUnitSpaceName(s.getName()),
(e, s) -> e.setFloorSpaceName(s.getName()) // (e, s) -> e.setFloorSpaceName(s.getName())
)); // ));
JoinUtil.join(list, platRoomService, PlatElderExportVO::getRoomId, PlatRoom::getId, (e, l) -> { JoinUtil.join(list, platRoomService, PlatElderExportVO::getRoomId, PlatRoom::getId, (e, l) -> {
e.setRoomName(l.getName()); e.setRoomName(l.getName());
...@@ -419,9 +422,84 @@ public class PlatElderServiceImpl extends ServiceImpl<PlatElderMapper, PlatElder ...@@ -419,9 +422,84 @@ public class PlatElderServiceImpl extends ServiceImpl<PlatElderMapper, PlatElder
e.setBedName(l.getName()); e.setBedName(l.getName());
}); });
handleExcelData(list, dbList);
ExcelUtil.export(response, "长者信息" + FileSuffixEnum.EXCEL.getSuffix(), "长者信息",PlatElderExportVO.class, list); ExcelUtil.export(response, "长者信息" + FileSuffixEnum.EXCEL.getSuffix(), "长者信息",PlatElderExportVO.class, list);
} }
private void handleExcelData(List<PlatElderExportVO> list, List<PlatElder> dbList) {
if (CollUtil.isEmpty(list) || CollUtil.isEmpty(dbList)) {
return;
}
Map<String, PlatElder> platElderMap = StreamUtil.toMap(dbList, PlatElder::getId);
Set<String> placeList = new HashSet<>();
for (PlatElder platElder : dbList) {
if (StrUtil.isBlank(platElder.getSpacePath())) {
continue;
}
List<String> pathList = new ArrayList<>(Arrays.asList(platElder.getSpacePath().split(",")));
if (StrUtil.isNotBlank(platElder.getRoomId())) {
pathList.remove(platElder.getRoomId());
}
if (StrUtil.isNotBlank(platElder.getBedId())) {
pathList.remove(platElder.getBedId());
}
CollUtil.addAll(placeList, pathList);
}
Map<String, String> spaceMap = new HashMap<>();
if (CollUtil.isNotEmpty(placeList)) {
spaceMap = platSpaceService.listByIds(placeList).stream()
.collect(Collectors.toMap(PlatSpace::getId, PlatSpace::getName));
}
Map<String, String> finalSpaceMap = spaceMap;
list.forEach(e -> {
PlatElder platElder = platElderMap.get(e.getId());
if (platElder == null) {
return;
}
String spacePath = platElder.getSpacePath();
if (StrUtil.isBlank(spacePath)) {
e.setStreetSpaceName(null);
e.setBuildingSpaceName(null);
e.setUnitSpaceName(null);
e.setFloorSpaceName(null);
return;
}
List<String> pathList = new ArrayList<>(Arrays.asList(spacePath.split(",")));
if (StrUtil.isNotBlank(platElder.getRoomId())) {
pathList.remove(platElder.getRoomId());
}
if (StrUtil.isNotBlank(platElder.getBedId())) {
pathList.remove(platElder.getBedId());
}
if (pathList.size() >= 4) {
e.setStreetSpaceName(finalSpaceMap.get(pathList.get(0)));
e.setBuildingSpaceName(finalSpaceMap.get(pathList.get(1)));
e.setUnitSpaceName(finalSpaceMap.get(pathList.get(2)));
e.setFloorSpaceName(finalSpaceMap.get(pathList.get(3)));
}
if (pathList.size() == 3) {
e.setStreetSpaceName(finalSpaceMap.get(pathList.get(0)));
e.setBuildingSpaceName(finalSpaceMap.get(pathList.get(1)));
e.setUnitSpaceName(finalSpaceMap.get(pathList.get(2)));
e.setFloorSpaceName(null);
}
if (pathList.size() == 2) {
e.setStreetSpaceName(finalSpaceMap.get(pathList.get(0)));
e.setBuildingSpaceName(finalSpaceMap.get(pathList.get(1)));
e.setUnitSpaceName(null);
e.setFloorSpaceName(null);
}
if (pathList.size() == 1) {
e.setStreetSpaceName(finalSpaceMap.get(pathList.get(0)));
e.setBuildingSpaceName(null);
e.setUnitSpaceName(null);
e.setFloorSpaceName(null);
}
});
}
@Override @Override
public void exportTemplate(HttpServletResponse response) { public void exportTemplate(HttpServletResponse response) {
ExcelUtil.exportTemplate(response, "长者信息导入模板" + FileSuffixEnum.EXCEL.getSuffix(), "长者信息",PlatElderImportDTO.class); ExcelUtil.exportTemplate(response, "长者信息导入模板" + FileSuffixEnum.EXCEL.getSuffix(), "长者信息",PlatElderImportDTO.class);
...@@ -1247,10 +1325,22 @@ public class PlatElderServiceImpl extends ServiceImpl<PlatElderMapper, PlatElder ...@@ -1247,10 +1325,22 @@ public class PlatElderServiceImpl extends ServiceImpl<PlatElderMapper, PlatElder
} }
@Override @Override
public PlatElder getByDeviceId(String deviceId) { public PlatElder getByDeviceId(String deviceId, String tenantId) {
PlatRoomBedDevice platRoomBedDevice = platRoomBedDeviceService.getOne(new QueryWrapper<PlatRoomBedDevice>().lambda() PlatDevice platDevice = platDeviceService.getOne(new QueryWrapper<PlatDevice>().lambda()
.eq(PlatRoomBedDevice::getDeviceId, deviceId) .eq(PlatDevice::getOriDeviceId, deviceId)
.last("limit 1")); .eq(BaseBusEntity::getTenantId, tenantId));
PlatRoomBedDevice platRoomBedDevice;
if (platDevice == null) {
platRoomBedDevice = platRoomBedDeviceService.getOne(new QueryWrapper<PlatRoomBedDevice>().lambda()
.eq(PlatRoomBedDevice::getDeviceId, deviceId)
.eq(StringUtils.isNotEmpty(tenantId), BaseBusEntity::getTenantId, tenantId)
.last("limit 1"));
} else {
platRoomBedDevice = platRoomBedDeviceService.getOne(new QueryWrapper<PlatRoomBedDevice>().lambda()
.eq(PlatRoomBedDevice::getDeviceId, platDevice.getId())
.eq(StringUtils.isNotEmpty(tenantId), BaseBusEntity::getTenantId, tenantId)
.last("limit 1"));
}
if (platRoomBedDevice != null && StringUtils.isNotEmpty(platRoomBedDevice.getBedId())) { if (platRoomBedDevice != null && StringUtils.isNotEmpty(platRoomBedDevice.getBedId())) {
PlatElder platElder = getOne(new QueryWrapper<PlatElder>().lambda() PlatElder platElder = getOne(new QueryWrapper<PlatElder>().lambda()
.eq(PlatElder::getBedId, platRoomBedDevice.getBedId())); .eq(PlatElder::getBedId, platRoomBedDevice.getBedId()));
......
...@@ -164,6 +164,7 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper, ...@@ -164,6 +164,7 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
DeviceInfoContentBreathe.Properties breatheProperties; DeviceInfoContentBreathe.Properties breatheProperties;
Integer bodymove; Integer bodymove;
int reportSize = deviceInfoContentBreathes.size();
// 记录总呼吸率和总心率 // 记录总呼吸率和总心率
int maxBr = 0; int maxBr = 0;
int minBr = 0; int minBr = 0;
...@@ -182,6 +183,7 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper, ...@@ -182,6 +183,7 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
boolean isMoveBed = true; boolean isMoveBed = true;
boolean awakeMinuteActionFlag = true; // 清醒每分钟体动是否满足要求 boolean awakeMinuteActionFlag = true; // 清醒每分钟体动是否满足要求
int noPersonCount = 0; // 无人跳过计数
int sleepDeepMinuteCount = 0; // 深睡每分钟体动和翻身次数 int sleepDeepMinuteCount = 0; // 深睡每分钟体动和翻身次数
int sleepModerateAMinuteCount = 0; // 中度睡每分钟体动和翻身次数 int sleepModerateAMinuteCount = 0; // 中度睡每分钟体动和翻身次数
for (DeviceInfoContentBreathe infoContentBreathe : deviceInfoContentBreathes) { for (DeviceInfoContentBreathe infoContentBreathe : deviceInfoContentBreathes) {
...@@ -191,6 +193,21 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper, ...@@ -191,6 +193,21 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
int br = breatheProperties.getBr(); int br = breatheProperties.getBr();
int hr = breatheProperties.getHr(); int hr = breatheProperties.getHr();
Integer hasPerson = breatheProperties.getPerson(); // 0无人,1有人 Integer hasPerson = breatheProperties.getPerson(); // 0无人,1有人
if (breatheProperties.getPerson() == 0) {
noPersonCount++;
continue;
}
// 0和255直接跳过
if (breatheProperties.getHr() == 255 || breatheProperties.getHr() == 0 ) {
noPersonCount++;
continue;
}
if (breatheProperties.getBr() == 255 || breatheProperties.getBr() == 0) {
noPersonCount++;
continue;
}
if (bodymove > actionThreshold) { if (bodymove > actionThreshold) {
bodymoveCount++; bodymoveCount++;
} }
...@@ -234,12 +251,15 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper, ...@@ -234,12 +251,15 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
hrBrCount++; hrBrCount++;
} }
} }
if (reportSize == noPersonCount) {
continue;
}
analysisVO.setTotalBr(totalBr); analysisVO.setTotalBr(totalBr);
analysisVO.setAvgBr(totalBr / 60);
analysisVO.setAvgBr(totalBr / reportSize);
analysisVO.setTotalHr(totalHr); analysisVO.setTotalHr(totalHr);
analysisVO.setAvgHr(totalHr / 60); analysisVO.setAvgHr(totalHr / reportSize);
analysisVO.setMaxBr(maxBr); analysisVO.setMaxBr(maxBr);
analysisVO.setMinBr(minBr); analysisVO.setMinBr(minBr);
...@@ -277,12 +297,11 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper, ...@@ -277,12 +297,11 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
for (Map.Entry<String, AnalysisVO> entry : totalMap.entrySet()) { for (Map.Entry<String, AnalysisVO> entry : totalMap.entrySet()) {
AnalysisVO analysisVO = entry.getValue(); AnalysisVO analysisVO = entry.getValue();
if (!analysisVO.getIsAction()) { if (!analysisVO.getIsAction() && !analysisVO.getIsMoveBed()) {
if (StringUtils.isEmpty(startSleepTime)) { if (StringUtils.isEmpty(startSleepTime)) {
startSleepTime = entry.getKey(); startSleepTime = entry.getKey();
} }
sleepMinute++; sleepMinute++;
continue;
} }
if (StringUtils.isEmpty(startSleepTime) && sleepMinute == 0) { if (StringUtils.isEmpty(startSleepTime) && sleepMinute == 0) {
continue; continue;
...@@ -440,7 +459,7 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper, ...@@ -440,7 +459,7 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
TreeMap<String, AnalysisVO> sleepMap = entry.getValue(); TreeMap<String, AnalysisVO> sleepMap = entry.getValue();
for (Map.Entry<String, AnalysisVO> voEntry : sleepMap.entrySet()) { for (Map.Entry<String, AnalysisVO> voEntry : sleepMap.entrySet()) {
AnalysisVO analysisVO = voEntry.getValue(); AnalysisVO analysisVO = voEntry.getValue();
if (analysisVO.getAwakeMinuteActionFlag()) { if (analysisVO.getAwakeMinuteActionFlag() || analysisVO.getIsMoveBed()) {
if (StringUtils.isEmpty(startAwakeTime)) { if (StringUtils.isEmpty(startAwakeTime)) {
startAwakeTime = voEntry.getKey(); startAwakeTime = voEntry.getKey();
} }
...@@ -828,6 +847,7 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper, ...@@ -828,6 +847,7 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
platElderReportMonth.setRespiratoryExceptionCount(0); platElderReportMonth.setRespiratoryExceptionCount(0);
platElderReportMonth.setHeartExceptionCount(0); platElderReportMonth.setHeartExceptionCount(0);
platElderReportMonth.setBehaviorExceptionCount(0); platElderReportMonth.setBehaviorExceptionCount(0);
platElderReportMonth.setOffBedExceptionCount(0);
platElderReportMonth.setHeartRate(80); platElderReportMonth.setHeartRate(80);
platElderReportMonth.setRespiratoryRate(20); platElderReportMonth.setRespiratoryRate(20);
platElderReportMonth.setFailCount(0); platElderReportMonth.setFailCount(0);
......
package com.makeit.service.platform.space.impl; package com.makeit.service.platform.space.impl;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; 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.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
...@@ -10,7 +8,9 @@ import com.makeit.common.dto.StatusDTO; ...@@ -10,7 +8,9 @@ import com.makeit.common.dto.StatusDTO;
import com.makeit.common.entity.BaseEntity; import com.makeit.common.entity.BaseEntity;
import com.makeit.common.page.PageReqDTO; import com.makeit.common.page.PageReqDTO;
import com.makeit.common.page.PageVO; import com.makeit.common.page.PageVO;
import com.makeit.dto.platform.space.*; import com.makeit.dto.platform.space.PlatBedEditDTO;
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.platform.workstation.WorkStationQueryDTO;
import com.makeit.entity.platform.auth.PlatOrg; import com.makeit.entity.platform.auth.PlatOrg;
import com.makeit.entity.platform.space.PlatBed; import com.makeit.entity.platform.space.PlatBed;
...@@ -33,12 +33,13 @@ import com.makeit.vo.platform.workstation.WorkStationHomeBedVO; ...@@ -33,12 +33,13 @@ import com.makeit.vo.platform.workstation.WorkStationHomeBedVO;
import com.makeit.vo.platform.workstation.WorkStationInstitutionBedVO; import com.makeit.vo.platform.workstation.WorkStationInstitutionBedVO;
import jodd.util.StringUtil; import jodd.util.StringUtil;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.util.*; import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
...@@ -162,12 +163,11 @@ public class PlatBedServiceImpl extends ServiceImpl<PlatBedMapper, PlatBed> impl ...@@ -162,12 +163,11 @@ public class PlatBedServiceImpl extends ServiceImpl<PlatBedMapper, PlatBed> impl
@Override @Override
public Page<PlatBedPanoramaVO> selectBySpaceIdAndStatus(PageReqDTO<PlatBedPanoramaDTO> pageReqDTO, PlatBedPanoramaDTO dto) { public Page<PlatBedPanoramaVO> selectBySpaceIdAndStatus(PageReqDTO<PlatBedPanoramaDTO> pageReqDTO, PlatBedPanoramaDTO dto) {
List<String> typeOrgIdList = Lists.newArrayList();
List<String> choiceOrgIdList = Lists.newArrayList(); List<String> choiceOrgIdList = Lists.newArrayList();
if (StringUtils.isNotEmpty(dto.getOrgType())) { PlatOrg platOrg = new PlatOrg();
List<PlatOrg> platOrgList = platOrgService.list(new QueryWrapper<PlatOrg>().lambda().eq(PlatOrg::getType, dto.getOrgType())); platOrg.setType(dto.getOrgType());
typeOrgIdList = StreamUtil.map(platOrgList, BaseEntity::getId); List<PlatOrg> platOrgList = platOrgService.belongToScopeList(platOrg);
} List<String> typeOrgIdList = StreamUtil.map(platOrgList, BaseEntity::getId);
if (StringUtil.isNotEmpty(dto.getOrgId())) { if (StringUtil.isNotEmpty(dto.getOrgId())) {
choiceOrgIdList.addAll(Lists.newArrayList(dto.getOrgId().split(","))); choiceOrgIdList.addAll(Lists.newArrayList(dto.getOrgId().split(",")));
} }
...@@ -194,13 +194,6 @@ public class PlatBedServiceImpl extends ServiceImpl<PlatBedMapper, PlatBed> impl ...@@ -194,13 +194,6 @@ public class PlatBedServiceImpl extends ServiceImpl<PlatBedMapper, PlatBed> impl
} }
} }
// 数据权限
if (StrUtil.isBlank(dto.getOrgId()) && StrUtil.isBlank(dto.getType())) {
//查询用户权限组织id
List<PlatOrg> orgs = platOrgService.belongToScopeList(new PlatOrg());
orgIdList = orgs.stream().map(PlatOrg::getId).collect(Collectors.toList());
}
return baseMapper.selectBySpaceIdAndStatus(new Page<>(pageReqDTO.getPage(),pageReqDTO.getLimit()),dto,orgIdList); return baseMapper.selectBySpaceIdAndStatus(new Page<>(pageReqDTO.getPage(),pageReqDTO.getLimit()),dto,orgIdList);
} }
......
...@@ -34,6 +34,8 @@ import com.makeit.utils.user.plat.PlatUserUtil; ...@@ -34,6 +34,8 @@ import com.makeit.utils.user.plat.PlatUserUtil;
import com.makeit.utils.user.plat.PlatUserVO; import com.makeit.utils.user.plat.PlatUserVO;
import com.makeit.vo.platform.space.PlatSpaceAndRoomVO; import com.makeit.vo.platform.space.PlatSpaceAndRoomVO;
import jodd.util.StringUtil; import jodd.util.StringUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
...@@ -53,6 +55,7 @@ import java.util.stream.Collectors; ...@@ -53,6 +55,7 @@ import java.util.stream.Collectors;
* @Describe: * @Describe:
*/ */
@Service @Service
@Slf4j
public class PlatSpaceServiceImpl extends ServiceImpl<PlatSpaceMapper, PlatSpace> implements PlatSpaceService { public class PlatSpaceServiceImpl extends ServiceImpl<PlatSpaceMapper, PlatSpace> implements PlatSpaceService {
@Autowired @Autowired
...@@ -145,12 +148,30 @@ public class PlatSpaceServiceImpl extends ServiceImpl<PlatSpaceMapper, PlatSpace ...@@ -145,12 +148,30 @@ public class PlatSpaceServiceImpl extends ServiceImpl<PlatSpaceMapper, PlatSpace
if (parentSpace!=null && parentSpace.getParentPath()!=null && parentSpace.getParentPath().contains(dto.getId())) { if (parentSpace!=null && parentSpace.getParentPath()!=null && parentSpace.getParentPath().contains(dto.getId())) {
throw new BusinessException(CodeMessageEnum.PLATFORM_ERROR_SPACE_NOT_AUTH_PARENT); throw new BusinessException(CodeMessageEnum.PLATFORM_ERROR_SPACE_NOT_AUTH_PARENT);
} }
// todo 编辑后层级大于4,不允许编辑 脏数据太多,待校验
// checkAndUpdateSonSpace(space);
this.updateById(space); this.updateById(space);
List<String> lastSpaceIds = recursionLastSpaceIds(space.getId(), new ArrayList<>());
List<PlatRoom> platRoomList = platRoomService.listBySpaceId(space.getId()); if (CollUtil.isEmpty(lastSpaceIds)) {
return;
}
List<PlatRoom> platRoomList = platRoomService.list(Wrappers.<PlatRoom>lambdaQuery().in(PlatRoom::getSpaceId, lastSpaceIds));
if (CollUtil.isEmpty(platRoomList)) {
return;
}
for (PlatRoom platRoom : platRoomList) { for (PlatRoom platRoom : platRoomList) {
platRoom.setSpacePath(dto.getParentPath() + "," + space.getId());
List<String> roomSpaceIds = recursionRoomId(platRoom.getSpaceId(), new ArrayList<>(), space.getId());
if(CollUtil.isEmpty(roomSpaceIds)){
return;
}
String join = String.join(",", CollUtil.reverse(roomSpaceIds));
log.info("房间id:{},对应的空间id:{},parentId:{}", platRoom.getId(), join, dto.getParentPath());
String roomSpacePath = dto.getParentPath() + "," + join;
log.info("roomSpacePath" + roomSpacePath);
platRoom.setSpacePath(roomSpacePath);
platRoomService.updateById(platRoom); platRoomService.updateById(platRoom);
} }
List<String> roomIds = platRoomList.stream().map(PlatRoom::getId).collect(Collectors.toList()); List<String> roomIds = platRoomList.stream().map(PlatRoom::getId).collect(Collectors.toList());
...@@ -168,12 +189,78 @@ public class PlatSpaceServiceImpl extends ServiceImpl<PlatSpaceMapper, PlatSpace ...@@ -168,12 +189,78 @@ public class PlatSpaceServiceImpl extends ServiceImpl<PlatSpaceMapper, PlatSpace
return; return;
} }
PlatRoom platRoom = roomMap.get(roomId); PlatRoom platRoom = roomMap.get(roomId);
e.setSpacePath(platRoom.getSpacePath() + "," + e.getBedId()); e.setSpacePath(platRoom.getSpacePath() + "," + e.getRoomId() + "," + e.getBedId());
platElderService.updateById(e); platElderService.updateById(e);
}); });
} }
} }
private List<String> recursionLastSpaceIds(String spaceId, List<String> result) {
List<PlatSpace> platSpaces = this.list(Wrappers.<PlatSpace>lambdaQuery().eq(PlatSpace::getParentId, spaceId));
if (CollUtil.isNotEmpty(platSpaces)) {
platSpaces.forEach(p -> recursionLastSpaceIds(p.getId(), result));
} else {
result.add(spaceId);
return result;
}
return result;
}
private List<String> recursionRoomId(String roomSpaceId, List<String> result, String updateSpaceId) {
result.add(roomSpaceId);
if (roomSpaceId.equals(updateSpaceId)) {
return result;
}else {
PlatSpace platSpaces = this.getById(roomSpaceId);
recursionRoomId(platSpaces.getParentId(), result, updateSpaceId);
}
return result;
}
private void checkAndUpdateSonSpace(PlatSpace space) {
String parentPath = space.getParentPath();
int level = StrUtil.isBlank(parentPath) ? 0 : parentPath.split(",").length;
if (level > 3) {
throw new BusinessException(CodeMessageEnum.PLATFORM_ERROR_SPACE_OVER_LEVEL);
}
String spaceId = space.getId();
List<PlatSpace> platSpaceList = list(Wrappers.<PlatSpace>lambdaQuery()
.apply(StringUtils.isNotBlank(spaceId), "find_in_set('" + spaceId + "',parent_path)"));
int sonLevel = 0;
if (CollUtil.isNotEmpty(platSpaceList)) {
final int[] maxLength = {1};
platSpaceList.forEach(s -> {
if (StrUtil.isBlank(s.getParentPath())) {
return;
}
String[] parentSpaceIds = s.getParentPath().split(",");
if (parentSpaceIds.length > maxLength[0]) {
maxLength[0] = parentSpaceIds.length;
}
});
sonLevel = maxLength[0];
}
if (level + sonLevel > 3) {
throw new BusinessException(CodeMessageEnum.PLATFORM_ERROR_SPACE_OVER_LEVEL);
}
// 更新下级空间的parentPath
if (CollUtil.isNotEmpty(platSpaceList)) {
platSpaceList.forEach(s -> {
if (StrUtil.isBlank(s.getParentPath())) {
return;
}
int indexOf = s.getParentPath().indexOf(spaceId);
if (indexOf == -1) {
return;
}
String oldSpacePath = s.getParentPath().substring(indexOf);
s.setParentPath(parentPath + "," + oldSpacePath);
updateById(s);
});
}
}
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void del(String id) { public void del(String id) {
......
...@@ -42,8 +42,6 @@ import com.makeit.service.platform.space.PlatSpaceService; ...@@ -42,8 +42,6 @@ import com.makeit.service.platform.space.PlatSpaceService;
import com.makeit.service.platform.workstation.WorkStationService; import com.makeit.service.platform.workstation.WorkStationService;
import com.makeit.service.saas.SaasModelManageService; import com.makeit.service.saas.SaasModelManageService;
import com.makeit.service.saas.SaasSleepAnalysisModelService; import com.makeit.service.saas.SaasSleepAnalysisModelService;
import com.makeit.shengwang.agora.service.ShengwangService;
import com.makeit.shengwang.agora.vo.PlatAlarmCallDeviceVO;
import com.makeit.utils.StandardDeviationUtil; import com.makeit.utils.StandardDeviationUtil;
import com.makeit.utils.data.convert.PageUtil; import com.makeit.utils.data.convert.PageUtil;
import com.makeit.utils.data.convert.StreamUtil; import com.makeit.utils.data.convert.StreamUtil;
...@@ -281,12 +279,11 @@ public class WorkStationServiceImpl implements WorkStationService { ...@@ -281,12 +279,11 @@ public class WorkStationServiceImpl implements WorkStationService {
for (WorkStationInstitutionRoomVO vo : roomVOList) { for (WorkStationInstitutionRoomVO vo : roomVOList) {
vo.setPathName(vo.getPathName() + "-" + vo.getRoomName()); vo.setPathName(vo.getPathName() + "-" + vo.getRoomName());
List<PlatDevice> deviceList = Lists.newArrayList();
if (bedMap.get(vo.getRoomId()) != null) { if (bedMap.get(vo.getRoomId()) != null) {
List<WorkStationInstitutionBedVO> roomBedVos = bedMap.get(vo.getRoomId()); List<WorkStationInstitutionBedVO> roomBedVos = bedMap.get(vo.getRoomId());
//获取告警类型及老人状态 //获取告警类型及老人状态
for(WorkStationInstitutionBedVO r : roomBedVos){ for(WorkStationInstitutionBedVO r : roomBedVos){
List<PlatDevice> deviceList = Lists.newArrayList();
List<PlatRoomBedDevice> platRoomBedDevices = roomDeviceMap.get(r.getRoomId()); List<PlatRoomBedDevice> platRoomBedDevices = roomDeviceMap.get(r.getRoomId());
if (CollectionUtils.isNotEmpty(platRoomBedDevices)) { if (CollectionUtils.isNotEmpty(platRoomBedDevices)) {
List<String> tempDeviceIdList = StreamUtil.map(platRoomBedDevices, PlatRoomBedDevice::getDeviceId); List<String> tempDeviceIdList = StreamUtil.map(platRoomBedDevices, PlatRoomBedDevice::getDeviceId);
...@@ -305,9 +302,9 @@ public class WorkStationServiceImpl implements WorkStationService { ...@@ -305,9 +302,9 @@ public class WorkStationServiceImpl implements WorkStationService {
PlatElderIdDTO platElderIdDTO = new PlatElderIdDTO(); PlatElderIdDTO platElderIdDTO = new PlatElderIdDTO();
platElderIdDTO.setElderId(r.getElderId()); platElderIdDTO.setElderId(r.getElderId());
PlatElderRealTimeHeartRespiratoryVO heartRespiratoryVO = platElderRealTimeService.heartRespiratory(platElderIdDTO);
r.setElderStatus(heartRespiratoryVO.getStatus());
PlatElderRealTimeNowVO realTimeNowVO = platElderRealTimeService.nowStatus(platElderIdDTO);
r.setElderStatus(realTimeNowVO.getStatus());
PlatRoomBedDevice platRoomBedDevice = bedDeviceMap.get(r.getBedId()); PlatRoomBedDevice platRoomBedDevice = bedDeviceMap.get(r.getBedId());
if (platRoomBedDevice != null) { if (platRoomBedDevice != null) {
PlatDevice platDevice = deviceMap.get(platRoomBedDevice.getDeviceId()); PlatDevice platDevice = deviceMap.get(platRoomBedDevice.getDeviceId());
...@@ -421,6 +418,8 @@ public class WorkStationServiceImpl implements WorkStationService { ...@@ -421,6 +418,8 @@ public class WorkStationServiceImpl implements WorkStationService {
typeMap.put(a.getAlarmType(), PlatAlarmRecordType.FALL.getName()); typeMap.put(a.getAlarmType(), PlatAlarmRecordType.FALL.getName());
} else if(PlatAlarmConfigEnum.AlarmTypeEnum.BEHAVIOR.getValue().equals(a.getAlarmType())){ } else if(PlatAlarmConfigEnum.AlarmTypeEnum.BEHAVIOR.getValue().equals(a.getAlarmType())){
typeMap.put(a.getAlarmType(), PlatAlarmRecordType.BEHAVIOR.getName()); typeMap.put(a.getAlarmType(), PlatAlarmRecordType.BEHAVIOR.getName());
} else if (PlatAlarmConfigEnum.AlarmTypeEnum.OFF_BED.getValue().equals(a.getAlarmType())) {
typeMap.put(a.getAlarmType(), PlatAlarmRecordType.OFF_BED.getName());
} }
map.put(e, typeMap); map.put(e, typeMap);
...@@ -437,6 +436,8 @@ public class WorkStationServiceImpl implements WorkStationService { ...@@ -437,6 +436,8 @@ public class WorkStationServiceImpl implements WorkStationService {
typeMap.put(a.getAlarmType(), PlatAlarmRecordType.FALL.getName()); typeMap.put(a.getAlarmType(), PlatAlarmRecordType.FALL.getName());
} else if(PlatAlarmConfigEnum.AlarmTypeEnum.BEHAVIOR.getValue().equals(a.getAlarmType())){ } else if(PlatAlarmConfigEnum.AlarmTypeEnum.BEHAVIOR.getValue().equals(a.getAlarmType())){
typeMap.put(a.getAlarmType(), PlatAlarmRecordType.BEHAVIOR.getName()); typeMap.put(a.getAlarmType(), PlatAlarmRecordType.BEHAVIOR.getName());
} else if (PlatAlarmConfigEnum.AlarmTypeEnum.OFF_BED.getValue().equals(a.getAlarmType())) {
typeMap.put(a.getAlarmType(), PlatAlarmRecordType.OFF_BED.getName());
} }
map.put(e, typeMap); map.put(e, typeMap);
} }
...@@ -619,7 +620,8 @@ public class WorkStationServiceImpl implements WorkStationService { ...@@ -619,7 +620,8 @@ public class WorkStationServiceImpl implements WorkStationService {
platElderIdDTO.setElderId(vo.getElderId()); platElderIdDTO.setElderId(vo.getElderId());
PlatElderRealTimeHeartRespiratoryVO respiratoryVO = platElderRealTimeService.heartRespiratory(platElderIdDTO); PlatElderRealTimeHeartRespiratoryVO respiratoryVO = platElderRealTimeService.heartRespiratory(platElderIdDTO);
vo.setElderStatus(respiratoryVO.getStatus()); PlatElderRealTimeNowVO realTimeNowVO = platElderRealTimeService.nowStatus(platElderIdDTO);
vo.setElderStatus(realTimeNowVO.getStatus());
vo.setHeartRate(respiratoryVO.getHeartRate()); vo.setHeartRate(respiratoryVO.getHeartRate());
vo.setRespiratoryRate(respiratoryVO.getRespiratoryRate()); vo.setRespiratoryRate(respiratoryVO.getRespiratoryRate());
......
package com.makeit.service.saas;
import com.baomidou.mybatisplus.extension.service.IService;
import com.makeit.common.page.PageReqDTO;
import com.makeit.common.page.PageVO;
import com.makeit.entity.saas.SaasPidManage;
/**
* <p>
* 声网pid管理 服务类
* </p>
*
* @author eugene young
* @since 2023-12-13
*/
public interface SaasPidManageService extends IService<SaasPidManage> {
PageVO<SaasPidManage> pageList(PageReqDTO<SaasPidManage> pageReqDTO);
void add(SaasPidManage dto);
void delete(String id);
}
package com.makeit.service.saas.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.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.makeit.common.page.PageReqDTO;
import com.makeit.common.page.PageVO;
import com.makeit.entity.saas.SaasPidManage;
import com.makeit.mapper.saas.SaasPidManageMapper;
import com.makeit.service.saas.SaasPidManageService;
import com.makeit.utils.data.convert.PageUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
/**
* <p>
* 声网pid管理 服务实现类
* </p>
*
* @author eugene young
* @since 2023-12-13
*/
@Service
public class SaasPidManageServiceImpl extends ServiceImpl<SaasPidManageMapper, SaasPidManage> implements SaasPidManageService {
@Resource
private SaasPidManageMapper saasPidManageMapper;
@Override
public PageVO<SaasPidManage> pageList(PageReqDTO<SaasPidManage> pageReqDTO) {
SaasPidManage dto = pageReqDTO.getData();
Page<SaasPidManage> p = PageUtil.toMpPage(pageReqDTO);
LambdaQueryWrapper<SaasPidManage> lambdaQueryWrapper = new QueryWrapper<SaasPidManage>().lambda()
.like(StringUtils.isNotEmpty(dto.getPid()), SaasPidManage::getPid, dto.getPid())
.eq(StringUtils.isNotEmpty(dto.getStatus()), SaasPidManage::getStatus, dto.getStatus());
Page<SaasPidManage> saasPidManagePage = saasPidManageMapper.selectPage(p, lambdaQueryWrapper);
List<SaasPidManage> records = saasPidManagePage.getRecords();
return PageUtil.toPageVO(records, saasPidManagePage);
}
@Override
public void add(SaasPidManage dto) {
dto.setStatus("1");
dto.setUsedCredit(dto.getTotalCredit() - dto.getAvailableCredit());
save(dto);
}
@Override
public void delete(String id) {
delete(id);
}
}
...@@ -14,10 +14,15 @@ import com.makeit.utils.user.common.CommonUserVO; ...@@ -14,10 +14,15 @@ import com.makeit.utils.user.common.CommonUserVO;
import com.makeit.utils.user.saas.SaasUserUtil; import com.makeit.utils.user.saas.SaasUserUtil;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.concurrent.TimeUnit;
import static com.makeit.service.platform.elder.impl.PlatElderRealTimeServiceImpl.SLEEP_ANALYSIS_KEY;
import static com.makeit.service.platform.elder.impl.PlatElderRealTimeServiceImpl.SLEEP_ANALYSIS_THRESHOLD_KEY;
/** /**
* <p> * <p>
...@@ -32,6 +37,8 @@ public class SaasSleepAnalysisModelServiceImpl extends ServiceImpl<SaasSleepAnal ...@@ -32,6 +37,8 @@ public class SaasSleepAnalysisModelServiceImpl extends ServiceImpl<SaasSleepAnal
@Autowired @Autowired
private SaasModelManageService saasModelManageService; private SaasModelManageService saasModelManageService;
@Autowired
private StringRedisTemplate redisTemplate;
@Override @Override
public SaasSleepAnalysisModel view(String id) { public SaasSleepAnalysisModel view(String id) {
...@@ -54,5 +61,8 @@ public class SaasSleepAnalysisModelServiceImpl extends ServiceImpl<SaasSleepAnal ...@@ -54,5 +61,8 @@ public class SaasSleepAnalysisModelServiceImpl extends ServiceImpl<SaasSleepAnal
saasModelManageService.updateEntity(dto.getId(),"sleep"); saasModelManageService.updateEntity(dto.getId(),"sleep");
redisTemplate.opsForValue().set(SLEEP_ANALYSIS_KEY,entity.getSleepTimeActionDuration(),1, TimeUnit.DAYS);
redisTemplate.opsForValue().set(SLEEP_ANALYSIS_THRESHOLD_KEY,entity.getSleepTimeActionThreshold(),1,TimeUnit.DAYS);
} }
} }
...@@ -121,7 +121,8 @@ public class PlatElderCenterWechatServiceImpl implements PlatElderCenterWechatSe ...@@ -121,7 +121,8 @@ public class PlatElderCenterWechatServiceImpl implements PlatElderCenterWechatSe
PlatElderIdDTO platElderIdDTO = new PlatElderIdDTO(); PlatElderIdDTO platElderIdDTO = new PlatElderIdDTO();
platElderIdDTO.setElderId(vo.getElderId()); platElderIdDTO.setElderId(vo.getElderId());
PlatElderRealTimeHeartRespiratoryVO heartRespiratoryVO = platElderRealTimeService.heartRespiratory(platElderIdDTO); PlatElderRealTimeHeartRespiratoryVO heartRespiratoryVO = platElderRealTimeService.heartRespiratory(platElderIdDTO);
vo.setElderStatus(heartRespiratoryVO.getStatus()); PlatElderRealTimeNowVO realTimeNowVO = platElderRealTimeService.nowStatus(platElderIdDTO);
vo.setElderStatus(realTimeNowVO.getStatus());
vo.setHeartRate(heartRespiratoryVO.getHeartRate()); vo.setHeartRate(heartRespiratoryVO.getHeartRate());
vo.setRespiratoryRate(heartRespiratoryVO.getRespiratoryRate()); vo.setRespiratoryRate(heartRespiratoryVO.getRespiratoryRate());
} }
...@@ -199,21 +200,9 @@ public class PlatElderCenterWechatServiceImpl implements PlatElderCenterWechatSe ...@@ -199,21 +200,9 @@ public class PlatElderCenterWechatServiceImpl implements PlatElderCenterWechatSe
PlatElderIdDTO platElderIdDTO = new PlatElderIdDTO(); PlatElderIdDTO platElderIdDTO = new PlatElderIdDTO();
platElderIdDTO.setElderId(r.getElderId()); platElderIdDTO.setElderId(r.getElderId());
PlatElderRealTimeHeartRespiratoryVO respiratoryVO = platElderRealTimeService.heartRespiratory(platElderIdDTO);
r.setElderStatus(respiratoryVO.getStatus()); PlatElderRealTimeNowVO realTimeNowVO = platElderRealTimeService.nowStatus(platElderIdDTO);
/*PlatElderRealTimeNowVO nowStatus = platElderRealTimeService.nowStatus(platElderIdDTO); r.setElderStatus(realTimeNowVO.getStatus());
if(nowStatus.getStatus()!=null){
DeviceInfoContentBreathe deviceInfoContentBreathe = workStationService.getNowDataBreathe(platElderIdDTO.getElderId(), platElderIdDTO.getDeviceId());
if (DeviceInfoContentBreatheEnum.PersonStateEnum.NOBODY.getValue().equals(nowStatus.getStatus())) {
r.setElderStatus(WorkStationStatusEnum.NowStatus.OUT.getValue());
} else if (nowStatus.getBodyMove() != null && nowStatus.getBodyMove() > turnedThreshold) {
r.setElderStatus(WorkStationStatusEnum.NowStatus.TURNED.getValue());
} else {
List<PlatElderCoordinateVO> coordinateList = platElderDayReportDayService.coordinateList(platElderIdDTO.getElderId(), platElderIdDTO.getDeviceId(), start, now);
workStationService.nowStatusRest(r, platElderIdDTO, deviceInfoContentBreathe, coordinateList);
workStationService.nowStatusSleep(r, platElderIdDTO, deviceInfoContentBreathe);
}
}*/
} }
} }
vo.setList(roomBedVos); vo.setList(roomBedVos);
......
...@@ -43,8 +43,6 @@ public class PlatLoginWechatServiceImpl implements PlatLoginWechatService { ...@@ -43,8 +43,6 @@ public class PlatLoginWechatServiceImpl implements PlatLoginWechatService {
PlatUser platUser = platUserService.getOne(new QueryWrapper<PlatUser>().lambda() PlatUser platUser = platUserService.getOne(new QueryWrapper<PlatUser>().lambda()
.eq(PlatUser::getAccount, loginDTO.getAccount()) .eq(PlatUser::getAccount, loginDTO.getAccount())
.or()
.eq(PlatUser::getMobile, loginDTO.getAccount())
); );
if (platUser == null) { if (platUser == null) {
......
...@@ -69,6 +69,7 @@ public class AlarmConfigCacheUtil implements ApplicationRunner { ...@@ -69,6 +69,7 @@ public class AlarmConfigCacheUtil implements ApplicationRunner {
if (StringUtils.equals(platDevice.getCategory(), PlatDeviceEnum.CategoryEnum.HEART.getValue())) { if (StringUtils.equals(platDevice.getCategory(), PlatDeviceEnum.CategoryEnum.HEART.getValue())) {
set.add(this.get(platDevice.getOrgId() ,PlatAlarmConfigEnum.AlarmTypeEnum.BREATHE.getValue())); set.add(this.get(platDevice.getOrgId() ,PlatAlarmConfigEnum.AlarmTypeEnum.BREATHE.getValue()));
set.add(this.get(platDevice.getOrgId() , PlatAlarmConfigEnum.AlarmTypeEnum.HEART.getValue())); set.add(this.get(platDevice.getOrgId() , PlatAlarmConfigEnum.AlarmTypeEnum.HEART.getValue()));
set.add(this.get(platDevice.getOrgId() , PlatAlarmConfigEnum.AlarmTypeEnum.OFF_BED.getValue()));
} }
if (StringUtils.equals(platDevice.getCategory(), PlatDeviceEnum.CategoryEnum.FALL.getValue())) { if (StringUtils.equals(platDevice.getCategory(), PlatDeviceEnum.CategoryEnum.FALL.getValue())) {
set.add(this.get(platDevice.getOrgId() , PlatAlarmConfigEnum.AlarmTypeEnum.FALL.getValue())); set.add(this.get(platDevice.getOrgId() , PlatAlarmConfigEnum.AlarmTypeEnum.FALL.getValue()));
......
...@@ -30,7 +30,7 @@ public class PlatAlarmRecordVO extends BaseTenantDTO { ...@@ -30,7 +30,7 @@ public class PlatAlarmRecordVO extends BaseTenantDTO {
@ApiModelProperty(value = "通知家属 数据字典 1、同步通知 2 可选通知 3 不通知") @ApiModelProperty(value = "通知家属 数据字典 1、同步通知 2 可选通知 3 不通知")
private String notifyRelation; private String notifyRelation;
@ApiModelProperty(value = "告警类型 数据字典 1 长者跌倒 2 呼吸异常 3 心率异常 4 行为异常") @ApiModelProperty(value = "告警类型 数据字典 1 长者跌倒 2 呼吸异常 3 心率异常 4 行为异常,5 离床异常")
private String alarmType; private String alarmType;
@ApiModelProperty(value = "告警时间") @ApiModelProperty(value = "告警时间")
...@@ -72,4 +72,8 @@ public class PlatAlarmRecordVO extends BaseTenantDTO { ...@@ -72,4 +72,8 @@ public class PlatAlarmRecordVO extends BaseTenantDTO {
private String deviceId; private String deviceId;
private PlatDevice device; private PlatDevice device;
@ApiModelProperty(value = "是否存在未读")
private Boolean isUnWechatRead;
@ApiModelProperty(value = "是否存在未处理")
private Boolean statusFlag;
} }
...@@ -5,6 +5,8 @@ import io.swagger.annotations.ApiModel; ...@@ -5,6 +5,8 @@ import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import java.util.List;
@ApiModel("租户端部门 查询") @ApiModel("租户端部门 查询")
@Data @Data
public class PlatOrgQueryDTO extends BaseOrgDTO { public class PlatOrgQueryDTO extends BaseOrgDTO {
...@@ -18,4 +20,7 @@ public class PlatOrgQueryDTO extends BaseOrgDTO { ...@@ -18,4 +20,7 @@ public class PlatOrgQueryDTO extends BaseOrgDTO {
@ApiModelProperty(value = "字典类型 1-居家 2-机构") @ApiModelProperty(value = "字典类型 1-居家 2-机构")
private String type; private String type;
@ApiModelProperty(value = "机构id", hidden = true)
private List<String> orgIds;
} }
...@@ -3,6 +3,7 @@ package com.makeit.vo.platform.elder.realtime; ...@@ -3,6 +3,7 @@ package com.makeit.vo.platform.elder.realtime;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import java.math.BigDecimal;
import java.util.List; import java.util.List;
@Data @Data
...@@ -18,6 +19,8 @@ public class PlatElderCoordinateVO { ...@@ -18,6 +19,8 @@ public class PlatElderCoordinateVO {
private Integer distance; private Integer distance;
@ApiModelProperty("空间人感:0表示无人,1表示活动, 2表示微动 ,3表示静止 ,跌倒设备:0无人,1跌倒") @ApiModelProperty("空间人感:0表示无人,1表示活动, 2表示微动 ,3表示静止 ,跌倒设备:0无人,1跌倒")
private Integer personState; private Integer personState;
@ApiModelProperty("跌倒设备:0无人,1跌倒")
private Integer person;
@ApiModelProperty("1 表示空间, 2 表示跌倒") @ApiModelProperty("1 表示空间, 2 表示跌倒")
private Integer type; private Integer type;
...@@ -31,5 +34,9 @@ public class PlatElderCoordinateVO { ...@@ -31,5 +34,9 @@ public class PlatElderCoordinateVO {
@ApiModelProperty("跌倒设备轨迹") @ApiModelProperty("跌倒设备轨迹")
private List<Integer> track; private List<Integer> track;
@ApiModelProperty("x")
private Double x;
@ApiModelProperty("y")
private Double y;
} }
...@@ -9,13 +9,5 @@ public class PlatElderRealTimeNowVO { ...@@ -9,13 +9,5 @@ public class PlatElderRealTimeNowVO {
@ApiModelProperty("状态") @ApiModelProperty("状态")
private String status; private String status;
@ApiModelProperty("心率")
private Integer heartRate;
@ApiModelProperty("呼吸率")
private Integer respiratoryRate;
@ApiModelProperty("体动")
private Integer bodyMove;
} }
...@@ -22,5 +22,8 @@ public class PlatElderBehaviorExceptionRecordVO { ...@@ -22,5 +22,8 @@ public class PlatElderBehaviorExceptionRecordVO {
@ApiModelProperty("时长")//min 或者 s @ApiModelProperty("时长")//min 或者 s
private Integer duration; private Integer duration;
@ApiModelProperty(value = "告警类型 数据字典 1 长者跌倒 2 呼吸异常 3 心率异常 4 行为异常, 5 离床异常")
private String alarmType;
} }
...@@ -35,5 +35,8 @@ public class PlatElderReportMonthVO { ...@@ -35,5 +35,8 @@ public class PlatElderReportMonthVO {
@ApiModelProperty("行为异常次数") @ApiModelProperty("行为异常次数")
private Integer behaviorExceptionCount; private Integer behaviorExceptionCount;
@ApiModelProperty(value = "离床异常次数")
private Integer offBedExceptionCount;
} }
...@@ -43,14 +43,12 @@ ...@@ -43,14 +43,12 @@
<if test="param.tenantId != null and param.tenantId != ''"> <if test="param.tenantId != null and param.tenantId != ''">
and pd.tenant_id = #{param.tenantId} and pd.tenant_id = #{param.tenantId}
</if> </if>
<choose> <if test="param.active !=null and param.active == 1">
<when test="param.active !=null and param.active !='' and param.active == 1"> and pd.device_license is not null
and pd.device_license is not null </if>
</when> <if test="param.active !=null and param.active == 0">
<when test="param.active !=null and param.active !='' and param.active == 0"> and pd.device_license is null
and pd.device_license is null </if>
</when>
</choose>
<if test="param.orgIds != null and param.orgIds.size() > 0 "> <if test="param.orgIds != null and param.orgIds.size() > 0 ">
AND pd.org_id in AND pd.org_id in
<foreach collection="param.orgIds" item="item" separator="," open="(" close=")" index=""> <foreach collection="param.orgIds" item="item" separator="," open="(" close=")" index="">
......
...@@ -67,5 +67,9 @@ ...@@ -67,5 +67,9 @@
</where> </where>
</select> </select>
<select id="listAll" resultType="com.makeit.entity.platform.auth.PlatUser">
SELECT id, mobile, email, account, id FROM plat_user WHERE del_flag = '0'
</select>
</mapper> </mapper>
...@@ -5,8 +5,11 @@ import org.apache.commons.lang3.StringUtils; ...@@ -5,8 +5,11 @@ import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.Objects;
@Component @Component
@ConfigurationProperties("mqtt") @ConfigurationProperties("mqtt")
...@@ -16,7 +19,12 @@ public class MqttConfig { ...@@ -16,7 +19,12 @@ public class MqttConfig {
private MqttPushClient mqttPushClient; private MqttPushClient mqttPushClient;
@Autowired @Autowired
private IotTokenService iotTokenService; private IotTokenService iotTokenService;
@Autowired
private StringRedisTemplate redisTemplate;
public static final String DEVICE_BR_ANALYSIS = "device:brhr:analysis:";
public static final String DEVICE_SPACE_TEMP_DATA = "device:space:tempData:";
public static final String DEVICE_FALL_TEMP_DATA = "device:fall:tempData:";
private String username; private String username;
private String password; private String password;
private String hostUrl; private String hostUrl;
...@@ -52,6 +60,10 @@ public class MqttConfig { ...@@ -52,6 +60,10 @@ public class MqttConfig {
mqttPushClient.connect(hostUrl, clientId, username, password, timeout, keepalive); mqttPushClient.connect(hostUrl, clientId, username, password, timeout, keepalive);
// 订阅主题 // 订阅主题
mqttPushClient.subscribe(defaultTopic, 0); mqttPushClient.subscribe(defaultTopic, 0);
redisTemplate.delete(Objects.requireNonNull(redisTemplate.keys(DEVICE_BR_ANALYSIS + "*")));
redisTemplate.delete(Objects.requireNonNull(redisTemplate.keys(DEVICE_SPACE_TEMP_DATA + "*")));
redisTemplate.delete(Objects.requireNonNull(redisTemplate.keys(DEVICE_FALL_TEMP_DATA + "*")));
return mqttPushClient; return mqttPushClient;
} }
......
...@@ -2,18 +2,25 @@ package com.makeit.mqtt; ...@@ -2,18 +2,25 @@ package com.makeit.mqtt;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.makeit.common.entity.BaseEntity;
import com.makeit.dto.platform.alarm.PlatAlarmCheckDTO; import com.makeit.dto.platform.alarm.PlatAlarmCheckDTO;
import com.makeit.entity.platform.alarm.PlatAlarmConfig; import com.makeit.entity.platform.alarm.PlatAlarmConfig;
import com.makeit.entity.platform.device.PlatDevice; import com.makeit.entity.platform.device.PlatDevice;
import com.makeit.entity.saas.analysis.SaasSleepAnalysisModel;
import com.makeit.global.aspect.tenant.TenantIdIgnore; import com.makeit.global.aspect.tenant.TenantIdIgnore;
import com.makeit.module.iot.enums.DeviceState; import com.makeit.module.iot.enums.DeviceState;
import com.makeit.module.iot.vo.DeviceInfo; import com.makeit.module.iot.vo.DeviceInfo;
import com.makeit.module.iot.vo.HeaderInfo; import com.makeit.module.iot.vo.HeaderInfo;
import com.makeit.service.platform.alarm.PlatAlarmConfigService;
import com.makeit.service.platform.alarm.alarmStrategy.IAlarm; import com.makeit.service.platform.alarm.alarmStrategy.IAlarm;
import com.makeit.service.platform.device.PlatDeviceService; import com.makeit.service.platform.device.PlatDeviceService;
import com.makeit.service.saas.SaasSleepAnalysisModelService;
import com.makeit.utils.AlarmConfigCacheUtil; import com.makeit.utils.AlarmConfigCacheUtil;
import com.makeit.utils.DeviceCacheUtil; import com.makeit.utils.DeviceCacheUtil;
import com.makeit.utils.redis.RedisUtil;
import org.apache.commons.collections4.CollectionUtils; 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.IMqttDeliveryToken;
import org.eclipse.paho.client.mqttv3.MqttCallback; import org.eclipse.paho.client.mqttv3.MqttCallback;
import org.eclipse.paho.client.mqttv3.MqttClient; import org.eclipse.paho.client.mqttv3.MqttClient;
...@@ -26,8 +33,11 @@ import org.springframework.scheduling.annotation.Async; ...@@ -26,8 +33,11 @@ import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.util.StopWatch; import org.springframework.util.StopWatch;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
...@@ -38,8 +48,22 @@ public class PushCallback implements MqttCallback { ...@@ -38,8 +48,22 @@ public class PushCallback implements MqttCallback {
public static final String DEVICE_BR_DATA = "device:brhr:data:"; 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_SPACE_DATA = "device:space:data:";
public static final String DEVICE_FALL_DATA = "device:fall:data:"; public static final String DEVICE_FALL_DATA = "device:fall:data:";
public static final String DEVICE_OFF_BED_DATA = "device:off_bed:data:";
public static final String SLEEP_ANALYSIS_KEY = "saas:sleep:analysis";
public static final String DEVICE_BR_ANALYSIS = "device:brhr:analysis:";
public static final String DEVICE_SPACE_TEMP_DATA = "device:space:tempData:";
public static final String DEVICE_FALL_TEMP_DATA = "device:fall:tempData:";
public static final String DEVICE_OFF_BED_TEMP_DATA = "device:off_bed:tempData:";
public static final String DEVICE_WRITE_PROPERTY_KEY = "device:write_property:";
public static final String REPORT_PROPERTY = "REPORT_PROPERTY"; public static final String REPORT_PROPERTY = "REPORT_PROPERTY";
public static final String WRITE_PROPERTY = "WRITE_PROPERTY";
public static final String WRITE_PROPERTY_REPLY = "WRITE_PROPERTY_REPLY";
@Autowired @Autowired
private MqttConfig mqttConfig; private MqttConfig mqttConfig;
...@@ -56,6 +80,10 @@ public class PushCallback implements MqttCallback { ...@@ -56,6 +80,10 @@ public class PushCallback implements MqttCallback {
private PlatDeviceService platDeviceService; private PlatDeviceService platDeviceService;
@Autowired @Autowired
private StringRedisTemplate redisTemplate; private StringRedisTemplate redisTemplate;
@Autowired
private SaasSleepAnalysisModelService saasSleepAnalysisModelService;
@Resource
private PlatAlarmConfigService alarmConfigService;
@Override @Override
...@@ -78,6 +106,7 @@ public class PushCallback implements MqttCallback { ...@@ -78,6 +106,7 @@ public class PushCallback implements MqttCallback {
DeviceInfo device = JSON.parseObject(payload, DeviceInfo.class); DeviceInfo device = JSON.parseObject(payload, DeviceInfo.class);
// todo // todo
syncProperties(device);
checkAlarm(device); checkAlarm(device);
} }
...@@ -88,6 +117,39 @@ public class PushCallback implements MqttCallback { ...@@ -88,6 +117,39 @@ public class PushCallback implements MqttCallback {
} }
/** /**
* IOT端设备属性修改后同步
* @param device
*/
public void syncProperties(DeviceInfo device) {
if (!(WRITE_PROPERTY.equals(device.getMessageType()) || WRITE_PROPERTY_REPLY.equals(device.getMessageType()))) {
return;
}
// 记录修改的属性
String redisKey = DEVICE_WRITE_PROPERTY_KEY + device.getMessageId();
if (WRITE_PROPERTY.equals(device.getMessageType())) {
JSONObject properties = device.getProperties();
RedisUtil.set(redisKey, properties, 10, TimeUnit.SECONDS);
}
// 收到修改属性回复
if (WRITE_PROPERTY_REPLY.equals(device.getMessageType())) {
JSONObject properties = RedisUtil.get(redisKey);
if (properties == null) {
return;
}
String key = properties.keySet().stream().findFirst().orElse("key");
JSONObject replayProperties = device.getProperties();
String success = replayProperties.getString(key);
if (!"0".equals(success)) {
return;
}
CompletableFuture.runAsync(() -> {
platDeviceService.syncIotProperties(device.getDeviceId(), properties);
RedisUtil.delete(redisKey);
}); // 要加线程池
}
}
/**
* 触发告警耗时 3.07s * 触发告警耗时 3.07s
* 未触发告警耗时 0.08s * 未触发告警耗时 0.08s
* @param device * @param device
...@@ -97,16 +159,25 @@ public class PushCallback implements MqttCallback { ...@@ -97,16 +159,25 @@ public class PushCallback implements MqttCallback {
public void checkAlarm(DeviceInfo device) { public void checkAlarm(DeviceInfo device) {
HeaderInfo headers = device.getHeaders(); HeaderInfo headers = device.getHeaders();
List<HeaderInfo.Bind> bindings = headers.getBindings(); List<HeaderInfo.Bind> bindings = headers.getBindings();
// TODO 先这样判断
Long timestamp = device.getTimestamp();
long currentSecond = System.currentTimeMillis() / 1000;
// 先通过产品名称判断
if (REPORT_PROPERTY.equals(device.getMessageType()) && headers.getProductName().contains("呼吸")) { if (REPORT_PROPERTY.equals(device.getMessageType()) && headers.getProductName().contains("呼吸")) {
cacheBrDeviceData(device, currentSecond);
redisTemplate.opsForValue().set(DEVICE_BR_DATA + device.getDeviceId(),JSON.toJSONString(device.getProperties()), redisTemplate.opsForValue().set(DEVICE_BR_DATA + device.getDeviceId(),JSON.toJSONString(device.getProperties()),
5000, TimeUnit.MILLISECONDS); 5000, TimeUnit.MILLISECONDS);
} }
if (REPORT_PROPERTY.equals(device.getMessageType()) && headers.getProductName().contains("空间")) { if (REPORT_PROPERTY.equals(device.getMessageType()) && headers.getProductName().contains("空间")) {
cacheSpaceFallDeviceData(DEVICE_SPACE_TEMP_DATA, device, currentSecond);
redisTemplate.opsForValue().set(DEVICE_SPACE_DATA + device.getDeviceId(),JSON.toJSONString(device.getProperties()), redisTemplate.opsForValue().set(DEVICE_SPACE_DATA + device.getDeviceId(),JSON.toJSONString(device.getProperties()),
5000, TimeUnit.MILLISECONDS); 5000, TimeUnit.MILLISECONDS);
} }
if (REPORT_PROPERTY.equals(device.getMessageType()) && headers.getProductName().contains("跌倒")) { if (REPORT_PROPERTY.equals(device.getMessageType()) && headers.getProductName().contains("跌倒")) {
cacheSpaceFallDeviceData(DEVICE_FALL_TEMP_DATA, device, currentSecond);
redisTemplate.opsForValue().set(DEVICE_FALL_DATA + device.getDeviceId(),JSON.toJSONString(device.getProperties()), redisTemplate.opsForValue().set(DEVICE_FALL_DATA + device.getDeviceId(),JSON.toJSONString(device.getProperties()),
5000, TimeUnit.MILLISECONDS); 5000, TimeUnit.MILLISECONDS);
} }
...@@ -120,9 +191,6 @@ public class PushCallback implements MqttCallback { ...@@ -120,9 +191,6 @@ public class PushCallback implements MqttCallback {
for (HeaderInfo.Bind binding : bindings) { for (HeaderInfo.Bind binding : bindings) {
try { try {
String iot_tenantId = binding.getId(); String iot_tenantId = binding.getId();
StopWatch stopWatch = new StopWatch();
stopWatch.start("checkAlarm-1");
JSONObject properties = device.getProperties(); JSONObject properties = device.getProperties();
//iot设备id //iot设备id
...@@ -156,10 +224,6 @@ public class PushCallback implements MqttCallback { ...@@ -156,10 +224,6 @@ public class PushCallback implements MqttCallback {
} }
} }
} }
stopWatch.stop();
logger.info(stopWatch.prettyPrint());
}catch (Exception e){ }catch (Exception e){
logger.error("告警异常pushCallback:",e); logger.error("告警异常pushCallback:",e);
} }
...@@ -168,7 +232,36 @@ public class PushCallback implements MqttCallback { ...@@ -168,7 +232,36 @@ public class PushCallback implements MqttCallback {
} }
private void cacheSpaceFallDeviceData(String deviceSpaceTempData, DeviceInfo device, long currentSecond) {
long maxSize = 10L;
String key = deviceSpaceTempData + device.getDeviceId();
redisTemplate.opsForZSet().add(key,JSON.toJSONString(device),currentSecond);
redisTemplate.expire(key,60,TimeUnit.SECONDS);
}
private void cacheBrDeviceData(DeviceInfo device, long currentSecond) {
// 缓存呼吸设备某段时间的数据,hash 最大长度 duration
String key = DEVICE_BR_ANALYSIS + device.getDeviceId();
long duration = getSleepTimeActionDuration();
redisTemplate.opsForZSet().add(key,JSON.toJSONString(device),currentSecond);
redisTemplate.expire(key,duration + 180,TimeUnit.SECONDS);
}
private Long getSleepTimeActionDuration() {
String sleepTimeActionDuration = "";
String result = redisTemplate.opsForValue().get(SLEEP_ANALYSIS_KEY);
if (result != null) {
sleepTimeActionDuration = result;
} else {
SaasSleepAnalysisModel analysisModel = saasSleepAnalysisModelService.getOne(new QueryWrapper<SaasSleepAnalysisModel>().lambda()
.orderByDesc(BaseEntity::getCreateBy)
.last("limit 1"));
redisTemplate.opsForValue().set(SLEEP_ANALYSIS_KEY,analysisModel.getSleepTimeActionDuration(),1,TimeUnit.DAYS);
sleepTimeActionDuration = analysisModel.getSleepTimeActionDuration();
}
BigDecimal s = new BigDecimal(sleepTimeActionDuration).multiply(new BigDecimal(3600));
return s.longValue();
}
} }
...@@ -62,10 +62,6 @@ mybatis-plus: ...@@ -62,10 +62,6 @@ mybatis-plus:
configuration: configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
logging:
level:
root: debug
file: file:
filePath: file filePath: file
......
...@@ -69,6 +69,11 @@ storage: ...@@ -69,6 +69,11 @@ storage:
type: local type: local
url: https://saas.qa.insightica.cn/api/${file.filePath} url: https://saas.qa.insightica.cn/api/${file.filePath}
logging:
level:
root: info
config: classpath:logback-spring-test.xml
# aliBaseDir: point # aliBaseDir: point
# aliEndpoint: obs.cn-south-1.myhuaweicloud.com # aliEndpoint: obs.cn-south-1.myhuaweicloud.com
# aliAccessKeyId: HY7KT4GKCOGSRCHLXBAR # aliAccessKeyId: HY7KT4GKCOGSRCHLXBAR
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
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"/> 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"> <springProfile name="prod">
<property name="logback.logdir" value="/home/group1_lzy/iot-server/logs"/> <property name="logback.logdir" value="/opt/iot-platform-server/logs"/>
<property name="logback.appname" value="app"/> <property name="logback.appname" value="app"/>
</springProfile> </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