<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.bootdo.system.dao.MenuDao">

	<select id="get" resultType="com.bootdo.system.domain.MenuDO">
		select
		`menu_id`,`parent_id`,`name`,`url`,`perms`,`type`,`icon`,`order_num`,`gmt_create`,`gmt_modified`
		from sys_menu where menu_id = #{value}
	</select>

	<select id="list" resultType="com.bootdo.system.domain.MenuDO">
		select
		`menu_id`,`parent_id`,`name`,`url`,`perms`,`type`,`icon`,`order_num`,`gmt_create`,`gmt_modified`
		from sys_menu
		<where>
			<if test="menuId != null and menuId != ''"> and menu_id = #{menuId} </if>
			<if test="parentId != null and parentId != ''"> and parent_id = #{parentId} </if>
			<if test="name != null and name != ''"> and name = #{name} </if>
			<if test="url != null and url != ''"> and url = #{url} </if>
			<if test="perms != null and perms != ''"> and perms = #{perms} </if>
			<if test="type != null and type != ''"> and type = #{type} </if>
			<if test="icon != null and icon != ''"> and icon = #{icon} </if>
			<if test="orderNum != null and orderNum != ''"> and order_num = #{orderNum} </if>
			<if test="gmtCreate != null and gmtCreate != ''"> and gmt_create = #{gmtCreate} </if>
			<if test="gmtModified != null and gmtModified != ''"> and gmt_modified = #{gmtModified} </if>
		</where>
		<choose>
			<when test="sort != null and sort.trim() != ''">
				order by ${sort} ${order}
			</when>
			<otherwise>
				order by menu_id desc
			</otherwise>
		</choose>
		<if test="offset != null and limit != null">
			limit #{offset}, #{limit}
		</if>
	</select>

	<select id="count" resultType="int">
		select count(*) from sys_menu
		<where>
			<if test="menuId != null and menuId != ''"> and menu_id = #{menuId} </if>
			<if test="parentId != null and parentId != ''"> and parent_id = #{parentId} </if>
			<if test="name != null and name != ''"> and name = #{name} </if>
			<if test="url != null and url != ''"> and url = #{url} </if>
			<if test="perms != null and perms != ''"> and perms = #{perms} </if>
			<if test="type != null and type != ''"> and type = #{type} </if>
			<if test="icon != null and icon != ''"> and icon = #{icon} </if>
			<if test="orderNum != null and orderNum != ''"> and order_num = #{orderNum} </if>
			<if test="gmtCreate != null and gmtCreate != ''"> and gmt_create = #{gmtCreate} </if>
			<if test="gmtModified != null and gmtModified != ''"> and gmt_modified = #{gmtModified} </if>
		</where>
	</select>

	<insert id="save" parameterType="com.bootdo.system.domain.MenuDO"
		useGeneratedKeys="true" keyProperty="menuId">
		insert into sys_menu
		(
		`parent_id`,
		`name`,
		`url`,
		`perms`,
		`type`,
		`icon`,
		`order_num`,
		`gmt_create`,
		`gmt_modified`
		)
		values
		(
		#{parentId},
		#{name},
		#{url},
		#{perms},
		#{type},
		#{icon},
		#{orderNum},
		#{gmtCreate},
		#{gmtModified}
		)
	</insert>

	<update id="update" parameterType="com.bootdo.system.domain.MenuDO">
		update sys_menu
		<set>
			<if test="parentId != null">`parent_id` = #{parentId}, </if>
			<if test="name != null">`name` = #{name}, </if>
			<if test="url != null">`url` = #{url}, </if>
			<if test="perms != null">`perms` = #{perms}, </if>
			<if test="type != null">`type` = #{type}, </if>
			<if test="icon != null">`icon` = #{icon}, </if>
			<if test="orderNum != null">`order_num` = #{orderNum}, </if>
			<if test="gmtCreate != null">`gmt_create` = #{gmtCreate}, </if>
			<if test="gmtModified != null">`gmt_modified` = #{gmtModified}</if>
		</set>
		where menu_id = #{menuId}
	</update>

	<delete id="remove">
		delete from sys_menu where menu_id = #{value}
	</delete>

	<delete id="batchRemove">
		delete from sys_menu where menu_id in
		<foreach item="menuId" collection="array" open="(" separator=","
			close=")">
			#{menuId}
		</foreach>
	</delete>

	<select id="listMenuByUserId" resultType="com.bootdo.system.domain.MenuDO">
		select distinct
		m.menu_id , parent_id, name, url,
		perms,`type`,icon,order_num,gmt_create, gmt_modified
		from sys_menu m
		left
		join sys_role_menu rm on m.menu_id = rm.menu_id left join
		sys_user_role ur
		on rm.role_id =ur.role_id where ur.user_id = #{id}
		and
		m.type in(0,1)
		<if test="sysFlag != null and sysFlag != ''"> and m.sys_flag = #{sysFlag} </if>
		order by
		m.order_num asc
	</select>

	<select id="listUserPerms" resultType="string">
		select distinct m.perms
		from sys_menu m left join
		sys_role_menu rm on m.menu_id = rm.menu_id
		left join sys_user_role ur
		on rm.role_id = ur.role_id where ur.user_id
		= #{id}
	</select>
</mapper>