Commit c670f26e by 汪志阳

modify:微信推送公众号

parent b4067fd8
......@@ -7,6 +7,7 @@ import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.time.LocalDateTime;
import java.util.Collection;
import java.util.List;
......@@ -54,6 +55,12 @@ public class MsgSendDTO {
@ApiModelProperty("区域名称")
private String regionName;
@ApiModelProperty("预警时间")
private LocalDateTime alarmDate;
@ApiModelProperty(value = "告警类型")
private String alarmType;
}
......
......@@ -4,6 +4,7 @@ import cn.binarywang.wx.miniapp.api.WxMaService;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import com.makeit.utils.data.convert.JsonUtil;
import com.makeit.utils.msg.SendTypeEnum;
import com.makeit.utils.msg.dto.MsgSendDTO;
import lombok.extern.slf4j.Slf4j;
......@@ -15,12 +16,11 @@ 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{
public class WxSpSender implements IMsgSender {
@Autowired
private WxMaService wxMaService;
@Autowired
......@@ -31,49 +31,53 @@ public class WxSpSender implements IMsgSender{
/**
* 小程序公众号消息
* zn5fBS9cqjnN5UB78tAbm53M3dXufR2b5K1a8mkhXCY
*
* 告警对象{{thing2.DATA}}
* 告警时间{{time3.DATA}}
* 告警地点{{thing4.DATA}}
* 事件类型{{thing8.DATA}}
* 告警对象 {{thing2.DATA}}
* 告警时间 {{time3.DATA}}
* 告警地点 {{thing4.DATA}}
* 事件类型 {{thing8.DATA}}
* 跳转文案点击查看详情
*
* @param msgDTO
*/
@Override
public void send(MsgSendDTO msgDTO) {
log.info("开始执行微信公众通知!!");
List<MsgSendDTO.ReceiverInfo> receiverInfos = msgDTO.getReceiverInfos();
if (CollUtil.isEmpty(receiverInfos)) {
return;
}
String content = msgDTO.getOriContent();
receiverInfos.forEach(r -> {
if(StrUtil.isBlank(r.getWeChatOpenid())){
if (StrUtil.isBlank(r.getWeChatOpenid())) {
return;
}
sentMsg(content,r.getRegionName(),r.getName(),r.getWeChatOpenid());
sentMsg(r);
});
}
/**
* 告警对象{{thing2.DATA}}——长者姓名
* 告警时间{{time3.DATA}}
* 异常原因{{thing25.DATA}}——告警类型
* 设备位置{{thing22.DATA}}——绑定上级空间名+房间和床位信息,没有床位就到房间
*
* @param content 报警内容
* @param place 地点
* @param name 长者姓名
* @param openId 接收人openId
*/
private void sentMsg(String content, String place, String name, String openId) {
private void sentMsg(MsgSendDTO.ReceiverInfo info) {
if (StrUtil.isBlank(info.getWeChatOpenid())) {
return;
}
log.info("微信公众通知:content:{}", JsonUtil.toJson(info));
List<WxMpTemplateData> mpData = Arrays.asList(
new WxMpTemplateData("thing8", content),
new WxMpTemplateData("thing4", place),
new WxMpTemplateData("thing2", name),
new WxMpTemplateData("time3", DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss"))
new WxMpTemplateData("thing25", info.getAlarmType()),
new WxMpTemplateData("thing22", info.getRegionName()),
new WxMpTemplateData("thing2", info.getName()),
new WxMpTemplateData("time3", DateUtil.format(info.getAlarmDate(), "yyyy-MM-dd HH:mm:ss"))
);
try {
// String testOpenId = "oM2OI67H11zTZL88X99PxL6rAS3Y";
WxMpTemplateMessage wxMpTemplateMessage = WxMpTemplateMessage.builder().toUser(openId)
.templateId("zn5fBS9cqjnN5UB78tAbm53M3dXufR2b5K1a8mkhXCY")
WxMpTemplateMessage wxMpTemplateMessage = WxMpTemplateMessage.builder().toUser(info.getWeChatOpenid())
.templateId("T8KWZtTBqQjL0H4BPQ4lMEuj4WwTS7lWegt6ys5VXmE")
.data(mpData)
.build();
wxMpService.getTemplateMsgService().sendTemplateMsg(wxMpTemplateMessage);
......
......@@ -127,9 +127,12 @@ public class OffBedAlarm implements IAlarm {
}
alarmRedisDTO = RedisUtil.get(RedisConst.ALARM_DEVICE_OFF_BED_ID + deviceId);
if (alarmRedisDTO == null) {
return;
}
if ("1".equals(alarmRedisDTO.getAlarm())) {
log.info("deviceId:{},离床告警已发送预警过,第一次离床时间:{}", deviceId, longToTime(alarmRedisDTO.getStartLong()));
// log.info("deviceId:{},离床告警已发送预警过,第一次离床时间:{}", deviceId, longToTime(alarmRedisDTO.getStartLong()));
return;
}
// 是否跨天 xxx-0:00,未跨天
......@@ -155,7 +158,7 @@ public class OffBedAlarm implements IAlarm {
PlatAlarmCheckDTO platAlarmCheckDTO,
PlatAlarmConfig config,
String deviceId) {
log.info("deviceId:{},cross_config:{},第一次离床时间:{}", deviceId, config.getRuleConfig(), longToTime(alarmRedisDTO.getStartLong()));
// log.info("deviceId:{},cross_config:{},第一次离床时间:{}", deviceId, config.getRuleConfig(), longToTime(alarmRedisDTO.getStartLong()));
Integer duration = ruleConfig.getDuration();
LocalTime startTime = ruleConfig.getOffBedStart();
LocalTime endTime = ruleConfig.getOffBedEnd();
......@@ -214,7 +217,7 @@ public class OffBedAlarm implements IAlarm {
PlatAlarmCheckDTO platAlarmCheckDTO,
PlatAlarmConfig config,
String deviceId) {
log.info("deviceId:{},uncross_config:{},第一次离床时间:{}", deviceId, config.getRuleConfig(), longToTime(alarmRedisDTO.getStartLong()));
// log.info("deviceId:{},uncross_config:{},第一次离床时间:{}", deviceId, config.getRuleConfig(), longToTime(alarmRedisDTO.getStartLong()));
Integer duration = ruleConfig.getDuration();
LocalTime startTime = ruleConfig.getOffBedStart();
LocalTime endTime = ruleConfig.getOffBedEnd();
......
......@@ -17,6 +17,7 @@ import com.makeit.common.page.PageReqDTO;
import com.makeit.common.page.PageVO;
import com.makeit.dto.platform.alarm.PlatAlarmCheckDTO;
import com.makeit.dto.platform.alarm.PlatAlarmRecordQueryDTO;
import com.makeit.dto.platform.device.PlatDeviceQueryDTO;
import com.makeit.entity.platform.alarm.PlatAlarmConfig;
import com.makeit.entity.platform.alarm.PlatAlarmRecord;
import com.makeit.entity.platform.auth.PlatOrg;
......@@ -35,6 +36,8 @@ import com.makeit.global.aspect.tenant.TenantIdIgnore;
import com.makeit.mapper.platform.alarm.PlatAlarmRecordMapper;
import com.makeit.mapper.platform.elder.PlatElderChildrenInfoMapper;
import com.makeit.module.iot.service.IotDevicePropertiesOperateService;
import com.makeit.module.system.entity.SysDictionary;
import com.makeit.module.system.service.SysDictionaryService;
import com.makeit.service.platform.alarm.PlatAlarmConfigService;
import com.makeit.service.platform.alarm.PlatAlarmRecordService;
import com.makeit.service.platform.auth.PlatOrgService;
......@@ -61,6 +64,7 @@ import com.makeit.utils.user.common.CommonUserVO;
import com.makeit.utils.user.wechat.WechatUserUtil;
import com.makeit.vo.platform.alarm.PlatAlarmExternalRecordVO;
import com.makeit.vo.platform.alarm.PlatAlarmRecordVO;
import com.makeit.vo.platform.device.PlatDeviceListVO;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
......@@ -117,6 +121,8 @@ public class PlatAlarmRecordServiceImpl extends ServiceImpl<PlatAlarmRecordMappe
private IotDevicePropertiesOperateService iotDevicePropertiesOperateService;
@Resource
private PlatElderChildrenInfoMapper platElderChildrenInfoMapper;
@Resource
private SysDictionaryService sysDictionaryService;
@Override
......@@ -329,8 +335,8 @@ public class PlatAlarmRecordServiceImpl extends ServiceImpl<PlatAlarmRecordMappe
}
allChildInfoList.addAll(childrenInfoList);
Set<String> phoneSet = childrenInfoList.stream().map(PlatElderChildrenInfo::getPhone).collect(Collectors.toSet());
//告警配置和租户告警 字典一致 todo SendTypeEnum.CHILD_WECHAT 公众号模板未好
List<SendTypeEnum> notifyChannelList = Arrays.asList(SendTypeEnum.SMS, SendTypeEnum.VOICE_SMS);
//告警配置和租户告警 字典一致
List<SendTypeEnum> notifyChannelList = Arrays.asList(SendTypeEnum.SMS, SendTypeEnum.VOICE_SMS, SendTypeEnum.CHILD_WECHAT);
List<MsgSendDTO.ReceiverInfo> receiverInfos = buildReceiverInfo(allChildInfoList, alarmRecord);
//发送消息
noticeByChannel(alarmConfig, alarmRecord, phoneSet, null, notifyChannelList, receiverInfos);
......@@ -350,14 +356,32 @@ public class PlatAlarmRecordServiceImpl extends ServiceImpl<PlatAlarmRecordMappe
if (CollUtil.isEmpty(childInfoList)) {
return list;
}
PageReqDTO<PlatDeviceQueryDTO> pageReqDTO = new PageReqDTO<>();
pageReqDTO.setPage(1);
pageReqDTO.setLimit(1);
PlatDeviceQueryDTO queryDTO = new PlatDeviceQueryDTO();
queryDTO.setId(alarmRecord.getDeviceId());
pageReqDTO.setData(queryDTO);
PageVO<PlatDeviceListVO> platPage = platDeviceService.platPage(pageReqDTO);
String regionName = alarmRecord.getRegionName();
if (platPage != null && CollUtil.isNotEmpty(platPage.getList())) {
regionName = platPage.getList().get(0).getSpaceName();
}
List<SysDictionary> dictList = sysDictionaryService.list(Wrappers.<SysDictionary>lambdaQuery().like(SysDictionary::getCode, "alarm.alarmType"));
Map<String, SysDictionary> dictMap = StreamUtil.toMapDep(dictList, SysDictionary::getValue);
SysDictionary dictionary = dictMap.get(alarmRecord.getAlarmType());
String finalRegionName = regionName;
childInfoList.forEach(c -> {
if (StrUtil.isBlank(c.getWeChatOpenid())) {
return;
}
MsgSendDTO.ReceiverInfo receiverInfo = new MsgSendDTO.ReceiverInfo();
receiverInfo.setRegionName(alarmRecord.getRegionName());
receiverInfo.setName(c.getName());
receiverInfo.setRegionName(finalRegionName);
receiverInfo.setName(alarmRecord.getElderName());
receiverInfo.setWeChatOpenid(c.getWeChatOpenid());
receiverInfo.setAlarmDate(alarmRecord.getAlarmDate());
receiverInfo.setAlarmType(dictionary != null ? dictionary.getName() : alarmRecord.getAlarmType());
list.add(receiverInfo);
});
return list;
......@@ -423,11 +447,9 @@ public class PlatAlarmRecordServiceImpl extends ServiceImpl<PlatAlarmRecordMappe
private void noticeByChannel(PlatAlarmConfig alarmConfig, PlatAlarmRecord alarmRecord, Set<String> phoneSet,Set<String> emailSet,
List<SendTypeEnum> notifyChannelList, List<MsgSendDTO.ReceiverInfo> receiverInfos) {
String elderName = alarmRecord.getElderName();
log.info("开始短信通知:{},老人:{}", JSON.toJSONString(alarmConfig), elderName);
if (StrUtil.isNotBlank(alarmRecord.getElderIds()) && StrUtil.isBlank(elderName)) {
List<PlatElder> platElders = platElderService.listByIds(Arrays.asList(alarmRecord.getElderIds().split(",")));
elderName = platElders.stream().map(PlatElder::getName).collect(Collectors.joining(","));
log.info("开始短信通知--通知老人:{}", elderName);
}
String notifyChannel = alarmConfig.getNotifyChannel();
if (StringUtils.isEmpty(notifyChannel)) {
......
......@@ -152,53 +152,6 @@ public class PlatElderDayReportDayServiceImpl implements PlatElderDayReportDaySe
}
private Long getSleepScore (PlatElderSleepAnalysis platElderSleepAnalysis) {
SaasSleepEvaluateStandardReport evaluateStandardReport = saasSleepEvaluateStandardReportService.getOne(
new QueryWrapper<SaasSleepEvaluateStandardReport>().lambda().orderByDesc(BaseEntity::getCreateDate)
.last("limit 1"));
List<PlatElderSleep> sleepList = platElderSleepService.list(Wrappers.<PlatElderSleep>lambdaQuery()
.eq(PlatElderSleep::getHappenDate, platElderSleepAnalysis.getHappenDate())
.eq(PlatElderSleep::getElderId, platElderSleepAnalysis.getElderId()));
String baseScore = platElderSleepService.calculateScores(Long.parseLong(platElderSleepAnalysis.getSleepTime()),
Long.parseLong(platElderSleepAnalysis.getRestTime()), 0, 0, 0, evaluateStandardReport);
if(CollUtil.isEmpty(sleepList)){
return Long.parseLong(baseScore);
}
AtomicReference<Long> score = new AtomicReference<>(0L);
sleepList.forEach(s-> {
List<PlatSleepRangeVO> sleepRecord = s.getSleepRecord();
sleepRecord.forEach(l -> {
LocalDateTime start = LocalDateTime.parse(l.getStartTime(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"));
LocalDateTime end = LocalDateTime.parse(l.getEndTime(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"));
long minutes = Duration.between(start, end).toMinutes();
SleepTypeEnum sleepType = SleepTypeEnum.getSleepType(l.getSleepType());
if (sleepType == null) {
return;
}
String sleepScore = "0";
switch (sleepType) {
case SLEEP_LIGHTNESS:
sleepScore = platElderSleepService.calculateScores(0, 0, 0, 0, minutes, evaluateStandardReport);
break;
case SLEEP_DEEP:
sleepScore = platElderSleepService.calculateScores(0, 0, minutes, 0, 0, evaluateStandardReport);
break;
default:
}
String finalSleepScore = sleepScore;
score.updateAndGet(v -> v + Long.parseLong(finalSleepScore));
});
});
Long result = Long.parseLong(baseScore) + score.get();
return result.compareTo(100L) > 0 ? 100L : result;
}
@Override
public List<PlatElderSleepDiagramVO> sleepDiagram(PlatElderReportDTO platElderIdDTO) {
LocalDate now = Optional.ofNullable(platElderIdDTO.getNow()).orElse(LocalDate.now());
......
......@@ -51,6 +51,7 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicReference;
import java.util.stream.Collectors;
......@@ -966,8 +967,28 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
return result;
}
/**
* 深度睡眠 : 每1小时加10分
* 持续3小时加60分
* 持续4小时加80分
* 浅度睡眠:每持续1小时加5分
* 清醒:每1次扣5分,超过10次扣10分
*
* 睡眠时长(扣除清醒):持续6小时加60分
* @param daySleepTime 睡眠时长
* @param dayRestTime 小憩时长
* @param deepTime 深度睡眠时长
* @param soberTime 中度睡眠时长
* @param lightTime 浅度睡眠时长
* @param evaluateStandardReport
* @return
*/
@Override
public String calculateScores(long daySleepTime, long dayRestTime, long deepTime, long soberTime, long lightTime,
public String calculateScores(long daySleepTime,
long dayRestTime,
long deepTime,
long soberTime,
long lightTime,
SaasSleepEvaluateStandardReport evaluateStandardReport) {
List<SleepConfigVO> sleepDeepConfigList = JSON.parseArray(evaluateStandardReport.getSleepDeepConfig(), SleepConfigVO.class);
List<SleepConfigVO> soberConfigList = JSON.parseArray(evaluateStandardReport.getSoberConfig(), SleepConfigVO.class);
......@@ -1010,6 +1031,39 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
return String.valueOf(totalScore);
}
/**
* 深度睡眠 : 每1小时加10分
* 持续3小时加60分
* 持续4小时加80分
* 浅度睡眠:每持续1小时加5分
* 清醒:每1次扣5分,超过10次扣10分
*
* 睡眠时长(扣除清醒):持续6小时加60分
*/
public String calculateScores2(SleepTimeDTO sleepTimeDTO, SleepTimeMinuteDTO sleepTimeMinute,
SaasSleepEvaluateStandardReport evaluateStandardReport) {
AtomicInteger score = new AtomicInteger();
List<SleepTimeAnalysisVO> deepList = sleepTimeDTO.getDeepList();
List<SleepTimeAnalysisVO> lightList = sleepTimeDTO.getLightList();
List<SleepTimeAnalysisVO> soberList = sleepTimeDTO.getSoberList();
List<SleepConfigVO> sleepDeepConfigList = JSON.parseArray(evaluateStandardReport.getSleepDeepConfig(), SleepConfigVO.class);
List<SleepConfigVO> soberConfigList = JSON.parseArray(evaluateStandardReport.getSoberConfig(), SleepConfigVO.class);
SleepConfigVO lightnessConfig = JSON.parseObject(evaluateStandardReport.getSleepLightnessConfig(), SleepConfigVO.class);
List<SleepConfigVO> sleepTimeConfigList = JSON.parseArray(evaluateStandardReport.getSleepTime(), SleepConfigVO.class);
if (CollUtil.isNotEmpty(deepList) && CollUtil.isNotEmpty(sleepDeepConfigList)) {
deepList.forEach(d -> {
long interval = d.getInterval() == null ? 0 : d.getInterval() / 60;
SleepConfigVO configVO = sleepDeepConfigList.stream().filter(f -> f.getHour().equals(Long.toString(interval))).findFirst().orElse(null);
if (configVO == null) {
return;
}
score.addAndGet(Integer.parseInt(configVO.getScore()));
});
}
return Integer.toString(score.get());
}
public Long getDurationRange(String startTime, String endTime) {
LocalDateTime target = LocalDateTime.parse(startTime, DEFAULT_FORMATTER);
......
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