INSERT INTO mall_delivery (order_id, carrier, tracking_no, status, receiver_name, address, shipped_at) VALUES (#{orderId}, #{carrier}, #{trackingNo}, COALESCE(#{status},'READY'), #{receiverName}, #{address}, #{shippedAt}) UPDATE mall_delivery SET carrier=#{carrier}, tracking_no=#{trackingNo}, status=COALESCE(#{status},status), receiver_name=#{receiverName}, address=#{address} WHERE id=#{id} UPDATE mall_delivery SET status=#{status}, shipped_at = CASE WHEN #{status}='IN_TRANSIT' AND shipped_at IS NULL THEN NOW() ELSE shipped_at END, delivered_at = CASE WHEN #{status}='DELIVERED' THEN NOW() ELSE delivered_at END WHERE id=#{id}