OrgMapper.xml 16.5 KB
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407
<?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.hotent.uc.dao.OrgDao">
	<resultMap id="BaseResultMap" type="com.hotent.uc.model.Org">
		<id property="id" column="ID_" jdbcType="VARCHAR"/>
		<result property="name" column="NAME_" jdbcType="VARCHAR"/>
		<result property="parentId" column="PARENT_ID_" jdbcType="VARCHAR"/>
		<result property="orderNo" column="ORDER_NO_" jdbcType="NUMERIC"/>
		<result property="code" column="CODE_" jdbcType="VARCHAR"/>
		<result property="grade" column="GRADE_" jdbcType="VARCHAR"/>
		<result property="demId" column="DEM_ID_" jdbcType="VARCHAR"/>
		<result property="path" column="PATH_" jdbcType="VARCHAR"/>
		<result property="pathName" column="PATH_NAME_" jdbcType="VARCHAR"/>
		<result property="isMaster" column="IS_MASTER_" jdbcType="NUMERIC"/>
		<result property="updateTime" column="UPDATE_TIME_" jdbcType="TIMESTAMP"/>
		<result property="isDelete" column="IS_DELE_" jdbcType="VARCHAR"/>
		<result property="version" column="VERSION_" jdbcType="NUMERIC"/>
        <result property="limitNum" column="LIMIT_NUM_" jdbcType="NUMERIC"/>
        <result property="nowNum" column="NOW_NUM_" jdbcType="NUMERIC"/>
        <result property="exceedLimitNum" column="EXCEED_LIMIT_NUM_" jdbcType="NUMERIC"/>
        <result property="createBy" column="create_by_" jdbcType="VARCHAR"/>
		<result property="createTime" column="create_time_" jdbcType="TIMESTAMP"/>
		<result property="createOrgId" column="create_org_id_" jdbcType="VARCHAR"/>
		<result property="updateBy" column="update_by_" jdbcType="VARCHAR"/>
	</resultMap>
	
	<parameterMap id="Org" type="com.hotent.uc.model.Org" />
	
	<sql id="Base_Column_List">
		ID_,NAME_,PARENT_ID_,ORDER_NO_,CODE_,GRADE_,DEM_ID_,PATH_,PATH_NAME_,UPDATE_TIME_,IS_DELE_,VERSION_,LIMIT_NUM_,NOW_NUM_,EXCEED_LIMIT_NUM_,create_by_,create_time_,create_org_id_,update_by_,tenant_id_
	</sql>
	
	
	<select id="get"   parameterType="java.lang.String" resultMap="BaseResultMap">
		select  o.* ,
