lilt085163@126.com 3 gadi atpakaļ
vecāks
revīzija
ad5e2ebe91

+ 2 - 0
src/main/java/com/care/bms/controller/EventHandleController.java

@@ -5,6 +5,8 @@ import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.care.bigscreen.service.BigScreenService;
 import com.care.bms.service.BmsEventOrderService;
+import com.care.common.cache.RedisKeyConstant;
+import com.care.common.cache.RedisUtil;
 import com.care.common.entity.CareEventOrderChamb;
 import com.care.common.enums.CallResultEnum;
 import com.care.common.vo.order.*;

+ 54 - 7
src/main/java/com/care/bms/service/BmsEventOrderService.java

@@ -10,6 +10,7 @@ import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.care.bigscreen.service.BigScreenService;
+import com.care.client.dto.TemplateDataDTO;
 import com.care.common.cache.RedisKeyConstant;
 import com.care.common.cache.RedisUtil;
 import com.care.common.entity.*;
@@ -20,15 +21,15 @@ import com.care.common.vo.PageReqVO;
 import com.care.common.vo.UserLogindConvertVO;
 import com.care.common.vo.order.*;
 import com.care.common.vo.outcall.CcCallResultVO;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.compress.utils.Lists;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
+import java.text.SimpleDateFormat;
+import java.util.*;
 
 /**
  * 事件定单表(CareEventOrder)表服务实现类
@@ -38,6 +39,7 @@ import java.util.Map;
  */
 @Service
 @Transactional(rollbackFor = Exception.class)
