package ${package.ServiceImpl};

import ${package.Entity}.${entity};
import ${package.Mapper}.${table.mapperName};
import ${package.Service}.${table.serviceName};
import ${cfg.paging};
import ${cfg.pageParamPath};
import ${cfg.commonPageUtilPath};
import ${cfg.queryVoPath};
import ${superServiceImplClassPackage};

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.beans.factory.annotation.Autowired;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.metadata.OrderItem;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;

import java.io.Serializable;

/**
 * <pre>
 * $!{table.comment} 服务实现类
 * </pre>
 *
 * @author ${author}
 * @since ${date}
 */
@Slf4j
@Service
#if(${kotlin})
open class ${table.serviceImplName} : ${superServiceImplClass}<${table.mapperName}, ${entity}>(), ${table.serviceName} {

}
#else
public class ${table.serviceImplName} extends BaseServiceImpl<${table.mapperName}, ${entity}> implements ${table.serviceName} {

    @Autowired
    private ${table.mapperName} ${cfg.mapperObjectName};
#if(${cfg.generatorStrategy} != 'SIMPLE')
#if(${cfg.generatorStrategy} == 'ALL')

    @Transactional(rollbackFor = Exception.class)
    @Override
    public boolean save${entity}(${entity} ${cfg.entityObjectName}) throws Exception {
        return super.save(${cfg.entityObjectName});
    }

    @Transactional(rollbackFor = Exception.class)
    @Override
    public boolean update${entity}(${entity} ${cfg.entityObjectName}) throws Exception {
        return super.updateById(${cfg.entityObjectName});
    }

    @Transactional(rollbackFor = Exception.class)
    @Override
    public boolean delete${entity}(Long id) throws Exception {
        return super.removeById(id);
    }
#end

    @Override
    public ${entity}QueryVo get${entity}ById(Serializable id) throws Exception {
        return ${cfg.mapperObjectName}.get${entity}ById(id);
    }

    @Override
    public Paging<${entity}QueryVo> get${entity}PageList(${entity}PageParam ${cfg.entityObjectName}PageParam) throws Exception {
        Page page = PageUtil.getPage(${cfg.entityObjectName}PageParam, OrderItem.desc(getLambdaColumn(${entity}::getCreateTime)));
        IPage<${entity}QueryVo> iPage = ${cfg.mapperObjectName}.get${entity}PageList(page, ${cfg.entityObjectName}PageParam);
        return new Paging(iPage);
    }
#end

}
#end