<?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.goafanti.common.dao.AdminMapper">
  <resultMap id="BaseResultMap" type="com.goafanti.common.model.Admin">
    <id column="id" jdbcType="VARCHAR" property="id" />
    <result column="mobile" jdbcType="VARCHAR" property="mobile" />
    <result column="name" jdbcType="VARCHAR" property="name" />
    <result column="password" jdbcType="VARCHAR" property="password" />
    <result column="email" jdbcType="VARCHAR" property="email" />
    <result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
    <result column="number" jdbcType="INTEGER" property="number" />
    <result column="province" jdbcType="VARCHAR" property="province" />
    <result column="position" jdbcType="VARCHAR" property="position" />
    <result column="superior_id" jdbcType="VARCHAR" property="superiorId" />
    <result column="city" jdbcType="VARCHAR" property="city" />
    <result column="department_id" jdbcType="VARCHAR" property="departmentId" />
    <result column="status" jdbcType="VARCHAR" property="status" />
    <result column="user_no" jdbcType="VARCHAR" property="userNo" />
    <result column="duty" jdbcType="VARCHAR" property="duty" />
    <result column="district" jdbcType="VARCHAR" property="district" />
    <result column="head_portrait_url" jdbcType="VARCHAR" property="headPortraitUrl" />
    <result column="contact_mobile" jdbcType="VARCHAR" property="contactMobile" />
    <result column="last_login_time" jdbcType="TIMESTAMP" property="lastLoginTime" />
    <result column="open_id" jdbcType="VARCHAR" property="openId" />
    <result column="type" jdbcType="INTEGER" property="type" />
    <result column="reviewer" jdbcType="VARCHAR" property="reviewer" />
    <result column="amb_id" jdbcType="VARCHAR" property="ambId" />
    <result column="amb_role" jdbcType="VARCHAR" property="ambRole" />
    <result column="amb_manage" jdbcType="INTEGER" property="ambManage" />
    <result column="manager_id" jdbcType="VARCHAR" property="managerId" />
    <result column="senior_staff" jdbcType="INTEGER" property="seniorStaff" />
    <result column="public_purview" jdbcType="INTEGER" property="publicPurview" />
    <result column="expense_open_id" jdbcType="VARCHAR" property="expenseOpenId" />
  </resultMap>
  <sql id="Base_Column_List">
    id, mobile, `name`, `password`, email, create_time, `number`, province, `position`,
    superior_id, city, department_id, `status`, user_no, duty, district, head_portrait_url,
    contact_mobile, last_login_time, open_id, `type`, reviewer, amb_id, amb_role, amb_manage,
    manager_id, senior_staff, public_purview, expense_open_id
  </sql>
  <select id="selectByPrimaryKey" parameterType="java.lang.String" resultMap="BaseResultMap">
    select
    <include refid="Base_Column_List" />
    from admin
    where id = #{id,jdbcType=VARCHAR}
  </select>
  <delete id="deleteByPrimaryKey" parameterType="java.lang.String">
    delete from admin
    where id = #{id,jdbcType=VARCHAR}
  </delete>
  <insert id="insert" parameterType="com.goafanti.common.model.Admin">
    insert into admin (id, mobile, `name`,
      `password`, email, create_time,
      `number`, province, `position`,
      superior_id, city, department_id,
      `status`, user_no, duty,
      district, head_portrait_url, contact_mobile,
      last_login_time, open_id, `type`,
      reviewer, amb_id, amb_role,
      amb_manage, manager_id, senior_staff,
      public_purview, expense_open_id)
    values (#{id,jdbcType=VARCHAR}, #{mobile,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR},
      #{password,jdbcType=VARCHAR}, #{email,jdbcType=VARCHAR}, #{createTime,jdbcType=TIMESTAMP},
      #{number,jdbcType=INTEGER}, #{province,jdbcType=VARCHAR}, #{position,jdbcType=VARCHAR},
      #{superiorId,jdbcType=VARCHAR}, #{city,jdbcType=VARCHAR}, #{departmentId,jdbcType=VARCHAR},
      #{status,jdbcType=VARCHAR}, #{userNo,jdbcType=VARCHAR}, #{duty,jdbcType=VARCHAR},
      #{district,jdbcType=VARCHAR}, #{headPortraitUrl,jdbcType=VARCHAR}, #{contactMobile,jdbcType=VARCHAR},
      #{lastLoginTime,jdbcType=TIMESTAMP}, #{openId,jdbcType=VARCHAR}, #{type,jdbcType=INTEGER},
      #{reviewer,jdbcType=VARCHAR}, #{ambId,jdbcType=VARCHAR}, #{ambRole,jdbcType=VARCHAR},
      #{ambManage,jdbcType=INTEGER}, #{managerId,jdbcType=VARCHAR}, #{seniorStaff,jdbcType=INTEGER},
      #{publicPurview,jdbcType=INTEGER}, #{expenseOpenId,jdbcType=VARCHAR})
  </insert>
  <insert id="insertSelective" parameterType="com.goafanti.common.model.Admin">
    insert into admin
    <trim prefix="(" suffix=")" suffixOverrides=",">
      <if test="id != null">
        id,
      </if>
      <if test="mobile != null">
        mobile,
      </if>
      <if test="name != null">
        `name`,
      </if>
      <if test="password != null">
        `password`,
      </if>
      <if test="email != null">
        email,
      </if>
      <if test="createTime != null">
        create_time,
      </if>
      <if test="number != null">
        `number`,
      </if>
      <if test="province != null">
        province,
      </if>
      <if test="position != null">
        `position`,
      </if>
      <if test="superiorId != null">
        superior_id,
      </if>
      <if test="city != null">
        city,
      </if>
      <if test="departmentId != null">
        department_id,
      </if>
      <if test="status != null">
        `status`,
      </if>
      <if test="userNo != null">
        user_no,
      </if>
      <if test="duty != null">
        duty,
      </if>
      <if test="district != null">
        district,
      </if>
      <if test="headPortraitUrl != null">
        head_portrait_url,
      </if>
      <if test="contactMobile != null">
        contact_mobile,
      </if>
      <if test="lastLoginTime != null">
        last_login_time,
      </if>
      <if test="openId != null">
        open_id,
      </if>
      <if test="type != null">
        `type`,
      </if>
      <if test="reviewer != null">
        reviewer,
      </if>
      <if test="ambId != null">
        amb_id,
      </if>
      <if test="ambRole != null">
        amb_role,
      </if>
      <if test="ambManage != null">
        amb_manage,
      </if>
      <if test="managerId != null">
        manager_id,
      </if>
      <if test="seniorStaff != null">
        senior_staff,
      </if>
      <if test="publicPurview != null">
        public_purview,
      </if>
      <if test="expenseOpenId != null">
        expense_open_id,
      </if>
    </trim>
    <trim prefix="values (" suffix=")" suffixOverrides=",">
      <if test="id != null">
        #{id,jdbcType=VARCHAR},
      </if>
      <if test="mobile != null">
        #{mobile,jdbcType=VARCHAR},
      </if>
      <if test="name != null">
        #{name,jdbcType=VARCHAR},
      </if>
      <if test="password != null">
        #{password,jdbcType=VARCHAR},
      </if>
      <if test="email != null">
        #{email,jdbcType=VARCHAR},
      </if>
      <if test="createTime != null">
        #{createTime,jdbcType=TIMESTAMP},
      </if>
      <if test="number != null">
        #{number,jdbcType=INTEGER},
      </if>
      <if test="province != null">
        #{province,jdbcType=VARCHAR},
      </if>
      <if test="position != null">
        #{position,jdbcType=VARCHAR},
      </if>
      <if test="superiorId != null">
        #{superiorId,jdbcType=VARCHAR},
      </if>
      <if test="city != null">
        #{city,jdbcType=VARCHAR},
      </if>
      <if test="departmentId != null">
        #{departmentId,jdbcType=VARCHAR},
      </if>
      <if test="status != null">
        #{status,jdbcType=VARCHAR},
      </if>
      <if test="userNo != null">
        #{userNo,jdbcType=VARCHAR},
      </if>
      <if test="duty != null">
        #{duty,jdbcType=VARCHAR},
      </if>
      <if test="district != null">
        #{district,jdbcType=VARCHAR},
      </if>
      <if test="headPortraitUrl != null">
        #{headPortraitUrl,jdbcType=VARCHAR},
      </if>
      <if test="contactMobile != null">
        #{contactMobile,jdbcType=VARCHAR},
      </if>
      <if test="lastLoginTime != null">
        #{lastLoginTime,jdbcType=TIMESTAMP},
      </if>
      <if test="openId != null">
        #{openId,jdbcType=VARCHAR},
      </if>
      <if test="type != null">
        #{type,jdbcType=INTEGER},
      </if>
      <if test="reviewer != null">
        #{reviewer,jdbcType=VARCHAR},
      </if>
      <if test="ambId != null">
        #{ambId,jdbcType=VARCHAR},
      </if>
      <if test="ambRole != null">
        #{ambRole,jdbcType=VARCHAR},
      </if>
      <if test="ambManage != null">
        #{ambManage,jdbcType=INTEGER},
      </if>
      <if test="managerId != null">
        #{managerId,jdbcType=VARCHAR},
      </if>
      <if test="seniorStaff != null">
        #{seniorStaff,jdbcType=INTEGER},
      </if>
      <if test="publicPurview != null">
        #{publicPurview,jdbcType=INTEGER},
      </if>
      <if test="expenseOpenId != null">
        #{expenseOpenId,jdbcType=VARCHAR},
      </if>
    </trim>
  </insert>
  <update id="updateByPrimaryKeySelective" parameterType="com.goafanti.common.model.Admin">
    update admin
    <set>
      <if test="mobile != null">
        mobile = #{mobile,jdbcType=VARCHAR},
      </if>
      <if test="name != null">
        `name` = #{name,jdbcType=VARCHAR},
      </if>
      <if test="password != null">
        `password` = #{password,jdbcType=VARCHAR},
      </if>
      <if test="email != null">
        email = #{email,jdbcType=VARCHAR},
      </if>
      <if test="createTime != null">
        create_time = #{createTime,jdbcType=TIMESTAMP},
      </if>
      <if test="number != null">
        `number` = #{number,jdbcType=INTEGER},
      </if>
      <if test="province != null">
        province = #{province,jdbcType=VARCHAR},
      </if>
      <if test="position != null">
        `position` = #{position,jdbcType=VARCHAR},
      </if>
      <if test="superiorId != null">
        superior_id = #{superiorId,jdbcType=VARCHAR},
      </if>
      <if test="city != null">
        city = #{city,jdbcType=VARCHAR},
      </if>
      <if test="departmentId != null">
        department_id = #{departmentId,jdbcType=VARCHAR},
      </if>
      <if test="status != null">
        `status` = #{status,jdbcType=VARCHAR},
      </if>
      <if test="userNo != null">
        user_no = #{userNo,jdbcType=VARCHAR},
      </if>
      <if test="duty != null">
        duty = #{duty,jdbcType=VARCHAR},
      </if>
      <if test="district != null">
        district = #{district,jdbcType=VARCHAR},
      </if>
      <if test="headPortraitUrl != null">
        head_portrait_url = #{headPortraitUrl,jdbcType=VARCHAR},
      </if>
      <if test="contactMobile != null">
        contact_mobile = #{contactMobile,jdbcType=VARCHAR},
      </if>
      <if test="lastLoginTime != null">
        last_login_time = #{lastLoginTime,jdbcType=TIMESTAMP},
      </if>
      <if test="openId != null">
        open_id = #{openId,jdbcType=VARCHAR},
      </if>
      <if test="type != null">
        `type` = #{type,jdbcType=INTEGER},
      </if>
      <if test="reviewer != null">
        reviewer = #{reviewer,jdbcType=VARCHAR},
      </if>
      <if test="ambId != null">
        amb_id = #{ambId,jdbcType=VARCHAR},
      </if>
      <if test="ambRole != null">
        amb_role = #{ambRole,jdbcType=VARCHAR},
      </if>
      <if test="ambManage != null">
        amb_manage = #{ambManage,jdbcType=INTEGER},
      </if>
      <if test="managerId != null">
        manager_id = #{managerId,jdbcType=VARCHAR},
      </if>
      <if test="seniorStaff != null">
        senior_staff = #{seniorStaff,jdbcType=INTEGER},
      </if>
      <if test="publicPurview != null">
        public_purview = #{publicPurview,jdbcType=INTEGER},
      </if>
      <if test="expenseOpenId != null">
        expense_open_id = #{expenseOpenId,jdbcType=VARCHAR},
      </if>
    </set>
    where id = #{id,jdbcType=VARCHAR}
  </update>
  <update id="updateByPrimaryKey" parameterType="com.goafanti.common.model.Admin">
    update admin
    set mobile = #{mobile,jdbcType=VARCHAR},
      `name` = #{name,jdbcType=VARCHAR},
      `password` = #{password,jdbcType=VARCHAR},
      email = #{email,jdbcType=VARCHAR},
      create_time = #{createTime,jdbcType=TIMESTAMP},
      `number` = #{number,jdbcType=INTEGER},
      province = #{province,jdbcType=VARCHAR},
      `position` = #{position,jdbcType=VARCHAR},
      superior_id = #{superiorId,jdbcType=VARCHAR},
      city = #{city,jdbcType=VARCHAR},
      department_id = #{departmentId,jdbcType=VARCHAR},
      `status` = #{status,jdbcType=VARCHAR},
      user_no = #{userNo,jdbcType=VARCHAR},
      duty = #{duty,jdbcType=VARCHAR},
      district = #{district,jdbcType=VARCHAR},
      head_portrait_url = #{headPortraitUrl,jdbcType=VARCHAR},
      contact_mobile = #{contactMobile,jdbcType=VARCHAR},
      last_login_time = #{lastLoginTime,jdbcType=TIMESTAMP},
      open_id = #{openId,jdbcType=VARCHAR},
      `type` = #{type,jdbcType=INTEGER},
      reviewer = #{reviewer,jdbcType=VARCHAR},
      amb_id = #{ambId,jdbcType=VARCHAR},
      amb_role = #{ambRole,jdbcType=VARCHAR},
      amb_manage = #{ambManage,jdbcType=INTEGER},
      manager_id = #{managerId,jdbcType=VARCHAR},
      senior_staff = #{seniorStaff,jdbcType=INTEGER},
      public_purview = #{publicPurview,jdbcType=INTEGER},
      expense_open_id = #{expenseOpenId,jdbcType=VARCHAR}
    where id = #{id,jdbcType=VARCHAR}
  </update>





  <select id="selectAllAdmin" resultMap="BaseResultMap">
    select
    <include refid="Base_Column_List" />
    from admin
    where status ='0'
    <if test="depId != null">
      and department_id = #{depId,jdbcType=VARCHAR}
    </if>
  </select>

  <select id="selectByMobile" parameterType="java.lang.String" resultMap="BaseResultMap">
    select
    <include refid="Base_Column_List" />
    from admin
    where mobile = #{mobile,jdbcType=VARCHAR}
  </select>

  <select id="selectRolesByPrimaryKey" parameterType="java.lang.String" resultType="com.goafanti.common.model.Role">
    select r.role_name name, r.id, r.role_type type
    from role r
           left join user_role ur on ur.rid=r.id
    where ur.uid = #{uid,jdbcType=VARCHAR}
  </select>

  <select id="selectCognizanceConsultant" resultMap="BaseResultMap">
    select
    <include refid="Base_Column_List" />
    from admin
    where id  <![CDATA[ <> ]]> '1'
  </select>

  <select id="selectCognizancePrincipal" resultMap="BaseResultMap">
    select a.id, a.name, a.position from admin a
                                           INNER JOIN user_role  ur on a.id = ur.uid
    where ur.rid not in('1','2','3','4','5','6')
    group by a.id
  </select>

  <select id="selectPatentAuthor" resultMap="BaseResultMap">
    select a.id, a.name, a.position from admin a
                                           INNER JOIN user_role  ur on a.id = ur.uid
    where ur.rid not in('1','2','3','4','5','6')
    group by a.id
  </select>

  <select id="selectPatentPrincipal" resultMap="BaseResultMap">
    select a.id, a.name, a.position from admin a
                                           INNER JOIN user_role  ur on a.id = ur.uid
    where ur.rid not in('1','2','3','4','5','6')
    group by a.id
  </select>

  <select id="selectCopyrightConsultant" resultMap="BaseResultMap">
    select
    <include refid="Base_Column_List" />
    from admin
    where id  <![CDATA[ <> ]]> '1'
  </select>

  <select id="selectCopyrightPrincipal" resultMap="BaseResultMap">
    select a.id, a.name, a.position from admin a
                                           INNER JOIN user_role  ur on a.id = ur.uid
    where ur.rid not in('1','2','3','4','5','6')
    group by a.id
  </select>

  <select id="selectTechprojectConsultant" resultMap="BaseResultMap">
    select
    <include refid="Base_Column_List" />
    from admin
    where id  <![CDATA[ <> ]]> '1'
  </select>

  <select id="selectTechprojectPrincipal" resultMap="BaseResultMap">
    select a.id, a.name, a.position from admin a
                                           INNER JOIN user_role  ur on a.id = ur.uid
    where ur.rid not in('1','2','3','4','5','6')
    group by a.id
  </select>

  <select id="selectRoleByPrimaryKey" parameterType="java.lang.String" resultType="String">
    SELECT rid FROM user_role
    where uid = #{uid,jdbcType=VARCHAR}
  </select>

  <select id="selectAccoutManager" resultMap="BaseResultMap">
    select a.id, a.name, a.position from admin a
                                           INNER JOIN user_role  ur on a.id = ur.uid
    where ur.rid = '4'
  </select>

  <select id="selectTechnician" resultMap="BaseResultMap">
    select a.id, a.name, a.position from admin a
                                           INNER JOIN user_role  ur on a.id = ur.uid
    where ur.rid not in('1','2','3','4')
    group by a.id
  </select>

  <select id="selectSalesman" resultMap="BaseResultMap">
    select a.id, a.name, a.position from admin a
                                           INNER JOIN user_role  ur on a.id = ur.uid
    where ur.rid in ('5', '6')
  </select>

  <select id="selectContractManager" resultMap="BaseResultMap">
    select a.id, a.name, a.position from admin a
                                           INNER JOIN user_role  ur on a.id = ur.uid
    where ur.rid not in('1','2','3','4')
    group by a.id
  </select>

  <select id="selectTechBroder" resultMap="BaseResultMap">
    select
      u.rid as rolesId, a.name,a.id, a.position
    from user_role u
           left join admin a on a.id =u.uid
           left join role r on r.id =u.rid
    where
      r.role_name='技术经纪专员'
  </select>

  <select id="listAdminSelectBySuperAdmin" resultMap="BaseResultMap">
    select
    <include refid="Base_Column_List" />
    from admin
    where id <![CDATA[ <> ]]> '1'
  </select>

  <select id="listAdminSelectByAreaAdmin" resultMap="BaseResultMap">
    select
    a.id, a.name, a.mobile,
    a.create_time as createTime, a.number,  aa.name as superior
    from admin a
    left join admin_location al on al.admin_id = a.id
    left join admin aa on aa.id = a.superior_id
    where 1 = 1
    <if test="provinceList != null and provinceList.size &gt; 0">
      and  al.province in
      <foreach close=")" collection="provinceList" item="plist" open="(" separator=",">
        #{plist}
      </foreach>
    </if>
    <if test="cityList != null and cityList.size &gt; 0">
      and al.city in
      <foreach close=")" collection="cityList" item="clist" open="(" separator=",">
        #{clist}
      </foreach>
    </if>
  </select>

  <select id="findAdminListByPage" parameterType="java.lang.String" resultType="com.goafanti.admin.bo.AdminListBo">
    select
    a.number, a.mobile, a.name,
    a.position, a.email, a.id,
    a.province,
    a.city,
    a.create_time as createTime,
    aa.name as superior,
    a.superior_id as superiorId,
    a.department_id as departmentId,
    date_format(a.last_login_time,'%Y-%m-%d %H:%i:%S') as lastLoginTime,
    dm.name as departmentName
    from admin a
    left join admin_location al on a.id = al.admin_id
    left join admin aa on aa.id = a.superior_id
    left join department dm on a.department_id = dm.id
    left join user_role x on x.uid=a.id
    left join `role` y on x.rid=y.id
    where a.id <![CDATA[ <> ]]> '1'
    <if test="roleName != null">
      where y.role_name= #{roleName,jdbcType=VARCHAR}
    </if>
    <if test="mobile != null">
      and a.mobile = #{mobile,jdbcType=VARCHAR}
    </if>
    <if test="name != null">
      and a.name = #{name,jdbcType=VARCHAR}
    </if>
    <if test="number != null">
      and a.number = #{number,jdbcType=INTEGER}
    </if>
    <if test="seniorStaff != null">
      and a.senior_staff = #{seniorStaff}
    </if>
    <if test="province != null">
      and a.province = #{province,jdbcType=VARCHAR}
    </if>
    order by a.last_login_time ,a.number
    <if test="page_sql!=null">
      ${page_sql}
    </if>
  </select>

  <select id="findAdminCount" parameterType="java.lang.String" resultType="java.lang.Integer">
    select count(1) from admin
    where id <![CDATA[ <> ]]> '1'
    left join `role` y on x.rid=y.id
    where a.id <![CDATA[ <> ]]> '1'
    <if test="roleName != null">
      where y.role_name= #{roleName,jdbcType=VARCHAR}
    </if>
    <if test="mobile != null">
      and mobile = #{mobile,jdbcType=VARCHAR}
    </if>
    <if test="name != null">
      and name = #{name,jdbcType=VARCHAR}
    </if>
    <if test="number != null">
      and number = #{number,jdbcType=INTEGER}
    </if>
    <if test="seniorStaff != null">
      and a.senior_staff = #{seniorStaff}
    </if>
    <if test="province != null">
      and a.province = #{province,jdbcType=VARCHAR}
    </if>
  </select>


  <select id="listAdminByName" parameterType="java.lang.String" resultMap="BaseResultMap">
    select id,name from admin where   name like concat('%',#{name},'%')
    <if test="status==0">
      and status= '0'
    </if>
    <if test="status==1">
      and status= '1'
    </if>
  </select>

  <!--*************************************************************************-->
  <select id="selectAdminListByPage" parameterType="java.lang.String" resultType="com.goafanti.admin.bo.AdminListBo">
    select a.id, a.mobile, a.name, a.position, a.email, a.province, a.city, a.create_time as createTime, aa.name as superior,dep.name departmentName,
    a.superior_id as superiorId, a.department_id as departmentId, a.last_login_time as lastLoginTime, a.contact_mobile as contactMobile,
    a.duty,a.status, a.type, ambs.id ambId,ambs.name ambName,ambs.ancestors_names ancestorsNames ,a.amb_role ambRole,a.senior_staff seniorStaff,a.public_purview publicPurview
    from admin a
    left join admin_location al on a.id = al.admin_id
    left join admin aa on aa.id = a.superior_id
    left join amb_system ambs on a.amb_id=ambs.id
    left join department dep on a.department_id = dep.id
    <if test="rid != null">
      RIGHT join (select uid from user_role where rid=#{rid,jdbcType=VARCHAR}) ur on a.id=ur.uid
    </if>
    <if test="roleName != null">
      left  join  user_role  ur on a.id=ur.uid
      RIGHT join (select id from role where role_name =#{roleName,jdbcType=VARCHAR}) y on ur.rid=y.id
    </if>
    where a.status in (0,1)
    <if test="name != null">
      and a.name like concat('%',#{name,jdbcType=VARCHAR},'%')
    </if>
    <if test="departmentId != null">
      and a.department_id = #{departmentId,jdbcType=VARCHAR}
    </if>

    <if test="duty != null">
      and a.duty = #{duty,jdbcType=VARCHAR}
    </if>
    <if test="position != null">
      and a.position = #{position,jdbcType=VARCHAR}
    </if>
    <if test="status != null">
      and a.status = #{status,jdbcType=VARCHAR}
    </if>
    <if test="mobile != null">
      and a.mobile = #{mobile,jdbcType=VARCHAR}
    </if>
    <if test="superiorId != null">
      and a.superior_id = #{superiorId,jdbcType=VARCHAR}
    </if>
    <if test="ambId != null">
      and a.amb_id = #{ambId}
    </if>
    <if test="seniorStaff != null">
      and a.senior_staff = #{seniorStaff}
    </if>
    <if test="publicPurview != null">
      and a.public_purview = #{publicPurview}
    </if>

    <if test="ancestors != null">
      and (ambs.id=#{ancestors} or find_in_set( #{ancestors} ,ambs.ancestors))
    </if>
    <if test="ambManage !=null">
      and a.amb_manage= #{ambManage}
    </if>
    order by a.last_login_time desc
    <if test="page_sql!=null">
      ${page_sql}
    </if>
  </select>
  <select id="selectAdminCount" parameterType="java.lang.String" resultType="java.lang.Integer">
    select count(*)
    from admin a
    left join admin_location al on a.id = al.admin_id
    left join admin aa on aa.id = a.superior_id
    left join amb_system ambs on a.amb_id=ambs.id
    left join department dep on a.department_id = dep.id
    <if test="rid != null">
      RIGHT join (select * from user_role where rid=#{rid,jdbcType=VARCHAR}) ur on a.id=ur.uid
    </if>
    <if test="roleName != null">
      left  join  user_role  ur on a.id=ur.uid
      RIGHT join (select * from role where role_name =#{roleName,jdbcType=VARCHAR}) y on ur.rid=y.id
    </if>
    where a.status in (0,1)
    <if test="name != null">
      and a.name like concat('%',#{name,jdbcType=VARCHAR},'%')
    </if>
    <if test="departmentId != null">
      and a.department_id = #{departmentId,jdbcType=VARCHAR}
    </if>
    <if test="duty != null">
      and a.duty = #{duty,jdbcType=VARCHAR}
    </if>
    <if test="position != null">
      and a.position = #{position,jdbcType=VARCHAR}
    </if>
    <if test="status != null">
      and a.status = #{status,jdbcType=VARCHAR}
    </if>
    <if test="mobile != null">
      and a.mobile = #{mobile,jdbcType=VARCHAR}
    </if>
    <if test="superiorId != null">
      and a.superior_id = #{superiorId,jdbcType=VARCHAR}
    </if>
    <if test="ambId != null">
      and a.amb_id = #{ambId}
    </if>
    <if test="seniorStaff != null">
      and a.senior_staff = #{seniorStaff}
    </if>
    <if test="publicPurview != null">
      and a.public_purview = #{publicPurview}
    </if>
    <if test="ancestors != null">
      and (ambs.id=#{ancestors} or find_in_set( #{ancestors} ,ambs.ancestors))
    </if>
    <if test="ambManage !=null">
      and a.amb_manage= #{ambManage}
    </if>
  </select>
  <insert id="insertn" parameterType="com.goafanti.common.model.Admin">
    insert into admin (id, mobile, name,
                       password, email, create_time,
                       number, province, position, superior_id, city,department_id,status,user_no,duty,district,head_portrait_url,contact_mobile,type)
    values (#{id,jdbcType=VARCHAR}, #{mobile,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR},
            #{password,jdbcType=VARCHAR}, #{email,jdbcType=VARCHAR}, #{createTime,jdbcType=TIMESTAMP},
            #{number,jdbcType=INTEGER}, #{province,jdbcType=INTEGER}, #{position,jdbcType=VARCHAR},
            #{superiorId,jdbcType=VARCHAR}, #{city,jdbcType=INTEGER},#{departmentId,jdbcType=VARCHAR},
            #{status,jdbcType=VARCHAR},#{userNo,jdbcType=VARCHAR},#{duty,jdbcType=VARCHAR},#{district,jdbcType=VARCHAR},#{headPortraitUrl,jdbcType=VARCHAR},#{contactMobile,jdbcType=VARCHAR},
            #{type})
  </insert>
  <select id="selectUserNoBySuperiorId" parameterType="java.lang.String" resultType="java.lang.String">
    select
      user_no as userNo
    from admin
    where
      id=#{superiorId,jdbcType=VARCHAR}
  </select>
  <select id="selectCountBySuperiorId" parameterType="java.lang.String" resultType="java.lang.Integer">
    select
      count(1)
    from admin
    where
      superior_id=#{superiorId,jdbcType=VARCHAR}
  </select>
  <select id="selectIdByUserNo" parameterType="java.lang.String" resultType="java.lang.String">
    select
      id
    from admin
    where
      user_no=#{UserNo,jdbcType=VARCHAR}
  </select>
  <select id="selectAllByid" parameterType="java.lang.String" resultType="com.goafanti.common.model.Admin">
    select a.id, a.mobile, a.name, a.`password`, a.email, a.create_time as createTime,
           a.province, a.`position`,a.reviewer , a.superior_id as superiorId,a.public_purview publicPurview,
           a.department_id as departmentId, a.status,a.user_no as userNo,a.duty,a.district,
           a.head_portrait_url as headPortraitUrl, a.contact_mobile as contactMobile,a.senior_staff seniorStaff,
           b.name superior,c.name reviewerName,a.type,a.amb_id ambId,a.manager_id managerId ,d.name managerName
    from admin a left join admin b on a.superior_id =b.id left join admin c on a.reviewer =c.id
                 left join admin d on a.manager_id=d.id
    where a.id= #{id,jdbcType=VARCHAR}
  </select>
  <select id="selectNameByid" parameterType="java.lang.String" resultType="java.lang.String">
    select
      name
    from admin
    where
      id=#{id,jdbcType=VARCHAR}
  </select>
  <select id="selectRolesByUid" parameterType="com.goafanti.common.model.Role" resultType="com.goafanti.common.model.Role">
    select
      r.id,r.role_name as roleName
    from user_role ur
           left join role r on r.id = ur.rid
    where
      uid=#{id,jdbcType=VARCHAR}
  </select>

  <select id="selectStatusByMobile" parameterType="java.lang.String" resultType="java.lang.String">
    select
      status
    from admin
    where
      mobile= #{mobile,jdbcType=VARCHAR}
  </select>
  <delete id="deleteById" parameterType="java.lang.String">
    delete from admin
    where id = #{id,jdbcType=VARCHAR}
  </delete>

  <select id="selectIDNBySuperiorId" parameterType="java.lang.String" resultType="com.goafanti.common.model.Admin">
    select id, mobile, name,
           password, email, create_time as createTime,
           province, position,
           superior_id as superiorId,department_id as departmentId,
           status,user_no as userNo,duty,district,head_portrait_url as headPortraitUrl
    from admin
    where
      superior_id=#{superiorId,jdbcType=VARCHAR}
  </select>
  <select id="selectUserNoById" resultType="java.lang.String">
    select user_no as userNo
    from admin
    where
      id=#{superiorId,jdbcType=VARCHAR}
  </select>
  <update id="updateByUserNo" parameterType="com.goafanti.common.model.Admin">
    update admin
    set user_no = #{userNo,jdbcType=VARCHAR}
    where
      id=#{id,jdbcType=VARCHAR}
  </update>


  <select id="selectIdBySuperiorId" parameterType="java.lang.String" resultType="java.lang.String">
    select id
    from admin
    where
      superior_id=#{superiorId,jdbcType=VARCHAR}
  </select>

  <select id="selectSubList" parameterType="java.lang.String" resultType="com.goafanti.admin.bo.AdminListBo">
    select
      a.id,
      a.user_no as userNo,
      a.mobile,
      a.name,
      a.position,
      b.name as departmentName
    from
      admin a left join department b on
        a.department_id = b.id
    where
        a.department_id =(
        select
          department_id
        from
          admin
        where
          id = #{adminId,jdbcType=VARCHAR}
      )
      and a.id <![CDATA[ <> ]]> #{adminId,jdbcType=VARCHAR}
  </select>

  <select id="selectAdminByRoleId" parameterType="java.lang.String" resultMap="BaseResultMap">
    select a.id,a.name from  admin a left join user_role b on a.id = b.uid left join role c on b.rid = c.id where c.id = #{roleId,jdbcType=VARCHAR} limit 1
  </select>

  <select id="selectDepartmentStaff" parameterType="java.lang.String" resultType="com.goafanti.admin.bo.AdminListBo">
    select a.id ,a.name,a.password,a.department_id,b.name
    from admin a left join department b
    on a.department_id= b.id
    where 1=1
    <if test="departmentId != null and departmentId !='' ">
      and a.department_id = #{departmentId,jdbcType=VARCHAR}
    </if>
    <if test="name != null">
      and a.name like  concat('%',#{name,jdbcType=VARCHAR},'%')
    </if>

  </select>
  <select id="selectAdminName" parameterType="java.lang.String" resultMap="BaseResultMap">
    select a.id, a.name from admin a left join user_role b on a.id=b.uid
                                     left join `role` c on b.rid=c.id
    where c.role_name  = #{name,jdbcType=VARCHAR}
  </select>
  <update id="updateLockIds" parameterType="java.lang.String">
    update admin set status = '1' where id in (${lockIds})
  </update>

  <!--  用户是为正常的 -->
  <select id="getCountById" parameterType="java.lang.String" resultType="java.lang.Integer">
    select count(a.id)  from admin a
                               inner join user_role ur on a.id=ur.uid
    where a.id= #{_parameter,jdbcType=VARCHAR} and ( a.status != '注销' or a.status is null)
  </select>
  <select id="getAdminRoleNameList" parameterType="java.lang.String" resultMap="BaseResultMap">
    select a.id, a.name from admin a left join user_role b on a.id=b.uid
                                     left join `role` c on b.rid=c.id
    where c.role_name  = #{name,jdbcType=VARCHAR} and a.status= 0
  </select>

  <select id="getAdminRoleNamesList" parameterType="java.lang.String" resultMap="BaseResultMap">
    select a.id, a.name from admin a left join user_role b on a.id=b.uid
    left join `role` c on b.rid=c.id
    where a.status= 0
    and  c.role_name  in
    <foreach close=")" collection="list" item="name" open="(" separator=",">
      #{name}
    </foreach>
  </select>

  <select id="getAdminRoleTypeList" parameterType="java.lang.String" resultMap="BaseResultMap">
    select a.id, a.name from admin a left join user_role b on a.id=b.uid
                                     left join `role` c on b.rid=c.id
    where c.role_type  = #{roleType} and a.status= 0
  </select>

  <select id="getAdminRoleTypesList" parameterType="java.lang.String" resultMap="BaseResultMap">
    select a.id, a.name from admin a left join user_role b on a.id=b.uid
    left join `role` c on b.rid=c.id
    where a.status= 0
    and  c.role_type  in
    <foreach close=")" collection="list" item="type" open="(" separator=",">
      #{type}
    </foreach>
  </select>


  <select id="getDeptNameByAid" parameterType="java.lang.String" resultType="com.goafanti.admin.bo.AdminListBo">
    select a.id,a.name, d.name as departmentName,a.department_id departmentId,a.email,a.superior_id superiorId,a.open_id openId,
           a.reviewer,d.manager_id depManager,d.finance_id depFinance,a.public_purview publicPurview
    from admin a left join department d on a.department_id = d.id
    where a.id = #{_parameter,jdbcType=VARCHAR}
  </select>

  <insert id="addAdminContacts" parameterType="com.goafanti.admin.bo.AdminContacts">
    insert into admin_contacts (id,aid,contacts_id)values
    (#{id,jdbcType=VARCHAR},#{aid,jdbcType=VARCHAR},#{contactsId,jdbcType=VARCHAR})
  </insert>

  <select id="frequentContactsList" parameterType="java.lang.String" resultType="com.goafanti.admin.bo.AdminListBo">
    select a.id,b.id as contactId,b.name,b.position,b.contact_mobile as contactMobile,c.name as departmentName,y.role_name as roleName
    from admin_contacts a left join admin b
    on a.contacts_id=b.id left join department c
    on c.id=b.department_id left join user_role x on x.uid=b.id
    left join `role` y on x.rid=y.id
    where b.status ='0'
    <if test="roleName != null">
      and y.role_name= #{roleName,jdbcType=VARCHAR}
    </if>
    <if test="aid != null">
      and a.aid= #{aid,jdbcType=VARCHAR}
    </if>
    <if test="name != null">
      and b.name like CONCAT('%',#{name,jdbcType=VARCHAR},'%')
    </if>
    <if test="deps != null">
      and b.department_id in
      <foreach close=")" collection="deps" item="depId" open="(" separator=",">
        #{depId}
      </foreach>
    </if>
    <if test="page_sql!=null">
      ${page_sql}
    </if>
  </select>

  <select id="frequentContactsCount" parameterType="java.lang.String" resultType="java.lang.Integer">
    select count(*)
    from admin_contacts a left join admin b
    on a.contacts_id=b.id
    left join user_role x on x.uid=b.id
    left join `role` y on x.rid=y.id
    where b.status ='0'
    <if test="roleName != null">
      and y.role_name= #{roleName,jdbcType=VARCHAR}
    </if>
    <if test="aid != null">
      and a.aid= #{aid,jdbcType=VARCHAR}
    </if>
    <if test="name != null">
      and b.name like CONCAT('%',#{name,jdbcType=VARCHAR},'%')
    </if>
    <if test="deps != null">
      and b.department_id in
      <foreach close=")" collection="deps" item="depId" open="(" separator=",">
        #{depId}
      </foreach>
    </if>
  </select>

  <delete id="deleteFrequentContacts" parameterType="java.lang.String">
    delete from admin_contacts
    where id = #{id,jdbcType=VARCHAR}
  </delete>
  <select id="getaidFrequentContacts" resultType="java.lang.String">
    select b.id from admin_contacts a left join admin b on a.contacts_id = b.id
    where b.status = '0' and a.aid= #{id,jdbcType=VARCHAR}
  </select>


  <select id="selectAdminCustomerList"  resultType="com.goafanti.admin.bo.AdminCustomerBo">
    select a.id as aid,a.name as aName,d.name as depName,ifnull(b.userCount,0) as userCount,ifnull(c.timeCount,0) as inputCount,
    ifnull(d.timeCount,0) as receiveCount,ifnull(g.timeCount,0) as signCount from admin a
    left join (select aid,count(aid) as userCount from user where aid is not null
    and  share_type=0 and source in(1,2,3) and type=1 and new_channel=0
    group by aid) b on a.id=b.aid
    left join (select aid,count(aid) as timeCount from `user` where aid is not null
    and  share_type in (0,2) and source =1 and type=1 and new_channel=0
    <if test="startTime != null and endTime != null">
      and  transfer_time  between #{startTime,jdbcType=VARCHAR} and #{endTime,jdbcType=VARCHAR}
    </if>
    group by aid) c on a.id=c.aid
    left join (select aid,count(aid) as timeCount from `user` where aid is not null
    and  share_type in (0,2) and source =2 and type=1 and new_channel=0
    <if test="startTime != null and endTime != null">
      and  transfer_time  between #{startTime,jdbcType=VARCHAR} and #{endTime,jdbcType=VARCHAR}
    </if>
    group by aid) d on a.id=d.aid
    left join (select aid,count(aid) as timeCount from `user` where aid is not null
    and share_type =2 and type=1  and new_channel=0
    <if test="startTime != null and endTime != null">
      and  transfer_time  between #{startTime,jdbcType=VARCHAR} and #{endTime,jdbcType=VARCHAR}
    </if>
    group by aid) g on a.id=g.aid
    left join department d on a.department_id=d.id
    left join user_role e on a.id=e.uid
    left join `role` f on e.rid=f.id
    where f.role_name in ('营销员','营销经理')
    and	 a.status= 0
    <if test="depId != null">
      and a.department_id =  #{depId,jdbcType=VARCHAR}
    </if>
    <if test="page_sql!=null">
      ${page_sql}
    </if>
  </select>

  <select id="selectAdminCustomerCount" parameterType="java.lang.String" resultType="java.lang.Integer">
    select count(*) from admin a
    left join department d on a.department_id=d.id
    left join user_role e on a.id=e.uid
    left join `role` f on e.rid=f.id
    where f.role_name in ('营销员','营销经理')
    and	 a.status= 0
    <if test="depId != null">
      and a.department_id =  #{depId,jdbcType=VARCHAR}
    </if>
  </select>

  <select id="selectAdminCustomerDetailList"  resultType="com.goafanti.admin.bo.AdminCustomerDetailBo">
    select a.id,a.nickname as name,a.source,c.contacts contacts,c.contact_mobile as contactMobile,c.contacts_dep contactsDep,
    c.contacts_position contactsPosition, a.create_time as createTime,b.last_follow_time as followTime,c.location_province locationProvince,
    c.location_city locationCity,c.location_area locationArea,c.business_scope businessScope , c.intended_project intendedProject
    from user a left join (select uid,last_follow_time from user_mid where aid= #{aid}) b  on a.id=b.uid
    left join organization_identity c on a.id=c.uid
    <if test="type==5 or type==6">
      left join (select aid,uid from public_release a left join public_release_details b on a.id=b.prid
      where b.clock_in =1
      and aid= #{aid,jdbcType=VARCHAR}
      <if test="startTime != null and endTime != null">
        and  clock_in_time between #{startTime,jdbcType=VARCHAR} and #{endTime,jdbcType=VARCHAR}
      </if>
      )e on a.id=e.uid
    </if>
    where  a.type=1 and a.new_channel=0
    <if test="type != 5 and type !=6">
      and a.aid=  #{aid,jdbcType=VARCHAR}
    </if>
    <if test="type == 5 or type ==6">
      and e.aid=  #{aid,jdbcType=VARCHAR}
    </if>
    <if test="type == 0">
      and  a.share_type = 0
    </if>
    <if test="type == 1">
      and  a.share_type = 3
    </if>
    <if test="type ==0  or type==3 or type==5 or type==7">
      and a.channel=0
    </if>
    <if test="type == 1 or type==4 or type==6">
      and a.channel=1
    </if>
    <if test="type == 2">
      and a.share_type=2
    </if>
    <if test="type == 3 or type==4">
      and a.source=1
      and  a.share_type = 0
    </if>
    <if test="type==7 ">
      and a.share_type = 0
      and a.source=2
    </if>
    <if test="type!=5 and type!=6">
      <if test="startTime != null and endTime != null">
        and  a.transfer_time between #{startTime,jdbcType=VARCHAR} and #{endTime,jdbcType=VARCHAR}
      </if>
    </if>
    <if test="page_sql!=null">
      ${page_sql}
    </if>
  </select>

  <select id="selectAdminCustomerDetailCount" parameterType="java.lang.String" resultType="java.lang.Integer">
    select count(*)
    from user a
    <if test="type==5 or type==6">
      left join (select aid,uid from public_release a left join public_release_details b on a.id=b.prid
      where b.clock_in =1
      and aid= #{aid,jdbcType=VARCHAR}
      <if test="startTime != null and endTime != null">
        and  clock_in_time between #{startTime,jdbcType=VARCHAR} and #{endTime,jdbcType=VARCHAR}
      </if>
      )e on a.id=e.uid
    </if>
    where  a.type=1 and a.new_channel=0
    <if test="type != 5 and type !=6">
      and a.aid=  #{aid,jdbcType=VARCHAR}
    </if>
    <if test="type == 5 or type ==6">
      and e.aid=  #{aid,jdbcType=VARCHAR}
    </if>
    <if test="type == 0">
      and  a.share_type = 0
    </if>
    <if test="type == 1">
      and  a.share_type = 3
    </if>
    <if test="type ==0  or type==3 or type==5 or type==7">
      and a.channel=0
    </if>
    <if test="type == 1 or type==4 or type==6">
      and a.channel=1
    </if>
    <if test="type == 2">
      and a.share_type=2
    </if>
    <if test="type == 3 or type==4">
      and a.source=1
      and  a.share_type = 0
    </if>
    <if test="type==7 ">
      and a.share_type = 0
      and a.source=2
    </if>
    <if test="type!=5 and type!=6">
      <if test="startTime != null and endTime != null">
        and  a.transfer_time between #{startTime,jdbcType=VARCHAR} and #{endTime,jdbcType=VARCHAR}
      </if>
    </if>
  </select>


  <select id="listNameByDepAndName" resultType="java.lang.String">
    select a.id  from admin a left join user_role b on a.id =b.uid
                              left join `role` c on b.rid=c.id
    where department_id= #{depId}
      and c.role_type= #{roleType}
  </select>


  <select id="listAdminBydepIdAndRoleType" resultType="com.goafanti.common.model.Admin">
    select a.id,a.name,a.email ,a.open_id openId,a.expense_open_id expenseOpenId
    from admin a left join user_role b on a.id =b.uid left join `role` c on b.rid=c.id
    where a.status='0'
      and a.department_id= #{depId}
      and c.role_type= #{roleType}
  </select>


  <select id="selectBySuperId" resultType="java.lang.String">
    select id from admin where superior_id= #{aid}
  </select>

  <select id="selectMyAndSuperBySuperId" parameterType="java.lang.String" resultType="com.goafanti.common.bo.AdminNoticeBo">
    select
    a.id,a.name,a.email,a.open_id openId,a.expense_open_id expenseOpenId,
    b.id superId,b.name superName,b.email superEmail,b.open_id superOpenId,b.expense_open_id superExpenseOpenId
    from admin a left join admin b on a.superior_id=b.id
    where  a.id=#{id}
  </select>
  <select id="selectFinanceAdminByOrderDep" resultType="com.goafanti.common.model.Admin">
    select a.finance_id id,b.name from department a left join admin b on a.finance_id=b.id
    where a.id= #{orderDep}
  </select>
  <select id="getPermission" resultType="java.lang.String">
    select c.role_type from admin a left join user_role b on a.id=b.uid left join `role` c on b.rid=c.id
    where a.id= #{transferId}
  </select>
  <select id="selectDepIdWithSpuerId" resultType="java.lang.String">
    select b.id from admin a right join department b on a.id=b.finance_id
    where a.superior_id= #{superId}
  </select>
  <select id="getAdminRoleListByAid"  resultType="java.lang.String">
    select c.role_type from admin a left join user_role b on a.id=b.uid
                                    left join role c on b.rid =c.id
    where a.id= #{id}
  </select>

  <select id="selectByOpeid" parameterType="java.lang.String" resultMap="BaseResultMap">
    select
    <include refid="Base_Column_List" />
    from admin
    where  open_id= #{openid}
  </select>
  <select id="getFinanceDep" resultType="java.lang.String">
    select id from department where finance_id = #{aid}
  </select>
  <select id="getLowerFinanceDep" resultType="java.lang.String">
    select b.id from admin a left join department b on a.id=b.finance_id
    where a.superior_id = #{aid}
  </select>
  <select id="selectByAmbIdCount" resultType="java.lang.Integer">
    SELECT count(*) from admin where amb_id= #{ambId}
  </select>
  <select id="selectAdminByRoleType" parameterType="java.lang.String" resultType="com.goafanti.common.model.Admin">
    SELECT a.id,a.name ,a.mobile ,a.email,a.department_id departmentId,a.open_id openId,a.expense_open_id expenseOpenId
    FROM admin a left join user_role b on a.id=b.uid
    left join `role` c on b.rid =c.id
    where a.status='0'
    <if test="roleType =='99998'">
      and c.role_type  in ('99998','99988')
    </if>
    <if test="roleType =='99999'">
      and c.role_type  in ('99999','99989')
    </if>
    <if test="roleType =='99999888'">
      and c.role_type  in ('99998','99988','99999','99989')
    </if>
    <if test="roleType !='99999' and roleType !='99998' and roleType !='99999888'">
      and c.role_type  in (#{roleType})
    </if>
  </select>
  <select id="selectByDeps" resultType="com.goafanti.admin.bo.AdminCustomerBo">
    SELECT a.id aid,a.name aName,a.department_id depId,d.name depName
    from admin a left join department d on a.department_id = d.id
    where a.status =0 and a.`type` =1
    <if test="seniorStaff != null">
      and a.senior_staff=#{seniorStaff}
    </if>
    <if test="depIds!= null">
      and a.department_id in
      <foreach close=")" collection="depIds" item="deps" open="(" separator=",">
        #{deps.id}
      </foreach>
    </if>
  </select>
  <select id="getAdminByFinanceId" resultType="com.goafanti.common.model.Admin">
    select b.id ,b.name
    from department a left join admin b on a.finance_id=b.id
    where a.id= #{id}
  </select>
  <select id="selectRoleTypeByid" resultType="java.lang.Integer">
    select b.role_type
    from user_role a left join `role` b on a.rid =b.id
    where a.uid = #{aid}
  </select>
  <select id="selectFinanceAdminByAid" resultType="com.goafanti.common.model.Admin">
    select c.id,c.name,c.open_id openId,c.email
    from admin  a left join department b on a.department_id=b.id
    left join admin c on b.finance_id=c.id
    where a.id= #{aid}
  </select>
</mapper>
