Commit cc7954f8 by 汪志阳

fix:告警消息推送微信公众号

parent 68a0488b
ALTER TABLE `plat_device_other`
ALTER TABLE `plat_device_other`
......@@ -121,4 +121,6 @@ ALTER TABLE `plat_alarm_record`
alter table plat_elder_sleep_analysis add column `ori_device_id` varchar(64) default NULL COMMENT 'iot设备id';
alter table plat_elder_breathe_analysis add column `ori_device_id` varchar(64) default NULL COMMENT 'iot设备id';
\ No newline at end of file
alter table plat_elder_breathe_analysis add column `ori_device_id` varchar(64) default NULL COMMENT 'iot设备id';
alter table plat_elder_children_info add column weChat_openid varchar(64) default null comment '公众号openid';
\ No newline at end of file
......@@ -21,6 +21,7 @@ public enum SendTypeEnum implements BaseEnum {
private String code;
@Override
public String getValue() {
return SysDictUtil.getValue(code);
}
......
package com.makeit.utils.msg.dto;
import com.makeit.utils.msg.SendTypeEnum;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Collection;
import java.util.List;
@Data
@Builder
......@@ -18,6 +20,9 @@ public class MsgSendDTO {
private String subject;
/**
* 手机号
*/
private Collection<String> receiverList;
private Collection<String> emailSet;
......@@ -35,5 +40,21 @@ public class MsgSendDTO {
private String alarmType;
private List<ReceiverInfo> receiverInfos;
@Data
public static class ReceiverInfo {
@ApiModelProperty("通知者openId")
private String weChatOpenid;
@ApiModelProperty("长者名称")
private String name;
@ApiModelProperty("区域名称")
private String regionName;
}
}
package com.makeit.utils.msg.sender;
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.msg.SendTypeEnum;
import com.makeit.utils.msg.dto.MsgSendDTO;
import lombok.extern.slf4j.Slf4j;
......@@ -24,6 +26,8 @@ public class WxSpSender implements IMsgSender{
@Autowired
private WxMpService wxMpService;
private final SendTypeEnum sendTypeEnum = SendTypeEnum.CHILD_WECHAT;
/**
* 小程序公众号消息
* zn5fBS9cqjnN5UB78tAbm53M3dXufR2b5K1a8mkhXCY
......@@ -39,33 +43,49 @@ public class WxSpSender implements IMsgSender{
@Override
public void send(MsgSendDTO msgDTO) {
List<MsgSendDTO.ReceiverInfo> receiverInfos = msgDTO.getReceiverInfos();
if (CollUtil.isNotEmpty(receiverInfos)) {
return;
}
String content = msgDTO.getOriContent();
receiverInfos.forEach(r -> {
if(StrUtil.isBlank(r.getWeChatOpenid())){
return;
}
sentMsg(content,r.getRegionName(),r.getName(),r.getWeChatOpenid());
});
}
/**
*
* @param content 报警内容
* @param place 地点
* @param name 长者姓名
* @param openId 接收人openId
*/
private void sentMsg(String content, String place, String name, String openId) {
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"))
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"))
);
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")
// String testOpenId = "oM2OI67H11zTZL88X99PxL6rAS3Y";
WxMpTemplateMessage wxMpTemplateMessage = WxMpTemplateMessage.builder().toUser(openId)
.templateId("zn5fBS9cqjnN5UB78tAbm53M3dXufR2b5K1a8mkhXCY")
.data(mpData)
.build();
wxMpService.getTemplateMsgService().sendTemplateMsg(wxMpTemplateMessage);
log.info("发送小程序消息成功");
} catch (WxErrorException e) {
log.error("发送小程序消息失败:",e);
log.error("发送小程序消息失败:", e);
}
}
@Override
public boolean support(SendTypeEnum sendTypeEnum) {
return false;
public boolean support(SendTypeEnum param) {
return sendTypeEnum == param;
}
......
......@@ -40,5 +40,8 @@ public class WechatLoginPhoneDTO {
@ApiModelProperty(value = "微信secret")
private String secret;
@ApiModelProperty(value = "微信公众号openid")
private String weChatOpenid;
}
......@@ -3,7 +3,6 @@ package com.makeit.utils.third.wechat;
import cn.binarywang.wx.miniapp.api.WxMaService;
import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
import cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo;
import cn.binarywang.wx.miniapp.config.WxMaConfig;
import cn.binarywang.wx.miniapp.config.impl.WxMaDefaultConfigImpl;
import com.makeit.config.WxMaConfiguration;
import com.makeit.enums.CodeMessageEnum;
......
......@@ -4,12 +4,10 @@ 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;
......
......@@ -54,6 +54,9 @@ public class PlatElderChildrenInfo extends BaseBusEntity {
@ApiModelProperty(value = "微信头像路径")
private String avatar;
@ApiModelProperty(value = "微信公众号openid")
@TableField(value = "weChat_openid")
private String weChatOpenid;
......
......@@ -303,6 +303,7 @@ public class PlatAlarmRecordServiceImpl extends ServiceImpl<PlatAlarmRecordMappe
* @param alarmConfig
* @param alarmRecord
*/
@Override
@Transactional
@TenantIdIgnore
public void noticeChildren(PlatAlarmConfig alarmConfig, PlatAlarmRecord alarmRecord) {
......@@ -321,9 +322,9 @@ public class PlatAlarmRecordServiceImpl extends ServiceImpl<PlatAlarmRecordMappe
Set<String> phoneSet = childrenInfoList.stream().map(PlatElderChildrenInfo::getPhone).collect(Collectors.toSet());
//告警配置和租户告警 字典一致
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);
noticeByChannel(alarmConfig, alarmRecord, phoneSet,null, notifyChannelList, receiverInfos);
String childIdJoin = allChildInfoList.stream().map(BaseEntity::getId).collect(Collectors.joining(","));
//通知的子女
......@@ -334,6 +335,21 @@ public class PlatAlarmRecordServiceImpl extends ServiceImpl<PlatAlarmRecordMappe
}
private List<MsgSendDTO.ReceiverInfo> buildReceiverInfo(List<PlatElderChildrenInfo> childInfoList, PlatAlarmRecord alarmRecord) {
List<MsgSendDTO.ReceiverInfo> list = new ArrayList<>();
if (CollUtil.isEmpty(childInfoList)) {
return list;
}
childInfoList.forEach(c -> {
MsgSendDTO.ReceiverInfo receiverInfo = new MsgSendDTO.ReceiverInfo();
receiverInfo.setRegionName(alarmRecord.getRegionName());
receiverInfo.setName(c.getName());
receiverInfo.setWeChatOpenid(c.getWeChatOpenid());
});
return list;
}
/**
* 通知工作人员
* 短信
......@@ -374,7 +390,7 @@ public class PlatAlarmRecordServiceImpl extends ServiceImpl<PlatAlarmRecordMappe
Set<String> phoneSet = platUserList.stream().map(PlatUser::getMobile).collect(Collectors.toSet());
Set<String> emailSet = platUserList.stream().map(PlatUser::getEmail).collect(Collectors.toSet());
//发送消息
noticeByChannel(alarmConfig, alarmRecord, phoneSet,emailSet, notifyChannelList);
noticeByChannel(alarmConfig, alarmRecord, phoneSet,emailSet, notifyChannelList, null);
String userIdJoin = platUserList.stream().map(PlatUser::getId).collect(Collectors.joining(","));
alarmRecord.setNotifyUser(userIdJoin);
......@@ -391,7 +407,8 @@ public class PlatAlarmRecordServiceImpl extends ServiceImpl<PlatAlarmRecordMappe
* @param phoneSet 工作人员手机号
* @param notifyChannelList 通知渠道
*/
private void noticeByChannel(PlatAlarmConfig alarmConfig, PlatAlarmRecord alarmRecord, Set<String> phoneSet,Set<String> emailSet, List<SendTypeEnum> notifyChannelList) {
private void noticeByChannel(PlatAlarmConfig alarmConfig, PlatAlarmRecord alarmRecord, Set<String> phoneSet,Set<String> emailSet,
List<SendTypeEnum> notifyChannelList, List<MsgSendDTO.ReceiverInfo> receiverInfos) {
log.info("开始短信通知:{}", JSON.toJSONString(alarmConfig));
String notifyChannel = alarmConfig.getNotifyChannel();
if(StringUtils.isEmpty(notifyChannel)){
......@@ -423,6 +440,7 @@ public class PlatAlarmRecordServiceImpl extends ServiceImpl<PlatAlarmRecordMappe
msgSendDTO.setOriContent(alarmRecord.getContent());
msgSendDTO.setSubject(alarmRecord.getContent());
msgSendDTO.setParam(alarmRecord.getElderName());
msgSendDTO.setReceiverInfos(receiverInfos);
String alarmType = alarmConfig.getAlarmType();
//告警类型 数据字典 1 长者跌倒 2 呼吸异常 3 心率异常 4 行为异常 5 离床异常
if (StringUtils.equals(alarmType, "1")) {
......
......@@ -338,6 +338,7 @@ public class PlatElderChildrenInfoServiceImpl extends ServiceImpl<PlatElderChild
}
newChildrenInfo.setTenantId(platElder.getTenantId());
newChildrenInfo.setOpenid(copyInfo.getOpenid());
newChildrenInfo.setWeChatOpenid(copyInfo.getWeChatOpenid());
newChildrenInfo.setPhone(copyInfo.getPhone());
newChildrenInfo.setName(copyInfo.getName());
newChildrenInfo.setAvatar(copyInfo.getAvatar());
......
......@@ -92,7 +92,7 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
List<String> dayHourRangeList = getLastDayHourRange(month,day);
String currentDate = LocalDate.now().minusDays(1).toString();
if(month != null && day != null){
currentDate = LocalDate.of(2023, month, day).minusDays(1).toString();
currentDate = LocalDate.of(2024, month, day).minusDays(1).toString();
}
SaasSleepAnalysisModel analysisModel = saasSleepAnalysisModelService.getOne(new QueryWrapper<SaasSleepAnalysisModel>().lambda()
......@@ -699,7 +699,7 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
}
}
int riseRepeatThreshold = Integer.parseInt(analysisModel.getRiseRepeatThreshold());
List<PlatElderSleep> mergeElderSleepList = mergeWakeUpList(elderSleepList, riseRepeatThreshold);
List<PlatElderSleep> mergeElderSleepList = recursion(elderSleepList, elderSleepList.size() / 2, riseRepeatThreshold);
platElderSleepService.saveBatch(mergeElderSleepList);
String score = calculateScores(daySleepTime, dayRestTime, deepTime, soberTime, lightTime, evaluateStandardReport);
EvaluateReportVO sleepReport = saasSleepEvaluateReportService.getByScore(Long.parseLong(score));
......@@ -724,6 +724,17 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
}
private List<PlatElderSleep> recursion(List<PlatElderSleep> elderSleepList, int count, int riseRepeatThreshold) {
List<PlatElderSleep> platElderSleeps = platElderSleepService.mergeWakeUpList(elderSleepList, riseRepeatThreshold);
if (count == 0) {
return platElderSleeps;
} else {
count--;
return recursion(platElderSleeps, count, riseRepeatThreshold);
}
}
/**
* @param elderSleepList
......@@ -747,7 +758,7 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
}
// 2小时内再次入睡的数据,合并
List<PlatElderSleep> riseSleepList = finalElderSleepList.stream().filter(f -> Duration.between(e.getEndSleep(),
f.getStartSleep()).toHours() < riseRepeatThreshold).collect(Collectors.toList());
f.getStartSleep()).toMinutes() < riseRepeatThreshold * 60L).collect(Collectors.toList());
if (CollUtil.isEmpty(riseSleepList)) {
result.add(e);
return;
......@@ -828,7 +839,7 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
int count = 24;
LocalDateTime localDateTime = LocalDateTime.now();
if (month != null && day != null) {
localDateTime = LocalDateTime.of(LocalDate.of(2023, month, day), LocalTime.now());
localDateTime = LocalDateTime.of(LocalDate.of(2024, month, day), LocalTime.now());
}
List<String> list = Lists.newArrayList();
String startTime;
......
package com.makeit.service.wechat.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.makeit.dto.platform.auth.PlatOrgSplitDTO;
import com.makeit.entity.platform.elder.PlatElderChildrenInfo;
import com.makeit.entity.saas.PlatTenant;
import com.makeit.enums.Const;
import com.makeit.enums.HeaderConst;
import com.makeit.global.aspect.misc.nofill.NoFillUtil;
import com.makeit.service.platform.elder.PlatElderChildrenInfoService;
import com.makeit.service.saas.PlatTenantService;
......@@ -16,8 +13,8 @@ import com.makeit.utils.msg.config.WxConfig;
import com.makeit.utils.old.StringUtils;
import com.makeit.utils.sys.FileUtil;
import com.makeit.utils.third.wechat.WechatLoginPhoneDTO;
import com.makeit.utils.third.wechat.WxUserInfo;
import com.makeit.utils.third.wechat.WechatUtil;
import com.makeit.utils.third.wechat.WxUserInfo;
import com.makeit.utils.user.TokenUtil;
import com.makeit.utils.user.wechat.WechatUserInfo;
import org.apache.commons.collections4.CollectionUtils;
......@@ -60,7 +57,7 @@ public class PlatElderChildrenInfoUserLoginWechatServiceImpl implements PlatElde
childrenInfo.setOpenid(userInfo.getOpenId());
childrenInfo.setName(userInfo.getNickName());
childrenInfo.setWeChatOpenid(dto.getWeChatOpenid());
childrenInfo.setCreateBy(userInfo.getNickName());
childrenInfo.setUpdateBy(userInfo.getNickName());
childrenInfo.setPhone(userInfo.getPhoneNumber());
......
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