zm
2024-11-12 2e8250c824a5ed0a0720c50fc3421257ee45073b
src/main/java/com/product/administration/service/EarlyWarningManagerService.java
@@ -27,6 +27,7 @@
import com.product.org.admin.service.StaffManagerService;
import com.product.quartz.service.impl.SysJobService;
import com.product.util.BaseUtil;
import com.product.util.SystemParamReplace;
import org.apache.commons.codec.binary.Base64;
import org.quartz.SchedulerException;
import org.springframework.beans.factory.annotation.Autowired;
@@ -170,32 +171,37 @@
     */
    @Transactional
    public String addWarning(FieldSetEntity fse) throws BaseException, SchedulerException, TaskException {
        FieldSetEntity fseJob = new FieldSetEntity();
        fseJob.setTableName("product_sys_timed_task");
        fseJob.setValue("concurrent", 1);
        fseJob.setValue("job_name", fse.getString("config_name"));
        fseJob.setValue("cron_expression", fse.getString("execution_frequency"));
        fseJob.setValue("invoke_target", "warnTask.triggerSingleWarningTask('null')");
        fseJob.setValue("job_group", "system");
        fseJob.setValue("misfire_policy", 2);
        fseJob.setValue("remark", "");
        if (fse.getInteger("config_status") == 0) {
            fseJob.setValue("status", 0);
        } else {
            fseJob.setValue("status", 1);
        }
        fseJob.setValue("is_conceal", 1);
        sysJobService.insertJob(fseJob);
        fse.setValue("time_task_uuid", fseJob.getUUID());
        fse.setValue(CmnConst.CREATED_BY, SpringMVCContextHolder.getCurrentUser().getUser_id());
        fse.setValue(CmnConst.CREATED_UTC_DATETIME, new Date());
        String uuid = baseDao.add(fse);
        if (fse.getString("type").equals("0")){
            FieldSetEntity fseJob = new FieldSetEntity();
            fseJob.setTableName("product_sys_timed_task");
            fseJob.setValue("concurrent", 1);
            fseJob.setValue("job_name", fse.getString("config_name"));
            fseJob.setValue("cron_expression", fse.getString("execution_frequency"));
            fseJob.setValue("invoke_target", "warnTask.triggerSingleWarningTask('null')");
            fseJob.setValue("job_group", "system");
            fseJob.setValue("misfire_policy", 2);
            fseJob.setValue("remark", "");
            if (fse.getInteger("config_status") == 0) {
                fseJob.setValue("status", 0);
            } else {
                fseJob.setValue("status", 1);
            }
            fseJob.setValue("is_conceal", 1);
            sysJobService.insertJob(fseJob);
        fseJob.setValue("invoke_target", "warnTask.triggerSingleWarningTask('" + fse.getUUID() + "')");
        sysJobService.updateJob(fseJob);
            fse.setValue("time_task_uuid", fseJob.getUUID());
        return uuid;
            String uuid = baseDao.add(fse);
            fseJob.setValue("invoke_target", "warnTask.triggerSingleWarningTask('" + fse.getUUID() + "')");
            sysJobService.updateJob(fseJob);
            return uuid;
        }else {
            return  baseDao.add(fse);
        }
    }
    /**
@@ -209,26 +215,27 @@
     */
    @Transactional
    public boolean updateWarning(FieldSetEntity fse) throws BaseException, SchedulerException, TaskException {
        FieldSetEntity fseJob = new FieldSetEntity();
        fseJob.setTableName("product_sys_timed_task");
        fseJob.setValue("concurrent", 1);
        fseJob.setValue("job_name", fse.getString("config_name"));
        fseJob.setValue("cron_expression", fse.getString("execution_frequency"));
        fseJob.setValue("invoke_target", "warnTask.triggerSingleWarningTask('" + fse.getUUID() + "')");
        fseJob.setValue("job_group", "system");
        fseJob.setValue("misfire_policy", 2);
        fseJob.setValue("remark", "");
        if (fse.getInteger("config_status") == 0) {
            fseJob.setValue("status", 0);
            sysJobService.pauseJob(fse.getString("time_task_uuid"));
        } else {
            fseJob.setValue("status", 1);
            sysJobService.resumeJob(fse.getString("time_task_uuid"));
        if (fse.getString("type").equals("0")) {
            FieldSetEntity fseJob = new FieldSetEntity();
            fseJob.setTableName("product_sys_timed_task");
            fseJob.setValue("concurrent", 1);
            fseJob.setValue("job_name", fse.getString("config_name"));
            fseJob.setValue("cron_expression", fse.getString("execution_frequency"));
            fseJob.setValue("invoke_target", "warnTask.triggerSingleWarningTask('" + fse.getUUID() + "')");
            fseJob.setValue("job_group", "system");
            fseJob.setValue("misfire_policy", 2);
            fseJob.setValue("remark", "");
            if (fse.getInteger("config_status") == 0) {
                fseJob.setValue("status", 0);
                sysJobService.pauseJob(fse.getString("time_task_uuid"));
            } else {
                fseJob.setValue("status", 1);
                sysJobService.resumeJob(fse.getString("time_task_uuid"));
            }
            fseJob.setValue("is_conceal", 1);
            fseJob.setValue("uuid", fse.getString("time_task_uuid"));
            sysJobService.updateJob(fseJob);
        }
        fseJob.setValue("is_conceal", 1);
        fseJob.setValue("uuid", fse.getString("time_task_uuid"));
        sysJobService.updateJob(fseJob);
        fse.setValue(CmnConst.UPDATED_BY, SpringMVCContextHolder.getCurrentUser().getUser_id());
        fse.setValue(CmnConst.UPDATED_UTC_DATETIME, new Date());
        return baseDao.update(fse);
@@ -299,21 +306,23 @@
     * @return
     */
    public boolean conditionCheck(String mainTableName, String warnCondition) {
        Map<String, String> tableNameAndAlias = new HashMap<>();    //相关表名-->表别名,tableName-->tableName1
        Map<String, String> fieldAndAlias = new HashMap<>();        //相关字段-->字段别名,tableName.fieldName-->tableName1fieldName
        Map<String, String> fieldReference = new HashMap<>();    //组合相关字段的参照,tableName1fieldName-->referenceName
        StringBuilder concatField = new StringBuilder();        //组合相关字段,tableName1.fieldName tableName1fieldName
        Map<String, String> tableNameAndAlias = new HashMap<>();//相关表名-->表别名,tableName-->tableName1
        Map<String, String> fieldAndAlias = new HashMap<>();   //相关字段-->字段别名,tableName.fieldName-->tableName1fieldName
        Map<String, String> fieldReference = new HashMap<>();   //组合相关字段的参照,tableName1fieldName-->referenceName
        StringBuilder concatField = new StringBuilder();      //组合相关字段,tableName1.fieldName tableName1fieldName
        earlyWarningServer.parseWarningContent(warnCondition, concatField, tableNameAndAlias, fieldAndAlias, fieldReference);
        // 替换系统参数
        warnCondition = SystemParamReplace.systemParamsReplace(warnCondition);
        //生成主子表关联SQL
        String relationSQL = earlyWarningServer.createTableRelation(tableNameAndAlias, mainTableName);
        StringBuilder serviceSQL = new StringBuilder();
        serviceSQL.append(" SELECT ");
        serviceSQL.append(concatField.subSequence(1, concatField.length()));
        serviceSQL.append(" FROM ");
        serviceSQL.append("\nSELECT \n");
        serviceSQL.append(StringUtils.isEmpty(concatField) ? "*" : concatField.subSequence(1, concatField.length()));
        serviceSQL.append("\nFROM \n");
        serviceSQL.append(relationSQL);
        serviceSQL.append(" WHERE ");
        serviceSQL.append("\nWHERE \n");
        serviceSQL.append(earlyWarningServer.parseWarnCondition(warnCondition, tableNameAndAlias));
        try {
            baseDao.listTable(serviceSQL.toString(), new Object[]{});
@@ -492,4 +501,39 @@
        }
        return dte;
    }
    /**
     * 转发
     * @param fse
     */
    @Override
    public void transmit(FieldSetEntity fse) {
        String uuid = fse.getUUID();
        String messageAccepter = fse.getString("user");
        FieldSetEntity warnMsgFse = baseDao.getFieldSetEntity(CmnConst.PRODUCT_SYS_EARLY_WARNING_INFO, uuid, false);
        String preReceiver = warnMsgFse.getString(CmnConst.RECEIVER);
        Set<String> preReceiverSet = Sets.newHashSet(preReceiver.split(","));
        if (StringUtils.isEmpty(messageAccepter)) {
            throw new BaseException(SystemCode.WARN_TRANSMIT_USER_IS_NULL);
        }
        Set<String> transmitUserSet = Sets.newHashSet(messageAccepter.split(","));
        transmitUserSet.forEach(transmitUser -> {
            if (preReceiverSet.contains(transmitUser)) {
                FieldSetEntity transmitUserFse = baseDao.getFieldSetByFilter(CmnConst.PRODUCT_SYS_USERS, "user_id=?", new Object[]{transmitUser}, false);
                throw new BaseException(SystemCode.WARN_TRANSMIT_USER_REPEAT.getValue(), String.format("%s:%s", SystemCode.WARN_TRANSMIT_USER_REPEAT.getText(), transmitUserFse.getString(CmnConst.USER_NAME)));
            }
        });
        // 更新预警信息表
        warnMsgFse.setValue(CmnConst.RECEIVER, preReceiver + "," + messageAccepter);
        baseDao.saveFieldSetEntity(warnMsgFse);
        // 发送消息给转发人
        SystemUser curUser = SpringMVCContextHolder.getCurrentUser();
        FieldSetEntity msgFse = baseDao.getFieldSetByFilter(CmnConst.PRODUCT_SYS_MESSAGE, "source_table=? and source_uuid=?", new Object[]{CmnConst.PRODUCT_SYS_EARLY_WARNING_INFO, uuid}, false);
        String title = String.format("%s向您转发了预警消息《%s》", curUser.getUser_name(), msgFse.getString(CmnConst.TITLE));
        String content = msgFse.getString("content");
        WebsocketMesssageServiceThread.getInstance().appendMessage(messageAccepter, content, title, curUser.getUser_id(),
                "31", CmnConst.BUTTON_URL_WARN_MESSAGE_INFO + "?uuid=" + fse.getUUID(),
                CmnConst.PRODUCT_SYS_EARLY_WARNING_INFO, fse.getUUID(), curUser.getUser_id(), 0, 0, null);
    }
}