<?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.op.quality.mapper.QcUserMaterialMapper">
	
	<resultMap type="QcUserMaterial" id="QcUserMaterialResult">
		<result property="id"	column="id"	/>
		<result property="userCode"	column="user_code"	/>
		<result property="userName"	column="user_name"	/>
		<result property="materialCode"	column="material_code"	/>
		<result property="materialName"	column="material_name"	/>
		<result property="attr1"	column="attr1"	/>
		<result property="attr2"	column="attr2"	/>
		<result property="attr3"	column="attr3"	/>
		<result property="attr4"	column="attr4"	/>
		<result property="userId" column="user_id"/>
		<result property="createBy"	column="create_by"	/>
		<result property="createTime"	column="create_time"	/>
		<result property="updateBy"	column="update_by"	/>
		<result property="updateTime"	column="update_time"	/>
		<result property="factoryCode"	column="factory_code"	/>
		<result property="delFlag"	column="del_flag"	/>
	</resultMap>

	<sql id="selectQcUserMaterialVo">
		select id, user_code, user_name, material_code, material_name, attr1, attr2, attr3, attr4,
		       create_by, create_time, update_by, update_time, factory_code, del_flag from qc_user_material
	</sql>

	<select id="selectUserList" parameterType="QcUserMaterial" resultMap="QcUserMaterialResult">
		SELECT
		    t.user_id,
		    t.user_name as user_code,
		    t.nick_name as user_name,
		    t.phonenumber,
		    t.email,
			STRING_AGG(bp.product_desc_zh, ',') materialNames,
			t.status,
		    t.create_time
		FROM
			sys_user t
			LEFT JOIN lanju_op_xiaolan_ds.dbo.qc_user_material um ON um.user_code = t.user_name
			LEFT JOIN lanju_op_xiaolan_ds.dbo.base_product bp ON bp.product_code = um.material_code
		WHERE t.del_flag = '0'
		<if test="userName != null  and userName != ''"> and t.nick_name like concat('%', #{userName}, '%')</if>
		<if test="phonenumber != null  and phonenumber != ''"> and t.phonenumber like concat('%', #{phonenumber}, '%')</if>
		GROUP BY t.user_id,t.user_name,t.nick_name,t.phonenumber,t.email,t.status,t.create_time


	</select>

	<select id="selectQcUserMaterialList" parameterType="QcUserMaterial" resultMap="QcUserMaterialResult">
		<include refid="selectQcUserMaterialVo"/>
		<where>  
			<if test="userCode != null  and userCode != ''"> and user_code = #{userCode}</if>
			<if test="userName != null  and userName != ''"> and user_name like concat('%', #{userName}, '%')</if>
			<if test="materialCode != null  and materialCode != ''"> and material_code = #{materialCode}</if>
			<if test="materialName != null  and materialName != ''"> and material_name like concat('%', #{materialName}, '%')</if>
			<if test="attr1 != null  and attr1 != ''"> and attr1 = #{attr1}</if>
			<if test="attr2 != null  and attr2 != ''"> and attr2 = #{attr2}</if>
			<if test="attr3 != null  and attr3 != ''"> and attr3 = #{attr3}</if>
			<if test="attr4 != null  and attr4 != ''"> and attr4 = #{attr4}</if>
			<if test="factoryCode != null  and factoryCode != ''"> and factory_code = #{factoryCode}</if>
		</where>
	</select>

	<select id="selectUserByUserCode" parameterType="QcUserMaterial" resultMap="QcUserMaterialResult">
		SELECT
			user_id,
			user_name as user_code,
			nick_name as user_name,
			phonenumber,
			create_time
		FROM sys_user
		WHERE user_name = #{userCode}
	</select>

	<select id="selectQcUserMaterialById" parameterType="String" resultMap="QcUserMaterialResult">
		<include refid="selectQcUserMaterialVo"/>
		where id = #{id}
	</select>

	<select id="getUserMaterialListUndo" resultType="com.op.quality.domain.QcUserMaterial">
		select
		    bp.product_code materialCode,
			concat(bp.product_desc_zh,'(',bp.product_code,')') label,
			concat(bp.product_desc_zh,'(',bp.product_code,')') materialName,
			bp.product_id materialId
		from base_product bp
		where  bp.active_flag = '1' and bp.del_flag = '0'
			and bp.product_code not in (
				select um.material_code
				from qc_user_material um
				where um.user_code in
				<foreach item="userCode" collection="userCodes" open="(" separator="," close=")">
					#{userCode}
				</foreach>
		)
		<if test="materialName != null and materialName != ''"> and bp.product_desc_zh like concat('%', #{materialName}, '%')</if>
	</select>

	<select id="getUserMaterialListDo" resultType="com.op.quality.domain.QcUserMaterial">
		select distinct um.material_code materialCode,
				concat(bp.product_desc_zh,'(',bp.product_code,')') label
		from qc_user_material um
		left join base_product bp on um.material_code = bp.product_code
		where um.user_code in
				<foreach item="userCode" collection="userCodes" open="(" separator="," close=")">
					#{userCode}
				</foreach>
		<if test="materialName != null and materialName != ''"> and bp.product_desc_zh like concat('%', #{materialName}, '%')</if>
	</select>

	<insert id="insertQcUserMaterial" parameterType="QcUserMaterial">
		insert into qc_user_material
		<trim prefix="(" suffix=")" suffixOverrides=",">
			<if test="id != null">id,</if>
			<if test="userCode != null">user_code,</if>
			<if test="userName != null">user_name,</if>
			<if test="materialCode != null">material_code,</if>
			<if test="materialName != null">material_name,</if>
			<if test="attr1 != null">attr1,</if>
			<if test="attr2 != null">attr2,</if>
			<if test="attr3 != null">attr3,</if>
			<if test="attr4 != null">attr4,</if>
			<if test="createBy != null">create_by,</if>
			<if test="createTime != null">create_time,</if>
			<if test="updateBy != null">update_by,</if>
			<if test="updateTime != null">update_time,</if>
			<if test="factoryCode != null and factoryCode != ''">factory_code,</if>
			<if test="delFlag != null">del_flag,</if>
		 </trim>
		<trim prefix="values (" suffix=")" suffixOverrides=",">
			<if test="id != null">#{id},</if>
			<if test="userCode != null">#{userCode},</if>
			<if test="userName != null">#{userName},</if>
			<if test="materialCode != null">#{materialCode},</if>
			<if test="materialName != null">#{materialName},</if>
			<if test="attr1 != null">#{attr1},</if>
			<if test="attr2 != null">#{attr2},</if>
			<if test="attr3 != null">#{attr3},</if>
			<if test="attr4 != null">#{attr4},</if>
			<if test="createBy != null">#{createBy},</if>
			<if test="createTime != null">#{createTime},</if>
			<if test="updateBy != null">#{updateBy},</if>
			<if test="updateTime != null">#{updateTime},</if>
			<if test="factoryCode != null and factoryCode != ''">#{factoryCode},</if>
			<if test="delFlag != null">#{delFlag},</if>
		 </trim>
	</insert>

	<update id="updateQcUserMaterial" parameterType="QcUserMaterial">
		update qc_user_material
		<trim prefix="SET" suffixOverrides=",">
			<if test="userCode != null">user_code = #{userCode},</if>
			<if test="userName != null">user_name = #{userName},</if>
			<if test="materialCode != null">material_code = #{materialCode},</if>
			<if test="materialName != null">material_name = #{materialName},</if>
			<if test="attr1 != null">attr1 = #{attr1},</if>
			<if test="attr2 != null">attr2 = #{attr2},</if>
			<if test="attr3 != null">attr3 = #{attr3},</if>
			<if test="attr4 != null">attr4 = #{attr4},</if>
			<if test="createBy != null">create_by = #{createBy},</if>
			<if test="createTime != null">create_time = #{createTime},</if>
			<if test="updateBy != null">update_by = #{updateBy},</if>
			<if test="updateTime != null">update_time = #{updateTime},</if>
			<if test="factoryCode != null and factoryCode != ''">factory_code = #{factoryCode},</if>
			<if test="delFlag != null">del_flag = #{delFlag},</if>
		</trim>
		where id = #{id}
	</update>

	<delete id="deleteQcUserMaterialByUserCode" parameterType="String">
		delete from qc_user_material where user_code = #{userCode}
	</delete>

	<delete id="deleteQcUserMaterialByUserCodes" parameterType="String">
		delete from qc_user_material where user_code in
		<foreach item="userCode" collection="array" open="(" separator="," close=")">
			#{userCode}
		</foreach>
	</delete>
</mapper>