rk
2025-12-09 4d95fc81467cdaec916728feee94763491f74c18
设备消息推送
已修改3个文件
670 ■■■■■ 文件已修改
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkCabinetGridServiceImpl.java 201 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkCabinetLogServiceImpl.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncPushServiceImpl.java 460 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkCabinetGridServiceImpl.java
@@ -7,9 +7,6 @@
import com.doumee.core.dingTalk.DingTalkStream;
import com.doumee.core.exception.BusinessException;
import com.doumee.core.haikang.model.HKConstants;
import com.doumee.core.jiandaoyun.api.arch.DeptApiClient;
import com.doumee.core.jiandaoyun.api.jdy.FormDataApiClient;
import com.doumee.core.jiandaoyun.model.form.FormDataCreateParam;
import com.doumee.core.utils.Constants;
import com.doumee.core.utils.DateUtil;
import com.doumee.dao.business.*;
@@ -31,14 +28,12 @@
import com.hikvision.artemis.sdk.config.ArtemisConfig;
import io.swagger.models.auth.In;
import lombok.extern.slf4j.Slf4j;
import okhttp3.*;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.github.xiaoymin.knife4j.core.util.CollectionUtils;
import org.springframework.transaction.annotation.Transactional;
import java.io.IOException;
import java.util.*;
import java.util.stream.Collectors;
@@ -70,9 +65,6 @@
    @Autowired
    private DeviceMapper deviceMapper;
    @Autowired
    private InterfaceLogMapper interfaceLogMapper;
    @Autowired
    private MemberMapper memberMapper;
@@ -714,14 +706,6 @@
                            //                    StringUtils.join(memberList.stream().filter(i->StringUtils.isNotBlank(i.getDdId())).map(i->i.getDdId()).collect(Collectors.toList()),","),
                            //                      dingTalk.getAlarmNoticeMsg(warningPush.getRegion(),DateUtil.getCurrDateTime(),content));
                            //            warningPush.setStatus(noticeFlag?Constants.ONE:Constants.TWO);
                            List<String> ddUserIdList = memberList.stream().filter(i->StringUtils.isNotBlank(i.getDdId())).map(i->i.getDdId()).collect(Collectors.toList());
                            if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(ddUserIdList)){
                                for (String ddUserId:ddUserIdList) {
                                    this.getJDYData(warningEvent,ddUserId,
                                            systemDictDataBiz.queryByCode(Constants.JDY_CONFIG,Constants.JDY_ENTRY_ID).getCode()
                                    );
                                }
                            }
                        }
                        warningPushMapper.insert(warningPush);
                        warningEvent.setStatus(Constants.ONE);
