package com.zt.plat.module.qms.common.data.dal.mapper;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.zt.plat.framework.common.pojo.PageResult;
import com.zt.plat.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.zt.plat.framework.mybatis.core.mapper.BaseMapperX;
import com.zt.plat.module.qms.common.data.controller.vo.DataTemplatePageReqVO;
import com.zt.plat.module.qms.common.data.dal.dataobject.DataTemplateDO;
import com.zt.plat.module.qms.core.constant.DataTypeConstant;

import org.apache.ibatis.annotations.Mapper;

import java.util.Arrays;
import java.util.List;

/**
 * 表单设计器模板 Mapper
 *
 * @author 后台管理
 */
@Mapper
public interface DataTemplateMapper extends BaseMapperX<DataTemplateDO> {

    default PageResult<DataTemplateDO> selectPage(DataTemplatePageReqVO reqVO) {
        return selectPage(reqVO, new LambdaQueryWrapperX<DataTemplateDO>()
                .eqIfPresent(DataTemplateDO::getParentId, reqVO.getParentId())
                .eqIfPresent(DataTemplateDO::getMainId, reqVO.getMainId())
                .eqIfPresent(DataTemplateDO::getIdPath, reqVO.getIdPath())
                .likeIfPresent(DataTemplateDO::getName, reqVO.getName())
                .eqIfPresent(DataTemplateDO::getNodeType, reqVO.getNodeType())
                .eqIfPresent(DataTemplateDO::getDataKey, reqVO.getDataKey())
                .eqIfPresent(DataTemplateDO::getVersion, reqVO.getVersion())
                .eqIfPresent(DataTemplateDO::getCurrentFlag, reqVO.getCurrentFlag())
                .eqIfPresent(DataTemplateDO::getCancelFlag, reqVO.getCancelFlag())
                .eqIfPresent(DataTemplateDO::getSortNo, reqVO.getSortNo())
                .eqIfPresent(DataTemplateDO::getCustomConfig, reqVO.getCustomConfig())
                .eqIfPresent(DataTemplateDO::getFormContent, reqVO.getFormContent())
                .eqIfPresent(DataTemplateDO::getMobileContent, reqVO.getMobileContent())
                .eqIfPresent(DataTemplateDO::getSystemDepartmentCode, reqVO.getSystemDepartmentCode())
                .eqIfPresent(DataTemplateDO::getRemark, reqVO.getRemark())
                .betweenIfPresent(DataTemplateDO::getCreateTime, reqVO.getCreateTime())
                .orderByDesc(DataTemplateDO::getId)
                .select(Arrays.asList(
                        DataTemplateDO::getId,
                        DataTemplateDO::getParentId,
                        DataTemplateDO::getMainId,
                        DataTemplateDO::getIdPath,
                        DataTemplateDO::getName,
                        DataTemplateDO::getNodeType,
                        DataTemplateDO::getDataKey,
                        DataTemplateDO::getVersion,
                        DataTemplateDO::getCurrentFlag,
                        DataTemplateDO::getCancelFlag,
                        DataTemplateDO::getSortNo,
                        DataTemplateDO::getCustomConfig,
//                        DataTemplateDO::getFormContent,
//                        DataTemplateDO::getMobileContent,
                        DataTemplateDO::getSystemDepartmentCode,
                        DataTemplateDO::getRemark,
                        DataTemplateDO::getCreator,
                        DataTemplateDO::getCreateTime,
                        DataTemplateDO::getUpdater,
                        DataTemplateDO::getUpdateTime,
                        DataTemplateDO::getCompanyId,
                        DataTemplateDO::getCompanyName,
                        DataTemplateDO::getDeptId,
                        DataTemplateDO::getDeptName,
                        DataTemplateDO::getPostId,
                        DataTemplateDO::getCreatorName,
                        DataTemplateDO::getUpdaterName
                ))
        );
    }
    
    
    default DataTemplateDO selectLastByKey(String dataKey) {
    	LambdaQueryWrapper<DataTemplateDO> query = new LambdaQueryWrapper<>();
        query.eq(DataTemplateDO::getDataKey, dataKey);
        query.eq(DataTemplateDO::getCancelFlag, "0");
        query.eq(DataTemplateDO::getCurrentFlag, "1");
        query.eq(DataTemplateDO::getNodeType, DataTypeConstant.DATA_TYPE_DATA);
        query.orderByDesc(DataTemplateDO::getUpdateTime);
        List<DataTemplateDO> list = this.selectList(query);
        if (list != null && list.size() > 0) {
            return list.get(0);
		}
        return null;
    }

}