( case (select count(*)  from UC_ORG p where p.PARENT_ID_=o.ID_ and p.ID_!=p.PARENT_ID_  AND P.IS_DELE_!='1') when 0 then 0 else 1 end )isIsParent  
		from  UC_ORG o   
		where 1=1 and o.ID_ = #{id}  AND o.IS_DELE_!='1'
	</select>
		
	<select id="getByCode"   parameterType="java.lang.String" resultMap="BaseResultMap">
		SELECT 
		<include refid="Base_Column_List" />
		FROM UC_ORG 
		WHERE 
		CODE_=#{code} AND IS_DELE_!='1'
	</select>
	
	<select id="getOrgListByUserId"   parameterType="java.lang.String" resultMap="BaseResultMap">
		SELECT distinct org.*,orguser.IS_MASTER_,
		unit.WX_WORK_ID_,unit.DINGTALK_ID_,unit.FLYBOOK_ID_
		FROM  UC_ORG_USER orguser
		inner join UC_ORG org on org.ID_=orguser.ORG_ID_
		left join UC_ORG_UNITE unit on org.ID_=unit.ORG_ID_
		WHERE orguser.USER_ID_=#{userId} AND org.IS_DELE_!='1' AND orguser.IS_DELE_!='1'
	</select>

	<select id="getOrgsByCharge"   parameterType="java.util.Map" resultMap="BaseResultMap">
		SELECT distinct org.*,orguser.IS_CHARGE_
		FROM UC_ORG_USER orguser
		LEFT JOIN uc_org org on org.id_ = orguser.org_id_
		WHERE orguser.USER_ID_=#{userId} AND orguser.is_charge_ >= #{charge}
		  AND org.IS_DELE_!='1' AND orguser.IS_DELE_!='1'
	</select>
	
	<select id="getMainOrgListByUser"   parameterType="java.util.Map" resultMap="BaseResultMap">
		SELECT distinct org.*,orguser.IS_MASTER_ FROM  UC_ORG_USER orguser 
		inner join UC_ORG org on org.ID_=orguser.ORG_ID_
		WHERE orguser.IS_MASTER_=1 and orguser.USER_ID_=#{userId,jdbcType=VARCHAR} AND orguser.IS_DELE_!='1' AND org.IS_DELE_!='1'
	   <if test="demId!=null">
			and org.DEM_ID_=#{demId,jdbcType=VARCHAR}
	   </if>
	</select>
	
	<select id="getByParentId" parameterType="string"  resultMap="BaseResultMap" >
		select  ID_  ,PARENT_ID_,NAME_, ( case (select count(*)  from UC_ORG p where p.PARENT_ID_=o.ID_ and p.ID_!=p.PARENT_ID_ AND p.IS_DELE_!='1') when 0 then 0 else 1 end )isIsParent  
		from  UC_ORG o   
		where
		<if test="pid!=null">
			PARENT_ID_=#{pid} AND
		</if>
		IS_DELE_!='1'  order by ORDER_NO_ asc
	</select>
	
	<select id="getOrgIdMapByUserId" parameterType="java.lang.String" resultType="java.util.Map">
		SELECT DISTINCT
			org.ID_ AS orgId,
			orguser.IS_MASTER_ AS isMaster
		FROM
			UC_ORG_USER orguser
		INNER JOIN UC_ORG org ON org.ID_ = orguser.ORG_ID_
		WHERE
			orguser.USER_ID_ = #{userId}
		AND org.IS_DELE_ != '1'
		AND orguser.IS_DELE_ != '1'
	</select>
	
	<select id="getSubOrgByIds" parameterType="java.lang.String" resultType="java.lang.String">
		SELECT
			ID_
		FROM
			uc_org
		WHERE
			PARENT_ID_ IN
			<foreach collection="parentIds" index="index" item="parentId" open="(" separator="," close=")"> 
	            #{parentId} 
	        </foreach>
		AND IS_DELE_ != '1'
	</select>
	
	<delete id="removePhysical" >
		DELETE FROM UC_ORG  WHERE IS_DELE_='1' 
	</delete>
	
	<select id="getByOrgName" parameterType="java.lang.String" resultMap="BaseResultMap">
		select 
		<include refid="Base_Column_List" />
		from UC_ORG where NAME_ = #{orgName} AND IS_DELE_!='1' 
	</select>
	<select id="getByPathName" parameterType="java.lang.String" resultMap="BaseResultMap">
		select 
		<include refid="Base_Column_List" />
		from UC_ORG where PATH_NAME_ = #{pathName} AND IS_DELE_!='1' 
	</select>

	<select id="getByPathNameAndDem" parameterType="java.lang.String" resultMap="BaseResultMap">
		select
		<include refid="Base_Column_List" />
		from UC_ORG where DEM_ID_ = #{demId} AND PATH_NAME_ = #{pathName} AND IS_DELE_!='1'
	</select>
	
	<select id="getByParentAndDem" parameterType="java.util.Map" resultMap="BaseResultMap">
		select  o.*, 
		( case (select count(*)  from UC_ORG p where p.PARENT_ID_=o.ID_ and p.ID_!=p.PARENT_ID_ AND p.IS_DELE_!='1' ) when 0 then 0 else 1 end ) isIsParent
		from  UC_ORG o where o.IS_DELE_!='1'
		<if test="ew.paramNameValuePairs.parentId!=null">
			and PARENT_ID_ in ${ew.paramNameValuePairs.parentId}
		</if>
		<if test="ew.paramNameValuePairs.authSql!=null">
			${ew.paramNameValuePairs.authSql}
		</if>
		<if test="ew.paramNameValuePairs.demId!=null">
			and o.DEM_ID_ =#{ew.paramNameValuePairs.demId}
		</if>
		<if test="ew.paramNameValuePairs.path != null">
			and o.PATH_ LIKE #{ew.paramNameValuePairs.path}
		</if>
        <if test="ew.paramNameValuePairs.orgId != null">
            and o.ID_ = #{ew.paramNameValuePairs.orgId}
        </if>
		ORDER BY o.ORDER_NO_
	</select>
	
	<select id="getByDemIdAndSonId" resultMap="BaseResultMap">
		select  o.* from  UC_ORG o   
		where o.IS_DELE_!='1' AND o.ID_ =(select og.PARENT_ID_ from UC_ORG og where og.ID_= #{sonId,jdbcType=VARCHAR} AND og.DEM_ID_= #{demId,jdbcType=VARCHAR} AND og.IS_DELE_!='1')
	</select>
	
	<select id="getOrgListByDemId" parameterType="java.lang.String" resultMap="BaseResultMap">
		select 
		<include refid="Base_Column_List" />
		from UC_ORG where DEM_ID_ = #{demId} AND IS_DELE_!='1'
	</select>
	
	<select id="getOrgsByAccount" parameterType="java.lang.String" resultMap="BaseResultMap">
		SELECT distinct org.*,orguser.IS_MASTER_ FROM  UC_ORG_USER orguser 
		inner join UC_ORG org on org.ID_=orguser.ORG_ID_
		inner join UC_USER u on u.ID_=orguser.USER_ID_
		WHERE org.IS_DELE_!='1' AND orguser.IS_DELE_!='1' and u.ACCOUNT_=#{account}
	</select>
	
	<select id="justGetOrgsByAccount" parameterType="java.lang.String" resultMap="BaseResultMap">
		SELECT distinct org.*,orguser.IS_MASTER_ FROM  UC_ORG_USER orguser 
		inner join UC_ORG org on org.ID_=orguser.ORG_ID_
		inner join UC_USER u on u.ID_=orguser.USER_ID_
		WHERE org.IS_DELE_!='1' AND orguser.IS_DELE_!='1' and u.ACCOUNT_=#{account} and orguser.POS_ID_ is null
	</select>
	
	<select id="getUserOrg"   parameterType="java.util.Map" resultMap="BaseResultMap">
		SELECT distinct org.*,orguser.IS_MASTER_ FROM  UC_ORG_USER orguser 
		inner join UC_ORG org on org.ID_=orguser.ORG_ID_
		WHERE org.IS_DELE_!='1' AND orguser.IS_DELE_!='1'
		 <if test="isMain!=null">
			and orguser.IS_MASTER_=#{isMain}
	   </if>
		<if test="userId!=null">
			and orguser.USER_ID_=#{userId}
	   </if>
	   <if test="orgId!=null">
			and org.ID_=#{orgId}
	   </if>
	   <if test="demId!=null">
			and org.DEM_ID_=#{demId}
	   </if>
	</select>
	
	<!-- 关联uc_demension查找组织 -->
	<select id="getOrgInnerDem" resultMap="BaseResultMap">
		select  o.*
		from  UC_ORG o   INNER JOIN uc_demension d ON o.DEM_ID_ = d.ID_ 
		where o.IS_DELE_!='1' AND d.IS_DELE_!='1'
		 <if test="demId!=null">
			and o.DEM_ID_=#{demId}
	   	</if>
	   	<if test="code!=null">
			and o.CODE_=#{code}
	   	</if>
	   	<if test="demCode!=null">
			and d.CODE_=#{demCode}
	   	</if>
	</select>
	
	<!-- 按用户id组查找组织全路径 -->
	<select id="getPathNames" parameterType="java.lang.String"  resultType="java.util.Map">
		 SELECT
			ucuser.ID_ as "userId",
			ucuser.FULLNAME_ as "fullName",
			<!-- ucuser.dutyname as dutyName, -->
			ucorg.PATH_NAME_ as "pathName"
		FROM
			uc_user  ucuser
		LEFT JOIN uc_org_user  ucorguser ON ucuser.ID_ = ucorguser.USER_ID_
		AND ucorguser.IS_MASTER_ = '1'
		AND ucorguser.IS_REL_ACTIVE_ = '1'
		AND ucorguser.IS_DELE_ = '0'
		LEFT JOIN uc_org  ucorg ON ucorg.ID_ = ucorguser.ORG_ID_ AND ucorg.IS_DELE_ = '0'
		WHERE
			ucuser.ID_ IN 
			<foreach collection="userIds" index="index" item="userId" open="(" separator="," close=")"> 
	            #{userId} 
	        </foreach> 
	</select>
	
	<!--根据用户权限Map获取有权限流程列表  -->
	<select id="getChildrenIds"  resultType="java.lang.String"  parameterType="java.util.Map" >
		select o.ID_ from UC_ORG o  where o.ID_ is null
		   <foreach collection="pathMap" index="key" item="value" open="" separator=" " close=""> 
				union
				select ID_ from UC_ORG o
	 				 where  o.PATH_ like '${value}%'
             </foreach>
	</select>
	
	<!--根据用户id 查询主组织  -->
	<select id="getOrgMaster"  resultMap="BaseResultMap"  parameterType="java.lang.String" >
		SELECT
			org.*
		FROM
			uc_user  uc
		LEFT JOIN uc_org_user  orguc ON uc.ID_ = orguc.USER_ID_	
		LEFT JOIN uc_org  org ON orguc.ORG_ID_ = org.ID_
		WHERE  uc.ACCOUNT_ = #{account} AND orguc.IS_MASTER_ = '1' AND orguc.IS_DELE_ != '1' 
	</select>

	<select id="getCountByCode" parameterType="java.lang.String" resultType="java.lang.Integer">
		SELECT count(1) FROM UC_ORG
		WHERE CODE_ = #{code}
	</select>
	
	<select id="getOrgListByCodes" resultMap="BaseResultMap">
		SELECT
			<include refid="Base_Column_List" />
		FROM
			uc_org
		WHERE
			CODE_ IN
			<foreach collection="list" index="index" item="code" open="(" separator="," close=")"> 
	            #{code} 
	        </foreach>
		AND IS_DELE_ != 1
	</select>
	
	<select id="getPathNameList" resultMap="BaseResultMap">
		select 
		<include refid="Base_Column_List" />
		from UC_ORG where PATH_NAME_ 
		in
		<foreach collection="list" index="index" item="pathName" open="(" separator="," close=")"> 
            #{pathName} 
        </foreach>
		AND IS_DELE_!='1' 
	</select>
	
	<insert id="insertBatch" parameterType="java.util.List">
		INSERT INTO UC_ORG
		(
		ID_,NAME_,PARENT_ID_,ORDER_NO_,CODE_,GRADE_,DEM_ID_,PATH_,PATH_NAME_,UPDATE_TIME_,IS_DELE_,VERSION_,LIMIT_NUM_,NOW_NUM_,EXCEED_LIMIT_NUM_,create_by_,create_time_,create_org_id_
		)
		VALUES 
		<foreach collection="list" item="item" index="index" separator=",">
			(#{item.id,jdbcType=VARCHAR}, #{item.name,jdbcType=VARCHAR}, #{item.parentId,jdbcType=VARCHAR}, #{item.orderNo,jdbcType=NUMERIC}, #{item.code,jdbcType=VARCHAR}, #{item.grade,jdbcType=VARCHAR},#{item.demId,jdbcType=VARCHAR},#{item.path,jdbcType=VARCHAR},#{item.pathName,jdbcType=VARCHAR},#{item.updateTime,jdbcType=TIMESTAMP},#{item.isDelete,jdbcType=VARCHAR},#{item.version,jdbcType=NUMERIC},
			#{item.limitNum,jdbcType=NUMERIC},#{item.nowNum,jdbcType=NUMERIC},#{item.exceedLimitNum,jdbcType=NUMERIC},#{item.createBy,jdbcType=VARCHAR},#{item.createTime,jdbcType=TIMESTAMP},#{item.createOrgId,jdbcType=VARCHAR})
		</foreach>
	</insert>
	
	<insert id="insertBatch" databaseId="oracle" parameterType="java.util.List">
		INSERT INTO UC_ORG
		(
		ID_,NAME_,PARENT_ID_,ORDER_NO_,CODE_,GRADE_,DEM_ID_,PATH_,PATH_NAME_,UPDATE_TIME_,IS_DELE_,VERSION_,LIMIT_NUM_,NOW_NUM_,EXCEED_LIMIT_NUM_,create_by_,create_time_,create_org_id_
		) 
		(
		<foreach collection="list" item="item" index="index" separator="union all">
			select #{item.id,jdbcType=VARCHAR}, #{item.name,jdbcType=VARCHAR}, #{item.parentId,jdbcType=VARCHAR}, #{item.orderNo,jdbcType=NUMERIC}, #{item.code,jdbcType=VARCHAR}, #{item.grade,jdbcType=VARCHAR},#{item.demId,jdbcType=VARCHAR},#{item.path,jdbcType=VARCHAR},#{item.pathName,jdbcType=VARCHAR},#{item.updateTime,jdbcType=TIMESTAMP},#{item.isDelete,jdbcType=VARCHAR},#{item.version,jdbcType=NUMERIC},
			#{item.limitNum,jdbcType=NUMERIC},#{item.nowNum,jdbcType=NUMERIC},#{item.exceedLimitNum,jdbcType=NUMERIC},#{item.createBy,jdbcType=VARCHAR},#{item.createTime,jdbcType=TIMESTAMP},#{item.createOrgId,jdbcType=VARCHAR} FROM DUAL
		</foreach>
		)
	</insert>

	<select id="getOrgsExternalNotSync" parameterType="string"  resultMap="BaseResultMap">
		select
			o.ID_  ,PARENT_ID_,NAME_,
			uu.OPEN_ID_,uu.WX_WORK_ID_,uu.DINGTALK_ID_
		from  UC_ORG o
		left join UC_ORG_UNITE ou
			on o.id_ = ou.org_id_
		where
		<choose>
			<when test="type == 0">
				ou.WX_WORK_ID_ is null or ou.WX_WORK_ID_ = ''
			</when>
			<when test="type == 1">
				ou.DINGTALK_ID_ is null or ou.DINGTALK_ID_ = ''
			</when>
			<when test="type == 2">
				ou.FLYBOOK_ID_ is null or ou.FLYBOOK_ID_ = ''
			</when>
			<otherwise>
				ou.WX_WORK_ID_ is null or ou.WX_WORK_ID_ = ''
			</otherwise>
		</choose>
	</select>
    <select id="getOrgAndPostByUserIds" parameterType="java.util.List"  resultType="com.hotent.uc.model.OrgUser">
        SELECT
          org.name_ as orgName,post.pos_name_ as postName,uc.account_ as account,uc.id_ as userId
        FROM
        UC_USER uc
        LEFT JOIN UC_ORG_USER orguser ON uc.Id_=orguser.USER_ID_ AND orguser.IS_DELE_ != '1'
        LEFT JOIN UC_ORG org ON org.ID_ = orguser.ORG_ID_ AND org.IS_DELE_ != '1'
        LEFT JOIN UC_DEMENSION dem ON dem.ID_ = org.DEM_ID_ AND dem.IS_DELE_ != '1'
        LEFT JOIN uc_org_post post ON orguser.POS_ID_ = post.ID_  AND post.IS_DELE_ != '1'
        WHERE uc.ID_ in
        <foreach collection="list" index="index" item="userId" open="(" separator="," close=")">
            #{userId}
        </foreach>
        AND uc.IS_DELE_ != '1'
        ORDER BY
        uc.id_,dem.IS_DEFAULT_ desc,orguser.IS_MASTER_ desc,( CASE post.IS_CHARGE_ WHEN NULL THEN 0 ELSE post.IS_CHARGE_ END ) desc
    </select>

    <select id="countUserByOrg" parameterType="java.util.List"  resultType="java.util.Map">
        <foreach collection="list" index="index" item="item" open="(" separator=" union all " close=")">
            SELECT
                count(distinct uu.ID_ ) as count,#{item.id} as orgId
            FROM
                uc_org uo
            INNER JOIN uc_org_user uou ON uou.ORG_ID_ = uo.ID_
                AND uou.IS_DELE_ = '0'
            INNER JOIN uc_user uu ON uou.USER_ID_ = uu.ID_
                AND uu.IS_DELE_ = '0'
            where
                uo.IS_DELE_ = '0'
                AND uo.IS_DELE_ = '0'
                AND uu.STATUS_ =1
                AND uo.path_ LIKE '${item.path}%'
        </foreach>
    </select>

    <select id="countSubOrg" parameterType="java.util.List"  resultType="java.util.Map">
        <foreach collection="list" index="index" item="item" open="(" separator=" union all " close=")">
            SELECT
                count(1) as count,#{item.id} as orgId
            FROM
                uc_org uo
            where
                uo.IS_DELE_ = '0'
                AND uo.path_ LIKE '${item.path}%'
        </foreach>
    </select>

    <select id="countPostByOrg" parameterType="java.util.List"  resultType="java.util.Map">
        <foreach collection="list" index="index" item="item" open="(" separator=" union all " close=")">
            SELECT
                count(1) as count,#{item.id} as orgId
            FROM
                uc_org uo
            INNER JOIN uc_org_post uop ON uop.ORG_ID_ = uo.ID_
                AND uop.IS_DELE_ = '0'
            where
                uo.IS_DELE_ = '0'
                AND uo.path_ LIKE '${item.path}%'
        </foreach>
    </select>

    <select id="getOrgByUserIds" parameterType="java.util.List"  resultType="com.hotent.uc.model.Org">
        SELECT
            uo.*,uou.user_id_ as orgUserId
        FROM
            ( SELECT * FROM uc_org_user WHERE user_id_ in
                <foreach collection="list" index="index" item="userId" open="(" separator="," close=")">
                    #{userId}
                </foreach>
                and is_dele_='0'
            ) uou
                INNER JOIN uc_org uo ON uou.org_id_ = uo.id_
        where  uou.is_dele_='0'
    </select>
</mapper>