<?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.gx.obe.server.management.boq.dao.ObeSupplyMaterialDetailMapper">


	<!-- 通用查询映射结果 -->
	<resultMap id="BaseResultMap" type="com.gx.obe.server.management.boq.entity.ObeSupplyMaterialDetail">
		<id column="SUPPLY_MATERIAL_DETAIL_ID" property="id"/>
		<result column="TENDER_ID" property="tenderId"/>
		<result column="SUPPLIER_ID" property="supplierId"/>
		<result column="PROJECT_ID" property="projectId"/>
		<result column="NUMBER" property="number"/>
		<result column="NAME" property="name"/>
		<result column="SPECIFICATION" property="specification"/>
		<result column="UNIT" property="unit"/>
		<result column="QUANTITY" property="quantity"/>
		<result column="PRICE" property="price"/>
		<result column="TOTAL" property="total"/>
		<result column="QUALITY_GRADE" property="qualityGrade"/>
		<result column="SUPPLY_TIME" property="supplyTime"/>
		<result column="SERVICE_ADDRESS" property="serviceAddress"/>
		<result column="REMARK" property="remark"/>
		<result column="SORT_NO" property="sortNo"/>
	</resultMap>

	<!-- 通用查询结果列 -->
	<sql id="Base_Column_List">
		SUPPLY_MATERIAL_DETAIL_ID, TENDER_ID, SUPPLIER_ID, PROJECT_ID, NUMBER, NAME, SPECIFICATION, UNIT, QUANTITY, PRICE, TOTAL, QUALITY_GRADE, SUPPLY_TIME, SERVICE_ADDRESS, REMARK, SORT_NO
	</sql>

	<!-- 批量更新 -->
	<update id="updateBatchList" parameterType="java.util.List">
		UPDATE
			obe_supply_material_detail
		<set>
			TENDER_ID = 
			<foreach collection="ObeSupplyMaterialDetailList" item="ObeSupplyMaterialDetail" index="index" separator=" " open="case SUPPLY_MATERIAL_DETAIL_ID" close="end">
				<if test="ObeSupplyMaterialDetail.tenderId != null">
					when #{ObeSupplyMaterialDetail.id} then #{ObeSupplyMaterialDetail.tenderId}
				</if>
				<if test="ObeSupplyMaterialDetail.tenderId == null">
					when #{ObeSupplyMaterialDetail.id} then TENDER_ID
				</if>
			</foreach>
			SUPPLIER_ID = 
			<foreach collection="ObeSupplyMaterialDetailList" item="ObeSupplyMaterialDetail" index="index" separator=" " open="case SUPPLY_MATERIAL_DETAIL_ID" close="end">
				<if test="ObeSupplyMaterialDetail.supplierId != null">
					when #{ObeSupplyMaterialDetail.id} then #{ObeSupplyMaterialDetail.supplierId}
				</if>
				<if test="ObeSupplyMaterialDetail.supplierId == null">
					when #{ObeSupplyMaterialDetail.id} then SUPPLIER_ID
				</if>
			</foreach>
			PROJECT_ID = 
			<foreach collection="ObeSupplyMaterialDetailList" item="ObeSupplyMaterialDetail" index="index" separator=" " open="case SUPPLY_MATERIAL_DETAIL_ID" close="end">
				<if test="ObeSupplyMaterialDetail.projectId != null">
					when #{ObeSupplyMaterialDetail.id} then #{ObeSupplyMaterialDetail.projectId}
				</if>
				<if test="ObeSupplyMaterialDetail.projectId == null">
					when #{ObeSupplyMaterialDetail.id} then PROJECT_ID
				</if>
			</foreach>
			NUMBER = 
			<foreach collection="ObeSupplyMaterialDetailList" item="ObeSupplyMaterialDetail" index="index" separator=" " open="case SUPPLY_MATERIAL_DETAIL_ID" close="end">
				<if test="ObeSupplyMaterialDetail.number != null">
					when #{ObeSupplyMaterialDetail.id} then #{ObeSupplyMaterialDetail.number}
				</if>
				<if test="ObeSupplyMaterialDetail.number == null">
					when #{ObeSupplyMaterialDetail.id} then NUMBER
				</if>
			</foreach>
			NAME = 
			<foreach collection="ObeSupplyMaterialDetailList" item="ObeSupplyMaterialDetail" index="index" separator=" " open="case SUPPLY_MATERIAL_DETAIL_ID" close="end">
				<if test="ObeSupplyMaterialDetail.name != null">
					when #{ObeSupplyMaterialDetail.id} then #{ObeSupplyMaterialDetail.name}
				</if>
				<if test="ObeSupplyMaterialDetail.name == null">
					when #{ObeSupplyMaterialDetail.id} then NAME
				</if>
			</foreach>
			SPECIFICATION = 
			<foreach collection="ObeSupplyMaterialDetailList" item="ObeSupplyMaterialDetail" index="index" separator=" " open="case SUPPLY_MATERIAL_DETAIL_ID" close="end">
				<if test="ObeSupplyMaterialDetail.specification != null">
					when #{ObeSupplyMaterialDetail.id} then #{ObeSupplyMaterialDetail.specification}
				</if>
				<if test="ObeSupplyMaterialDetail.specification == null">
					when #{ObeSupplyMaterialDetail.id} then SPECIFICATION
				</if>
			</foreach>
			UNIT = 
			<foreach collection="ObeSupplyMaterialDetailList" item="ObeSupplyMaterialDetail" index="index" separator=" " open="case SUPPLY_MATERIAL_DETAIL_ID" close="end">
				<if test="ObeSupplyMaterialDetail.unit != null">
					when #{ObeSupplyMaterialDetail.id} then #{ObeSupplyMaterialDetail.unit}
				</if>
				<if test="ObeSupplyMaterialDetail.unit == null">
					when #{ObeSupplyMaterialDetail.id} then UNIT
				</if>
			</foreach>
			QUANTITY = 
			<foreach collection="ObeSupplyMaterialDetailList" item="ObeSupplyMaterialDetail" index="index" separator=" " open="case SUPPLY_MATERIAL_DETAIL_ID" close="end">
				<if test="ObeSupplyMaterialDetail.quantity != null">
					when #{ObeSupplyMaterialDetail.id} then #{ObeSupplyMaterialDetail.quantity}
				</if>
				<if test="ObeSupplyMaterialDetail.quantity == null">
					when #{ObeSupplyMaterialDetail.id} then QUANTITY
				</if>
			</foreach>
			PRICE = 
			<foreach collection="ObeSupplyMaterialDetailList" item="ObeSupplyMaterialDetail" index="index" separator=" " open="case SUPPLY_MATERIAL_DETAIL_ID" close="end">
				<if test="ObeSupplyMaterialDetail.price != null">
					when #{ObeSupplyMaterialDetail.id} then #{ObeSupplyMaterialDetail.price}
				</if>
				<if test="ObeSupplyMaterialDetail.price == null">
					when #{ObeSupplyMaterialDetail.id} then PRICE
				</if>
			</foreach>
			TOTAL = 
			<foreach collection="ObeSupplyMaterialDetailList" item="ObeSupplyMaterialDetail" index="index" separator=" " open="case SUPPLY_MATERIAL_DETAIL_ID" close="end">
				<if test="ObeSupplyMaterialDetail.total != null">
					when #{ObeSupplyMaterialDetail.id} then #{ObeSupplyMaterialDetail.total}
				</if>
				<if test="ObeSupplyMaterialDetail.total == null">
					when #{ObeSupplyMaterialDetail.id} then TOTAL
				</if>
			</foreach>
			QUALITY_GRADE = 
			<foreach collection="ObeSupplyMaterialDetailList" item="ObeSupplyMaterialDetail" index="index" separator=" " open="case SUPPLY_MATERIAL_DETAIL_ID" close="end">
				<if test="ObeSupplyMaterialDetail.qualityGrade != null">
					when #{ObeSupplyMaterialDetail.id} then #{ObeSupplyMaterialDetail.qualityGrade}
				</if>
				<if test="ObeSupplyMaterialDetail.qualityGrade == null">
					when #{ObeSupplyMaterialDetail.id} then QUALITY_GRADE
				</if>
			</foreach>
			SUPPLY_TIME = 
			<foreach collection="ObeSupplyMaterialDetailList" item="ObeSupplyMaterialDetail" index="index" separator=" " open="case SUPPLY_MATERIAL_DETAIL_ID" close="end">
				<if test="ObeSupplyMaterialDetail.supplyTime != null">
					when #{ObeSupplyMaterialDetail.id} then #{ObeSupplyMaterialDetail.supplyTime}
				</if>
				<if test="ObeSupplyMaterialDetail.supplyTime == null">
					when #{ObeSupplyMaterialDetail.id} then SUPPLY_TIME
				</if>
			</foreach>
			SERVICE_ADDRESS = 
			<foreach collection="ObeSupplyMaterialDetailList" item="ObeSupplyMaterialDetail" index="index" separator=" " open="case SUPPLY_MATERIAL_DETAIL_ID" close="end">
				<if test="ObeSupplyMaterialDetail.serviceAddress != null">
					when #{ObeSupplyMaterialDetail.id} then #{ObeSupplyMaterialDetail.serviceAddress}
				</if>
				<if test="ObeSupplyMaterialDetail.serviceAddress == null">
					when #{ObeSupplyMaterialDetail.id} then SERVICE_ADDRESS
				</if>
			</foreach>
			REMARK = 
			<foreach collection="ObeSupplyMaterialDetailList" item="ObeSupplyMaterialDetail" index="index" separator=" " open="case SUPPLY_MATERIAL_DETAIL_ID" close="end">
				<if test="ObeSupplyMaterialDetail.remark != null">
					when #{ObeSupplyMaterialDetail.id} then #{ObeSupplyMaterialDetail.remark}
				</if>
				<if test="ObeSupplyMaterialDetail.remark == null">
					when #{ObeSupplyMaterialDetail.id} then REMARK
				</if>
			</foreach>
			SORT_NO = 
			<foreach collection="ObeSupplyMaterialDetailList" item="ObeSupplyMaterialDetail" index="index" separator=" " open="case SUPPLY_MATERIAL_DETAIL_ID" close="end">
				<if test="ObeSupplyMaterialDetail.sortNo != null">
					when #{ObeSupplyMaterialDetail.id} then #{ObeSupplyMaterialDetail.sortNo}
				</if>
				<if test="ObeSupplyMaterialDetail.sortNo == null">
					when #{ObeSupplyMaterialDetail.id} then SORT_NO
				</if>
			</foreach>
		</set>
		<where>
			SUPPLY_MATERIAL_DETAIL_ID IN
			<foreach collection="ObeSupplyMaterialDetailList" item="ObeSupplyMaterialDetail" index="index" separator="," open="(" close=")">
            	#{ObeSupplyMaterialDetail.id}
        	</foreach>
		</where>
	</update>

	<!-- 批量插入-->
	<insert id="insertByBatch" parameterType="java.util.List">
		insert into obe_supply_material_detail 
			(
				SUPPLY_MATERIAL_DETAIL_ID, TENDER_ID, SUPPLIER_ID, PROJECT_ID, NUMBER, NAME, SPECIFICATION, UNIT, QUANTITY, PRICE, TOTAL, QUALITY_GRADE, SUPPLY_TIME, SERVICE_ADDRESS, REMARK, SORT_NO
			)
		values
		<foreach collection="ObeSupplyMaterialDetailList" item="ObeSupplyMaterialDetail" index="index" open="" close="" separator=",">
			(
				#{ObeSupplyMaterialDetail.id}, 
				#{ObeSupplyMaterialDetail.tenderId},
				#{ObeSupplyMaterialDetail.supplierId},
				#{ObeSupplyMaterialDetail.projectId},
				#{ObeSupplyMaterialDetail.number},
				#{ObeSupplyMaterialDetail.name},
				#{ObeSupplyMaterialDetail.specification},
				#{ObeSupplyMaterialDetail.unit},
				#{ObeSupplyMaterialDetail.quantity},
				#{ObeSupplyMaterialDetail.price},
				#{ObeSupplyMaterialDetail.total},
				#{ObeSupplyMaterialDetail.qualityGrade},
				#{ObeSupplyMaterialDetail.supplyTime},
				#{ObeSupplyMaterialDetail.serviceAddress},
				#{ObeSupplyMaterialDetail.remark},
				#{ObeSupplyMaterialDetail.sortNo}
			)
		</foreach>
	</insert> 

	<!-- 指定字段修改 -->
	<update id="updateAssignProperty">
		UPDATE
			obe_supply_material_detail
		<set>
			<foreach collection="attributes" item="attribute" index="index" open="" close="" separator=",">
				<if test="attribute == 'tenderId'">
					TENDER_ID = #{ObeSupplyMaterialDetail.tenderId}
				</if>
				<if test="attribute == 'supplierId'">
					SUPPLIER_ID = #{ObeSupplyMaterialDetail.supplierId}
				</if>
				<if test="attribute == 'projectId'">
					PROJECT_ID = #{ObeSupplyMaterialDetail.projectId}
				</if>
				<if test="attribute == 'number'">
					NUMBER = #{ObeSupplyMaterialDetail.number}
				</if>
				<if test="attribute == 'name'">
					NAME = #{ObeSupplyMaterialDetail.name}
				</if>
				<if test="attribute == 'specification'">
					SPECIFICATION = #{ObeSupplyMaterialDetail.specification}
				</if>
				<if test="attribute == 'unit'">
					UNIT = #{ObeSupplyMaterialDetail.unit}
				</if>
				<if test="attribute == 'quantity'">
					QUANTITY = #{ObeSupplyMaterialDetail.quantity}
				</if>
				<if test="attribute == 'price'">
					PRICE = #{ObeSupplyMaterialDetail.price}
				</if>
				<if test="attribute == 'total'">
					TOTAL = #{ObeSupplyMaterialDetail.total}
				</if>
				<if test="attribute == 'qualityGrade'">
					QUALITY_GRADE = #{ObeSupplyMaterialDetail.qualityGrade}
				</if>
				<if test="attribute == 'supplyTime'">
					SUPPLY_TIME = #{ObeSupplyMaterialDetail.supplyTime}
				</if>
				<if test="attribute == 'serviceAddress'">
					SERVICE_ADDRESS = #{ObeSupplyMaterialDetail.serviceAddress}
				</if>
				<if test="attribute == 'remark'">
					REMARK = #{ObeSupplyMaterialDetail.remark}
				</if>
				<if test="attribute == 'sortNo'">
					SORT_NO = #{ObeSupplyMaterialDetail.sortNo}
				</if>
			</foreach>
		</set>
		<where>
			SUPPLY_MATERIAL_DETAIL_ID = #{ObeSupplyMaterialDetail.id}
		</where>
	</update>

	<!-- 批量指定字段修改 -->
	<update id="batchUpdateProperty">
		UPDATE
			obe_supply_material_detail
		<set>
			<foreach collection="attributes" item="attribute" index="index" open="" close="" separator=",">
				<if test="attribute == 'tenderId'">
					TENDER_ID = 
					<foreach collection="ObeSupplyMaterialDetailList" item="ObeSupplyMaterialDetail" index="index" separator=" " open="case SUPPLY_MATERIAL_DETAIL_ID" close="end">
            			when #{ObeSupplyMaterialDetail.id} then #{ObeSupplyMaterialDetail.tenderId}
        			</foreach>
				</if>
				<if test="attribute == 'supplierId'">
					SUPPLIER_ID = 
					<foreach collection="ObeSupplyMaterialDetailList" item="ObeSupplyMaterialDetail" index="index" separator=" " open="case SUPPLY_MATERIAL_DETAIL_ID" close="end">
            			when #{ObeSupplyMaterialDetail.id} then #{ObeSupplyMaterialDetail.supplierId}
        			</foreach>
				</if>
				<if test="attribute == 'projectId'">
					PROJECT_ID = 
					<foreach collection="ObeSupplyMaterialDetailList" item="ObeSupplyMaterialDetail" index="index" separator=" " open="case SUPPLY_MATERIAL_DETAIL_ID" close="end">
            			when #{ObeSupplyMaterialDetail.id} then #{ObeSupplyMaterialDetail.projectId}
        			</foreach>
				</if>
				<if test="attribute == 'number'">
					NUMBER = 
					<foreach collection="ObeSupplyMaterialDetailList" item="ObeSupplyMaterialDetail" index="index" separator=" " open="case SUPPLY_MATERIAL_DETAIL_ID" close="end">
            			when #{ObeSupplyMaterialDetail.id} then #{ObeSupplyMaterialDetail.number}
        			</foreach>
				</if>
				<if test="attribute == 'name'">
					NAME = 
					<foreach collection="ObeSupplyMaterialDetailList" item="ObeSupplyMaterialDetail" index="index" separator=" " open="case SUPPLY_MATERIAL_DETAIL_ID" close="end">
            			when #{ObeSupplyMaterialDetail.id} then #{ObeSupplyMaterialDetail.name}
        			</foreach>
				</if>
				<if test="attribute == 'specification'">
					SPECIFICATION = 
					<foreach collection="ObeSupplyMaterialDetailList" item="ObeSupplyMaterialDetail" index="index" separator=" " open="case SUPPLY_MATERIAL_DETAIL_ID" close="end">
            			when #{ObeSupplyMaterialDetail.id} then #{ObeSupplyMaterialDetail.specification}
        			</foreach>
				</if>
				<if test="attribute == 'unit'">
					UNIT = 
					<foreach collection="ObeSupplyMaterialDetailList" item="ObeSupplyMaterialDetail" index="index" separator=" " open="case SUPPLY_MATERIAL_DETAIL_ID" close="end">
            			when #{ObeSupplyMaterialDetail.id} then #{ObeSupplyMaterialDetail.unit}
        			</foreach>
				</if>
				<if test="attribute == 'quantity'">
					QUANTITY = 
					<foreach collection="ObeSupplyMaterialDetailList" item="ObeSupplyMaterialDetail" index="index" separator=" " open="case SUPPLY_MATERIAL_DETAIL_ID" close="end">
            			when #{ObeSupplyMaterialDetail.id} then #{ObeSupplyMaterialDetail.quantity}
        			</foreach>
				</if>
				<if test="attribute == 'price'">
					PRICE = 
					<foreach collection="ObeSupplyMaterialDetailList" item="ObeSupplyMaterialDetail" index="index" separator=" " open="case SUPPLY_MATERIAL_DETAIL_ID" close="end">
            			when #{ObeSupplyMaterialDetail.id} then #{ObeSupplyMaterialDetail.price}
        			</foreach>
				</if>
				<if test="attribute == 'total'">
					TOTAL = 
					<foreach collection="ObeSupplyMaterialDetailList" item="ObeSupplyMaterialDetail" index="index" separator=" " open="case SUPPLY_MATERIAL_DETAIL_ID" close="end">
            			when #{ObeSupplyMaterialDetail.id} then #{ObeSupplyMaterialDetail.total}
        			</foreach>
				</if>
				<if test="attribute == 'qualityGrade'">
					QUALITY_GRADE = 
					<foreach collection="ObeSupplyMaterialDetailList" item="ObeSupplyMaterialDetail" index="index" separator=" " open="case SUPPLY_MATERIAL_DETAIL_ID" close="end">
            			when #{ObeSupplyMaterialDetail.id} then #{ObeSupplyMaterialDetail.qualityGrade}
        			</foreach>
				</if>
				<if test="attribute == 'supplyTime'">
					SUPPLY_TIME = 
					<foreach collection="ObeSupplyMaterialDetailList" item="ObeSupplyMaterialDetail" index="index" separator=" " open="case SUPPLY_MATERIAL_DETAIL_ID" close="end">
            			when #{ObeSupplyMaterialDetail.id} then #{ObeSupplyMaterialDetail.supplyTime}
        			</foreach>
				</if>
				<if test="attribute == 'serviceAddress'">
					SERVICE_ADDRESS = 
					<foreach collection="ObeSupplyMaterialDetailList" item="ObeSupplyMaterialDetail" index="index" separator=" " open="case SUPPLY_MATERIAL_DETAIL_ID" close="end">
            			when #{ObeSupplyMaterialDetail.id} then #{ObeSupplyMaterialDetail.serviceAddress}
        			</foreach>
				</if>
				<if test="attribute == 'remark'">
					REMARK = 
					<foreach collection="ObeSupplyMaterialDetailList" item="ObeSupplyMaterialDetail" index="index" separator=" " open="case SUPPLY_MATERIAL_DETAIL_ID" close="end">
            			when #{ObeSupplyMaterialDetail.id} then #{ObeSupplyMaterialDetail.remark}
        			</foreach>
				</if>
				<if test="attribute == 'sortNo'">
					SORT_NO = 
					<foreach collection="ObeSupplyMaterialDetailList" item="ObeSupplyMaterialDetail" index="index" separator=" " open="case SUPPLY_MATERIAL_DETAIL_ID" close="end">
            			when #{ObeSupplyMaterialDetail.id} then #{ObeSupplyMaterialDetail.sortNo}
        			</foreach>
				</if>
			</foreach>
		</set>
		<where>
			SUPPLY_MATERIAL_DETAIL_ID IN
			<foreach collection="ObeSupplyMaterialDetailList" item="ObeSupplyMaterialDetail" index="index" separator="," open="(" close=")">
            	#{ObeSupplyMaterialDetail.id}
        	</foreach>
		</where>
	</update>

	<delete id="deleteByTenderId">
		DELETE
		FROM OBE_SUPPLY_MATERIAL_DETAIL
		WHERE TENDER_ID = #{tenderId}
	</delete>

	<select id="getSupplyMaterialDetailListByProjectId" resultMap="BaseResultMap">
		SELECT *
		FROM OBE_SUPPLY_MATERIAL_DETAIL
		WHERE PROJECT_ID = #{projectId}
		ORDER BY SORT_NO
	</select>

</mapper>