杜洪波
2024-07-16 cbab41cce69c63495d97a40fe6f496c18af7e1a7
Merge branch 'master' of http://nonxin.cn:8090/r/product/product-server-administration/V2.0.0
已修改1个文件
423 ■■■■■ 文件已修改
src/main/java/com/product/administration/service/EarlyWarningServer.java 423 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/product/administration/service/EarlyWarningServer.java
@@ -3,10 +3,14 @@
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.cron.CronUtil;
import com.google.common.collect.Sets;
import com.product.administration.config.SystemCode;
import com.product.common.collect.SetUtils;
import com.product.quartz.util.CronUtils;
import com.product.util.SystemParamReplace;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -30,10 +34,10 @@
    @Autowired
    BaseDao baseDao;
    @Autowired
    FlowService flowService;
    public BaseDao getBaseDao() {
        return baseDao;
@@ -60,6 +64,7 @@
    /**
     * 预警-给定uuid单个预警,通常为定时任务触发
     *
     * @param uuid
     */
    public void triggerSingleWarningTask(String uuid) {
@@ -76,6 +81,7 @@
    /**
     * 单个预警
     *
     * @param fseWarningConfig
     */
    private void singleWarningTask(FieldSetEntity fseWarningConfig) {
@@ -95,6 +101,22 @@
        String flowCode = fseWarningConfig.getString(CmnConst.FLOW_CODE);                        //流程type_code
        String flowParam = fseWarningConfig.getString(CmnConst.FLOW_PARAM);                        //流程参数转换
        //获取发送消息频率
        Double cronExpression = fseWarningConfig.getDouble("reminder_frequency");
        //发送消息的频率 1.23 小数点前面代表天 小数点后面代表小时
        double seconds = 0;
        if (cronExpression != null && cronExpression > 0) {
            //将发送消息频率转换为小时
            double hours = cronExpression * 24;
            //将发送消息频率转换为分钟
            double minutes = hours * 60;
            //将发送消息频率转换为秒
            seconds = minutes * 60;
        }
        Map<String, String> tableNameAndAlias = new HashMap<>();    //相关表名-->表别名,tableName-->tableName1
        Map<String, String> fieldAndAlias = new HashMap<>();        //相关字段-->字段别名,tableName.fieldName-->tableName1fieldName
@@ -140,13 +162,53 @@
        //查询符合预警的数据
        DataTableEntity dtService = baseDao.listTable(serviceSQL.toString(), new Object[]{});
        if (!BaseUtil.dataTableIsEmpty(dtService)) {
            List<String> collect = dtService.getData().stream().map(item -> item.getString(mainTableAlias + "uuid")).collect(Collectors.toList());
            //预警uuid
            String warnUUID = fseWarningConfig.getUUID();
            //将预警uuid放到collect 的第一个
            collect.add(0, warnUUID);
            StringBuilder sql = new StringBuilder();
            //查询是否已经存在预警如有相同data_uuid的数据查询出最近的一条根据预警时间字段 early_warning_datetime
//            SELECT e.*
//            FROM product_sys_early_warning_info e
//            JOIN (
//                    SELECT data_uuid, MAX(early_warning_datetime) AS latest_datetime
//                    FROM product_sys_early_warning_info
//                    GROUP BY data_uuid
//            ) AS latest
//            ON e.data_uuid = latest.data_uuid AND e.early_warning_datetime = latest.latest_datetime;
            sql.append("SELECT e.* FROM product_sys_early_warning_info e JOIN (");
            sql.append("SELECT data_uuid, MAX(early_warning_datetime) AS latest_datetime FROM product_sys_early_warning_info ");
            sql.append(" where early_warning_uuid=? and (").append(BaseUtil.buildQuestionMarkFilter("data_uuid", collect.size(), true)).append(") ");
            sql.append("GROUP BY data_uuid) AS latest ON e.data_uuid = latest.data_uuid AND e.early_warning_datetime = latest.latest_datetime");
            DataTableEntity dt = baseDao.listTable(sql.toString(), collect.toArray());
            Map<String, FieldSetEntity> ff = new HashMap<>();
            if (!DataTableEntity.isEmpty(dt)) {
                for (int j = 0; j < dt.getRows(); j++) {
                    FieldSetEntity fse = dt.getFieldSetEntity(j);
                    ff.put(fse.getString("data_uuid"), fse);
                }
            }
            //以data_uuid 进行分组
            for (int j = 0; j < dtService.getRows(); j++) {
                FieldSetEntity fseService = dtService.getFieldSetEntity(j);
                //业务uuid
                String serviceId = fseService.getString(mainTableAlias + "uuid");
                //预警uuid
                String warnUUID = fseWarningConfig.getUUID();
                if (ff.containsKey(serviceId) && StringUtils.isEmpty(cronExpression)) {
                    //如果已经存在预警信息 根据cron表达式判断是否需要再次预警
                    Date preTime = ff.get(serviceId).getDate("early_warning_datetime");
                    if (preTime != null) {
                        long time = new Date().getTime() - preTime.getTime();
                        if (time < seconds * 1000) {
                            continue;
                        }
                    }
                }
                //信息接收人
                Set<String> receiverSet = Sets.newTreeSet();
@@ -241,20 +303,21 @@
            }
        }
    }
    /**
     *     根据提醒内容中的表属性,进行拼接成标准格式
     * @param content                预警内容
     * @param concatField            组合字段
     * @param tableNameAndAlias        表名及别名
     * @param fieldAndAlias            字段名及别名
     * @param fieldReference        字段及参照
     * 根据提醒内容中的表属性,进行拼接成标准格式
     *
     * @param content           预警内容
     * @param concatField       组合字段
     * @param tableNameAndAlias 表名及别名
     * @param fieldAndAlias     字段名及别名
     * @param fieldReference    字段及参照
     * @return
     */
    public Object[] parseWarningContent(String warnContent, StringBuilder concatField, Map<String, String> tableNameAndAlias, Map<String, String>fieldAndAlias, Map<String, String> fieldReference) {
    public Object[] parseWarningContent(String warnContent, StringBuilder concatField, Map<String, String> tableNameAndAlias, Map<String, String> fieldAndAlias, Map<String, String> fieldReference) {
        int s = 0;
        String tableAndField=null;
        String tableAndField = null;
        while (s >= 0) {
            int c = warnContent.indexOf("{#", s);
            if (c == -1) {
@@ -262,155 +325,158 @@
            }
            int m = warnContent.indexOf("#}", c);
            s = c + 2;
            //表名.字段名
            tableAndField=warnContent.substring(s, m);
            tableAndField = warnContent.substring(s, m);
            //获取表名
            String relationTable=tableAndField.split("\\.")[0];
            String relationTable = tableAndField.split("\\.")[0];
            //表别名
            String relationTableAlias=relationTable+"1";
            String relationTableAlias = relationTable + "1";
            //字段名
            String fieldName=tableAndField.split("\\.")[1];
            if (tableNameAndAlias.get(relationTable)==null) {
            String fieldName = tableAndField.split("\\.")[1];
            if (tableNameAndAlias.get(relationTable) == null) {
                concatField.append(",");
                concatField.append(relationTableAlias);
                concatField.append(".uuid ");
                concatField.append(relationTableAlias);
                concatField.append("uuid");
                fieldAndAlias.put(relationTable+".uuid", relationTable+"1uuid");
                fieldAndAlias.put(relationTable + ".uuid", relationTable + "1uuid");
                tableNameAndAlias.put(relationTable, relationTableAlias);
            }
            //生成字段别名-->表名1字段名
            String tableFieldAlias=tableAndField.replace(".", "1");
            if (fieldAndAlias.get(tableAndField)==null) {
                fieldAndAlias.put(tableAndField,tableFieldAlias);
            String tableFieldAlias = tableAndField.replace(".", "1");
            if (fieldAndAlias.get(tableAndField) == null) {
                fieldAndAlias.put(tableAndField, tableFieldAlias);
                concatField.append(",");
                concatField.append(relationTableAlias+"."+fieldName);
                concatField.append(relationTableAlias + "." + fieldName);
                concatField.append(" ");
                concatField.append(tableFieldAlias);
                fieldReference.put(tableFieldAlias, getReferenceByField(tableAndField));
            }
        }
        return new Object[]{concatField,tableNameAndAlias,fieldAndAlias,fieldReference};
        return new Object[]{concatField, tableNameAndAlias, fieldAndAlias, fieldReference};
    }
    /**
     *     根据提醒内容中的表属性,进行拼接成标准格式
     * @param flowParam                预警内容
     * @param concatField            组合字段
     * @param tableNameAndAlias        表名及别名
     * @param fieldAndAlias            字段名及别名
     * @param fieldReference        字段及参照
     * 根据提醒内容中的表属性,进行拼接成标准格式
     *
     * @param flowParam         预警内容
     * @param concatField       组合字段
     * @param tableNameAndAlias 表名及别名
     * @param fieldAndAlias     字段名及别名
     * @param fieldReference    字段及参照
     * @return
     */
    public Object[] parseFlowParam(String flowParam, StringBuilder concatField, Map<String, String> tableNameAndAlias, Map<String, String>fieldAndAlias, Map<String, String> fieldReference) {
        String[] warnAndFlows=flowParam.split(",");
    public Object[] parseFlowParam(String flowParam, StringBuilder concatField, Map<String, String> tableNameAndAlias, Map<String, String> fieldAndAlias, Map<String, String> fieldReference) {
        String[] warnAndFlows = flowParam.split(",");
        for (int i = 0; i < warnAndFlows.length; i++) {
            String[] warnAndFlow=warnAndFlows[i].split("=");
            String tableAndField=warnAndFlow[0];
            String[] warnAndFlow = warnAndFlows[i].split("=");
            String tableAndField = warnAndFlow[0];
            //获取表名
            String relationTable=tableAndField.split("\\.")[0];
            String relationTable = tableAndField.split("\\.")[0];
            //表别名
            String relationTableAlias=relationTable+"1";
            String relationTableAlias = relationTable + "1";
            //字段名
            String fieldName=tableAndField.split("\\.")[1];
            if (tableNameAndAlias.get(relationTable)==null) {
            String fieldName = tableAndField.split("\\.")[1];
            if (tableNameAndAlias.get(relationTable) == null) {
                concatField.append(",");
                concatField.append(relationTableAlias);
                concatField.append(".uuid ");
                concatField.append(relationTableAlias);
                concatField.append("uuid");
                fieldAndAlias.put(relationTable+".uuid", relationTable+"1uuid");
                fieldAndAlias.put(relationTable + ".uuid", relationTable + "1uuid");
                tableNameAndAlias.put(relationTable, relationTableAlias);
            }
            //生成字段别名-->表名1字段名
            String tableFieldAlias=tableAndField.replace(".", "1");
            if (fieldAndAlias.get(tableAndField)==null) {
                fieldAndAlias.put(tableAndField,tableFieldAlias);
            String tableFieldAlias = tableAndField.replace(".", "1");
            if (fieldAndAlias.get(tableAndField) == null) {
                fieldAndAlias.put(tableAndField, tableFieldAlias);
                concatField.append(",");
                concatField.append(relationTableAlias+"."+fieldName);
                concatField.append(relationTableAlias + "." + fieldName);
                concatField.append(" ");
                concatField.append(tableFieldAlias);
                fieldReference.put(tableFieldAlias, getReferenceByField(tableAndField));
            }
        }
        return new Object[]{concatField,tableNameAndAlias,fieldAndAlias,fieldReference};
        return new Object[]{concatField, tableNameAndAlias, fieldAndAlias, fieldReference};
    }
    /**
     *     根据表名和字段的获取对应参照
     * @param tableAndField    表别名.字段名
     * 根据表名和字段的获取对应参照
     *
     * @param tableAndField 表别名.字段名
     * @return 参照名
     */
    public String getReferenceByField(String tableAndField) {
        String [] tableField=tableAndField.replace("1.", ".").split("\\.");
        String tableName=tableField[0];
        String fieldName=tableField[1];
        FieldSetEntity fseTableInfo=baseDao.getFieldSetEntityByFilter("product_sys_datamodel_table", "table_name=?",new Object[] {tableName}, false);
        FieldSetEntity fseFieldInfo=baseDao.getFieldSetEntityByFilter(CmnConst.PRODUCT_SYS_DATAMODEL_FIELD, "table_uuid=? and field_name=?", new Object[] {fseTableInfo.getUUID(),fieldName}, false);
        if (fseFieldInfo==null) {
        String[] tableField = tableAndField.replace("1.", ".").split("\\.");
        String tableName = tableField[0];
        String fieldName = tableField[1];
        FieldSetEntity fseTableInfo = baseDao.getFieldSetEntityByFilter("product_sys_datamodel_table", "table_name=?", new Object[]{tableName}, false);
        FieldSetEntity fseFieldInfo = baseDao.getFieldSetEntityByFilter(CmnConst.PRODUCT_SYS_DATAMODEL_FIELD, "table_uuid=? and field_name=?", new Object[]{fseTableInfo.getUUID(), fieldName}, false);
        if (fseFieldInfo == null) {
            throw new BaseException("", "", this.getClass(), "");
        }
        String fieldType=fseFieldInfo.getString(CmnConst.FIELD_TYPE);
        String fieldType = fseFieldInfo.getString(CmnConst.FIELD_TYPE);
        if (CmnConst.USERID.equals(fieldType)) {
            return CmnConst.USERID;
        }else {
        } else {
            return fseFieldInfo.getString(CmnConst.FIELD_REFERENCE);
        }
    }
    /**
     *     生成关联SQL
     * 生成关联SQL
     *
     * @param tableNameAndAlias
     * @param subTable    当前表
     * @param subTable          当前表
     * @return
     */
    public String createTableRelation(Map<String,String>tableNameAndAlias, String subTable) {
    public String createTableRelation(Map<String, String> tableNameAndAlias, String subTable) {
        //关联SQL
        StringBuilder relationSql=new StringBuilder();
        relationSql.append(subTable+" ");
        relationSql.append(subTable+"1");
        StringBuilder relationSql = new StringBuilder();
        relationSql.append(subTable + " ");
        relationSql.append(subTable + "1");
        //判断是否使用子表
        if (tableNameAndAlias!=null) {
        if (tableNameAndAlias != null) {
            //根据关联子表生成关联SQL
            for (String mainTableName : tableNameAndAlias.keySet()) {
                //获取外键字段
                String foreignKey=baseDao.getSubTableRelation(mainTableName, subTable);
                String foreignKey = baseDao.getSubTableRelation(mainTableName, subTable);
                if (!StringUtils.isEmpty(foreignKey)) {
                    relationSql.append(" LEFT JOIN ");
                    relationSql.append(mainTableName+" ");
                    relationSql.append(mainTableName+"1");
                    relationSql.append(mainTableName + " ");
                    relationSql.append(mainTableName + "1");
                    relationSql.append(" ON ");
                    relationSql.append(mainTableName+"1.uuid=");
                    relationSql.append(subTable+"1."+foreignKey);
                    relationSql.append(mainTableName + "1.uuid=");
                    relationSql.append(subTable + "1." + foreignKey);
                }
            }
        }
        return relationSql.toString();
    }
    public String getContentByTableSource(FieldSetEntity fse,String content, Map<String, String> concatFieldReference) {
        if (content.indexOf("{#")==-1) {
    public String getContentByTableSource(FieldSetEntity fse, String content, Map<String, String> concatFieldReference) {
        if (content.indexOf("{#") == -1) {
            return content;
        }
        content=content.replace(".", "1");
        content = content.replace(".", "1");
        return replaceParamText(content, fse, concatFieldReference);
    }
    /**
     * 替换文本参数
     *
     *
     * @param paramText 原文本
     * @param fseData   业务数据
     * @return 新文本
@@ -427,8 +493,8 @@
        Matcher m = p3.matcher(str);
        while (m.find()) {
            String group = m.group(2);
            String replaceValue= SystemParamReplace.replaceSystemParameter(group);
            if(StringUtils.isEmpty(replaceValue)) {
            String replaceValue = SystemParamReplace.replaceSystemParameter(group);
            if (StringUtils.isEmpty(replaceValue)) {
                continue;
            }
            m.appendReplacement(sb1, replaceValue);
@@ -444,8 +510,8 @@
                if (null != value) {
                    if (StringUtils.isEmpty(concatFieldReference.get(group))) {
                        m.appendReplacement(sb2, value);
                    }else {
                        m.appendReplacement(sb2, parseReference(concatFieldReference.get(group),value,fseData));
                    } else {
                        m.appendReplacement(sb2, parseReference(concatFieldReference.get(group), value, fseData));
                    }
                }
            }
@@ -453,136 +519,140 @@
        }
        return sb2.toString();
    }
    /**
     *     参照替换
     * 参照替换
     *
     * @param referenceName
     * @param originValue
     * @param fseData
     * @return
     */
    public String parseReference(String referenceName, String originValue, FieldSetEntity fseData) {
        if (CmnConst.USERID.equals(referenceName)) {    //人员
            FieldSetEntity fseUser=baseDao.getFieldSetEntityByFilter(CmnConst.PRODUCT_SYS_USERS, "user_id=?", new Object[] {originValue}, false);
            if (fseUser==null) {
        if (CmnConst.USERID.equals(referenceName)) {    //人员
            FieldSetEntity fseUser = baseDao.getFieldSetEntityByFilter(CmnConst.PRODUCT_SYS_USERS, "user_id=?", new Object[]{originValue}, false);
            if (fseUser == null) {
                throw new BaseException("", "", this.getClass(), "");
            }else {
            } else {
                return fseUser.getString(CmnConst.USER_NAME);
            }
        }else if (referenceName.indexOf("》")>-1) {    //数据字典
        } else if (referenceName.indexOf("》") > -1) {    //数据字典
            referenceName.replace("《", "").replace("》", "");
            FieldSetEntity fseDict=baseDao.getFieldSetEntityByFilter(CmnConst.PRODUCT_SYS_DICT, "dict_name=? AND dict_value=?", new Object[] {referenceName, originValue}, false);
            if (fseDict==null) {
            FieldSetEntity fseDict = baseDao.getFieldSetEntityByFilter(CmnConst.PRODUCT_SYS_DICT, "dict_name=? AND dict_value=?", new Object[]{referenceName, originValue}, false);
            if (fseDict == null) {
                throw new BaseException("", "", this.getClass(), "");
            }else {
            } else {
                return fseDict.getString(CmnConst.DICT_LABEL);
            }
        }else {    //高级参照
            FieldSetEntity fsePrompt=baseDao.getFieldSetEntityByFilter(CmnConst.PRODUCT_SYS_PROMPT, "prompt_name=?", new Object[] {referenceName}, false);
            if (fsePrompt==null) {
                throw new BaseException("", "",this.getClass(),"");
            }else {
                String valueField=fsePrompt.getString("value_field");
                String viewField=fsePrompt.getString("view_fields");
                String sourceTable=fsePrompt.getString("source_table");
                FieldSetEntity fsePromptData=baseDao.getFieldSetEntityByFilter(sourceTable, valueField+"=?", new Object[] {originValue}, false);
                if (fsePromptData!=null) {
        } else {    //高级参照
            FieldSetEntity fsePrompt = baseDao.getFieldSetEntityByFilter(CmnConst.PRODUCT_SYS_PROMPT, "prompt_name=?", new Object[]{referenceName}, false);
            if (fsePrompt == null) {
                throw new BaseException("", "", this.getClass(), "");
            } else {
                String valueField = fsePrompt.getString("value_field");
                String viewField = fsePrompt.getString("view_fields");
                String sourceTable = fsePrompt.getString("source_table");
                FieldSetEntity fsePromptData = baseDao.getFieldSetEntityByFilter(sourceTable, valueField + "=?", new Object[]{originValue}, false);
                if (fsePromptData != null) {
                    return fsePromptData.getString(viewField);
                }
            }
        }
        return originValue;
    }
    /**
     *     解析条件表达式
     * 解析条件表达式
     *
     * @param warnCOnditon
     * @param tableNameAndAlias
     * @return
     */
    public String parseWarnCondition(String warnConditon, Map<String, String> tableNameAndAlias) {
        for (String tableName : tableNameAndAlias.keySet()) {
            if (warnConditon.indexOf(tableName)>-1) {
                warnConditon=warnConditon.replace(tableName, tableNameAndAlias.get(tableName));
            if (warnConditon.indexOf(tableName) > -1) {
                warnConditon = warnConditon.replace(tableName, tableNameAndAlias.get(tableName));
            }
        }
        warnConditon=warnConditon.replace("{#", "").replace("#}", "");
        warnConditon=warnConditon.replace("{%", "").replace("%}", "");
        warnConditon = warnConditon.replace("{#", "").replace("#}", "");
        warnConditon = warnConditon.replace("{%", "").replace("%}", "");
        return warnConditon;
    }
    /**
     *     预警发邮件解析
     * 预警发邮件解析
     *
     * @param content
     * @param receiver
     */
    public void parseMail(String content,String receiver) {
        String[] user_ids=receiver.split(",");
    public void parseMail(String content, String receiver) {
        String[] user_ids = receiver.split(",");
        for (int i = 0; i < user_ids.length; i++) {
            FieldSetEntity fseStaff=baseDao.getFieldSetEntityByFilter("product_sys_staffs", "user_id=?", new Object[] {user_ids[i]}, false);
            if (fseStaff==null) {
            FieldSetEntity fseStaff = baseDao.getFieldSetEntityByFilter("product_sys_staffs", "user_id=?", new Object[]{user_ids[i]}, false);
            if (fseStaff == null) {
                continue;
            }
            String org_level_uuid=fseStaff.getString(CmnConst.ORG_LEVEL_UUID);
            String userEmail=fseStaff.getString("staff_email");
            FieldSetEntity fseCompanySmtp=baseDao.getFieldSetEntityByFilter("product_sys_company_email_smtp", "org_level_uuid=?", new Object[] {org_level_uuid}, false);
            FieldSetEntity fseMailInfo=new FieldSetEntity();
            String org_level_uuid = fseStaff.getString(CmnConst.ORG_LEVEL_UUID);
            String userEmail = fseStaff.getString("staff_email");
            FieldSetEntity fseCompanySmtp = baseDao.getFieldSetEntityByFilter("product_sys_company_email_smtp", "org_level_uuid=?", new Object[]{org_level_uuid}, false);
            FieldSetEntity fseMailInfo = new FieldSetEntity();
            fseMailInfo.setTableName(CmnConst.PRODUCT_SYS_MAIL_SEND);
            fseMailInfo.setValue(CmnConst.ORG_LEVEL_UUID, org_level_uuid);
            fseMailInfo.setValue(CmnConst.ADDRESSEE, userEmail);
            fseMailInfo.setValue(CmnConst.MAIL_TITLE, "预警信息");
            fseMailInfo.setValue(CmnConst.MAIL_CONTENT, content);
            if (fseCompanySmtp!=null) {
            if (fseCompanySmtp != null) {
                fseMailInfo.setValue(CmnConst.SMTP_SERVER_HOST, fseCompanySmtp.getString(CmnConst.SMTP_SERVER_HOST));
                fseMailInfo.setValue(CmnConst.SMTP_SERVER_PORT, fseCompanySmtp.getString(CmnConst.SMTP_SERVER_PORT));
                fseMailInfo.setValue(CmnConst.SMTP_USERNAME, fseCompanySmtp.getString(CmnConst.SMTP_USERNAME));
                fseMailInfo.setValue(CmnConst.SMTP_LICENSE_CODE, fseCompanySmtp.getString(CmnConst.SMTP_LICENSE_CODE));
            }else {
                fseMailInfo.setValue(CmnConst.SMTP_SERVER_HOST, Global.getSystemConfig("spring.mail.host",""));
                fseMailInfo.setValue(CmnConst.SMTP_SERVER_PORT, Global.getSystemConfig("spring.mail.port",""));
                fseMailInfo.setValue(CmnConst.SMTP_USERNAME, Global.getSystemConfig("spring.mail.username",""));
                fseMailInfo.setValue(CmnConst.SMTP_LICENSE_CODE, Global.getSystemConfig("spring.mail.password",""));
            } else {
                fseMailInfo.setValue(CmnConst.SMTP_SERVER_HOST, Global.getSystemConfig("spring.mail.host", ""));
                fseMailInfo.setValue(CmnConst.SMTP_SERVER_PORT, Global.getSystemConfig("spring.mail.port", ""));
                fseMailInfo.setValue(CmnConst.SMTP_USERNAME, Global.getSystemConfig("spring.mail.username", ""));
                fseMailInfo.setValue(CmnConst.SMTP_LICENSE_CODE, Global.getSystemConfig("spring.mail.password", ""));
            }
            fseMailInfo.setValue("send_mode", "smtp");
            SmtpSendMail.sendMail(fseMailInfo,null);
            SmtpSendMail.sendMail(fseMailInfo, null);
            //创建人和创建时间
            if (SpringMVCContextHolder.getCurrentUser()!=null) {
            if (SpringMVCContextHolder.getCurrentUser() != null) {
                fseMailInfo.setValue(CmnConst.CREATED_BY, SpringMVCContextHolder.getCurrentUser().getUser_id());
            }
            fseMailInfo.setValue(CmnConst.CREATED_UTC_DATETIME,new Date());
            fseMailInfo.setValue(CmnConst.CREATED_UTC_DATETIME, new Date());
            baseDao.add(fseMailInfo);
        }
    }
    /**
     *     预警发短信解析
     * 预警发短信解析
     *
     * @param content
     * @param receiver
     */
    public void parseSMS(String content,String receiver) {
        String[] user_ids=receiver.split(",");
    public void parseSMS(String content, String receiver) {
        String[] user_ids = receiver.split(",");
        for (int i = 0; i < user_ids.length; i++) {
            FieldSetEntity fseuser=baseDao.getFieldSetEntityByFilter("product_sys_users", "user_id=?", new Object[] {user_ids[i]}, false);
            FieldSetEntity fseStaff=baseDao.getFieldSetEntityByFilter("product_sys_staffs", "user_id=?", new Object[] {user_ids[i]}, false);
            if (fseStaff==null) {
            FieldSetEntity fseuser = baseDao.getFieldSetEntityByFilter("product_sys_users", "user_id=?", new Object[]{user_ids[i]}, false);
            FieldSetEntity fseStaff = baseDao.getFieldSetEntityByFilter("product_sys_staffs", "user_id=?", new Object[]{user_ids[i]}, false);
            if (fseStaff == null) {
                continue;
            }
            String org_level_uuid=fseStaff.getString(CmnConst.ORG_LEVEL_UUID);
            String userPhone=fseuser.getString("user_phone_number");
            FieldSetEntity fseMessageInfo=new FieldSetEntity();
            String org_level_uuid = fseStaff.getString(CmnConst.ORG_LEVEL_UUID);
            String userPhone = fseuser.getString("user_phone_number");
            FieldSetEntity fseMessageInfo = new FieldSetEntity();
            fseMessageInfo.setTableName(CmnConst.PRODUCT_SYS_MESSAGE_SEND);
            fseMessageInfo.setValue(CmnConst.ORG_LEVEL_UUID, org_level_uuid);
            fseMessageInfo.setValue("send_user", "2");
            fseMessageInfo.setValue("receive_user",userPhone);
            fseMessageInfo.setValue("receive_user", userPhone);
            fseMessageInfo.setValue("content", content);
            FieldSetEntity fseCompanyMessage=baseDao.getFieldSetEntityByFilter("product_sys_company_email_smtp", "org_level_uuid=?", new Object[] {org_level_uuid}, false);
            if (fseCompanyMessage!=null) {
            FieldSetEntity fseCompanyMessage = baseDao.getFieldSetEntityByFilter("product_sys_company_email_smtp", "org_level_uuid=?", new Object[]{org_level_uuid}, false);
            if (fseCompanyMessage != null) {
                fseMessageInfo.setValue(CmnConst.USER_ACCOUNT, fseCompanyMessage.getString(CmnConst.USER_ACCOUNT));
                fseMessageInfo.setValue(CmnConst.SECRETKEY, fseCompanyMessage.getString(CmnConst.SECRETKEY));
                fseMessageInfo.setValue(CmnConst.ECNAME, fseCompanyMessage.getString(CmnConst.ECNAME));
@@ -590,7 +660,7 @@
                fseMessageInfo.setValue(CmnConst.ADDSERIAL, fseCompanyMessage.getString(CmnConst.ADDSERIAL));
                fseMessageInfo.setValue(CmnConst.URL, fseCompanyMessage.getString(CmnConst.URL));
                fseMessageInfo.setValue(CmnConst.TREATY, fseCompanyMessage.getString(CmnConst.TREATY));
            }else {
            } else {
                fseMessageInfo.setValue(CmnConst.USER_ACCOUNT, "zgctjt");
                fseMessageInfo.setValue(CmnConst.SECRETKEY, "zgctjt2019");
                fseMessageInfo.setValue(CmnConst.ECNAME, "自贡市城市建设投资开发集团有限公司");
@@ -600,43 +670,44 @@
                fseMessageInfo.setValue(CmnConst.TREATY, "HTTP");
            }
            fseMessageInfo.setValue("send_mode", "smtp");
            HttpSmsSendUtil.sendMsg(fseMessageInfo);
            fseMessageInfo.setValue(CmnConst.CREATED_BY, 1);
            fseMessageInfo.setValue(CmnConst.CREATED_UTC_DATETIME,new Date());
            fseMessageInfo.setValue(CmnConst.CREATED_UTC_DATETIME, new Date());
            baseDao.add(fseMessageInfo);
        }
    }
    /**
     *     自动发起流程
     * 自动发起流程
     *
     * @param flowCode
     * @param flowParam
     * @param fseService
     * @param fieldAndAlias
     */
    public void autoStartFlow(String warnName,String flowCode, String flowParam, FieldSetEntity fseService, Map<String, String>fieldAndAlias, Integer createdBy) {
        if (flowCode==null) {
            return ;
    public void autoStartFlow(String warnName, String flowCode, String flowParam, FieldSetEntity fseService, Map<String, String> fieldAndAlias, Integer createdBy) {
        if (flowCode == null) {
            return;
        }
        FieldSetEntity fseFlowService=new FieldSetEntity();
        String [] warnAndFlows=flowParam.split(",");
        FieldSetEntity fseFlowService = new FieldSetEntity();
        String[] warnAndFlows = flowParam.split(",");
        for (int i = 0; i < warnAndFlows.length; i++) {
            String [] warnAndFlow=warnAndFlows[i].split("=");
            String warnField=warnAndFlow[0];
            String flowField=warnAndFlow[1];
            String[] warnAndFlow = warnAndFlows[i].split("=");
            String warnField = warnAndFlow[0];
            String flowField = warnAndFlow[1];
            fseFlowService.setTableName(flowField.split("\\.")[0]);
            fseFlowService.setValue(flowField.split("\\.")[1], fseService.getObject(fieldAndAlias.get(warnField.replace("{#", "").replace("#}", ""))));
        }
        baseDao.add(fseFlowService);
        FieldSetEntity fseFLow=new FieldSetEntity();
        FieldSetEntity fseFLow = new FieldSetEntity();
        fseFLow.setTableName(fseFlowService.getTableName());
        fseFLow.setValue("flow_title", warnName);
        fseFLow.setValue("uuid", fseFlowService.getUUID());