package com.hzya.frame.sysnew.messageTemplate.service.impl;

import com.alibaba.fastjson.JSONObject;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.hzya.frame.execsql.service.IExecSqlService;
import com.hzya.frame.sysnew.messageTemplate.entity.SysMessageTemplateEntity;
import com.hzya.frame.sysnew.messageTemplate.dao.ISysMessageTemplateDao;
import com.hzya.frame.sysnew.messageTemplate.service.ISysMessageTemplateService;
import com.hzya.frame.sysnew.person.dao.ISysPersonDao;
import com.hzya.frame.sysnew.user.entity.SysUserEntity;
import com.hzya.frame.sysnew.warningConfig.dao.ISysWarningConfigDao;
import com.hzya.frame.sysnew.warningConfig.entity.SysWarningConfigEntity;
import com.hzya.frame.web.entity.BaseResult;
import com.hzya.frame.web.entity.JsonResultEntity;
import org.springframework.stereotype.Service;
import org.springframework.beans.factory.annotation.Autowired;

import javax.annotation.Resource;

import com.hzya.frame.basedao.service.impl.BaseService;

import java.sql.*;
import java.util.HashMap;
import java.util.List;

/**
 * (SysMessageTemplate)表服务实现类
 *
 * @author makejava
 * @since 2024-08-30 14:21:15
 */
@Service(value = "sysMessageTemplateService")
public class SysMessageTemplateServiceImpl extends BaseService<SysMessageTemplateEntity, String> implements ISysMessageTemplateService {

    private ISysMessageTemplateDao sysMessageTemplateDao;

    @Resource
    private ISysWarningConfigDao sysWarningConfigDao;

    @Resource
    public IExecSqlService execSqlService;

    @Autowired
    public void setSysMessageTemplateDao(ISysMessageTemplateDao dao) {
        this.sysMessageTemplateDao = dao;
        this.dao = dao;
    }

    @Override
    public JsonResultEntity queryEntityPage(JSONObject jsonObject) {
        SysMessageTemplateEntity entity = getData("jsonStr", jsonObject, SysMessageTemplateEntity.class);
        //判断分页
        if (entity == null || entity.getPageNum() == null || entity.getPageSize() == null) {
            return BaseResult.getFailureMessageEntity("分页查询参数不存在");
        }
        PageHelper.startPage(entity.getPageNum(), entity.getPageSize());
        List<SysMessageTemplateEntity> list = sysMessageTemplateDao.queryByLike(entity);
        PageInfo<SysMessageTemplateEntity> pageInfo = new PageInfo(list);
        return BaseResult.getSuccessMessageEntity("查询数据成功", pageInfo);
    }

    @Override
    public JsonResultEntity queryEntity(JSONObject jsonObject) {
        SysMessageTemplateEntity entity = getData("jsonStr", jsonObject, SysMessageTemplateEntity.class);
        if (entity == null) {
            entity = new SysMessageTemplateEntity();
        }
        List<SysMessageTemplateEntity> list = sysMessageTemplateDao.queryByLike(entity);
        return BaseResult.getSuccessMessageEntity("查询数据成功", list);
    }

    @Override
    public JsonResultEntity getEntity(JSONObject jsonObject) {
        SysMessageTemplateEntity entity = getData("jsonStr", jsonObject, SysMessageTemplateEntity.class);
        if (entity == null) {
            return BaseResult.getFailureMessageEntity("参数不允许为空");
        }
        if (entity.getId() == null || "".equals(entity.getId())) {
            return BaseResult.getFailureMessageEntity("系统错误");
        }
        entity = sysMessageTemplateDao.get(entity.getId());
        if (entity == null) {
            return BaseResult.getFailureMessageEntity("获取消息模版失败");
        }
        return BaseResult.getSuccessMessageEntity("获取消息模版成功", entity);
    }

    @Override
    public JsonResultEntity saveEntity(JSONObject jsonObject) {
        SysMessageTemplateEntity entity = getData("jsonStr", jsonObject, SysMessageTemplateEntity.class);
        if (entity == null) {
            return BaseResult.getFailureMessageEntity("参数不允许为空");
        }
        if (entity.getTemplateType() == null || "".equals(entity.getTemplateType())) {
            return BaseResult.getFailureMessageEntity("模版类型不允许为空");
        }
        if (entity.getTemplateName() == null || "".equals(entity.getTemplateName())) {
            return BaseResult.getFailureMessageEntity("模版名称不允许为空");
        }
        if (entity.getMessageContents() == null || "".equals(entity.getMessageContents())) {
            return BaseResult.getFailureMessageEntity("消息内容不允许为空");
        }
        if (entity.getDataSource() == null || "".equals(entity.getDataSource())) {
            return BaseResult.getFailureMessageEntity("数据源不允许为空");
        }
        entity.setCreate();
        sysMessageTemplateDao.save(entity);
        return BaseResult.getSuccessMessageEntity("保存消息模版成功", entity);
    }

