package ${packageName}.service.impl;

import java.util.List;
    #if($table.tree)
    import java.util.ArrayList;
    import com.ruoyi.common.core.domain.Ztree;
    #end
    #foreach ($column in $columns)
        #if($column.javaField == 'createTime' || $column.javaField == 'updateTime')
        import com.ruoyi.common.utils.DateUtils;
            #break
        #end

        #if($column.javaField == 'createBy' || $column.javaField == 'updateBy')
        import com.ruoyi.common.utils.ShiroUtils;
            #break
        #end



    #end
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
    #if($table.sub)
    import java.util.ArrayList;

    import com.ruoyi.common.utils.StringUtils;
    import org.springframework.transaction.annotation.Transactional;
    import ${packageName}.domain.${subClassName};
    #end
import ${packageName}.mapper.${ClassName}Mapper;
import ${packageName}.domain.${ClassName};
import ${packageName}.service.I${ClassName}Service;
import com.ruoyi.common.core.text.Convert;

/**
 * ${functionName}Service业务层处理
 *
 * @author ${author}
 * @date ${datetime}
 */
@Service
public class ${ClassName}ServiceImpl implements I${ClassName}Service {
    @Autowired
    private ${ClassName}Mapper ${className}Mapper;

    /**
     * 查询${functionName}
     *
     * @param ${pkColumn.javaField} ${functionName}主键
     * @return ${functionName}
     */
    @Override
    public ${ClassName} select${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField}) {
        return ${className}Mapper.select${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaField});
    }

    /**
     * 查询${functionName}列表
     *
     * @param ${className} ${functionName}
     * @return ${functionName}
     */
    @Override
    public List<${ClassName}> select${ClassName}List(${ClassName} ${className}) {
        return ${className}Mapper.select${ClassName}List(${className});
    }

    /**
     * 新增${functionName}
     *
     * @param ${className} ${functionName}
     * @return 结果
     */
        #if($table.sub)
        @Transactional
        #end
    @Override
    public int insert${ClassName}(${ClassName} ${className}) {
        #foreach ($column in $columns)#if($column.javaField == 'createTime')
                ${className}.setCreateTime(DateUtils.getNowDate());#end
            #if($column.javaField == 'createBy')
                ${className}.setCreateBy(ShiroUtils.getLoginName());
            #end
        #end
        #if($table.sub)
            int rows = ${className}Mapper.insert${ClassName}(${className});
            insert${subClassName}(${className});
            return rows;
        #else
            return ${className}Mapper.insert${ClassName}(${className});
        #end
    }

    /**
     * 修改${functionName}
     *
     * @param ${className} ${functionName}
     * @return 结果
     */
        #if($table.sub)
        @Transactional
        #end
    @Override
    public int update${ClassName}(${ClassName} ${className}) {
        #foreach ($column in $columns)
            #if($column.javaField == 'updateBy')
                ${className}.setUpdateBy(ShiroUtils.getLoginName());
            #end
            #if($column.javaField == 'updateTime')
                ${className}.setUpdateTime(DateUtils.getNowDate());
            #end
        #end
        #if($table.sub)
                ${className}Mapper.delete${subClassName}By${subTableFkClassName}(${className}.get${pkColumn.capJavaField}());
            insert${subClassName}(${className});
        #end
        return ${className}Mapper.update${ClassName}(${className});
    }

    /**
     * 批量删除${functionName}
     *
     * @param ${pkColumn.javaField}s 需要删除的${functionName}主键
     * @return 结果
     */
        #if($table.sub)
        @Transactional
        #end
    @Override
    public int delete${ClassName}By${pkColumn.capJavaField}s(String ${pkColumn.javaField}s) {
        #if($table.sub)
                ${className}Mapper.delete${subClassName}By${subTableFkClassName}s(Convert.toStrArray(${pkColumn.javaField}s));
        #end
        return ${className}Mapper.delete${ClassName}By${pkColumn.capJavaField}s(Convert.toStrArray(${pkColumn.javaField}s));
    }

    /**
     * 删除${functionName}信息
     *
     * @param ${pkColumn.javaField} ${functionName}主键
     * @return 结果
     */
        #if($table.sub)
        @Transactional
        #end
    @Override
    public int delete${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField}) {
        #if($table.sub)
                ${className}Mapper.delete${subClassName}By${subTableFkClassName}(${pkColumn.javaField});
        #end
        return ${className}Mapper.delete${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaField});
    }
    #if($table.tree)

        /**
         * 查询${functionName}树列表
         *
         * @return 所有${functionName}信息
         */
        @Override
        public List<Ztree> select${ClassName}Tree() {
            List<${ClassName}> ${className}List = ${className}Mapper.select${ClassName}List(new ${ClassName}());
            List<Ztree> ztrees = new ArrayList<Ztree>();
            for (${ClassName} ${className} :${className}List)
            {
                Ztree ztree = new Ztree();
                #if($treeCode.length() > 2 && $treeCode.substring(1,2).matches("[A-Z]"))
                    #set($TreeCode=$treeCode)
                #else
                    #set($TreeCode=$treeCode.substring(0,1).toUpperCase() + ${treeCode.substring(1)})
                #end
                #if($treeParentCode.length() > 2 && $treeParentCode.substring(1,2).matches("[A-Z]"))
                    #set($TreeParentCode=$treeParentCode)
                #else
                    #set($TreeParentCode=$treeParentCode.substring(0,1).toUpperCase() + ${treeParentCode.substring(1)})
                #end
                #if($treeName.length() > 2 && $treeName.substring(1,2).matches("[A-Z]"))
                    #set($TreeName=$treeName)
                #else
                    #set($TreeName=$treeName.substring(0,1).toUpperCase() + ${treeName.substring(1)})
                #end
                ztree.setId(${className}.get${TreeCode}());
                ztree.setpId(${className}.get${TreeParentCode}());
                ztree.setName(${className}.get${TreeName}());
                ztree.setTitle(${className}.get${TreeName}());
                ztrees.add(ztree);
            } return ztrees;
        }
    #end
    #if($table.sub)

        /**
         * 新增${subTable.functionName}信息
         *
         * @param ${className} ${functionName}对象
         */
        public void insert${subClassName}(${ClassName} ${className}) {
            List<${subClassName}> ${subclassName}List = ${className}.get${subClassName}List();
            ${pkColumn.javaType} ${pkColumn.javaField} = ${className}.get${pkColumn.capJavaField}();
            if (StringUtils.isNotNull(${subclassName}List)) {
                List<${subClassName}> list = new ArrayList<${subClassName}>(); for (${subClassName} ${subclassName} :
                    ${subclassName}List)
                {
                    ${subclassName}.set${subTableFkClassName}(${pkColumn.javaField});
                    list.add(${subclassName});
                } if (list.size() > 0) {
                        ${className}Mapper.batch${subClassName}(list);
                }
            }
        }
    #end
}
