<!-- mapper implementation should insert outbound record and details based on application id -->
INSERT INTO jl_key_dm_outbound_record(id,outbound_no,outbound_type,outbound_date,receiver_id,receiver_name,receiver_department_id,receiver_department_name,outbound_status,remark,is_used,create_by,create_time)
SET inbound_no=#{inbound_no},batch_no=#{batch_no},inbound_date=#{inbound_date},storage_location=#{storage_location},remark=#{remark},update_by=#{_user.id},update_time=NOW()
WHERE id = #{id}
</update>
<updateid="delete"parameterType="map">
UPDATE jl_key_dm_inbound_record SET is_used = 0, update_by = #{_user.id}, update_time = NOW() WHERE id = #{id}
</update>
<updateid="doInbound"parameterType="map">
UPDATE jl_key_dm_inbound_record SET inbound_status = 1, inbound_date = NOW(), update_by = #{_user.id}, update_time = NOW() WHERE id = #{id} AND inbound_status = 0
INSERT INTO jl_key_dm_inbound_record(id,inbound_no,batch_no,inbound_date,inbound_type,storage_location,inbound_status,remark,is_used,create_by,create_time)
SELECT l.user_id AS uid, l.user_name AS uname, 1 AS leave_app, 0 AS leave_approve, 0 AS borrow_app, 0 AS inbound_cnt, COALESCE(l.duration,0) AS leave_duration
FROM jl_key_dm_leave_application l
WHERE l.create_time BETWEEN #{params.start} AND #{params.end}
UNION ALL
SELECT r.approver_id AS uid, r.approver_name AS uname, 0, CASE WHEN r.approver_result = 1 THEN 1 ELSE 0 END, 0, 0, 0
FROM jl_key_dm_leave_approval_record r
WHERE r.approver_time BETWEEN #{params.start} AND #{params.end}
UNION ALL
SELECT b.applicant_id AS uid, b.applicant_name AS uname, 0, 0, 1, 0, 0
FROM jl_key_dm_borrow_application b
WHERE b.create_time BETWEEN #{params.start} AND #{params.end}
UNION ALL
SELECT o.receiver_id AS uid, o.receiver_name AS uname, 0, 0, 0, 1, 0
FROM jl_key_dm_outbound_record o
WHERE o.create_time BETWEEN #{params.start} AND #{params.end}
) t
GROUP BY uid, uname
ORDER BY leave_applications DESC, borrow_applications DESC