zhongrj
2023-07-04 f23198d9b9bc21eb94a1edf268859eb811f23bf6
超设计告警修改
14 files modified
1 files added
721 ■■■■■ changed files
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sjztmd/feign/IAttResManagePersonClient.java 3 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sjztmd/feign/IAttResManagePersonClientFallback.java 12 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-alerts/pom.xml 5 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/alarmRule/mapper/AlarmRuleMapper.xml 4 ●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/alarmRule/service/impl/AlarmRuleServiceImpl.java 19 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/constant/ZtApiDataColumnConstant.java 13 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/constant/ZtApiUrlConstant.java 5 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/service/impl/NoticeHandle.java 352 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/service/impl/NoticeStrategyImpl.java 286 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/feign/AttResManagePersonClient.java 5 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/mapper/AttAdBaseMapper.java 2 ●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/mapper/AttAdBaseMapper.xml 6 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/service/IAttAdBaseService.java 3 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/service/impl/AttAdBaseServiceImpl.java 4 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-xxljob/src/main/java/cn/gistack/job/executor/jobhandler/AlarmXxlJob.java 2 ●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sjztmd/feign/IAttResManagePersonClient.java
@@ -53,10 +53,11 @@
    /**
     * 根据水库编号查询除责任人之外的人员信息
     * @param res_cd
     * @param areaList
     * @return
     */
    @GetMapping(GET_USER_LIST_BY_RES_GUID)
    List<PersonVO> getUserListByResGuid(@RequestParam("res_cd") String res_cd);
    List<PersonVO> getUserListByResGuid(@RequestParam("res_cd") String res_cd, @RequestParam("areaList") String areaList);
    @PostMapping(SYNCHARONIZATION_ADD_USER)
    int syncharonization_add_user();
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sjztmd/feign/IAttResManagePersonClientFallback.java
@@ -1,10 +1,8 @@
package cn.gistack.sm.sjztmd.feign;
import cn.gistack.sm.sjztmd.entity.AttResManagePerson;
import cn.gistack.sm.sjztmd.vo.PersonVO;
import org.springblade.core.tool.api.R;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.Set;
@@ -34,11 +32,6 @@
    }
    @Override
    public List<PersonVO> getUserListByResGuid(String res_cd) {
        return null;
    }
    @Override
    public int syncharonization_add_user() {
        return 0;
    }
@@ -57,4 +50,9 @@
    public List<PersonVO> getCityCountyPersonListByResGuid(String res_cd) {
        return null;
    }
    @Override
    public List<PersonVO> getUserListByResGuid(String res_cd, String areaList) {
        return null;
    }
}
skjcmanager/skjcmanager-service/skjcmanager-alerts/pom.xml
@@ -53,6 +53,11 @@
            <artifactId>skjcmanager-user-api</artifactId>
            <version>3.0.1.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>cn.gistack</groupId>
            <artifactId>skjcmanager-system-api</artifactId>
            <version>3.0.1.RELEASE</version>
        </dependency>
    </dependencies>
    <build>
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/alarmRule/mapper/AlarmRuleMapper.xml
@@ -4,7 +4,9 @@
    <!--自定义分页列表查询-->
    <select id="selectAlarmRulePage" resultType="cn.gistack.alerts.alarmRule.vo.AlarmRuleVO">
        select sar.* from YWXT.sm_alarm_rule sar where sar.is_deleted = 0
        select sar.*
        from YWXT.sm_alarm_rule sar
        where sar.is_deleted = 0
        <if test="alarmRule.type!=null and alarmRule.type!=''">
            and sar.type = #{alarmRule.type}
        </if>
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/alarmRule/service/impl/AlarmRuleServiceImpl.java
@@ -4,9 +4,13 @@
import cn.gistack.alerts.alarmRule.mapper.AlarmRuleMapper;
import cn.gistack.alerts.alarmRule.service.AlarmRuleService;
import cn.gistack.alerts.alarmRule.vo.AlarmRuleVO;
import cn.gistack.system.feign.ISysClient;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
 * 告警规则服务实现层
@@ -15,6 +19,9 @@
 */
