Commit c0a94e2a by huangjy

Merge remote-tracking branch 'origin/dev'

# Conflicts:
#	db/上线后sql/update.sql
#	server-common/src/main/java/com/makeit/module/iot/service/IotDevicePropertiesOperateService.java
#	server-common/src/main/java/com/makeit/module/iot/service/IotProductDeviceService.java
#	server-module/src/main/java/com/makeit/module/controller/children/alarm/PlatAlarmRecordChildrenController.java
#	server-service/src/main/java/com/makeit/dto/wechat/device/PlatDeviceAttrWechatDTO.java
#	server-service/src/main/java/com/makeit/service/platform/alarm/impl/PlatAlarmRecordServiceImpl.java
#	server-service/src/main/java/com/makeit/service/platform/device/PlatDeviceService.java
#	server-service/src/main/java/com/makeit/service/platform/device/impl/PlatDeviceServiceImpl.java
#	server-service/src/main/java/com/makeit/service/platform/elder/PlatElderService.java
#	server-service/src/main/java/com/makeit/service/platform/elder/impl/PlatElderRealTimeServiceImpl.java
#	server-service/src/main/java/com/makeit/service/platform/elder/impl/PlatElderReportMonthServiceImpl.java
#	server-service/src/main/java/com/makeit/service/platform/elder/impl/PlatElderSleepServiceImpl.java
parents 14c8c200 7079f975
Showing with 929 additions and 424 deletions
ALTER TABLE `plat_device_other`
ALTER TABLE `plat_device_other`
......@@ -4,4 +4,20 @@ ADD COLUMN `secure_key` varchar(255) COMMENT '密钥key' AFTER `secure_id`;
ALTER TABLE `plat_alarm_record`
ADD COLUMN `misinformation_flag` char(1) DEFAULT 0 COMMENT '是否误报 1 误报 0 没有误报' AFTER `read_flag`;
\ No newline at end of file
ADD COLUMN `misinformation_flag` char(1) DEFAULT 0 COMMENT '是否误报 1 误报 0 没有误报' AFTER `read_flag`;
ALTER TABLE `plat_elder_report_month`
MODIFY COLUMN `sleep_result` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '睡眠结果' AFTER `day`,
MODIFY COLUMN `heart_rate` int(11) COMMENT '心率' AFTER `sleep_result`,
MODIFY COLUMN `respiratory_rate` int(11) COMMENT '呼吸率' AFTER `heart_rate`,
MODIFY COLUMN `fail_count` int(11) COMMENT '跌倒次数' AFTER `respiratory_rate`,
MODIFY COLUMN `heart_exception_count` int(11) COMMENT '心率异常次数' AFTER `fail_count`,
MODIFY COLUMN `respiratory_exception_count` int(11) COMMENT '呼吸异常次数' AFTER `heart_exception_count`,
MODIFY COLUMN `behavior_exception_count` int(11) COMMENT '行为异常次数' AFTER `respiratory_exception_count`;
ALTER TABLE `sys_api_secret`
CHANGE COLUMN `publicKey` `public_key` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '公钥' AFTER `platform`,
CHANGE COLUMN `privateKey` `private_key` varchar(2048) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '私钥' AFTER `public_key`,
CHANGE COLUMN `orgId` `org_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '机构id' AFTER `private_key`;
\ No newline at end of file
......@@ -222,6 +222,13 @@
<version>${weixin-java.version}</version>
</dependency>
<dependency>
<groupId>com.github.binarywang</groupId>
<artifactId>weixin-java-mp</artifactId>
<version>${weixin-java.version}</version>
</dependency>
<!--工作流模块使用-->
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
......
package com.makeit.api.external.filter;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.makeit.api.external.util.RSAUtils;
import com.makeit.module.system.entity.SysApiSecret;
import com.makeit.module.system.service.SysApiSecretService;
import com.makeit.utils.old.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
......@@ -18,7 +22,8 @@ public class SignAuthFilter implements Filter {
private static Logger logger = LoggerFactory.getLogger(SignAuthFilter.class);
@Autowired
private SysApiSecretService sysApiSecretService;
@Override
public void init(FilterConfig filterConfig) {
......@@ -30,22 +35,30 @@ public class SignAuthFilter implements Filter {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
try {
String platform = request.getHeader("platform");
if (StringUtils.isEmpty(platform)) {
response.sendError(500, "未指定platform");
return;
}
String sign = request.getHeader("token");
if (StringUtils.isEmpty(sign)) {
response.sendError(403, "Forbidden");
response.sendError(403, "token为空");
return;
}
logger.info("getted Authorization is ---> " + sign);
// 获取客户端ip
/* String ip = IpUtil.getIpAddr(request);
logger.info("getted ip is ---> " + ip);*/
SysApiSecret sysApiSecret = sysApiSecretService.getOne(new QueryWrapper<SysApiSecret>()
.lambda().eq(SysApiSecret::getPlatform,platform));
if (sysApiSecret == null) {
response.sendError(500, "请配置接入方密钥信息");
return;
}
MyRequestWrapper requestWrapper = new MyRequestWrapper(request);
String bodyString = new String(requestWrapper.getBody(), StandardCharsets.UTF_8);
logger.info("getted requestbody data is ---> " + bodyString);
String decryptJson = RSAUtils.privateDecrypt(sign, RSAUtils.getPrivateKey(RSAUtils.PRIVATE_KEY), "UTF-8");
String decryptJson = RSAUtils.privateDecrypt(sign, RSAUtils.getPrivateKey(sysApiSecret.getPrivateKey()), "UTF-8");
boolean couldPass = decryptJson.replaceAll("\n","").replaceAll(" ","").trim()
.equals(bodyString.replaceAll(" ","").trim());
......
......@@ -35,15 +35,16 @@ public class RSAUtils {
public static void main(String[] args) throws Exception {
Map<String, String> keys = createKeys(2048);
System.out.println(keys);
System.out.println("privateKey:" + keys.get("privateKey"));
System.out.println("publicKey:" + keys.get("publicKey"));
RSAPublicKey publicKey = getPublicKey(keys.get("publicKey"));
RSAPublicKey publicKey = getPublicKey(PUBLIC_KEY);
String encrypt = publicEncrypt("{\"page\":1,\"limit\":10,\"data\":{}}", publicKey, "UTF-8");
System.out.println(encrypt);
RSAPrivateKey privateKey = getPrivateKey(keys.get("privateKey"));
RSAPrivateKey privateKey = getPrivateKey(PRIVATE_KEY);
String decrypt = privateDecrypt(encrypt, privateKey, "UTF-8");
System.out.println(decrypt);
......
......@@ -173,6 +173,12 @@
<artifactId>weixin-java-miniapp</artifactId>
</dependency>
<!--微信公众号-->
<dependency>
<groupId>com.github.binarywang</groupId>
<artifactId>weixin-java-mp</artifactId>
</dependency>
</dependencies>
<profiles>
......
......@@ -91,7 +91,7 @@ public class IotDevicePropertiesOperateService extends IotCommonService {
ResponseMessage responseMessage = sendPut(url, request);
log.info("写入设备属性信息,返回信息:{}", responseMessage.getMessage());
if (responseMessage.getStatus() != 200) {
String errorMsg = "设备:" + deviceId + ",属性:" + entry.getKey() + "写入失败:" + responseMessage.getMessage();
String errorMsg = responseMessage.getMessage();
log.error("设备写入失败:{}",errorMsg);
return errorMsg;
}
......
......@@ -265,27 +265,6 @@ public class IotProductDeviceService extends IotCommonService {
return tempList;
}
return Lists.newArrayList();
/* long minute = 1440;
List<DeviceInfoContentBreathe> breatheList = Lists.newArrayList();
DeviceInfoContentBreathe deviceInfoContentBreathe;
for (long i = 1; i <= minute; i++) {
int brRandomLong = RandomUtils.nextInt(11,28);
int hrRandomLong = RandomUtils.nextInt(55,125);
int movebodyRandomLong = RandomUtils.nextInt(40,90);
deviceInfoContentBreathe = new DeviceInfoContentBreathe();
LocalDateTime localDateTime = startTime.plusMinutes(i);
long timeStamp = localDateTime.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();
deviceInfoContentBreathe.setTimestamp(timeStamp);
DeviceInfoContentBreathe.Properties properties = new DeviceInfoContentBreathe.Properties();
properties.setBr(brRandomLong);
properties.setHr(hrRandomLong);
properties.setBodymove(movebodyRandomLong);
deviceInfoContentBreathe.setProperties(properties);
breatheList.add(deviceInfoContentBreathe);
}
return breatheList;*/
}
public static String formatLongTime(long time) {
......
......@@ -74,5 +74,12 @@ public class DeviceInfoContentBreathe {
@JsonProperty("point")
// 呼吸波形
private List<Integer> point;
private int brStopThreshold; // 发生次数阈值
private int brFastThreshold; // 发生次数阈值
private int brSlowThreshold; // 发生次数阈值
private int hrFastThreshold; // 发生次数阈值
private int hrSlowThreshold; // 发生次数阈值
}
}
package com.makeit.module.system.entity;
import com.baomidou.mybatisplus.annotation.TableName;
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;
/**
* 第三方平台api
*
* @author lzy
* @email
* @date 2021-08-15 08:24:09
*/
@Data
@ApiModel("第三方平台api")
@TableName(value = "sys_api_secret")
public class SysApiSecret extends BaseEntity {
@ApiModelProperty("平台")
private String platform;
@ApiModelProperty("公钥")
private String publicKey;
@ApiModelProperty("私钥")
private String privateKey;
@ApiModelProperty("机构id")
private String orgId;
@ApiModelProperty("描述")
private String description;
}
package com.makeit.module.system.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.makeit.module.system.entity.Country;
import com.makeit.module.system.entity.SysApiSecret;
/**
* <p>
* 第三方api Mapper 接口
* </p>
*
* @author ywc
* @since 2021-06-09
*/
public interface SysApiSecretMapper extends BaseMapper<SysApiSecret> {
}
package com.makeit.module.system.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.makeit.module.system.entity.SysApiSecret;
public interface SysApiSecretService extends IService<SysApiSecret> {
}
package com.makeit.module.system.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.makeit.module.system.entity.SysApiSecret;
import com.makeit.module.system.mapper.SysApiSecretMapper;
import com.makeit.module.system.service.SysApiSecretService;
import org.springframework.stereotype.Service;
@Service
public class SysApiSecretServiceImpl extends ServiceImpl<SysApiSecretMapper, SysApiSecret> implements SysApiSecretService {
}
package com.makeit.utils.msg.config;
import cn.binarywang.wx.miniapp.api.WxMaService;
import cn.binarywang.wx.miniapp.api.impl.WxMaServiceImpl;
import cn.binarywang.wx.miniapp.config.WxMaConfig;
import cn.binarywang.wx.miniapp.config.impl.WxMaRedissonConfigImpl;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.api.impl.WxMpServiceImpl;
import me.chanjar.weixin.mp.config.WxMpConfigStorage;
import me.chanjar.weixin.mp.config.impl.WxMpRedissonConfigImpl;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class WxConfig {
@Value("${wx.miniapp.config.appid}")
private String appId;
@Value("${wx.miniapp.config.secret}")
private String appSecret;
@Value("${wx.mp.config.appid}")
private String mpAppId;
@Value("${wx.mp.config.secret}")
private String mpSecret;
@Autowired
private RedissonClient redissonClient;
@Bean
public WxMaService wxMaService(){
WxMaServiceImpl wxMaService = new WxMaServiceImpl();
wxMaService.setWxMaConfig(wxMaConfig());
return wxMaService;
}
public WxMaConfig wxMaConfig(){
WxMaRedissonConfigImpl wxMaRedissonConfig = new WxMaRedissonConfigImpl(redissonClient);
wxMaRedissonConfig.setAppid(appId);
wxMaRedissonConfig.setSecret(appSecret);
return wxMaRedissonConfig;
}
@Bean
public WxMpService wxMpService(){
WxMpServiceImpl wxMpService = new WxMpServiceImpl();
wxMpService.setWxMpConfigStorage(wxMpConfigStorage());
return wxMpService;
}
public WxMpConfigStorage wxMpConfigStorage(){
WxMpRedissonConfigImpl wxMpRedissonConfig = new WxMpRedissonConfigImpl(redissonClient);
wxMpRedissonConfig.setAppId(mpAppId);
wxMpRedissonConfig.setSecret(mpSecret);
return wxMpRedissonConfig;
}
}
package com.makeit.utils.msg.sender;
import cn.binarywang.wx.miniapp.api.WxMaService;
import cn.hutool.core.date.DateUtil;
import com.makeit.utils.msg.SendTypeEnum;
import com.makeit.utils.msg.dto.MsgSendDTO;
import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.bean.template.WxMpTemplateData;
import me.chanjar.weixin.mp.bean.template.WxMpTemplateMessage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
@Component
@Slf4j
public class WxSpSender implements IMsgSender{
@Autowired
private WxMaService wxMaService;
@Autowired
private WxMpService wxMpService;
/**
* 小程序公众号消息
* zn5fBS9cqjnN5UB78tAbm53M3dXufR2b5K1a8mkhXCY
*
* 告警对象{{thing2.DATA}}
* 告警时间{{time3.DATA}}
* 告警地点{{thing4.DATA}}
* 事件类型{{thing8.DATA}}
* 跳转文案点击查看详情
*
* @param msgDTO
*/
@Override
public void send(MsgSendDTO msgDTO) {
List<WxMpTemplateData> mpData = Arrays.asList(
new WxMpTemplateData("thing8", "报警内容"),
new WxMpTemplateData("thing4", "固定值"),
new WxMpTemplateData("thing2", "老人姓名"),
new WxMpTemplateData("time3", DateUtil.format(new Date(),"yyyy-MM-dd HH:mm:ss"))
);
try {
//oBmPb5o9T3q-EMsxfhPg_9OjO5k4 lixl公众号openid
//oM2OI67H11zTZL88X99PxL6rAS3Y
//WxMpUser wxMpUser = wxMpService.getUserService().userInfo("oM2OI6zZQBB-kL6_0kaMM6adVb1E");
//oM2OI6zZQBB-kL6_0kaMM6adVb1E 小程序openId
// WxMpUserList wxMpUserList = wxMpService.getUserService().userList();
//WxMpUser wxMpUser = wxMpService.getUserService().userInfo("oM2OI67H11zTZL88X99PxL6rAS3Y");
WxMpTemplateMessage wxMpTemplateMessage = WxMpTemplateMessage.builder().toUser("oM2OI67H11zTZL88X99PxL6rAS3Y")
.templateId("zn5fBS9cqjnN5UB78tAbm53M3dXufR2b5K1a8mkhXCY")
.data(mpData)
.build();
wxMpService.getTemplateMsgService().sendTemplateMsg(wxMpTemplateMessage);
log.info("发送小程序消息成功");
} catch (WxErrorException e) {
log.error("发送小程序消息失败:",e);
}
}
@Override
public boolean support(SendTypeEnum sendTypeEnum) {
return false;
}
}
......@@ -7,6 +7,7 @@ import com.makeit.common.page.PageVO;
import com.makeit.common.response.ApiResponseEntity;
import com.makeit.common.response.ApiResponseUtils;
import com.makeit.dto.platform.alarm.PlatAlarmRecordQueryDTO;
import com.makeit.global.aspect.tenant.TenantIdIgnore;
import com.makeit.service.platform.alarm.PlatAlarmRecordService;
import com.makeit.vo.platform.alarm.PlatAlarmRecordVO;
import io.swagger.annotations.Api;
......@@ -27,18 +28,21 @@ public class PlatAlarmRecordChildrenController {
@ApiOperation("列表")
@PostMapping("page")
@TenantIdIgnore
public ApiResponseEntity<PageVO<PlatAlarmRecordVO>> page(@RequestBody PageReqDTO<PlatAlarmRecordQueryDTO> dto) {
//只能看到发给关联的长者告警
return ApiResponseUtils.success(platAlarmRecordService.childrenPage(dto));
}
@ApiOperation("查看")
@PostMapping("view")
@TenantIdIgnore
public ApiResponseEntity<PlatAlarmRecordVO> view(@RequestBody BaseIdDTO dto) {
return ApiResponseUtils.success(platAlarmRecordService.view(dto.getId()));
}
@ApiOperation("已读")
@PostMapping("read")
@TenantIdIgnore
public ApiResponseEntity<Void> read(@RequestBody BaseIdDTO dto) {
platAlarmRecordService.read(dto.getId());
return ApiResponseUtils.success();
......@@ -46,6 +50,7 @@ public class PlatAlarmRecordChildrenController {
@ApiOperation("未读条数")
@PostMapping("unreadCount")
@TenantIdIgnore
public ApiResponseEntity<Integer> unreadCount(@RequestBody PlatAlarmRecordQueryDTO dto) {
Integer count = platAlarmRecordService.unreadCount(dto);
return ApiResponseUtils.success(count);
......@@ -53,6 +58,7 @@ public class PlatAlarmRecordChildrenController {
@ApiOperation("误报")
@PostMapping("misinformation")
@TenantIdIgnore
public ApiResponseEntity<Void> misinformation(@RequestBody BaseIdDTO dto) {
platAlarmRecordService.misinformation(dto.getId());
return ApiResponseUtils.success();
......
......@@ -6,6 +6,8 @@ import com.makeit.common.response.ApiResponseEntity;
import com.makeit.common.response.ApiResponseUtils;
import com.makeit.dto.platform.elder.PlatElderQueryDTO;
import com.makeit.dto.platform.elder.add.PlatElderDTOVO;
import com.makeit.global.annotation.AuthIgnore;
import com.makeit.global.aspect.tenant.TenantIdIgnore;
import com.makeit.service.platform.elder.PlatElderService;
import com.makeit.vo.platform.elder.PlatElderListVO;
import com.makeit.vo.wechat.elder.PlatElderWechatSimpleVO;
......@@ -41,6 +43,13 @@ public class PlatElderChildrenController {
return ApiResponseUtils.success(platElderService.list(dto));
}
@ApiOperation("根据老人姓名和证件号查询")
@PostMapping("listByElder")
@TenantIdIgnore
public ApiResponseEntity<List<PlatElderListVO>> listByElder(@RequestBody PlatElderQueryDTO dto) {
return ApiResponseUtils.success(platElderService.listByElder(dto));
}
@ApiOperation("我的家庭")
@PostMapping("listMy")
public ApiResponseEntity<List<PlatElderWechatSimpleVO>> listMy() {
......
......@@ -4,8 +4,12 @@ package com.makeit.module.controller.children.elder;
import com.makeit.common.response.ApiResponseEntity;
import com.makeit.common.response.ApiResponseUtils;
import com.makeit.dto.platform.elder.PlatElderIdDTO;
import com.makeit.dto.platform.elder.PlatElderQueryDTO;
import com.makeit.dto.platform.elder.children.PlatElderChildrenInfoWechatDTOVO;
import com.makeit.entity.platform.elder.PlatElderChildrenInfo;
import com.makeit.global.aspect.tenant.TenantIdIgnore;
import com.makeit.service.platform.elder.PlatElderChildrenInfoService;
import com.makeit.vo.platform.elder.PlatElderListVO;
import com.makeit.vo.wechat.elder.PlatElderChildrenInfoWechatVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
......@@ -16,6 +20,8 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* <p>
* 长者子女账号 前端控制器
......@@ -38,6 +44,15 @@ public class PlatElderChildrenInfoChildrenController {
return ApiResponseUtils.success(platElderChildrenInfoService.view());
}
@ApiOperation("根据openid选择老人列表")
@PostMapping("listByOpenid")
@TenantIdIgnore
public ApiResponseEntity<List<PlatElderChildrenInfoWechatVO>> listByOpenid(@RequestBody PlatElderChildrenInfo platElderChildrenInfo) {
return ApiResponseUtils.success(platElderChildrenInfoService.listByOpenid(platElderChildrenInfo.getOpenid()));
}
@ApiOperation("编辑")
@PostMapping("edit")
public ApiResponseEntity<?> edit(@Validated @RequestBody PlatElderChildrenInfoWechatDTOVO dto) {
......
......@@ -2,6 +2,7 @@ package com.makeit.module.controller.children.elder;
import com.makeit.common.response.ApiResponseEntity;
import com.makeit.common.response.ApiResponseUtils;
import com.makeit.global.aspect.tenant.TenantIdIgnore;
import com.makeit.service.wechat.PlatElderChildrenInfoUserLoginWechatService;
import com.makeit.utils.third.wechat.WechatLoginPhoneDTO;
import com.makeit.utils.user.wechat.WechatUserInfo;
......@@ -23,6 +24,7 @@ public class PlatElderChildrenInfoUserLoginChildrenController {
@ApiOperation(value = "登录")
@PostMapping(value = "/login")
@TenantIdIgnore
public ApiResponseEntity<WechatUserInfo> login(@RequestBody WechatLoginPhoneDTO dto) {
return ApiResponseUtils.success(platElderChildrenInfoUserLoginWechatService.login(dto));
}
......
......@@ -4,7 +4,6 @@ package com.makeit.module.controller.children.elder;
import com.makeit.common.response.ApiResponseEntity;
import com.makeit.common.response.ApiResponseUtils;
import com.makeit.dto.platform.elder.PlatElderReportDTO;
import com.makeit.global.annotation.AuthIgnore;
import com.makeit.service.platform.elder.PlatElderDayReportWeekService;
import com.makeit.vo.platform.elder.realtime.PlatElderCoordinateVO;
import com.makeit.vo.platform.elder.report.day.*;
......@@ -104,13 +103,5 @@ public class PlatElderReportWeekChildrenController {
}
@ApiOperation("定时任务")
@PostMapping("heartRespiratoryJob")
@AuthIgnore
public ApiResponseEntity<String> heartRespiratoryJob() {
platElderDayReportWeekService.heartRespiratoryJob();
return ApiResponseUtils.success();
}
}
......@@ -8,6 +8,8 @@ import com.makeit.common.response.ApiResponseEntity;
import com.makeit.common.response.ApiResponseUtils;
import com.makeit.dto.platform.elder.children.PlatElderChildrenInfoDTOVO;
import com.makeit.dto.platform.elder.children.PlatElderChildrenInfoQueryDTO;
import com.makeit.global.annotation.AuthIgnore;
import com.makeit.global.aspect.tenant.TenantIdIgnore;
import com.makeit.service.platform.elder.PlatElderChildrenInfoService;
import com.makeit.vo.platform.elder.PlatElderChildrenInfoListVO;
import io.swagger.annotations.Api;
......
......@@ -7,8 +7,9 @@ import com.makeit.dto.wechat.device.PlatDeviceAttrWechatDTO;
import com.makeit.global.annotation.AuthIgnore;
import com.makeit.global.aspect.tenant.TenantIdIgnore;
import com.makeit.service.platform.device.PlatDeviceService;
import com.makeit.service.platform.elder.PlatElderReportMonthService;
import com.makeit.service.platform.elder.PlatElderSleepService;
import com.makeit.task.IotSyncTask;
import com.makeit.task.PlatElderReportTask;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -31,29 +32,48 @@ import org.springframework.web.bind.annotation.RestController;
public class PlatElderSleepController {
@Autowired
private IotSyncTask iotSyncTask;
private PlatElderReportTask platElderReportTask;
@Autowired
private PlatElderSleepService platElderSleepService;
@Autowired
private PlatDeviceService platDeviceService;
@Autowired
private PlatElderReportMonthService platElderReportMonthService;
@ApiOperation("测试")
@PostMapping("test")
@PostMapping("test1")
@AuthIgnore
@TenantIdIgnore
public ApiResponseEntity<Void> test() {
iotSyncTask.elderSleepSleepAnalysisTask();
public ApiResponseEntity<Void> test1() {
platElderSleepService.test1();
return ApiResponseUtils.success();
}
@ApiOperation("测试")
@PostMapping("test1")
@PostMapping("test2")
@AuthIgnore
@TenantIdIgnore
public ApiResponseEntity<Void> test1() {
platElderSleepService.test1();
public ApiResponseEntity<Void> heartRespiratoryTask() {
platElderReportTask.heartRespiratoryTask();
return ApiResponseUtils.success();
}
@ApiOperation("测试")
@PostMapping("test3")
@AuthIgnore
public ApiResponseEntity<Void> elderHeartRespiratoryAnalysisTask() {
platElderReportTask.elderHeartRespiratoryAnalysisTask();
return ApiResponseUtils.success();
}
@ApiOperation("测试")
@PostMapping("test4")
@AuthIgnore
public ApiResponseEntity<Void> elderSleepSleepAnalysisTask() {
platElderReportTask.elderSleepSleepAnalysisTask();
return ApiResponseUtils.success();
}
@ApiOperation("编辑设备属性")
@PostMapping("editDeviceProperties")
......
......@@ -10,6 +10,7 @@ import com.makeit.common.response.ApiResponseUtils;
import com.makeit.dto.platform.device.PlatDeviceQueryDTO;
import com.makeit.dto.wechat.device.PlatDeviceAttrWechatDTO;
import com.makeit.dto.wechat.device.PlatDeviceEditWechatDTO;
import com.makeit.dto.wechat.device.PlatDeviceNetAttrWechatDTO;
import com.makeit.dto.wechat.device.PlatDeviceSetupDTO;
import com.makeit.entity.platform.auth.PlatOrg;
import com.makeit.entity.platform.auth.PlatRole;
......@@ -106,5 +107,12 @@ public class PlatDeviceWechatController {
return ApiResponseUtils.success();
}
@ApiOperation("编辑设备网络属性")
@PostMapping("editDeviceNetInfo")
public ApiResponseEntity<?> editDeviceNetInfo(@RequestBody PlatDeviceNetAttrWechatDTO dto) {
platDeviceService.editDeviceNetInfo(dto);
return ApiResponseUtils.success();
}
}
package com.makeit.module.controller.wechat.sys;
import com.makeit.common.response.ApiResponseEntity;
import com.makeit.common.response.ApiResponseUtils;
import com.makeit.dto.platform.sys.PlatLogoConfigDTO;
import com.makeit.dto.platform.sys.PlatLogoConfigDTOVO;
import com.makeit.dto.platform.sys.PlatLogoConfigQueryDTO;
import com.makeit.global.annotation.AuthIgnore;
import com.makeit.global.aspect.tenant.TenantIdIgnore;
import com.makeit.service.platform.sys.PlatLogoConfigService;
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;
/**
* @Author:lzy
* @Date:2023/9/12 10:41
* @Describe:
*/
@Api(tags = "LOGO设置")
@RestController
@RequestMapping("/plat/wechat/sys/logo/config/")
public class PlatLogoConfigWechatController {
@Autowired
private PlatLogoConfigService platLogoConfigService;
@ApiOperation("设置LOGO")
@PostMapping("add")
public ApiResponseEntity<?> add(@RequestBody PlatLogoConfigDTO dto) {
platLogoConfigService.add(dto);
return ApiResponseUtils.success();
}
@ApiOperation("查看")
@PostMapping("view")
public ApiResponseEntity<PlatLogoConfigDTOVO> view(@RequestBody PlatLogoConfigQueryDTO dto) {
PlatLogoConfigDTOVO data = platLogoConfigService.view(dto);
return ApiResponseUtils.success(data);
}
@ApiOperation("忽略租户查看")
@PostMapping("viewIgnore")
@AuthIgnore
@TenantIdIgnore
public ApiResponseEntity<PlatLogoConfigDTOVO> viewIgnore(@RequestBody PlatLogoConfigQueryDTO dto) {
PlatLogoConfigDTOVO data = platLogoConfigService.view(dto);
return ApiResponseUtils.success(data);
}
}
......@@ -19,6 +19,8 @@ public class PlatElderIdDTO {
@ApiModelProperty(value = "长者id")
private String elderId;
@ApiModelProperty(value = "长者id")
private String orgId;
@ApiModelProperty(value = "设备id")
private String deviceId;
......
......@@ -6,6 +6,8 @@ import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.List;
/**
* <p>
* 长者子女账号
......@@ -30,6 +32,8 @@ public class PlatElderChildrenInfoQueryDTO extends BaseTenantDTO {
@ApiModelProperty(value = "组织id")
private String orgId;
@ApiModelProperty(value = "组织id集合")
private List<String> orgIdList;
}
......@@ -25,8 +25,4 @@ public class PlatDeviceAttrWechatDTO extends PlatDeviceBaseAttrDTO {
@ApiModelProperty(value = "读取硬件的系统参数,主要读取服务信息和雷达信息,多个逗号隔开")
private String readProperties;
//private String usrServerInfo;
@ApiModelProperty(value = "服务信息 {\"password\":\"1234576\",\"secureKey\":\"kuangshi\",\"secureId\":\"kuangshi\",\"addr\":\"mqtt://121.1.1.2\",\"username\":\"kuangshi\",\"port\":1883} ")
private UserServerInfo usrServerInfo;
}
......@@ -27,15 +27,5 @@ public class PlatDeviceEditWechatDTO extends BaseTenantDTO {
@ApiModelProperty(value = "设备名称")
private String name;
@ApiModelProperty(value = "设备安装方式")
private String installation;
@ApiModelProperty(value = "开关指示灯")
private String indicatorLight;
@ApiModelProperty(value = "设备属性json")
private String attribute;
}
package com.makeit.dto.wechat.device;
import com.makeit.dto.platform.device.PlatDeviceBaseAttrDTO;
import com.makeit.module.iot.dto.UserServerInfo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* <p>
* 设备
* </p>
*
* @author eugene young
* @since 2023-09-05
*/
@Data
@ApiModel(value = "PlatDeviceNetAttrWechatDTO", description = "设备网络信息")
public class PlatDeviceNetAttrWechatDTO{
@ApiModelProperty(value = "设备id")
private String deviceId;
//private String usrServerInfo;
@ApiModelProperty(value = "服务信息 {\"password\":\"1234576\",\"secureKey\":\"kuangshi\",\"secureId\":\"kuangshi\",\"addr\":\"mqtt://121.1.1.2\",\"username\":\"kuangshi\",\"port\":1883} ")
private UserServerInfo usrServerInfo;
}
......@@ -123,14 +123,14 @@ public class PlatAlarmRecordServiceImpl extends ServiceImpl<PlatAlarmRecordMappe
@Override
public PageVO<PlatAlarmRecordVO> childrenPage(PageReqDTO<PlatAlarmRecordQueryDTO> dto) {
PlatElderChildrenInfo platElderChildrenInfo = platElderChildrenInfoService.getById(WechatUserUtil.getUserId());
log.info("子女端账号:"+platElderChildrenInfo.toString());
String elderId = platElderChildrenInfo.getElderId();
if(StringUtils.isBlank(elderId)){
return new PageVO<>();
List<PlatElderChildrenInfo> platElderChildrenInfoList = getPlatElderChildrenInfosByOpenid(platElderChildrenInfo.getOpenid());
log.info("子女端账号:{}",JSON.toJSONString(platElderChildrenInfo));
if(CollectionUtils.isEmpty(platElderChildrenInfoList)){
return PageVO.emptyPage();
}
String[] split = elderId.split(",");
List<String> elderIdList = platElderChildrenInfoList.stream().map(PlatElderChildrenInfo::getElderId).collect(Collectors.toList());
PlatAlarmRecordQueryDTO data = dto.getData();
data.setElderIdList(Arrays.asList(split));
data.setElderIdList(elderIdList);
data.setNoticeStatus(CommonEnum.YES.getValue());
return page(dto);
}
......@@ -169,12 +169,7 @@ public class PlatAlarmRecordServiceImpl extends ServiceImpl<PlatAlarmRecordMappe
.le(Objects.nonNull(param.getDealDateTo()), PlatAlarmRecord::getDealDate, param.getDealDateTo())
.in(CollectionUtils.isNotEmpty(orgIdList), PlatAlarmRecord::getOrgId, orgIdList)
.apply(StringUtils.isNotBlank(param.getNotifyUser()), "find_in_set('" + param.getNotifyUser() + "',notify_user)")
.and(CollectionUtils.isNotEmpty(param.getElderIdList()), qw -> {
List<String> elderIdList = param.getElderIdList();
for (String elderId : elderIdList) {
qw.or().apply("find_in_set('" + elderId + "',elder_ids)");
}
})
.in(CollectionUtils.isNotEmpty(param.getElderIdList()),PlatAlarmRecord::getElderIds,param.getElderIdList())
.eq(StringUtils.isNotBlank(param.getNoticeStatus()),PlatAlarmRecord::getNoticeStatus,param.getNoticeStatus())
.eq(StringUtils.isNotBlank(param.getReadFlag()),PlatAlarmRecord::getReadFlag,param.getReadFlag())
.orderByDesc(BaseEntity::getCreateDate)
......@@ -540,22 +535,24 @@ public class PlatAlarmRecordServiceImpl extends ServiceImpl<PlatAlarmRecordMappe
@Override
public Integer unreadCount(PlatAlarmRecordQueryDTO dto) {
PlatElderChildrenInfo platElderChildrenInfo = platElderChildrenInfoService.getById(WechatUserUtil.getUserId());
log.info("子女端账号:"+platElderChildrenInfo.toString());
if (platElderChildrenInfo == null) {
return 0;
}
String elderId = platElderChildrenInfo.getElderId();
if(StringUtils.isBlank(elderId)){
List<PlatElderChildrenInfo> platElderChildrenInfoList = getPlatElderChildrenInfosByOpenid(platElderChildrenInfo.getOpenid());
log.info("子女端账号:{}",JSON.toJSONString(platElderChildrenInfo));
if(CollectionUtils.isEmpty(platElderChildrenInfoList)){
return 0;
}
String[] split = elderId.split(",");
dto.setElderIdList(Arrays.asList(split));
List<String> elderIdList = platElderChildrenInfoList.stream().map(PlatElderChildrenInfo::getElderId).collect(Collectors.toList());
dto.setElderIdList(elderIdList);
dto.setNoticeStatus(CommonEnum.YES.getValue());
dto.setReadFlag(CommonEnum.NO.getValue());
LambdaQueryWrapper<PlatAlarmRecord> lambdaQueryWrapper = getLambdaQueryWrapper(dto);
return Math.toIntExact(count(lambdaQueryWrapper));
}
private List<PlatElderChildrenInfo> getPlatElderChildrenInfosByOpenid(String openid) {
return platElderChildrenInfoService.list(new QueryWrapper<PlatElderChildrenInfo>().lambda().eq(PlatElderChildrenInfo::getOpenid, openid)
.isNotNull(PlatElderChildrenInfo::getElderId));
}
@Override
@Transactional(rollbackFor = Exception.class)
public void misinformation(String id) {
......
......@@ -429,7 +429,7 @@ public class DataScreenServiceImpl implements DataScreenService {
//获取该账号的权限组织
List<PlatOrg> orgs = belongToScopeList(dto.getType());
if(orgs.isEmpty()){
return new PageVO<>();
return PageVO.emptyPage();
}
List<String> orgIds = orgs.stream().map(PlatOrg::getId).collect(Collectors.toList());
......@@ -440,7 +440,7 @@ public class DataScreenServiceImpl implements DataScreenService {
.in(PlatOrg::getId, dto.getOrgIds())
.eq(PlatOrg::getType, dto.getType()));
if(platOrgs.isEmpty()){
return new PageVO<>();
return PageVO.emptyPage();
}
List<String> orgIdList = platOrgs.stream().map(PlatOrg::getId).collect(Collectors.toList());
dto.setOrgIds(orgIdList);
......@@ -507,7 +507,7 @@ public class DataScreenServiceImpl implements DataScreenService {
//获取该账号的权限组织
List<PlatOrg> orgs = belongToScopeList(dto.getType());
if(orgs.isEmpty()){
return new PageVO<>();
return PageVO.emptyPage();
}
List<String> orgIds = orgs.stream().map(PlatOrg::getId).collect(Collectors.toList());
......@@ -518,7 +518,7 @@ public class DataScreenServiceImpl implements DataScreenService {
.in(PlatOrg::getId, dto.getOrgIds())
.eq(PlatOrg::getType, dto.getType()));
if(platOrgs.isEmpty()){
return new PageVO<>();
return PageVO.emptyPage();
}
List<String> orgIdList = platOrgs.stream().map(PlatOrg::getId).collect(Collectors.toList());
dto.setOrgIds(orgIdList);
......@@ -534,7 +534,7 @@ public class DataScreenServiceImpl implements DataScreenService {
Page<PlatDeviceListVO> page = platDeviceService.getDevices(dto, p);
List<PlatDeviceListVO> voList = page.getRecords();
if(CollectionUtils.isEmpty(voList)){
return new PageVO<>();
return PageVO.emptyPage();
}
List<String> spaceIdList = voList.stream().flatMap(vo -> {
......
......@@ -12,6 +12,7 @@ import com.makeit.dto.platform.device.PlatDeviceQueryDTO;
import com.makeit.dto.saas.device.PlatDeviceEditSaasDTO;
import com.makeit.dto.wechat.device.PlatDeviceAttrWechatDTO;
import com.makeit.dto.wechat.device.PlatDeviceEditWechatDTO;
import com.makeit.dto.wechat.device.PlatDeviceNetAttrWechatDTO;
import com.makeit.dto.wechat.device.PlatDeviceSetupDTO;
import com.makeit.entity.platform.device.PlatDevice;
import com.makeit.module.iot.vo.DeviceProperties;
......@@ -75,4 +76,6 @@ public interface PlatDeviceService extends IService<PlatDevice> {
void batchEditProperties(PlatDeviceAttrDTO dto);
boolean updateDeviceStatus(String messageType, String deviceId, String iot_tenantId);
void editDeviceNetInfo(PlatDeviceNetAttrWechatDTO dto);
}
......@@ -19,6 +19,7 @@ import com.makeit.dto.platform.device.*;
import com.makeit.dto.saas.device.PlatDeviceEditSaasDTO;
import com.makeit.dto.wechat.device.PlatDeviceAttrWechatDTO;
import com.makeit.dto.wechat.device.PlatDeviceEditWechatDTO;
import com.makeit.dto.wechat.device.PlatDeviceNetAttrWechatDTO;
import com.makeit.dto.wechat.device.PlatDeviceSetupDTO;
import com.makeit.entity.platform.auth.PlatOrg;
import com.makeit.entity.platform.auth.PlatRole;
......@@ -134,7 +135,7 @@ public class PlatDeviceServiceImpl extends ServiceImpl<PlatDeviceMapper, PlatDev
//List<PlatDeviceListVO> voList = BeanDtoVoUtils.listVo(records, PlatDeviceListVO.class);
if (CollectionUtils.isEmpty(records)) {
return new PageVO<>();
return PageVO.emptyPage();
}
List<String> spaceIdList = records.stream().flatMap(vo -> {
......@@ -210,6 +211,12 @@ public class PlatDeviceServiceImpl extends ServiceImpl<PlatDeviceMapper, PlatDev
if (other != null) {
other.setAttribute(dto.getAttribute());
platDeviceOtherService.updateById(other);
} else {
other = new PlatDeviceOther();
other.setDeviceId(db.getId());
other.setOriDeviceId(db.getOriDeviceId());
other.setAttribute(dto.getAttribute());
platDeviceOtherService.save(other);
}
// 写入设备
......@@ -307,41 +314,13 @@ public class PlatDeviceServiceImpl extends ServiceImpl<PlatDeviceMapper, PlatDev
}
@Override
@Transactional(rollbackFor = Exception.class)
public void wechatEdit(PlatDeviceEditWechatDTO dto) {
PlatDevice db = getById(dto.getId());
String id = db.getId();
PlatDeviceOther other = platDeviceOtherService.getOne(new QueryWrapper<PlatDeviceOther>().lambda()
.eq(PlatDeviceOther::getDeviceId, db.getId()));
if (other == null) {
other = new PlatDeviceOther();
}
String otherId = other.getId();
BeanUtils.copyProperties(dto, db);
db.setId(id);
BeanUtils.copyProperties(dto, other);
other.setId(otherId);
other.setDeviceId(id);
other.setOriDeviceId(db.getOriDeviceId());
db.setName(dto.getName());
updateById(db);
deviceCacheUtil.put(db);
platDeviceOtherService.saveOrUpdate(other);
if (StringUtils.isNotEmpty(other.getAttribute())) {
PlatDeviceAttrWechatDTO deviceAttrWechatDTO = JsonUtil.toObj(other.getAttribute(), PlatDeviceAttrWechatDTO.class);
//更新区域设置设备安装方式
platRegionSettingService.update(new UpdateWrapper<PlatRegionSetting>().lambda()
.set(PlatRegionSetting::getInstallType, deviceAttrWechatDTO.getRadarMount())
.eq(PlatRegionSetting::getDeviceId, other.getDeviceId()));
}
}
@Override
......@@ -429,13 +408,33 @@ public class PlatDeviceServiceImpl extends ServiceImpl<PlatDeviceMapper, PlatDev
log.info("写入设备属性请求参数:{}",JSON.toJSONString(dto));
String deviceId = dto.getDeviceId();
Map<String, Object> map = getAttrMap(dto);
UserServerInfo usrServerInfo = dto.getUsrServerInfo();
boolean usrServerInfoFlag = usrServerInfo != null && (StringUtils.isNotEmpty(usrServerInfo.getUsername()) || StringUtils.isNotEmpty(usrServerInfo.getPassword())
|| StringUtils.isNotEmpty(usrServerInfo.getAddr()) || usrServerInfo.getPort() != null ||
StringUtils.isNotEmpty(usrServerInfo.getSecureId()) || StringUtils.isNotEmpty(usrServerInfo.getSecureKey()));
if (usrServerInfoFlag) {
map.put("usrServerInfo",JSON.toJSONString(usrServerInfo));
String result = devicePropertiesOperateService.deviceWriteAttr(deviceId, map);
if (StringUtils.isNotEmpty(result)) {
throw new RuntimeException("设备写入失败:" + result);
}
PlatDeviceOther other = platDeviceOtherService.getOne(new QueryWrapper<PlatDeviceOther>().lambda()
.eq(PlatDeviceOther::getOriDeviceId, deviceId)
.last("limit 1"));
if (other != null) {
other.setAttribute(JSON.toJSONString(map));
platDeviceOtherService.updateById(other);
}
if (dto.getRadarMount() != null) {
List<PlatDevice> platDeviceList = list(new QueryWrapper<PlatDevice>().lambda().eq(PlatDevice::getOriDeviceId, deviceId));
//更新区域设置设备安装方式
platRegionSettingService.update(new UpdateWrapper<PlatRegionSetting>().lambda()
.set(PlatRegionSetting::getInstallType, dto.getRadarMount())
.in(CollectionUtils.isNotEmpty(platDeviceList),PlatRegionSetting::getDeviceId, StreamUtil.map(platDeviceList,BaseEntity::getId)));
}
}
@Override
public void editDeviceNetInfo(PlatDeviceNetAttrWechatDTO dto) {
String deviceId = dto.getDeviceId();
UserServerInfo usrServerInfo = dto.getUsrServerInfo();
log.info("写入设备属性请求参数:{}",JSON.toJSONString(dto));
Map<String, Object> map = Maps.newHashMap();
map.put("usrServerInfo",JSON.toJSONString(usrServerInfo));
String result = devicePropertiesOperateService.deviceWriteAttr(deviceId, map);
if (StringUtils.isNotEmpty(result)) {
throw new RuntimeException("设备写入失败:" + result);
......@@ -443,24 +442,15 @@ public class PlatDeviceServiceImpl extends ServiceImpl<PlatDeviceMapper, PlatDev
PlatDeviceOther other = platDeviceOtherService.getOne(new QueryWrapper<PlatDeviceOther>().lambda()
.eq(PlatDeviceOther::getOriDeviceId, deviceId)
.last("limit 1"));
if (other != null && usrServerInfoFlag) {
if (other != null) {
other.setProtocolAccount(usrServerInfo.getUsername());
other.setProtocolPassword(usrServerInfo.getPassword());
other.setProtocolAddress(usrServerInfo.getAddr());
other.setProtocolPort(usrServerInfo.getPort() == null ? "" : usrServerInfo.getPort().toString());
other.setSecureId(usrServerInfo.getSecureId());
other.setSecureKey(usrServerInfo.getSecureKey());
}
if (other != null && !map.isEmpty() && !usrServerInfoFlag) {
other.setAttribute(JSON.toJSONString(map));
platDeviceOtherService.updateById(other);
}
if (dto.getRadarMount() != null) {
//更新区域设置设备安装方式
platRegionSettingService.update(new UpdateWrapper<PlatRegionSetting>().lambda()
.set(PlatRegionSetting::getInstallType, dto.getRadarMount())
.eq(PlatRegionSetting::getDeviceId, deviceId));
}
}
private static Map<String, Object> getAttrMap(PlatDeviceBaseAttrDTO dto) {
......@@ -577,6 +567,9 @@ public class PlatDeviceServiceImpl extends ServiceImpl<PlatDeviceMapper, PlatDev
.in(PlatRoomBedDevice::getDeviceId,deviceIdList)
.eq(BaseBusEntity::getTenantId, platTenant.getId()));
}
if (CollectionUtils.isEmpty(iotDeviceIdSet)) {
continue;
}
LambdaQueryWrapper<PlatDevice> deviceLambdaQueryWrapper = new LambdaQueryWrapper<PlatDevice>().eq(BaseBusEntity::getTenantId, platTenant.getId())
.in(PlatDevice::getOriDeviceId, iotDeviceIdSet);
......@@ -585,14 +578,33 @@ public class PlatDeviceServiceImpl extends ServiceImpl<PlatDeviceMapper, PlatDev
List<PlatDevice> deviceList = list(deviceLambdaQueryWrapper);
//更新平台设备
Collection<PlatDevice> platDevices = convertToPlatDevice(iotDeviceList, deviceList, platTenant.getId(), dicNameIdMap);
saveOrUpdateBatch(platDevices);
saveDeviceOtherInfo(platDevices);
deviceCacheUtil.putAll(platDevices);
}
log.info("结束执行同步设备信息接口");
}
private void saveDeviceOtherInfo(Collection<PlatDevice> platDevices) {
List<String> deviceIdList = platDevices.stream().map(BaseEntity::getId).collect(Collectors.toList());
List<PlatDeviceOther> platDeviceOtherList = platDeviceOtherService.list(new QueryWrapper<PlatDeviceOther>().lambda().in(PlatDeviceOther::getDeviceId, deviceIdList));
Map<String, PlatDeviceOther> deviceOtherMap = StreamUtil.toMap(platDeviceOtherList, PlatDeviceOther::getDeviceId);
for (PlatDevice platDevice : platDevices) {
PlatDeviceOther platDeviceOther = deviceOtherMap.get(platDevice.getId());
if (platDeviceOther == null) {
platDeviceOther = new PlatDeviceOther();
platDeviceOther.setDeviceId(platDevice.getId());
platDeviceOther.setOriDeviceId(platDevice.getOriDeviceId());
platDeviceOther.setTenantId(platDevice.getTenantId());
platDeviceOtherService.save(platDeviceOther);
}
}
}
private Collection<PlatDevice> convertToPlatDevice(List<DeviceInstanceEntity> iotDeviceList, List<PlatDevice> deviceList, String tenantId, Map<String, String> dicNameIdMap) {
Map<String, PlatDevice> deviceMap = deviceList.stream().collect(Collectors.toMap(PlatDevice::getOriDeviceId, v -> v, (a, b) -> a));
iotDeviceList.forEach(iotDevice -> {
......
......@@ -13,4 +13,5 @@ import com.makeit.entity.platform.elder.PlatElderBreatheAnalysis;
*/
public interface PlatElderBreatheAnalysisService extends IService<PlatElderBreatheAnalysis> {
void elderHeartRespiratoryAnalysisTask();
}
......@@ -13,4 +13,5 @@ import com.makeit.entity.platform.elder.PlatElderBreatheDayStat;
*/
public interface PlatElderBreatheDayStatService extends IService<PlatElderBreatheDayStat> {
void heartRespiratoryTask();
}
......@@ -39,4 +39,6 @@ public interface PlatElderChildrenInfoService extends IService<PlatElderChildren
void bind(String elderId);
void unbind(String elderId);
List<PlatElderChildrenInfoWechatVO> listByOpenid(String openid);
}
......@@ -48,6 +48,4 @@ public interface PlatElderDayReportWeekService {
List<PlatElderBehaviorDistributionVO> behaviorDistribution(PlatElderReportDTO platElderIdDTO);
void heartRespiratoryJob();
}
......@@ -28,7 +28,6 @@ public interface PlatElderReportMonthService extends IService<PlatElderReportMon
List<PlatElderReportMonthVO> reportMonth(PlatElderReportDTO platElderIdDTO);
void reportMonthJob();
}
......@@ -31,6 +31,7 @@ public interface PlatElderService extends IService<PlatElder> {
List<PlatElderListVO> list(PlatElderQueryDTO dto);
void fill(List<PlatElderListVO> list);
void exportExcel(HttpServletResponse response, PlatElderQueryDTO dto);
void exportTemplate(HttpServletResponse response);
......@@ -64,7 +65,11 @@ public interface PlatElderService extends IService<PlatElder> {
/*小程序*/
List<PlatElderWechatSimpleVO> listMy();
void batchEdit(PlatElderBatchEditDTOVO dto);
List<PlatElderListVO> listByElder(PlatElderQueryDTO dto);
/*小程序*/
}
package com.makeit.service.platform.elder.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.makeit.entity.platform.elder.PlatElderBreatheDayStat;
import com.makeit.entity.platform.alarm.PlatAlarmRecord;
import com.makeit.entity.platform.device.PlatDevice;
import com.makeit.entity.platform.elder.*;
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.service.platform.elder.PlatElderBreatheDayStatService;
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.service.platform.alarm.PlatAlarmRecordService;
import com.makeit.service.platform.elder.*;
import com.makeit.utils.data.convert.StreamUtil;
import com.makeit.utils.data.validate.CollectionUtils;
import com.makeit.utils.data.validate.MapUtil;
import com.makeit.utils.time.LocalDateTimeUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Optional;
/**
* <p>
......@@ -17,4 +41,108 @@ import org.springframework.stereotype.Service;
@Service
public class PlatElderBreatheDayStatServiceImpl extends ServiceImpl<PlatElderBreatheDayStatMapper, PlatElderBreatheDayStat> implements PlatElderBreatheDayStatService {
@Autowired
private PlatAlarmRecordService platAlarmRecordService;
@Autowired
private PlatElderService platElderService;
@Autowired
private PlatElderSleepAnalysisService platElderSleepAnalysisService;
@Autowired
private IotProductDeviceService iotProductDeviceService;
@Autowired
private PlatElderRealTimeService platElderRealTimeService;
@Autowired
private PlatElderReportMonthService platElderReportMonthService;
@Transactional(rollbackFor = Exception.class)
@Override
public void heartRespiratoryTask() {
LocalDate nowDate = LocalDate.now();
LocalDate yesDate = nowDate.minusDays(1);
LocalDateTime yesStart = LocalDateTimeUtils.getDayStart(yesDate);
LocalDateTime yesEnd = LocalDateTimeUtils.getDayEnd(yesDate);
List<PlatElderBreatheDayStat> breatheDayStatList = new ArrayList<>(10);
List<PlatElder> elderList = platElderService.list(new QueryWrapper<PlatElder>().lambda()
.isNotNull(PlatElder::getBedId));
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
List<PlatElderReportMonth> reportMonthList = new ArrayList<>(10);
List<PlatElderSleepAnalysis> sleepAnalysesList = platElderSleepAnalysisService.list(new QueryWrapper<PlatElderSleepAnalysis>().lambda()
.in(PlatElderSleepAnalysis::getElderId, StreamUtil.mapId(elderList, PlatElder::getId))
.eq(PlatElderSleepAnalysis::getHappenDate, dateTimeFormatter.format(yesDate))
);
Map<String, PlatElderSleepAnalysis> sleepAnalysisMap = StreamUtil.toMap(sleepAnalysesList, PlatElderSleepAnalysis::getElderId);
List<PlatAlarmRecord> recordList = platAlarmRecordService.list(new QueryWrapper<PlatAlarmRecord>().lambda()
.ge(PlatAlarmRecord::getAlarmDate, yesStart)
.le(PlatAlarmRecord::getAlarmDate, yesEnd)
.eq(PlatAlarmRecord::getMisinformationFlag,0)
.in(PlatAlarmRecord::getElderIds, StreamUtil.mapId(elderList, PlatElder::getId)));
Map<String, List<PlatAlarmRecord>> recordMap = StreamUtil.groupBy(recordList, PlatAlarmRecord::getElderIds);
for (PlatElder e : elderList) {
PlatDevice platDevice = platElderRealTimeService.getBreathDevice(e.getId(), null);
if (platDevice != null) {
PlatElderBreatheDayStat platElderBreatheDayStat = new PlatElderBreatheDayStat();
platElderBreatheDayStat.setElderId(e.getId());
platElderBreatheDayStat.setDeviceId(platDevice.getId());
platElderBreatheDayStat.setOriDeviceId(platDevice.getOriDeviceId());
platElderBreatheDayStat.setDay(yesDate);
List<DeviceInfoContentBreathe> breatheList = iotProductDeviceService.getDeviceLogByTimeRangeBreathe(platDevice.getOriDeviceId(), 2 * 24 * 3600, yesStart, yesEnd);
if (CollectionUtils.isEmpty(breatheList)) {
continue;
}
long hrAvg = StreamUtil.reduce(breatheList, i -> (long) i.getProperties().getHr(), 0L, Long::sum) / breatheList.size();
long brAvg = StreamUtil.reduce(breatheList, i -> (long) i.getProperties().getBr(), 0L, Long::sum) / breatheList.size();
platElderBreatheDayStat.setHeartRateMax(breatheList.stream().map(i -> i.getProperties().getHr()).max(Integer::compareTo).orElse(null));
platElderBreatheDayStat.setHeartRateMin(breatheList.stream().map(i -> i.getProperties().getHr()).min(Integer::compareTo).orElse(null));
platElderBreatheDayStat.setHeartRateAvg((int) (hrAvg));
platElderBreatheDayStat.setRespiratoryRateMax(breatheList.stream().map(i -> i.getProperties().getBr()).max(Integer::compareTo).orElse(null));
platElderBreatheDayStat.setRespiratoryRateMin(breatheList.stream().map(i -> i.getProperties().getBr()).min(Integer::compareTo).orElse(null));
platElderBreatheDayStat.setRespiratoryRateAvg((int) (brAvg));
platElderBreatheDayStat.setTenantId(e.getTenantId());
breatheDayStatList.add(platElderBreatheDayStat);
PlatElderReportMonth reportMonth = new PlatElderReportMonth();
reportMonth.setElderId(e.getId());
reportMonth.setDay(yesDate);
MapUtil.setIfPresent(sleepAnalysisMap, e.getId(), sa -> {
reportMonth.setSleepResult(sa.getSleepResult());
});
reportMonth.setBreatheDeviceId(platDevice.getId());
reportMonth.setBreatheOriDeviceId(platDevice.getOriDeviceId());
reportMonth.setHeartRate((int) (hrAvg));
reportMonth.setRespiratoryRate((int) (brAvg));
List<PlatAlarmRecord> rList = Optional.ofNullable(recordMap.get(e.getId())).orElse(new ArrayList<>(10));
reportMonth.setFailCount((int) StreamUtil.count(rList, i -> PlatAlarmConfigEnum.AlarmTypeEnum.FALL.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.setBehaviorExceptionCount((int) StreamUtil.count(rList, i -> PlatAlarmConfigEnum.AlarmTypeEnum.BEHAVIOR.getValue().equals(i.getAlarmType())));
reportMonth.setTenantId(e.getTenantId());
reportMonthList.add(reportMonth);
}
}
platElderReportMonthService.saveBatch(reportMonthList);
saveBatch(breatheDayStatList);
}
}
......@@ -350,9 +350,6 @@ public class PlatElderDayReportDayServiceImpl implements PlatElderDayReportDaySe
*/
});
voList.sort(String::compareTo);
return voList;
}
......
......@@ -4,13 +4,16 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.makeit.common.entity.BaseBusEntity;
import com.makeit.dto.platform.elder.PlatElderReportDTO;
import com.makeit.entity.platform.alarm.PlatAlarmRecord;
import com.makeit.entity.platform.device.PlatDevice;
import com.makeit.entity.platform.elder.*;
import com.makeit.enums.platform.alarm.PlatAlarmConfigEnum;
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.breathe.DeviceInfoContentBreathe;
import com.makeit.service.platform.alarm.PlatAlarmRecordService;
import com.makeit.service.platform.elder.*;
import com.makeit.service.saas.PlatTenantService;
import com.makeit.service.saas.SaasDiseaseReportService;
......@@ -19,6 +22,7 @@ import com.makeit.service.saas.SaasSleepEvaluateReportService;
import com.makeit.utils.data.convert.BeanDtoVoUtils;
import com.makeit.utils.data.convert.StreamUtil;
import com.makeit.utils.data.validate.CollectionUtils;
import com.makeit.utils.data.validate.MapUtil;
import com.makeit.utils.old.StringUtils;
import com.makeit.utils.time.LocalDateTimeUtils;
import com.makeit.vo.platform.elder.realtime.PlatElderCoordinateVO;
......@@ -47,20 +51,10 @@ import java.util.stream.Collectors;
public class PlatElderDayReportWeekServiceImpl implements PlatElderDayReportWeekService {
@Autowired
private PlatElderService platElderService;
@Autowired
private PlatTenantService platTenantService;
@Autowired
private PlatElderRealTimeService platElderRealTimeService;
@Autowired
private PlatElderDayReportDayService platElderDayReportDayService;
@Autowired
private PlatElderSleepAnalysisService platElderSleepAnalysisService;
@Autowired
private PlatElderSleepService platElderSleepService;
......@@ -80,7 +74,7 @@ public class PlatElderDayReportWeekServiceImpl implements PlatElderDayReportWeek
private PlatElderBreatheDayStatService platElderBreatheDayStatService;
@Autowired
private IotProductDeviceService iotProductDeviceService;
private PlatElderSleepAnalysisService platElderSleepAnalysisService;
private LocalDateTime weekStartDateTime(LocalDateTime defaultTime) {
return weekStartDateTime(LocalDate.now().minusDays(1), defaultTime);
......@@ -206,6 +200,9 @@ public class PlatElderDayReportWeekServiceImpl implements PlatElderDayReportWeek
platElderSleepEvaluationVO.setScore(score);
platElderSleepEvaluationVO.setSleepDuration(sleepDuration);
platElderSleepEvaluationVO.setRestDuration(restDuration);
platElderSleepEvaluationVO.setSleepDurationHour(new BigDecimal(platElderSleepEvaluationVO.getSleepDuration()).divide(new BigDecimal(60), 2, BigDecimal.ROUND_HALF_UP));
platElderSleepEvaluationVO.setRestDurationHour(new BigDecimal(platElderSleepEvaluationVO.getRestDuration()).divide(new BigDecimal(60), 2, BigDecimal.ROUND_HALF_UP));
EvaluateReportVO evaluateReportVO = saasSleepEvaluateReportService.getByScore(platElderSleepEvaluationVO.getScore());
if (evaluateReportVO != null) {
......@@ -468,58 +465,4 @@ public class PlatElderDayReportWeekServiceImpl implements PlatElderDayReportWeek
return platElderDayReportDayService.behaviorDistributionInternal(platElderIdDTO, dateList);
}
@Override
public void heartRespiratoryJob() {
LocalDate nowDate = LocalDate.now();
LocalDate yesDate = nowDate.minusDays(1);
LocalDateTime yesStart = LocalDateTimeUtils.getDayStart(yesDate);
LocalDateTime yesEnd = LocalDateTimeUtils.getDayEnd(yesDate);
List<PlatElderBreatheDayStat> breatheDayStatList = new ArrayList<>(10);
platTenantService.executeTenantList(() -> {
List<PlatElder> elderList = platElderService.list(new QueryWrapper<PlatElder>().lambda()
.isNotNull(PlatElder::getBedId));
elderList.forEach(e -> {
PlatDevice platDevice = platElderRealTimeService.getBreathDevice(e.getId(), null);
if (platDevice != null) {
PlatElderBreatheDayStat platElderBreatheDayStat = new PlatElderBreatheDayStat();
platElderBreatheDayStat.setElderId(e.getId());
platElderBreatheDayStat.setDeviceId(platDevice.getId());
platElderBreatheDayStat.setOriDeviceId(platDevice.getOriDeviceId());
platElderBreatheDayStat.setDay(yesDate);
List<DeviceInfoContentBreathe> breatheList = iotProductDeviceService.getDeviceLogByTimeRangeBreathe(platDevice.getOriDeviceId(), 2 * 24 * 3600, yesStart, yesEnd);
platElderBreatheDayStat.setHeartRateMax(breatheList.stream().map(i -> i.getProperties().getHr()).max(Integer::compareTo).orElse(null));
platElderBreatheDayStat.setHeartRateMin(breatheList.stream().map(i -> i.getProperties().getHr()).min(Integer::compareTo).orElse(null));
if (CollectionUtils.isNotEmpty(breatheList)) {
platElderBreatheDayStat.setHeartRateAvg((int) (StreamUtil.reduce(breatheList, i -> (long) i.getProperties().getHr(), 0L, Long::sum) / breatheList.size()));
}
platElderBreatheDayStat.setRespiratoryRateMax(breatheList.stream().map(i -> i.getProperties().getBr()).max(Integer::compareTo).orElse(null));
platElderBreatheDayStat.setRespiratoryRateMin(breatheList.stream().map(i -> i.getProperties().getBr()).min(Integer::compareTo).orElse(null));
if (CollectionUtils.isNotEmpty(breatheList)) {
platElderBreatheDayStat.setRespiratoryRateAvg((int) (StreamUtil.reduce(breatheList, i -> (long) i.getProperties().getBr(), 0L, Long::sum) / breatheList.size()));
}
breatheDayStatList.add(platElderBreatheDayStat);
}
});
});
platElderBreatheDayStatService.saveBatch(breatheDayStatList);
}
}
......@@ -487,26 +487,31 @@ public class PlatElderRealTimeServiceImpl implements PlatElderRealTimeService {
if (spaceResult != null) {
PlatElderCoordinateVO vo = new PlatElderCoordinateVO();
JSONObject jsonObject = JSON.parseObject(spaceResult);
vo.setDeviceId(platDevice.getId());
vo.setOriDeviceId(platDevice.getOriDeviceId());
vo.setDistance(Integer.valueOf(jsonObject.getString("distance")));
vo.setAngle(Integer.valueOf(jsonObject.getString("angle")));
vo.setPersonState(Integer.valueOf(jsonObject.getString("personState")));
vo.setMount(Integer.valueOf(jsonObject.getString("mount")));
vo.setType(1);
voList.add(vo);
if (jsonObject != null) {
vo.setDeviceId(platDevice.getId());
vo.setOriDeviceId(platDevice.getOriDeviceId());
vo.setDistance(Integer.valueOf(jsonObject.getString("distance")));
vo.setAngle(Integer.valueOf(jsonObject.getString("angle")));
vo.setPersonState(Integer.valueOf(jsonObject.getString("personState")));
vo.setMount(Integer.valueOf(jsonObject.getString("mount")));
vo.setType(1);
voList.add(vo);
}
}
String fallResult = redisTemplate.opsForValue().get(DEVICE_FALL_DATA + platDevice.getOriDeviceId());
if (fallResult != null) {
PlatElderCoordinateVO vo = new PlatElderCoordinateVO();
JSONObject jsonObject = JSON.parseObject(fallResult);
vo.setDeviceId(platDevice.getId());
vo.setOriDeviceId(platDevice.getOriDeviceId());
vo.setTrack((List<Integer>) jsonObject.get("track"));
vo.setPersonState(Integer.valueOf(jsonObject.getString("personState")));
vo.setMount(Integer.valueOf(jsonObject.getString("mount")));
vo.setType(2);
voList.add(vo);
if (jsonObject != null) {
vo.setDeviceId(platDevice.getId());
vo.setOriDeviceId(platDevice.getOriDeviceId());
Object track = jsonObject.get("track");
vo.setTrack((track == null ? Lists.newArrayList() : (List<Integer>) track));
vo.setPersonState(Integer.valueOf(jsonObject.getString("personState")));
vo.setMount(Integer.valueOf(jsonObject.getString("mount")));
vo.setType(2);
voList.add(vo);
}
}
}
return voList;
......
......@@ -3,23 +3,13 @@ package com.makeit.service.platform.elder.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
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.elder.PlatElder;
import com.makeit.entity.platform.elder.PlatElderReportMonth;
import com.makeit.entity.platform.elder.PlatElderSleepAnalysis;
import com.makeit.enums.platform.alarm.PlatAlarmConfigEnum;
import com.makeit.global.aspect.tenant.TenantIdIgnore;
import com.makeit.mapper.platform.elder.PlatElderReportMonthMapper;
import com.makeit.module.iot.service.IotProductDeviceService;
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.saas.PlatTenantService;
import com.makeit.utils.data.convert.BeanDtoVoUtils;
import com.makeit.utils.data.convert.StreamUtil;
import com.makeit.utils.data.validate.CollectionUtils;
import com.makeit.utils.data.validate.MapUtil;
import com.makeit.utils.old.StringUtils;
import com.makeit.utils.time.LocalDateTimeUtils;
import com.makeit.vo.platform.elder.report.day.PlatElderHeartRespiratoryEvaluationVO;
......@@ -30,12 +20,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Optional;
/**
* <p>
......@@ -140,72 +125,4 @@ public class PlatElderReportMonthServiceImpl extends ServiceImpl<PlatElderReport
return voList;
}
@Override
@TenantIdIgnore
public void reportMonthJob() {
LocalDate nowDate = LocalDate.now();
LocalDate yesDate = nowDate.minusDays(1);
LocalDateTime yesStart = LocalDateTimeUtils.getDayStart(yesDate);
LocalDateTime yesEnd = LocalDateTimeUtils.getDayEnd(yesDate);
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
List<PlatElderReportMonth> reportMonthList = new ArrayList<>(10);
List<PlatElder> elderList = platElderService.list(new QueryWrapper<PlatElder>().lambda()
.isNotNull(PlatElder::getBedId));
List<PlatElderSleepAnalysis> sleepAnalysesList = platElderSleepAnalysisService.list(new QueryWrapper<PlatElderSleepAnalysis>().lambda()
.in(PlatElderSleepAnalysis::getElderId, StreamUtil.mapId(elderList, PlatElder::getId))
.eq(PlatElderSleepAnalysis::getHappenDate, dateTimeFormatter.format(yesDate))
);
Map<String, PlatElderSleepAnalysis> sleepAnalysisMap = StreamUtil.toMap(sleepAnalysesList, PlatElderSleepAnalysis::getElderId);
List<PlatAlarmRecord> recordList = platAlarmRecordService.list(new QueryWrapper<PlatAlarmRecord>().lambda()
.ge(PlatAlarmRecord::getAlarmDate, yesStart)
.le(PlatAlarmRecord::getAlarmDate, yesEnd)
.eq(PlatAlarmRecord::getMisinformationFlag,0)
.in(PlatAlarmRecord::getElderIds, StreamUtil.mapId(elderList, PlatElder::getId)));
Map<String, List<PlatAlarmRecord>> recordMap = StreamUtil.groupBy(recordList, PlatAlarmRecord::getElderIds);
for (PlatElder e : elderList) {
PlatElderReportMonth reportMonth = new PlatElderReportMonth();
reportMonth.setElderId(e.getId());
reportMonth.setDay(yesDate);
MapUtil.setIfPresent(sleepAnalysisMap, e.getId(), sa -> {
reportMonth.setSleepResult(sa.getSleepResult());
});
PlatDevice platDevice = platElderRealTimeService.getBreathDevice(e.getId(), null);
if (platDevice == null) {
continue;
}
List<DeviceInfoContentBreathe> breatheList = iotProductDeviceService.getDeviceLogByTimeRangeBreathe(platDevice.getOriDeviceId(), 2 * 24 * 3600, yesStart, yesEnd);
if (CollectionUtils.isNotEmpty(breatheList)) {
reportMonth.setBreatheDeviceId(platDevice.getId());
reportMonth.setBreatheOriDeviceId(platDevice.getOriDeviceId());
reportMonth.setHeartRate((int) (StreamUtil.reduce(breatheList, i -> (long) i.getProperties().getHr(), 0L, Long::sum) / breatheList.size()));
reportMonth.setRespiratoryRate((int) (StreamUtil.reduce(breatheList, i -> (long) i.getProperties().getBr(), 0L, Long::sum) / breatheList.size()));
}
List<PlatAlarmRecord> rList = Optional.ofNullable(recordMap.get(e.getId())).orElse(new ArrayList<>(10));
reportMonth.setFailCount((int) StreamUtil.count(rList, i -> PlatAlarmConfigEnum.AlarmTypeEnum.FALL.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.setBehaviorExceptionCount((int) StreamUtil.count(rList, i -> PlatAlarmConfigEnum.AlarmTypeEnum.BEHAVIOR.getValue().equals(i.getAlarmType())));
reportMonth.setTenantId(e.getTenantId());
reportMonthList.add(reportMonth);
}
saveBatch(reportMonthList);
}
}
......@@ -52,6 +52,7 @@ import com.makeit.utils.sql.join.JoinUtil;
import com.makeit.utils.sys.FileUtil;
import com.makeit.utils.user.plat.PlatUserUtil;
import com.makeit.utils.user.plat.PlatUserVO;
import com.makeit.utils.user.wechat.WechatUserUtil;
import com.makeit.vo.platform.elder.PlatElderExportVO;
import com.makeit.vo.platform.elder.PlatElderListVO;
import com.makeit.vo.wechat.elder.PlatElderChildrenInfoWechatVO;
......@@ -155,7 +156,8 @@ public class PlatElderServiceImpl extends ServiceImpl<PlatElderMapper, PlatElder
.orderByDesc(PlatElder::getId);
}
private void fill(List<PlatElderListVO> list) {
@Override
public void fill(List<PlatElderListVO> list) {
JoinUtil.join(list, platOrgService, PlatElderListVO::getOrgId, PlatOrg::getId, (d, o) -> {
d.setOrgName(o.getName());
......@@ -229,6 +231,11 @@ public class PlatElderServiceImpl extends ServiceImpl<PlatElderMapper, PlatElder
}
@Override
public List<PlatElderListVO> listByElder(PlatElderQueryDTO dto) {
return list(dto);
}
@Override
public void exportExcel(HttpServletResponse response, PlatElderQueryDTO dto) {
List<PlatElder> dbList = list(lambdaQueryWrapper(dto));
......@@ -1076,7 +1083,7 @@ public class PlatElderServiceImpl extends ServiceImpl<PlatElderMapper, PlatElder
PlatElder platElder = getById(id);
if (StringUtils.isBlank(platElder.getBedId())) {
if (platElder == null || StringUtils.isBlank(platElder.getBedId())) {
return null;
}
......
......@@ -315,7 +315,7 @@ public class PlatRoomBedDeviceServiceImpl extends ServiceImpl<PlatRoomBedDeviceM
});
return PageUtil.toPageVO(data, pages);
}else {
return new PageVO<>();
return PageVO.emptyPage();
}
}
......
......@@ -144,6 +144,9 @@ public class PlatRoomServiceImpl extends ServiceImpl<PlatRoomMapper, PlatRoom> i
platBedService.remove(new QueryWrapper<PlatBed>().lambda()
.in(PlatBed::getRoomId, ids));
platRoomBedDeviceService.remove(new QueryWrapper<PlatRoomBedDevice>().lambda()
.in(PlatRoomBedDevice::getRoomId, ids));
}
@Override
......
......@@ -175,7 +175,7 @@ public class WorkStationServiceImpl implements WorkStationService {
//获取该账号的权限组织
List<PlatOrg> orgs = belongToScopeList(PlatOrgEnum.OrgTypeEnum.INSTITUTION.getValue());
if (orgs.isEmpty()) {
return new PageVO<>();
return PageVO.emptyPage();
}
List<String> orgIds = orgs.stream().map(PlatOrg::getId).collect(Collectors.toList());
dto.setOrgIds(orgIds);
......@@ -185,7 +185,7 @@ public class WorkStationServiceImpl implements WorkStationService {
List<String> orgIds = orgs.stream().filter(t->PlatOrgEnum.OrgTypeEnum.INSTITUTION.getValue().equals(t.getType()))
.map(PlatOrg::getId).collect(Collectors.toList());
if(orgIds.isEmpty()){
return new PageVO<>();
return PageVO.emptyPage();
}
dto.setOrgIds(orgIds);
}
......@@ -194,7 +194,7 @@ public class WorkStationServiceImpl implements WorkStationService {
spaces = platSpaceService.list(new QueryWrapper<PlatSpace>().lambda()
.in(PlatSpace::getOrgId, dto.getOrgIds()));
if (spaces.isEmpty()) {
return new PageVO<>();
return PageVO.emptyPage();
}
List<String> spaceIds = spaces.stream().map(PlatSpace::getId).collect(Collectors.toList());
......@@ -222,7 +222,7 @@ public class WorkStationServiceImpl implements WorkStationService {
});
if(StringUtil.isNotEmpty(dto.getAlarmType())){
if(elderIdList.isEmpty()){
return new PageVO<>();
return PageVO.emptyPage();
}
dto.setElderIds(elderIdList);
}
......@@ -233,7 +233,7 @@ public class WorkStationServiceImpl implements WorkStationService {
new Page<>(page.getPage(),page.getLimit()), page.getData());
List<WorkStationInstitutionRoomVO> roomVOList = pages.getRecords();
if (roomVOList.isEmpty()) {
return new PageVO<>();
return PageVO.emptyPage();
}
List<String> roomIds = roomVOList.stream().map(WorkStationInstitutionRoomVO::getRoomId).collect(Collectors.toList());
//获取床号及长者/设备
......@@ -482,7 +482,7 @@ public class WorkStationServiceImpl implements WorkStationService {
//获取该账号的权限组织
List<PlatOrg> orgs = belongToScopeList(PlatOrgEnum.OrgTypeEnum.HOME.getValue());
if (orgs.isEmpty()) {
return new PageVO<>();
return PageVO.emptyPage();
}
List<String> orgIds = orgs.stream().map(PlatOrg::getId).collect(Collectors.toList());
dto.setOrgIds(orgIds);
......@@ -492,7 +492,7 @@ public class WorkStationServiceImpl implements WorkStationService {
List<String> orgIds = orgs.stream().filter(t->PlatOrgEnum.OrgTypeEnum.HOME.getValue().equals(t.getType()))
.map(PlatOrg::getId).collect(Collectors.toList());
if(orgIds.isEmpty()){
return new PageVO<>();
return PageVO.emptyPage();
}
dto.setOrgIds(orgIds);
}
......@@ -515,7 +515,7 @@ public class WorkStationServiceImpl implements WorkStationService {
}
if (spaces.isEmpty()) {
return new PageVO<>();
return PageVO.emptyPage();
}
List<String> elderIdList = new ArrayList<>();
List<PlatAlarmRecord> alarmRecords = platAlarmRecordService.list(
......@@ -534,7 +534,7 @@ public class WorkStationServiceImpl implements WorkStationService {
});
if(StringUtil.isNotEmpty(dto.getAlarmType())){
if(elderIdList.isEmpty()){
return new PageVO<>();
return PageVO.emptyPage();
}
dto.setElderIds(elderIdList);
}
......
......@@ -18,6 +18,7 @@ import com.makeit.utils.third.wechat.WxUserInfo;
import com.makeit.utils.third.wechat.WechatUtil;
import com.makeit.utils.user.TokenUtil;
import com.makeit.utils.user.wechat.WechatUserInfo;
import org.apache.commons.collections4.CollectionUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -25,6 +26,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Arrays;
import java.util.List;
@Service
public class PlatElderChildrenInfoUserLoginWechatServiceImpl implements PlatElderChildrenInfoUserLoginWechatService {
......@@ -45,46 +47,41 @@ public class PlatElderChildrenInfoUserLoginWechatServiceImpl implements PlatElde
logger.info("userinfo:{}", userInfo);
PlatElderChildrenInfo childrenInfo = platElderChildrenInfoService.getOne(new QueryWrapper<PlatElderChildrenInfo>().lambda()
List<PlatElderChildrenInfo> childrenInfoList = platElderChildrenInfoService.list(new QueryWrapper<PlatElderChildrenInfo>().lambda()
.eq(PlatElderChildrenInfo::getOpenid, userInfo.getOpenId()));
//.eq(PlatElderChildrenInfo::getPhone, userInfo.getPhoneNumber()));
if (childrenInfo == null) {
PlatElderChildrenInfo childrenInfo;
if (CollectionUtils.isEmpty(childrenInfoList)) {
childrenInfo = new PlatElderChildrenInfo();
childrenInfo.setOpenid(userInfo.getOpenId());
childrenInfo.setName(userInfo.getNickName());
PlatOrgSplitDTO vo = platOrgService.getOrgSplitVO(dto.getOrgId());
childrenInfo.setOrgId(dto.getOrgId());
childrenInfo.setCityOrgId(vo.getCityOrgId());
childrenInfo.setDistrictOrgId(vo.getDistrictOrgId());
childrenInfo.setStreetOrgId(vo.getStreetOrgId());
childrenInfo.setOrgPath(vo.getOrgPath());
childrenInfo.setCreateBy(userInfo.getNickName());
childrenInfo.setUpdateBy(userInfo.getNickName());
childrenInfo.setPhone(userInfo.getPhoneNumber());
childrenInfo.setAvatar(userInfo.getAvatarUrl());
logger.info("children:{}", childrenInfo);
NoFillUtil.executeCreate(() -> {
platElderChildrenInfoService.save(childrenInfo);
});
} else {
for (PlatElderChildrenInfo platElderChildrenInfo : childrenInfoList) {
platElderChildrenInfo.setPhone(userInfo.getPhoneNumber());
platElderChildrenInfo.setAvatar(userInfo.getAvatarUrl());
platElderChildrenInfo.setName(userInfo.getNickName());
//RequestUtil.setHeader(HeaderConst.WECHAT_TOKEN, token);
platElderChildrenInfo.setUpdateBy(userInfo.getNickName());
NoFillUtil.executeCreate(() -> {
NoFillUtil.executeUpdate(() -> {
platElderChildrenInfoService.saveOrUpdate(platElderChildrenInfo);
});
});
}
childrenInfo = childrenInfoList.get(0);
}
//childrenInfo.setOpenid(userInfo.getOpenId());
childrenInfo.setPhone(userInfo.getPhoneNumber());
childrenInfo.setAvatar(userInfo.getAvatarUrl());
String token = IdGen.getUUID();
//RequestUtil.setHeader(HeaderConst.WECHAT_TOKEN, token);
childrenInfo.setUpdateBy(userInfo.getNickName());
PlatElderChildrenInfo finalChildrenInfo = childrenInfo;
NoFillUtil.executeCreate(() -> {
NoFillUtil.executeUpdate(() -> {
platElderChildrenInfoService.saveOrUpdate(finalChildrenInfo);
});
});
WechatUserInfo wechatUserVo = BeanDtoVoUtils.convert(childrenInfo, WechatUserInfo.class);
......@@ -92,6 +89,8 @@ public class PlatElderChildrenInfoUserLoginWechatServiceImpl implements PlatElde
u.setAvatarPath(f.getFullUrl());
});
String token = IdGen.getUUID();
wechatUserVo.setToken(token);
TokenUtil.wechatLogin(token, wechatUserVo);
......
package com.makeit.task;
import com.makeit.service.platform.elder.PlatElderDayReportWeekService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component
public class HeartRespiratoryTask {
@Autowired
private PlatElderDayReportWeekService platElderDayReportWeekService;
@Scheduled(cron = "0 0 2 * * ? ")
public void job(){
platElderDayReportWeekService.heartRespiratoryJob();
}
}
package com.makeit.task;
import com.makeit.global.aspect.tenant.TenantIdIgnore;
import com.makeit.service.platform.device.PlatDeviceService;
import com.makeit.service.platform.elder.PlatElderSleepService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
......@@ -15,9 +13,6 @@ public class IotSyncTask {
@Autowired
private PlatDeviceService platDeviceService;
@Autowired
private PlatElderSleepService platElderSleepService;
/**
* 一小时同步一次
......@@ -30,30 +25,4 @@ public class IotSyncTask {
}
/**
* 床位id 绑定的所有设备
* 房间id 绑定的所有设备
*
*/
/**
* 长者睡眠分析
*/
@Scheduled(cron = "0 0 2 * * ?")
@TenantIdIgnore
public void elderSleepSleepAnalysisTask() {
log.info("开始定时分析长者睡眠质量");
platElderSleepService.elderSleepSleepAnalysisTask();
log.info("定时分析长者睡眠质量结束");
}
/* @Scheduled(cron = "0 0 1 * * ?")
@TenantIdIgnore
public void elderCoordinateListAnalysisTask() {
log.info("开始定时分析24小时热力图");
platElderDayReportDayService.elderCoordinateListAnalysisTask();
log.info("定时分析长者24小时热力图");
}*/
}
package com.makeit.task;
import com.makeit.global.aspect.tenant.TenantIdIgnore;
import com.makeit.service.platform.elder.PlatElderBreatheAnalysisService;
import com.makeit.service.platform.elder.PlatElderBreatheDayStatService;
import com.makeit.service.platform.elder.PlatElderSleepService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component
@Slf4j
public class PlatElderReportTask {
@Autowired
private PlatElderSleepService platElderSleepService;
@Autowired
private PlatElderBreatheDayStatService platElderBreatheDayStatService;
@Autowired
private PlatElderBreatheAnalysisService platElderBreatheAnalysisService;
@Scheduled(cron = "0 0 1 * * ?")
@TenantIdIgnore
public void heartRespiratoryTask() {
log.info("开始生成长者每日呼吸,异常情况");
platElderBreatheDayStatService.heartRespiratoryTask();
log.info("生成长者每日呼吸,异常情况结束");
}
/**
* 长者呼吸心率分析
*/
@Scheduled(cron = "0 0 2 * * ?")
@TenantIdIgnore
public void elderHeartRespiratoryAnalysisTask() {
log.info("开始定时分析长者呼吸心率");
platElderBreatheAnalysisService.elderHeartRespiratoryAnalysisTask();
log.info("定时分析长者呼吸心率结束");
}
/**
* 长者睡眠分析
*/
@Scheduled(cron = "0 0 3 * * ?")
@TenantIdIgnore
public void elderSleepSleepAnalysisTask() {
log.info("开始定时分析长者睡眠质量");
platElderSleepService.elderSleepSleepAnalysisTask();
log.info("定时分析长者睡眠质量结束");
}
}
package com.makeit.task;
import com.makeit.service.platform.elder.PlatElderReportMonthService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component
public class ReportMonthTask {
@Autowired
private PlatElderReportMonthService platElderReportMonthService;
@Scheduled(cron = "0 0 1 * * ? ")
public void job(){
platElderReportMonthService.reportMonthJob();
}
}
......@@ -107,8 +107,9 @@ public class PlatDeviceViewVO extends BaseTenantDTO {
@ApiModelProperty(value = "创建时间", required = false)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createDate;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime startDate;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime endDate;
......
package com.makeit.vo.wechat.elder;
import com.makeit.common.dto.BaseTenantDTO;
import com.makeit.common.dto.BaseIdDTO;
import com.makeit.vo.platform.elder.PlatElderListVO;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
......@@ -17,10 +18,12 @@ import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = true)
@ApiModel(value="ElderChildrenInfo对象", description="长者子女账号")
public class PlatElderChildrenInfoWechatVO extends BaseTenantDTO {
public class PlatElderChildrenInfoWechatVO extends BaseIdDTO {
@ApiModelProperty(value = "长者id")
private String elderId;
@ApiModelProperty(value = "长者信息")
private PlatElderListVO platElder;
@ApiModelProperty(value = "姓名")
private String name;
......
......@@ -43,6 +43,8 @@ public class PushCallback implements MqttCallback {
public static final String DEVICE_BR_DATA = "device:brhr:data:";
public static final String DEVICE_SPACE_DATA = "device:space:data:";
public static final String DEVICE_FALL_DATA = "device:fall:data:";
public static final String REPORT_PROPERTY = "REPORT_PROPERTY";
@Autowired
private MqttConfig mqttConfig;
......@@ -101,15 +103,15 @@ public class PushCallback implements MqttCallback {
HeaderInfo headers = device.getHeaders();
List<HeaderInfo.Bind> bindings = headers.getBindings();
// TODO 先这样判断
if (headers.getProductName().contains("呼吸")) {
if (REPORT_PROPERTY.equals(device.getMessageType()) && headers.getProductName().contains("呼吸")) {
redisTemplate.opsForValue().set(DEVICE_BR_DATA + device.getDeviceId(),JSON.toJSONString(device.getProperties()),
5000, TimeUnit.MILLISECONDS);
}
if (headers.getProductName().contains("空间")) {
if (REPORT_PROPERTY.equals(device.getMessageType()) && headers.getProductName().contains("空间")) {
redisTemplate.opsForValue().set(DEVICE_SPACE_DATA + device.getDeviceId(),JSON.toJSONString(device.getProperties()),
5000, TimeUnit.MILLISECONDS);
}
if (headers.getProductName().contains("跌倒")) {
if (REPORT_PROPERTY.equals(device.getMessageType()) && headers.getProductName().contains("跌倒")) {
redisTemplate.opsForValue().set(DEVICE_FALL_DATA + device.getDeviceId(),JSON.toJSONString(device.getProperties()),
5000, TimeUnit.MILLISECONDS);
}
......@@ -120,6 +122,13 @@ public class PushCallback implements MqttCallback {
if (statusFlag) {
return;
}
String deviceId = device.getDeviceId();
String messageType = device.getMessageType();
//更新设备状态
boolean statusFlag = platDeviceService.updateDeviceStatus(messageType, deviceId, "");
if (statusFlag) {
return;
}
for (HeaderInfo.Bind binding : bindings) {
try {
String iot_tenantId = binding.getId();
......
package com.makeit.mqtt;
import com.makeit.common.dto.BaseIdDTO;
import com.makeit.common.response.ApiResponseEntity;
import com.makeit.common.response.ApiResponseUtils;
import com.makeit.global.annotation.AuthIgnore;
import com.makeit.utils.msg.dto.MsgSendDTO;
import com.makeit.utils.msg.sender.WxSpSender;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Collections;
@Api(tags = "告警记录2")
@RestController
@RequestMapping("/plat/test")
public class TestAlarmRecordController {
// @Autowired
// private MailMsgSender mailMsgSender;
// @Autowired
// private SmsMsgSender smsMsgSender;
// @Autowired
// private SmsVoiceSender smsVoiceSender;
//
// @ApiOperation("测试邮箱")
// @PostMapping("testMail")
// public ApiResponseEntity<Void> testMail(@RequestBody BaseIdDTO dto) {
// MsgSendDTO msgDTO = new MsgSendDTO();
// msgDTO.setSubject("测试消息");
// msgDTO.setReceiverList(Collections.singletonList("994997968@qq.com"));
// msgDTO.setOriContent("测试发送邮箱");
// mailMsgSender.send(msgDTO);
// return ApiResponseUtils.success();
// }
//
// @ApiOperation("测试短信")
// @PostMapping("testMsg")
// public ApiResponseEntity<Void> testMsg(@RequestBody BaseIdDTO dto) throws Exception {
// MsgSendDTO msgDTO = new MsgSendDTO();
// msgDTO.setReceiverList(Collections.singletonList("18850503603"));
// msgDTO.setOriContent("测试短信test");
// smsMsgSender.send(msgDTO);
// return ApiResponseUtils.success();
// }
//
// @ApiOperation("测试语音短信")
// @PostMapping("testVoice")
// @AuthIgnore
// public ApiResponseEntity<Void> testVoice(@RequestBody BaseIdDTO dto) throws Exception {
// MsgSendDTO msgDTO = new MsgSendDTO();
// msgDTO.setReceiverList(Collections.singletonList("18850503603"));
// msgDTO.setOriContent("测试短信test");
// smsVoiceSender.send(msgDTO);
// return ApiResponseUtils.success();
// }
@Autowired
private WxSpSender wxSpSender;
// @ApiOperation("测试公众号消息")
// @PostMapping("testSp")
// @AuthIgnore
// public ApiResponseEntity<Void> testVoice(@RequestBody BaseIdDTO dto) throws Exception {
// MsgSendDTO msgDTO = new MsgSendDTO();
// msgDTO.setReceiverList(Collections.singletonList("18850503603"));
// msgDTO.setOriContent("测试短信test");
// wxSpSender.send(msgDTO);
// return ApiResponseUtils.success();
// }
@ApiOperation("测试公众号消息")
@PostMapping("testSp")
@AuthIgnore
public ApiResponseEntity<Void> testSpVoice(@RequestBody BaseIdDTO dto) throws Exception {
MsgSendDTO msgDTO = new MsgSendDTO();
msgDTO.setReceiverList(Collections.singletonList("18850503603"));
msgDTO.setOriContent("测试短信test");
wxSpSender.send(msgDTO);
return ApiResponseUtils.success();
}
// @Autowired
// private PushCallback pushCallback;
//
// @ApiOperation("测试跌倒")
// @PostMapping("testFall")
// @AuthIgnore
// public ApiResponseEntity<Void> testVoice(@RequestBody DeviceInfo info) throws Exception {
//
// pushCallback.checkAlarm(info);
// return ApiResponseUtils.success();
// }
//
//
// @Autowired
// private PlatDayDurationRecordService platDayDurationRecordService;
//
// @ApiOperation("测试")
// @PostMapping("test")
// @AuthIgnore
// public ApiResponseEntity<List<PlatDayDurationRecord>> test(@RequestBody DeviceInfo info) throws Exception {
// PlatDayDurationRecord platDayDurationRecord = new PlatDayDurationRecord();
// platDayDurationRecord.setDay(new Date());
// LambdaQueryWrapper<PlatDayDurationRecord> platDayDurationRecordLambdaQueryWrapper = new LambdaQueryWrapper<>();
// platDayDurationRecordLambdaQueryWrapper.eq(PlatDayDurationRecord::getDay,platDayDurationRecord.getDay());
// List<PlatDayDurationRecord> list = platDayDurationRecordService.list();
// return ApiResponseUtils.success(list);
// }
}
......@@ -134,7 +134,10 @@ wx:
token: #微信小程序消息服务器配置的token
aesKey: #微信小程序消息服务器配置的EncodingAESKey
msgDataFormat: JSON
mp:
config:
appid: wx5c73cad7aeb788c6
secret: 7c3a0665bf2adbe67a58a4d6c8017243
sms:
send:
url: http://www.aozoneyun.com/message/message/send
......
......@@ -130,6 +130,10 @@ wx:
token: #微信小程序消息服务器配置的token
aesKey: #微信小程序消息服务器配置的EncodingAESKey
msgDataFormat: JSON
mp:
config:
appid: wx5c73cad7aeb788c6
secret: 7c3a0665bf2adbe67a58a4d6c8017243
sms:
send:
......
......@@ -148,6 +148,8 @@ tenant:
- plat_user
- plat_menu
- plat_day_duration_record
- plat_elder_children_info
- sys_api_secret
rsa:
......
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