@@ -731,103 +715,31 @@
                        warningEvent.setStatus(Constants.TWO);
                        warningEventMapper.updateById(warningEvent);
                    }
                }
            }
        }
    }
    public void sendDeviceNotice(WarningRule warningRule){
        if(Constants.equalsInteger(warningRule.getDeviceNotice(),Constants.ONE)
                &&StringUtils.isNotBlank(warningRule.getDeviceIds())
                &&StringUtils.isNotBlank(warningRule.getDeviceNoticeContent())){
        if(Constants.equalsInteger(warningRule.getDeviceNotice(),Constants.ONE)&&StringUtils.isNotBlank(warningRule.getDeviceIds())&&StringUtils.isNotBlank(warningRule.getDeviceNoticeContent())){
            List<Device> deviceList = deviceMapper.selectList(new QueryWrapper<Device>()
                    .lambda()
                    .eq(Device::getStatus,Constants.ZERO)
                    .in(Device::getId,Arrays.asList(warningRule.getDeviceIds().split(",")))
                    .eq(Device::getId,Arrays.asList(warningRule.getDeviceIds().split(",")))
            );
            if(CollectionUtils.isNotEmpty(deviceList)){
                for (Device device:deviceList) {
                    device.setSendInfo(warningRule.getDeviceNoticeContent());
                    DeviceServiceImpl.sendBroadcaseBobaoHttpBiz(device,interfaceLogMapper);
                    DeviceServiceImpl.sendBroadcaseBobaoHttpBiz(device);
                }
            }
        }
    }
    /**
     * 简道云消息推送 定制
     * @param warningEvent
     * @param ddUserId 接收人 钉钉主键
     * @param entryId 表单ID
     * @throws IOException
     */
    public void getJDYData(WarningEvent warningEvent,String ddUserId , String entryId)  {
        try {
            log.error("简道云发送通知返回信息开始"  );
            FormDataApiClient apiClient = new FormDataApiClient(systemDictDataBiz.queryByCode(Constants.JDY_CONFIG, Constants.JDY_API_KEY).getCode()
                    ,systemDictDataBiz.queryByCode(Constants.JDY_CONFIG, Constants.JDY_API_HOST).getCode());
            FormDataCreateParam param  =new FormDataCreateParam();
            param.setData(this.getJdyChildData(warningEvent,ddUserId));
            param.setApp_id(systemDictDataBiz.queryByCode(Constants.JDY_CONFIG, Constants.JDY_APPID).getCode());
            param.setEntry_id(entryId);
            param.setIs_start_trigger(false);
            param.setIs_start_trigger(true);
            Map<String, Object>  response =  apiClient.singleDataCreate(param,apiClient.getDefaultVersion());
            /*
             Map<String,Object> map = new HashMap<>();
            map.put("app_id",appid);
            map.put("entry_id",entryId);
            map.put("is_start_workflow","false");
            map.put("is_start_trigger","true");
            map.put("data",this.getJdyChildData(warningEvent,ddUserId));
            OkHttpClient client = new OkHttpClient().newBuilder()
                    .build();
            MediaType mediaType = MediaType.parse("application/json");
            RequestBody body = RequestBody.create(mediaType, JSONObject.toJSONString(map));//"{\"data\":{\"notice_time\":{\"value\":\"2025-12-23 04:56:29\"},\"title\":{\"value\":\"跨越生产线\"},\"user\":{\"value\":\"1568490244651036\"},\"content\":{\"value\":\"跨越生产线-芜湖物流中心北围墙过道东\"},\"notice_type\":{\"value\":\"跨越生产线\"}},\"is_start_trigger\":\"true\",\"app_id\":\"6909d0fbdb93b068192dc4a9\",\"entry_id\":\"694a19ecf57e071788efc20b\",\"is_start_workflow\":\"false\"}");
            log.error("简道云发送通知请求信息" + JSONObject.toJSONString(map));
            Request request = new Request.Builder()
                    .url(systemDictDataBiz.queryByCode(Constants.JDY_CONFIG, Constants.JDY_API_HOST).getCode()+"v5/app/entry/data/create")
                    .method("POST", body)
                    .addHeader("Authorization", "Bearer "+jdyApiKey)
                    .addHeader("Content-Type", "application/json")
                    .build();
            Response response = client.newCall(request).execute();*/
            log.error("简道云发送通知返回信息" + JSONObject.toJSONString(response));
        }catch (Exception e){
            log.error("简道云发送通知返回信息异常:" + e.getMessage());
        }
    }
    public Map<String,Object> getJdyChildData(WarningEvent warningEvent,String ddUserId){
        Map<String,Object> dataMap = new HashMap<>();
        Map<String,Object> title = new HashMap<>();
        title.put("value",warningEvent.getTitle());
        dataMap.put("title",title);
        Map<String,Object> user = new HashMap<>();
        user.put("value",ddUserId);
        dataMap.put("user",user);
        Map<String,Object> notice_time = new HashMap<>();
        notice_time.put("value",DateUtil.getCurrDateTime());
        dataMap.put("notice_time",notice_time);
        Map<String,Object> notice_type = new HashMap<>();
        notice_type.put("value",warningEvent.getTitle());
        dataMap.put("notice_type",notice_type);
        Map<String,Object> content = new HashMap<>();
        content.put("value",warningEvent.getContent());
        dataMap.put("content",content);
        return dataMap;
    }
   /* public List<Integer> processWarnFront(Constants.WarningConfig warningConfig){
    public List<Integer> processWarnFront(Constants.WarningConfig warningConfig){
        List<WarningRuleDetail> warningRuleDetailList = warningRuleDetailMapper.selectJoinList(WarningRuleDetail.class,new MPJLambdaWrapper<WarningRuleDetail>()
                .selectAll(WarningRuleDetail.class)
                .leftJoin(Warning.class,Warning::getId,WarningRuleDetail::getWarningId)
@@ -901,96 +813,8 @@
        return new ArrayList<>();
    }*/
    public List<Integer> processWarnFrontWithEvent(Constants.WarningConfig warningConfig,  List<WarningEvent> returnEventList){
        List<WarningRuleDetail> warningRuleDetailList = warningRuleDetailMapper.selectJoinList(WarningRuleDetail.class,new MPJLambdaWrapper<WarningRuleDetail>()
                .selectAll(WarningRuleDetail.class)
                .leftJoin(Warning.class,Warning::getId,WarningRuleDetail::getWarningId)
                .eq(WarningRuleDetail::getIsdeleted,Constants.ZERO)
                .eq(Warning::getIsdeleted,Constants.ZERO)
                .eq(Warning::getStatus,Constants.ONE)
                .eq(Warning::getCode,warningConfig.getKey())
        );
            if(CollectionUtils.isEmpty(warningRuleDetailList)){
            return new ArrayList<>();
        }
        //所有报警规则配置信息
        List<Integer> ruleIdList = warningRuleDetailList.stream().map(i->i.getRuleId()).collect(Collectors.toList());
        Set<Integer> ruleIdSet = new HashSet<>(ruleIdList);
            if(CollectionUtils.isNotEmpty(ruleIdSet)){
            List<Integer> resultList = new ArrayList<>();
            for (Integer ruleId:ruleIdSet) {
                WarningRule warningRule = warningRuleMapper.selectById(ruleId);
                //查询其他规则信息
                List<WarningRuleDetail> warningRuleDetails = warningRuleDetailMapper.selectJoinList(WarningRuleDetail.class,new MPJLambdaWrapper<WarningRuleDetail>()
                        .selectAll(WarningRuleDetail.class)
                        .selectAs(Warning::getCode,WarningRuleDetail::getCode)
                        .leftJoin(Warning.class,Warning::getId,WarningRuleDetail::getWarningId)
                        .eq(WarningRuleDetail::getIsdeleted,Constants.ZERO)
                        .eq(Warning::getIsdeleted,Constants.ZERO)
                        .eq(Warning::getStatus,Constants.ONE)
                        .eq(WarningRuleDetail::getRuleId,ruleId)
//                        .in(Warning::getCode,Constants.WarningConfig.ALARM_TEST.getKey(),
//                                Constants.WarningConfig.GRID_TIME_OUT_INFO.getKey(),
//                                Constants.WarningConfig.KEY_TIME_OUT_BACK.getKey()
//                        )
                );
                //无任何规则 直接跳过
                if(CollectionUtils.isEmpty(warningRuleDetails)){
                    return resultList;
                }else if(!Constants.equalsInteger(warningRuleDetails.stream().filter(i->!i.getCode().equals(warningConfig.getKey()+"")).collect(Collectors.toList()).size(),Constants.ZERO)){
                    List<WarningRuleDetail> wList = warningRuleDetails.stream().filter(i->!i.getCode().equals(warningConfig.getKey()+"")).collect(Collectors.toList());
                    //获取所有其他所有事件主键信息
                    List<Integer> warningIdList = wList.stream().map(i->i.getWarningId()).collect(Collectors.toList());
                    Set<Integer> setWarningIdList = new HashSet<>(warningIdList);
                    //获取时间内所有事件信息
                    List<WarningEvent> warningEventList = warningEventMapper.selectList(new QueryWrapper<WarningEvent>().lambda()
                            .eq(WarningEvent::getIsdeleted,Constants.ZERO)
                            .in(WarningEvent::getWarningId,setWarningIdList)
                            .apply(Objects.nonNull(warningRule.getIntervalSec())," DATE_ADD(CREATE_DATE , INTERVAL "+warningRule.getIntervalSec()+" SECOND) > now() ")
                    );
                    if(this.processWarnFlag(wList,warningEventList)){
                        resultList.add(ruleId);
                        if(returnEventList != null){
                            returnEventList.addAll(warningEventList);
                        }
                    };
                }else{
                    List<WarningRuleDetail> wList = warningRuleDetails.stream().filter(i->i.getCode().equals(warningConfig.getKey()+"")).collect(Collectors.toList());
                    //获取本次事件主键信息
                    List<Integer> warningIdList = wList.stream().map(i->i.getWarningId()).collect(Collectors.toList());
                    Set<Integer> setWarningIdList = new HashSet<>(warningIdList);
                    if(Objects.isNull(warningRule.getIntervalSec())){
                        resultList.add(ruleId);
                    }else{
                        //获取时间内所有事件信息
                        List<WarningEvent> warningEventList = warningEventMapper.selectList(new QueryWrapper<WarningEvent>().lambda()
                                .eq(WarningEvent::getIsdeleted,Constants.ZERO)
                                .in(WarningEvent::getWarningId,setWarningIdList)
                                .apply(Objects.nonNull(warningRule.getIntervalSec())," DATE_ADD(CREATE_DATE , INTERVAL "+warningRule.getIntervalSec()+" SECOND) > now() ")
                        );
                        if(this.processWarnFlag(wList,warningEventList)){
                            resultList.add(ruleId);
                            if(returnEventList != null){
                                returnEventList.addAll(warningEventList);
                            }
                        }
                    }
                }
            }
            return resultList;
        }
            return new ArrayList<>();
    }
    public List<Integer> processWarnFront(Constants.WarningConfig warningConfig){
        return  this.processWarnFrontWithEvent(warningConfig,null);
    }
    /**
@@ -1003,9 +827,9 @@
            return false;
        }
        for (WarningRuleDetail warningRuleDetail:warningRuleDetails) {
            if(Objects.nonNull(warningRuleDetail.getDeviceId())){
            if(Objects.nonNull(warningRuleDetail.getRegionId())){
                if(warningEventList.stream().filter(i->Constants.equalsInteger(i.getWarningId(),warningRuleDetail.getWarningId())
                        && StringUtils.isNotBlank(i.getDeviceId()) && i.getDeviceId().equals(warningRuleDetail.getDeviceId())
                        && StringUtils.isNotBlank(i.getRegionId()) && i.getRegionId().equals(warningRuleDetail.getRegionId())
                ).collect(Collectors.toList()).size()<=Constants.ZERO){
                    return false;
                }
@@ -1112,15 +936,6 @@
                        //                    StringUtils.join(memberList.stream().filter(i->StringUtils.isNotBlank(i.getDdId())).map(i->i.getDdId()).collect(Collectors.toList()),","),
                        //                dingTalk.getAlarmNoticeMsg(warningPush.getRegion(),DateUtil.getCurrDateTime(),warningConfig.getInfo()));
//                    warningPush.setStatus(noticeFlag?Constants.ONE:Constants.TWO);
                        List<String> ddUserIdList = memberList.stream().filter(i->StringUtils.isNotBlank(i.getDdId())).map(i->i.getDdId()).collect(Collectors.toList());
                        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(ddUserIdList)){
                            for (String ddUserId:ddUserIdList) {
                                this.getJDYData(warningEvent,ddUserId,
                                        systemDictDataBiz.queryByCode(Constants.JDY_CONFIG,Constants.JDY_ENTRY_ID).getCode()
                                );
                            }
                        }
                    }
                    warningPushMapper.insert(warningPush);
                    warningEvent.setStatus(Constants.ONE);
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkCabinetLogServiceImpl.java
@@ -266,15 +266,6 @@
                                //                    StringUtils.join(memberList.stream().filter(i->StringUtils.isNotBlank(i.getDdId())).map(i->i.getDdId()).collect(Collectors.toList()),","),
                                //                dingTalk.getAlarmNoticeMsg(warningPush.getRegion(),DateUtil.getCurrDateTime(),warningConfig.getInfo()));
//                          warningPush.setStatus(noticeFlag?Constants.ONE:Constants.TWO);
                                List<String> ddUserIdList = memberList.stream().filter(i->StringUtils.isNotBlank(i.getDdId())).map(i->i.getDdId()).collect(Collectors.toList());
                                if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(ddUserIdList)){
                                    for (String ddUserId:ddUserIdList) {
                                        impl.getJDYData(warningEvent,ddUserId,
                                                systemDictDataBiz.queryByCode(Constants.JDY_CONFIG,Constants.JDY_ENTRY_ID).getCode()
                                        );
                                    }
                                }
                            }
                            impl.sendDeviceNotice(warningRule);
                            warningPushMapper.insert(warningPush);
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncPushServiceImpl.java
@@ -1,7 +1,6 @@
package com.doumee.service.business.impl.hksync;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.doumee.biz.system.SystemDictDataBiz;
@@ -13,19 +12,20 @@
import com.doumee.core.haikang.model.param.request.event.acs.EventAcsRequest;
import com.doumee.core.haikang.model.param.request.event.acs.EventDeviceDataRequest;
import com.doumee.core.haikang.model.param.request.event.base.EventBaseInfoRequest;
import com.doumee.core.haikang.model.param.request.event.base.EventBaseParamRequest;
import com.doumee.core.haikang.model.param.request.event.base.EventBaseRequest;
import com.doumee.core.haikang.model.param.request.event.parks.*;
import com.doumee.core.haikang.model.param.request.event.visit.*;
import com.doumee.core.haikang.service.HKService;
import com.doumee.core.utils.*;
import com.doumee.core.utils.Constants;
import com.doumee.core.utils.DESUtil;
import com.doumee.core.utils.DateUtil;
import com.doumee.core.utils.Utils;
import com.doumee.dao.business.*;
import com.doumee.dao.business.dao.MemberMapper;
import com.doumee.dao.business.join.VisitsJoinMapper;
import com.doumee.dao.business.model.*;
import com.doumee.dao.business.model.Member;
import com.doumee.dao.web.reqeust.SavePlatformWarnEventDTO;
import com.doumee.dao.web.response.platformReport.CarmeraListVO;
import com.doumee.service.business.VisitsService;
import com.doumee.service.business.impl.JkCabinetGridServiceImpl;
import com.doumee.service.business.impl.PlatformWarnEventServiceImpl;
@@ -34,18 +34,15 @@
import com.doumee.service.business.third.model.response.TmsOrderInfoResponse;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import lombok.extern.slf4j.Slf4j;
import okhttp3.*;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.*;
import java.util.Date;
import java.util.stream.Collectors;
/**
@@ -116,6 +113,12 @@
    @Autowired
    private WarningPushMapper warningPushMapper;
    /**
     * 海康门禁事件推送
     * @param param
@@ -153,9 +156,8 @@
            }
            if(delRetentionLis.size()>0){
                //先删除原有的在场人员(内部人员)
                //@ApiModelProperty(value = "类型 0劳务访客 1普通访客 2内部员工 3车辆信息 4相关方人员 5货运司机  ")
                retentionMapper.delete(new UpdateWrapper<Retention>().lambda()
                        .ne(Retention::getType,Constants.THREE)
//                        .eq(Retention::getType,Constants.memberType.internal)
                        .in(Retention::getMemberId,delRetentionLis));
            }
            if(retentionList.size()>0){
@@ -478,13 +480,12 @@
            //门禁事件集合
            List<EventBaseInfoRequest> events  = param.getParams().getEvents();
            for(EventBaseInfoRequest request : events){
                if( request.getEventType() == null){
                    continue;
                }
                Warning warning = warningMapper.selectOne(new QueryWrapper<Warning>().lambda()
                        .eq(Warning::getIsdeleted,Constants.ZERO)
                        .eq(Warning::getCode, request.getEventType()).last("limit 1"));
                        .eq(Warning::getCode, request.getSrcType()).last("limit 1"));
                Constants.WarningConfig warningConfig = Constants.WarningConfig.getConfig(request.getEventType());
                if(Objects.nonNull(warning)){
                    WarningEvent warningEvent = new WarningEvent();
                    warningEvent.setCreateDate(new Date());
@@ -496,29 +497,26 @@
                    warningEvent.setEventId(request.getEventId());
                    warningEvent.setEventType(request.getEventType().toString());
                    warningEvent.setHappenTime(request.getHappenTime());
                    if(Objects.nonNull(request.getData())){
                        warningEvent.setJsonContent(JSONObject.toJSONString(request));
                    }
                    warningEvent.setJsonContent(request.getData().toJSONString());
                    warningEvent.setSrcIndex(request.getSrcIndex());
                    warningEvent.setSrcType(request.getSrcType());
                    warningEvent.setSrcName(request.getSrcName());
                    warningEvent.setWarningId(warning.getId());
                    warningEvent.setDeviceId(request.getSrcIndex());
                    warningEvent.setRegion(this.getRegionsName(warningEvent.getSrcIndex(),warning.getType()));
                    warningEventMapper.insert(warningEvent);
                    if(Objects.nonNull(warningConfig)){
                        List<WarningEvent> warningEventList = new ArrayList<>();//时间间隔内的全部事件记录
                        List<Integer> ruleIdList =  impl.processWarnFrontWithEvent(warningConfig,warningEventList);
                        Boolean falg = true;
                        List<Integer> ruleIdList =  impl.processWarnFront(warningConfig);
                        Boolean falg = false;
                        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(ruleIdList)){
                            Set<Integer> ruleIdSet = new HashSet<>(ruleIdList);
                            for (Integer ruleId:ruleIdSet) {
                            for (Integer ruleId:ruleIdList) {
                                WarningRule warningRule = warningRuleMapper.selectById(ruleId);
                                if (Objects.isNull(warningRule)) {
                                    break;
                                }
                                List<Member> memberList = impl.getWarningRuleMemberList(warningRule);
                                if (com.github.xiaoymin.knife4j.core.util.CollectionUtils.isEmpty(memberList)) {
                                    break;
                                }
                                try {
                                    WarningPush warningPush = new WarningPush();
                                    warningPush.setCreateDate(new Date());
@@ -529,47 +527,48 @@
                                    warningPush.setContent(content);
                                    warningPush.setStatus(Constants.ZERO);
                                    warningPush.setPushType(Constants.ZERO);
                                    warningPush.setRegion( warningEvent.getRegion());
                                    if (com.github.xiaoymin.knife4j.core.util.CollectionUtils.isEmpty(memberList)) {
                                    //TODO 根据具体数据对比获取
                                    warningPush.setRegion( "未知位置");
                                    warningPush.setMemberIds(
                                            StringUtils.join(memberList.stream().map(i -> i.getId()).collect(Collectors.toList()), ",")
                                    );
                                        warningPush.setMemberIds(
                                                StringUtils.join(memberList.stream().map(i -> i.getId()).collect(Collectors.toList()), ",")
                                        );
                                        warningPush.setMemberNames(StringUtils.join(memberList.stream().map(i -> i.getName()).collect(Collectors.toList()), ",")
                                        );
                                    }
                                     if(Constants.equalsInteger(warningRule.getMemberNotice(),Constants.ONE)){
//                            Boolean noticeFlag = dingTalk.workInfoOANotice(Long.valueOf(systemDictDataBiz.queryByCode(Constants.DD_TALK,Constants.AGENT_ID).getCode()),
//                                    StringUtils.join(memberList.stream().filter(i->StringUtils.isNotBlank(i.getDdId())).map(i->i.getDdId()).collect(Collectors.toList()),","),
//                                dingTalk.getAlarmNoticeMsg(warningPush.getRegion(),DateUtil.getCurrDateTime(),warningConfig.getInfo()));
//                                  warningPush.setStatus(noticeFlag?Constants.ONE:Constants.TWO);
                                        List<String> ddUserIdList = memberList.stream().filter(i->StringUtils.isNotBlank(i.getDdId())).map(i->i.getDdId()).collect(Collectors.toList());
                                        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(ddUserIdList)){
                                            for (String ddUserId:ddUserIdList) {
                                                impl.getJDYData(warningEvent,ddUserId,
                                                        systemDictDataBiz.queryByCode(Constants.JDY_CONFIG,Constants.JDY_ENTRY_ID).getCode()
                                                );
                                            }
                                        }
                                    }
                                    impl.sendDeviceNotice(warningRule);
                                    warningPushMapper.insert(warningPush);
                                    if(Constants.equalsInteger( request.getEventType(),Constants.WarningConfig.AF_RYLG.getKey())){
                                        //如果是人员离岗事件
                                        dealNoticeTelecomEvent(param,request,warningEventList);
                                    }
                                    impl.sendDeviceNotice(warningRule);
                                    falg = true;
                                }catch (Exception e){
                                    falg = false;
                                    warningEvent.setStatus(Constants.TWO);
                                    warningEventMapper.updateById(warningEvent);
                                }
                            }
                        }
                        if(!falg){
                        if(falg){
                            warningEvent.setStatus(Constants.ONE);
                            warningEventMapper.updateById(warningEvent);
                        }
                    }
                }
            }
@@ -580,381 +579,8 @@
        }
        saveInterfaceLog(param,"/business/hksync/push/notice",result,true);
        return  null;
    }
    /**
     * 通知电信接口(离岗事件)
     * @param list
     */
    private void dealNoticeTelecomEvent(EventBaseRequest param,EventBaseInfoRequest request ,List<WarningEvent> list) {
        try {
            log.error("========通知其他三方地址离岗事件开始:"+list.size());
            Thread t1=new Thread(new Runnable() {
                @Override
                public void run() {
//                  EventBaseRequest submitParam = new EventBaseRequest();
//                  submitParam.setMethod(param.getMethod());
//                  submitParam.setParams(new EventBaseParamRequest());
//                  submitParam.getParams().setAbility(param.getParams().getAbility());
//                  submitParam.getParams().setQuids(param.getParams().getQuids());
//                  submitParam.getParams().setSendTime(param.getParams().getSendTime());
//                  submitParam.getParams().setEvents(new ArrayList<>());
                    //定制key
                   param.getParams().setEvents(new ArrayList<>());
                   int key = Constants.WarningConfig.AF_RYLG_CUSTOM.getKey();
                    List<EventBaseInfoRequest> noticeList = new ArrayList<>();
                    TypeReference typeReference =
                            new TypeReference<EventBaseInfoRequest>(){};
                    request.setEventType(key);//更换事件类型
                    noticeList.add(request);
                    for(WarningEvent c : list){
                        if(StringUtils.equals( c.getEventType(),Constants.WarningConfig.AF_RYLG.getKey()+"")) {
                            if(StringUtils.isNotBlank(c.getJsonContent())){
                                EventBaseInfoRequest infoRequest =JSONObject.parseObject(c.getJsonContent(),typeReference.getType());
                                noticeList.add(infoRequest);
                            }
                        }
                    }
                    for(EventBaseInfoRequest t : noticeList){
                        if(t.getData() == null){
                            t.setData(new JSONObject());
                        }
                        JSONObject at = t.getData().getJSONObject("AIOPResultData");
                        if(at == null){
                            at = new JSONObject();
                            t.getData().put("AIOPResultData",at);
                        }
                        if(StringUtils.isBlank(at.getString("imageUrl"))){
                            t.getData().getJSONObject("AIOPResultData").put("imageUrl","");
                        }
                        if(StringUtils.isBlank(at.getString("imageUrl"))){
                            t.getData().getJSONObject("AIOPResultData").put("imageUrl","");
                        }
                        if(StringUtils.equals(t.getEventId(),request.getEventId())){
                            continue;
                        }
                       request.getData().put("url",StringUtils.defaultString(request.getData().getString("url"),"")+","+StringUtils.defaultString(t.getData().getString("url"),""));
                       request.setSrcIndex(StringUtils.defaultString(request.getSrcIndex(),"")+","+StringUtils.defaultString(t.getSrcIndex(),""));
                       request.setSrcName(StringUtils.defaultString(request.getSrcName(),"")+","+StringUtils.defaultString(t.getSrcName(),""));
                       request.getData().getJSONObject("AIOPResultData").put("imageUrl",StringUtils.defaultString( request.getData().getJSONObject("AIOPResultData").getString("imageUrl"),"")
                               +","+StringUtils.defaultString( t.getData().getJSONObject("AIOPResultData").getString("imageUrl"),""));
                    }
                    JSONObject   img = new JSONObject();
                    img.put("imageUrl", request.getData().getJSONObject("AIOPResultData").getString("imageUrl"));
                    String url =  request.getData().getString("url");
                    request.setData(new JSONObject());
                    request.getData().put("AIOPResultData",img);
                    request.getData().put("url",url);
                    param.getParams().getEvents().add(request);
                    String thirdpath =systemDictDataBiz.queryByCode(Constants.HK_PARAM, Constants.HK_PUSH_THIRD_URL).getCode();
                    if(StringUtils.isNotBlank(thirdpath)){
                        log.error("========通知其他三方地址离岗事件已推送,参数:"+JSONObject.toJSONString(param));
                        String[] ss = thirdpath.split(";");
                        for(String s : ss){
                            String response =   HttpsUtil.postJson(s,JSONObject.toJSONString(param));
                            log.error("========通知其他三方地址离岗事件已推送,结果:"+s+"\n"+response);
                        }
                    }
                }
            });
            t1.start();
        }catch (Exception e){
            e.printStackTrace();
        }
    }
    public static void main(String[] args) {
                //定制key
                EventBaseRequest param =  JSONObject.parseObject( "{\n" +
                        "    \"method\": \"OnEventNotify\",\n" +
                        "    \"params\": {\n" +
                        "        \"ability\": \"event_ai_open_platform\",\n" +
                        "        \"events\": [\n" +
                        "            {\n" +
                        "                \"data\": {\n" +
                        "                    \"AIOPResultData\": {\n" +
                        "                        \"height\": \"1440\",\n" +
                        "                        \"imageUrl\": \"http://10.49.39.17:6120/pic?8dc0=1c00=2b-0ipf1ao620d404*-o7=5221*5l3=2062023786t6=910p*==217**=s153*4b4d47e2970d391*6-17odf2-l20a2300=df*&iTk=MmQwODU4YjM4YmMxM2RmMzlhYmRiMDNhMTRhZjEzMGIxZmUzYjdmYTgxMjY3ZjkxMDI2OWE1ZWIwY2ZiNDI5MDp7ImFrIjoiMjU4NjgyODIifQ==\",\n" +
                        "                        \"nodeId\": 4,\n" +
                        "                        \"rect\": null,\n" +
                        "                        \"ruleId\": 1,\n" +
                        "                        \"ruleName\": [\n" +
                        "                            \"新增规则\"\n" +
                        "                        ],\n" +
                        "                        \"targetAttrs\": {\n" +
                        "                            \"IACPicUp\": \"@1766038022325@1766038022331@2@\",\n" +
                        "                            \"aimmsModelId\": \"H930_MODEL_IPS_COORDINATION\",\n" +
                        "                            \"cameraIndexCode\": \"34a23fe1367b4e138e4ccde4c0b51038\",\n" +
                        "                            \"deviceIndexCode\": \"e330681016434de6975ed9400f834986\",\n" +
                        "                            \"imageServerCode\": \"0803dbe0-c007-4dcf-abef-424da37d58f9\",\n" +
                        "                            \"picServerIndexCode\": \"0803dbe0-c007-4dcf-abef-424da37d58f9\",\n" +
                        "                            \"recognitionSign\": 1\n" +
                        "                        },\n" +
                        "                        \"taskID\": \"50230c815af14c54bbc3c6891fab0113\",\n" +
                        "                        \"taskType\": \"AIOP_Video\",\n" +
                        "                        \"triggerType\": 1073758209,\n" +
                        "                        \"unionTargets\": {\n" +
                        "                            \"childTargets\": [\n" +
                        "\n" +
                        "                            ],\n" +
                        "                            \"confidence\": 0,\n" +
                        "                            \"id\": 0,\n" +
                        "                            \"region\": {\n" +
                        "                                \"rect\": {\n" +
                        "                                    \"h\": \"0.980469\",\n" +
                        "                                    \"w\": \"0.980469\",\n" +
                        "                                    \"x\": \"0.007812\",\n" +
                        "                                    \"y\": \"0.007812\"\n" +
                        "                                }\n" +
                        "                            },\n" +
                        "                            \"type\": 0\n" +
                        "                        },\n" +
                        "                        \"url\": null,\n" +
                        "                        \"width\": \"2560\"\n" +
                        "                    },\n" +
                        "                    \"aiopMsgType\": 2,\n" +
                        "                    \"channelID\": 5,\n" +
                        "                    \"channelName\": \"消防控制室\",\n" +
                        "                    \"dataProcInterval\": \"14\",\n" +
                        "                    \"dataType\": \"AIOPDetection\",\n" +
                        "                    \"dateTime\": \"2025-12-18T14:07:00.000+08:00\",\n" +
                        "                    \"eventDescription\": \"AI Open Platform Video Detection\",\n" +
                        "                    \"eventType\": \"AIOPResultData\",\n" +
                        "                    \"ipAddress\": \"192.168.15.224\",\n" +
                        "                    \"picUploadInterval\": \"6\",\n" +
                        "                    \"portNo\": 8000,\n" +
                        "                    \"presetIndex\": 0,\n" +
                        "                    \"recvTime\": \"2025-12-18T14:07:02.320+08:00\",\n" +
                        "                    \"sendTime\": \"2025-12-18T14:07:02.334+08:00\",\n" +
                        "                    \"targetAttrs\": {\n" +
                        "                        \"IACPicUp\": \"@1766038022325@1766038022331@2@\",\n" +
                        "                        \"cameraIndexCode\": \"34a23fe1367b4e138e4ccde4c0b51038\",\n" +
                        "                        \"deviceIndexCode\": \"e330681016434de6975ed9400f834986\",\n" +
                        "                        \"imageServerCode\": \"0803dbe0-c007-4dcf-abef-424da37d58f9\",\n" +
                        "                        \"picServerIndexCode\": \"0803dbe0-c007-4dcf-abef-424da37d58f9\",\n" +
                        "                        \"recognitionSign\": 1\n" +
                        "                    },\n" +
                        "                    \"taskID\": \"50230c815af14c54bbc3c6891fab0113\",\n" +
                        "                    \"url\": \"http://10.49.39.17:6120/pic?8dc0=1c00=2b-0ipf1ao620d404*-o7=5221*5l3=2062023786t6=910p*==217**=s153*4b4d47e2970d391*6-17odf2-l20a2300=df*&iTk=MmQwODU4YjM4YmMxM2RmMzlhYmRiMDNhMTRhZjEzMGIxZmUzYjdmYTgxMjY3ZjkxMDI2OWE1ZWIwY2ZiNDI5MDp7ImFrIjoiMjU4NjgyODIifQ==\"\n" +
                        "                },\n" +
                        "                \"eventId\": \"20C92544-6F9B-B74C-963B-93C6C6BB6FCF\",\n" +
                        "                \"eventType\": 422000001,\n" +
                        "                \"happenTime\": \"2025-12-18T14:07:00.000+08:00\",\n" +
                        "                \"srcIndex\": \"34a23fe1367b4e138e4ccde4c0b51038\",\n" +
                        "                \"srcName\": \"消防控制室\",\n" +
                        "                \"srcParentIndex\": \"e330681016434de6975ed9400f834986\",\n" +
                        "                \"srcType\": \"camera\",\n" +
                        "                \"status\": 0,\n" +
                        "                \"timeout\": 0\n" +
                        "            } \n" +
                        "        ],\n" +
                        "        \"quids\": [\n" +
                        "            \"admin\"\n" +
                        "        ],\n" +
                        "        \"sendTime\": \"2025-12-18T14:07:02.335+08:00\"\n" +
                        "    }\n" +
                        "}", EventBaseRequest.class);
                EventBaseInfoRequest request = param.getParams().getEvents().get(0);
                List<WarningEvent> list = new ArrayList<>();
                WarningEvent request1 = new WarningEvent();
                BeanUtils.copyProperties(request,request1);
                request1.setSrcName("房间1");
                request1.setEventType(request.getEventType().toString());
                request1.setSrcIndex("2");
                request1.setJsonContent("{\n" +
                        "                \"data\": {\n" +
                        "                    \"AIOPResultData\": {\n" +
                        "                        \"height\": \"1440\",\n" +
                        "                        \"imageUrl\": \"http://10.49.39.17:6120/pic?2.png\",\n" +
                        "                        \"nodeId\": 4,\n" +
                        "                        \"rect\": null,\n" +
                        "                        \"ruleId\": 1,\n" +
                        "                        \"ruleName\": [\n" +
                        "                            \"新增规则\"\n" +
                        "                        ],\n" +
                        "                        \"targetAttrs\": {\n" +
                        "                            \"IACPicUp\": \"@1766038022325@1766038022331@2@\",\n" +
                        "                            \"aimmsModelId\": \"H930_MODEL_IPS_COORDINATION\",\n" +
                        "                            \"cameraIndexCode\": \"34a23fe1367b4e138e4ccde4c0b51038\",\n" +
                        "                            \"deviceIndexCode\": \"e330681016434de6975ed9400f834986\",\n" +
                        "                            \"imageServerCode\": \"0803dbe0-c007-4dcf-abef-424da37d58f9\",\n" +
                        "                            \"picServerIndexCode\": \"0803dbe0-c007-4dcf-abef-424da37d58f9\",\n" +
                        "                            \"recognitionSign\": 1\n" +
                        "                        },\n" +
                        "                        \"taskID\": \"50230c815af14c54bbc3c6891fab0113\",\n" +
                        "                        \"taskType\": \"AIOP_Video\",\n" +
                        "                        \"triggerType\": 1073758209,\n" +
                        "                        \"unionTargets\": {\n" +
                        "                            \"childTargets\": [\n" +
                        "\n" +
                        "                            ],\n" +
                        "                            \"confidence\": 0,\n" +
                        "                            \"id\": 0,\n" +
                        "                            \"region\": {\n" +
                        "                                \"rect\": {\n" +
                        "                                    \"h\": \"0.980469\",\n" +
                        "                                    \"w\": \"0.980469\",\n" +
                        "                                    \"x\": \"0.007812\",\n" +
                        "                                    \"y\": \"0.007812\"\n" +
                        "                                }\n" +
                        "                            },\n" +
                        "                            \"type\": 0\n" +
                        "                        },\n" +
                        "                        \"url\": null,\n" +
                        "                        \"width\": \"2560\"\n" +
                        "                    },\n" +
                        "                    \"aiopMsgType\": 2,\n" +
                        "                    \"channelID\": 5,\n" +
                        "                    \"channelName\": \"消防控制室\",\n" +
                        "                    \"dataProcInterval\": \"14\",\n" +
                        "                    \"dataType\": \"AIOPDetection\",\n" +
                        "                    \"dateTime\": \"2025-12-18T14:07:00.000+08:00\",\n" +
                        "                    \"eventDescription\": \"AI Open Platform Video Detection\",\n" +
                        "                    \"eventType\": \"AIOPResultData\",\n" +
                        "                    \"ipAddress\": \"192.168.15.224\",\n" +
                        "                    \"picUploadInterval\": \"6\",\n" +
                        "                    \"portNo\": 8000,\n" +
                        "                    \"presetIndex\": 0,\n" +
                        "                    \"recvTime\": \"2025-12-18T14:07:02.320+08:00\",\n" +
                        "                    \"sendTime\": \"2025-12-18T14:07:02.334+08:00\",\n" +
                        "                    \"targetAttrs\": {\n" +
                        "                        \"IACPicUp\": \"@1766038022325@1766038022331@2@\",\n" +
                        "                        \"cameraIndexCode\": \"34a23fe1367b4e138e4ccde4c0b51038\",\n" +
                        "                        \"deviceIndexCode\": \"e330681016434de6975ed9400f834986\",\n" +
                        "                        \"imageServerCode\": \"0803dbe0-c007-4dcf-abef-424da37d58f9\",\n" +
                        "                        \"picServerIndexCode\": \"0803dbe0-c007-4dcf-abef-424da37d58f9\",\n" +
                        "                        \"recognitionSign\": 1\n" +
                        "                    },\n" +
                        "                    \"taskID\": \"50230c815af14c54bbc3c6891fab0113\",\n" +
                        "                    \"url\": \"http://10.49.39.17:6120/pic?8dc0=1c00=2b-0ipf1ao620d404*-o7=5221*5l3=2062023786t6=910p*==217**=s153*4b4d47e2970d391*6-17odf2-l20a2300=df*&iTk=MmQwODU4YjM4YmMxM2RmMzlhYmRiMDNhMTRhZjEzMGIxZmUzYjdmYTgxMjY3ZjkxMDI2OWE1ZWIwY2ZiNDI5MDp7ImFrIjoiMjU4NjgyODIifQ==\"\n" +
                        "                },\n" +
                        "                \"eventId\": \"20C92544-6F9B-B7-93C6C6BB6FCF\",\n" +
                        "                \"eventType\": 422000001,\n" +
                        "                \"happenTime\": \"2025-12-18T14:07:00.000+08:00\",\n" +
                        "                \"srcIndex\": \"34a23fe1367b4e138e4ccde4c0b51038\",\n" +
                        "                \"srcName\": \"消防控制室2\",\n" +
                        "                \"srcParentIndex\": \"2\",\n" +
                        "                \"srcType\": \"camera\",\n" +
                        "                \"status\": 0,\n" +
                        "                \"timeout\": 0\n" +
                        "            }");
                 list.add(request1);
                request1 = new WarningEvent();
                BeanUtils.copyProperties(request,request1);
                request1.setEventType(request.getEventType().toString());
                request1.setSrcName("房间2");
                request1.setSrcIndex("3");
                list.add(request1);
                param.getParams().setEvents(new ArrayList<>());
                int key = Constants.WarningConfig.AF_RYLG_CUSTOM.getKey();
                List<EventBaseInfoRequest> noticeList = new ArrayList<>();
                TypeReference typeReference =
                        new TypeReference<EventBaseInfoRequest>(){};
                request.setEventType(key);//更换事件类型
                noticeList.add(request);
                for(WarningEvent c : list){
                    if(StringUtils.equals( c.getEventType(),Constants.WarningConfig.AF_RYLG.getKey()+"")) {
                        if(StringUtils.isNotBlank(c.getJsonContent())){
                            EventBaseInfoRequest infoRequest =JSONObject.parseObject(c.getJsonContent(),typeReference.getType());
                            noticeList.add(infoRequest);
                        }
                    }
                }
                for(EventBaseInfoRequest t : noticeList){
                    if(t.getData() == null){
                        t.setData(new JSONObject());
                    }
                    JSONObject at = t.getData().getJSONObject("AIOPResultData");
                    if(at == null){
                        at = new JSONObject();
                        t.getData().put("AIOPResultData",at);
                    }
                    if(StringUtils.isBlank(at.getString("imageUrl"))){
                        t.getData().getJSONObject("AIOPResultData").put("imageUrl","");
                    }
                    if(StringUtils.isBlank(at.getString("imageUrl"))){
                        t.getData().getJSONObject("AIOPResultData").put("imageUrl","");
                    }
                    if(StringUtils.equals(t.getEventId(),request.getEventId())){
                        continue;
                    }
                    request.setSrcIndex(StringUtils.defaultString(request.getSrcIndex(),"")+","+StringUtils.defaultString(t.getSrcIndex(),""));
                    request.setSrcName(StringUtils.defaultString(request.getSrcName(),"")+","+StringUtils.defaultString(t.getSrcName(),""));
                    request.getData().getJSONObject("AIOPResultData").put("imageUrl",StringUtils.defaultString( request.getData().getJSONObject("AIOPResultData").getString("imageUrl"),"")
                            +","+StringUtils.defaultString( t.getData().getJSONObject("AIOPResultData").getString("imageUrl"),""));
                }
                param.getParams().getEvents().add(request);
                String thirdpath ="http://www.doumee.com";
                if(StringUtils.isNotBlank(thirdpath)){
                    String[] ss = thirdpath.split(";");
                    for(String s : ss){
                        String t =JSONObject.toJSONString(param);
                        log.error("========通知其他三方地址离岗事件已推送,结果:"+t );
                        String response =   HttpsUtil.postJson(s,JSONObject.toJSONString(param));
//                        log.error("========通知其他三方地址离岗事件已推送,结果:"+response);
                    }
                }
            }
    @Autowired
    private RedisTemplate<String,Object> stringRedisTemplate;
    public String getRegionsName(String srcIndex,Integer warningType){
        log.error("【匹配设备与区域关系信息】========开始=======:"+srcIndex);
        String regionName = "未知区域";
        if(StringUtils.isBlank(srcIndex)){
            return regionName;
        }
        try{
            if(Constants.equalsInteger(warningType,Constants.ZERO)){
                List<CarmeraListVO> carmeraListVOList = (List<CarmeraListVO>) stringRedisTemplate.opsForValue().get(Constants.RedisKeys.HK_CAMERAS);//所有监控点数据
                if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(carmeraListVOList)){
                    if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(carmeraListVOList)){
                        for (CarmeraListVO c:carmeraListVOList) {
                            if(c.getIndexCode().equals(srcIndex)){
                                log.error("【监控区域匹配结果】===============:"+c.getRegionName());
                                return c.getRegionName();
                            }
                        }
                    }
                }
            }else{
                List<CarmeraListVO>  fireDeviceListVOList = (List<CarmeraListVO>) stringRedisTemplate.opsForValue().get(Constants.RedisKeys.HK_FIRE_DEVICE);//所有消防设备数据
                List<CarmeraListVO>  sensorListVOList = (List<CarmeraListVO>) stringRedisTemplate.opsForValue().get(Constants.RedisKeys.HK_SENSOR);//所有传感器
                if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(fireDeviceListVOList)){
                    if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(fireDeviceListVOList)){
                        for (CarmeraListVO c:fireDeviceListVOList) {
                            if(c.getIndexCode().equals(srcIndex)){
                                log.error("【消防区域匹配结果】===============:"+c.getRegionName());
                                return c.getRegionName();
                            }
                        }
                    }
                }
                if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(sensorListVOList)){
                    if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(sensorListVOList)){
                        for (CarmeraListVO c:sensorListVOList) {
                            if(c.getIndexCode().equals(srcIndex)){
                                log.error("【传感器区域匹配结果】==============:"+c.getRegionName());
                                return c.getRegionName();
                            }
                        }
                    }
                }
            }
        }catch (Exception e){
            e.printStackTrace();
        }
        log.error("【匹配设备与区域关系信息】========结束=======:"+srcIndex);
        return regionName;
    }
    /**
     * 海康访客事件推送