+@Slf4j
 public class BmsEventOrderService {
     @Resource
     RedisUtil redisUtil;
@@ -75,7 +77,8 @@ public class BmsEventOrderService {
 
     @Resource
     private CareHouseContactService careHouseContactService;
-
+    @Resource
+    private WxNoticSendService wxNoticSendService;
     /**
      * 工单查询
      *
@@ -633,8 +636,12 @@ public class BmsEventOrderService {
         if (house == null){
             return;
         }
-        sendSmsToMember(order,house,content);
-        sendSmsToLianxirenList(order,house,content);
+        sendWXToMember(order, house, content);
+        Object switchSms = redisUtil.get(RedisKeyConstant.SWITCH_SMS);
+        if (switchSms != null) {
+            sendSmsToMember(order, house, content);
+            sendSmsToLianxirenList(order, house, content);
+        }
     }
 
     /**
@@ -669,7 +676,47 @@ public class BmsEventOrderService {
             this.careHandleLogService.save(log);
         }
     }
-
+    /**
+     * 给用户发送工单完成短信
+     *
+     * @param order
+     * @return
+     */
+    private void sendWXToMember(CareEventOrder order,CareHouse house, String content) {
+        if (order.getMemberId() == null || order.getMemberId() == 0L) {
+            return;
+        }
+        CareMemberInfo careMemberInfo = this.careMemberInfoService.getById(order.getMemberId());
+        if (careMemberInfo == null) {
+            return;
+        }
+        if (StrUtil.isNotEmpty(careMemberInfo.getOpenId())){
+            Map<String, TemplateDataDTO> data = new HashMap<>();
+            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+            data.put("first", new TemplateDataDTO("安全事件处理完成", "#ff5200"));
+            data.put("keyword1", new TemplateDataDTO(OrderTypeEnum.getCodeToName(order.getOrderType())+"报警已处理完成", "#000000"));
+            data.put("keyword2", new TemplateDataDTO(simpleDateFormat.format(new Date()), "#000000"));
+            data.put("keyword3", new TemplateDataDTO(house.getAddr(), "#000000"));
+            // data.put("remark", new TemplateDataDTO("请尽快联系您的被监护人, 确认现场情况", "#ff5200"));
+            boolean smsResult = this.wxNoticSendService.sendWhenHappen(careMemberInfo.getOpenId(),data);
+            log.info("发送WX消息模板: openId: " + careMemberInfo.getOpenId() + ", ORDER: " + order.getId() + " 状态: " + smsResult);
+            if (smsResult) {
+                CareHandleLog log = new CareHandleLog();
+                log.setOrgId(order.getOrgId());
+                log.setStationId(order.getStationId());
+                log.setOrderId(order.getId());
+                log.setLogType(LogTypeEnum.SMS.getValue());
+                log.setLogObjectId(order.getMemberId());
+                log.setLogObjectName(careMemberInfo.getName());
+                log.setLogResult("微信通知");
+                log.setLogContent(content);
+                log.setOpUserRole(UserRoleEnum.SYSTEM.getValue());
+                log.setCreateTime(DateUtil.date());
+                log.setRelationTypeDesc("用户");
+                this.careHandleLogService.save(log);
+            }
+        }
+    }
     /**
      * 给所有联系人发送工单完成短信
      *

+ 4 - 1
src/main/java/com/care/common/enums/UserRoleEnum.java

@@ -15,7 +15,8 @@ public enum UserRoleEnum {
     SEAT("seat","坐席"),
     OLDER("older","老人"),
     CONTACT("contact","紧急联系人"),
-    ADMIN("admin","管理员");
+    ADMIN("admin","管理员"),
+    SYSTEM("system","系统");
     private String value;
     private String name;
     UserRoleEnum(String value, String name) {
@@ -40,6 +41,8 @@ public enum UserRoleEnum {
             return CONTACT.name;
         }else if (ADMIN.getValue().equals(code)){
             return ADMIN.name;
+        }else if (SYSTEM.getValue().equals(code)){
+            return SYSTEM.name;
         }
 
         return null;

+ 30 - 0
src/main/java/com/care/common/service/WxNoticSendService.java

@@ -0,0 +1,30 @@
+package com.care.common.service;
+
+
+import com.care.client.dto.TemplateDataDTO;
+
+import java.util.Map;
+
+/**
+ * 编码类型表(SysDimType)表服务接口
+ *
+ * @author makejava
+ * @since 2021-05-21 00:08:30
+ */
+public interface WxNoticSendService {
+
+    /**
+     * 事件发生给紧急联系人等发送语音提示
+     * @param phone
+     * @param params
+     * @return
+     */
+    boolean sendWhenHappen(String phone, Map<String, TemplateDataDTO> data);
+    /**
+     * 事件取消给紧急联系人等发送语音提示
+     * @param phone
+     * @param params
+     * @return
+     */
+    boolean sendWhenCancel(String phone, Map<String, TemplateDataDTO> data);
+}

+ 90 - 2
src/main/java/com/care/common/service/impl/CareEventOrderServiceImpl.java

@@ -3,9 +3,11 @@ package com.care.common.service.impl;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.care.client.dto.TemplateDataDTO;
 import com.care.common.cache.RedisKeyConstant;
 import com.care.common.cache.RedisUtil;
 import com.care.common.entity.*;
@@ -19,8 +21,8 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
-import java.util.ArrayList;
-import java.util.List;
+import java.text.SimpleDateFormat;
+import java.util.*;
 
 /**
  * 事件定单表(CareEventOrder)表服务实现类
@@ -59,6 +61,10 @@ public class CareEventOrderServiceImpl extends ServiceImpl<CareEventOrderMapper,
     private VoiceSendService voiceSendService;
     @Resource
     private CareHouseOlderRelService careHouseOlderRelService;
+    @Resource
+    private CareMemberInfoService careMemberInfoService;
+    @Resource
+    private WxNoticSendService wxNoticSendService;
 
     /**
      * 统计事件数量
@@ -150,9 +156,50 @@ public class CareEventOrderServiceImpl extends ServiceImpl<CareEventOrderMapper,
         List<CareEventOrderContactStatus> contacts = addContactToOrderContact(order);
         sendSms(order,chambList,contacts);
         sendVoice(order,chambList,contacts);
+        sendWXToMember(order);
         return true;
     }
 
+    private void sendWXToMember(CareEventOrder order) {
+        try{
+            if (order.getMemberId() == null || order.getMemberId() == 0L) {
+                return;
+            }
+            CareHouse house = this.careHouseService.getById(order.getHouseId());
+            CareMemberInfo careMemberInfo = this.careMemberInfoService.getById(order.getMemberId());
+            if (careMemberInfo == null) {
+                return;
+            }
+            if (StrUtil.isNotEmpty(careMemberInfo.getOpenId())){
+                Map<String, TemplateDataDTO> data = new HashMap<>();
+                SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+                data.put("first", new TemplateDataDTO("新安全事件", "#ff5200"));
+                data.put("keyword1", new TemplateDataDTO(OrderTypeEnum.getCodeToName(order.getOrderType())+"报警", "#000000"));
+                data.put("keyword2", new TemplateDataDTO(simpleDateFormat.format(new Date()), "#000000"));
+                data.put("keyword3", new TemplateDataDTO(house.getAddr(), "#000000"));
+                data.put("remark", new TemplateDataDTO("请尽快联系您的被监护人, 确认现场情况", "#ff5200"));
+                boolean smsResult = this.wxNoticSendService.sendWhenHappen(careMemberInfo.getOpenId(),data);
+                log.info("新事件,发送WX消息模板: openId: " + careMemberInfo.getOpenId() + ", ORDER: " + order.getId() + " 状态: " + smsResult);
+                if (smsResult) {
+                    CareEventOrderHandleHis log = new CareEventOrderHandleHis();
+                    log.setOrgId(order.getOrgId());
+                    log.setStationId(order.getStationId());
+                    log.setOrderId(order.getId());
+                    log.setLogType(LogTypeEnum.SMS.getValue());
+                    log.setLogObjectId(order.getMemberId());
+                    log.setLogObjectName(careMemberInfo.getName());
+                    log.setLogResult("微信通知");
+                    log.setOpUserRole(UserRoleEnum.SYSTEM.getValue());
+                    log.setCreateTime(DateUtil.date());
+                    log.setRelationTypeDesc("用户");
+                    this.careEventOrderHandleHisService.save(log);
+                }
+            }
+        }catch (Exception e){
+            log.error("发送微信通知失败:"+ order.getId(),e);
+        }
+
+    }
     /**
      * 发送短信
      * @param order
@@ -416,9 +463,50 @@ public class CareEventOrderServiceImpl extends ServiceImpl<CareEventOrderMapper,
         orderDb.setId(order.getId());
         this.saveHisOrder(order, orderDb,true);
         cancelEventSMSNotic(order);
+        cancelEventWXNotice(order);
         //cancelEventVoiceNotic(order);
         return true;
     }
+    private void cancelEventWXNotice(CareEventOrder order) {
+        try{
+            if (order.getMemberId() == null || order.getMemberId() == 0L) {
+                return;
+            }
+            CareHouse house = this.careHouseService.getById(order.getHouseId());
+            CareMemberInfo careMemberInfo = this.careMemberInfoService.getById(order.getMemberId());
+            if (careMemberInfo == null) {
+                return;
+            }
+            if (StrUtil.isNotEmpty(careMemberInfo.getOpenId())){
+                Map<String, TemplateDataDTO> data = new HashMap<>();
+                SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+                data.put("first", new TemplateDataDTO("安全事件取消", "#ff5200"));
+                data.put("keyword1", new TemplateDataDTO(OrderTypeEnum.getCodeToName(order.getOrderType())+"报警取消", "#000000"));
+                data.put("keyword2", new TemplateDataDTO(simpleDateFormat.format(new Date()), "#000000"));
+                data.put("keyword3", new TemplateDataDTO(house.getAddr(), "#000000"));
+                //data.put("remark", new TemplateDataDTO("请尽快联系您的被监护人, 确认现场情况", "#ff5200"));
+                boolean smsResult = this.wxNoticSendService.sendWhenHappen(careMemberInfo.getOpenId(),data);
+                log.info("取消事件,发送WX消息模板: openId: " + careMemberInfo.getOpenId() + ", ORDER: " + order.getId() + " 状态: " + smsResult);
+                if (smsResult) {
+                    CareEventOrderHandleHis log = new CareEventOrderHandleHis();
+                    log.setOrgId(order.getOrgId());
+                    log.setStationId(order.getStationId());
+                    log.setOrderId(order.getId());
+                    log.setLogType(LogTypeEnum.SMS.getValue());
+                    log.setLogObjectId(order.getMemberId());
+                    log.setLogObjectName(careMemberInfo.getName());
+                    log.setLogResult("事件取消微信通知");
+                    log.setOpUserRole(UserRoleEnum.SYSTEM.getValue());
+                    log.setCreateTime(DateUtil.date());
+                    log.setRelationTypeDesc("用户");
+                    this.careEventOrderHandleHisService.save(log);
+                }
+            }
+        }catch (Exception e){
+            log.error("发送取消微信通知失败:"+ order.getId(),e);
+        }
+
+    }
     /**
      * 取消事件,短信通知
      * @param order

+ 48 - 0
src/main/java/com/care/common/service/impl/WxNoticSendServiceImpl.java

@@ -0,0 +1,48 @@
+package com.care.common.service.impl;
+
+import cn.hutool.core.util.StrUtil;
+import com.care.client.dto.TemplateDataDTO;
+import com.care.common.service.VoiceSendService;
+import com.care.common.service.WxNoticSendService;
+import com.care.common.service.WxTemplateService;
+import com.care.common.util.VoiceUtil;
+import com.tencentcloudapi.vms.v20200902.models.SendStatus;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.Map;
+
+/**
+ * @Author: lilt
+ * @Date: 2021/6/5
+ * @Desc:
+ */
+@Service
+@Slf4j
+public class WxNoticSendServiceImpl implements WxNoticSendService {
+
+    @Value("${wx.notic.templateId:#{null}}")
+    private String templateId;
+
+    @Value("${wx.notic.toAppId:#{null}}")
+    private String toAppId;
+
+    @Value("${wx.notic.toUrl:#{null}}")
+    private String toUrl;
+
+    @Resource
+    private WxTemplateService wxTemplateService;
+
+    @Override
+    public boolean sendWhenHappen(String openId,  Map<String, TemplateDataDTO> data) {
+        boolean flag = wxTemplateService.sendTemplateMsg(openId, templateId, toAppId, toUrl, data);
+        log.info("发送WX消息模板: openId: " + openId + ", templateId: " + templateId + " 状态: " + flag);
+        return flag;
+    }
+    @Override
+    public boolean sendWhenCancel(String phone, Map<String, TemplateDataDTO> data) {
+       return false;
+    }
+}

+ 4 - 0
src/main/resources/application.properties

@@ -58,6 +58,10 @@ wx.pinanbao.tokenUrl=https://api.weixin.qq.com/cgi-bin/token?grant_type=client_c
 wx.pinanbao.infoUrl=https://api.weixin.qq.com/cgi-bin/user/info?access_token={0}&openid={1}&lang=zh_CN
 wx.pinanbao.appid=wxda02870032b8f928
 wx.pinanbao.secret=5984b6cf5dad4693eb60cbc494d9f385
+#微信模板消息
+wx.notic.templateId=1M1kDRDW-kMSoOzmv9cP-SImD1kXWtezwyWe8euUJIc
+wx.notic.toAppId=wxda02870032b8f928
+wx.notic.toUrl=/page/index/index
 
 # 微信公众号配置
 wx.official.appid=wxf393853ab94c853f