    @Override
    public JsonResultEntity updateEntity(JSONObject jsonObject) {
        SysMessageTemplateEntity entity = getData("jsonStr", jsonObject, SysMessageTemplateEntity.class);
        if (entity == null) {
            return BaseResult.getFailureMessageEntity("参数不允许为空");
        }
        if (entity.getId() == null || "".equals(entity.getId())) {
            return BaseResult.getFailureMessageEntity("系统错误");
        }
        if (entity.getTemplateType() == null || "".equals(entity.getTemplateType())) {
            return BaseResult.getFailureMessageEntity("模版类型不允许为空");
        }
        if (entity.getTemplateName() == null || "".equals(entity.getTemplateName())) {
            return BaseResult.getFailureMessageEntity("模版名称不允许为空");
        }
        if (entity.getMessageContents() == null || "".equals(entity.getMessageContents())) {
            return BaseResult.getFailureMessageEntity("消息内容不允许为空");
        }
        if (entity.getDataSource() == null || "".equals(entity.getDataSource())) {
            return BaseResult.getFailureMessageEntity("数据源不允许为空");
        }
        entity.setUpdate();
        sysMessageTemplateDao.update(entity);
        return BaseResult.getSuccessMessageEntity("修改消息模版成功", entity);
    }

    @Override
    public JsonResultEntity deleteEntity(JSONObject jsonObject) {
        SysMessageTemplateEntity entity = getData("jsonStr", jsonObject, SysMessageTemplateEntity.class);
        if (entity == null) {
            return BaseResult.getFailureMessageEntity("参数不允许为空");
        }
        if (entity.getId() == null || "".equals(entity.getId())) {
            return BaseResult.getFailureMessageEntity("系统错误");
        }
        //判断这个模版有没有被使用过，使用过就不能删除
        //将模版id去，预警配置表里查一下，如果有匹配的数据，代表有人正在使用，不能删除
        SysWarningConfigEntity warningConfigEntity = new SysWarningConfigEntity();
        warningConfigEntity.setMessageTemplateId(entity.getId());
        int count = sysWarningConfigDao.getCount(warningConfigEntity);
        if (count > 0) {
            return BaseResult.getFailureMessageEntity("该模版已被使用，不能删除");
        }
        entity.setUpdate();
        sysMessageTemplateDao.logicRemove(entity);
        return BaseResult.getSuccessMessageEntity("删除消息模版成功");
    }

    @Override
    public JsonResultEntity enableDisableEntity(JSONObject jsonObject) {
        SysMessageTemplateEntity entity = getData("jsonStr", jsonObject, SysMessageTemplateEntity.class);
        if (entity == null) {
            return BaseResult.getFailureMessageEntity("参数不允许为空");
        }
        if (entity.getId() == null || "".equals(entity.getId())) {
            return BaseResult.getFailureMessageEntity("系统错误");
        }
        if (entity.getState() == null || "".equals(entity.getState())) {
            return BaseResult.getFailureMessageEntity("系统错误");
        }
        //0停用，1启用
        if ("0".equals(entity.getState())) {
            entity.setUpdate();
            sysMessageTemplateDao.update(entity);
            //同步停用到预警配置表
            SysWarningConfigEntity warningConfigEntity = new SysWarningConfigEntity();
            warningConfigEntity.setMessageTemplateId(entity.getId());
            warningConfigEntity.setStatus("1");
            List<SysWarningConfigEntity> warningConfigList = sysWarningConfigDao.queryByLike(warningConfigEntity);
            for (SysWarningConfigEntity warningConfig : warningConfigList) {
                warningConfig.setStatus("0");
                warningConfig.setUpdate();
                sysWarningConfigDao.update(warningConfig);
            }
            return BaseResult.getSuccessMessageEntity("停用模版成功");
        } else {
            entity.setUpdate();
            sysMessageTemplateDao.update(entity);
            return BaseResult.getSuccessMessageEntity("启用模版成功");
        }
    }

    @Override
    public JsonResultEntity checkSql(JSONObject jsonObject) throws Exception {
        try {
            String sql = JSONObject.parseObject(jsonObject.getString("jsonStr")).getString("sql");
            List<HashMap<String, Object>> result = execSqlService.execSelectSql(sql, "master");
            return BaseResult.getSuccessMessageEntity("SQL检查成功", result);
        } catch (Exception e) {
            return BaseResult.getFailureMessageEntity("SQL检查失败，原因：" + e.getMessage());
        }
    }

    @Override
    public JsonResultEntity spliceMessage(JSONObject jsonObject) {
        return BaseResult.getSuccessMessageEntity("消息拼接成功");
    }
}
