<?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.plan.mapper.ProOrderMapper">

	<resultMap type="ProOrder" id="ProOrderResult">
		<result property="id"	column="id"	/>
		<result property="planFactoryCode"	column="plan_factory_code"	/>
		<result property="factoryCode"	column="factory_code"	/>
		<result property="orderType"	column="order_type"	/>
		<result property="orderCode"	column="order_code"	/>
		<result property="prodCode"	column="prod_code"	/>
		<result property="prodDesc"	column="prod_desc"	/>
		<result property="quantity"	column="quantity"	/>
		<result property="quantitySplit"	column="quantity_split"	/>
		<result property="unit"	column="unit"	/>
		<result property="workerOrder"	column="worker_order"	/>
		<result property="planProDate"	column="plan_pro_date"	/>
		<result property="planComplete"	column="plan_complete"	/>
		<result property="atrr1"	column="atrr1"	/>
		<result property="atrr2"	column="atrr2"	/>
		<result property="atrr3"	column="atrr3"	/>
		<result property="status"	column="status"	/>
		<result property="parentOrder"	column="parent_order"	/>
		<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="prodType"	column="prod_type"	/>
		<result property="prodSpc"	column="prod_spc"	/>
	</resultMap>

	<sql id="selectProOrderVo">
		select id, plan_factory_code, order_type, order_code, prod_code, prod_desc, quantity, quantity_split,
		       unit, worker_order, plan_pro_date, plan_complete, atrr1, atrr2, atrr3,
		       status, parent_order, create_by, create_time, update_by, update_time, prod_type,
			   factory_code, prod_spc
		from pro_order
	</sql>

	<select id="selectProOrderList" parameterType="ProOrder" resultMap="ProOrderResult">
		<include refid="selectProOrderVo"/>
		<where>
			<if test="planFactoryCode != null  and planFactoryCode != ''"> and plan_factory_code = #{planFactoryCode}</if>
			<if test="factoryCode != null  and factoryCode != ''"> and factory_code = #{factoryCode}</if>
			<if test="orderType != null  and orderType != ''"> and order_type = #{orderType}</if>
			<if test="orderCode != null  and orderCode != ''"> and order_code = #{orderCode}</if>
			<if test="prodCode != null  and prodCode != ''"> and prod_code = #{prodCode}</if>
			<if test="prodDesc != null  and prodDesc != ''"> and prod_desc like concat('%', #{prodDesc}, '%')</if>
			<if test="quantity != null "> and quantity = #{quantity}</if>
			<if test="unit != null  and unit != ''"> and unit = #{unit}</if>
			<if test="workerOrder != null  and workerOrder != ''"> and worker_order = #{workerOrder}</if>
			<if test="planProDate != null "> and plan_pro_date = #{planProDate}</if>
			<if test="planComplete != null "> and plan_complete = #{planComplete}</if>
			<if test="atrr1 != null  and atrr1 != ''"> and atrr1 = #{atrr1}</if>
			<if test="atrr2 != null  and atrr2 != ''"> and atrr2 = #{atrr2}</if>
			<if test="atrr3 != null  and atrr3 != ''"> and atrr3 = #{atrr3}</if>
			<if test="status != null  and status != ''"> and status = #{status}</if>
			<if test="parentOrder != null  and parentOrder != ''"> and parent_order = #{parentOrder}</if>
			<if test="prodType != null  and prodType != ''"> and prod_type = #{prodType}</if>
			<if test="prodSpc != null  and prodSpc != ''"> and prod_spc = #{prodSpc}</if>
			<if test="planDateStart != null "> and CONVERT(varchar(10),plan_pro_date, 120) >= '${planDateStart}'</if>
			<if test="planDateEnd != null "> and '${planDateEnd}%' >= CONVERT(varchar(10),plan_pro_date, 120)</if>
		</where>
		ORDER BY plan_pro_date DESC
	</select>

	<select id="selectProOrderById" parameterType="String" resultMap="ProOrderResult">
		<include refid="selectProOrderVo"/>
		where id = #{id}
	</select>

    <select id="selectConvert" resultType="com.op.plan.domain.Convert">
		SELECT dict_code dictCode , dict_label dictLabel , dict_value dictValue , dict_sort dictSort FROM sys_dict_data WHERE dict_type = 'convert_type'
	</select>

	<select id="selectChildProOrderByCode" parameterType="String" resultMap="ProOrderResult">
		<include refid="selectProOrderVo"/>
		where parent_order = #{orderCode}
	</select>

    <select id="selectProdLine" resultType="com.op.plan.domain.ProLine">
		SELECT equipment_id AS 'key', equipment_name AS 'label'
		FROM base_equipment
		WHERE equipment_type_code = 'equ_type_cxj'
	</select>

	<select id="selectProShift" resultType="com.op.plan.domain.ProShift">
		SELECT bst.Shift_Id shiftId,bst.Shift_Desc_Global shiftDesc
		FROM base_shifts_t bst
	</select>

	<select id="selectProdLineName" resultType="java.lang.String">
		SELECT equipment_name AS 'prodLineName'
		FROM base_equipment
		WHERE equipment_id = #{prodLineCode}
	</select>

	<select id="selectBatchCodes" resultType="java.lang.String">
		SELECT batch_code
		FROM pro_order_workorder_batch
		WHERE status = '1'
		GROUP BY batch_code
	</select>

	<select id="selectBatchNameByCode" resultType="java.lang.String">
		SELECT sf.factory_name
		FROM sys_factory sf
		WHERE sf.f_code = #{prodLineCode}
	</select>

	<select id="selectBatchCodesById" resultType="java.lang.String">
		SELECT powb.batch_code
		FROM pro_order_workorder_batch powb LEFT JOIN pro_order_workorder pow
		ON powb.workorder_id = pow.workorder_id
		WHERE pow.workorder_id = #{workorderId}
	</select>

	<select id="selectPackageLine" resultType="com.op.plan.domain.ProLine">
		SELECT equipment_id AS 'key', equipment_name AS 'label'
		FROM base_equipment
		WHERE equipment_type_code = 'equ_type_bzx'
	</select>

	<select id="selectShiftNameById" resultType="java.lang.String">
        SELECT bst.Shift_Desc_Global shiftDesc
		FROM base_shifts_t bst
		WHERE bst.Shift_Id = #{shiftId}
    </select>

    <select id="selectProOrderByOrderCode" parameterType="String" resultMap="ProOrderResult">
		<include refid="selectProOrderVo"/>
		where order_code = #{orderCode}
	</select>

    <insert id="insertProOrder" parameterType="ProOrder">
		insert into pro_order
		<trim prefix="(" suffix=")" suffixOverrides=",">
			<if test="id != null">id,</if>
			<if test="planFactoryCode != null">plan_factory_code,</if>
			<if test="factoryCode != null">factory_code,</if>
			<if test="orderType != null">order_type,</if>
			<if test="orderCode != null">order_code,</if>
			<if test="prodCode != null">prod_code,</if>
			<if test="prodDesc != null">prod_desc,</if>
			<if test="quantity != null">quantity,</if>
			<if test="quantitySplit != null">quantity_split,</if>
			<if test="unit != null">unit,</if>
			<if test="workerOrder != null">worker_order,</if>
			<if test="planProDate != null">plan_pro_date,</if>
			<if test="planComplete != null">plan_complete,</if>
			<if test="atrr1 != null">atrr1,</if>
			<if test="atrr2 != null">atrr2,</if>
			<if test="atrr3 != null">atrr3,</if>
			<if test="status != null">status,</if>
			<if test="parentOrder != null">parent_order,</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="prodType != null">prod_type,</if>
			<if test="prodSpc != null">prod_spc,</if>
		 </trim>
		<trim prefix="values (" suffix=")" suffixOverrides=",">
			<if test="id != null">#{id},</if>
			<if test="planFactoryCode != null">#{planFactoryCode},</if>
			<if test="factoryCode != null">#{factoryCode},</if>
			<if test="orderType != null">#{orderType},</if>
			<if test="orderCode != null">#{orderCode},</if>
			<if test="prodCode != null">#{prodCode},</if>
			<if test="prodDesc != null">#{prodDesc},</if>
			<if test="quantity != null">#{quantity},</if>
			<if test="quantitySplit != null">#{quantitySplit},</if>
			<if test="unit != null">#{unit},</if>
			<if test="workerOrder != null">#{workerOrder},</if>
			<if test="planProDate != null">#{planProDate},</if>
			<if test="planComplete != null">#{planComplete},</if>
			<if test="atrr1 != null">#{atrr1},</if>
			<if test="atrr2 != null">#{atrr2},</if>
			<if test="atrr3 != null">#{atrr3},</if>
			<if test="status != null">#{status},</if>
			<if test="parentOrder != null">#{parentOrder},</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="prodType != null">#{prodType},</if>
			<if test="prodSpc != null">#{prodSpc},</if>
		 </trim>
	</insert>

	<update id="updateProOrder" parameterType="ProOrder">
		update pro_order
		<trim prefix="SET" suffixOverrides=",">
			<if test="planFactoryCode != null">plan_factory_code = #{planFactoryCode},</if>
			<if test="factoryCode != null">factory_code = #{factoryCode},</if>
			<if test="orderType != null">order_type = #{orderType},</if>
			<if test="orderCode != null">order_code = #{orderCode},</if>
			<if test="prodCode != null">prod_code = #{prodCode},</if>
			<if test="prodDesc != null">prod_desc = #{prodDesc},</if>
			<if test="quantity != null">quantity = #{quantity},</if>
			<if test="quantitySplit != null">quantity_split = #{quantitySplit},</if>
			<if test="unit != null">unit = #{unit},</if>
			<if test="workerOrder != null">worker_order = #{workerOrder},</if>
			<if test="planProDate != null">plan_pro_date = #{planProDate},</if>
			<if test="planComplete != null">plan_complete = #{planComplete},</if>
			<if test="atrr1 != null">atrr1 = #{atrr1},</if>
			<if test="atrr2 != null">atrr2 = #{atrr2},</if>
			<if test="atrr3 != null">atrr3 = #{atrr3},</if>
			<if test="status != null">status = #{status},</if>
			<if test="parentOrder != null">parent_order = #{parentOrder},</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="prodType != null">prod_type = #{prodType},</if>
			<if test="prodSpc != null">prod_spc = #{prodSpc},</if>
		</trim>
		where id = #{id}
	</update>

	<update id="updateOrder">
		update pro_order
		<trim prefix="SET" suffixOverrides=",">
			<if test="atrr1 != null and quantitySplit != null">quantity_split += #{atrr1},</if>
			<if test="quantitySplit == null">quantity_split = #{atrr1},</if>
			<if test="updateBy != null">update_by = #{updateBy},</if>
			<if test="updateTime != null">update_time = #{updateTime},</if>
			<if test="status != null">status = #{status},</if>
		</trim>
		where id = #{id}
	</update>
    <update id="updateOrderBatch">
		<foreach collection="workers" item="worker" index="index" separator=";">
           update pro_order set quantity_split = quantity_split-#{worker.quantitySplit},
                                update_time = GETDATE()
           where id = #{worker.orderId}
		</foreach>
	</update>

	<update id="updateProOrderByOrderCode" parameterType="ProOrder">
		update pro_order
		<trim prefix="SET" suffixOverrides=",">
			<if test="planFactoryCode != null">plan_factory_code = #{planFactoryCode},</if>
			<if test="factoryCode != null">factory_code = #{factoryCode},</if>
			<if test="orderType != null">order_type = #{orderType},</if>
			<if test="orderCode != null">order_code = #{orderCode},</if>
			<if test="prodCode != null">prod_code = #{prodCode},</if>
			<if test="prodDesc != null">prod_desc = #{prodDesc},</if>
			<if test="quantity != null">quantity = #{quantity},</if>
			<if test="quantitySplit != null">quantity_split = #{quantitySplit},</if>
			<if test="unit != null">unit = #{unit},</if>
			<if test="workerOrder != null">worker_order = #{workerOrder},</if>
			<if test="planProDate != null">plan_pro_date = #{planProDate},</if>
			<if test="planComplete != null">plan_complete = #{planComplete},</if>
			<if test="atrr1 != null">atrr1 = #{atrr1},</if>
			<if test="atrr2 != null">atrr2 = #{atrr2},</if>
			<if test="atrr3 != null">atrr3 = #{atrr3},</if>
			<if test="status != null">status = #{status},</if>
			<if test="parentOrder != null">parent_order = #{parentOrder},</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="prodType != null">prod_type = #{prodType},</if>
			<if test="prodSpc != null">prod_spc = #{prodSpc},</if>
		</trim>
		where order_code = #{orderCode}
	</update>

	<delete id="deleteProOrderById" parameterType="String">
		delete from pro_order where id = #{id}
	</delete>

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