@Service
public class AlarmRuleServiceImpl extends BaseServiceImpl<AlarmRuleMapper, AlarmRule> implements AlarmRuleService {
    @Autowired
    private ISysClient sysClient;
    /**
     * 自定义分页列表查询
@@ -25,9 +32,17 @@
    @Override
    public Object selectAlarmRulePage(IPage<AlarmRuleVO> page, AlarmRuleVO alarmRule) {
        if (null != alarmRule.getIsExport()){
            return baseMapper.selectAlarmRulePage(null,alarmRule);
            List<AlarmRuleVO> alarmRuleVOS = baseMapper.selectAlarmRulePage(null, alarmRule);
            for (AlarmRuleVO alarmRuleVO : alarmRuleVOS) {
                alarmRuleVO.setAlarmPerson(String.join(",",sysClient.getRoleNames(alarmRuleVO.getAlarmPerson()).getData()));
            }
            return alarmRuleVOS;
        }
        return page.setRecords(baseMapper.selectAlarmRulePage(page,alarmRule));
        List<AlarmRuleVO> alarmRuleVOS = baseMapper.selectAlarmRulePage(page, alarmRule);
        for (AlarmRuleVO alarmRuleVO : alarmRuleVOS) {
            alarmRuleVO.setAlarmPerson(String.join(",",sysClient.getRoleNames(alarmRuleVO.getAlarmPerson()).getData()));
        }
        return page.setRecords(alarmRuleVOS);
    }
    /**
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/constant/ZtApiDataColumnConstant.java
@@ -51,4 +51,17 @@
        add("over_z");
    }};
    /**
     * 水位初次超汛限告警(水库技术责任人、巡查责任人)
     */
    public static List<String>  waterMoreDesignList = new ArrayList<String>()
    {{
        add("town_nm");
        add("res_nm");
        add("rz");
        add("over_des_wtr_level");
        add("diff_dam");
        add("drp_24");
    }};
}
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/constant/ZtApiUrlConstant.java
@@ -37,4 +37,9 @@
     */
    public static final String over_z_res_api = "/services/1234567890ABCDEFGHIJKLMN/over_z_res";
    /**
     *
     */
    public static final String over_des_rz_warn_api = "/services/1234567890ABCDEFGHIJKLMN/over_des_rz/warn";
}
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/service/impl/NoticeHandle.java
New file
@@ -0,0 +1,352 @@
package cn.gistack.alerts.notice.service.impl;
import cn.gistack.alerts.alarmRule.entity.AlarmRecord;
import cn.gistack.alerts.alarmRule.entity.AlarmRule;
import cn.gistack.alerts.alarmRule.service.AlarmRecordService;
import cn.gistack.alerts.notice.enums.PersonEnum;
import cn.gistack.alerts.notice.util.FormatUtil;
import cn.gistack.alerts.sms.entity.SmsTemplate;
import cn.gistack.alerts.sms.service.ISmsTemplateService;
import cn.gistack.alerts.sms.vo.SmsRequestTemplate;
import cn.gistack.sm.sjztmd.feign.IAttResManagePersonClient;
import cn.gistack.sm.sjztmd.vo.PersonVO;
import cn.gistack.system.feign.ISysClient;
import com.alibaba.fastjson.JSONArray;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.jetbrains.annotations.NotNull;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
@Component
public class NoticeHandle {
    @Autowired
    private AlarmRecordService alarmRecordService;
    @Autowired
    private ISmsTemplateService smsTemplateService;
    @Autowired
    private IAttResManagePersonClient attResManagePersonClient;
    @Autowired
    private ISysClient sysClient;
    /**
     * 短信发送数据组装
     *
     * @param jsonArray
     * @param templateId
     * @param alarmRule
     * @param columnsList 列名集合信息
     * @param flag 是否包含日期
     * @param adCode 行政区编号
     * @return
     */
    public SmsRequestTemplate getSendSmsTemplate(JSONArray jsonArray,
                                                  String templateId,
                                                  AlarmRule alarmRule,
                                                  List<String> columnsList,
                                                  Boolean flag,
                                                  String adCode) {
        // 通过模板id 查询模板相关信息
        SmsTemplate smsTemplate = smsTemplateService.getOne(new QueryWrapper<SmsTemplate>().eq("template_id",templateId).eq("is_deleted",0));
        if (null != smsTemplate) {
            SmsRequestTemplate smsRequestTemplate = new SmsRequestTemplate();
            // 设置模板信息
            smsRequestTemplate.setSmsTemplate(smsTemplate);
            // 解析模板并设置 title
            smsRequestTemplate.setTitle(FormatUtil.composeMessage(smsTemplate.getContent()));
            // 列名数据转换
            getColumnData(jsonArray, columnsList,smsRequestTemplate,alarmRule,flag,adCode);
            //返回
            return smsRequestTemplate;
        }
        return null;
    }
    /**
     * 列名数据转换
     * @param jsonArray
     * @param columnsList
     * @param smsRequestTemplate
     * @param flag
     * @param adCode
     * @return
     */
    private void getColumnData(JSONArray jsonArray,
                               List<String> columnsList,
                               SmsRequestTemplate smsRequestTemplate,
                               AlarmRule alarmRule,
                               Boolean flag,
                               String adCode) {
        List<PersonVO> personLists = new ArrayList<>();
        List<List<String>> lists = new ArrayList<>();
        for (int i = 0; i < jsonArray.size(); i++) {
            if (null!=adCode){
                // city_cd,county_cd 过滤数据
                String county_cd = jsonArray.getJSONObject(i).getString("county_cd");
                if (county_cd.equals(adCode)) {
                    jointData(jsonArray, columnsList, alarmRule, flag, personLists, lists, i);
                }
            }else {
                jointData(jsonArray, columnsList, alarmRule, flag, personLists, lists, i);
            }
        }
        // 设置信息
        smsRequestTemplate.setPersonVOList(personLists);
        smsRequestTemplate.setTemplateContent(lists);
    }
    /**
     * 拼接列数据设置告警人员信息
     * @param jsonArray
     * @param columnsList
     * @param alarmRule
     * @param flag
     * @param personLists
     * @param lists
     * @param i
     * @return
     */
    private void jointData(JSONArray jsonArray, List<String> columnsList, AlarmRule alarmRule, Boolean flag, List<PersonVO> personLists, List<List<String>> lists, int i) {
        // 根据水库编号,所在区域查询需要发送的人员手机号及设置
        String res_cd = jsonArray.getJSONObject(i).getString("res_cd");
        // 判断时间是否存在
        String tm = jsonArray.getJSONObject(i).getString("tm");
        String day = "";
        String hour = "";
        String minute = "";
        if (null != tm && !tm.equals("") && flag) {
            flag = true;
            // 加入天,时,分
            day = tm.substring(8, 10);
            hour = tm.substring(11, 13);
            minute = tm.substring(14, 16);
        } else {
            flag = false;
        }
        // 获取告警人员信息
        getAlarmPersonList(jsonArray, columnsList, alarmRule, flag, personLists, lists, i, res_cd, day, hour, minute);
    }
    /**
     * 获取告警人员信息
     * @param jsonArray
     * @param columnsList
     * @param alarmRule
     * @param flag
     * @param personLists
     * @param lists
     * @param i
     * @param res_cd
     * @param day
     * @param hour
     * @param minute
     */
    private void getAlarmPersonList(JSONArray jsonArray,
                                    List<String> columnsList,
                                    AlarmRule alarmRule,
                                    Boolean flag,
                                    List<PersonVO> personLists,
                                    List<List<String>> lists,
                                    int i,
                                    String res_cd,
                                    String day,
                                    String hour,
                                    String minute) {
        // 查询告警人员信息
        List<PersonVO> personVOList = getPersonListByResGuid(res_cd, alarmRule);
        if (personVOList.size() > 0) {
            for (PersonVO personVO : personVOList) {
                List<String> list = new ArrayList<>();
                list.add(res_cd);
                list.add(personVO.getPhone());
                if (flag) {
                    list.add(day);
                    list.add(hour);
                    list.add(minute);
                }
                // 变量将值放入集合中
                for (String column : columnsList) {
                    String[] split = column.split(",");
                    String format = "";
                    for (String s : split) {
                        format = format + jsonArray.getJSONObject(i).getString(s);
                    }
                    list.add(format);
                }
                lists.add(list);
            }
        }
        personLists.addAll(personVOList);
    }
    /**
     * 保存告警记录信息
     * @param list
     * @param alarmRule 告警规则
     * @param uuid 临时id
     * @return
     */
    public AlarmRecord saveAlarmRecord(List<String> list, AlarmRule alarmRule, String uuid) {
        AlarmRecord alarmRecord = alarmRecordService.getOne(new QueryWrapper<AlarmRecord>()
            .eq("temp_code",uuid)
            .eq("alarm_rule_id",alarmRule.getId())
            .eq("reservoir_number",list.get(0))
        );
        if (null!=alarmRecord) {
            return alarmRecord;
        }else {
            AlarmRecord alarm = new AlarmRecord();
            // 设置相关信息
            alarm.setAlarmRuleId(alarmRule.getId().toString());
            alarm.setReservoirNumber(list.get(0));
            alarm.setAlarmCondition(alarmRule.getRuleRemark());
            alarm.setTempCode(uuid);
            // 新增
            boolean save = alarmRecordService.save(alarm);
            if (save) {
                return alarm;
            }
        }
        // 返回
        return null;
    }
    /**
     * 查询告警人员信息
     * @param res_cd 水库 guid
     * @param alarmRule
     * @return
     */
    private List<PersonVO> getPersonListByResGuid(String res_cd,AlarmRule alarmRule) {
        // 查询对应的角色信息
        List<String> roles =  sysClient.getRoleNames(alarmRule.getAlarmPerson()).getData();
        List<String> personList = new ArrayList<>();
        List<String> areaList = new ArrayList<>();
        // 遍历
        for (String role : roles) {
            if (role.contains("责任人")){
                personList.add(PersonEnum.findByName(role).getType().toString());
            }else {
                areaList.add(role);
            }
        }
        // 根据角色,水库编号查询对应的告警人员信息
        List<PersonVO> list = new ArrayList<>();
        //1. 根据水库编号查询除责任人之外的人员信息
        if (areaList.size() > 0) {
            List<PersonVO> personVOList = attResManagePersonClient.getUserListByResGuid(res_cd,String.join(",",areaList));
            list.addAll(personVOList);
        }
        //2. 根据水库编号及责任人类型查询相关责任人信息
        List<PersonVO> personVOList1 = attResManagePersonClient.getPersonListByResGuid(res_cd,String.join(",",personList));
        // 合并人员数据
        list.addAll(personVOList1);
        // 返回数据
        return list;
    }
    /**
     * 依次添加巡查责任人,技术责任人信息
     * @param list
     */
    public void addPatrolTechnologyInfo(List<String> list) {
        // 查询巡查责任人姓名,技术责任人姓名信息
        List<PersonVO> personVOList = attResManagePersonClient.getPersonListByResGuid(list.get(0),"4,5");
        if (personVOList.size()>0) {
            String xczrr = "";
            String jszrr = "";
            for (PersonVO personVO : personVOList) {
                if (personVO.getType().equals("5")) {
                    xczrr = personVO.getName();
                }
                if (personVO.getType().equals("4")) {
                    jszrr = personVO.getName();
                }
            }
            // 巡查责任人姓名
            list.add(xczrr);
            // 技术责任人姓名
            list.add(jszrr);
        }else {
            // 巡查责任人姓名
            list.add("");
            // 技术责任人姓名
            list.add("");
        }
    }
    /**
     * 拼接市县水利部人员姓名及联系方式
     * @param list
     */
    public void addCityCountyBusinessPersonInfo(List<String> list) {
        // 根据水库编号查询市县水利部人员姓名及联系方式
        List<PersonVO> personVOList = attResManagePersonClient.getCityCountyPersonListByResGuid(list.get(0));
        if (personVOList.size()>0){
            // 如果没有找到人员?
            StringBuilder builder = new StringBuilder();
            for (PersonVO personVO : personVOList) {
                builder.append(personVO.getName()).append(":").append(personVO.getPhone()).append(",");
            }
            // 拼接水利部人员信息
            list.add(builder.substring(0,builder.length()-1));
        }else {
            list.add("");
        }
    }
    /**
     * 依次添加行政责任人,主管部门责任人,技术责任人,巡查责任人信息
     * @param list
     * @param personTypes
     */
    public void addWaterMoreDesignPatrolTechnologyInfo(List<String> list,String personTypes) {
        String[] split = personTypes.split(",");
        // 查询巡查责任人姓名,技术责任人姓名信息
        List<PersonVO> personVOList = attResManagePersonClient.getPersonListByResGuid(list.get(0),personTypes);
        if (personVOList.size()>0) {
            String xzzrr = " ";
            String zgzrr = " ";
            String jszrr = " ";
            String xczrr = " ";
            for (PersonVO personVO : personVOList) {
                String str = null!=personVO.getPhone() ? ":"+personVO.getPhone():"";
                if (personVO.getType().equals(split[0])) {
                    xzzrr = personVO.getName() + str;
                }
                if (personVO.getType().equals(split[1])) {
                    zgzrr = personVO.getName()+ str;
                }
                if (personVO.getType().equals(split[2])) {
                    jszrr = personVO.getName()+ str;
                }
                if (personVO.getType().equals(split[3])) {
                    xczrr = personVO.getName()+ str;
                }
            }
            // 行政
            list.add(xzzrr);
            // 主管
            list.add(zgzrr);
            // 技术责任人姓名
            list.add(jszrr);
            // 巡查责任人姓名
            list.add(xczrr);
        }else {
            for (String type : split) {
                list.add("");
            }
        }
    }
}
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/service/impl/NoticeStrategyImpl.java
@@ -21,6 +21,7 @@
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.jetbrains.annotations.NotNull;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
@@ -50,234 +51,13 @@
    private AlarmRuleService alarmRuleService;
    @Autowired
    private AlarmRecordService alarmRecordService;
    @Autowired
    private ISmsTemplateService smsTemplateService;
    @Autowired
    private RestTemplate restTemplate;
    @Autowired
    private IAttResManagePersonClient attResManagePersonClient;
    private NoticeHandle noticeHandle;
    /**
     * 短信发送数据组装
     *
     * @param jsonArray
     * @param templateId
     * @param alarmRule
     * @param columnsList 列名集合信息
     * @param flag 是否包含日期
     * @return
     */
    private SmsRequestTemplate getSendSmsTemplate(JSONArray jsonArray,
                                                  String templateId,
                                                  AlarmRule alarmRule,
                                                  List<String> columnsList,
                                                  Boolean flag) {
        // 通过模板id 查询模板相关信息
        SmsTemplate smsTemplate = smsTemplateService.getOne(new QueryWrapper<SmsTemplate>().eq("template_id",templateId).eq("is_deleted",0));
        if (null != smsTemplate) {
            SmsRequestTemplate smsRequestTemplate = new SmsRequestTemplate();
            // 设置模板信息
            smsRequestTemplate.setSmsTemplate(smsTemplate);
            // 解析模板并设置 title
            smsRequestTemplate.setTitle(FormatUtil.composeMessage(smsTemplate.getContent()));
            // 列名数据转换
            getColumnData(jsonArray, columnsList,smsRequestTemplate,alarmRule,flag);
            //返回
            return smsRequestTemplate;
        }
        return null;
    }
    /**
     * 列名数据转换
     * @param jsonArray
     * @param columnsList
     * @param smsRequestTemplate
     * @param flag
     * @return
     */
    private void getColumnData(JSONArray jsonArray,
                               List<String> columnsList,
                               SmsRequestTemplate smsRequestTemplate,
                               AlarmRule alarmRule,
                               Boolean flag) {
        List<PersonVO> personLists = new ArrayList<>();
        List<List<String>> lists = new ArrayList<>();
        for (int i = 0; i < jsonArray.size(); i++) {
            String county_cd = jsonArray.getJSONObject(i).getString("county_cd");
            // city_cd,county_cd
            if (county_cd.equals("421303000000")) {
                // 根据水库编号,所在区域查询需要发送的人员手机号及设置
                String res_cd = jsonArray.getJSONObject(i).getString("res_cd");
                // 判断时间是否存在
                String tm = jsonArray.getJSONObject(i).getString("tm");
                String day = "";
                String hour = "";
                String minute = "";
                if (null != tm && !tm.equals("") && flag) {
                    flag = true;
                    // 加入天,时,分
                    day = tm.substring(8, 10);
                    hour = tm.substring(11, 13);
                    minute = tm.substring(14, 16);
                } else {
                    flag = false;
                }
                // 查询告警人员信息
                List<PersonVO> personVOList = getPersonListByResGuid(res_cd, alarmRule);
                if (personVOList.size() > 0) {
                    for (PersonVO personVO : personVOList) {
                        List<String> list = new ArrayList<>();
                        list.add(res_cd);
                        list.add(personVO.getPhone());
                        if (flag) {
                            list.add(day);
                            list.add(hour);
                            list.add(minute);
                        }
                        // 变量将值放入集合中
                        for (String column : columnsList) {
                            String[] split = column.split(",");
                            String format = "";
                            for (String s : split) {
                                format = format + jsonArray.getJSONObject(i).getString(s);
                            }
                            list.add(format);
                        }
                        lists.add(list);
                    }
                }
                personLists.addAll(personVOList);
            }
        }
        // 设置信息
        smsRequestTemplate.setPersonVOList(personLists);
        smsRequestTemplate.setTemplateContent(lists);
    }
    /**
     * 保存告警记录信息
     * @param list
     * @param alarmRule 告警规则
     * @param uuid 临时id
     * @return
     */
    private AlarmRecord saveAlarmRecord(List<String> list,AlarmRule alarmRule,String uuid) {
        AlarmRecord alarmRecord = alarmRecordService.getOne(new QueryWrapper<AlarmRecord>()
            .eq("temp_code",uuid)
            .eq("alarm_rule_id",alarmRule.getId())
            .eq("reservoir_number",list.get(0))
        );
        if (null!=alarmRecord) {
            return alarmRecord;
        }else {
            AlarmRecord alarm = new AlarmRecord();
            // 设置相关信息
            alarm.setAlarmRuleId(alarmRule.getId().toString());
            alarm.setReservoirNumber(list.get(0));
            alarm.setAlarmCondition(alarmRule.getRuleRemark());
            alarm.setTempCode(uuid);
            // 新增
            boolean save = alarmRecordService.save(alarm);
            if (save) {
                return alarm;
            }
        }
        // 返回
        return null;
    }
    /**
     * 查询告警人员信息
     * @param res_cd 水库 guid
     * @param alarmRule
     * @return
     */
    private List<PersonVO> getPersonListByResGuid(String res_cd,AlarmRule alarmRule) {
        // 查询对应的角色信息
        String roles =  alarmRule.getAlarmPerson();
        String[] roleArray = roles.split(",");
        List<String> personList = new ArrayList<>();
        List<String> areaList = new ArrayList<>();
        // 遍历
        for (String role : roleArray) {
            if (role.contains("责任人")){
                personList.add(PersonEnum.findByName(role).getType().toString());
            }else {
                areaList.add(role);
            }
        }
        // 根据角色,水库编号查询对应的告警人员信息
        List<PersonVO> list = new ArrayList<>();
        //1. 根据水库编号查询除责任人之外的人员信息
        if (areaList.size() > 0) {
            List<PersonVO> personVOList = attResManagePersonClient.getUserListByResGuid(res_cd);
            list.addAll(personVOList);
        }
        //2. 根据水库编号及责任人类型查询相关责任人信息
        List<PersonVO> personVOList1 = attResManagePersonClient.getPersonListByResGuid(res_cd,String.join(",",personList));
        // 合并人员数据
        list.addAll(personVOList1);
        // 返回数据
        return list;
    }
    /**
     * 依次添加巡查责任人,技术责任人信息
     * @param list
     */
    private void addPatrolTechnologyInfo(List<String> list) {
        // 查询巡查责任人姓名,技术责任人姓名信息
        List<PersonVO> personVOList = attResManagePersonClient.getPersonListByResGuid(list.get(0),"4,5");
        if (personVOList.size()>0) {
            String xczrr = "";
            String jszrr = "";
            for (PersonVO personVO : personVOList) {
                if (personVO.getType().equals("5")) {
                    xczrr = personVO.getName();
                }
                if (personVO.getType().equals("4")) {
                    jszrr = personVO.getName();
                }
            }
            // 巡查责任人姓名
            list.add(xczrr);
            // 技术责任人姓名
            list.add(jszrr);
        }else {
            // 巡查责任人姓名
            list.add("");
            // 技术责任人姓名
            list.add("");
        }
    }
    /**
     * 拼接市县水利部人员姓名及联系方式
     * @param list
     */
    private void addCityCountyBusinessPersonInfo(List<String> list) {
        // 根据水库编号查询市县水利部人员姓名及联系方式
        List<PersonVO> personVOList = attResManagePersonClient.getCityCountyPersonListByResGuid(list.get(0));
        if (personVOList.size()>0){
            // 如果没有找到人员?
            StringBuilder builder = new StringBuilder();
            for (PersonVO personVO : personVOList) {
                builder.append(personVO.getName()).append(":").append(personVO.getPhone()).append(",");
            }
            // 拼接水利部人员信息
            list.add(builder.substring(0,builder.length()-1));
        }else {
            list.add("");
        }
    }
    /**
     * 默认实现
@@ -307,14 +87,12 @@
            // 调用中台服务接口查询数据
            JSONArray ztData = getZtData("", ZtApiUrlConstant.res_z_null_api);
            // 只发短信,将发短信信息组装好
            SmsRequestTemplate smsRequestTemplate = getSendSmsTemplate(ztData, templateId,alarmRule, ZtApiDataColumnConstant.waterInfoNotList,false);
            SmsRequestTemplate smsRequestTemplate = noticeHandle.getSendSmsTemplate(ztData, templateId,alarmRule, ZtApiDataColumnConstant.waterInfoNotList,false,null);
            // 拼接内容后面的联系方式,当前模板拼接平台服务电话
            // 遍历,拼接平台服务电话
            for (List<String> list : smsRequestTemplate.getTemplateContent()) {
                // 添加平台电话
                list.add(PtInfoConstant.serverPhone);
                // 保存告警记录信息
                AlarmRecord alarmRecord = saveAlarmRecord(list,alarmRule,uuid);
                AlarmRecord alarmRecord = noticeHandle.saveAlarmRecord(list,alarmRule,uuid);
                if (null != alarmRecord) {
                    list.add(alarmRecord.getId().toString());
                }
@@ -343,11 +121,11 @@
            JSONArray ztData = getZtData("", ZtApiUrlConstant.res_z_not_normal_api);
            // 只发短信,将发短信信息组装好
            SmsRequestTemplate smsRequestTemplate
                = getSendSmsTemplate(ztData, templateId,alarmRule, ZtApiDataColumnConstant.waterDataExcList,false);
                = noticeHandle.getSendSmsTemplate(ztData, templateId,alarmRule, ZtApiDataColumnConstant.waterDataExcList,false,null);
            // 拼接后面内容
            for (List<String> list : smsRequestTemplate.getTemplateContent()) {
                // 保存告警记录信息
                AlarmRecord alarmRecord = saveAlarmRecord(list,alarmRule,uuid);
                AlarmRecord alarmRecord = noticeHandle.saveAlarmRecord(list,alarmRule,uuid);
                if (null != alarmRecord) {
                    list.add(alarmRecord.getId().toString());
                }
@@ -375,14 +153,14 @@
            // 调用中台服务接口查询数据
            JSONArray ztData = getZtData("", ZtApiUrlConstant.res_diff_dead_z_api);
            // 只发短信,将发短信信息组装好
            SmsRequestTemplate smsRequestTemplate = getSendSmsTemplate(ztData, templateId,alarmRule, ZtApiDataColumnConstant.waterLessDeadList,true);
            SmsRequestTemplate smsRequestTemplate = noticeHandle.getSendSmsTemplate(ztData, templateId,alarmRule, ZtApiDataColumnConstant.waterLessDeadList,true,null);
            // 拼接内容后面的联系方式,当前模板县水利部人员姓名电话
            // 遍历,拼接县水利部人员电话
            for (List<String> list : smsRequestTemplate.getTemplateContent()) {
                // 查询县水利部人员(通过水库编号)
//                list.add("测试:13112341234");
                // 保存告警记录信息
                AlarmRecord alarmRecord = saveAlarmRecord(list,alarmRule,uuid);
                AlarmRecord alarmRecord = noticeHandle.saveAlarmRecord(list,alarmRule,uuid);
                if (null != alarmRecord) {
                    list.add(alarmRecord.getId().toString());
                }
@@ -424,16 +202,16 @@
            // 调用中台服务接口查询数据
            JSONArray ztData = getZtData("", ZtApiUrlConstant.res_diff_dead_z_api);
            // 只发送站内信
            SmsRequestTemplate smsRequestTemplate = getSendSmsTemplate(ztData, templateId,alarmRule, ZtApiDataColumnConstant.waterLessDeadList,true);
            SmsRequestTemplate smsRequestTemplate = noticeHandle.getSendSmsTemplate(ztData, templateId,alarmRule, ZtApiDataColumnConstant.waterLessDeadList,true,null);
            // 拼接内容后面的联系方式,当前模板县水利部人员姓名电话
            // 遍历,拼接县水利部人员电话
            for (List<String> list : smsRequestTemplate.getTemplateContent()) {
                // 后面依次拼接 巡查责任人姓名,技术责任人姓名,市县水利部门人员姓名电话(暂时不要)
                addPatrolTechnologyInfo(list);
                noticeHandle.addPatrolTechnologyInfo(list);
                // 市县水利部门人员姓名电话(暂时不要)
//                list.add("测试:13112341234");
                // 保存告警记录信息
                AlarmRecord alarmRecord = saveAlarmRecord(list,alarmRule,uuid);
                AlarmRecord alarmRecord = noticeHandle.saveAlarmRecord(list,alarmRule,uuid);
                if (null != alarmRecord) {
                    list.add(alarmRecord.getId().toString());
//                    list.add("999");
@@ -455,6 +233,7 @@
     * @return
     */
    public String waterFirstOverHandle(String arg1, String arg2) {
        String adCode = "421303000000";
        String templateId = "2431012216671";
        String uuid = templateId + UUID.randomUUID().toString();
        // 查询当前策略对应的告警规则信息
@@ -464,16 +243,16 @@
            JSONArray ztData = getZtData("", ZtApiUrlConstant.over_z_res_api);
            // 只发短信,将发短信信息组装好
            SmsRequestTemplate smsRequestTemplate
                = getSendSmsTemplate(ztData, templateId,alarmRule, ZtApiDataColumnConstant.waterFirstOverList,true);
                = noticeHandle.getSendSmsTemplate(ztData, templateId,alarmRule, ZtApiDataColumnConstant.waterFirstOverList,true,adCode);
            // 拼接后面内容
            if (smsRequestTemplate.getPersonVOList().size()>0) {
                for (List<String> list : smsRequestTemplate.getTemplateContent()) {
                    // 依次拼接巡查责任人,技术责任人姓名
                    addPatrolTechnologyInfo(list);
                    noticeHandle.addPatrolTechnologyInfo(list);
                    // 拼接市县水利部人员姓名及联系方式
                    addCityCountyBusinessPersonInfo(list);
                    noticeHandle.addCityCountyBusinessPersonInfo(list);
                    // 保存告警记录信息
                    AlarmRecord alarmRecord = saveAlarmRecord(list,alarmRule,uuid);
                    AlarmRecord alarmRecord = noticeHandle.saveAlarmRecord(list,alarmRule,uuid);
                    if (null != alarmRecord) {
                        list.add(alarmRecord.getId().toString());
//                        list.add("999");
@@ -534,8 +313,37 @@
     * @return
     */
    public String waterMoreDesignHandle(String arg1, String arg2) {
        // 业务逻辑处理 2...
        return "";
        String templateId = "2431012248604";
        String uuid = templateId + UUID.randomUUID().toString();
        // 查询当前策略对应的告警规则信息
        AlarmRule alarmRule = alarmRuleService.getOne(new QueryWrapper<AlarmRule>().eq("rule_name", arg1));
        if (null!=alarmRule) {
            // 调用中台服务接口查询数据
            JSONArray ztData = getZtData("", ZtApiUrlConstant.over_des_rz_warn_api);
            // 只发短信,将发短信信息组装好
            SmsRequestTemplate smsRequestTemplate
                = noticeHandle.getSendSmsTemplate(ztData, templateId,alarmRule, ZtApiDataColumnConstant.waterMoreDesignList,true,null);
            // 拼接后面内容
            if (smsRequestTemplate.getPersonVOList().size()>0) {
                for (List<String> list : smsRequestTemplate.getTemplateContent()) {
                    // 依次添加行政责任人,主管部门责任人,技术责任人,巡查责任人信息(姓名,联系电话)
                    noticeHandle.addWaterMoreDesignPatrolTechnologyInfo(list,"1,2,4,5");
                    // 拼接市县水利部人员姓名及联系方式
                    noticeHandle.addCityCountyBusinessPersonInfo(list);
                    // 保存告警记录信息
                    AlarmRecord alarmRecord = noticeHandle.saveAlarmRecord(list,alarmRule,uuid);
                    if (null != alarmRecord) {
                        list.add(alarmRecord.getId().toString());
                    }
                }
                // 调用短信服务
                Map<String, Object> map = smsService.sendSignMsg(smsRequestTemplate);
                // 返回
                return "本次-水位初次超汛限告警短信成功通知数量:" + map.get("smsRecord");
            }
        }
        // 返回
        return "水位超设计洪水位告警";
    }
    /**
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/feign/AttResManagePersonClient.java
@@ -77,11 +77,12 @@
    /**
     *
     * @param res_cd
     * @param areaList
     * @return
     */
    @Override
    public List<PersonVO> getUserListByResGuid(String res_cd) {
        return adBaseService.getPersonListByResGuid(res_cd);
    public List<PersonVO> getUserListByResGuid(String res_cd,String areaList) {
        return adBaseService.getPersonListByResGuid(res_cd,areaList);
    }
    @Override
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/mapper/AttAdBaseMapper.java
@@ -37,7 +37,7 @@
     * @param res_cd
     * @return
     */
    List<PersonVO> getPersonListByResGuid(@Param("res_cd")String res_cd);
    List<PersonVO> getPersonListByResGuid(@Param("res_cd")String res_cd,@Param("roleName") String areaList);
    AttAdBaseVO getDetail(@Param("attAdBase") AttAdBase attAdBase);
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/mapper/AttAdBaseMapper.xml
@@ -96,15 +96,19 @@
    <!--根据水库编号查询除责任人之外的人员信息-->
    <select id="getPersonListByResGuid" resultType="cn.gistack.sm.sjztmd.vo.PersonVO">
        select bu.real_name,bu.phone,bd.ad_code from YWXT.blade_user bu left  join YWXT.blade_dept bd on instr(bu.dept_id,bd.id)>0 and bd.is_deleted = 0
        select bu.real_name as name,bu.phone,bd.ad_code from YWXT.blade_user bu
        left join YWXT.blade_dept bd on locate(bd.id,bu.dept_id)>0 and bd.is_deleted = 0
        left join YWXT.blade_role br on locate(br.id,bu.role_id)>0 and br.is_deleted = 0
        where bu.is_deleted = 0
        and bd.ad_code in (
        select "ad_code" from SJZT_MD."att_ad_base"
                start with "ad_code" = (select "interior_ad_guid" from SJZT_MD."att_res_base" where "guid" = #{res_cd} )
                CONNECT BY PRIOR "p_ad_code"  =  "ad_code"
        )
        and br.role_name like concat('%',#{roleName},'%')
        and bu.phone is not null and bu.phone!=''
    </select>
    <select id="getDetail" resultType="cn.gistack.sm.sjztmd.vo.AttAdBaseVO">
        SELECT
            region."guid",
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/service/IAttAdBaseService.java
@@ -32,9 +32,10 @@
    /**
     * 根据水库编号查询除责任人之外的人员信息
     * @param res_cd
     * @param areaList
     * @return
     */
    List<PersonVO> getPersonListByResGuid(String res_cd);
    List<PersonVO> getPersonListByResGuid(String res_cd,String areaList);
    /**
     * 获取详情
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/service/impl/AttAdBaseServiceImpl.java
@@ -75,8 +75,8 @@
     * @return
     */
    @Override
    public List<PersonVO> getPersonListByResGuid(String res_cd) {
        return baseMapper.getPersonListByResGuid(res_cd);
    public List<PersonVO> getPersonListByResGuid(String res_cd,String areaList) {
        return baseMapper.getPersonListByResGuid(res_cd,areaList);
    }
    @Override
skjcmanager/skjcmanager-service/skjcmanager-xxljob/src/main/java/cn/gistack/job/executor/jobhandler/AlarmXxlJob.java
@@ -171,7 +171,7 @@
     * @return
     * @throws Exception
     */
    @XxlJob("waterMoreDesignHandle")
    @XxlJob("waterMoreDesignHandle_0704")
    public ReturnT<String> waterMoreDesignHandle(String param){
        XxlJobLogger.log("开始执行任务...");
        // 创建外呼任务